--- old/exception_lists/copyright	Fri Dec 21 14:59:53 2018
+++ new/exception_lists/copyright	Fri Dec 21 14:59:53 2018
@@ -24,6 +24,7 @@
 # Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
 # Copyright (c) 2011 by Delphix. All rights reserved.
 # Copyright 2018 OmniOS Community Edition (OmniOSce) Association.
+# Copyright (c) 2018, Joyent, Inc.
 #
 
 syntax: glob
@@ -397,6 +398,7 @@
 usr/src/tools/btxld/elfh.c
 usr/src/tools/btxld/elfh.h
 usr/src/tools/btxld/imgact_aout.h
+usr/src/tools/smatch/src/*
 usr/src/uts/intel/nsmb/ioc_check.ref
 usr/src/uts/intel/os/splashimage.xpm
 usr/src/uts/common/gssapi/mechs/krb5/crypto/block_size.c
--- old/exception_lists/cstyle	Fri Dec 21 14:59:53 2018
+++ new/exception_lists/cstyle	Fri Dec 21 14:59:53 2018
@@ -623,6 +623,7 @@
 usr/src/tools/btxld/elfh.c
 usr/src/tools/btxld/elfh.h
 usr/src/tools/btxld/imgact_aout.h
+usr/src/tools/smatch/src/*
 usr/src/uts/common/fs/zfs/lua/*
 usr/src/uts/common/gssapi/gssapi.h
 usr/src/uts/common/gssapi/mechs/krb5/crypto/block_size.c
--- old/exception_lists/hdrchk	Fri Dec 21 14:59:53 2018
+++ new/exception_lists/hdrchk	Fri Dec 21 14:59:53 2018
@@ -168,6 +168,7 @@
 usr/src/lib/libsmbfs/smb/derparse.h
 usr/src/lib/libsmbfs/smb/spnegoparse.h
 usr/src/tools/btxld/*
+usr/src/tools/smatch/src/*
 usr/src/uts/common/gssapi/mechs/krb5/include/aes_s2k.h
 usr/src/uts/common/gssapi/mechs/krb5/include/auth_con.h
 usr/src/uts/common/gssapi/mechs/krb5/include/cksumtypes.h
--- old/exception_lists/manlint	Fri Dec 21 14:59:53 2018
+++ new/exception_lists/manlint	Fri Dec 21 14:59:53 2018
@@ -24,3 +24,4 @@
 usr/src/lib/libbsm/adt_record.xsl.1
 usr/src/lib/libpool/dtd/rm_pool.dtd.1
 usr/src/lib/libzonecfg/dtd/zonecfg.dtd.1
+usr/src/tools/smatch/src/*
--- old/exception_lists/packaging	Fri Dec 21 14:59:54 2018
+++ new/exception_lists/packaging	Fri Dec 21 14:59:54 2018
@@ -1012,3 +1012,9 @@
 lib/libcustr.so
 lib/llib-lcustr
 lib/llib-lcustr.ln
+
+#
+# smatch is delivered and used only with the source tree
+#
+opt/onbld/bin/i386/smatch	i386
+opt/onbld/share/smatch
--- old/exception_lists/wscheck	Fri Dec 21 14:59:54 2018
+++ new/exception_lists/wscheck	Fri Dec 21 14:59:54 2018
@@ -13,3 +13,4 @@
 syntax: glob
 
 usr/src/uts/common/io/qede/*
+usr/src/tools/smatch/src/*
--- old/usr/src/Makefile.master	Fri Dec 21 14:59:54 2018
+++ new/usr/src/Makefile.master	Fri Dec 21 14:59:54 2018
@@ -28,6 +28,7 @@
 # Copyright 2015 Igor Kozhukhov <ikozhukhov@gmail.com>
 # Copyright 2016 Toomas Soome <tsoome@me.com>
 # Copyright 2018 OmniOS Community Edition (OmniOSce) Association.
+# Copyright (c) 2018, Joyent, Inc.
 #
 
 #
@@ -435,6 +436,9 @@
 $(RELEASE_BUILD)CERRWARN += -_gcc=-Wno-unused
 $(RELEASE_BUILD)CERRWARN += -_gcc=-Wno-empty-body
 
+CERRWARN += -_smatch=-p=illumos_user
+include $(SRC)/Makefile.smatch
+
 #
 # turn warnings into errors (C++)
 CCERRWARN=		-xwe
--- /dev/null	Fri Dec 21 14:59:54 2018
+++ new/usr/src/Makefile.smatch	Fri Dec 21 14:59:54 2018
@@ -0,0 +1,39 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source.  A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+#
+# Copyright 2018 Joyent, Inc.
+#
+
+#
+# smatch/sparse checks we always disable, due to too many false positives (or
+# simply too much legacy).
+#
+
+SMATCH_ARGS = --disable=uninitialized,check_check_deref,unreachable
+
+# VLAs are OK by us
+SMATCH_ARGS += -Wno-vla
+# don't care
+SMATCH_ARGS += -Wno-one-bit-signed-bitfield
+# there are lots of "extern void myfunc() { ... }" around
+SMATCH_ARGS += -Wno-external-function-has-definition
+# we have lots of legacy "void foo();" in headers
+SMATCH_ARGS += -Wno-old-style-definition
+SMATCH_ARGS += -Wno-strict-prototypes
+
+CERRWARN += $(SMATCH_ARGS:%=-_smatch=%)
+
+CERRWARN += $(SMOFF:%=-_smatch=--disable=%)
+
+SMATCH_ =
+SMATCH_on =
+SMATCH_off = -_smatch=off
+
+CERRWARN += $(SMATCH_$(SMATCH))
--- old/usr/src/cmd/bnu/Makefile.inc	Fri Dec 21 14:59:54 2018
+++ new/usr/src/cmd/bnu/Makefile.inc	Fri Dec 21 14:59:54 2018
@@ -22,6 +22,8 @@
 # Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
+# Copyright (c) 2018, Joyent, Inc.
+#
 
 SRCS =		account.c anlwrk.c bnuconvert.c callers.c		\
 		chremdir.c cntrl.c conn.c cpmv.c ct.c			\
@@ -46,6 +48,9 @@
 CERRWARN	+= -_gcc=-Wno-extra
 CERRWARN	+= -_gcc=-Wno-implicit-function-declaration
 
+# "parse error: parsing (arg (9223372034707292160-0,2-s32max) == 2)"
+SMATCH		= off
+
 TLILIB =	-lnsl -lsocket
 PAMLIB =        -lpam
 
--- old/usr/src/cmd/cmd-inet/usr.bin/pppd/Makefile	Fri Dec 21 14:59:54 2018
+++ new/usr/src/cmd/cmd-inet/usr.bin/pppd/Makefile	Fri Dec 21 14:59:54 2018
@@ -4,6 +4,7 @@
 #
 # cmd/cmd-inet/usr.bin/pppd/Makefile
 #
+# Copyright (c) 2018, Joyent, Inc.
 
 include		../../../Makefile.cmd
 include		Makefile.def
@@ -52,6 +53,9 @@
 
 CERRWARN +=	-_gcc=-Wno-uninitialized
 
+# main() is too hairy for smatch
+SMATCH=off
+
 # This is used *only* for testing the portability of the libraries
 # required for MS-CHAPv1.  It is not needed in any normal system and
 # is not built by default.
--- old/usr/src/cmd/deroff/Makefile	Fri Dec 21 14:59:55 2018
+++ new/usr/src/cmd/deroff/Makefile	Fri Dec 21 14:59:55 2018
@@ -22,6 +22,7 @@
 #
 # Copyright (c) 1989 by Sun Microsystems, Inc.
 #
+# Copyright (c) 2018, Joyent, Inc.
 
 PROG= deroff
 
@@ -31,9 +32,12 @@
 CERRWARN += -_gcc=-Wno-unused-label
 CERRWARN += -_gcc=-Wno-parentheses
 
+# too hairy for smatch
+SMATCH=off
+
 .KEEP_STATE:
 
-all: $(PROG) 
+all: $(PROG)
 
 install: all $(ROOTPROG)
 
--- old/usr/src/cmd/devctl/Makefile	Fri Dec 21 14:59:55 2018
+++ new/usr/src/cmd/devctl/Makefile	Fri Dec 21 14:59:55 2018
@@ -23,6 +23,7 @@
 # Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
+# # Copyright (c) 2018, Joyent, Inc.
 
 PROG= devctl
 
@@ -32,7 +33,7 @@
 
 CFLAGS +=	$(CCVERBOSE)
 CERRWARN +=	-_gcc=-Wno-parentheses
-LDLIBS += -ldevice -l devinfo
+LDLIBS += -ldevice -ldevinfo
 
 all: $(PROG)
 
--- old/usr/src/cmd/fs.d/smbclnt/test/Makefile	Fri Dec 21 14:59:55 2018
+++ new/usr/src/cmd/fs.d/smbclnt/test/Makefile	Fri Dec 21 14:59:55 2018
@@ -22,6 +22,7 @@
 # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 # Copyright 2013 Nexenta Systems, Inc.  All rights reserved.
+# Copyright (c) 2018, Joyent, Inc.
 #
 
 include $(SRC)/cmd/Makefile.cmd
@@ -43,7 +44,7 @@
 CPPFLAGS += -I../../../../uts/common
 CPPFLAGS += -I../../../../lib/libsmbfs
 
-LDLIBS += -R '$$ORIGIN/../../../usr/lib'
+LDLIBS += -R'$$ORIGIN/../../../usr/lib'
 LDLIBS += -lsmbfs
 LINTLIBS= -L$(ROOTLIB) -lsmbfs
 
@@ -51,6 +52,9 @@
 CERRWARN += -_gcc=-Wno-unused-variable
 CSTD= $(CSTD_GNU99)
 
+# not linted
+SMATCH=off
+
 LINTFLAGS += -erroff=E_FUNC_RET_ALWAYS_IGNOR2
 
 # CLOBBERFILES	+= $(LIBPROG)
--- old/usr/src/cmd/fs.d/ufs/mkfs/Makefile	Fri Dec 21 14:59:55 2018
+++ new/usr/src/cmd/fs.d/ufs/mkfs/Makefile	Fri Dec 21 14:59:55 2018
@@ -22,6 +22,8 @@
 # Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
+# Copyright (c) 2018, Joyent, Inc.
+#
 
 FSTYPE=		ufs
 LIBPROG=	mkfs
@@ -30,6 +32,8 @@
 include		../../Makefile.fstype
 include		../Makefile.roll
 
+CPPFLAGS +=	-I../../
+
 OBJS=		$(LIBPROG).o $(ROLLOBJS) $(FSLIB)
 SRCS=		$(LIBPROG).c $(ROLLSRCS) $(FSLIBSRC)
 MKFSOBJS=	mkfs.o
@@ -39,6 +43,9 @@
 CERRWARN +=	-_gcc=-Wno-empty-body
 CERRWARN +=	-_gcc=-Wno-uninitialized
 
+# can't hack main() !
+SMATCH =	off
+
 # for messaging catalog
 #
 POFILE= mkfs.po
--- old/usr/src/cmd/geniconvtbl/Makefile.com	Fri Dec 21 14:59:55 2018
+++ new/usr/src/cmd/geniconvtbl/Makefile.com	Fri Dec 21 14:59:55 2018
@@ -21,6 +21,8 @@
 # Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
+# Copyright (c) 2018, Joyent, Inc.
+#
 
 $(NOT_NATIVE)NATIVE_BUILD = $(POUND_SIGN)
 
@@ -92,7 +94,10 @@
 YFLAGS		+= -d -v
 CFLAGS 		+= -D_FILE_OFFSET_BITS=64
 
-$(ITM) :=	CFLAGS += $(GSHARED) $(C_PICFLAGS) $(ZTEXT) -h $@
+# dump_expr() is too hairy
+SMATCH=off
+
+$(ITM) :=	CFLAGS += $(GSHARED) $(C_PICFLAGS) $(ZTEXT) -h$@
 $(ITM) :=	CPPFLAGS += -D_REENTRANT 
 $(ITM) :=	sparc_CFLAGS += -xregs=no%appl
 $(ITM) :=	sparcv9_CFLAGS += -xregs=no%appl
--- old/usr/src/cmd/ipcs/Makefile	Fri Dec 21 14:59:55 2018
+++ new/usr/src/cmd/ipcs/Makefile	Fri Dec 21 14:59:55 2018
@@ -20,13 +20,10 @@
 # CDDL HEADER END
 #
 #
-#ident	"%Z%%M%	%I%	%E% SMI"
-#
 # Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
-# cmd/ipcs/Makefile
-#
+# Copyright (c) 2018, Joyent, Inc.
 
 PROG=		ipcs
 XPG4PROG=	$(PROG)
@@ -37,6 +34,9 @@
 CFLAGS +=	$(CCVERBOSE)
 LDLIBS +=	-lproject
 
+# main() too hairy
+SMATCH =	off
+
 .KEEP_STATE:
 
 all: $(PROG)
--- old/usr/src/cmd/sendmail/Makefile.cmd	Fri Dec 21 14:59:56 2018
+++ new/usr/src/cmd/sendmail/Makefile.cmd	Fri Dec 21 14:59:56 2018
@@ -23,6 +23,8 @@
 # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
+# Copyright (c) 2018, Joyent, Inc.
+#
 
 CPPFLAGS.sm=	$(CPPFLAGS.master) -DSOLARIS=2$(RELEASE_MINOR)00 \
 		-D_FILE_OFFSET_BITS=64
@@ -36,6 +38,9 @@
 CERRWARN +=	-_gcc=-Wno-unused-but-set-variable
 DBMDEF=		-DNDBM -DNEWDB -DNIS -DUSERDB -DMAP_REGEX -DLDAPMAP
 
+# smatch can't handle main()
+SMATCH =	off
+
 ROOTLIBSMTPSM = $(ROOTLIB)/smtp/sendmail
 
 $(ROOTLIBSMTPSM):
--- old/usr/src/cmd/troff/nroff.d/Makefile	Fri Dec 21 14:59:56 2018
+++ new/usr/src/cmd/troff/nroff.d/Makefile	Fri Dec 21 14:59:56 2018
@@ -22,6 +22,7 @@
 #
 # Copyright (c) 1989 by Sun Microsystems, Inc.
 #
+# Copyright (c) 2018, Joyent, Inc.
 
 include 	../../Makefile.cmd
 
@@ -45,6 +46,9 @@
 CERRWARN +=	-_gcc=-Wno-parentheses
 CERRWARN +=	-_gcc=-Wno-unused-variable
 
+# parse error: parsing (i (9223372034707292160-96) >= 65)
+SMATCH =	off
+
 LDLIBS +=	-lmapmalloc
 #
 # message catalog
--- old/usr/src/cmd/troff/troff.d/Makefile	Fri Dec 21 14:59:56 2018
+++ new/usr/src/cmd/troff/troff.d/Makefile	Fri Dec 21 14:59:56 2018
@@ -24,6 +24,7 @@
 #
 # cmd/troff/troff.d/Makefile
 #
+# Copyright (c) 2018, Joyent, Inc.
 
 include 	../../Makefile.cmd
 
@@ -50,6 +51,9 @@
 CERRWARN +=	-_gcc=-Wno-uninitialized
 CERRWARN +=	-_gcc=-Wno-extra
 
+# "parse error: parsing (i (9223372034707292160-96) >= 65)"
+SMATCH =	off
+
 #
 # For message catalog
 #
--- old/usr/src/lib/libast/Makefile.com	Fri Dec 21 14:59:56 2018
+++ new/usr/src/lib/libast/Makefile.com	Fri Dec 21 14:59:56 2018
@@ -22,6 +22,7 @@
 #
 # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
 #
+# Copyright (c) 2018, Joyent, Inc.
 
 SHELL=/usr/bin/ksh93
 
@@ -738,6 +739,8 @@
 CERRWARN += -_gcc=-Wno-type-limits
 CERRWARN += -_gcc=-Wno-address
 
+SMATCH=off
+
 pics/$(MACH)/src/lib/libast/conftab.o \
 pics/$(MACH64)/src/lib/libast/conftab.o	:= CERRWARN += -erroff=E_INIT_DOES_NOT_FIT
 pics/common/comp/setlocale.o		:= CERRWARN += -erroff=E_INTEGER_OVERFLOW_DETECTED
--- old/usr/src/lib/libc/amd64/Makefile	Fri Dec 21 14:59:56 2018
+++ new/usr/src/lib/libc/amd64/Makefile	Fri Dec 21 14:59:56 2018
@@ -25,6 +25,7 @@
 # Copyright (c) 2013, OmniTI Computer Consulting, Inc. All rights reserved.
 # Copyright 2013 Garrett D'Amore <garrett@damore.org>
 # Copyright 2018 Nexenta Systems, Inc.
+# Copyright (c) 2018, Joyent, Inc.
 #
 
 LIBCBASE=	.
@@ -1035,6 +1036,9 @@
 CERRWARN += -_gcc=-Wno-unused-function
 CERRWARN += -_gcc=-Wno-address
 
+# not linted
+SMATCH=off
+
 # Setting THREAD_DEBUG = -DTHREAD_DEBUG (make THREAD_DEBUG=-DTHREAD_DEBUG ...)
 # enables ASSERT() checking in the threads portion of the library.
 # This is automatically enabled for DEBUG builds, not for non-debug builds.
--- old/usr/src/lib/libc/i386/Makefile	Fri Dec 21 14:59:56 2018
+++ new/usr/src/lib/libc/i386/Makefile	Fri Dec 21 14:59:56 2018
@@ -22,10 +22,7 @@
 # Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
-# ident	"%Z%%M%	%I%	%E% SMI"
-#
-# lib/libc/i386/Makefile
-#
+# Copyright (c) 2018, Joyent, Inc.
 
 LIBCBASE=../i386
 
--- old/usr/src/lib/libc/i386/Makefile.com	Fri Dec 21 14:59:57 2018
+++ new/usr/src/lib/libc/i386/Makefile.com	Fri Dec 21 14:59:57 2018
@@ -1084,6 +1084,9 @@
 CERRWARN += -_gcc=-Wno-unused-function
 CERRWARN += -_gcc=-Wno-address
 
+# not linted
+SMATCH=off
+
 # Setting THREAD_DEBUG = -DTHREAD_DEBUG (make THREAD_DEBUG=-DTHREAD_DEBUG ...)
 # enables ASSERT() checking in the threads portion of the library.
 # This is automatically enabled for DEBUG builds, not for non-debug builds.
@@ -1315,7 +1318,7 @@
 	$(POST_PROCESS_A)
 
 $(LIBCBASE)/crt/_rtbootld.s: $(LIBCBASE)/crt/_rtboot.s $(LIBCBASE)/crt/_rtld.c
-	$(CC) $(CPPFLAGS) $(CTF_FLAGS) -O -S $(C_PICFLAGS) \
+	$(CC) $(CPPFLAGS) -_smatch=off $(CTF_FLAGS) -O -S $(C_PICFLAGS) \
 	    $(LIBCBASE)/crt/_rtld.c -o $(LIBCBASE)/crt/_rtld.s
 	$(CAT) $(LIBCBASE)/crt/_rtboot.s $(LIBCBASE)/crt/_rtld.s > $@
 	$(RM) $(LIBCBASE)/crt/_rtld.s
--- old/usr/src/lib/libm/Makefile.libm.com	Fri Dec 21 14:59:57 2018
+++ new/usr/src/lib/libm/Makefile.libm.com	Fri Dec 21 14:59:57 2018
@@ -11,6 +11,7 @@
 
 #
 # Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
+# Copyright (c) 2018, Joyent, Inc.
 #
 
 LIBMDIR		= $(SRC)/lib/libm
@@ -63,6 +64,10 @@
 CFLAGS		+= -_gcc=-fno-strict-overflow
 CFLAGS64	+= -_gcc=-fno-strict-overflow
 
+# sparse currently has no _Complex support
+CFLAGS		+= -_smatch=off
+CFLAGS64	+= -_smatch=off
+
 $(DYNLIB) 	:= LDLIBS += -lc
 
 $(LINTLIB) 	:= SRCS = $(LIBMSRC)/$(LINTSRC)
--- old/usr/src/lib/libpp/Makefile.com	Fri Dec 21 14:59:57 2018
+++ new/usr/src/lib/libpp/Makefile.com	Fri Dec 21 14:59:57 2018
@@ -22,6 +22,7 @@
 # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
+# Copyright (c) 2018, Joyent, Inc.
 
 SHELL=/usr/bin/ksh93
 
@@ -104,6 +105,9 @@
 CERRWARN	+= -_gcc=-Wno-empty-body
 CERRWARN	+= -_gcc=-Wno-unused-value
 
+# "pplex() parse error: turning off implications after 60 seconds"
+SMATCH		= off
+
 pics/ppcall.o 		:= CERRWARN += -erroff=E_INTEGER_OVERFLOW_DETECTED
 pics/ppcontrol.o 	:= CERRWARN += -erroff=E_INTEGER_OVERFLOW_DETECTED
 pics/ppcpp.o		:= CERRWARN += -erroff=E_INTEGER_OVERFLOW_DETECTED
--- old/usr/src/lib/libshell/Makefile.com	Fri Dec 21 14:59:57 2018
+++ new/usr/src/lib/libshell/Makefile.com	Fri Dec 21 14:59:57 2018
@@ -21,6 +21,7 @@
 
 #
 # Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2018, Joyent, Inc.
 #
 
 SHELL=/usr/bin/ksh93
@@ -161,6 +162,9 @@
 CERRWARN	+= -_gcc=-Wno-clobbered
 CERRWARN	+= -_gcc=-Wno-char-subscripts
 
+# smatch gets out of memory on common/sh/macro.c
+SMATCH		= off
+
 pics/sh/macro.o		:= CERRWARN += -erroff=E_NO_IMPLICIT_DECL_ALLOWED
 pics/sh/nvdisc.o	:= CERRWARN += -erroff=E_END_OF_LOOP_CODE_NOT_REACHED
 
--- old/usr/src/tools/Makefile	Fri Dec 21 14:59:57 2018
+++ new/usr/src/tools/Makefile	Fri Dec 21 14:59:57 2018
@@ -24,10 +24,13 @@
 # Copyright 2014 Garrett D'Amore <garrett@damore.org>
 # Copyright 2016 Toomas Soome <tsoome@me.com>
 # Copyright (c) 2016, Chris Fraire <cfraire@me.com>.
+# Copyright (c) 2018, Joyent, Inc.
 #
 
 include ../Makefile.master
 
+SMATCH_1 = smatch
+
 # Bootstrap problem: 'cw' must be built before anything else can be built.
 # 'install.bin' should be built next, being the 'install' target dependency
 # for everything else.
@@ -35,6 +38,8 @@
 # Because of somewhat cyclic dependency between them, both cw and install.bin
 # override the way we install binaries in their Makefiles.
 BOOT_SUBDIRS= \
+	$(SMATCH_$(ENABLE_SMATCH)) \
+	.WAIT \
 	cw \
 	.WAIT \
 	install.bin \
--- old/usr/src/tools/cw/cw.c	Fri Dec 21 14:59:58 2018
+++ new/usr/src/tools/cw/cw.c	Fri Dec 21 14:59:58 2018
@@ -26,6 +26,8 @@
 /*
  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
+ *
+ * Copyright 2018 Joyent, Inc.
  */
 
 /*
@@ -291,7 +293,8 @@
 
 typedef enum {
 	GNU,
-	SUN
+	SUN,
+	SMATCH
 } compiler_style_t;
 
 typedef struct {
@@ -1271,6 +1274,32 @@
 }
 
 static void
+do_smatch(cw_ictx_t *ctx)
+{
+	if (ctx->i_flags & CW_F_PROG) {
+		newae(ctx->i_ae, "--version");
+		return;
+	}
+
+	/*
+	 * Some sources shouldn't run smatch at all.
+	 */
+	for (int i = 0; i < ctx->i_oldargc; i++) {
+		char *arg = ctx->i_oldargv[i];
+
+		if (strcmp(arg, "-_smatch=off") == 0) {
+			ctx->i_flags &= ~ (CW_F_EXEC | CW_F_ECHO);
+			return;
+		}
+	}
+
+	/*
+	 * smatch can handle gcc's options.
+	 */
+	do_gcc(ctx);
+}
+
+static void
 do_cc(cw_ictx_t *ctx)
 {
 	int in_output = 0, seen_o = 0;
@@ -1376,6 +1405,9 @@
 	case GNU:
 		do_gcc(ctx);
 		break;
+	case SMATCH:
+		do_smatch(ctx);
+		break;
 	}
 }
 
@@ -1560,13 +1592,16 @@
 		errx(1, "Compiler is missing a style: %s", spec);
 
 	if ((strcasecmp(token, "gnu") == 0) ||
-	    (strcasecmp(token, "gcc") == 0))
+	    (strcasecmp(token, "gcc") == 0)) {
 		compiler->c_style = GNU;
-	else if ((strcasecmp(token, "sun") == 0) ||
-	    (strcasecmp(token, "cc") == 0))
+	} else if ((strcasecmp(token, "sun") == 0) ||
+	    (strcasecmp(token, "cc") == 0)) {
 		compiler->c_style = SUN;
-	else
+	} else if ((strcasecmp(token, "smatch") == 0)) {
+		compiler->c_style = SMATCH;
+	} else {
 		errx(1, "unknown compiler style: %s", token);
+	}
 
 	if (tspec != NULL)
 		errx(1, "Excess tokens in compiler: %s", spec);
--- old/usr/src/tools/env/illumos.sh	Fri Dec 21 14:59:58 2018
+++ new/usr/src/tools/env/illumos.sh	Fri Dec 21 14:59:58 2018
@@ -81,6 +81,9 @@
 export SHADOW_CCS=gcc7,/usr/gcc/7/bin/gcc,gnu
 export SHADOW_CCCS=gcc7,/usr/gcc/7/bin/g++,gnu
 
+# uncomment to enable smatch
+#export ENABLE_SMATCH=1
+
 # Comment this out to disable support for SMB printing, i.e. if you
 # don't want to bother providing the CUPS headers this needs.
 export ENABLE_SMB_PRINTING=
@@ -273,3 +276,8 @@
 # Set this flag to 'n' to disable the use of 'checkpaths'.  The default,
 # if the 'N' option is not specified, is to run this test.
 #CHECK_PATHS='y'
+
+if [[ "$ENABLE_SMATCH" = "1" ]]; then
+	SMATCHBIN=$CODEMGR_WS/usr/src/tools/proto/root_$MACH-nd/opt/onbld/bin/$MACH/smatch
+	export SHADOW_CCS="$SHADOW_CCS smatch,$SMATCHBIN,smatch"
+fi
--- old/usr/src/tools/scripts/checkpaths.sh	Fri Dec 21 14:59:58 2018
+++ new/usr/src/tools/scripts/checkpaths.sh	Fri Dec 21 14:59:58 2018
@@ -19,11 +19,10 @@
 #
 # CDDL HEADER END
 #
-
-#
 # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
+# Copyright (c) 2018, Joyent, Inc.
 
 # Quis custodiet ipsos custodies?
 
@@ -73,27 +72,6 @@
 		exit 1
 		;;
 	esac
-	if [ -d $ROOT ]; then
-		#
-		# This is the old-style packaging exception list, from
-		# the svr4-specific usr/src/pkgdefs
-		#
-		[ -f $SRC/pkgdefs/etc/exception_list_$arch ] && \
-			validate_paths '-s/\s*'$arch'$//'  \
-			    -e ^usr/include/ike/ -b $ROOT \
-			    $args $SRC/pkgdefs/etc/exception_list_$arch
-		#
-		# These are the new-style packaging exception lists,
-		# from the repository-wide exception_lists/ directory.
-		#
-		e="$CODEMGR_WS/exception_lists/packaging"
-		for f in $e; do
-			if [ -f $f ]; then
-				nawk 'NF == 1 || /[ 	]\+'$arch'$/ { print; }' \
-				    < $f | validate_paths -b $ROOT -n $f
-			fi
-		done
-	fi
 done
 
 # Two entries in the findunref exception_list deal with things created
--- old/usr/src/tools/scripts/nightly.sh	Fri Dec 21 14:59:58 2018
+++ new/usr/src/tools/scripts/nightly.sh	Fri Dec 21 14:59:58 2018
@@ -218,7 +218,7 @@
 	fi
 
 	echo "\n==== Build warnings ($LABEL) ====\n" >>$mail_msg_file
-	egrep -i warning: $SRC/${INSTALLOG}.out \
+	egrep -i 'warn:|warning:' $SRC/${INSTALLOG}.out \
 		| egrep -v '^tic:' \
 		| egrep -v "symbol (\`|')timezone' has differing types:" \
 		| egrep -v "parameter <PSTAMP> set to" \
--- /dev/null	Fri Dec 21 14:59:58 2018
+++ new/usr/src/tools/smatch/Makefile	Fri Dec 21 14:59:58 2018
@@ -0,0 +1,167 @@
+#
+# This file and its contents are supplied under the terms of the
+# Common Development and Distribution License ("CDDL"), version 1.0.
+# You may only use this file in accordance with the terms of version
+# 1.0 of the CDDL.
+#
+# A full copy of the text of the CDDL should have accompanied this
+# source.  A copy of the CDDL is also available via the Internet at
+# http://www.illumos.org/license/CDDL.
+#
+# Copyright (c) 2018, Joyent, Inc.
+#
+
+#
+# The src/ sub-directory is un-modified copy of
+# https://github.com/illumos/smatch/tree/0.5.1-il-1
+#
+# This Makefile installs just enough for us to be able to run smatch
+# locally.
+#
+
+PROG = smatch
+SPARSE_VERSION = 0.5.1-il-1
+
+include ../Makefile.tools
+
+# We have to build smatch before we can use cw
+i386_CC = $(GNUC_ROOT)/bin/gcc
+sparc_CC = $(GNUC_ROOT)/bin/gcc
+
+CFLAGS = -O -D__sun -Wall -Wno-unknown-pragmas -std=gnu99 -nodefaultlibs
+
+SMATCHDATADIR = $(ROOTONBLDSHARE)/smatch
+
+CFLAGS += -DSMATCHDATADIR='"$(SMATCHDATADIR)"'
+CFLAGS += -DGCC_BASE='"/no/such/dir"'
+CFLAGS += -DMULTIARCH_TRIPLET=NULL
+
+LDLIBS += -lsqlite3 -lcrypto -lm -lgcc -lc
+LDFLAGS = $(MAPFILE.NES:%=-Wl,-M%)
+LDFLAGS += -L$(NATIVE_ADJUNCT)/lib -R$(NATIVE_ADJUNCT)/lib
+
+CPPFLAGS += -nostdinc
+CPPFLAGS += -Isrc/
+CPPFLAGS += -I$(NATIVE_ADJUNCT)/include
+
+# no install.bin
+INS.file = $(RM) $@; $(CP) $< $(@D); $(CHMOD) $(FILEMODE) $@
+INS.dir = mkdir -p $@; $(CHMOD) $(FILEMODE) $@
+
+SMATCH_CHECK_OBJS:sh=ls src/check_*.c | sed -e 's+\.c+.o+;s+src/++;'
+
+OBJS = smatch.o $(SMATCH_CHECK_OBJS)
+
+OBJS += smatch_flow.o smatch_conditions.o smatch_slist.o smatch_states.o \
+	smatch_helper.o smatch_type.o smatch_hooks.o smatch_function_hooks.o \
+	smatch_modification_hooks.o smatch_extra.o smatch_estate.o smatch_math.o \
+	smatch_sval.o smatch_ranges.o smatch_implied.o smatch_ignore.o smatch_project.o \
+	smatch_var_sym.o smatch_tracker.o smatch_files.o smatch_expression_stacks.o \
+	smatch_equiv.o smatch_buf_size.o smatch_strlen.o smatch_capped.o smatch_db.o \
+	smatch_expressions.o smatch_returns.o smatch_parse_call_math.o \
+	smatch_param_limit.o smatch_param_filter.o \
+	smatch_param_set.o smatch_comparison.o smatch_param_compare_limit.o smatch_local_values.o \
+	smatch_function_ptrs.o smatch_annotate.o smatch_string_list.o \
+	smatch_param_cleared.o smatch_start_states.o \
+	smatch_recurse.o smatch_data_source.o smatch_type_val.o \
+	smatch_common_functions.o smatch_struct_assignment.o \
+	smatch_unknown_value.o smatch_stored_conditions.o avl.o \
+	smatch_function_info.o smatch_links.o smatch_auto_copy.o \
+	smatch_type_links.o smatch_untracked_param.o smatch_impossible.o \
+	smatch_strings.o smatch_param_used.o smatch_container_of.o smatch_address.o \
+	smatch_buf_comparison.o smatch_real_absolute.o smatch_scope.o \
+	smatch_imaginary_absolute.o smatch_parameter_names.o \
+	smatch_return_to_param.o smatch_passes_array_size.o \
+	smatch_constraints.o smatch_constraints_required.o \
+	smatch_fn_arg_link.o smatch_about_fn_ptr_arg.o smatch_mtag.o \
+	smatch_mtag_map.o smatch_mtag_data.o \
+	smatch_param_to_mtag_data.o smatch_mem_tracker.o smatch_array_values.o \
+	smatch_nul_terminator.o smatch_assigned_expr.o smatch_kernel_user_data.o \
+	smatch_statement_count.o
+
+OBJS += target.o parse.o tokenize.o pre-process.o symbol.o lib.o scope.o \
+	expression.o show-parse.o evaluate.o expand.o inline.o linearize.o \
+	char.o sort.o allocate.o compat-linux.o ptrlist.o \
+	builtin.o \
+	stats.o \
+	flow.o cse.o simplify.o memops.o liveness.o storage.o unssa.o \
+	dissect.o \
+	macro_table.o token_store.o hashtable.o
+
+SMATCH_DATA = \
+	illumos_kernel.no_return_funcs \
+	illumos_kernel.skipped_functions \
+	illumos_user.no_return_funcs \
+	illumos_user.skipped_functions
+
+SMATCH_DB_DATA = \
+	return_states.schema \
+	call_implies.schema \
+	type_value.schema \
+	param_map.schema \
+	function_type_size.schema \
+	parameter_name.schema \
+	fn_ptr_data_link.schema \
+	constraints.schema \
+	mtag_about.schema \
+	type_info.schema \
+	function_type_info.schema \
+	caller_info.schema \
+	function_type_value.schema \
+	return_implies.schema \
+	type_size.schema \
+	constraints_required.schema \
+	fn_data_link.schema \
+	mtag_alias.schema \
+	common_caller_info.schema \
+	data_info.schema \
+	function_type.schema \
+	db.schema \
+	mtag_data.schema \
+	function_ptr.schema \
+	sink_info.schema \
+	local_values.schema \
+	mtag_map.schema
+
+ROOTONBLDDATAFILES = $(SMATCH_DATA:%=$(SMATCHDATADIR)/smatch_data/%)
+ROOTONBLDDATAFILES += $(SMATCH_DB_DATA:%=$(SMATCHDATADIR)/smatch_data/db/%)
+
+BUILT_HEADERS = src/version.h src/check_list_local.h
+
+.KEEP_STATE:
+
+all: $(PROG)
+
+install: all .WAIT $(ROOTONBLDMACHPROG) $(ROOTONBLDDATAFILES)
+
+clean:
+	rm -f $(OBJS) $(BUILT_HEADERS)
+
+$(ROOTONBLDDATAFILES): $(SMATCHDATADIR)/smatch_data/db
+
+$(SMATCHDATADIR)/smatch_data/%: src/smatch_data/%
+	$(INS.file)
+
+$(SMATCHDATADIR)/smatch_data/db:
+	$(INS.dir)
+
+$(SMATCHDATADIR)/smatch_data:
+	$(INS.dir)
+
+$(PROG): $(OBJS)
+	$(LINK.c) $(OBJS) -o $@ $(LDLIBS)
+	$(POST_PROCESS)
+
+%.o: src/%.c $(BUILT_HEADERS)
+	$(COMPILE.c) -o $@ $<
+
+%.o: src/cwchash/%.c
+	$(COMPILE.c) -o $@ $<
+
+src/check_list_local.h:
+	touch src/check_list_local.h
+
+src/version.h:
+	echo '#define SPARSE_VERSION "$(SPARSE_VERSION)"' > src/version.h
+
+include ../Makefile.targ
--- /dev/null	Fri Dec 21 14:59:58 2018
+++ new/usr/src/tools/smatch/src/Documentation/data-structures.txt	Fri Dec 21 14:59:58 2018
@@ -0,0 +1,55 @@
+- A slightly edited irc discussion with Josh Triplett.
+- Describes most data structures used in sparse.
+
+As far as the parsing structures go...
+The C parser exists in two main files: parse.c, which parses statements, and expression.c, which parses expressions.
+parse.h contains the definition of struct statement, which represents a C statement.
+That includes only those things which can't appear as an expression, which primarily includes control flow statements such as if, loops, switch/case, and goto.
+expression.h contains the definition of struct expression, which represents a C expression.  That has a lot more content, since most C constructs can appear in expressions.
+A series of statements forms a compound statement (STMT_COMPOUND).
+That appears as another struct statement which has a statement_list member.
+A function body consists of a compound statement.
+When you look at a loop body, if or else body, or case body, you'll notice that they just have a struct statement, not a statement_list; they can have multiple statements by using a compound statement.
+Also note that all loops get turned into a single "iterator" statement.
+for, while, and do-while.
+A symbol, then, represents a name in a C file.  A symbol might represent a variable, a function, a label, or various other things.
+See symbol.h.
+"struct symbol" represents one symbol.
+As with the various other structures, it has some common data and a union of sub-structures for the parts that differ between different types.
+Most of the interesting bits come in the NS_SYMBOL case.
+Among other things, it has a struct statement for the body of a function (if any), a list of symbols for the arguments, an expression for a variable initializer, and so on.
+Together, struct symbol, struct statement, and struct expression represent most of the abstract syntax tree for C.
+So, that represents most of the "front-end" of Sparse: parsing C and generating that abstract syntax tree.
+That much occurs in pretty much any program using the Sparse frontend.
+The backend varies among programs.
+For instance, the c2xml backend goes that far, then outputs XML.
+The sparse static analysis backend has a few steps: it generates linearized bytecode, does some evaluation on that, and outputs some warnings.
+Several other backends run that linearized bytecode stage.
+The linearized bytecode itself has a set of nested structures.
+linearize.h defines all of them.
+At the top level, it has struct entrypoint.
+That represents an entrypoint to the code, which would normally mean a function.
+An entrypoint has a list of basic blocks.
+struct basic_block.
+A basic block represents a series of instructions with no branches.
+Straight-line code.
+A branch only occurs at the end of a basic block, and branches can only target the beginning of a basic block.
+Typically, a conditional will consist of a basic block leading up to the branch, a basic block for the true case, a basic block for the false case, and a basic block where the two paths merge back together.
+Either the true or the false case may not exist.
+A loop will normally have a basic block for the loop body, which can branch to the top at the end or continue to the next basic block.
+So basic blocks represent a node in the control flow graph.
+The edges in that graph lead from one basic block to a basic block which can follow it in the execution of the program.
+Each basic block has a series of instructions, "struct instruction".
+"enum opcode" lists all the instructions.
+Fairly high-level instruction set, corresponding directly to bits of C.
+So you have an entrypoint, which has a graph of basic blocks, each of which has a list of instructions.
+An entrypoint also has a pointer to the first instruction.
+One last bit of trickiness: struct pseudo.
+Have you ever heard of "static single assignment" or SSA form?
+struct pseudo represents one of those single-assignment variables.
+Each one has a pointer to the symbol it represents (which may have many pseudos referencing it).
+Each one also has a pointer to the instruction that defines it.
+That covers most of the major data structures in Sparse.
+Now, given all that, some of the top-level stuff in sparse.c may make more sense.
+For instance, the context checking works in terms of basic blocks.
+Hopefully some of that helped you understand Sparse better.
--- /dev/null	Fri Dec 21 14:59:59 2018
+++ new/usr/src/tools/smatch/src/Documentation/project-ideas.md	Fri Dec 21 14:59:59 2018
@@ -0,0 +1,52 @@
+Why hacking on sparse
+=====================
+
+1. sparse is small.  
+   The full project compiles in less than 10 seconds on old and not performing laptop.
+2. sparse is fast.  
+   Typically, sparse can check a C file 1/10 of time it takes for gcc to generate object files.
+3. sparse can digest the full kernel source files.  
+   With sparse-llvm, sparse uses llvm as back end to emit real machine code.
+
+New developer hacking on sparse
+==============================
+
+
+* All sparse warning messages should include the option how
+   to disable it.  
+       e.g. "pre-process.c:20*:28: warning: Variable length array is used."
+       should be something like   
+        "pre-process.c:20*:28: warning: Variable length array is
+used. (-Wno-vla)"
+* extend test-inspect to inspect more AST fields.
+* extend test-inspect to inspect instructions.
+* adding architecture handling in sparse similar to cgcc
+* parallel processing of test-suite
+* Howto: fix the kernel rcu related checker warnings
+* option to disable AST level inline.
+* debug: debug version of sparse do all the verification double check
+* test suite: verify and compare IR (suggested by Dibyendu Majumdar)
+* checker error output database
+
+For experienced developers
+==========================
+
+* merge C type on incremental declare of C type and function prototype.
+* move attribute out of ctype to allow easier to add new attribute.
+* serialize, general object walking driven by data structures.
+* serialize, write sparse byte code into file
+* serialize, load sparse byte code from file.
+* symbol index/linker, know which symbol in which byte code file.
+* inline function in instruction level
+* cross function checking
+* debug: optimization step by step log
+* debug: fancy animation of CFG
+* phi node location (Luc has patch)
+* revisit crazy programmer warning, invalid SSA form.
+* ptrlist, looping while modify inside the loop.
+* dead code elimination using ssa
+* constant propagation using ssa.
+* x86/arm back end instruction set define
+* register allocation.
+* emit x86/arm machine level code
+
--- /dev/null	Fri Dec 21 14:59:59 2018
+++ new/usr/src/tools/smatch/src/Documentation/smatch.txt	Fri Dec 21 14:59:59 2018
@@ -0,0 +1,77 @@
+Smatch
+
+1.  Building Smatch
+2.  Using Smatch
+3.  Smatch vs Sparse
+
+
+Section 1:  Building Smatch
+---------------------------
+
+Smatch requires sqlite3.  It requires the binaries and the C, Perl and
+Python libraries for sqlite3.
+
+apt-get install sqlite3 libsqlite3-dev libdbd-sqlite3-perl
+
+Smatch is easy to build.  Just type `make`.  There isn't an install process
+right now so just run it from the build directory.
+
+
+Section 2:  Using Smatch
+------------------------
+
+Smatch can be used with a cross function database. It's not mandatory to
+build the database but it's a useful thing to do.  Building the database
+for the kernel takes 2-3 hours on my computer.  For the kernel you build
+the database with:
+
+	cd ~/path/to/kernel_dir
+	~/path/to/smatch_dir/smatch_scripts/build_kernel_data.sh
+
+For projects other than the kernel you run Smatch with the options
+"--call-tree --info --param-mapper --spammy" and finish building the
+database by running the script:
+
+	~/progs/smatch/devel/smatch_data/db/create_db.sh
+
+Each time you rebuild the cross function database it becomes more accurate. I
+normally rebuild the database every morning.
+
+If you are running Smatch over the whole kernel you can use the following
+command:
+
+	~/progs/smatch/devel/smatch_scripts/test_kernel.sh
+
+The test_kernel.sh script will create a .c.smatch file for every file it tests
+and a combined smatch_warns.txt file with all the warnings.
+
+If you are running Smatch just over one kernel file:
+
+	~/progs/smatch/devel/smatch_scripts/kchecker drivers/whatever/file.c
+
+You can also build a directory like this:
+
+	~/progs/smatch/devel/smatch_scripts/kchecker drivers/whatever/
+
+The kchecker script prints its warnings to stdout.
+
+If you are building something else (which is not the Linux kernel) then use
+something like:
+
+	make CHECK="~/progs/smatch/devel/smatch --full-path" \
+		CC=~/progs/smatch/devel/smatch/cgcc | tee smatch_warns.txt
+
+The makefile has to let people set the CC with an environment variable for that
+to work, of course.
+
+
+Section 3:  Smatch vs Sparse
+----------------------------
+
+Smatch uses Sparse as a C parser.  I have made a few hacks to Sparse so I
+have to distribute the two together.  Sparse is released under the MIT license
+and Smatch is GPLv2+.  If you make changes to Sparse please send those to the
+Sparse mailing list linux-sparse@vger.kernel.org and I will pick them up from
+there.  Partly I do that for licensing reasons because I don't want to pull GPL
+changes into the Sparse code I re-distribute.
+
--- /dev/null	Fri Dec 21 14:59:59 2018
+++ new/usr/src/tools/smatch/src/Documentation/sparse-README.txt	Fri Dec 21 14:59:59 2018
@@ -0,0 +1,71 @@
+
+  sparse (spärs), adj,., spars-er, spars-est.
+	1. thinly scattered or distributed; "a sparse population"
+	2. thin; not thick or dense: "sparse hair"
+	3. scanty; meager.
+	4. semantic parse
+  	[ from Latin: spars(us) scattered, past participle of
+	  spargere 'to sparge' ]
+
+	Antonym: abundant
+
+Sparse is a semantic parser of source files: it's neither a compiler
+(although it could be used as a front-end for one) nor is it a
+preprocessor (although it contains as a part of it a preprocessing
+phase). 
+
+It is meant to be a small - and simple - library.  Scanty and meager,
+and partly because of that easy to use.  It has one mission in life:
+create a semantic parse tree for some arbitrary user for further
+analysis.  It's not a tokenizer, nor is it some generic context-free
+parser.  In fact, context (semantics) is what it's all about - figuring
+out not just what the grouping of tokens are, but what the _types_ are
+that the grouping implies.
+
+And no, it doesn't use lex and yacc (or flex and bison).  In my personal
+opinion, the result of using lex/yacc tends to end up just having to
+fight the assumptions the tools make. 
+
+The parsing is done in five phases:
+
+ - full-file tokenization
+ - pre-processing (which can cause another tokenization phase of another
+   file)
+ - semantic parsing.
+ - lazy type evaluation
+ - inline function expansion and tree simplification
+
+Note the "full file" part. Partly for efficiency, but mostly for ease of
+use, there are no "partial results". The library completely parses one
+whole source file, and builds up the _complete_ parse tree in memory.
+
+Also note the "lazy" in the type evaluation.  The semantic parsing
+itself will know which symbols are typedefines (required for parsing C
+correctly), but it will not have calculated what the details of the
+different types are.  That will be done only on demand, as the back-end
+requires the information. 
+
+This means that a user of the library will literally just need to do
+
+  struct string_list *filelist = NULL;
+  char *file;
+
+  action(sparse_initialize(argc, argv, filelist));
+
+  FOR_EACH_PTR_NOTAG(filelist, file) {
+    action(sparse(file));
+  } END_FOR_EACH_PTR_NOTAG(file);
+
+and he is now done - having a full C parse of the file he opened.  The
+library doesn't need any more setup, and once done does not impose any
+more requirements.  The user is free to do whatever he wants with the
+parse tree that got built up, and needs not worry about the library ever
+again.  There is no extra state, there are no parser callbacks, there is
+only the parse tree that is described by the header files. The action
+funtion takes a pointer to a symbol_list and does whatever it likes with it.
+
+The library also contains (as an example user) a few clients that do the
+preprocessing, parsing and type evaluation and just print out the
+results.  These clients were done to verify and debug the library, and
+also as trivial examples of what you can do with the parse tree once it
+is formed, so that users can see how the tree is organized. 
--- /dev/null	Fri Dec 21 14:59:59 2018
+++ new/usr/src/tools/smatch/src/Documentation/sparse.txt	Fri Dec 21 14:59:59 2018
@@ -0,0 +1,45 @@
+Sparse
+~~~~~~
+
+__nocast vs __bitwise:
+
+__nocast warns about explicit or implicit casting to different types.
+
+HOWEVER, it doesn't consider two 32-bit integers to be different
+types, so a __nocast 'int' type may be returned as a regular 'int'
+type and then the __nocast is lost.
+
+So "__nocast" on integer types is usually not that powerful. It just
+gets lost too easily. It's more useful for things like pointers. It
+also doesn't warn about the mixing: you can add integers to __nocast
+integer types, and it's not really considered anything wrong.
+
+__bitwise ends up being a "stronger integer separation". That one
+doesn't allow you to mix with non-bitwise integers, so now it's much
+harder to lose the type by mistake.
+
+So the basic rule is:
+
+ - "__nocast" on its own tends to be more useful for *big* integers
+that still need to act like integers, but you want to make it much
+less likely that they get truncated by mistake. So a 64-bit integer
+that you don't want to mistakenly/silently be returned as "int", for
+example. But they mix well with random integer types, so you can add
+to them etc without using anything special. However, that mixing also
+means that the __nocast really gets lost fairly easily.
+
+ - "__bitwise" is for *unique types* that cannot be mixed with other
+types, and that you'd never want to just use as a random integer (the
+integer 0 is special, though, and gets silently accepted iirc - it's
+kind of like "NULL" for pointers). So "gfp_t" or the "safe endianness"
+types would be __bitwise: you can only operate on them by doing
+specific operations that know about *that* particular type.
+
+Generally, you want __bitwise if you are looking for type safety.
+"__nocast" really is pretty weak.
+
+Reference:
+
+* Linus' e-mail about __nocast vs __bitwise:
+
+  http://marc.info/?l=linux-mm&m=133245421127324&w=2
--- /dev/null	Fri Dec 21 14:59:59 2018
+++ new/usr/src/tools/smatch/src/Documentation/submitting-patches.md	Fri Dec 21 14:59:59 2018
@@ -0,0 +1,21 @@
+Submitting patches: the sparse version
+======================================
+
+Sparse uses a patch submit process similar to the Linux Kernel
+[Submitting Patches](https://www.kernel.org/doc/html/v4.12/process/submitting-patches.html)
+
+This document mostly focuses on the parts that might be different from the Linux
+Kernel submitting process.
+
+1. Git clone a sparse repository:
+
+        git clone git://git.kernel.org/pub/scm/devel/sparse/sparse.git
+
+2. [Coding Style](https://www.kernel.org/doc/html/v4.12/process/coding-style.html) remains the same.
+
+3. Sign off the patch.
+
+   The usage of the Signed-off-by tag is the same as [Linux Kernel Sign your work](https://www.kernel.org/doc/html/v4.12/process/submitting-patches.html#sign-your-work-the-developer-s-certificate-of-origin).
+
+   Notice that sparse uses the MIT License.
+
--- /dev/null	Fri Dec 21 14:59:59 2018
+++ new/usr/src/tools/smatch/src/Documentation/test-suite	Fri Dec 21 14:59:59 2018
@@ -0,0 +1,136 @@
+
+
+	Sparse test suite
+	~~~~~~~~~~~~~~~~~
+
+Sparse has a number of test cases in its validation directory. The test-suite
+script aims at making automated checking of these tests possible. It works by
+embedding tags in C comments in the test cases.
+
+check-name: (mandatory)
+	Name of the test.
+
+check-description: (optional)
+	A description of what the test checks.
+
+check-command: (optional)
+	There are different kinds of tests. Some can validate the sparse
+	preprocessor, while others will use sparse, cgcc, or even other backends
+	of the library. check-command allows you to give a custom command to
+	run the test-case.
+	The '$file' string is special. It will be expanded to the file name at
+	run time.
+	It defaults to "sparse $file".
+
+check-exit-value: (optional)
+	The expected exit value of check-command. It defaults to 0.
+
+check-timeout: (optional)
+	The maximum expected duration of check-command, in seconds.
+	It defaults to 1.
+
+check-output-start / check-output-end (optional)
+	The expected output (stdout and stderr) of check-command lies between
+	those two tags. It defaults to no output.
+
+check-output-ignore / check-error-ignore (optional)
+	Don't check the expected output (stdout or stderr) of check-command
+	(useful when this output is not comparable or if you're only interested
+	in the exit value).
+	By default this check is done.
+
+check-known-to-fail (optional)
+	Mark the test as being known to fail.
+
+check-output-contains: <pattern> (optional)
+	Check that the output (stdout) contains the given pattern.
+	Several such tags can be given, in which case the output
+	must contains all the patterns.
+
+check-output-excludes: <pattern> (optional)
+	Similar than the above one, but with opposite logic.
+	Check that the output (stdout) doesn't contain the given pattern.
+	Several such tags can be given, in which case the output
+	must contains none of the patterns.
+
+check-output-pattern-<nbr>-times: <pattern> (optional)
+	Similar to the contains/excludes above, but with full control
+	of the number of times the pattern should occur in the output.
+
+	Using test-suite
+	~~~~~~~~~~~~~~~~
+
+The test-suite script is called through the check target of the Makefile. It
+will try to check every test case it finds (find validation -name '*.c').
+
+It can be called to check a single test with:
+$ cd validation
+$ ./test-suite single preprocessor/preprocessor1.c
+     TEST     Preprocessor #1 (preprocessor/preprocessor1.c)
+preprocessor/preprocessor1.c passed !
+
+
+	Writing a test
+	~~~~~~~~~~~~~~
+
+test-suite comes with a format command to make a test easier to write:
+
+	test-suite format file [name [cmd]]
+
+name:
+	check-name value. If no name is provided, it defaults to the file name.
+cmd:
+	check-command value. If no cmd is provided, it defaults to
+	"sparse $file".
+
+The output of the test-suite format command can be redirected into the
+test case to create a test-suite formatted file.
+
+$ ./test-suite format bad-assignment.c Assignment >> bad-assignment.c
+$ cat !$
+cat bad-assignment.c
+/*
+ * check-name: bad assignment
+ *
+ * check-command: sparse $file
+ * check-exit-value: 1
+ *
+ * check-output-start
+bad-assignment.c:3:6: error: Expected ; at end of statement
+bad-assignment.c:3:6: error: got \
+ * check-output-end
+ */
+
+You can define the check-command you want to use for the test. $file will be
+extended to the file name at run time.
+
+$ ./test-suite format validation/preprocessor2.c "Preprocessor #2" \
+		"sparse -E \$file" >> validation/preprocessor2.c
+$ cat !$
+cat validation/preprocessor2.c
+/*
+ * This one we happen to get right.
+ *
+ * It should result in a simple
+ *
+ *	a + b
+ *
+ * for a proper preprocessor.
+ */
+#define TWO a, b
+
+#define UNARY(x) BINARY(x)
+#define BINARY(x, y) x + y
+
+UNARY(TWO)
+/*
+ * check-name: Preprocessor #2
+ *
+ * check-command: sparse -E $file
+ * check-exit-value: 0
+ *
+ * check-output-start
+
+a + b
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 14:59:59 2018
+++ new/usr/src/tools/smatch/src/FAQ	Fri Dec 21 14:59:59 2018
@@ -0,0 +1,74 @@
+	FAQ - Why sparse?
+
+Q.  Why not just use gcc?
+
+A.  Gcc is big, complex, and the gcc maintainers are not interested in
+    other uses of the gcc front-end.  In fact, gcc has explicitly
+    resisted splitting up the front and back ends and having some common
+    intermediate language because of religious license issues - you can
+    have multiple front ends and back ends, but they all have to be part
+    of gcc and licensed under the GPL. 
+
+    This all (in my opinion) makes gcc development harder than it should
+    be, and makes the end result very ungainly.  With "sparse", the
+    front-end is very explicitly separated into its own independent
+    project, and is totally independent from the users.  I don't want to
+    know what you do in the back-end, because I don't think I _should_
+    know or care. 
+
+
+Q.  Why not GPL?
+
+A.  See the previous question: I personally think that the front end
+    must be a totally separate project from the back end: any other
+    approach just leads to insanity.  However, at the same time clearly
+    we cannot write intermediate files etc crud (since then the back end
+    would have to re-parse the whole thing and would have to have its
+    own front end and just do a lot of things that do not make any sense
+    from a technical standpoint).
+
+    I like the GPL, but as rms says, "Linus is just an engineer". I
+    refuse to use a license if that license causes bad engineering
+    decisions.  I want the front-end to be considered a separate
+    project, yet the GPL considers the required linking to make the
+    combined thing a derived work. Which is against the whole point
+    of 'sparse'.
+
+    I'm not interested in code generation. I'm not interested in what
+    other people do with their back-ends.  I _am_ interested in making a
+    good front-end, and "good" means that people find it usable. And
+    they shouldn't be scared away by politics or licenses. If they want
+    to make their back-end be BSD/MIT licensed, that's great. And if
+    they want to have a proprietary back-end, that's ok by me too. It's
+    their loss, not mine.
+
+
+Q.  Does it really parse C?
+
+A.  Yeah, well...  It parses a fairly complete subset of "extended C" as
+    defined by gcc.  HOWEVER, since I don't believe in K&R syntax for
+    function declarations or in giving automatic integer types, it
+    doesn't do that.  If you don't give types to your variables, they
+    won't have any types, and you can't use them.
+
+    Similarly, it will be very unhappy about undeclared functions,
+    rather than just assuming they have type "int". 
+
+    Note that a large rationale for me doing this project is for type
+    following, which to some degree explains why the thing is type-anal
+    and refuses to touch the old-style pre-ANSI non-typed (or weakly
+    typed) constructs. Maybe somebody else who is working on projects
+    where pre-ANSI C makes sense might be more inclined to care about
+    ancient C.  It's open source, after all. Go wild.
+
+
+Q.  What other sparse resources are available?
+
+A.  Wiki: http://sparse.wiki.kernel.org/index.php/Main_Page
+
+    Mailing list: linux-sparse@vger.kernel.org
+    See http://vger.kernel.org/vger-lists.html#linux-sparse for subscription
+    instructions and links to archives
+
+    Git repo: git://git.kernel.org/pub/scm/devel/sparse/sparse.git
+    gitweb: http://git.kernel.org/?p=devel/sparse/sparse.git
--- /dev/null	Fri Dec 21 14:59:59 2018
+++ new/usr/src/tools/smatch/src/GPL-2	Fri Dec 21 14:59:59 2018
@@ -0,0 +1,339 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
--- /dev/null	Fri Dec 21 14:59:59 2018
+++ new/usr/src/tools/smatch/src/LICENSE	Fri Dec 21 14:59:59 2018
@@ -0,0 +1,70 @@
+Smatch is released under the GPLv2+ license however Smatch includes the Sparse
+source as well which is licensed under the MIT license and cwchash which is
+licensed under the three clause BSD license and avl.[ch] which are MIT licensed.
+
+The line between which files are a part of Sparse and which are a part of Smatch
+is normally pretty clear.  The one thing I will clarify is that there are some
+modifications to Sparse files in the Smatch repository which have not been
+pushed to the Sparse repository.  These are released under the MIT license.  The
+token_store.c file is a Sparse feature and thus released under the MIT license
+despite that it has not been pushed to the Sparse repository.
+
+I will not accept additional Sparse features except under the MIT license.
+
+------  Smatch
+
+License: GPLv2+
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+See GPL-2, or <http://www.gnu.org/copyleft/gpl.txt> for the terms of the latest
+version of the GNU General Public License.
+
+------  Sparse
+
+The 'sparse' C parser front-end library is copyrighted by Transmeta Corp
+and other authors and licensed under the "MIT License" as
+obtained from www.opensource.org (and included here-in for easy
+reference).
+
+[ This copy of the license is the flat-text version of original,
+  available in its full glory at
+
+	 http://opensource.org/licenses/MIT
+
+  please refer to there for the authoritative and slightly more
+  pretty-printed version ]
+
+------
+
+			The MIT License (MIT)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
--- /dev/null	Fri Dec 21 14:59:59 2018
+++ new/usr/src/tools/smatch/src/Makefile	Fri Dec 21 14:59:59 2018
@@ -0,0 +1,318 @@
+VERSION=0.5.1
+
+# Generating file version.h if current version has changed
+SPARSE_VERSION:=$(shell git describe 2>/dev/null || echo '$(VERSION)')
+VERSION_H := $(shell cat version.h 2>/dev/null)
+ifneq ($(lastword $(VERSION_H)),"$(SPARSE_VERSION)")
+$(info $(shell echo '     GEN      'version.h))
+$(shell echo '#define SPARSE_VERSION "$(SPARSE_VERSION)"' > version.h)
+endif
+
+OS = linux
+
+ifeq ($(CC),"")
+CC = gcc
+endif
+
+CFLAGS += -O2 -finline-functions -fno-strict-aliasing -g
+CFLAGS += -Wall -Wwrite-strings -Wno-switch
+LDFLAGS += -g -lm -lsqlite3 -lssl -lcrypto
+LD = gcc
+AR = ar
+PKG_CONFIG = pkg-config
+COMMON_CFLAGS = -O2 -finline-functions -fno-strict-aliasing -g
+COMMON_CFLAGS += -Wall -Wwrite-strings
+
+ALL_CFLAGS = $(COMMON_CFLAGS) $(PKG_CFLAGS) $(CFLAGS)
+#
+# For debugging, put this in local.mk:
+#
+#     CFLAGS += -O0 -DDEBUG -g3 -gdwarf-2
+#
+
+HAVE_LIBXML:=$(shell $(PKG_CONFIG) --exists libxml-2.0 2>/dev/null && echo 'yes')
+HAVE_GCC_DEP:=$(shell touch .gcc-test.c && 				\
+		$(CC) -c -Wp,-MD,.gcc-test.d .gcc-test.c 2>/dev/null && \
+		echo 'yes'; rm -f .gcc-test.d .gcc-test.o .gcc-test.c)
+
+GTK_VERSION:=3.0
+HAVE_GTK:=$(shell $(PKG_CONFIG) --exists gtk+-$(GTK_VERSION) 2>/dev/null && echo 'yes')
+ifneq ($(HAVE_GTK),yes)
+	GTK_VERSION:=2.0
+	HAVE_GTK:=$(shell $(PKG_CONFIG) --exists gtk+-$(GTK_VERSION) 2>/dev/null && echo 'yes')
+endif
+
+LLVM_CONFIG:=llvm-config
+HAVE_LLVM:=$(shell $(LLVM_CONFIG) --version >/dev/null 2>&1 && echo 'yes')
+
+GCC_BASE := $(shell $(CC) --print-file-name=)
+COMMON_CFLAGS += -DGCC_BASE=\"$(GCC_BASE)\"
+
+MULTIARCH_TRIPLET := $(shell $(CC) -print-multiarch 2>/dev/null)
+COMMON_CFLAGS += -DMULTIARCH_TRIPLET=\"$(MULTIARCH_TRIPLET)\"
+
+ifeq ($(HAVE_GCC_DEP),yes)
+COMMON_CFLAGS += -Wp,-MD,$(@D)/.$(@F).d
+endif
+
+DESTDIR=
+INSTALL_PREFIX ?=$(HOME)
+BINDIR=$(INSTALL_PREFIX)/bin
+LIBDIR=$(INSTALL_PREFIX)/lib
+MANDIR=$(INSTALL_PREFIX)/share/man
+MAN1DIR=$(MANDIR)/man1
+INCLUDEDIR=$(INSTALL_PREFIX)/include
+PKGCONFIGDIR=$(LIBDIR)/pkgconfig
+SMATCHDATADIR=$(INSTALL_PREFIX)/share/smatch
+
+SMATCH_FILES=smatch_flow.o smatch_conditions.o smatch_slist.o smatch_states.o \
+	smatch_helper.o smatch_type.o smatch_hooks.o smatch_function_hooks.o \
+	smatch_modification_hooks.o smatch_extra.o smatch_estate.o smatch_math.o \
+	smatch_sval.o smatch_ranges.o smatch_implied.o smatch_ignore.o smatch_project.o \
+	smatch_var_sym.o smatch_tracker.o smatch_files.o smatch_expression_stacks.o \
+	smatch_equiv.o smatch_buf_size.o smatch_strlen.o smatch_capped.o smatch_db.o \
+	smatch_expressions.o smatch_returns.o smatch_parse_call_math.o \
+	smatch_param_limit.o smatch_param_filter.o \
+	smatch_param_set.o smatch_comparison.o smatch_param_compare_limit.o smatch_local_values.o \
+	smatch_function_ptrs.o smatch_annotate.o smatch_string_list.o \
+	smatch_param_cleared.o smatch_start_states.o \
+	smatch_recurse.o smatch_data_source.o smatch_type_val.o \
+	smatch_common_functions.o smatch_struct_assignment.o \
+	smatch_unknown_value.o smatch_stored_conditions.o avl.o \
+	smatch_function_info.o smatch_links.o smatch_auto_copy.o \
+	smatch_type_links.o smatch_untracked_param.o smatch_impossible.o \
+	smatch_strings.o smatch_param_used.o smatch_container_of.o smatch_address.o \
+	smatch_buf_comparison.o smatch_real_absolute.o smatch_scope.o \
+	smatch_imaginary_absolute.o smatch_parameter_names.o \
+	smatch_return_to_param.o smatch_passes_array_size.o \
+	smatch_constraints.o smatch_constraints_required.o \
+	smatch_fn_arg_link.o smatch_about_fn_ptr_arg.o smatch_mtag.o \
+	smatch_mtag_map.o smatch_mtag_data.o \
+	smatch_param_to_mtag_data.o smatch_mem_tracker.o smatch_array_values.o \
+	smatch_nul_terminator.o smatch_assigned_expr.o smatch_kernel_user_data.o \
+	smatch_statement_count.o
+
+SMATCH_CHECKS=$(shell ls check_*.c | sed -e 's/\.c/.o/')
+SMATCH_DATA=smatch_data/kernel.allocation_funcs \
+	smatch_data/kernel.frees_argument smatch_data/kernel.puts_argument \
+	smatch_data/kernel.dev_queue_xmit smatch_data/kernel.returns_err_ptr \
+	smatch_data/kernel.dma_funcs smatch_data/kernel.returns_held_funcs \
+	smatch_data/kernel.no_return_funcs
+
+SMATCH_SCRIPTS=smatch_scripts/add_gfp_to_allocations.sh \
+	smatch_scripts/build_kernel_data.sh \
+	smatch_scripts/call_tree.pl smatch_scripts/filter_kernel_deref_check.sh \
+	smatch_scripts/find_expanded_holes.pl smatch_scripts/find_null_params.sh \
+	smatch_scripts/follow_params.pl smatch_scripts/gen_allocation_list.sh \
+	smatch_scripts/gen_bit_shifters.sh smatch_scripts/gen_dma_funcs.sh \
+	smatch_scripts/generisize.pl smatch_scripts/gen_err_ptr_list.sh \
+	smatch_scripts/gen_expects_err_ptr.sh smatch_scripts/gen_frees_list.sh \
+	smatch_scripts/gen_gfp_flags.sh smatch_scripts/gen_no_return_funcs.sh \
+	smatch_scripts/gen_puts_list.sh smatch_scripts/gen_returns_held.sh \
+	smatch_scripts/gen_rosenberg_funcs.sh smatch_scripts/gen_sizeof_param.sh \
+	smatch_scripts/gen_unwind_functions.sh smatch_scripts/kchecker \
+	smatch_scripts/kpatch.sh smatch_scripts/new_bugs.sh \
+	smatch_scripts/show_errs.sh smatch_scripts/show_ifs.sh \
+	smatch_scripts/show_unreachable.sh smatch_scripts/strip_whitespace.pl \
+	smatch_scripts/summarize_errs.sh smatch_scripts/test_kernel.sh \
+	smatch_scripts/trace_params.pl smatch_scripts/unlocked_paths.pl \
+	smatch_scripts/whitespace_only.sh smatch_scripts/wine_checker.sh \
+
+PROGRAMS=test-lexing test-parsing obfuscate compile graph sparse \
+	 test-linearize example test-unssa test-dissect ctags
+INST_PROGRAMS=smatch cgcc
+
+INST_MAN1=sparse.1 cgcc.1
+
+ifeq ($(HAVE_LIBXML),yes)
+PROGRAMS+=c2xml
+INST_PROGRAMS+=c2xml
+c2xml_EXTRA_OBJS = `$(PKG_CONFIG) --libs libxml-2.0`
+LIBXML_CFLAGS := $(shell $(PKG_CONFIG) --cflags libxml-2.0)
+else
+$(warning Your system does not have libxml, disabling c2xml)
+endif
+
+ifeq ($(HAVE_GTK),yes)
+GTK_CFLAGS := $(shell $(PKG_CONFIG) --cflags gtk+-$(GTK_VERSION))
+GTK_LIBS := $(shell $(PKG_CONFIG) --libs gtk+-$(GTK_VERSION))
+PROGRAMS += test-inspect
+INST_PROGRAMS += test-inspect
+test-inspect_EXTRA_DEPS := ast-model.o ast-view.o ast-inspect.o
+test-inspect_OBJS := test-inspect.o $(test-inspect_EXTRA_DEPS)
+$(test-inspect_OBJS) $(test-inspect_OBJS:.o=.sc): PKG_CFLAGS += $(GTK_CFLAGS)
+test-inspect_EXTRA_OBJS := $(GTK_LIBS)
+else
+$(warning Your system does not have gtk3/gtk2, disabling test-inspect)
+endif
+
+ifeq ($(HAVE_LLVM),yes)
+ifeq ($(shell uname -m | grep -q '\(i386\|x86\)' && echo ok),ok)
+LLVM_VERSION:=$(shell $(LLVM_CONFIG) --version)
+ifeq ($(shell expr "$(LLVM_VERSION)" : '[3-9]\.'),2)
+LLVM_PROGS := sparse-llvm
+$(LLVM_PROGS): LD := g++
+LLVM_LDFLAGS := $(shell $(LLVM_CONFIG) --ldflags)
+LLVM_CFLAGS := $(shell $(LLVM_CONFIG) --cflags | sed -e "s/-DNDEBUG//g" | sed -e "s/-pedantic//g")
+LLVM_LIBS := $(shell $(LLVM_CONFIG) --libs)
+LLVM_LIBS += $(shell $(LLVM_CONFIG) --system-libs 2>/dev/null)
+PROGRAMS += $(LLVM_PROGS)
+INST_PROGRAMS += sparse-llvm sparsec
+sparse-llvm.o sparse-llvm.sc: PKG_CFLAGS += $(LLVM_CFLAGS)
+sparse-llvm_EXTRA_OBJS := $(LLVM_LIBS) $(LLVM_LDFLAGS)
+else
+$(warning LLVM 3.0 or later required. Your system has version $(LLVM_VERSION) installed.)
+endif
+else
+$(warning sparse-llvm disabled on $(shell uname -m))
+endif
+else
+$(warning Your system does not have llvm, disabling sparse-llvm)
+endif
+
+LIB_H=    token.h parse.h lib.h symbol.h scope.h expression.h target.h \
+	  linearize.h bitmap.h ident-list.h compat.h flow.h allocate.h \
+	  storage.h ptrlist.h dissect.h
+
+LIB_OBJS= target.o parse.o tokenize.o pre-process.o symbol.o lib.o scope.o \
+	  expression.o show-parse.o evaluate.o expand.o inline.o linearize.o \
+	  char.o sort.o allocate.o compat-$(OS).o ptrlist.o \
+	  builtin.o \
+	  stats.o \
+	  flow.o cse.o simplify.o memops.o liveness.o storage.o unssa.o \
+	  dissect.o \
+	  macro_table.o token_store.o cwchash/hashtable.o
+
+LIB_FILE= libsparse.a
+SLIB_FILE= libsparse.so
+
+# If you add $(SLIB_FILE) to this, you also need to add -fpic to BASIC_CFLAGS above.
+# Doing so incurs a noticeable performance hit, and Sparse does not have a
+# stable shared library interface, so this does not occur by default.  If you
+# really want a shared library, you may want to build Sparse twice: once
+# without -fpic to get all the Sparse tools, and again with -fpic to get the
+# shared library.
+LIBS=$(LIB_FILE)
+
+#
+# Pretty print
+#
+V	      = @
+Q	      = $(V:1=)
+QUIET_CC      = $(Q:@=@echo    '     CC       '$@;)
+QUIET_CHECK   = $(Q:@=@echo    '     CHECK    '$<;)
+QUIET_AR      = $(Q:@=@echo    '     AR       '$@;)
+QUIET_GEN     = $(Q:@=@echo    '     GEN      '$@;)
+QUIET_LINK    = $(Q:@=@echo    '     LINK     '$@;)
+# We rely on the -v switch of install to print 'file -> $install_dir/file'
+QUIET_INST_SH = $(Q:@=echo -n  '     INSTALL  ';)
+QUIET_INST    = $(Q:@=@echo -n '     INSTALL  ';)
+
+define INSTALL_EXEC
+	$(QUIET_INST)install -v $1 $(DESTDIR)$2/$1 || exit 1;
+
+endef
+
+define INSTALL_FILE
+	$(QUIET_INST)install -v -m 644 $1 $(DESTDIR)$2/$1 || exit 1;
+
+endef
+
+SED_PC_CMD = 's|@version@|$(VERSION)|g;		\
+	      s|@prefix@|$(INSTALL_PREFIX)|g;		\
+	      s|@libdir@|$(LIBDIR)|g;		\
+	      s|@includedir@|$(INCLUDEDIR)|g'
+
+
+
+# Allow users to override build settings without dirtying their trees
+-include local.mk
+
+
+all: $(PROGRAMS) sparse.pc smatch
+
+all-installable: $(INST_PROGRAMS) $(LIBS) $(LIB_H) sparse.pc
+
+install: all-installable
+	$(Q)install -d $(DESTDIR)$(BINDIR)
+	$(Q)install -d $(DESTDIR)$(LIBDIR)
+	$(Q)install -d $(DESTDIR)$(MAN1DIR)
+	$(Q)install -d $(DESTDIR)$(INCLUDEDIR)/sparse
+	$(Q)install -d $(DESTDIR)$(PKGCONFIGDIR)
+	$(Q)install -d $(DESTDIR)$(SMATCHDATADIR)/smatch_data
+	$(Q)install -d $(DESTDIR)$(SMATCHDATADIR)/smatch_scripts
+	$(foreach f,$(INST_PROGRAMS),$(call INSTALL_EXEC,$f,$(BINDIR)))
+	$(foreach f,$(INST_MAN1),$(call INSTALL_FILE,$f,$(MAN1DIR)))
+	$(foreach f,$(LIBS),$(call INSTALL_FILE,$f,$(LIBDIR)))
+	$(foreach f,$(LIB_H),$(call INSTALL_FILE,$f,$(INCLUDEDIR)/sparse))
+	$(call INSTALL_FILE,sparse.pc,$(PKGCONFIGDIR))
+	$(foreach f,$(SMATCH_DATA),$(call INSTALL_FILE,$f,$(SMATCHDATADIR)))
+	$(foreach f,$(SMATCH_SCRIPTS),$(call INSTALL_EXEC,$f,$(SMATCHDATADIR)))
+
+sparse.pc: sparse.pc.in
+	$(QUIET_GEN)sed $(SED_PC_CMD) sparse.pc.in > sparse.pc
+
+
+compile_EXTRA_DEPS = compile-i386.o
+
+$(foreach p,$(PROGRAMS),$(eval $(p): $($(p)_EXTRA_DEPS) $(LIBS)))
+$(PROGRAMS): % : %.o 
+	$(QUIET_LINK)$(LD) -o $@ $^ $($@_EXTRA_OBJS) $(LDFLAGS)
+
+smatch: smatch.o $(SMATCH_FILES) $(SMATCH_CHECKS) $(LIBS) 
+	$(QUIET_LINK)$(LD) -o $@ $< $(SMATCH_FILES) $(SMATCH_CHECKS) $(LIBS) $(LDFLAGS)
+
+$(LIB_FILE): $(LIB_OBJS)
+	$(QUIET_AR)$(AR) rcs $@ $(LIB_OBJS)
+
+$(SLIB_FILE): $(LIB_OBJS)
+	$(QUIET_LINK)$(CC) -Wl,-soname,$@ -shared -o $@ $(LIB_OBJS) $(LDFLAGS)
+
+check_list_local.h:
+	touch check_list_local.h
+
+smatch.o: smatch.c $(LIB_H) smatch.h check_list.h check_list_local.h
+	$(CC) $(CFLAGS) -c smatch.c -DSMATCHDATADIR='"$(SMATCHDATADIR)"'
+$(SMATCH_CHECKS): smatch.h smatch_slist.h smatch_extra.h avl.h
+DEP_FILES := $(wildcard .*.o.d)
+
+ifneq ($(DEP_FILES),)
+include $(DEP_FILES)
+endif
+
+c2xml.o c2xml.sc: PKG_CFLAGS += $(LIBXML_CFLAGS)
+
+pre-process.sc: CHECKER_FLAGS += -Wno-vla
+
+%.o: %.c $(LIB_H)
+	$(QUIET_CC)$(CC) -o $@ -c $(ALL_CFLAGS) $<
+
+%.sc: %.c sparse
+	$(QUIET_CHECK) $(CHECKER) $(CHECKER_FLAGS) -c $(ALL_CFLAGS) $<
+
+ALL_OBJS :=  $(LIB_OBJS) $(foreach p,$(PROGRAMS),$(p).o $($(p)_EXTRA_DEPS))
+selfcheck: $(ALL_OBJS:.o=.sc)
+
+
+clean: clean-check
+	rm -f *.[oa] .*.d *.so cwchash/*.o cwchash/.*.d cwchash/tester \
+		$(PROGRAMS) $(SLIB_FILE) pre-process.h sparse.pc version.h
+
+dist:
+	@if test "$(SPARSE_VERSION)" != "v$(VERSION)" ; then \
+		echo 'Update VERSION in the Makefile before running "make dist".' ; \
+		exit 1 ; \
+	fi
+	git archive --format=tar --prefix=sparse-$(VERSION)/ HEAD^{tree} | gzip -9 > sparse-$(VERSION).tar.gz
+
+check: all
+	$(Q)cd validation && ./test-suite
+
+clean-check:
+	find validation/ \( -name "*.c.output.expected" \
+	                 -o -name "*.c.output.got" \
+	                 -o -name "*.c.output.diff" \
+	                 -o -name "*.c.error.expected" \
+	                 -o -name "*.c.error.got" \
+	                 -o -name "*.c.error.diff" \
+	                 \) -exec rm {} \;
--- /dev/null	Fri Dec 21 14:59:59 2018
+++ new/usr/src/tools/smatch/src/README	Fri Dec 21 14:59:59 2018
@@ -0,0 +1,3 @@
+There are some documents under the Documentation/ directory.
+
+For parsing implicit dependencies, see smatch_scripts/implicit_dependencies.
--- /dev/null	Fri Dec 21 14:59:59 2018
+++ new/usr/src/tools/smatch/src/allocate.c	Fri Dec 21 14:59:59 2018
@@ -0,0 +1,153 @@
+/*
+ * allocate.c - simple space-efficient blob allocator.
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003-2004 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * Simple allocator for data that doesn't get partially free'd.
+ * The tokenizer and parser allocate a _lot_ of small data structures
+ * (often just two-three bytes for things like small integers),
+ * and since they all depend on each other you can't free them
+ * individually _anyway_. So do something that is very space-
+ * efficient: allocate larger "blobs", and give out individual
+ * small bits and pieces of it with no maintenance overhead.
+ */
+#include <stdlib.h>
+#include <stddef.h>
+#include <stdio.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "compat.h"
+#include "token.h"
+#include "symbol.h"
+#include "scope.h"
+#include "expression.h"
+#include "linearize.h"
+
+void protect_allocations(struct allocator_struct *desc)
+{
+	desc->blobs = NULL;
+}
+
+void drop_all_allocations(struct allocator_struct *desc)
+{
+	struct allocation_blob *blob = desc->blobs;
+
+	desc->blobs = NULL;
+	desc->allocations = 0;
+	desc->total_bytes = 0;
+	desc->useful_bytes = 0;
+	desc->freelist = NULL;
+	while (blob) {
+		struct allocation_blob *next = blob->next;
+		blob_free(blob, desc->chunking);
+		blob = next;
+	}
+}
+
+void free_one_entry(struct allocator_struct *desc, void *entry)
+{
+	void **p = entry;
+	*p = desc->freelist;
+	desc->freelist = p;
+}
+
+void *allocate(struct allocator_struct *desc, unsigned int size)
+{
+	unsigned long alignment = desc->alignment;
+	struct allocation_blob *blob = desc->blobs;
+	void *retval;
+
+	/*
+	 * NOTE! The freelist only works with things that are
+	 *  (a) sufficiently aligned
+	 *  (b) use a constant size
+	 * Don't try to free allocators that don't follow
+	 * these rules.
+	 */
+	if (desc->freelist) {
+		void **p = desc->freelist;
+		retval = p;
+		desc->freelist = *p;
+		do {
+			*p = NULL;
+			p++;
+		} while ((size -= sizeof(void *)) > 0);
+		return retval;
+	}
+
+	desc->allocations++;
+	desc->useful_bytes += size;
+	size = (size + alignment - 1) & ~(alignment-1);
+	if (!blob || blob->left < size) {
+		unsigned int offset, chunking = desc->chunking;
+		struct allocation_blob *newblob = blob_alloc(chunking);
+		if (!newblob)
+			die("out of memory");
+		desc->total_bytes += chunking;
+		newblob->next = blob;
+		blob = newblob;
+		desc->blobs = newblob;
+		offset = offsetof(struct allocation_blob, data);
+		offset = (offset + alignment - 1) & ~(alignment-1);
+		blob->left = chunking - offset;
+		blob->offset = offset - offsetof(struct allocation_blob, data);
+	}
+	retval = blob->data + blob->offset;
+	blob->offset += size;
+	blob->left -= size;
+	return retval;
+}
+
+void show_allocations(struct allocator_struct *x)
+{
+	fprintf(stderr, "%s: %lu allocations, %lu bytes (%lu total bytes, "
+			"%6.2f%% usage, %6.2f average size)\n",
+		x->name, x->allocations, x->useful_bytes, x->total_bytes,
+		100 * (double) x->useful_bytes / x->total_bytes,
+		(double) x->useful_bytes / x->allocations);
+}
+
+void get_allocator_stats(struct allocator_struct *x, struct allocator_stats *s)
+{
+	s->name = x->name;
+	s->allocations = x->allocations;
+	s->useful_bytes = x->useful_bytes;
+	s->total_bytes = x->total_bytes;
+}
+
+ALLOCATOR(ident, "identifiers");
+ALLOCATOR(token, "tokens");
+ALLOCATOR(context, "contexts");
+ALLOCATOR(symbol, "symbols");
+ALLOCATOR(expression, "expressions");
+ALLOCATOR(statement, "statements");
+ALLOCATOR(string, "strings");
+ALLOCATOR(scope, "scopes");
+__DO_ALLOCATOR(void, 0, 1, "bytes", bytes);
+ALLOCATOR(basic_block, "basic_block");
+ALLOCATOR(entrypoint, "entrypoint");
+ALLOCATOR(instruction, "instruction");
+ALLOCATOR(multijmp, "multijmp");
+ALLOCATOR(pseudo, "pseudo");
+
+
--- /dev/null	Fri Dec 21 14:59:59 2018
+++ new/usr/src/tools/smatch/src/allocate.h	Fri Dec 21 14:59:59 2018
@@ -0,0 +1,94 @@
+#ifndef ALLOCATE_H
+#define ALLOCATE_H
+
+struct allocation_blob {
+	struct allocation_blob *next;
+	unsigned int left, offset;
+	unsigned char data[];
+};
+
+struct allocator_struct {
+	const char *name;
+	struct allocation_blob *blobs;
+	unsigned int alignment;
+	unsigned int chunking;
+	void *freelist;
+	/* statistics */
+	unsigned long allocations, total_bytes, useful_bytes;
+};
+
+struct allocator_stats {
+	const char *name;
+	unsigned int allocations;
+	unsigned long total_bytes, useful_bytes;
+};
+
+extern void protect_allocations(struct allocator_struct *desc);
+extern void drop_all_allocations(struct allocator_struct *desc);
+extern void *allocate(struct allocator_struct *desc, unsigned int size);
+extern void free_one_entry(struct allocator_struct *desc, void *entry);
+extern void show_allocations(struct allocator_struct *);
+extern void get_allocator_stats(struct allocator_struct *, struct allocator_stats *);
+extern void show_allocation_stats(void);
+
+#define __DECLARE_ALLOCATOR(type, x)		\
+	extern type *__alloc_##x(int);		\
+	extern void __free_##x(type *);		\
+	extern void show_##x##_alloc(void);	\
+	extern void get_##x##_stats(struct allocator_stats *);		\
+	extern void clear_##x##_alloc(void);	\
+	extern void protect_##x##_alloc(void);
+#define DECLARE_ALLOCATOR(x) __DECLARE_ALLOCATOR(struct x, x)
+
+#define __DO_ALLOCATOR(type, objsize, objalign, objname, x)	\
+	static struct allocator_struct x##_allocator = {	\
+		.name = objname,				\
+		.alignment = objalign,				\
+		.chunking = CHUNK };				\
+	type *__alloc_##x(int extra)				\
+	{							\
+		return allocate(&x##_allocator, objsize+extra);	\
+	}							\
+	void __free_##x(type *entry)				\
+	{							\
+		free_one_entry(&x##_allocator, entry);		\
+	}							\
+	void show_##x##_alloc(void)				\
+	{							\
+		show_allocations(&x##_allocator);		\
+	}							\
+	void get_##x##_stats(struct allocator_stats *s)		\
+	{							\
+		get_allocator_stats(&x##_allocator, s);		\
+	}							\
+	void clear_##x##_alloc(void)				\
+	{							\
+		drop_all_allocations(&x##_allocator);		\
+	}							\
+	void protect_##x##_alloc(void)				\
+	{							\
+		protect_allocations(&x##_allocator);		\
+	}
+
+#define __ALLOCATOR(t, n, x) 					\
+	__DO_ALLOCATOR(t, sizeof(t), __alignof__(t), n, x)
+
+#define ALLOCATOR(x, n) __ALLOCATOR(struct x, n, x)
+
+DECLARE_ALLOCATOR(ident);
+DECLARE_ALLOCATOR(token);
+DECLARE_ALLOCATOR(context);
+DECLARE_ALLOCATOR(symbol);
+DECLARE_ALLOCATOR(expression);
+DECLARE_ALLOCATOR(statement);
+DECLARE_ALLOCATOR(string);
+DECLARE_ALLOCATOR(scope);
+__DECLARE_ALLOCATOR(void, bytes);
+DECLARE_ALLOCATOR(basic_block);
+DECLARE_ALLOCATOR(entrypoint);
+DECLARE_ALLOCATOR(instruction);
+DECLARE_ALLOCATOR(multijmp);
+DECLARE_ALLOCATOR(pseudo);
+DECLARE_ALLOCATOR(attribute);
+
+#endif
--- /dev/null	Fri Dec 21 15:00:00 2018
+++ new/usr/src/tools/smatch/src/ast-inspect.c	Fri Dec 21 15:00:00 2018
@@ -0,0 +1,222 @@
+
+#include "token.h"
+#include "parse.h"
+#include "symbol.h"
+#include "ast-inspect.h"
+#include "expression.h"
+
+static inline void inspect_ptr_list(AstNode *node, const char *name, void (*inspect)(AstNode *))
+{
+	struct ptr_list *ptrlist = node->ptr;
+	void *ptr;
+	int i = 0;
+
+	node->text = g_strdup_printf("%s %s:", node->text, name);
+	FOR_EACH_PTR(ptrlist, ptr) {
+		char *index = g_strdup_printf("%d: ", i++);
+		ast_append_child(node, index, ptr, inspect);
+	} END_FOR_EACH_PTR(ptr);
+}
+
+
+static const char *statement_type_name(enum statement_type type)
+{
+	static const char *statement_type_name[] = {
+		[STMT_NONE] = "STMT_NONE",
+		[STMT_DECLARATION] = "STMT_DECLARATION",
+		[STMT_EXPRESSION] = "STMT_EXPRESSION",
+		[STMT_COMPOUND] = "STMT_COMPOUND",
+		[STMT_IF] = "STMT_IF",
+		[STMT_RETURN] = "STMT_RETURN",
+		[STMT_CASE] = "STMT_CASE",
+		[STMT_SWITCH] = "STMT_SWITCH",
+		[STMT_ITERATOR] = "STMT_ITERATOR",
+		[STMT_LABEL] = "STMT_LABEL",
+		[STMT_GOTO] = "STMT_GOTO",
+		[STMT_ASM] = "STMT_ASM",
+		[STMT_CONTEXT] = "STMT_CONTEXT",
+		[STMT_RANGE] = "STMT_RANGE",
+	};
+	return statement_type_name[type] ?: "UNKNOWN_STATEMENT_TYPE";
+}
+
+void inspect_statement(AstNode *node)
+{
+	struct statement *stmt = node->ptr;
+	node->text = g_strdup_printf("%s %s:", node->text, statement_type_name(stmt->type));
+	switch (stmt->type) {
+		case STMT_COMPOUND:
+			ast_append_child(node, "stmts:", stmt->stmts, inspect_statement_list);
+			break;
+		case STMT_EXPRESSION:
+			ast_append_child(node, "expression:", stmt->expression, inspect_expression);
+			break;
+		case STMT_IF:
+			ast_append_child(node, "conditional:", stmt->if_conditional, inspect_expression);
+			ast_append_child(node, "if_true:", stmt->if_true, inspect_statement);
+			ast_append_child(node, "if_false:", stmt->if_false, inspect_statement);
+			break;
+		case STMT_ITERATOR:
+			ast_append_child(node, "break:", stmt->iterator_break, inspect_symbol);
+			ast_append_child(node, "continue:", stmt->iterator_continue, inspect_symbol);
+			ast_append_child(node, "pre_statement:", stmt->iterator_pre_statement,
+					 inspect_statement);
+			ast_append_child(node, "statement:", stmt->iterator_statement,
+					 inspect_statement);
+			ast_append_child(node, "post_statement:", stmt->iterator_post_statement,
+					 inspect_statement);
+			break;
+
+		case STMT_SWITCH:
+			ast_append_child(node, "switch_expression:", stmt->switch_expression, inspect_expression);
+			ast_append_child(node, "switch_statement:", stmt->switch_statement, inspect_statement);
+			ast_append_child(node, "switch_break:", stmt->switch_break, inspect_symbol);
+			ast_append_child(node, "switch_case:", stmt->switch_case, inspect_symbol);
+			break;
+		case STMT_CASE:
+			ast_append_child(node, "case_expression:", stmt->case_expression, inspect_expression);
+			ast_append_child(node, "case_to:", stmt->case_to, inspect_expression);
+			ast_append_child(node, "case_statement:", stmt->case_statement, inspect_statement);
+			ast_append_child(node, "case_label:", stmt->case_label, inspect_symbol);
+			break;
+		case STMT_RETURN:
+			ast_append_child(node, "ret_value:", stmt->ret_value, inspect_expression);
+			ast_append_child(node, "ret_target:", stmt->ret_target, inspect_symbol);
+			break;
+
+		default:
+			break;
+	}
+}
+
+
+void inspect_statement_list(AstNode *node)
+{
+	inspect_ptr_list(node, "statement_list", inspect_statement);
+}
+
+
+static const char *symbol_type_name(enum type type)
+{
+	static const char *type_name[] = {
+		[SYM_UNINITIALIZED] = "SYM_UNINITIALIZED",
+		[SYM_PREPROCESSOR] = "SYM_PREPROCESSOR",
+		[SYM_BASETYPE] = "SYM_BASETYPE",
+		[SYM_NODE] = "SYM_NODE",
+		[SYM_PTR] = "SYM_PTR",
+		[SYM_FN] = "SYM_FN",
+		[SYM_ARRAY] = "SYM_ARRAY",
+		[SYM_STRUCT] = "SYM_STRUCT",
+		[SYM_UNION] = "SYM_UNION",
+		[SYM_ENUM] = "SYM_ENUM",
+		[SYM_TYPEDEF] = "SYM_TYPEDEF",
+		[SYM_TYPEOF] = "SYM_TYPEOF",
+		[SYM_MEMBER] = "SYM_MEMBER",
+		[SYM_BITFIELD] = "SYM_BITFIELD",
+		[SYM_LABEL] = "SYM_LABEL",
+		[SYM_RESTRICT] = "SYM_RESTRICT",
+		[SYM_FOULED] = "SYM_FOULED",
+		[SYM_KEYWORD] = "SYM_KEYWORD",
+		[SYM_BAD] = "SYM_BAD",
+	};
+	return type_name[type] ?: "UNKNOWN_TYPE";
+}
+
+
+void inspect_symbol(AstNode *node)
+{
+	struct symbol *sym = node->ptr;
+	node->text = g_strdup_printf("%s %s: %s", node->text, symbol_type_name(sym->type),
+				      builtin_typename(sym) ?: show_ident(sym->ident));
+	ast_append_child(node, "ctype.base_type:", sym->ctype.base_type,inspect_symbol);
+
+	switch (sym->namespace) {
+		case NS_PREPROCESSOR:
+			break;
+		default:
+			ast_append_child(node, "arguments:", sym->arguments, inspect_symbol_list);
+			ast_append_child(node, "symbol_list:", sym->symbol_list, inspect_symbol_list);
+			ast_append_child(node, "stmt:", sym->stmt, inspect_statement);
+			break;
+	}
+}
+
+
+void inspect_symbol_list(AstNode *node)
+{
+	inspect_ptr_list(node, "symbol_list", inspect_symbol);
+}
+
+
+static const char *expression_type_name(enum expression_type type)
+{
+	static const char *expression_type_name[] = {
+		[EXPR_VALUE] = "EXPR_VALUE",
+		[EXPR_STRING] = "EXPR_STRING",
+		[EXPR_SYMBOL] = "EXPR_SYMBOL",
+		[EXPR_TYPE] = "EXPR_TYPE",
+		[EXPR_BINOP] = "EXPR_BINOP",
+		[EXPR_ASSIGNMENT] = "EXPR_ASSIGNMENT",
+		[EXPR_LOGICAL] = "EXPR_LOGICAL",
+		[EXPR_DEREF] = "EXPR_DEREF",
+		[EXPR_PREOP] = "EXPR_PREOP",
+		[EXPR_POSTOP] = "EXPR_POSTOP",
+		[EXPR_CAST] = "EXPR_CAST",
+		[EXPR_FORCE_CAST] = "EXPR_FORCE_CAST",
+		[EXPR_IMPLIED_CAST] = "EXPR_IMPLIED_CAST",
+		[EXPR_SIZEOF] = "EXPR_SIZEOF",
+		[EXPR_ALIGNOF] = "EXPR_ALIGNOF",
+		[EXPR_PTRSIZEOF] = "EXPR_PTRSIZEOF",
+		[EXPR_CONDITIONAL] = "EXPR_CONDITIONAL",
+		[EXPR_SELECT] = "EXPR_SELECT",
+		[EXPR_STATEMENT] = "EXPR_STATEMENT",
+		[EXPR_CALL] = "EXPR_CALL",
+		[EXPR_COMMA] = "EXPR_COMMA",
+		[EXPR_COMPARE] = "EXPR_COMPARE",
+		[EXPR_LABEL] = "EXPR_LABEL",
+		[EXPR_INITIALIZER] = "EXPR_INITIALIZER",
+		[EXPR_IDENTIFIER] = "EXPR_IDENTIFIER",
+		[EXPR_INDEX] = "EXPR_INDEX",
+		[EXPR_POS] = "EXPR_POS",
+		[EXPR_FVALUE] = "EXPR_FVALUE",
+		[EXPR_SLICE] = "EXPR_SLICE",
+		[EXPR_OFFSETOF] = "EXPR_OFFSETOF",
+	};
+	return expression_type_name[type] ?: "UNKNOWN_EXPRESSION_TYPE";
+}
+
+void inspect_expression(AstNode *node)
+{
+	struct expression *expr = node->ptr;
+	node->text = g_strdup_printf("%s %s", node->text, expression_type_name(expr->type));
+	switch (expr->type) {
+		case EXPR_STATEMENT:
+			ast_append_child(node, "statement:", expr->statement, inspect_statement);
+			break;
+		case EXPR_BINOP:
+		case EXPR_COMMA:
+		case EXPR_COMPARE:
+		case EXPR_LOGICAL:
+		case EXPR_ASSIGNMENT:
+			ast_append_child(node, "left:", expr->left, inspect_expression);
+			ast_append_child(node, "right:", expr->right, inspect_expression);
+			break;
+
+		case EXPR_CAST:
+		case EXPR_FORCE_CAST:
+		case EXPR_IMPLIED_CAST:
+			ast_append_child(node, "cast_type:", expr->cast_type, inspect_symbol);
+			ast_append_child(node, "cast_expression:", expr->cast_expression, inspect_expression);
+			break;
+
+		case EXPR_PREOP:
+			ast_append_child(node, "unop:", expr->unop, inspect_expression);
+			break;
+		
+		default:
+			break;
+	}
+}
+
+
+
--- /dev/null	Fri Dec 21 15:00:00 2018
+++ new/usr/src/tools/smatch/src/ast-inspect.h	Fri Dec 21 15:00:00 2018
@@ -0,0 +1,17 @@
+
+#ifndef _AST_INSPECT_H_
+#define _AST_INSPECT_H_
+
+#include "ast-model.h"
+
+void inspect_symbol(AstNode *node);
+void inspect_symbol_list(AstNode *node);
+
+void inspect_statement(AstNode *node);
+void inspect_statement_list(AstNode *node);
+
+void inspect_expression(AstNode *node);
+void inspect_expression_list(AstNode *node);
+
+
+#endif
--- /dev/null	Fri Dec 21 15:00:00 2018
+++ new/usr/src/tools/smatch/src/ast-model.c	Fri Dec 21 15:00:00 2018
@@ -0,0 +1,469 @@
+/*
+ *   ast-model.c 
+ *
+ *   A custom tree model to simplify viewing of AST objects.
+ *   Modify from the Gtk+ tree view tutorial, custom-list.c
+ *   by Tim-Philipp Mueller < tim at centricular dot net >
+ *
+ *   Copyright (C) 2010 Christopher Li
+ */
+
+
+#include "ast-model.h"
+#include "stdint.h"
+
+/* boring declarations of local functions */
+
+static void ast_init(AstNode *pkg_tree);
+static void ast_class_init(AstNodeClass *klass);
+static void ast_tree_model_init(GtkTreeModelIface *iface);
+static void ast_finalize(GObject *object);
+static GtkTreeModelFlags ast_get_flags(GtkTreeModel *tree_model);
+static gint ast_get_n_columns(GtkTreeModel *tree_model);
+static GType ast_get_column_type(GtkTreeModel *tree_model, gint index);
+static gboolean ast_get_iter(GtkTreeModel *tree_model, GtkTreeIter *iter,
+				  GtkTreePath *path);
+static GtkTreePath *ast_get_path(GtkTreeModel *tree_model, GtkTreeIter *iter); 
+static void ast_get_value(GtkTreeModel *tree_model, GtkTreeIter *iter,
+			       gint column, GValue *value);
+static gboolean ast_iter_next(GtkTreeModel *tree_model, GtkTreeIter *iter);
+static gboolean ast_iter_children(GtkTreeModel *tree_model,
+                                       GtkTreeIter *iter,
+                                       GtkTreeIter *parent);
+static gboolean ast_iter_has_child(GtkTreeModel *tree_model, GtkTreeIter *iter);
+static gint ast_iter_n_children (GtkTreeModel *tree_model, GtkTreeIter *iter);
+static gboolean ast_iter_nth_child(GtkTreeModel *tree_model, GtkTreeIter *iter,
+                                        GtkTreeIter *parent, gint n);
+static gboolean ast_iter_parent(GtkTreeModel *tree_model,
+                                     GtkTreeIter *iter,
+                                     GtkTreeIter *child);
+
+static GObjectClass *parent_class = NULL;  /* GObject stuff - nothing to worry about */
+
+static inline
+void inspect_child_node(AstNode *node)
+{
+	if (node->inspect) {
+		node->inspect(node);
+		node->inspect = NULL;
+	}
+}
+
+
+static inline
+AstNode* ast_nth_child(AstNode *node, int n)
+{
+	if (!node)
+		return NULL;
+
+	inspect_child_node(node);
+
+	if (n >= node->childnodes->len)
+		return NULL;
+	return g_array_index(node->childnodes, AstNode *, n);
+}
+
+
+static inline
+gboolean ast_set_iter(GtkTreeIter *iter, AstNode *node)
+{
+	iter->user_data = node;
+	iter->user_data2 = iter->user_data3 = NULL;
+	return node != NULL;
+}
+
+
+/*****************************************************************************
+ *
+ *  ast_get_type: here we register our new type and its interfaces
+ *                with the type system. If you want to implement
+ *                additional interfaces like GtkTreeSortable, you
+ *                will need to do it here.
+ *
+ *****************************************************************************/
+
+GType
+ast_get_type (void)
+{
+	static GType ast_type = 0;
+	static const GTypeInfo ast_info = {
+		sizeof (AstNodeClass),
+		NULL,                                         /* base_init */
+		NULL,                                         /* base_finalize */
+		(GClassInitFunc) ast_class_init,
+		NULL,                                         /* class finalize */
+		NULL,                                         /* class_data */
+		sizeof (AstNode),
+		0,                                           /* n_preallocs */
+		(GInstanceInitFunc) ast_init
+	};
+	static const GInterfaceInfo tree_model_info = {
+		(GInterfaceInitFunc) ast_tree_model_init,
+		NULL,
+		NULL
+	};
+
+
+
+	if (ast_type)
+		return ast_type;
+
+	/* Some boilerplate type registration stuff */
+	ast_type = g_type_register_static(G_TYPE_OBJECT, "AstNode",
+						&ast_info, (GTypeFlags)0);
+
+	/* Here we register our GtkTreeModel interface with the type system */
+	g_type_add_interface_static(ast_type, GTK_TYPE_TREE_MODEL, &tree_model_info);
+
+	return ast_type;
+}
+
+
+/*****************************************************************************
+ *
+ *  ast_class_init: more boilerplate GObject/GType stuff.
+ *                  Init callback for the type system,
+ *                  called once when our new class is created.
+ *
+ *****************************************************************************/
+
+static void
+ast_class_init (AstNodeClass *klass)
+{
+	GObjectClass *object_class;
+
+	parent_class = (GObjectClass*) g_type_class_peek_parent (klass);
+	object_class = (GObjectClass*) klass;
+
+	object_class->finalize = ast_finalize;
+}
+
+/*****************************************************************************
+ *
+ *  ast_tree_model_init: init callback for the interface registration
+ *                       in ast_get_type. Here we override
+ *                       the GtkTreeModel interface functions that
+ *                       we implement.
+ *
+ *****************************************************************************/
+
+static void
+ast_tree_model_init (GtkTreeModelIface *iface)
+{
+	iface->get_flags       = ast_get_flags;
+	iface->get_n_columns   = ast_get_n_columns;
+	iface->get_column_type = ast_get_column_type;
+	iface->get_iter        = ast_get_iter;
+	iface->get_path        = ast_get_path;
+	iface->get_value       = ast_get_value;
+	iface->iter_next       = ast_iter_next;
+	iface->iter_children   = ast_iter_children;
+	iface->iter_has_child  = ast_iter_has_child;
+	iface->iter_n_children = ast_iter_n_children;
+	iface->iter_nth_child  = ast_iter_nth_child;
+	iface->iter_parent     = ast_iter_parent;
+}
+
+
+/*****************************************************************************
+ *
+ *  ast_init: this is called every time a new ast node object
+ *            instance is created (we do that in ast_new).
+ *            Initialise the list structure's fields here.
+ *
+ *****************************************************************************/
+
+static void
+ast_init (AstNode *node)
+{
+	node->childnodes = g_array_new(FALSE, TRUE, sizeof(AstNode *));
+	node->stamp    = g_random_int(); /* Random int to check whether iters belong to out model */
+}
+
+
+/*****************************************************************************
+ *
+ *  ast_finalize: this is called just before an ast node is
+ *                destroyed. Free dynamically allocated memory here.
+ *
+ *****************************************************************************/
+
+static void
+ast_finalize (GObject *object)
+{
+	/*  AstNode *node = AST_NODE(object); */
+
+	/* FIXME: free all node memory */
+
+	/* must chain up - finalize parent */
+	(* parent_class->finalize) (object);
+}
+
+
+/*****************************************************************************
+ *
+ *  ast_get_flags: tells the rest of the world whether our tree model
+ *                 has any special characteristics. In our case,
+ *                 we have a list model (instead of a tree), and each
+ *                 tree iter is valid as long as the row in question
+ *                 exists, as it only contains a pointer to our struct.
+ *
+ *****************************************************************************/
+
+static GtkTreeModelFlags
+ast_get_flags(GtkTreeModel *tree_model)
+{
+	return (GTK_TREE_MODEL_ITERS_PERSIST);
+}
+
+
+/*****************************************************************************
+ *
+ *  ast_get_n_columns: tells the rest of the world how many data
+ *                          columns we export via the tree model interface
+ *
+ *****************************************************************************/
+
+static gint
+ast_get_n_columns(GtkTreeModel *tree_model)
+{
+	return 1;
+}
+
+
+/*****************************************************************************
+ *
+ *  ast_get_column_type: tells the rest of the world which type of
+ *                       data an exported model column contains
+ *
+ *****************************************************************************/
+
+static GType
+ast_get_column_type(GtkTreeModel *tree_model,
+                         gint index)
+{
+	return G_TYPE_STRING;
+}
+
+
+/*****************************************************************************
+ *
+ *  ast_get_iter: converts a tree path (physical position) into a
+ *                tree iter structure (the content of the iter
+ *                fields will only be used internally by our model).
+ *                We simply store a pointer to our AstNodeItem
+ *                structure that represents that row in the tree iter.
+ *
+ *****************************************************************************/
+
+static gboolean
+ast_get_iter(GtkTreeModel *tree_model,
+                  GtkTreeIter  *iter,
+                  GtkTreePath  *path)
+{
+	AstNode    *node;
+	gint          *indices, depth;
+	int i;
+
+	node = AST_NODE(tree_model);
+	indices = gtk_tree_path_get_indices(path);
+	depth   = gtk_tree_path_get_depth(path);
+
+	for (i = 0; i < depth; i++)
+		node = ast_nth_child(node, indices[i]);
+
+	return ast_set_iter(iter, node);
+}
+
+
+/*****************************************************************************
+ *
+ *  ast_get_path: converts a tree iter into a tree path (ie. the
+ *                physical position of that row in the list).
+ *
+ *****************************************************************************/
+
+static GtkTreePath *
+ast_get_path(GtkTreeModel *tree_model,
+                  GtkTreeIter  *iter)
+{
+	GtkTreePath  *path;
+	AstNode   *root = AST_NODE(tree_model);
+	AstNode   *node = AST_NODE(iter->user_data);
+
+	path = gtk_tree_path_new();
+	while (node != root) {
+		gtk_tree_path_prepend_index(path, node->index);
+		node = node->parent;
+	}
+	return path;
+}
+
+
+/*****************************************************************************
+ *
+ *  ast_get_value: Returns a row's exported data columns
+ *                 (_get_value is what gtk_tree_model_get uses)
+ *
+ *****************************************************************************/
+
+static void
+ast_get_value(GtkTreeModel *tree_model,
+                   GtkTreeIter  *iter,
+                   gint          column,
+                   GValue       *value)
+{
+	AstNode    *node = iter->user_data;
+
+	g_assert(AST_IS_NODE(tree_model));
+	if (column != 1)
+		return;
+
+	inspect_child_node(node);
+
+	g_value_init(value, G_TYPE_STRING);
+	g_value_set_string(value, node->text);
+	return;
+}
+
+
+/*****************************************************************************
+ *
+ *  ast_iter_next: Takes an iter structure and sets it to point
+ *                 to the next row.
+ *
+ *****************************************************************************/
+
+static gboolean
+ast_iter_next(GtkTreeModel  *tree_model,
+                   GtkTreeIter   *iter)
+{
+	AstNode    *node = iter->user_data;
+	
+	g_assert(AST_IS_NODE (tree_model));
+
+	node = ast_nth_child(node->parent, node->index + 1);
+	return ast_set_iter(iter, node);
+}
+
+
+/*****************************************************************************
+ *
+ *  ast_iter_children: Returns TRUE or FALSE depending on whether
+ *                     the row specified by 'parent' has any children.
+ *                     If it has children, then 'iter' is set to
+ *                     point to the first child. Special case: if
+ *                     'parent' is NULL, then the first top-level
+ *                     row should be returned if it exists.
+ *
+ *****************************************************************************/
+
+static gboolean
+ast_iter_children(GtkTreeModel *tree_model,
+                       GtkTreeIter  *iter,
+                       GtkTreeIter  *parent)
+{
+	return ast_iter_nth_child(tree_model, iter, parent, 0);
+}
+
+
+/*****************************************************************************
+ *
+ *  ast_iter_has_child: Returns TRUE or FALSE depending on whether
+ *                      the row specified by 'iter' has any children.
+ *                      We only have a list and thus no children.
+ *
+ *****************************************************************************/
+
+static gboolean
+ast_iter_has_child (GtkTreeModel *tree_model,
+                         GtkTreeIter  *iter)
+{
+	AstNode    *node = iter->user_data;
+	inspect_child_node(node);
+	return node->childnodes->len > 0;
+}
+
+
+/*****************************************************************************
+ *
+ *  ast_iter_n_children: Returns the number of children the row
+ *                       specified by 'iter' has. This is usually 0,
+ *                       as we only have a list and thus do not have
+ *                       any children to any rows. A special case is
+ *                       when 'iter' is NULL, in which case we need
+ *                       to return the number of top-level node,
+ *                       ie. the number of rows in our list.
+ *
+ *****************************************************************************/
+
+static gint
+ast_iter_n_children (GtkTreeModel *tree_model,
+                          GtkTreeIter  *iter)
+{
+	AstNode  *node = iter ? iter->user_data
+				: AST_NODE(tree_model);
+
+	inspect_child_node(node);
+	return node->childnodes->len;
+}
+
+
+/*****************************************************************************
+ *
+ *  ast_iter_nth_child: If the row specified by 'parent' has any
+ *                      children, set 'iter' to the n-th child and
+ *                      return TRUE if it exists, otherwise FALSE.
+ *                      A special case is when 'parent' is NULL, in
+ *                      which case we need to set 'iter' to the n-th
+ *                      row if it exists.
+ *
+ *****************************************************************************/
+
+static gboolean
+ast_iter_nth_child(GtkTreeModel *tree_model,
+                        GtkTreeIter  *iter,
+                        GtkTreeIter  *parent,
+                        gint          n)
+{
+	AstNode    *node = parent ? parent->user_data : (AstNode*) tree_model;
+	GArray *array = node->childnodes;
+	if (n >= array->len)
+		return FALSE;
+	iter->user_data = g_array_index(array, AstNode *, n);
+	return TRUE;
+}
+
+
+/*****************************************************************************
+ *
+ *  ast_iter_parent: Point 'iter' to the parent node of 'child'. As
+ *                   we have a list and thus no children and no
+ *                   parents of children, we can just return FALSE.
+ *
+ *****************************************************************************/
+
+static gboolean
+ast_iter_parent (GtkTreeModel *tree_model,
+                      GtkTreeIter  *iter,
+                      GtkTreeIter  *child)
+{
+	AstNode *node = (AstNode *) child->user_data;
+	iter->user_data = node->parent;
+	return node->parent != NULL;
+}
+
+
+AstNode *
+ast_new (AstNode *parent, int index, const char *text, void *ptr, void (*inspect)(AstNode*))
+{
+	AstNode *node = (AstNode*) g_object_new (AST_TYPE_NODE, NULL);
+	g_assert(node != NULL);
+	node->parent = parent;
+	node->index = index;
+	node->text = text;
+	node->inspect = inspect;
+	node->ptr = ptr;
+	return node;
+}
+
--- /dev/null	Fri Dec 21 15:00:00 2018
+++ new/usr/src/tools/smatch/src/ast-model.h	Fri Dec 21 15:00:00 2018
@@ -0,0 +1,90 @@
+
+/*
+ * ast-model.h
+ *
+ * Copyright (C) 2010 Christopher Li.
+ *
+ */
+
+#ifndef _ast_model_h_
+#define _ast_model_h_
+
+#include <stdint.h>
+#include <gtk/gtk.h>
+#include "lib.h"
+
+#define AST_TYPE_NODE                  (ast_get_type ())
+#define AST_NODE(obj)                  (G_TYPE_CHECK_INSTANCE_CAST ((obj), AST_TYPE_NODE, AstNode))
+#define AST_NODE_CLASS(klass)          (G_TYPE_CHECK_CLASS_CAST ((klass),  AST_TYPE_NODE, AstNodeClass))
+#define AST_IS_NODE(obj)               (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AST_TYPE_NODE))
+#define AST_IS_NODE_CLASS(klass)       (G_TYPE_CHECK_CLASS_TYPE ((klass),  AST_TYPE_NODE))
+#define AST_NODE_GET_CLASS(obj)        (G_TYPE_INSTANCE_GET_CLASS ((obj),  AST_TYPE_NODE, AstNodeClass))
+
+enum
+{
+	AST_COL_RECORD = 0,
+	AST_COL_NAME,
+	AST_N_COLUMNS,
+} ;
+
+
+typedef struct AstNode AstNode;
+typedef struct AstNodeClass AstNodeClass;
+
+
+
+/* AstNode: this structure contains everything we need for our
+ *             model implementation. You can add extra fields to
+ *             this structure, e.g. hashtables to quickly lookup
+ *             rows or whatever else you might need, but it is
+ *             crucial that 'parent' is the first member of the
+ *             structure.                                          */
+
+struct AstNode
+{
+	GObject         base;      /* this MUST be the first member */
+
+	AstNode	*parent;
+	int index;
+	const gchar *text;
+	void (*inspect)(struct AstNode* node);
+	void *ptr;
+	GArray *childnodes;
+	gint stamp;
+};
+
+
+
+/* AstNodeClass: more boilerplate GObject stuff */
+
+struct AstNodeClass
+{
+	GObjectClass base_class;
+};
+
+
+GType ast_get_type(void);
+AstNode* ast_new(AstNode *parent, int index, const char *prefix, void *ptr, void (*expand)(AstNode*));
+
+
+static inline
+AstNode* ast_append_child(AstNode *parent, const char *text,
+			   void *ptr, void (*inspect)(AstNode*))
+{
+	if (ptr) {
+		AstNode *child = ast_new(parent, parent->childnodes->len,
+						text, ptr, inspect);
+		g_array_append_val(parent->childnodes, child);
+		return child;
+	}
+	return NULL;
+}
+
+static inline
+void ast_append_attribute(AstNode *parent, const char *text)
+{
+	AstNode *child = ast_new(parent, parent->childnodes->len, text, NULL, NULL);
+	g_array_append_val(parent->childnodes, child);
+}
+
+#endif /* _ast_h_*/
--- /dev/null	Fri Dec 21 15:00:00 2018
+++ new/usr/src/tools/smatch/src/ast-view.c	Fri Dec 21 15:00:00 2018
@@ -0,0 +1,49 @@
+
+#include <stdlib.h>
+#include "ast-model.h"
+#include "ast-inspect.h"
+#include "ast-view.h"
+
+static GtkWidget *
+create_view_and_model (void *ptr)
+{
+	GtkTreeViewColumn   *text;
+	GtkCellRenderer *renderer;
+	AstNode *root;
+	GtkWidget *view;
+
+	root = ast_new(NULL, 0, "", ptr, inspect_symbol_list);
+
+	view = gtk_tree_view_new_with_model(GTK_TREE_MODEL(root));
+
+	g_object_unref(root); /* destroy store automatically with view */
+
+	renderer = gtk_cell_renderer_text_new();
+	text = gtk_tree_view_column_new_with_attributes("Node", renderer,
+						       "text", AST_COL_NAME,
+						       NULL);
+	gtk_tree_view_append_column(GTK_TREE_VIEW(view), text);
+
+	return view;
+}
+
+void
+treeview_main (struct symbol_list *syms)
+{
+	GtkWidget *window, *view, *scrollwin;
+
+	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+	gtk_window_set_default_size (GTK_WINDOW(window), 600, 800);
+	g_signal_connect(window, "delete_event", gtk_main_quit, NULL);
+
+	scrollwin = gtk_scrolled_window_new(NULL,NULL);
+
+	view = create_view_and_model(syms);
+
+	gtk_container_add(GTK_CONTAINER(scrollwin), view);
+	gtk_container_add(GTK_CONTAINER(window), scrollwin);
+
+	gtk_widget_show_all(window);
+
+	gtk_main();
+}
--- /dev/null	Fri Dec 21 15:00:00 2018
+++ new/usr/src/tools/smatch/src/ast-view.h	Fri Dec 21 15:00:00 2018
@@ -0,0 +1,7 @@
+
+#include <gtk/gtk.h>
+#include "lib.h"
+
+extern void treeview_main(struct symbol_list *syms);
+
+
--- /dev/null	Fri Dec 21 15:00:00 2018
+++ new/usr/src/tools/smatch/src/avl.c	Fri Dec 21 15:00:00 2018
@@ -0,0 +1,524 @@
+/*
+ * Copyright (C) 2010 Joseph Adams <joeyadams3.14159@gmail.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include <assert.h>
+#include <stdlib.h>
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static AvlNode *mkNode(const struct sm_state *sm);
+static void freeNode(AvlNode *node);
+
+static AvlNode *lookup(const struct stree *avl, AvlNode *node, const struct sm_state *sm);
+
+static bool insert_sm(struct stree *avl, AvlNode **p, const struct sm_state *sm);
+static bool remove_sm(struct stree *avl, AvlNode **p, const struct sm_state *sm, AvlNode **ret);
+static bool removeExtremum(AvlNode **p, int side, AvlNode **ret);
+
+static int sway(AvlNode **p, int sway);
+static void balance(AvlNode **p, int side);
+
+static bool checkBalances(AvlNode *node, int *height);
+static bool checkOrder(struct stree *avl);
+static size_t countNode(AvlNode *node);
+
+int unfree_stree;
+
+/*
+ * Utility macros for converting between
+ * "balance" values (-1 or 1) and "side" values (0 or 1).
+ *
+ * bal(0)   == -1
+ * bal(1)   == +1
+ * side(-1) == 0
+ * side(+1) == 1
+ */
+#define bal(side) ((side) == 0 ? -1 : 1)
+#define side(bal) ((bal)  == 1 ?  1 : 0)
+
+static struct stree *avl_new(void)
+{
+	struct stree *avl = malloc(sizeof(*avl));
+
+	unfree_stree++;
+	assert(avl != NULL);
+
+	avl->root = NULL;
+	avl->base_stree = NULL;
+	avl->has_states = calloc(num_checks + 1, sizeof(char));
+	avl->count = 0;
+	avl->stree_id = 0;
+	avl->references = 1;
+	return avl;
+}
+
+void free_stree(struct stree **avl)
+{
+	if (!*avl)
+		return;
+
+	assert((*avl)->references > 0);
+
+	(*avl)->references--;
+	if ((*avl)->references != 0) {
+		*avl = NULL;
+		return;
+	}
+
+	unfree_stree--;
+
+	freeNode((*avl)->root);
+	free(*avl);
+	*avl = NULL;
+}
+
+struct sm_state *avl_lookup(const struct stree *avl, const struct sm_state *sm)
+{
+	AvlNode *found;
+
+	if (!avl)
+		return NULL;
+	if (sm->owner != USHRT_MAX &&
+	    !avl->has_states[sm->owner])
+		return NULL;
+	found = lookup(avl, avl->root, sm);
+	if (!found)
+		return NULL;
+	return (struct sm_state *)found->sm;
+}
+
+AvlNode *avl_lookup_node(const struct stree *avl, const struct sm_state *sm)
+{
+	return lookup(avl, avl->root, sm);
+}
+
+size_t stree_count(const struct stree *avl)
+{
+	if (!avl)
+		return 0;
+	return avl->count;
+}
+
+static struct stree *clone_stree_real(struct stree *orig)
+{
+	struct stree *new = avl_new();
+	AvlIter i;
+
+	avl_foreach(i, orig)
+		avl_insert(&new, i.sm);
+
+	new->base_stree = orig->base_stree;
+	return new;
+}
+
+bool avl_insert(struct stree **avl, const struct sm_state *sm)
+{
+	size_t old_count;
+
+	if (!*avl)
+		*avl = avl_new();
+	if ((*avl)->references > 1) {
+		(*avl)->references--;
+		*avl = clone_stree_real(*avl);
+	}
+	old_count = (*avl)->count;
+	/* fortunately we never call get_state() on "unnull_path" */
+	if (sm->owner != USHRT_MAX)
+		(*avl)->has_states[sm->owner] = 1;
+	insert_sm(*avl, &(*avl)->root, sm);
+	return (*avl)->count != old_count;
+}
+
+bool avl_remove(struct stree **avl, const struct sm_state *sm)
+{
+	AvlNode *node = NULL;
+
+	if (!*avl)
+		return false;
+	/* it's fairly rare for smatch to call avl_remove */
+	if ((*avl)->references > 1) {
+		(*avl)->references--;
+		*avl = clone_stree_real(*avl);
+	}
+
+	remove_sm(*avl, &(*avl)->root, sm, &node);
+
+	if ((*avl)->count == 0)
+		free_stree(avl);
+
+	if (node == NULL) {
+		return false;
+	} else {
+		free(node);
+		return true;
+	}
+}
+
+static AvlNode *mkNode(const struct sm_state *sm)
+{
+	AvlNode *node = malloc(sizeof(*node));
+
+	assert(node != NULL);
+
+	node->sm = sm;
+	node->lr[0] = NULL;
+	node->lr[1] = NULL;
+	node->balance = 0;
+	return node;
+}
+
+static void freeNode(AvlNode *node)
+{
+	if (node) {
+		freeNode(node->lr[0]);
+		freeNode(node->lr[1]);
+		free(node);
+	}
+}
+
+static AvlNode *lookup(const struct stree *avl, AvlNode *node, const struct sm_state *sm)
+{
+	int cmp;
+
+	if (node == NULL)
+		return NULL;
+
+	cmp = cmp_tracker(sm, node->sm);
+
+	if (cmp < 0)
+		return lookup(avl, node->lr[0], sm);
+	if (cmp > 0)
+		return lookup(avl, node->lr[1], sm);
+	return node;
+}
+
+/*
+ * Insert an sm into a subtree, rebalancing if necessary.
+ *
+ * Return true if the subtree's height increased.
+ */
+static bool insert_sm(struct stree *avl, AvlNode **p, const struct sm_state *sm)
+{
+	if (*p == NULL) {
+		*p = mkNode(sm);
+		avl->count++;
+		return true;
+	} else {
+		AvlNode *node = *p;
+		int      cmp  = cmp_tracker(sm, node->sm);
+
+		if (cmp == 0) {
+			node->sm = sm;
+			return false;
+		}
+
+		if (!insert_sm(avl, &node->lr[side(cmp)], sm))
+			return false;
+
+		/* If tree's balance became -1 or 1, it means the tree's height grew due to insertion. */
+		return sway(p, cmp) != 0;
+	}
+}
+
+/*
+ * Remove the node matching the given sm.
+ * If present, return the removed node through *ret .
+ * The returned node's lr and balance are meaningless.
+ *
+ * Return true if the subtree's height decreased.
+ */
+static bool remove_sm(struct stree *avl, AvlNode **p, const struct sm_state *sm, AvlNode **ret)
+{
+	if (p == NULL || *p == NULL) {
+		return false;
+	} else {
+		AvlNode *node = *p;
+		int      cmp  = cmp_tracker(sm, node->sm);
+
+		if (cmp == 0) {
+			*ret = node;
+			avl->count--;
+
+			if (node->lr[0] != NULL && node->lr[1] != NULL) {
+				AvlNode *replacement;
+				int      side;
+				bool     shrunk;
+
+				/* Pick a subtree to pull the replacement from such that
+				 * this node doesn't have to be rebalanced. */
+				side = node->balance <= 0 ? 0 : 1;
+
+				shrunk = removeExtremum(&node->lr[side], 1 - side, &replacement);
+
+				replacement->lr[0]   = node->lr[0];
+				replacement->lr[1]   = node->lr[1];
+				replacement->balance = node->balance;
+				*p = replacement;
+
+				if (!shrunk)
+					return false;
+
+				replacement->balance -= bal(side);
+
+				/* If tree's balance became 0, it means the tree's height shrank due to removal. */
+				return replacement->balance == 0;
+			}
+
+			if (node->lr[0] != NULL)
+				*p = node->lr[0];
+			else
+				*p = node->lr[1];
+
+			return true;
+
+		} else {
+			if (!remove_sm(avl, &node->lr[side(cmp)], sm, ret))
+				return false;
+
+			/* If tree's balance became 0, it means the tree's height shrank due to removal. */
+			return sway(p, -cmp) == 0;
+		}
+	}
+}
+
+/*
+ * Remove either the left-most (if side == 0) or right-most (if side == 1)
+ * node in a subtree, returning the removed node through *ret .
+ * The returned node's lr and balance are meaningless.
+ *
+ * The subtree must not be empty (i.e. *p must not be NULL).
+ *
+ * Return true if the subtree's height decreased.
+ */
+static bool removeExtremum(AvlNode **p, int side, AvlNode **ret)
+{
+	AvlNode *node = *p;
+
+	if (node->lr[side] == NULL) {
+		*ret = node;
+		*p = node->lr[1 - side];
+		return true;
+	}
+
+	if (!removeExtremum(&node->lr[side], side, ret))
+		return false;
+
+	/* If tree's balance became 0, it means the tree's height shrank due to removal. */
+	return sway(p, -bal(side)) == 0;
+}
+
+/*
+ * Rebalance a node if necessary.  Think of this function
+ * as a higher-level interface to balance().
+ *
+ * sway must be either -1 or 1, and indicates what was added to
+ * the balance of this node by a prior operation.
+ *
+ * Return the new balance of the subtree.
+ */
+static int sway(AvlNode **p, int sway)
+{
+	if ((*p)->balance != sway)
+		(*p)->balance += sway;
+	else
+		balance(p, side(sway));
+
+	return (*p)->balance;
+}
+
+/*
+ * Perform tree rotations on an unbalanced node.
+ *
+ * side == 0 means the node's balance is -2 .
+ * side == 1 means the node's balance is +2 .
+ */
+static void balance(AvlNode **p, int side)
+{
+	AvlNode  *node  = *p,
+	         *child = node->lr[side];
+	int opposite    = 1 - side;
+	int bal         = bal(side);
+
+	if (child->balance != -bal) {
+		/* Left-left (side == 0) or right-right (side == 1) */
+		node->lr[side]      = child->lr[opposite];
+		child->lr[opposite] = node;
+		*p = child;
+
+		child->balance -= bal;
+		node->balance = -child->balance;
+
+	} else {
+		/* Left-right (side == 0) or right-left (side == 1) */
+		AvlNode *grandchild = child->lr[opposite];
+
+		node->lr[side]           = grandchild->lr[opposite];
+		child->lr[opposite]      = grandchild->lr[side];
+		grandchild->lr[side]     = child;
+		grandchild->lr[opposite] = node;
+		*p = grandchild;
+
+		node->balance       = 0;
+		child->balance      = 0;
+
+		if (grandchild->balance == bal)
+			node->balance  = -bal;
+		else if (grandchild->balance == -bal)
+			child->balance = bal;
+
+		grandchild->balance = 0;
+	}
+}
+
+
+/************************* avl_check_invariants() *************************/
+
+bool avl_check_invariants(struct stree *avl)
+{
+	int    dummy;
+
+	return checkBalances(avl->root, &dummy)
+	    && checkOrder(avl)
+	    && countNode(avl->root) == avl->count;
+}
+
+static bool checkBalances(AvlNode *node, int *height)
+{
+	if (node) {
+		int h0, h1;
+
+		if (!checkBalances(node->lr[0], &h0))
+			return false;
+		if (!checkBalances(node->lr[1], &h1))
+			return false;
+
+		if (node->balance != h1 - h0 || node->balance < -1 || node->balance > 1)
+			return false;
+
+		*height = (h0 > h1 ? h0 : h1) + 1;
+		return true;
+	} else {
+		*height = 0;
+		return true;
+	}
+}
+
+static bool checkOrder(struct stree *avl)
+{
+	AvlIter     i;
+	const struct sm_state *last = NULL;
+	bool        last_set = false;
+
+	avl_foreach(i, avl) {
+		if (last_set && cmp_tracker(last, i.sm) >= 0)
+			return false;
+		last     = i.sm;
+		last_set = true;
+	}
+
+	return true;
+}
+
+static size_t countNode(AvlNode *node)
+{
+	if (node)
+		return 1 + countNode(node->lr[0]) + countNode(node->lr[1]);
+	else
+		return 0;
+}
+
+
+/************************* Traversal *************************/
+
+void avl_iter_begin(AvlIter *iter, struct stree *avl, AvlDirection dir)
+{
+	AvlNode *node;
+
+	iter->stack_index = 0;
+	iter->direction   = dir;
+
+	if (!avl || !avl->root) {
+		iter->sm      = NULL;
+		iter->node     = NULL;
+		return;
+	}
+	node = avl->root;
+
+	while (node->lr[dir] != NULL) {
+		iter->stack[iter->stack_index++] = node;
+		node = node->lr[dir];
+	}
+
+	iter->sm   = (struct sm_state *) node->sm;
+	iter->node  = node;
+}
+
+void avl_iter_next(AvlIter *iter)
+{
+	AvlNode     *node = iter->node;
+	AvlDirection dir  = iter->direction;
+
+	if (node == NULL)
+		return;
+
+	node = node->lr[1 - dir];
+	if (node != NULL) {
+		while (node->lr[dir] != NULL) {
+			iter->stack[iter->stack_index++] = node;
+			node = node->lr[dir];
+		}
+	} else if (iter->stack_index > 0) {
+		node = iter->stack[--iter->stack_index];
+	} else {
+		iter->sm      = NULL;
+		iter->node     = NULL;
+		return;
+	}
+
+	iter->node  = node;
+	iter->sm   = (struct sm_state *) node->sm;
+}
+
+struct stree *clone_stree(struct stree *orig)
+{
+	if (!orig)
+		return NULL;
+
+	orig->references++;
+	return orig;
+}
+
+void set_stree_id(struct stree **stree, int stree_id)
+{
+	if ((*stree)->stree_id != 0)
+		*stree = clone_stree_real(*stree);
+
+	(*stree)->stree_id = stree_id;
+}
+
+int get_stree_id(struct stree *stree)
+{
+	if (!stree)
+		return -1;
+	return stree->stree_id;
+}
--- /dev/null	Fri Dec 21 15:00:00 2018
+++ new/usr/src/tools/smatch/src/avl.h	Fri Dec 21 15:00:00 2018
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 2010 Joseph Adams <joeyadams3.14159@gmail.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef CCAN_AVL_H
+#define CCAN_AVL_H
+
+#include <stdbool.h>
+#include <stddef.h>
+
+struct sm_state;
+
+typedef struct AvlNode       AvlNode;
+typedef struct AvlIter       AvlIter;
+
+struct stree {
+	AvlNode    *root;
+	struct stree *base_stree;
+	char *has_states;
+	size_t      count;
+	int stree_id;
+	int references;
+};
+
+void free_stree(struct stree **avl);
+	/* Free an stree tree. */
+
+struct sm_state *avl_lookup(const struct stree *avl, const struct sm_state *sm);
+	/* O(log n). Lookup a sm.  Return NULL if the sm is not present. */
+
+#define avl_member(avl, sm) (!!avl_lookup_node(avl, sm))
+	/* O(log n). See if a sm is present. */
+
+size_t stree_count(const struct stree *avl);
+	/* O(1). Return the number of elements in the tree. */
+
+bool avl_insert(struct stree **avl, const struct sm_state *sm);
+	/*
+	 * O(log n). Insert an sm or replace it if already present.
+	 *
+	 * Return false if the insertion replaced an existing sm.
+	 */
+
+bool avl_remove(struct stree **avl, const struct sm_state *sm);
+	/*
+	 * O(log n). Remove an sm (if present).
+	 *
+	 * Return true if it was removed.
+	 */
+
+bool avl_check_invariants(struct stree *avl);
+	/* For testing purposes.  This function will always return true :-) */
+
+
+/************************* Traversal *************************/
+
+#define avl_foreach(iter, avl)         avl_traverse(iter, avl, FORWARD)
+	/*
+	 * O(n). Traverse an stree tree in order.
+	 *
+	 * Example:
+	 *
+	 * AvlIter i;
+	 *
+	 * avl_foreach(i, avl)
+	 *     printf("%s -> %s\n", i.sm->name, i.sm->state->name);
+	 */
+
+#define FOR_EACH_SM(avl, _sm) {			\
+	AvlIter _i;				\
+	avl_foreach(_i, avl) {			\
+		_sm = _i.sm;
+
+#define END_FOR_EACH_SM(_sm) }}
+
+#define FOR_EACH_MY_SM(_owner, avl, _sm) {	\
+	AvlIter _i;				\
+	avl_foreach(_i, avl) {			\
+		_sm = _i.sm;			\
+		if (_sm->owner != _owner)	\
+			continue;		\
+
+#define avl_foreach_reverse(iter, avl) avl_traverse(iter, avl, BACKWARD)
+	/* O(n). Traverse an stree tree in reverse order. */
+
+typedef enum AvlDirection {FORWARD = 0, BACKWARD = 1} AvlDirection;
+
+struct AvlIter {
+	struct sm_state *sm;
+	AvlNode      *node;
+
+	/* private */
+	AvlNode      *stack[100];
+	int           stack_index;
+	AvlDirection  direction;
+};
+
+void avl_iter_begin(AvlIter *iter, struct stree *avl, AvlDirection dir);
+void avl_iter_next(AvlIter *iter);
+#define avl_traverse(iter, avl, direction)        \
+	for (avl_iter_begin(&(iter), avl, direction); \
+	     (iter).node != NULL;                     \
+	     avl_iter_next(&iter))
+
+
+/***************** Internal data structures ******************/
+
+struct AvlNode {
+	const struct sm_state *sm;
+
+	AvlNode    *lr[2];
+	int         balance; /* -1, 0, or 1 */
+};
+
+AvlNode *avl_lookup_node(const struct stree *avl, const struct sm_state *sm);
+	/* O(log n). Lookup an stree node by sm.  Return NULL if not present. */
+
+struct stree *clone_stree(struct stree *orig);
+
+void set_stree_id(struct stree **stree, int id);
+int get_stree_id(struct stree *stree);
+
+#endif
--- /dev/null	Fri Dec 21 15:00:00 2018
+++ new/usr/src/tools/smatch/src/bitmap.h	Fri Dec 21 15:00:00 2018
@@ -0,0 +1,51 @@
+#ifndef BITMAP_H
+#define BITMAP_H
+
+#define BITS_IN_LONG	(sizeof(unsigned long)*8)
+#define LONGS(x)	((x + BITS_IN_LONG - 1) & -BITS_IN_LONG)
+
+/* Every bitmap gets its own type */
+#define DECLARE_BITMAP(name, x) unsigned long name[LONGS(x)]
+
+static inline int test_bit(unsigned int nr, unsigned long *bitmap)
+{
+	unsigned long offset = nr / BITS_IN_LONG;
+	unsigned long bit = nr & (BITS_IN_LONG-1);
+	return (bitmap[offset] >> bit) & 1;
+}
+
+static inline void set_bit(unsigned int nr, unsigned long *bitmap)
+{
+	unsigned long offset = nr / BITS_IN_LONG;
+	unsigned long bit = nr & (BITS_IN_LONG-1);
+	bitmap[offset] |= 1UL << bit;
+}
+
+static inline void clear_bit(unsigned int nr, unsigned long *bitmap)
+{
+	unsigned long offset = nr / BITS_IN_LONG;
+	unsigned long bit = nr & (BITS_IN_LONG-1);
+	bitmap[offset] &= ~(1UL << bit);
+}
+
+static inline int test_and_set_bit(unsigned int nr, unsigned long *bitmap)
+{
+	unsigned long offset = nr / BITS_IN_LONG;
+	unsigned long bit = nr & (BITS_IN_LONG-1);
+	unsigned long old = bitmap[offset];
+	unsigned long mask = 1UL << bit;
+	bitmap[offset] = old | mask;
+	return (old & mask) != 0;
+}
+
+static inline int test_and_clear_bit(unsigned int nr, unsigned long *bitmap)
+{
+	unsigned long offset = nr / BITS_IN_LONG;
+	unsigned long bit = nr & (BITS_IN_LONG-1);
+	unsigned long old = bitmap[offset];
+	unsigned long mask = 1UL << bit;
+	bitmap[offset] = old & ~mask;
+	return (old & mask) != 0;
+}
+
+#endif /* BITMAP_H */
--- /dev/null	Fri Dec 21 15:00:00 2018
+++ new/usr/src/tools/smatch/src/builtin.c	Fri Dec 21 15:00:00 2018
@@ -0,0 +1,261 @@
+/*
+ * builtin evaluation & expansion.
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003-2004 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "expression.h"
+#include "expand.h"
+#include "symbol.h"
+#include "compat/bswap.h"
+
+static int evaluate_to_int_const_expr(struct expression *expr)
+{
+	expr->ctype = &int_ctype;
+	expr->flags |= CEF_SET_ICE;
+	return 1;
+}
+
+static int evaluate_pure_unop(struct expression *expr)
+{
+	struct expression *arg = first_expression(expr->args);
+	int flags = arg->flags;
+
+	/*
+	 * Allow such functions with a constant integer expression
+	 * argument to be treated as a *constant* integer.
+	 * This allow us to use them in switch() { case ...:
+	 */
+	flags |= (flags & CEF_ICE) ? CEF_SET_INT : 0;
+	expr->flags = flags;
+	return 1;
+}
+
+
+static int evaluate_expect(struct expression *expr)
+{
+	/* Should we evaluate it to return the type of the first argument? */
+	expr->ctype = &int_ctype;
+	return 1;
+}
+
+static int arguments_choose(struct expression *expr)
+{
+	struct expression_list *arglist = expr->args;
+	struct expression *arg;
+	int i = 0;
+
+	FOR_EACH_PTR (arglist, arg) {
+		if (!evaluate_expression(arg))
+			return 0;
+		i++;
+	} END_FOR_EACH_PTR(arg);
+	if (i < 3) {
+		sparse_error(expr->pos,
+			     "not enough arguments for __builtin_choose_expr");
+		return 0;
+	} if (i > 3) {
+		sparse_error(expr->pos,
+			     "too many arguments for __builtin_choose_expr");
+		return 0;
+	}
+	return 1;
+}
+
+static int evaluate_choose(struct expression *expr)
+{
+	struct expression_list *list = expr->args;
+	struct expression *arg, *args[3];
+	int n = 0;
+
+	/* there will be exactly 3; we'd already verified that */
+	FOR_EACH_PTR(list, arg) {
+		args[n++] = arg;
+	} END_FOR_EACH_PTR(arg);
+
+	*expr = get_expression_value(args[0]) ? *args[1] : *args[2];
+
+	return 1;
+}
+
+static int expand_expect(struct expression *expr, int cost)
+{
+	struct expression *arg = first_ptr_list((struct ptr_list *) expr->args);
+
+	if (arg)
+		*expr = *arg;
+	return 0;
+}
+
+/*
+ * __builtin_warning() has type "int" and always returns 1,
+ * so that you can use it in conditionals or whatever
+ */
+static int expand_warning(struct expression *expr, int cost)
+{
+	struct expression *arg;
+	struct expression_list *arglist = expr->args;
+
+	FOR_EACH_PTR (arglist, arg) {
+		/*
+		 * Constant strings get printed out as a warning. By the
+		 * time we get here, the EXPR_STRING has been fully 
+		 * evaluated, so by now it's an anonymous symbol with a
+		 * string initializer.
+		 *
+		 * Just for the heck of it, allow any constant string
+		 * symbol.
+		 */
+		if (arg->type == EXPR_SYMBOL) {
+			struct symbol *sym = arg->symbol;
+			if (sym->initializer && sym->initializer->type == EXPR_STRING) {
+				struct string *string = sym->initializer->string;
+				warning(expr->pos, "%*s", string->length-1, string->data);
+			}
+			continue;
+		}
+
+		/*
+		 * Any other argument is a conditional. If it's
+		 * non-constant, or it is false, we exit and do
+		 * not print any warning.
+		 */
+		if (arg->type != EXPR_VALUE)
+			goto out;
+		if (!arg->value)
+			goto out;
+	} END_FOR_EACH_PTR(arg);
+out:
+	expr->type = EXPR_VALUE;
+	expr->value = 1;
+	expr->taint = 0;
+	return 0;
+}
+
+/* The arguments are constant if the cost of all of them is zero */
+static int expand_constant_p(struct expression *expr, int cost)
+{
+	expr->type = EXPR_VALUE;
+	expr->value = !cost;
+	expr->taint = 0;
+	return 0;
+}
+
+/* The arguments are safe, if their cost is less than SIDE_EFFECTS */
+static int expand_safe_p(struct expression *expr, int cost)
+{
+	expr->type = EXPR_VALUE;
+	expr->value = (cost < SIDE_EFFECTS);
+	expr->taint = 0;
+	return 0;
+}
+
+static struct symbol_op constant_p_op = {
+	.evaluate = evaluate_to_int_const_expr,
+	.expand = expand_constant_p
+};
+
+static struct symbol_op safe_p_op = {
+	.evaluate = evaluate_to_int_const_expr,
+	.expand = expand_safe_p
+};
+
+static struct symbol_op warning_op = {
+	.evaluate = evaluate_to_int_const_expr,
+	.expand = expand_warning
+};
+
+static struct symbol_op expect_op = {
+	.evaluate = evaluate_expect,
+	.expand = expand_expect
+};
+
+static struct symbol_op choose_op = {
+	.evaluate = evaluate_choose,
+	.args = arguments_choose,
+};
+
+/* The argument is constant and valid if the cost is zero */
+static int expand_bswap(struct expression *expr, int cost)
+{
+	struct expression *arg;
+	long long val;
+
+	if (cost)
+		return cost;
+
+	/* the arguments number & type have already been checked */
+	arg = first_expression(expr->args);
+	val = get_expression_value_silent(arg);
+	switch (expr->ctype->bit_size) {
+	case 16: expr->value = bswap16(val); break;
+	case 32: expr->value = bswap32(val); break;
+	case 64: expr->value = bswap64(val); break;
+	default: /* impossible error */
+		return SIDE_EFFECTS;
+	}
+
+	expr->type = EXPR_VALUE;
+	expr->taint = 0;
+	return 0;
+}
+
+static struct symbol_op bswap_op = {
+	.evaluate = evaluate_pure_unop,
+	.expand = expand_bswap,
+};
+
+
+/*
+ * Builtin functions
+ */
+static struct symbol builtin_fn_type = { .type = SYM_FN /* , .variadic =1 */ };
+static struct sym_init {
+	const char *name;
+	struct symbol *base_type;
+	unsigned int modifiers;
+	struct symbol_op *op;
+} builtins_table[] = {
+	{ "__builtin_constant_p", &builtin_fn_type, MOD_TOPLEVEL, &constant_p_op },
+	{ "__builtin_safe_p", &builtin_fn_type, MOD_TOPLEVEL, &safe_p_op },
+	{ "__builtin_warning", &builtin_fn_type, MOD_TOPLEVEL, &warning_op },
+	{ "__builtin_expect", &builtin_fn_type, MOD_TOPLEVEL, &expect_op },
+	{ "__builtin_choose_expr", &builtin_fn_type, MOD_TOPLEVEL, &choose_op },
+	{ "__builtin_bswap16", NULL, MOD_TOPLEVEL, &bswap_op },
+	{ "__builtin_bswap32", NULL, MOD_TOPLEVEL, &bswap_op },
+	{ "__builtin_bswap64", NULL, MOD_TOPLEVEL, &bswap_op },
+	{ NULL,		NULL,		0 }
+};
+
+void init_builtins(int stream)
+{
+	struct sym_init *ptr;
+
+	builtin_fn_type.variadic = 1;
+	for (ptr = builtins_table; ptr->name; ptr++) {
+		struct symbol *sym;
+		sym = create_symbol(stream, ptr->name, SYM_NODE, NS_SYMBOL);
+		sym->ctype.base_type = ptr->base_type;
+		sym->ctype.modifiers = ptr->modifiers;
+		sym->op = ptr->op;
+	}
+}
--- /dev/null	Fri Dec 21 15:00:00 2018
+++ new/usr/src/tools/smatch/src/c2xml.c	Fri Dec 21 15:00:00 2018
@@ -0,0 +1,334 @@
+/*
+ * Sparse c2xml
+ *
+ * Dumps the parse tree as an xml document
+ *
+ * Copyright (C) 2007 Rob Taylor
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <assert.h>
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
+#include "expression.h"
+#include "parse.h"
+#include "scope.h"
+#include "symbol.h"
+
+static xmlDocPtr doc = NULL;       /* document pointer */
+static xmlNodePtr root_node = NULL;/* root node pointer */
+static int idcount = 0;
+
+static void examine_symbol(struct symbol *sym, xmlNodePtr node);
+
+static xmlAttrPtr newProp(xmlNodePtr node, const char *name, const char *value)
+{
+	return xmlNewProp(node, BAD_CAST name, BAD_CAST value);
+}
+
+static xmlAttrPtr newNumProp(xmlNodePtr node, const char *name, int value)
+{
+	char buf[256];
+	snprintf(buf, 256, "%d", value);
+	return newProp(node, name, buf);
+}
+
+static xmlAttrPtr newIdProp(xmlNodePtr node, const char *name, unsigned int id)
+{
+	char buf[256];
+	snprintf(buf, 256, "_%d", id);
+	return newProp(node, name, buf);
+}
+
+static xmlNodePtr new_sym_node(struct symbol *sym, const char *name, xmlNodePtr parent)
+{
+	xmlNodePtr node;
+	const char *ident = show_ident(sym->ident);
+
+	assert(name != NULL);
+	assert(sym != NULL);
+	assert(parent != NULL);
+
+	node = xmlNewChild(parent, NULL, BAD_CAST "symbol", NULL);
+
+	newProp(node, "type", name);
+
+	newIdProp(node, "id", idcount);
+
+	if (sym->ident && ident)
+		newProp(node, "ident", ident);
+	newProp(node, "file", stream_name(sym->pos.stream));
+
+	newNumProp(node, "start-line", sym->pos.line);
+	newNumProp(node, "start-col", sym->pos.pos);
+
+	if (sym->endpos.type) {
+		newNumProp(node, "end-line", sym->endpos.line);
+		newNumProp(node, "end-col", sym->endpos.pos);
+		if (sym->pos.stream != sym->endpos.stream)
+			newProp(node, "end-file", stream_name(sym->endpos.stream));
+        }
+	sym->aux = node;
+
+	idcount++;
+
+	return node;
+}
+
+static inline void examine_members(struct symbol_list *list, xmlNodePtr node)
+{
+	struct symbol *sym;
+
+	FOR_EACH_PTR(list, sym) {
+		examine_symbol(sym, node);
+	} END_FOR_EACH_PTR(sym);
+}
+
+static void examine_modifiers(struct symbol *sym, xmlNodePtr node)
+{
+	const char *modifiers[] = {
+			"auto",
+			"register",
+			"static",
+			"extern",
+			"const",
+			"volatile",
+			"signed",
+			"unsigned",
+			"char",
+			"short",
+			"long",
+			"long-long",
+			"typedef",
+			NULL,
+			NULL,
+			NULL,
+			NULL,
+			NULL,
+			"inline",
+			"addressable",
+			"nocast",
+			"noderef",
+			"accessed",
+			"toplevel",
+			"label",
+			"assigned",
+			"type-type",
+			"safe",
+			"user-type",
+			"force",
+			"explicitly-signed",
+			"bitwise"};
+
+	int i;
+
+	if (sym->namespace != NS_SYMBOL)
+		return;
+
+	/*iterate over the 32 bit bitfield*/
+	for (i=0; i < 32; i++) {
+		if ((sym->ctype.modifiers & 1<<i) && modifiers[i])
+			newProp(node, modifiers[i], "1");
+	}
+}
+
+static void
+examine_layout(struct symbol *sym, xmlNodePtr node)
+{
+	examine_symbol_type(sym);
+
+	newNumProp(node, "bit-size", sym->bit_size);
+	newNumProp(node, "alignment", sym->ctype.alignment);
+	newNumProp(node, "offset", sym->offset);
+	if (is_bitfield_type(sym)) {
+		newNumProp(node, "bit-offset", sym->bit_offset);
+	}
+}
+
+static void examine_symbol(struct symbol *sym, xmlNodePtr node)
+{
+	xmlNodePtr child = NULL;
+	const char *base;
+	int array_size;
+
+	if (!sym)
+		return;
+	if (sym->aux)		/*already visited */
+		return;
+
+	if (sym->ident && sym->ident->reserved)
+		return;
+
+	child = new_sym_node(sym, get_type_name(sym->type), node);
+	examine_modifiers(sym, child);
+	examine_layout(sym, child);
+
+	if (sym->ctype.base_type) {
+		if ((base = builtin_typename(sym->ctype.base_type)) == NULL) {
+			if (!sym->ctype.base_type->aux) {
+				examine_symbol(sym->ctype.base_type, root_node);
+			}
+			xmlNewProp(child, BAD_CAST "base-type",
+			           xmlGetProp((xmlNodePtr)sym->ctype.base_type->aux, BAD_CAST "id"));
+		} else {
+			newProp(child, "base-type-builtin", base);
+		}
+	}
+	if (sym->array_size) {
+		/* TODO: modify get_expression_value to give error return */
+		array_size = get_expression_value(sym->array_size);
+		newNumProp(child, "array-size", array_size);
+	}
+
+
+	switch (sym->type) {
+	case SYM_STRUCT:
+	case SYM_UNION:
+		examine_members(sym->symbol_list, child);
+		break;
+	case SYM_FN:
+		examine_members(sym->arguments, child);
+		break;
+	case SYM_UNINITIALIZED:
+		newProp(child, "base-type-builtin", builtin_typename(sym));
+		break;
+	default:
+		break;
+	}
+	return;
+}
+
+static struct position *get_expansion_end (struct token *token)
+{
+	struct token *p1, *p2;
+
+	for (p1=NULL, p2=NULL;
+	     !eof_token(token);
+	     p2 = p1, p1 = token, token = token->next);
+
+	if (p2)
+		return &(p2->pos);
+	else
+		return NULL;
+}
+
+static void examine_macro(struct symbol *sym, xmlNodePtr node)
+{
+	struct position *pos;
+
+	/* this should probably go in the main codebase*/
+	pos = get_expansion_end(sym->expansion);
+	if (pos)
+		sym->endpos = *pos;
+	else
+		sym->endpos = sym->pos;
+
+	new_sym_node(sym, "macro", node);
+}
+
+static void examine_namespace(struct symbol *sym)
+{
+	if (sym->ident && sym->ident->reserved)
+		return;
+
+	switch(sym->namespace) {
+	case NS_MACRO:
+		examine_macro(sym, root_node);
+		break;
+	case NS_TYPEDEF:
+	case NS_STRUCT:
+	case NS_SYMBOL:
+		examine_symbol(sym, root_node);
+		break;
+	case NS_NONE:
+	case NS_LABEL:
+	case NS_ITERATOR:
+	case NS_UNDEF:
+	case NS_PREPROCESSOR:
+	case NS_KEYWORD:
+		break;
+	default:
+		die("Unrecognised namespace type %d",sym->namespace);
+	}
+
+}
+
+static int get_stream_id (const char *name)
+{
+	int i;
+	for (i=0; i<input_stream_nr; i++) {
+		if (strcmp(name, stream_name(i))==0)
+			return i;
+	}
+	return -1;
+}
+
+static inline void examine_symbol_list(const char *file, struct symbol_list *list)
+{
+	struct symbol *sym;
+	int stream_id = get_stream_id (file);
+
+	if (!list)
+		return;
+	FOR_EACH_PTR(list, sym) {
+		if (sym->pos.stream == stream_id)
+			examine_namespace(sym);
+	} END_FOR_EACH_PTR(sym);
+}
+
+int main(int argc, char **argv)
+{
+	struct string_list *filelist = NULL;
+	struct symbol_list *symlist = NULL;
+	char *file;
+
+	doc = xmlNewDoc(BAD_CAST "1.0");
+	root_node = xmlNewNode(NULL, BAD_CAST "parse");
+	xmlDocSetRootElement(doc, root_node);
+
+/* - A DTD is probably unnecessary for something like this
+
+	dtd = xmlCreateIntSubset(doc, "parse", "http://www.kernel.org/pub/software/devel/sparse/parse.dtd" NULL, "parse.dtd");
+
+	ns = xmlNewNs (root_node, "http://www.kernel.org/pub/software/devel/sparse/parse.dtd", NULL);
+
+	xmlSetNs(root_node, ns);
+*/
+	symlist = sparse_initialize(argc, argv, &filelist);
+
+	FOR_EACH_PTR_NOTAG(filelist, file) {
+		examine_symbol_list(file, symlist);
+		sparse_keep_tokens(file);
+		examine_symbol_list(file, file_scope->symbols);
+		examine_symbol_list(file, global_scope->symbols);
+	} END_FOR_EACH_PTR_NOTAG(file);
+
+
+	xmlSaveFormatFileEnc("-", doc, "UTF-8", 1);
+	xmlFreeDoc(doc);
+	xmlCleanupParser();
+
+	return 0;
+}
--- /dev/null	Fri Dec 21 15:00:00 2018
+++ new/usr/src/tools/smatch/src/cgcc	Fri Dec 21 15:00:00 2018
@@ -0,0 +1,346 @@
+#!/usr/bin/perl -w
+# -----------------------------------------------------------------------------
+
+my $cc = $ENV{'REAL_CC'} || 'cc';
+my $check = $ENV{'CHECK'} || 'sparse';
+my $ccom = $cc;
+
+my $m32 = 0;
+my $m64 = 0;
+my $has_specs = 0;
+my $gendeps = 0;
+my $do_check = 0;
+my $do_compile = 1;
+my $gcc_base_dir;
+my $multiarch_dir;
+my $verbose = 0;
+
+while (@ARGV) {
+    $_ = shift(@ARGV);
+    # Look for a .c file.  We don't want to run the checker on .o or .so files
+    # in the link run.  (This simplistic check knows nothing about options
+    # with arguments, but it seems to do the job.)
+    $do_check = 1 if /^[^-].*\.c$/;
+
+    # Ditto for stdin.
+    $do_check = 1 if $_ eq '-';
+
+    $m32 = 1 if /^-m32$/;
+    $m64 = 1 if /^-m64$/;
+    $gendeps = 1 if /^-M$/;
+
+    if (/^-target=(.*)$/) {
+	$check .= &add_specs ($1);
+	$has_specs = 1;
+	next;
+    }
+
+    if ($_ eq '-no-compile') {
+	$do_compile = 0;
+	next;
+    }
+
+    if (/^-gcc-base-dir$/) {
+        $gcc_base_dir = shift @ARGV;
+        die ("$0: missing argument for -gcc-base-dir option") if !$gcc_base_dir;
+        next;
+    }
+
+    if (/^-multiarch-dir$/) {
+        $multiarch_dir = shift @ARGV;
+        die ("$0: missing argument for -multiarch-dir option") if !$multiarch_dir;
+        next;
+    }
+
+    # If someone adds "-E", don't pre-process twice.
+    $do_compile = 0 if $_ eq '-E';
+
+    $verbose = 1 if $_ eq '-v';
+
+    my $this_arg = ' ' . &quote_arg ($_);
+    $cc .= $this_arg unless &check_only_option ($_);
+    $check .= $this_arg;
+}
+
+if ($gendeps) {
+    $do_compile = 1;
+    $do_check = 0;
+}
+
+if ($do_check) {
+    if (!$has_specs) {
+	$check .= &add_specs ('host_arch_specs');
+	$check .= &add_specs ('host_os_specs');
+    }
+
+    $gcc_base_dir = qx($ccom -print-file-name=) if !$gcc_base_dir;
+    chomp($gcc_base_dir);  # possibly remove '\n' from compiler
+    $check .= " -gcc-base-dir " . $gcc_base_dir if $gcc_base_dir;
+
+    $multiarch_dir = qx($ccom -print-multiarch) if ! defined $multiarch_dir;
+    chomp($multiarch_dir);  # possibly remove '\n' from compiler
+    $check .= " -multiarch-dir " . $multiarch_dir if $multiarch_dir;
+
+    print "$check\n" if $verbose;
+    if ($do_compile) {
+	system ($check);
+    } else {
+	exec ($check);
+    }
+}
+
+if ($do_compile) {
+    print "$cc\n" if $verbose;
+    exec ($cc);
+}
+
+exit 0;
+
+# -----------------------------------------------------------------------------
+# Check if an option is for "check" only.
+
+sub check_only_option {
+    my ($arg) = @_;
+    return 1 if $arg =~ /^-W(no-?)?(address-space|bitwise|cast-to-as|cast-truncate|context|decl|default-bitfield-sign|designated-init|do-while|enum-mismatch|external-function-has-definition|init-cstring|memcpy-max-count|non-ansi-function-declaration|non-pointer-null|old-initializer|one-bit-signed-bitfield|override-init-all|paren-string|ptr-subtraction-blows|return-void|sizeof-bool|sparse-all|sparse-error|transparent-union|typesign|undef|unknown-attribute)$/;
+    return 1 if $arg =~ /^-v(no-?)?(entry|dead)$/;
+    return 1 if $arg =~ /^-f(dump-linearize|memcpy-max-count)(=\S*)?$/;
+    return 0;
+}
+
+# -----------------------------------------------------------------------------
+# Simple arg-quoting function.  Just adds backslashes when needed.
+
+sub quote_arg {
+    my ($arg) = @_;
+    return "''" if $arg eq '';
+    return join ('',
+		 map {
+		     m|^[-a-zA-Z0-9._/,=]+$| ? $_ : "\\" . $_;
+		 } (split (//, $arg)));
+}
+
+# -----------------------------------------------------------------------------
+
+sub integer_types {
+    my ($char,@dummy) = @_;
+
+    my %pow2m1 =
+	(8 => '127',
+	 16 => '32767',
+	 32 => '2147483647',
+	 64 => '9223372036854775807',
+	 128 => '170141183460469231731687303715884105727',
+	 );
+    my @types = (['SCHAR',''], ['SHRT',''], ['INT',''], ['LONG','L'], ['LONG_LONG','LL'], ['LONG_LONG_LONG','LLL']);
+
+    my $result = " -D__CHAR_BIT__=$char";
+    while (@types && @_) {
+	my $bits = shift @_;
+	my ($name,$suffix) = @{ shift @types };
+	die "$0: weird number of bits." unless exists $pow2m1{$bits};
+	$result .= " -D__${name}_MAX__=" . $pow2m1{$bits} . $suffix;
+    }
+    return $result;
+}
+
+# -----------------------------------------------------------------------------
+
+sub float_types {
+    my ($has_inf,$has_qnan,$dec_dig,@bitsizes) = @_;
+    my $result = " -D__FLT_RADIX__=2";
+    $result .= " -D__FINITE_MATH_ONLY__=" . ($has_inf || $has_qnan ? '0' : '1');
+    $result .= " -D__DECIMAL_DIG__=$dec_dig";
+
+    my %constants =
+	(24 =>
+	 {
+	     'MIN' => '1.17549435e-38',
+	     'MAX' => '3.40282347e+38',
+	     'EPSILON' => '1.19209290e-7',
+	     'DENORM_MIN' => '1.40129846e-45',
+	 },
+	 53 =>
+	 {
+	     'MIN' => '2.2250738585072014e-308',
+	     'MAX' => '1.7976931348623157e+308',
+	     'EPSILON' => '2.2204460492503131e-16',
+	     'DENORM_MIN' => '4.9406564584124654e-324',
+	 },
+	 64 =>
+	 {
+	     'MIN' => '3.36210314311209350626e-4932',
+	     'MAX' => '1.18973149535723176502e+4932',
+	     'EPSILON' => '1.08420217248550443401e-19',
+	     'DENORM_MIN' => '3.64519953188247460253e-4951',
+	 },
+	 113 =>
+	 {
+	     'MIN' => '3.36210314311209350626267781732175260e-4932',
+	     'MAX' => '1.18973149535723176508575932662800702e+4932',
+	     'EPSILON' => '1.92592994438723585305597794258492732e-34',
+	     'DENORM_MIN' => '6.47517511943802511092443895822764655e-4966',
+	 },
+	 );	     
+
+    my @types = (['FLT','F'], ['DBL',''], ['LDBL','L']);
+    while (@types) {
+	my ($mant_bits,$exp_bits) = @{ shift @bitsizes };
+	my ($name,$suffix) = @{ shift @types };
+
+	my $h = $constants{$mant_bits};
+	die "$0: weird number of mantissa bits." unless $h;
+
+	my $mant_dig = int (($mant_bits - 1) * log (2) / log (10));
+	my $max_exp = 1 << ($exp_bits - 1);
+	my $min_exp = 3 - $max_exp;
+	my $max_10_exp = int ($max_exp * log (2) / log (10));
+	my $min_10_exp = -int (-$min_exp * log (2) / log (10));
+
+	$result .= " -D__${name}_MANT_DIG__=$mant_bits";
+	$result .= " -D__${name}_DIG__=$mant_dig";
+	$result .= " -D__${name}_MIN_EXP__='($min_exp)'";
+	$result .= " -D__${name}_MAX_EXP__=$max_exp";
+	$result .= " -D__${name}_MIN_10_EXP__='($min_10_exp)'";
+	$result .= " -D__${name}_MAX_10_EXP__=$max_10_exp";
+	$result .= " -D__${name}_HAS_INFINITY__=" . ($has_inf ? '1' : '0');
+	$result .= " -D__${name}_HAS_QUIET_NAN__=" . ($has_qnan ? '1' : '0');;
+
+	foreach my $inf (sort keys %$h) {
+	    $result .= " -D__${name}_${inf}__=" . $h->{$inf} . $suffix;
+	}
+    }
+    return $result;
+}
+
+# -----------------------------------------------------------------------------
+
+sub define_size_t {
+    my ($text) = @_;
+    # We have to undef in order to override check's internal definition.
+    return ' -U__SIZE_TYPE__ ' . &quote_arg ("-D__SIZE_TYPE__=$text");
+}
+
+# -----------------------------------------------------------------------------
+
+sub add_specs {
+    my ($spec) = @_;
+    if ($spec eq 'sunos') {
+	return &add_specs ('unix') .
+	    ' -D__sun__=1 -D__sun=1 -Dsun=1' .
+	    ' -D__svr4__=1 -DSVR4=1' .
+	    ' -D__STDC__=0' .
+	    ' -D_REENTRANT' .
+	    ' -D_SOLARIS_THREADS' .
+	    ' -DNULL="((void *)0)"';
+    } elsif ($spec eq 'linux') {
+	return &add_specs ('unix') .
+	    ' -D__linux__=1 -D__linux=1 -Dlinux=linux';
+    } elsif ($spec eq 'gnu/kfreebsd') {
+	return &add_specs ('unix') .
+	    ' -D__FreeBSD_kernel__=1';
+    } elsif ($spec eq 'openbsd') {
+	return &add_specs ('unix') .
+	    ' -D__OpenBSD__=1';
+    } elsif ($spec eq 'darwin') {
+	return
+	    ' -D__APPLE__=1 -D__MACH__=1';
+    } elsif ($spec eq 'unix') {
+	return ' -Dunix=1 -D__unix=1 -D__unix__=1';
+    } elsif ( $spec =~ /^cygwin/) {
+	return &add_specs ('unix') .
+	    ' -D__CYGWIN__=1 -D__CYGWIN32__=1' .
+	    " -D'_cdecl=__attribute__((__cdecl__))'" .
+	    " -D'__cdecl=__attribute__((__cdecl__))'" .
+	    " -D'_stdcall=__attribute__((__stdcall__))'" .
+	    " -D'__stdcall=__attribute__((__stdcall__))'" .
+	    " -D'_fastcall=__attribute__((__fastcall__))'" .
+	    " -D'__fastcall=__attribute__((__fastcall__))'" .
+	    " -D'__declspec(x)=__attribute__((x))'";
+    } elsif ($spec eq 'i86') {
+	return (' -D__i386=1 -D__i386__=1' .
+		&integer_types (8, 16, 32, $m64 ? 64 : 32, 64) .
+		&float_types (1, 1, 21, [24,8], [53,11], [64,15]) .
+		&define_size_t ($m64 ? "long unsigned int" : "unsigned int") .
+		' -D__SIZEOF_POINTER__=' . ($m64 ? '8' : '4'));
+    } elsif ($spec eq 'sparc') {
+	return (' -D__sparc=1 -D__sparc__=1' .
+		&integer_types (8, 16, 32, $m64 ? 64 : 32, 64) .
+		&float_types (1, 1, 33, [24,8], [53,11], [113,15]) .
+		&define_size_t ($m64 ? "long unsigned int" : "unsigned int") .
+		' -D__SIZEOF_POINTER__=' . ($m64 ? '8' : '4'));
+    } elsif ($spec eq 'sparc64') {
+	return (' -D__sparc=1 -D__sparc__=1 -D__sparcv9__=1 -D__sparc64__=1 -D__arch64__=1 -D__LP64__=1' .
+		&integer_types (8, 16, 32, 64, 64, 128) .
+		&float_types (1, 1, 33, [24,8], [53,11], [113,15]) .
+		&define_size_t ("long unsigned int") .
+		' -D__SIZEOF_POINTER__=8');
+    } elsif ($spec eq 'x86_64') {
+	return (' -D__x86_64=1 -D__x86_64__=1' . ($m32 ? '' : ' -D__LP64__=1') .
+		&integer_types (8, 16, 32, $m32 ? 32 : 64, 64, 128) .
+		&float_types (1, 1, 33, [24,8], [53,11], [113,15]) .
+		&define_size_t ($m32 ? "unsigned int" : "long unsigned int") .
+		' -D__SIZEOF_POINTER__=' . ($m32 ? '4' : '8'));
+    } elsif ($spec eq 'ppc') {
+	return (' -D__powerpc__=1 -D_BIG_ENDIAN -D_STRING_ARCH_unaligned=1' .
+		&integer_types (8, 16, 32, $m64 ? 64 : 32, 64) .
+		&float_types (1, 1, 21, [24,8], [53,11], [113,15]) .
+		&define_size_t ($m64 ? "long unsigned int" : "unsigned int") .
+		' -D__SIZEOF_POINTER__=' . ($m64 ? '8' : '4'));
+    } elsif ($spec eq 'ppc64') {
+	return (' -D__powerpc__=1 -D__PPC__=1 -D_STRING_ARCH_unaligned=1' .
+		' -D__powerpc64__=1 -D__PPC64__=1' .
+		' -m64' .
+		&float_types (1, 1, 21, [24,8], [53,11], [113,15]));
+    } elsif ($spec eq 's390x') {
+	return (' -D__s390x__ -D__s390__ -D_BIG_ENDIAN' .
+		&integer_types (8, 16, 32, $m64 ? 64 : 32, 64) .
+		&float_types (1, 1, 36, [24,8], [53,11], [113,15]) .
+		&define_size_t ("long unsigned int") .
+		' -D__SIZEOF_POINTER__=' . ($m64 ? '8' : '4'));
+    } elsif ($spec eq 'arm') {
+	chomp (my $gccmachine = `$cc -dumpmachine`);
+	my $cppsymbols = ' -D__arm__=1 -m32';
+
+	if ($gccmachine eq 'arm-linux-gnueabihf') {
+	    $cppsymbols .= ' -D__ARM_PCS_VFP=1';
+	}
+
+	return ($cppsymbols .
+		&float_types (1, 1, 36, [24,8], [53,11], [53, 11]));
+    } elsif ($spec eq 'aarch64') {
+	return (' -D__aarch64__=1 -m64' .
+		&float_types (1, 1, 36, [24,8], [53,11], [113,15]));
+    } elsif ($spec eq 'host_os_specs') {
+	my $os = `uname -s`;
+	chomp $os;
+	return &add_specs (lc $os);
+    } elsif ($spec eq 'host_arch_specs') {
+	my $arch = `uname -m`;
+	chomp $arch;
+	if ($arch =~ /^(i.?86|athlon)$/i) {
+	    return &add_specs ('i86');
+	} elsif ($arch =~ /^(sun4u)$/i) {
+	    return &add_specs ('sparc');
+	} elsif ($arch =~ /^(x86_64)$/i) {
+	    return &add_specs ('x86_64');
+	} elsif ($arch =~ /^(ppc)$/i) {
+	    return &add_specs ('ppc');
+	} elsif ($arch =~ /^(ppc64)$/i) {
+	    return &add_specs ('ppc64') . ' -mbig-endian -D_CALL_ELF=1';
+	} elsif ($arch =~ /^(ppc64le)$/i) {
+	    return &add_specs ('ppc64') . ' -mlittle-endian -D_CALL_ELF=2';
+	} elsif ($arch =~ /^(s390x)$/i) {
+	    return &add_specs ('s390x');
+	} elsif ($arch =~ /^(sparc64)$/i) {
+	    return &add_specs ('sparc64');
+	} elsif ($arch =~ /^arm(?:v[78]l)?$/i) {
+	    return &add_specs ('arm');
+	} elsif ($arch =~ /^(aarch64)$/i) {
+	    return &add_specs ('aarch64');
+	}
+    } else {
+	die "$0: invalid specs: $spec\n";
+    }
+}
+
+# -----------------------------------------------------------------------------
--- /dev/null	Fri Dec 21 15:00:00 2018
+++ new/usr/src/tools/smatch/src/cgcc.1	Fri Dec 21 15:00:00 2018
@@ -0,0 +1,37 @@
+.\" cgcc manpage by Josh Triplett
+.TH cgcc "1"
+.
+.SH NAME
+cgcc \- Compiler wrapper to run Sparse after compiling
+.
+.SH SYNOPSIS
+.B cgcc
+[\fISPARSE OPTIONS\fR]... [\fICOMPILER OPTIONS\fR]... [\fIINPUT FILES\fR]...
+.br
+.B make CC=cgcc
+.
+.SH DESCRIPTION
+\fBcgcc\fR provides a wrapper around a C compiler (\fBcc\fR by
+default) which also invokes the Sparse static analysis tool.
+.P
+\fBcgcc\fR accepts all Sparse command-line options, such as warning
+options, and passes all other options through to the compiler.
+.P
+By providing the same interface as the C compiler, \fBcgcc\fR allows
+projects to run Sparse as part of their build without modifying their
+build system, by using \fBcgcc\fR as the compiler.  For many projects,
+setting \fBCC=cgcc\fR on the \fBmake\fR command-line will work.
+.
+.SH ENVIRONMENT
+.TP
+.B REAL_CC
+If set, \fBcgcc\fR will use this as the compiler to invoke, rather
+than the default \fBcc\fR.
+.
+.TP
+.B CHECK
+If set, \fBcgcc\fR will use this as the Sparse program to invoke,
+rather than the default \fBsparse\fR.
+.
+.SH SEE ALSO
+.BR sparse (1)
--- /dev/null	Fri Dec 21 15:00:01 2018
+++ new/usr/src/tools/smatch/src/char.c	Fri Dec 21 15:00:01 2018
@@ -0,0 +1,146 @@
+#include <string.h>
+#include "target.h"
+#include "lib.h"
+#include "allocate.h"
+#include "token.h"
+#include "expression.h"
+#include "char.h"
+
+static const char *parse_escape(const char *p, unsigned *val, const char *end, int bits, struct position pos)
+{
+	unsigned c = *p++;
+	unsigned d;
+	if (c != '\\') {
+		*val = c;
+		return p;
+	}
+
+	c = *p++;
+	switch (c) {
+	case 'a': c = '\a'; break;
+	case 'b': c = '\b'; break;
+	case 't': c = '\t'; break;
+	case 'n': c = '\n'; break;
+	case 'v': c = '\v'; break;
+	case 'f': c = '\f'; break;
+	case 'r': c = '\r'; break;
+	case 'e': c = '\e'; break;
+	case 'x': {
+		unsigned mask = -(1U << (bits - 4));
+		for (c = 0; p < end; c = (c << 4) + d) {
+			d = hexval(*p);
+			if (d > 16)
+				break;
+			p++;
+			if (c & mask) {
+				warning(pos,
+					"hex escape sequence out of range");
+				mask = 0;
+			}
+		}
+		break;
+	}
+	case '0'...'7': {
+		if (p + 2 < end)
+			end = p + 2;
+		c -= '0';
+		while (p < end && (d = *p - '0') < 8) {
+			c = (c << 3) + d;
+			p++;
+		}
+		if ((c & 0400) && bits < 9)
+			warning(pos,
+				"octal escape sequence out of range");
+		break;
+	}
+	default:	/* everything else is left as is */
+		warning(pos, "unknown escape sequence: '\\%c'", c);
+		break;
+	case '\\':
+	case '\'':
+	case '"':
+	case '?':
+		break;	/* those are legal, so no warnings */
+	}
+	*val = c & ~((~0U << (bits - 1)) << 1);
+	return p;
+}
+
+void get_char_constant(struct token *token, unsigned long long *val)
+{
+	const char *p = token->embedded, *end;
+	unsigned v;
+	int type = token_type(token);
+	switch (type) {
+	case TOKEN_CHAR:
+	case TOKEN_WIDE_CHAR:
+		p = token->string->data;
+		end = p + token->string->length - 1;
+		break;
+	case TOKEN_CHAR_EMBEDDED_0 ... TOKEN_CHAR_EMBEDDED_3:
+		end = p + type - TOKEN_CHAR;
+		break;
+	default:
+		end = p + type - TOKEN_WIDE_CHAR;
+	}
+	p = parse_escape(p, &v, end,
+			type < TOKEN_WIDE_CHAR ? bits_in_char : bits_in_wchar, token->pos);
+	if (p != end)
+		warning(token->pos,
+			"multi-character character constant");
+	*val = v;
+}
+
+struct token *get_string_constant(struct token *token, struct expression *expr)
+{
+	struct string *string = token->string;
+	struct token *next = token->next, *done = NULL;
+	int stringtype = token_type(token);
+	int is_wide = stringtype == TOKEN_WIDE_STRING;
+	static char buffer[MAX_STRING];
+	int len = 0;
+	int bits;
+	int esc_count = 0;
+
+	while (!done) {
+		switch (token_type(next)) {
+		case TOKEN_WIDE_STRING:
+			is_wide = 1;
+		case TOKEN_STRING:
+			next = next->next;
+			break;
+		default:
+			done = next;
+		}
+	}
+	bits = is_wide ? bits_in_wchar : bits_in_char;
+	while (token != done) {
+		unsigned v;
+		const char *p = token->string->data;
+		const char *end = p + token->string->length - 1;
+		while (p < end) {
+			if (*p == '\\')
+				esc_count++;
+			p = parse_escape(p, &v, end, bits, token->pos);
+			if (len < MAX_STRING)
+				buffer[len] = v;
+			len++;
+		}
+		token = token->next;
+	}
+	if (len > MAX_STRING) {
+		warning(token->pos, "trying to concatenate %d-character string (%d bytes max)", len, MAX_STRING);
+		len = MAX_STRING;
+	}
+
+	if (esc_count || len >= string->length) {
+		if (string->immutable || len >= string->length)	/* can't cannibalize */
+			string = __alloc_string(len+1);
+		string->length = len+1;
+		memcpy(string->data, buffer, len);
+		string->data[len] = '\0';
+	}
+	expr->string = string;
+	expr->wide = is_wide;
+	return token;
+}
--- /dev/null	Fri Dec 21 15:00:01 2018
+++ new/usr/src/tools/smatch/src/char.h	Fri Dec 21 15:00:01 2018
@@ -0,0 +1,2 @@
+extern void get_char_constant(struct token *, unsigned long long *);
+extern struct token *get_string_constant(struct token *, struct expression *);
--- /dev/null	Fri Dec 21 15:00:01 2018
+++ new/usr/src/tools/smatch/src/check_64bit_shift.c	Fri Dec 21 15:00:01 2018
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static void match_shift_assignment(struct expression *expr)
+{
+	struct symbol *left_type, *right_type;
+	struct expression *right;
+	sval_t sval;
+	sval_t bits, shifter;
+	char *name;
+
+	right = strip_expr(expr->right);
+	if (right->type != EXPR_BINOP || right->op != SPECIAL_LEFTSHIFT)
+		return;
+
+	left_type = get_type(expr->left);
+	if (left_type != &llong_ctype && left_type != &ullong_ctype)
+		return;
+
+	right_type = get_type(expr->right);
+
+	if (type_bits(right_type) == 64)
+		return;
+
+	if (get_value(right, &sval))
+		return;
+
+	get_absolute_max(right->left, &bits);
+	get_absolute_max(right->right, &shifter);
+
+	bits = sval_cast(&ullong_ctype, bits);
+	if (sval_cmp_val(shifter, 32) < 0) {
+		sval = sval_binop(bits, SPECIAL_LEFTSHIFT, shifter);
+		if (sval_cmp_val(sval, UINT_MAX) < 0)
+			return;
+	}
+
+	name = expr_to_str_sym(right, NULL);
+	sm_warning("should '%s' be a 64 bit type?", name);
+	free_string(name);
+}
+
+void check_64bit_shift(int id)
+{
+	my_id = id;
+
+	add_hook(&match_shift_assignment, ASSIGNMENT_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:01 2018
+++ new/usr/src/tools/smatch/src/check_access_ok_math.c	Fri Dec 21 15:00:01 2018
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static int can_overflow(struct expression *expr)
+{
+	sval_t max;
+	int uncapped = 0;
+
+	expr = strip_expr(expr);
+
+	if (expr->type == EXPR_BINOP) {
+		uncapped += can_overflow(expr->left);
+		uncapped += can_overflow(expr->right);
+
+		if (uncapped &&
+			(expr->op == '+' || expr->op == '*' || expr->op == SPECIAL_LEFTSHIFT))
+			return 1;
+
+		return 0;
+	}
+
+	if (get_implied_max(expr, &max))
+		return 0;
+	if (get_absolute_max(expr, &max) && sval_cmp_val(max, 4096) <= 0)
+		return 0;
+	return 1;
+}
+
+static void match_size(struct expression *size_expr)
+{
+	char *name;
+
+	size_expr = strip_expr(size_expr);
+	if (!size_expr)
+		return;
+	if (size_expr->type != EXPR_BINOP) {
+		size_expr = get_assigned_expr(size_expr);
+		if (!size_expr || size_expr->type != EXPR_BINOP)
+			return;
+	}
+	if (!can_overflow(size_expr))
+		return;
+
+	name = expr_to_str(size_expr);
+	sm_warning("math in access_ok() is dangerous '%s'", name);
+
+	free_string(name);
+}
+
+static void match_access_ok(const char *fn, struct expression *expr, void *data)
+{
+	struct expression *size_expr;
+
+	size_expr = get_argument_from_call_expr(expr->args, 1);
+	match_size(size_expr);
+}
+
+static void split_asm_constraints(struct expression_list *expr_list)
+{
+	struct expression *expr;
+        int state = 0;
+	int i;
+
+	i = 0;
+        FOR_EACH_PTR(expr_list, expr) {
+
+                switch (state) {
+                case 0: /* identifier */
+                case 1: /* constraint */
+                        state++;
+                        continue;
+                case 2: /* expression */
+                        state = 0;
+			if (i == 1)
+				match_size(expr);
+			i++;
+                        continue;
+                }
+        } END_FOR_EACH_PTR(expr);
+}
+
+static void match_asm_stmt(struct statement *stmt)
+{
+	char *name;
+
+	name = get_macro_name(stmt->pos);
+	if (!name || strcmp(name, "access_ok") != 0)
+		return;
+	split_asm_constraints(stmt->asm_inputs);
+}
+
+void check_access_ok_math(int id)
+{
+	my_id = id;
+	if (option_project != PROJ_KERNEL)
+		return;
+	if (!option_spammy)
+		return;
+	add_function_hook("__access_ok", &match_access_ok, NULL);
+	add_hook(&match_asm_stmt, ASM_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:01 2018
+++ new/usr/src/tools/smatch/src/check_all_func_returns.c	Fri Dec 21 15:00:01 2018
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2018 Joyent, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Like lint of old, check that every return value from every function is used.
+ * Casting to (void) will silence this check.
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static void check_func_return(struct expression *expr)
+{
+	struct symbol *sym = get_real_base_type(get_type(expr->fn));
+	const char *func = expr_to_str(expr->fn);
+	struct statement *stmt;
+
+	if (sym == NULL) {
+		sm_error("unknown type for func '%s'", func);
+		return;
+	}
+
+	if (expr->type != EXPR_CALL) {
+		sm_error("func '%s' is not a call site", func);
+		return;
+	}
+
+	/*
+	 * There is never any need to check these returns.
+	 */
+	if (strcmp(func, "memcpy") == 0 ||
+	    strcmp(func, "memmove") == 0 ||
+	    strcmp(func, "memset") == 0)
+		return;
+
+	/*
+	 * Closer to a policy here, but there seems very few cases where it's
+	 * useful to check the return value of the standard printf() family
+	 * outputting to stdout or stderr.
+	 */
+	if (strcmp(func, "printf") == 0 || strcmp(func, "vprintf") == 0)
+		return;
+
+	if (strcmp(func, "fprintf") == 0 || strcmp(func, "vfprintf")) {
+		const char *arg0 = expr_to_str(get_argument_from_call_expr(expr->args, 0));
+
+		if (arg0 != NULL &&
+		    (strcmp(arg0, "(&__iob[1])") == 0 ||
+		    strcmp(arg0, "(&__iob[2])") == 0))
+			return;
+	}
+
+	/*
+	 * Either we got the return type already (direct call),
+	 * or we need to go one further (function pointer call)
+	 */
+	if (sym == &void_ctype || (sym->type == SYM_FN &&
+		get_real_base_type(sym) == &void_ctype))
+		return;
+
+	stmt = last_ptr_list((struct ptr_list *)big_statement_stack);
+
+	if (stmt->type == STMT_EXPRESSION && stmt->expression == expr)
+		sm_error("unchecked function return '%s'", expr_to_str(expr->fn));
+}
+
+void check_all_func_returns(int id)
+{
+	if (option_project != PROJ_ILLUMOS_KERNEL &&
+	    option_project != PROJ_ILLUMOS_USER)
+		return;
+
+	add_hook(&check_func_return, FUNCTION_CALL_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:01 2018
+++ new/usr/src/tools/smatch/src/check_allocating_enough_data.c	Fri Dec 21 15:00:01 2018
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static void db_returns_buf_size(struct expression *expr, int param, char *unused, char *math)
+{
+	struct expression *call;
+	struct symbol *left_type, *right_type;
+	int bytes;
+	sval_t sval;
+
+	if (expr->type != EXPR_ASSIGNMENT)
+		return;
+	right_type = get_pointer_type(expr->right);
+	if (!right_type || type_bits(right_type) != -1)
+		return;
+
+	call = strip_expr(expr->right);
+	left_type = get_pointer_type(expr->left);
+
+	if (!parse_call_math(call, math, &sval) || sval.value == 0)
+		return;
+	if (!left_type)
+		return;
+	bytes = type_bytes(left_type);
+	if (bytes <= 0)
+		return;
+	if (sval.uvalue >= bytes)
+		return;
+	sm_error("not allocating enough data %d vs %s", bytes, sval_to_str(sval));
+}
+
+void check_allocating_enough_data(int id)
+{
+	select_return_states_hook(BUF_SIZE, &db_returns_buf_size);
+}
--- /dev/null	Fri Dec 21 15:00:01 2018
+++ new/usr/src/tools/smatch/src/check_allocation_funcs.c	Fri Dec 21 15:00:01 2018
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include <fcntl.h>
+#include <unistd.h>
+#include "parse.h"
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+/*
+ * Print a list of functions that return newly allocated memory.
+ */
+
+static struct tracker_list *allocated;
+
+static const char *allocation_funcs[] = {
+	"kmalloc",
+	"kzalloc",
+	"kcalloc",
+	"__alloc_skb",
+	NULL,
+};
+
+static void match_allocation(const char *fn, struct expression *expr,
+			     void *info)
+{
+	char *left_name;
+	struct symbol *left_sym;
+
+	left_name = expr_to_var_sym(expr->left, &left_sym);
+	if (!left_name || !left_sym)
+		goto free;
+	if (left_sym->ctype.modifiers & 
+	    (MOD_NONLOCAL | MOD_STATIC | MOD_ADDRESSABLE))
+		goto free;
+	add_tracker(&allocated, my_id, left_name, left_sym);
+free:
+	free_string(left_name);
+}
+
+static int returns_new_stuff = 0;
+static int returns_old_stuff = 0;
+static void match_return(struct expression *ret_value)
+{
+	char *name;
+	struct symbol *sym;
+	sval_t tmp;
+
+	if (__inline_fn)
+		return;
+	if (get_value(ret_value, &tmp) && tmp.value == 0)
+		return;
+	returns_new_stuff = 1;
+	name = expr_to_var_sym(ret_value, &sym);
+	if (!name || !sym) {
+		returns_old_stuff = 1;
+		goto free;
+	}
+	if (!in_tracker_list(allocated, my_id, name, sym))
+		returns_old_stuff = 1;
+free:
+	free_string(name);
+}
+
+static void match_end_func(struct symbol *sym)
+{
+	if (__inline_fn)
+		return;
+	if (returns_new_stuff && !returns_old_stuff)
+		sm_info("allocation func");
+	free_trackers_and_list(&allocated);
+	returns_new_stuff = 0;
+	returns_old_stuff = 0;
+}
+
+void check_allocation_funcs(int id)
+{
+	int i;
+
+	if (!option_info || option_project != PROJ_KERNEL)
+		return;
+
+	my_id = id;
+	add_hook(&match_return, RETURN_HOOK);
+	add_hook(&match_end_func, AFTER_FUNC_HOOK);
+	for (i = 0; allocation_funcs[i]; i++) {
+		add_function_assign_hook(allocation_funcs[i],
+					 &match_allocation, NULL);
+	}
+}
--- /dev/null	Fri Dec 21 15:00:01 2018
+++ new/usr/src/tools/smatch/src/check_array_condition.c	Fri Dec 21 15:00:01 2018
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2013 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * struct foo { char buf[10]; };
+ *
+ * struct foo *p = something();
+ * if (p->buf) { ...
+ *
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static void match_condition(struct expression *expr)
+{
+	struct symbol *type;
+	char *str;
+
+	if (expr->type != EXPR_DEREF)
+		return;
+	type = get_type(expr);
+	if (!type || type->type != SYM_ARRAY)
+		return;
+	if (get_macro_name(expr->pos))
+		return;
+
+	str = expr_to_str(expr);
+	sm_warning("this array is probably non-NULL. '%s'", str);
+	free_string(str);
+}
+
+void check_array_condition(int id)
+{
+	my_id = id;
+	add_hook(&match_condition, CONDITION_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:01 2018
+++ new/usr/src/tools/smatch/src/check_assign_vs_compare.c	Fri Dec 21 15:00:01 2018
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static void check_constant(struct expression *expr)
+{
+	sval_t val;
+
+	if (!get_value(expr->right, &val))
+		return;
+	sm_warning("was '== %s' instead of '='", sval_to_str(val));
+}
+
+static void check_address(struct expression *expr)
+{
+	char *str;
+	struct expression *right = strip_expr(expr->right);
+
+	if (!__cur_stmt || __cur_stmt->type != STMT_IF)
+		return;
+
+	if (right->type != EXPR_PREOP ||
+	    right->op != '&')
+		return;
+
+	if (get_macro_name(expr->pos))
+		return;
+
+	str = expr_to_str(right);
+	sm_warning("was '== %s' instead of '='", str);
+	free_string(str);
+}
+
+static void match_condition(struct expression *expr)
+{
+	if (expr->type != EXPR_ASSIGNMENT || expr->op != '=')
+		return;
+
+	check_constant(expr);
+	check_address(expr);
+}
+
+void check_assign_vs_compare(int id)
+{
+	my_id = id;
+	add_hook(&match_condition, CONDITION_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:01 2018
+++ new/usr/src/tools/smatch/src/check_atomic_inc_dec.c	Fri Dec 21 15:00:01 2018
@@ -0,0 +1,248 @@
+/*
+ * Copyright (C) 2016 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+STATE(inc);
+STATE(orig);
+STATE(dec);
+
+static void db_inc_dec(struct expression *expr, int param, const char *key, const char *value, int inc_dec)
+{
+	struct smatch_state *start_state;
+	struct expression *arg;
+	char *name;
+	struct symbol *sym;
+
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+	if (expr->type != EXPR_CALL)
+		return;
+
+	arg = get_argument_from_call_expr(expr->args, param);
+	if (!arg)
+		return;
+
+	name = get_variable_from_key(arg, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	start_state = get_state(my_id, name, sym);
+
+	if (inc_dec == ATOMIC_INC) {
+//		if (start_state == &inc)
+//			sm_error("XXX double increment '%s'", name);
+		set_state(my_id, name, sym, &inc);
+	} else {
+//		if (start_state == &dec)
+//			sm_error("XXX double decrement '%s'", name);
+		if (start_state == &inc)
+			set_state(my_id, name, sym, &orig);
+		else
+			set_state(my_id, name, sym, &dec);
+	}
+
+free:
+	free_string(name);
+}
+
+static void db_inc(struct expression *expr, int param, char *key, char *value)
+{
+	db_inc_dec(expr, param, key, value, ATOMIC_INC);
+}
+
+static void db_dec(struct expression *expr, int param, char *key, char *value)
+{
+	db_inc_dec(expr, param, key, value, ATOMIC_DEC);
+}
+
+static void match_atomic_inc(const char *fn, struct expression *expr, void *_unused)
+{
+	db_inc_dec(expr, 0, "$->counter", "", ATOMIC_INC);
+}
+
+static void match_atomic_dec(const char *fn, struct expression *expr, void *_unused)
+{
+	db_inc_dec(expr, 0, "$->counter", "", ATOMIC_DEC);
+}
+
+static void match_atomic_add(const char *fn, struct expression *expr, void *_unused)
+{
+	struct expression *amount;
+	sval_t sval;
+
+	amount = get_argument_from_call_expr(expr->args, 0);
+	if (get_implied_value(amount, &sval) && sval_is_negative(sval)) {
+		db_inc_dec(expr, 1, "$->counter", "", ATOMIC_DEC);
+		return;
+	}
+
+	db_inc_dec(expr, 1, "$->counter", "", ATOMIC_INC);
+}
+
+static void match_atomic_sub(const char *fn, struct expression *expr, void *_unused)
+{
+	db_inc_dec(expr, 1, "$->counter", "", ATOMIC_DEC);
+}
+
+static void refcount_inc(const char *fn, struct expression *expr, void *param)
+{
+	db_inc_dec(expr, PTR_INT(param), "$->ref.counter", "", ATOMIC_INC);
+}
+
+static void refcount_dec(const char *fn, struct expression *expr, void *param)
+{
+	db_inc_dec(expr, PTR_INT(param), "$->ref.counter", "", ATOMIC_DEC);
+}
+
+static void match_return_info(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct sm_state *sm;
+	const char *param_name;
+	int param;
+
+	FOR_EACH_MY_SM(my_id, __get_cur_stree(), sm) {
+		if (sm->state != &inc &&
+		    sm->state != &dec)
+			continue;
+		param = get_param_num_from_sym(sm->sym);
+		if (param < 0)
+			continue;
+		param_name = get_param_name(sm);
+		if (!param_name)
+			continue;
+		sql_insert_return_states(return_id, return_ranges,
+					 (sm->state == &inc) ? ATOMIC_INC : ATOMIC_DEC,
+					 param, param_name, "");
+	} END_FOR_EACH_SM(sm);
+}
+
+enum {
+	NEGATIVE, ZERO, POSITIVE,
+};
+
+static int success_fail_positive(struct range_list *rl)
+{
+	if (!rl)
+		return ZERO;
+
+	if (sval_is_negative(rl_min(rl)))
+		return NEGATIVE;
+
+	if (rl_min(rl).value == 0)
+		return ZERO;
+
+	return POSITIVE;
+}
+
+static void check_counter(const char *name, struct symbol *sym)
+{
+	struct range_list *inc_lines = NULL;
+	struct range_list *dec_lines = NULL;
+	int inc_buckets[3] = {};
+	struct stree *stree;
+	struct sm_state *return_sm;
+	struct sm_state *sm;
+	sval_t line = sval_type_val(&int_ctype, 0);
+
+	FOR_EACH_PTR(get_all_return_strees(), stree) {
+		return_sm = get_sm_state_stree(stree, RETURN_ID, "return_ranges", NULL);
+		if (!return_sm)
+			continue;
+		line.value = return_sm->line;
+
+		sm = get_sm_state_stree(stree, my_id, name, sym);
+		if (!sm)
+			continue;
+
+		if (sm->state != &inc && sm->state != &dec)
+			continue;
+
+		if (sm->state == &inc) {
+			add_range(&inc_lines, line, line);
+			inc_buckets[success_fail_positive(estate_rl(return_sm->state))] = 1;
+		}
+		if (sm->state == &dec)
+			add_range(&dec_lines, line, line);
+	} END_FOR_EACH_PTR(stree);
+
+	if (inc_buckets[NEGATIVE] &&
+	    inc_buckets[ZERO]) {
+		// sm_warning("XXX '%s' not decremented on lines: %s.", name, show_rl(inc_lines));
+	}
+
+}
+
+static void match_check_missed(struct symbol *sym)
+{
+	struct sm_state *sm;
+
+	FOR_EACH_MY_SM(my_id, get_all_return_states(), sm) {
+		check_counter(sm->name, sm->sym);
+	} END_FOR_EACH_SM(sm);
+}
+
+int on_atomic_dec_path(void)
+{
+	struct sm_state *sm;
+
+	FOR_EACH_MY_SM(my_id, __get_cur_stree(), sm) {
+		if (sm->state == &dec)
+			return 1;
+	} END_FOR_EACH_SM(sm);
+
+	return 0;
+}
+
+int was_inced(const char *name, struct symbol *sym)
+{
+	return get_state(my_id, name, sym) == &inc;
+}
+
+void check_atomic_inc_dec(int id)
+{
+	my_id = id;
+
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	select_return_states_hook(ATOMIC_INC, &db_inc);
+	select_return_states_hook(ATOMIC_DEC, &db_dec);
+	add_function_hook("atomic_inc_return", &match_atomic_inc, NULL);
+	add_function_hook("atomic_add_return", &match_atomic_add, NULL);
+	add_function_hook("atomic_sub_return", &match_atomic_sub, NULL);
+	add_function_hook("atomic_sub_and_test", &match_atomic_sub, NULL);
+	add_function_hook("atomic_dec_and_test", &match_atomic_dec, NULL);
+	add_function_hook("_atomic_dec_and_lock", &match_atomic_dec, NULL);
+	add_function_hook("atomic_dec", &match_atomic_dec, NULL);
+	add_function_hook("atomic_long_inc", &match_atomic_inc, NULL);
+	add_function_hook("atomic_long_dec", &match_atomic_dec, NULL);
+	add_function_hook("atomic_inc", &match_atomic_inc, NULL);
+	add_function_hook("atomic_sub", &match_atomic_sub, NULL);
+	add_split_return_callback(match_return_info);
+
+	add_function_hook("refcount_add_not_zero", &refcount_inc, INT_PTR(1));
+	add_function_hook("refcount_inc_not_zero", &refcount_inc, INT_PTR(0));
+	add_function_hook("refcount_sub_and_test", &refcount_dec, INT_PTR(1));
+	add_function_hook("refcount_dec_and_test", &refcount_dec, INT_PTR(1));
+
+	add_hook(&match_check_missed, END_FUNC_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:01 2018
+++ new/usr/src/tools/smatch/src/check_bit_shift.c	Fri Dec 21 15:00:01 2018
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This test is used to warn about mixups between bit shifters and bit flags.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_function_hashtable.h"
+
+static int my_id;
+
+static DEFINE_HASHTABLE_INSERT(insert_struct, char, int);
+static DEFINE_HASHTABLE_SEARCH(search_struct, char, int);
+static struct hashtable *shifters;
+
+static const char *get_shifter(struct expression *expr)
+{
+	const char *name;
+	sval_t expr_value;
+	const int *shifter_value;
+
+	expr = strip_expr(expr);
+	if (expr->type != EXPR_VALUE)
+		return NULL;
+	if (!get_value(expr, &expr_value))
+		return NULL;
+	name = pos_ident(expr->pos);
+	if (!name)
+		return NULL;
+	shifter_value = search_struct(shifters, (char *)name);
+	if (!shifter_value)
+		return NULL;
+	if (sval_cmp_val(expr_value, *shifter_value) != 0)
+		return NULL;
+	return name;
+}
+
+static void match_assign(struct expression *expr)
+{
+	const char *name;
+
+	if (expr->op != SPECIAL_OR_ASSIGN)
+		return;
+	if (positions_eq(expr->pos, expr->right->pos))
+		return;
+	name = get_shifter(expr->right);
+	if (!name)
+		return;
+
+	sm_warning("'%s' is a shifter (not for '%s').",
+			name, show_special(expr->op));
+}
+
+static void match_binop(struct expression *expr)
+{
+	const char *name;
+
+	if (positions_eq(expr->pos, expr->right->pos))
+		return;
+	if (expr->op != '&')
+		return;
+	name = get_shifter(expr->right);
+	if (!name)
+		return;
+
+	sm_warning("bit shifter '%s' used for logical '%s'",
+			name, show_special(expr->op));
+}
+
+static void register_shifters(void)
+{
+	char filename[256];
+	struct token *token;
+	char *name;
+	int *val;
+
+	snprintf(filename, sizeof(filename), "%s.bit_shifters", option_project_str);
+	token = get_tokens_file(filename);
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		name = alloc_string(show_ident(token->ident));
+		token = token->next;
+		if (token_type(token) != TOKEN_NUMBER)
+			return;
+		val = malloc(sizeof(int));
+		*val = atoi(token->number);
+		insert_struct(shifters, name, val);
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+static void match_binop_info(struct expression *expr)
+{
+	char *name;
+	sval_t sval;
+
+	if (positions_eq(expr->pos, expr->right->pos))
+		return;
+	if (expr->op != SPECIAL_LEFTSHIFT)
+		return;
+	if (expr->right->type != EXPR_VALUE)
+		return;
+	name = pos_ident(expr->right->pos);
+	if (!name)
+		return;
+	if (!get_value(expr->right, &sval))
+		return;
+	sm_msg("info: bit shifter '%s' '%s'", name, sval_to_str(sval));
+}
+
+static void match_call(const char *fn, struct expression *expr, void *_arg_no)
+{
+	struct expression *arg_expr;
+	int arg_no = PTR_INT(_arg_no);
+	sval_t sval;
+	char *name;
+
+	arg_expr = get_argument_from_call_expr(expr->args, arg_no);
+	if (positions_eq(expr->pos, arg_expr->pos))
+		return;
+	name = pos_ident(arg_expr->pos);
+	if (!name)
+		return;
+	if (!get_value(arg_expr, &sval))
+		return;
+	sm_msg("info: bit shifter '%s' '%s'", name, sval_to_str(sval));
+}
+
+void check_bit_shift(int id)
+{
+	my_id = id;
+
+	shifters = create_function_hashtable(5000);
+	register_shifters();
+
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+	add_hook(&match_binop, BINOP_HOOK);
+
+	if (option_info) {
+		add_hook(&match_binop_info, BINOP_HOOK);
+		if (option_project == PROJ_KERNEL) {
+			add_function_hook("set_bit", &match_call, INT_PTR(0));
+			add_function_hook("test_bit", &match_call, INT_PTR(0));
+		}
+	}
+}
--- /dev/null	Fri Dec 21 15:00:01 2018
+++ new/usr/src/tools/smatch/src/check_bogus_irqrestore.c	Fri Dec 21 15:00:01 2018
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2011 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static void match_irqrestore(const char *fn, struct expression *expr, void *data)
+{
+	struct expression *arg_expr;
+	sval_t tmp;
+
+	arg_expr = get_argument_from_call_expr(expr->args, 1);
+	if (!get_implied_value(arg_expr, &tmp))
+		return;
+	sm_error("calling '%s()' with bogus flags", fn);
+}
+
+void check_bogus_irqrestore(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	my_id = id;
+	add_function_hook("spin_unlock_irqrestore", &match_irqrestore, NULL);
+}
--- /dev/null	Fri Dec 21 15:00:01 2018
+++ new/usr/src/tools/smatch/src/check_bogus_loop.c	Fri Dec 21 15:00:01 2018
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2011 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+static int right_side_changes(struct expression *expr)
+{
+	sval_t dummy;
+
+	if (get_value(expr->right, &dummy))
+		return 0;
+	return 1;
+}
+
+static struct expression *get_iterator_set(struct statement *stmt)
+{
+	struct expression *expr;
+
+	if (!stmt)
+		return NULL;
+	if (stmt->type != STMT_EXPRESSION)
+		return NULL;
+	expr = stmt->expression;
+	if (expr->type != EXPR_ASSIGNMENT)
+		return NULL;
+	if (expr->op != '=')
+		return NULL;
+	if (right_side_changes(expr))
+		return NULL;
+	return expr->left;
+}
+
+static struct expression *get_iterator_tested(struct expression *expr)
+{
+	if (!expr)
+		return NULL;
+	if (expr->type != EXPR_COMPARE)
+		return NULL;
+	return expr->left;
+}
+
+static void match_loop(struct statement *stmt)
+{
+	struct expression *iterator;
+	char *iter_set;
+	char *iter_tested;
+
+	if (get_macro_name(stmt->pos))
+		return;
+
+	iterator = get_iterator_set(stmt->iterator_pre_statement);
+	iter_set = expr_to_var(iterator);
+	iterator = get_iterator_tested(stmt->iterator_pre_condition);
+	iter_tested = expr_to_var(iterator);
+	if (!iter_set || !iter_tested)
+		goto free;
+	if (strcmp(iter_set, iter_tested))
+		goto free;
+
+	/* smatch doesn't handle loops correctly so this silences some
+	 * false positives.
+	 */
+	if (right_side_changes(stmt->iterator_pre_condition))
+		goto free;
+
+	if (implied_condition_false(stmt->iterator_pre_condition))
+		sm_warning("we never enter this loop");
+
+free:
+	free_string(iter_set);
+	free_string(iter_tested);
+}
+
+void check_bogus_loop(int id)
+{
+	my_id = id;
+	add_hook(&match_loop, PRELOOP_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:02 2018
+++ new/usr/src/tools/smatch/src/check_buffer_too_small_for_struct.c	Fri Dec 21 15:00:02 2018
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+STATE(too_small);
+
+static void match_assign(struct expression *expr)
+{
+	struct symbol *left_type, *right_type;
+	struct expression *size_expr;
+	sval_t min_size;
+
+	left_type = get_type(expr->left);
+	if (!left_type || left_type->type != SYM_PTR)
+		return;
+	left_type = get_real_base_type(left_type);
+	if (!left_type || left_type->type != SYM_STRUCT)
+		return;
+
+	right_type = get_type(expr->right);
+	if (!right_type || right_type->type != SYM_PTR)
+		return;
+	right_type = get_real_base_type(right_type);
+	if (!right_type)
+		return;
+	if (right_type != &void_ctype && type_bits(right_type) != 8)
+		return;
+
+	size_expr = get_size_variable(expr->right);
+	if (!size_expr)
+		return;
+
+	get_absolute_min(size_expr, &min_size);
+	if (min_size.value >= type_bytes(left_type))
+		return;
+
+	set_state_expr(my_id, expr->left, &too_small);
+}
+
+static void match_dereferences(struct expression *expr)
+{
+	struct symbol *left_type;
+	struct expression *right;
+	struct smatch_state *state;
+	char *name;
+	struct expression *size_expr;
+	sval_t min_size;
+
+	if (expr->type != EXPR_PREOP)
+		return;
+
+	expr = strip_expr(expr->unop);
+	state = get_state_expr(my_id, expr);
+	if (state != &too_small)
+		return;
+
+	left_type = get_type(expr);
+	if (!left_type || left_type->type != SYM_PTR)
+		return;
+	left_type = get_real_base_type(left_type);
+	if (!left_type || left_type->type != SYM_STRUCT)
+		return;
+
+	right = get_assigned_expr(expr);
+	size_expr = get_size_variable(right);
+	if (!size_expr)
+		return;
+
+	get_absolute_min(size_expr, &min_size);
+	if (min_size.value >= type_bytes(left_type))
+		return;
+
+	name = expr_to_str(right);
+	sm_warning("is '%s' large enough for 'struct %s'? %s", name, left_type->ident ? left_type->ident->name : "<anon>", sval_to_str(min_size));
+	free_string(name);
+	set_state_expr(my_id, expr, &undefined);
+}
+
+void check_buffer_too_small_for_struct(int id)
+{
+	my_id = id;
+
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+	add_hook(&match_dereferences, DEREF_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:02 2018
+++ new/usr/src/tools/smatch/src/check_call_tree.c	Fri Dec 21 15:00:02 2018
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static void match_call(struct expression *expr)
+{
+	char *fn_name;
+
+	fn_name = expr_to_var(expr->fn);
+	if (!fn_name)
+		return;
+	sm_prefix();
+	sm_printf("info: func_call (");
+	print_held_locks();
+	sm_printf(") %s\n", fn_name);
+	free_string(fn_name);
+}
+
+void check_call_tree(int id)
+{
+	if (!option_call_tree)
+		return;
+	my_id = id;
+	add_hook(&match_call, FUNCTION_CALL_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:02 2018
+++ new/usr/src/tools/smatch/src/check_capable.c	Fri Dec 21 15:00:02 2018
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+STATE(capable);
+
+static int capable_id;
+static int ns_capable_id;
+
+static void match_capable(const char *fn, struct expression *expr, void *_param)
+{
+	struct expression *arg;
+	sval_t sval;
+	char buf[32];
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	if (!get_implied_value(arg, &sval))
+		return;
+	snprintf(buf, sizeof(buf), "%s", sval_to_str(sval));
+	set_state(capable_id, buf, NULL, &capable);
+}
+
+static void match_ns_capable(const char *fn, struct expression *expr, void *_param)
+{
+	struct expression *arg;
+	sval_t sval;
+	char buf[32];
+
+	if (get_function() && strcmp(get_function(), "capable") == 0)
+		return;
+
+	arg = get_argument_from_call_expr(expr->args, 1);
+	if (!get_implied_value(arg, &sval))
+		return;
+	snprintf(buf, sizeof(buf), "%s", sval_to_str(sval));
+	set_state(ns_capable_id, buf, NULL, &capable);
+}
+
+static void save_call_info(struct expression *call)
+{
+	struct sm_state *sm;
+
+	FOR_EACH_MY_SM(capable_id, __get_cur_stree(), sm) {
+		if (sm->state == &capable)
+			sql_insert_caller_info(call, CAPABLE, 0, sm->name, "");
+	} END_FOR_EACH_SM(sm);
+
+	FOR_EACH_MY_SM(ns_capable_id, __get_cur_stree(), sm) {
+		if (sm->state == &capable)
+			sql_insert_caller_info(call, NS_CAPABLE, 0, sm->name, "");
+	} END_FOR_EACH_SM(sm);
+}
+
+static void save_return_info(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct sm_state *sm;
+
+	FOR_EACH_MY_SM(capable_id, __get_cur_stree(), sm) {
+		if (sm->state == &capable)
+			sql_insert_return_states(return_id, return_ranges,
+						 CAPABLE, 0, sm->name, "");
+	} END_FOR_EACH_SM(sm);
+
+	FOR_EACH_MY_SM(ns_capable_id, __get_cur_stree(), sm) {
+		if (sm->state == &capable)
+			sql_insert_return_states(return_id, return_ranges,
+						 CAPABLE, 0, sm->name, "");
+	} END_FOR_EACH_SM(sm);
+}
+
+static void set_db_capable(const char *name, struct symbol *sym, char *key, char *value)
+{
+	char buf[32];
+
+	snprintf(buf, sizeof(buf), "%s", key);
+	set_state(capable_id, buf, NULL, &capable);
+}
+
+static void set_db_ns_capable(const char *name, struct symbol *sym, char *key, char *value)
+{
+	char buf[32];
+
+	snprintf(buf, sizeof(buf), "%s", key);
+	set_state(ns_capable_id, buf, NULL, &capable);
+}
+
+void check_capable(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	capable_id = id;
+	add_function_hook("capable", &match_capable, INT_PTR(0));
+
+	add_hook(&save_call_info, FUNCTION_CALL_HOOK);
+	add_split_return_callback(save_return_info);
+	select_caller_info_hook(set_db_capable, CAPABLE);
+}
+
+void check_ns_capable(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	ns_capable_id = id;
+	add_function_hook("ns_capable", &match_ns_capable, INT_PTR(0));
+	select_caller_info_hook(set_db_ns_capable, NS_CAPABLE);
+}
--- /dev/null	Fri Dec 21 15:00:02 2018
+++ new/usr/src/tools/smatch/src/check_cast_assign.c	Fri Dec 21 15:00:02 2018
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+static struct symbol *get_cast_type(struct expression *expr)
+{
+	if (!expr || expr->type != EXPR_PREOP || expr->op != '*')
+		return NULL;
+	expr = strip_parens(expr->unop);
+	if (expr->type != EXPR_CAST)
+		return NULL;
+	return get_pointer_type(expr);
+}
+
+static void match_overflow(struct expression *expr)
+{
+	struct expression *ptr;
+	struct symbol *type;
+	int cast_size;
+	int data_size;
+
+	type = get_cast_type(expr->left);
+	if (!type)
+		return;
+	cast_size = type_bytes(type);
+
+	ptr = strip_expr(expr->left->unop);
+	data_size = get_array_size_bytes_min(ptr);
+	if (data_size <= 0)
+		return;
+	if (data_size >= cast_size)
+		return;
+	sm_warning("potential memory corrupting cast %d vs %d bytes",
+	       cast_size, data_size);
+}
+
+void check_cast_assign(int id)
+{
+	my_id = id;
+	add_hook(&match_overflow, ASSIGNMENT_HOOK);
+}
+
--- /dev/null	Fri Dec 21 15:00:02 2018
+++ new/usr/src/tools/smatch/src/check_check_deref.c	Fri Dec 21 15:00:02 2018
@@ -0,0 +1,168 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This is like check_deref_check.c except that it complains about code like:
+ * if (a)
+ *        a->foo = 42;
+ * a->bar = 7;
+ *
+ * Of course, Smatch has complained about these for forever but the problem is
+ * the old scripts were too messy and complicated and generated too many false
+ * positives.
+ *
+ * This check is supposed to be simpler because it only looks for one kind of 
+ * null dereference bug instead of every kind.  It also gets rid of the false 
+ * positives caused by the checks that happen inside macros.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+STATE(null);
+STATE(ok);
+
+static void is_ok(struct sm_state *sm, struct expression *mod_expr)
+{
+	set_state(my_id, sm->name, sm->sym, &ok);
+}
+
+static void check_dereference(struct expression *expr)
+{
+	struct sm_state *sm;
+	struct sm_state *tmp;
+
+	if (__in_fake_assign)
+		return;
+
+	expr = strip_expr(expr);
+
+	sm = get_sm_state_expr(my_id, expr);
+	if (!sm)
+		return;
+	if (is_ignored(my_id, sm->name, sm->sym))
+		return;
+	if (implied_not_equal(expr, 0))
+		return;
+
+	FOR_EACH_PTR(sm->possible, tmp) {
+		if (tmp->state == &merged)
+			continue;
+		if (tmp->state == &ok)
+			continue;
+		if (tmp->state == &null) {
+			sm_error("we previously assumed '%s' could be null (see line %d)",
+			       tmp->name, tmp->line);
+			add_ignore(my_id, sm->name, sm->sym);
+			return;
+		}
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void check_dereference_name_sym(char *name, struct symbol *sym)
+{
+	struct sm_state *sm;
+	struct sm_state *tmp;
+
+	sm = get_sm_state(my_id, name, sym);
+	if (!sm)
+		return;
+	if (is_ignored(my_id, sm->name, sm->sym))
+		return;
+	if (implied_not_equal_name_sym(name, sym, 0))
+		return;
+
+	FOR_EACH_PTR(sm->possible, tmp) {
+		if (tmp->state == &merged)
+			continue;
+		if (tmp->state == &ok)
+			continue;
+		if (tmp->state == &null) {
+			sm_error("we previously assumed '%s' could be null (see line %d)",
+			       tmp->name, tmp->line);
+			add_ignore(my_id, sm->name, sm->sym);
+			return;
+		}
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void match_dereferences(struct expression *expr)
+{
+	if (expr->type != EXPR_PREOP)
+		return;
+	check_dereference(expr->unop);
+}
+
+static void match_pointer_as_array(struct expression *expr)
+{
+	if (!is_array(expr))
+		return;
+	check_dereference(get_array_base(expr));
+}
+
+static void set_param_dereferenced(struct expression *call, struct expression *arg, char *key, char *unused)
+{
+	struct symbol *sym;
+	char *name;
+
+	name = get_variable_from_key(arg, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	check_dereference_name_sym(name, sym);
+free:
+	free_string(name);
+}
+
+static void match_condition(struct expression *expr)
+{
+	struct smatch_state *true_state = NULL;
+
+	if (get_macro_name(expr->pos))
+		return;
+
+	if (!is_pointer(expr))
+		return;
+
+	if (expr->type == EXPR_ASSIGNMENT) {
+		match_condition(expr->right);
+		match_condition(expr->left);
+	}
+
+	if (implied_not_equal(expr, 0))
+		return;
+
+	if (get_state_expr(my_id, expr))
+		true_state = &ok;
+
+	set_true_false_states_expr(my_id, expr, true_state, &null);
+}
+
+void check_check_deref(int id)
+{
+	my_id = id;
+
+	add_modification_hook(my_id, &is_ok);
+	add_hook(&match_dereferences, DEREF_HOOK);
+	add_hook(&match_pointer_as_array, OP_HOOK);
+	select_return_implies_hook(DEREFERENCE, &set_param_dereferenced);
+	add_hook(&match_condition, CONDITION_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:02 2018
+++ new/usr/src/tools/smatch/src/check_container_of.c	Fri Dec 21 15:00:02 2018
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Some macros don't return NULL pointers.  Complain if people
+ * check the results for NULL because obviously the programmers
+ * don't know what the pants they're doing.
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+STATE(non_null);
+
+static void is_ok(struct sm_state *sm, struct expression *mod_expr)
+{
+	set_state(my_id, sm->name, sm->sym, &undefined);
+}
+
+static void match_non_null(const char *fn, struct expression *expr, void *unused)
+{
+	set_state_expr(my_id, expr->left, &non_null);
+}
+
+static void match_condition(struct expression *expr)
+{
+	if (__in_pre_condition)
+		return;
+
+	if (get_macro_name(expr->pos))
+		return;
+
+	if (get_state_expr(my_id, expr) == &non_null) {
+		char *name;
+
+		name = expr_to_var(expr);
+		sm_warning("can '%s' even be NULL?", name);
+		set_state_expr(my_id, expr, &undefined);
+		free_string(name);
+	}
+}
+
+void check_container_of(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	my_id = id;
+	add_macro_assign_hook("container_of", &match_non_null, NULL);
+	add_macro_assign_hook("list_first_entry", &match_non_null, NULL);
+	add_function_assign_hook("nla_data", &match_non_null, NULL);
+	add_modification_hook(my_id, &is_ok);
+	add_hook(&match_condition, CONDITION_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:02 2018
+++ new/usr/src/tools/smatch/src/check_continue_vs_break.c	Fri Dec 21 15:00:02 2018
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2015 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * If you have code like:
+ * do {
+ *    if (xxx)
+ *        continue;
+ * while (0);
+ *
+ * Then the continue is equivalent of a break.  So what was really intended?
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+static struct statement_list *iterator_stack;
+
+static int is_do_while_zero(struct statement *stmt)
+{
+	if (!stmt->iterator_post_condition)
+		return 0;
+	if (!is_zero(stmt->iterator_post_condition))
+		return 0;
+	return 1;
+}
+
+static void push_statement(struct statement_list **stack, struct statement *stmt)
+{
+	add_ptr_list(stack, stmt);
+}
+
+static void pop_statement(struct statement_list **stack)
+{
+	delete_ptr_list_last((struct ptr_list **)stack);
+}
+
+static int inside_do_while_zero(void)
+{
+	struct statement *stmt;
+
+	stmt = last_ptr_list((struct ptr_list *)iterator_stack);
+	return !!stmt;
+}
+
+static int loop_is_macro(void)
+{
+	struct statement *stmt;
+
+	stmt = last_ptr_list((struct ptr_list *)iterator_stack);
+	if (!stmt)
+		return 0;
+	if (get_macro_name(stmt->iterator_post_condition->pos))
+		return 1;
+	return 0;
+}
+
+static void match_stmt(struct statement *stmt)
+{
+	if (stmt->type != STMT_ITERATOR)
+		return;
+
+	if (is_do_while_zero(stmt)) {
+		push_statement(&iterator_stack, stmt);
+	} else
+		push_statement(&iterator_stack, NULL);
+}
+
+static void match_stmt_after(struct statement *stmt)
+{
+	if (stmt->type != STMT_ITERATOR)
+		return;
+
+	pop_statement(&iterator_stack);
+}
+
+static void match_inline_start(struct expression *expr)
+{
+	push_statement(&iterator_stack, NULL);
+}
+
+static void match_inline_end(struct expression *expr)
+{
+	pop_statement(&iterator_stack);
+}
+
+static void match_continue(struct statement *stmt)
+{
+	if (stmt->type != STMT_GOTO)
+		return;
+
+	if (!stmt->goto_label || stmt->goto_label->type != SYM_NODE)
+		return;
+	if (strcmp(stmt->goto_label->ident->name, "continue") != 0)
+		return;
+	if (!inside_do_while_zero())
+		return;
+	if (loop_is_macro())
+		return;
+	sm_warning("continue to end of do { ... } while(0); loop");
+}
+
+void check_continue_vs_break(int id)
+{
+	my_id = id;
+	add_hook(&match_stmt, STMT_HOOK);
+	add_hook(&match_stmt_after, STMT_HOOK_AFTER);
+	add_hook(&match_inline_start, INLINE_FN_START);
+	add_hook(&match_inline_end, INLINE_FN_END);
+
+	add_hook(&match_continue, STMT_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:02 2018
+++ new/usr/src/tools/smatch/src/check_debug.c	Fri Dec 21 15:00:02 2018
@@ -0,0 +1,772 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+int local_debug;
+static int my_id;
+char *trace_variable;
+
+static void match_all_values(const char *fn, struct expression *expr, void *info)
+{
+	struct stree *stree;
+
+	stree = get_all_states_stree(SMATCH_EXTRA);
+	__print_stree(stree);
+	free_stree(&stree);
+}
+
+static void match_cur_stree(const char *fn, struct expression *expr, void *info)
+{
+	__print_cur_stree();
+}
+
+static void match_state(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *check_arg, *state_arg;
+	struct sm_state *sm;
+	int found = 0;
+
+	check_arg = get_argument_from_call_expr(expr->args, 0);
+	if (check_arg->type != EXPR_STRING) {
+		sm_error("the check_name argument to %s is supposed to be a string literal", fn);
+		return;
+	}
+	state_arg = get_argument_from_call_expr(expr->args, 1);
+	if (!state_arg || state_arg->type != EXPR_STRING) {
+		sm_error("the state_name argument to %s is supposed to be a string literal", fn);
+		return;
+	}
+
+	FOR_EACH_SM(__get_cur_stree(), sm) {
+		if (strcmp(check_name(sm->owner), check_arg->string->data) != 0)
+			continue;
+		if (strcmp(sm->name, state_arg->string->data) != 0)
+			continue;
+		sm_msg("'%s' = '%s'", sm->name, sm->state->name);
+		found = 1;
+	} END_FOR_EACH_SM(sm);
+
+	if (!found)
+		sm_msg("%s '%s' not found", check_arg->string->data, state_arg->string->data);
+}
+
+static void match_states(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *check_arg;
+	struct sm_state *sm;
+	int found = 0;
+
+	check_arg = get_argument_from_call_expr(expr->args, 0);
+	if (check_arg->type != EXPR_STRING) {
+		sm_error("the check_name argument to %s is supposed to be a string literal", fn);
+		return;
+	}
+
+	FOR_EACH_SM(__get_cur_stree(), sm) {
+		if (strcmp(check_name(sm->owner), check_arg->string->data) != 0)
+			continue;
+		sm_msg("%s", show_sm(sm));
+		found = 1;
+	} END_FOR_EACH_SM(sm);
+
+	if (found)
+		return;
+
+	if (!id_from_name(check_arg->string->data))
+		sm_msg("invalid check name '%s'", check_arg->string->data);
+	else
+		sm_msg("%s: no states", check_arg->string->data);
+}
+
+static void match_print_value(const char *fn, struct expression *expr, void *info)
+{
+	struct stree *stree;
+	struct sm_state *tmp;
+	struct expression *arg_expr;
+
+	arg_expr = get_argument_from_call_expr(expr->args, 0);
+	if (arg_expr->type != EXPR_STRING) {
+		sm_error("the argument to %s is supposed to be a string literal", fn);
+		return;
+	}
+
+	stree = __get_cur_stree();
+	FOR_EACH_MY_SM(SMATCH_EXTRA, stree, tmp) {
+		if (!strcmp(tmp->name, arg_expr->string->data))
+			sm_msg("%s = %s", tmp->name, tmp->state->name);
+	} END_FOR_EACH_SM(tmp);
+}
+
+static void match_print_known(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg;
+	struct range_list *rl = NULL;
+	char *name;
+	int known = 0;
+	sval_t sval;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	if (get_value(arg, &sval))
+		known = 1;
+
+	get_implied_rl(arg, &rl);
+
+	name = expr_to_str(arg);
+	sm_msg("known: '%s' = '%s'.  implied = '%s'", name, known ? sval_to_str(sval) : "<unknown>", show_rl(rl));
+	free_string(name);
+}
+
+static void match_print_implied(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg;
+	struct range_list *rl = NULL;
+	char *name;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	get_implied_rl(arg, &rl);
+
+	name = expr_to_str(arg);
+	sm_msg("implied: %s = '%s'", name, show_rl(rl));
+	free_string(name);
+}
+
+static void match_real_absolute(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg;
+	struct range_list *rl = NULL;
+	char *name;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	get_real_absolute_rl(arg, &rl);
+
+	name = expr_to_str(arg);
+	sm_msg("real absolute: %s = '%s'", name, show_rl(rl));
+	free_string(name);
+}
+
+static void match_print_implied_min(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg;
+	sval_t sval;
+	char *name;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	name = expr_to_str(arg);
+
+	if (get_implied_min(arg, &sval))
+		sm_msg("implied min: %s = %s", name, sval_to_str(sval));
+	else
+		sm_msg("implied min: %s = <unknown>", name);
+
+	free_string(name);
+}
+
+static void match_print_implied_max(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg;
+	sval_t sval;
+	char *name;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	name = expr_to_str(arg);
+
+	if (get_implied_max(arg, &sval))
+		sm_msg("implied max: %s = %s", name, sval_to_str(sval));
+	else
+		sm_msg("implied max: %s = <unknown>", name);
+
+	free_string(name);
+}
+
+static void match_user_rl(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg;
+	struct range_list *rl;
+	char *name;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	name = expr_to_str(arg);
+
+	get_user_rl(arg, &rl);
+	sm_msg("user rl: '%s' = '%s'", name, show_rl(rl));
+
+	free_string(name);
+}
+
+static void match_capped(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg;
+	char *name;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	name = expr_to_str(arg);
+	sm_msg("'%s' = '%s'", name, is_capped(arg) ? "capped" : "not capped");
+	free_string(name);
+}
+
+static void match_print_hard_max(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg;
+	sval_t sval;
+	char *name;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	name = expr_to_str(arg);
+
+	if (get_hard_max(arg, &sval))
+		sm_msg("hard max: %s = %s", name, sval_to_str(sval));
+	else
+		sm_msg("hard max: %s = <unknown>", name);
+
+	free_string(name);
+}
+
+static void match_print_fuzzy_max(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg;
+	sval_t sval;
+	char *name;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	name = expr_to_str(arg);
+
+	if (get_fuzzy_max(arg, &sval))
+		sm_msg("fuzzy max: %s = %s", name, sval_to_str(sval));
+	else
+		sm_msg("fuzzy max: %s = <unknown>", name);
+
+	free_string(name);
+}
+
+static void match_print_absolute(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg;
+	struct range_list *rl;
+	char *name;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	name = expr_to_str(arg);
+
+	get_absolute_rl(arg, &rl);
+	sm_msg("absolute: %s = %s", name, show_rl(rl));
+
+	free_string(name);
+}
+
+static void match_print_absolute_min(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg;
+	sval_t sval;
+	char *name;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	name = expr_to_str(arg);
+
+	if (get_absolute_min(arg, &sval))
+		sm_msg("absolute min: %s = %s", name, sval_to_str(sval));
+	else
+		sm_msg("absolute min: %s = <unknown>", name);
+
+	free_string(name);
+}
+
+static void match_print_absolute_max(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg;
+	sval_t sval;
+	char *name;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	get_absolute_max(arg, &sval);
+
+	name = expr_to_str(arg);
+	sm_msg("absolute max: %s = %s", name, sval_to_str(sval));
+	free_string(name);
+}
+
+static void match_sval_info(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg;
+	sval_t sval;
+	char *name;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	name = expr_to_str(arg);
+
+	if (!get_implied_value(arg, &sval)) {
+		sm_msg("no sval for '%s'", name);
+		goto free;
+	}
+
+	sm_msg("implied: %s %c%d ->value = %llx", name, sval_unsigned(sval) ? 'u' : 's', sval_bits(sval), sval.value);
+free:
+	free_string(name);
+}
+
+static void match_member_name(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg;
+	char *name, *member_name;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	name = expr_to_str(arg);
+	member_name = get_member_name(arg);
+	sm_msg("member name: '%s => %s'", name, member_name);
+	free_string(member_name);
+	free_string(name);
+}
+
+static void print_possible(struct sm_state *sm)
+{
+	struct sm_state *tmp;
+
+	sm_msg("Possible values for %s", sm->name);
+	FOR_EACH_PTR(sm->possible, tmp) {
+		printf("%s\n", tmp->state->name);
+	} END_FOR_EACH_PTR(tmp);
+	sm_msg("===");
+}
+
+static void match_possible(const char *fn, struct expression *expr, void *info)
+{
+	struct stree *stree;
+	struct sm_state *tmp;
+	struct expression *arg_expr;
+
+	arg_expr = get_argument_from_call_expr(expr->args, 0);
+	if (arg_expr->type != EXPR_STRING) {
+		sm_error("the argument to %s is supposed to be a string literal", fn);
+		return;
+	}
+
+	stree = __get_cur_stree();
+	FOR_EACH_MY_SM(SMATCH_EXTRA, stree, tmp) {
+		if (!strcmp(tmp->name, arg_expr->string->data))
+			print_possible(tmp);
+	} END_FOR_EACH_SM(tmp);
+}
+
+static void match_strlen(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg;
+	struct range_list *rl;
+	char *name;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	get_implied_strlen(arg, &rl);
+
+	name = expr_to_str(arg);
+	sm_msg("strlen: '%s' %s characters", name, show_rl(rl));
+	free_string(name);
+}
+
+static void match_buf_size(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg, *comp;
+	struct range_list *rl;
+	int elements, bytes;
+	char *name;
+	char buf[256] = "";
+	int n;
+	sval_t sval;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+
+	elements = get_array_size(arg);
+	bytes = get_array_size_bytes_max(arg);
+	rl = get_array_size_bytes_rl(arg);
+	comp = get_size_variable(arg);
+
+	name = expr_to_str(arg);
+	n = snprintf(buf, sizeof(buf), "buf size: '%s' %d elements, %d bytes", name, elements, bytes);
+	free_string(name);
+
+	if (!rl_to_sval(rl, &sval))
+		n += snprintf(buf + n, sizeof(buf) - n, " (rl = %s)", show_rl(rl));
+
+	if (comp) {
+		name = expr_to_str(comp);
+		snprintf(buf + n, sizeof(buf) - n, "[size_var=%s]", name);
+		free_string(name);
+	}
+	sm_msg("%s", buf);
+}
+
+static void match_note(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg_expr;
+
+	arg_expr = get_argument_from_call_expr(expr->args, 0);
+	if (arg_expr->type != EXPR_STRING) {
+		sm_error("the argument to %s is supposed to be a string literal", fn);
+		return;
+	}
+	sm_msg("%s", arg_expr->string->data);
+}
+
+static void print_related(struct sm_state *sm)
+{
+	struct relation *rel;
+
+	if (!estate_related(sm->state))
+		return;
+
+	sm_prefix();
+	sm_printf("%s: ", sm->name);
+	FOR_EACH_PTR(estate_related(sm->state), rel) {
+		sm_printf("%s ", rel->name);
+	} END_FOR_EACH_PTR(rel);
+	sm_printf("\n");
+}
+
+static void match_dump_related(const char *fn, struct expression *expr, void *info)
+{
+	struct stree *stree;
+	struct sm_state *tmp;
+
+	stree = __get_cur_stree();
+	FOR_EACH_MY_SM(SMATCH_EXTRA, stree, tmp) {
+		print_related(tmp);
+	} END_FOR_EACH_SM(tmp);
+}
+
+static void match_compare(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *one, *two;
+	char *one_name, *two_name;
+	int comparison;
+	char buf[16];
+
+	one = get_argument_from_call_expr(expr->args, 0);
+	two = get_argument_from_call_expr(expr->args, 1);
+
+	comparison = get_comparison(one, two);
+	if (!comparison)
+		snprintf(buf, sizeof(buf), "<none>");
+	else
+		snprintf(buf, sizeof(buf), "%s", show_special(comparison));
+
+	one_name = expr_to_str(one);
+	two_name = expr_to_str(two);
+
+	sm_msg("%s %s %s", one_name, buf, two_name);
+
+	free_string(one_name);
+	free_string(two_name);
+}
+
+static void match_debug_on(const char *fn, struct expression *expr, void *info)
+{
+	option_debug = 1;
+}
+
+static void match_debug_check(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	if (!arg || arg->type != EXPR_STRING)
+		return;
+	option_debug_check = arg->string->data;
+	sm_msg("arg = '%s'", option_debug_check);
+}
+
+static void match_debug_off(const char *fn, struct expression *expr, void *info)
+{
+	option_debug_check = (char *)"";
+	option_debug = 0;
+}
+
+static void match_local_debug_on(const char *fn, struct expression *expr, void *info)
+{
+	local_debug = 1;
+}
+
+static void match_local_debug_off(const char *fn, struct expression *expr, void *info)
+{
+	local_debug = 0;
+}
+
+static void match_debug_implied_on(const char *fn, struct expression *expr, void *info)
+{
+	option_debug_implied = 1;
+}
+
+static void match_debug_implied_off(const char *fn, struct expression *expr, void *info)
+{
+	option_debug_implied = 0;
+}
+
+static void match_about(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg;
+	struct sm_state *sm;
+	char *name;
+
+	sm_msg("---- about ----");
+	match_print_implied(fn, expr, NULL);
+	match_buf_size(fn, expr, NULL);
+	match_strlen(fn, expr, NULL);
+	match_real_absolute(fn, expr, NULL);
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	name = expr_to_str(arg);
+	if (!name) {
+		sm_msg("info: not a straight forward variable.");
+		return;
+	}
+
+	FOR_EACH_SM(__get_cur_stree(), sm) {
+		if (strcmp(sm->name, name) != 0)
+			continue;
+		sm_msg("%s", show_sm(sm));
+	} END_FOR_EACH_SM(sm);
+}
+
+static void match_intersection(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *one, *two;
+	struct range_list *one_rl, *two_rl;
+	struct range_list *res;
+
+	one = get_argument_from_call_expr(expr->args, 0);
+	two = get_argument_from_call_expr(expr->args, 1);
+
+	get_absolute_rl(one, &one_rl);
+	get_absolute_rl(two, &two_rl);
+
+	res = rl_intersection(one_rl, two_rl);
+	sm_msg("'%s' intersect '%s' is '%s'", show_rl(one_rl), show_rl(two_rl), show_rl(res));
+}
+
+static void match_type(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *one;
+	struct symbol *type;
+	char *name;
+
+	one = get_argument_from_call_expr(expr->args, 0);
+	type = get_type(one);
+	name = expr_to_str(one);
+	sm_msg("type of '%s' is: '%s'", name, type_to_str(type));
+	free_string(name);
+}
+
+static int match_type_rl_return(struct expression *call, void *unused, struct range_list **rl)
+{
+	struct expression *one, *two;
+	struct symbol *type;
+
+	one = get_argument_from_call_expr(call->args, 0);
+	type = get_type(one);
+
+	two = get_argument_from_call_expr(call->args, 1);
+	if (!two || two->type != EXPR_STRING) {
+		sm_msg("expected: __smatch_type_rl(type, \"string\")");
+		return 0;
+	}
+	call_results_to_rl(call, type, two->string->data, rl);
+	return 1;
+}
+
+static void print_left_right(struct sm_state *sm)
+{
+	if (!sm)
+		return;
+	if (!sm->left && !sm->right)
+		return;
+
+	sm_printf("[ ");
+	if (sm->left)
+		sm_printf("(%d: %s->'%s')", get_stree_id(sm->left->pool),  sm->left->name, sm->left->state->name);
+	else
+		sm_printf(" - ");
+
+
+	print_left_right(sm->left);
+
+	if (sm->right)
+		sm_printf("(%d: %s->'%s')", get_stree_id(sm->right->pool),  sm->right->name, sm->right->state->name);
+	else
+		sm_printf(" - ");
+
+	print_left_right(sm->right);
+}
+
+static void match_print_merge_tree(const char *fn, struct expression *expr, void *info)
+{
+	struct sm_state *sm;
+	struct expression *arg;
+	char *name;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	name = expr_to_str(arg);
+
+	sm = get_sm_state_expr(SMATCH_EXTRA, arg);
+	if (!sm) {
+		sm_msg("no sm state for '%s'", name);
+		goto free;
+	}
+
+	sm_prefix();
+	sm_printf("merge tree: %s -> %s", name, sm->state->name);
+	print_left_right(sm);
+	sm_printf("\n");
+
+free:
+	free_string(name);
+}
+
+static void match_print_stree_id(const char *fn, struct expression *expr, void *info)
+{
+	sm_msg("stree_id %d", __stree_id);
+}
+
+static void match_mtag(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg;
+	char *name;
+	mtag_t tag = 0;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	name = expr_to_str(arg);
+	get_mtag(arg, &tag);
+	sm_msg("mtag: '%s' => tag: %lld", name, tag);
+	free_string(name);
+}
+
+static void match_mtag_data_offset(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *arg;
+	char *name;
+	mtag_t tag = 0;
+	int offset = -1;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	name = expr_to_str(arg);
+	expr_to_mtag_offset(arg, &tag, &offset);
+	sm_msg("mtag: '%s' => tag: %lld, offset: %d", name, tag, offset);
+	free_string(name);
+}
+
+static void match_state_count(const char *fn, struct expression *expr, void *info)
+{
+	sm_msg("state_count = %d\n", sm_state_counter);
+}
+
+static void match_mem(const char *fn, struct expression *expr, void *info)
+{
+	show_sname_alloc();
+	show_ptrlist_alloc();
+	sm_msg("%lu pools", get_pool_count());
+	sm_msg("%d strees", unfree_stree);
+	show_smatch_state_alloc();
+	show_sm_state_alloc();
+}
+
+static void match_exit(const char *fn, struct expression *expr, void *info)
+{
+	exit(0);
+}
+
+static struct stree *old_stree;
+static void trace_var(struct statement *stmt)
+{
+	struct sm_state *sm, *old;
+	int printed = 0;
+
+	if (!trace_variable)
+		return;
+	if (__inline_fn)
+		return;
+
+	FOR_EACH_SM(__get_cur_stree(), sm) {
+		if (strcmp(sm->name, trace_variable) != 0)
+			continue;
+		old = get_sm_state_stree(old_stree, sm->owner, sm->name, sm->sym);
+		if (old && old->state == sm->state)
+			continue;
+		sm_msg("[%d] %s '%s': '%s' => '%s'", stmt->type,
+		       check_name(sm->owner),
+		       sm->name, old ? old->state->name : "<none>", sm->state->name);
+		printed = 1;
+	} END_FOR_EACH_SM(sm);
+
+	if (printed) {
+		free_stree(&old_stree);
+		old_stree = clone_stree(__get_cur_stree());
+	}
+}
+
+static void free_old_stree(struct symbol *sym)
+{
+	free_stree(&old_stree);
+}
+
+void check_debug(int id)
+{
+	my_id = id;
+	add_function_hook("__smatch_about", &match_about, NULL);
+	add_function_hook("__smatch_all_values", &match_all_values, NULL);
+	add_function_hook("__smatch_state", &match_state, NULL);
+	add_function_hook("__smatch_states", &match_states, NULL);
+	add_function_hook("__smatch_value", &match_print_value, NULL);
+	add_function_hook("__smatch_known", &match_print_known, NULL);
+	add_function_hook("__smatch_implied", &match_print_implied, NULL);
+	add_function_hook("__smatch_implied_min", &match_print_implied_min, NULL);
+	add_function_hook("__smatch_implied_max", &match_print_implied_max, NULL);
+	add_function_hook("__smatch_user_rl", &match_user_rl, NULL);
+	add_function_hook("__smatch_capped", &match_capped, NULL);
+	add_function_hook("__smatch_hard_max", &match_print_hard_max, NULL);
+	add_function_hook("__smatch_fuzzy_max", &match_print_fuzzy_max, NULL);
+	add_function_hook("__smatch_absolute", &match_print_absolute, NULL);
+	add_function_hook("__smatch_absolute_min", &match_print_absolute_min, NULL);
+	add_function_hook("__smatch_absolute_max", &match_print_absolute_max, NULL);
+	add_function_hook("__smatch_real_absolute", &match_real_absolute, NULL);
+	add_function_hook("__smatch_sval_info", &match_sval_info, NULL);
+	add_function_hook("__smatch_member_name", &match_member_name, NULL);
+	add_function_hook("__smatch_possible", &match_possible, NULL);
+	add_function_hook("__smatch_cur_stree", &match_cur_stree, NULL);
+	add_function_hook("__smatch_strlen", &match_strlen, NULL);
+	add_function_hook("__smatch_buf_size", &match_buf_size, NULL);
+	add_function_hook("__smatch_note", &match_note, NULL);
+	add_function_hook("__smatch_dump_related", &match_dump_related, NULL);
+	add_function_hook("__smatch_compare", &match_compare, NULL);
+	add_function_hook("__smatch_debug_on", &match_debug_on, NULL);
+	add_function_hook("__smatch_debug_check", &match_debug_check, NULL);
+	add_function_hook("__smatch_debug_off", &match_debug_off, NULL);
+	add_function_hook("__smatch_local_debug_on", &match_local_debug_on, NULL);
+	add_function_hook("__smatch_local_debug_off", &match_local_debug_off, NULL);
+	add_function_hook("__smatch_debug_implied_on", &match_debug_implied_on, NULL);
+	add_function_hook("__smatch_debug_implied_off", &match_debug_implied_off, NULL);
+	add_function_hook("__smatch_intersection", &match_intersection, NULL);
+	add_function_hook("__smatch_type", &match_type, NULL);
+	add_implied_return_hook("__smatch_type_rl_helper", &match_type_rl_return, NULL);
+	add_function_hook("__smatch_merge_tree", &match_print_merge_tree, NULL);
+	add_function_hook("__smatch_stree_id", &match_print_stree_id, NULL);
+	add_function_hook("__smatch_mtag", &match_mtag, NULL);
+	add_function_hook("__smatch_mtag_data", &match_mtag_data_offset, NULL);
+	add_function_hook("__smatch_state_count", &match_state_count, NULL);
+	add_function_hook("__smatch_mem", &match_mem, NULL);
+	add_function_hook("__smatch_exit", &match_exit, NULL);
+
+	add_hook(free_old_stree, AFTER_FUNC_HOOK);
+	add_hook(trace_var, STMT_HOOK_AFTER);
+}
--- /dev/null	Fri Dec 21 15:00:02 2018
+++ new/usr/src/tools/smatch/src/check_debug.h	Fri Dec 21 15:00:02 2018
@@ -0,0 +1,77 @@
+#ifndef __SMATCH_CHECK_DEBUG
+#define __SMATCH_CHECK_DEBUG
+
+static inline void __smatch_about(long var){}
+
+static inline void __smatch_cur_stree(void){}
+static inline void __smatch_all_values(void){}
+static inline void __smatch_state(const char *check_name, const char *state_name){}
+static inline void __smatch_states(const char *check_name){}
+static inline void __smatch_value(const char *unused){}
+static inline void __smatch_known(long long val){}
+static inline void __smatch_implied(long long val){}
+static inline void __smatch_implied_min(long long val){}
+static inline void __smatch_implied_max(long long val){}
+static inline void __smatch_user_rl(long long val){}
+static inline void __smatch_capped(long long val){}
+
+static inline void __smatch_hard_max(long long val){}
+static inline void __smatch_fuzzy_max(long long val){}
+
+static inline void __smatch_absolute(long long val){}
+static inline void __smatch_absolute_min(long long val){}
+static inline void __smatch_absolute_max(long long val){}
+static inline void __smatch_real_absolute(long long val){}
+
+static inline void __smatch_sval_info(long long val){}
+
+static inline void __smatch_member_name(long long val){}
+
+static inline void __smatch_possible(const char *unused){}
+static inline void __smatch_print_value(const char *unused){}
+
+static inline void __smatch_strlen(const void *buf){}
+static inline void __smatch_buf_size(const void *buf){}
+
+static inline void __smatch_note(const char *note){}
+
+static inline void __smatch_dump_related(void){}
+
+static inline void __smatch_compare(long long one, long long two){}
+
+static inline void __smatch_debug_on(void){}
+static inline void __smatch_debug_check(const char *check_name){}
+static inline void __smatch_debug_off(void){}
+
+static inline void __smatch_local_debug_on(void){}
+static inline void __smatch_local_debug_off(void){}
+
+static inline void __smatch_debug_implied_on(void){}
+static inline void __smatch_debug_implied_off(void){}
+
+static inline void __smatch_intersection(long long one, long long two){}
+static inline void __smatch_type(long long one){}
+
+static long long __smatch_val;
+static inline long long __smatch_type_rl_helper(long long type, const char *str, ...)
+{
+	return __smatch_val;
+}
+#define __smatch_type_rl(type, fmt...) __smatch_type_rl_helper((type)0, fmt)
+#define __smatch_rl(fmt...) __smatch_type_rl(long long, fmt)
+
+static inline void __smatch_bit_info(long long expr){}
+
+static inline void __smatch_oops(unsigned long null_val){}
+
+static inline void __smatch_merge_tree(long long var){}
+
+static inline void __smatch_stree_id(void){}
+
+static inline void __smatch_mtag(void *p){}
+static inline void __smatch_mtag_data(long long arg){}
+static inline void __smatch_exit(void){}
+
+static inline void __smatch_state_count(void){}
+static inline void __smatch_mem(void){}
+#endif
--- /dev/null	Fri Dec 21 15:00:02 2018
+++ new/usr/src/tools/smatch/src/check_deref.c	Fri Dec 21 15:00:02 2018
@@ -0,0 +1,296 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * There was a previous null dereference test but it was too confusing and
+ * difficult to debug.  This test is much simpler in its goals and scope.
+ *
+ * This test only complains about:
+ * 1) dereferencing uninitialized variables
+ * 2) dereferencing variables which were assigned as null.
+ * 3) dereferencing variables which were assigned a function the returns 
+ *    null.
+ *
+ * If we dereference something then we complain if any of those three
+ * are possible.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+#define __GFP_NOFAIL 0x800
+
+STATE(null);
+STATE(ok);
+STATE(uninitialized);
+
+static struct smatch_state *alloc_my_state(const char *name)
+{
+	struct smatch_state *state;
+
+	state = __alloc_smatch_state(0);
+	state->name = name;
+	return state;
+}
+
+static struct smatch_state *unmatched_state(struct sm_state *sm)
+{
+	return &ok;
+}
+
+static void is_ok(struct sm_state *sm, struct expression *mod_expr)
+{
+	set_state(my_id, sm->name, sm->sym, &ok);
+}
+
+static void check_dereference(struct expression *expr)
+{
+	struct sm_state *sm;
+	struct sm_state *tmp;
+
+	expr = strip_expr(expr);
+	if (is_static(expr))
+		return;
+	sm = get_sm_state_expr(my_id, expr);
+	if (!sm)
+		return;
+	if (is_ignored(my_id, sm->name, sm->sym))
+		return;
+	if (implied_not_equal(expr, 0))
+		return;
+	if (is_impossible_path())
+		return;
+
+	FOR_EACH_PTR(sm->possible, tmp) {
+		if (tmp->state == &merged)
+			continue;
+		if (tmp->state == &ok)
+			continue;
+		add_ignore(my_id, sm->name, sm->sym);
+		if (tmp->state == &null) {
+			if (option_spammy)
+				sm_error("potential NULL dereference '%s'.", tmp->name);
+			return;
+		}
+		if (tmp->state == &uninitialized) {
+			if (option_spammy)
+				sm_error("potentially dereferencing uninitialized '%s'.", tmp->name);
+			return;
+		}
+		sm_error("potential null dereference '%s'.  (%s returns null)",
+			tmp->name, tmp->state->name);
+		return;
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void check_dereference_name_sym(char *name, struct symbol *sym)
+{
+	struct sm_state *sm;
+	struct sm_state *tmp;
+
+	sm = get_sm_state(my_id, name, sym);
+	if (!sm)
+		return;
+	if (is_ignored(my_id, sm->name, sm->sym))
+		return;
+	if (implied_not_equal_name_sym(name, sym, 0))
+		return;
+	if (is_impossible_path())
+		return;
+
+	FOR_EACH_PTR(sm->possible, tmp) {
+		if (tmp->state == &merged)
+			continue;
+		if (tmp->state == &ok)
+			continue;
+		add_ignore(my_id, sm->name, sm->sym);
+		if (tmp->state == &null) {
+			if (option_spammy)
+				sm_error("potential NULL dereference '%s'.", tmp->name);
+			return;
+		}
+		if (tmp->state == &uninitialized) {
+			if (option_spammy)
+				sm_error("potentially dereferencing uninitialized '%s'.", tmp->name);
+			return;
+		}
+		sm_error("potential null dereference '%s'.  (%s returns null)",
+			tmp->name, tmp->state->name);
+		return;
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void match_dereferences(struct expression *expr)
+{
+	if (expr->type != EXPR_PREOP)
+		return;
+	check_dereference(expr->unop);
+}
+
+static void match_pointer_as_array(struct expression *expr)
+{
+	if (!is_array(expr))
+		return;
+	check_dereference(get_array_base(expr));
+}
+
+static void set_param_dereferenced(struct expression *call, struct expression *arg, char *key, char *unused)
+{
+	struct symbol *sym;
+	char *name;
+
+	name = get_variable_from_key(arg, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	check_dereference_name_sym(name, sym);
+free:
+	free_string(name);
+}
+
+static void match_declarations(struct symbol *sym)
+{
+	const char *name;
+
+	if ((get_base_type(sym))->type == SYM_ARRAY)
+		return;
+
+	if (!sym->ident)
+		return;
+	name = sym->ident->name;
+	if (!sym->initializer) {
+		set_state(my_id, name, sym, &uninitialized);
+		scoped_state(my_id, name, sym);
+	}
+}
+
+static void match_assign(struct expression *expr)
+{
+	struct statement *stmt;
+
+	if (!is_zero(expr->right))
+		return;
+
+	if (__in_fake_assign)
+		return;
+
+	FOR_EACH_PTR_REVERSE(big_statement_stack, stmt) {
+		if (stmt->type == STMT_DECLARATION)
+			return;
+		break;
+	} END_FOR_EACH_PTR_REVERSE(stmt);
+
+	set_state_expr(my_id, expr->left, &null);
+}
+
+static void match_assigns_address(struct expression *expr)
+{
+	struct expression *right;
+
+	right = strip_expr(expr->right);
+	if (right->type != EXPR_PREOP || right->op != '&')
+		return;
+	set_state_expr(my_id, right, &ok);
+}
+
+static void match_condition(struct expression *expr)
+{
+	if (expr->type == EXPR_ASSIGNMENT) {
+		match_condition(expr->right);
+		match_condition(expr->left);
+	}
+	if (!get_state_expr(my_id, expr))
+		return;
+	set_true_false_states_expr(my_id, expr, &ok, NULL);
+}
+
+static int called_with_no_fail(struct expression *call, int param)
+{
+	struct expression *arg;
+	sval_t sval;
+
+	if (param == -1)
+		return 0;
+	call = strip_expr(call);
+	if (call->type != EXPR_CALL)
+		return 0;
+	arg = get_argument_from_call_expr(call->args, param);
+	if (get_value(arg, &sval) && (sval.uvalue & __GFP_NOFAIL))
+		return 1;
+	return 0;
+}
+
+static void match_assign_returns_null(const char *fn, struct expression *expr, void *_gfp)
+{
+	struct smatch_state *state;
+	int gfp_param = PTR_INT(_gfp);
+
+	if (called_with_no_fail(expr->right, gfp_param))
+		return;
+	state = alloc_my_state(fn);
+	set_state_expr(my_id, expr->left, state);
+}
+
+static void register_allocation_funcs(void)
+{
+	struct token *token;
+	const char *func;
+	int arg;
+
+	token = get_tokens_file("kernel.allocation_funcs_gfp");
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		func = show_ident(token->ident);
+		token = token->next;
+		if (token_type(token) == TOKEN_IDENT)
+			arg = -1;
+		else if (token_type(token) == TOKEN_NUMBER)
+			arg = atoi(token->number);
+		else
+			return;
+		add_function_assign_hook(func, &match_assign_returns_null, INT_PTR(arg));
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+void check_deref(int id)
+{
+	my_id = id;
+
+	add_unmatched_state_hook(my_id, &unmatched_state);
+	add_modification_hook(my_id, &is_ok);
+	add_hook(&match_dereferences, DEREF_HOOK);
+	add_hook(&match_pointer_as_array, OP_HOOK);
+	select_return_implies_hook(DEREFERENCE, &set_param_dereferenced);
+	add_hook(&match_condition, CONDITION_HOOK);
+	add_hook(&match_declarations, DECLARATION_HOOK);
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+	add_hook(&match_assigns_address, ASSIGNMENT_HOOK);
+	if (option_project == PROJ_KERNEL)
+		register_allocation_funcs();
+}
--- /dev/null	Fri Dec 21 15:00:02 2018
+++ new/usr/src/tools/smatch/src/check_deref_check.c	Fri Dec 21 15:00:02 2018
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+STATE(derefed);
+
+static void underef(struct sm_state *sm, struct expression *mod_expr)
+{
+	set_state(my_id, sm->name, sm->sym, &undefined);
+}
+
+static void match_dereference(struct expression *expr)
+{
+	if (__in_fake_assign)
+		return;
+
+	if (expr->type != EXPR_PREOP)
+		return;
+	expr = strip_expr(expr->unop);
+	if (!is_pointer(expr))
+		return;
+	if (implied_not_equal(expr, 0))
+		return;
+
+	if (is_impossible_path())
+		return;
+
+	set_state_expr(my_id, expr, &derefed);
+}
+
+static void set_param_dereferenced(struct expression *call, struct expression *arg, char *key, char *unused)
+{
+	struct symbol *sym;
+	char *name;
+
+	name = get_variable_from_key(arg, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	if (implied_not_equal_name_sym(name, sym, 0))
+		goto free;
+	set_state(my_id, name, sym, &derefed);
+
+free:
+	free_string(name);
+}
+
+static void match_condition(struct expression *expr)
+{
+	struct sm_state *sm;
+
+	if (__in_pre_condition)
+		return;
+
+	if (get_macro_name(expr->pos))
+		return;
+
+	if (!is_pointer(expr))
+		return;
+
+	sm = get_sm_state_expr(my_id, expr);
+	if (!sm || sm->state != &derefed)
+		return;
+
+	sm_warning("variable dereferenced before check '%s' (see line %d)", sm->name, sm->line);
+	set_state_expr(my_id, expr, &undefined);
+}
+
+void check_deref_check(int id)
+{
+	my_id = id;
+	add_hook(&match_dereference, DEREF_HOOK);
+	add_hook(&match_condition, CONDITION_HOOK);
+	select_return_implies_hook(DEREFERENCE, &set_param_dereferenced);
+	add_modification_hook(my_id, &underef);
+}
--- /dev/null	Fri Dec 21 15:00:02 2018
+++ new/usr/src/tools/smatch/src/check_dereferences_param.c	Fri Dec 21 15:00:02 2018
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This is an --info recipe.  The goal is to print a message for every parameter
+ * which we can not avoid dereferencing.  This is maybe a bit restrictive but it
+ * avoids some false positives.
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+STATE(derefed);
+STATE(ignore);
+STATE(param);
+
+static void set_ignore(struct sm_state *sm, struct expression *mod_expr)
+{
+	if (sm->state == &derefed)
+		return;
+	set_state(my_id, sm->name, sm->sym, &ignore);
+}
+
+static void match_function_def(struct symbol *sym)
+{
+	struct symbol *arg;
+	int i;
+
+	i = -1;
+	FOR_EACH_PTR(sym->ctype.base_type->arguments, arg) {
+		i++;
+		if (!arg->ident)
+			continue;
+		set_state(my_id, arg->ident->name, arg, &param);
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void check_deref(struct expression *expr)
+{
+	struct expression *tmp;
+	struct sm_state *sm;
+
+	tmp = get_assigned_expr(expr);
+	if (tmp)
+		expr = tmp;
+	expr = strip_expr(expr);
+
+	if (get_param_num(expr) < 0)
+		return;
+
+	if (param_was_set(expr))
+		return;
+
+	sm = get_sm_state_expr(my_id, expr);
+	if (sm && slist_has_state(sm->possible, &ignore))
+		return;
+	set_state_expr(my_id, expr, &derefed);
+}
+
+static void match_dereference(struct expression *expr)
+{
+	if (expr->type != EXPR_PREOP)
+		return;
+	if (getting_address())
+		return;
+	check_deref(expr->unop);
+}
+
+static void set_param_dereferenced(struct expression *call, struct expression *arg, char *key, char *unused)
+{
+	/* XXX FIXME: param_implies has more information now */
+	if (strcmp(key, "$") != 0)
+		return;
+	check_deref(arg);
+}
+
+static void process_states(void)
+{
+	struct sm_state *tmp;
+	int arg;
+	const char *name;
+
+	FOR_EACH_MY_SM(my_id, __get_cur_stree(), tmp) {
+		if (tmp->state != &derefed)
+			continue;
+		arg = get_param_num_from_sym(tmp->sym);
+		if (arg < 0)
+			continue;
+		name = get_param_name(tmp);
+		if (!name)
+			continue;
+		sql_insert_return_implies(DEREFERENCE, arg, name, "1");
+	} END_FOR_EACH_SM(tmp);
+}
+
+static void match_pointer_as_array(struct expression *expr)
+{
+	if (!is_array(expr))
+		return;
+	check_deref(get_array_base(expr));
+}
+
+void check_dereferences_param(int id)
+{
+	my_id = id;
+
+	add_hook(&match_function_def, FUNC_DEF_HOOK);
+
+	add_hook(&match_dereference, DEREF_HOOK);
+	add_hook(&match_pointer_as_array, OP_HOOK);
+	select_return_implies_hook(DEREFERENCE, &set_param_dereferenced);
+	add_modification_hook(my_id, &set_ignore);
+
+	all_return_states_hook(&process_states);
+}
--- /dev/null	Fri Dec 21 15:00:03 2018
+++ new/usr/src/tools/smatch/src/check_dev_queue_xmit.c	Fri Dec 21 15:00:03 2018
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * According to an email on lkml you are not allowed to reuse the skb
+ * passed to dev_queue_xmit()
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+STATE(do_not_use);
+
+static void ok_to_use(struct sm_state *sm, struct expression *mod_expr)
+{
+	set_state(my_id, sm->name, sm->sym, &undefined);
+}
+
+static int valid_use(void)
+{
+	struct expression *tmp;
+	int i = 0;
+	int dot_ops = 0;
+
+	FOR_EACH_PTR_REVERSE(big_expression_stack, tmp) {
+		if (!i++)
+			continue;
+		if (tmp->type == EXPR_PREOP && tmp->op == '(')
+			continue;
+		if (tmp->op == '.' && !dot_ops++)
+			continue;
+//		if (tmp->type == EXPR_POSTOP)
+//			return 1;
+		if (tmp->type == EXPR_CALL && sym_name_is("kfree_skb", tmp->fn))
+			return 1;
+		return 0;
+	} END_FOR_EACH_PTR_REVERSE(tmp);
+	return 0;
+}
+
+/* match symbol is expensive.  only turn it on after we match the xmit function */
+static int match_symbol_active;
+static void match_symbol(struct expression *expr)
+{
+	struct sm_state *sm;
+	char *name;
+
+	sm = get_sm_state_expr(my_id, expr);
+	if (!sm || !slist_has_state(sm->possible, &do_not_use))
+		return;
+	if (valid_use())
+		return;
+	name = expr_to_var(expr);
+	sm_error("'%s' was already used up by dev_queue_xmit()", name);
+	free_string(name);
+}
+
+static void match_kfree_skb(const char *fn, struct expression *expr, void *param)
+{
+	struct expression *arg;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	if (!arg)
+		return;
+	set_state_expr(my_id, arg, &undefined);
+}
+
+static void match_xmit(const char *fn, struct expression *expr, void *param)
+{
+	struct expression *arg;
+
+	arg = get_argument_from_call_expr(expr->args, PTR_INT(param));
+	if (!arg)
+		return;
+	set_state_expr(my_id, arg, &do_not_use);
+	if (!match_symbol_active++) {
+		add_hook(&match_symbol, SYM_HOOK);
+		add_function_hook("kfree_skb", &match_kfree_skb, NULL);
+	}
+}
+
+static void register_funcs_from_file(void)
+{
+	struct token *token;
+	const char *func;
+	int arg;
+
+	token = get_tokens_file("kernel.dev_queue_xmit");
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		func = show_ident(token->ident);
+		token = token->next;
+		if (token_type(token) != TOKEN_NUMBER)
+			return;
+		arg = atoi(token->number);
+		add_function_hook(func, &match_xmit, INT_PTR(arg));
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+void check_dev_queue_xmit(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+	my_id = id;
+	add_modification_hook(my_id, ok_to_use);
+	register_funcs_from_file();
+}
--- /dev/null	Fri Dec 21 15:00:03 2018
+++ new/usr/src/tools/smatch/src/check_dma_mapping_error.c	Fri Dec 21 15:00:03 2018
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2015 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+STATE(positive);
+STATE(ok);
+
+static void ok_to_use(struct sm_state *sm, struct expression *mod_expr)
+{
+	if (sm->state != &ok)
+		set_state(my_id, sm->name, sm->sym, &ok);
+}
+
+static void match_assign(const char *fn, struct expression *expr, void *unused)
+{
+	set_state_expr(my_id, expr->left, &positive);
+}
+
+static void match_condition(struct expression *expr)
+{
+	if (!get_state_expr(my_id, expr))
+		return;
+	/* If the variable is zero that's ok */
+	set_true_false_states_expr(my_id, expr, NULL, &ok);
+}
+
+static void match_return(struct expression *ret_value)
+{
+	struct smatch_state *state;
+	struct sm_state *sm;
+	sval_t min;
+
+	sm = get_sm_state_expr(my_id, ret_value);
+	if (!sm)
+		return;
+	if (!slist_has_state(sm->possible, &positive))
+		return;
+	state = get_state_expr(SMATCH_EXTRA, ret_value);
+	if (!state)
+		return;
+	if (!get_absolute_min(ret_value, &min))
+		return;
+	if (min.value == 0)
+		return;
+	sm_warning("dma_mapping_error() doesn't return an error code");
+}
+
+void check_dma_mapping_error(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	my_id = id;
+	add_function_assign_hook("dma_mapping_error", &match_assign, NULL);
+	add_function_assign_hook("pci_dma_mapping_error", &match_assign, NULL);
+	add_hook(&match_condition, CONDITION_HOOK);
+	add_hook(&match_return, RETURN_HOOK);
+	add_modification_hook(my_id, &ok_to_use);
+}
--- /dev/null	Fri Dec 21 15:00:03 2018
+++ new/usr/src/tools/smatch/src/check_dma_on_stack.c	Fri Dec 21 15:00:03 2018
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static void match_dma_func(const char *fn, struct expression *expr, void *param)
+{
+	struct expression *arg;
+	struct symbol *sym;
+	char *name;
+
+	arg = get_argument_from_call_expr(expr->args, PTR_INT(param));
+	arg = strip_expr(arg);
+	if (!arg)
+		return;
+	if (arg->type == EXPR_PREOP && arg->op == '&') {
+		if (arg->unop->type != EXPR_SYMBOL)
+			return;
+		name = expr_to_str(arg);
+		sm_error("doing dma on the stack (%s)", name);
+		free_string(name);
+		return;
+	}
+	if (arg->type != EXPR_SYMBOL)
+		return;
+	sym = get_type(arg);
+	if (!sym || sym->type != SYM_ARRAY)
+		return;
+	if (get_param_num(arg) >= 0)
+		return;
+	name = expr_to_var(arg);
+	sm_error("doing dma on the stack (%s)", name);
+	free_string(name);
+}
+
+static void register_funcs_from_file(void)
+{
+	struct token *token;
+	const char *func;
+	int arg;
+
+	token = get_tokens_file("kernel.dma_funcs");
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		func = show_ident(token->ident);
+		token = token->next;
+		if (token_type(token) != TOKEN_NUMBER)
+			return;
+		arg = atoi(token->number);
+		add_function_hook(func, &match_dma_func, INT_PTR(arg));
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+void check_dma_on_stack(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+	my_id = id;
+	register_funcs_from_file();
+}
--- /dev/null	Fri Dec 21 15:00:03 2018
+++ new/usr/src/tools/smatch/src/check_double_checking.c	Fri Dec 21 15:00:03 2018
@@ -0,0 +1,281 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#define _GNU_SOURCE
+#include <string.h>
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+STATE(checked);
+STATE(modified);
+
+struct stree *to_check;
+
+static struct statement *get_cur_stmt(void)
+{
+	return last_ptr_list((struct ptr_list *)big_statement_stack);
+}
+
+static void set_modified(struct sm_state *sm, struct expression *mod_expr)
+{
+	set_state(my_id, sm->name, sm->sym, &modified);
+}
+
+static struct expression *strip_condition(struct expression *expr)
+{
+	expr = strip_expr(expr);
+
+	if (expr->type == EXPR_PREOP && expr->op == '!')
+		return strip_condition(expr->unop);
+
+	if (expr->type == EXPR_COMPARE &&
+	    (expr->op == SPECIAL_EQUAL ||
+	     expr->op == SPECIAL_NOTEQUAL)) {
+		if (is_zero(expr->left))
+			return strip_condition(expr->right);
+		if (is_zero(expr->right))
+			return strip_condition(expr->left);
+	}
+
+	return expr;
+}
+
+static int conditions_match(struct expression *cond, struct expression *prev)
+{
+	prev = strip_condition(prev);
+
+	if (prev == cond)
+		return 1;
+
+	if (prev->type == EXPR_LOGICAL) {
+		if (conditions_match(cond, prev->left) ||
+		    conditions_match(cond, prev->right))
+			return 1;
+	}
+
+	return 0;
+}
+
+/*
+ * People like to do "if (foo) { ... } else if (!foo) { ... }".  Don't
+ * complain when they do that even though it is nonsense.
+ */
+static int is_obvious_else(struct expression *cond)
+{
+	struct statement *parent;
+	struct expression *prev;
+
+	if (!get_cur_stmt())
+		return 0;
+	parent = get_cur_stmt()->parent;
+	if (!parent)
+		return 0;
+
+	if (parent->type != STMT_IF)
+		return 0;
+
+	if (!parent->if_false)
+		return 0;
+	if (parent->if_false != get_cur_stmt())
+		return 0;
+
+	prev = strip_condition(parent->if_conditional);
+
+	return conditions_match(cond, prev);
+}
+
+static int name_means_synchronize(const char *name)
+{
+	if (!name)
+		return 0;
+
+	if (strcasestr(name, "wait"))
+		return 1;
+	if (strcasestr(name, "down"))
+		return 1;
+	if (strcasestr(name, "lock") && !strcasestr(name, "unlock"))
+		return 1;
+	if (strcasestr(name, "delay"))
+		return 1;
+	if (strcasestr(name, "schedule"))
+		return 1;
+	if (strcmp(name, "smp_rmb") == 0)
+		return 1;
+	if (strcmp(name, "mb") == 0)
+		return 1;
+	if (strcmp(name, "barrier") == 0)
+		return 1;
+	return 0;
+}
+
+static int previous_statement_was_synchronize(void)
+{
+	struct statement *stmt;
+	struct position pos;
+	struct position prev_pos;
+	char *ident;
+
+	if (__prev_stmt) {
+		prev_pos = __prev_stmt->pos;
+		prev_pos.line -= 3;
+	} else {
+		prev_pos = __cur_stmt->pos;
+		prev_pos.line -= 5;
+	}
+
+	FOR_EACH_PTR_REVERSE(big_statement_stack, stmt) {
+		if (stmt->pos.line < prev_pos.line)
+			return 0;
+		pos = stmt->pos;
+		ident = get_macro_name(pos);
+		if (name_means_synchronize(ident))
+			return 1;
+		ident = pos_ident(pos);
+		if (!ident)
+			continue;
+		if (strcmp(ident, "if") == 0) {
+			pos.pos += 4;
+			ident = pos_ident(pos);
+			if (!ident)
+				continue;
+		}
+		if (name_means_synchronize(ident))
+			return 1;
+	} END_FOR_EACH_PTR_REVERSE(stmt);
+	return 0;
+}
+
+static void match_condition(struct expression *expr)
+{
+	struct smatch_state *state;
+	sval_t dummy;
+	char *name;
+
+	if (inside_loop())
+		return;
+
+	if (get_value(expr, &dummy))
+		return;
+
+	if (get_macro_name(expr->pos))
+		return;
+
+	state = get_stored_condition(expr);
+	if (!state || !state->data)
+		return;
+	if (get_macro_name(((struct expression *)state->data)->pos))
+		return;
+
+	/*
+	 * we allow double checking for NULL because people do this all the time
+	 * and trying to stop them is a losers' battle.
+	 */
+	if (is_pointer(expr) && implied_condition_true(expr))
+		return;
+
+	if (definitely_inside_loop()) {
+		struct symbol *sym;
+
+		if (__inline_fn)
+			return;
+
+		name = expr_to_var_sym(expr, &sym);
+		if (!name)
+			return;
+		set_state_expr(my_id, expr, &checked);
+		set_state_stree(&to_check, my_id, name, sym, &checked);
+		free_string(name);
+		return;
+	}
+
+	if (is_obvious_else(state->data))
+		return;
+
+	/*
+	 * It's common to test something, then take a lock and test if it is
+	 * still true.
+	 */
+	if (previous_statement_was_synchronize())
+		return;
+
+	name = expr_to_str(expr);
+	sm_warning("we tested '%s' before and it was '%s'", name, state->name);
+	free_string(name);
+}
+
+int get_check_line(struct sm_state *sm)
+{
+	struct sm_state *tmp;
+
+	FOR_EACH_PTR(sm->possible, tmp) {
+		if (tmp->state == &checked)
+			return tmp->line;
+	} END_FOR_EACH_PTR(tmp);
+
+	return get_lineno();
+}
+
+static void after_loop(struct statement *stmt)
+{
+	struct sm_state *check, *sm;
+
+	if (!stmt || stmt->type != STMT_ITERATOR)
+		return;
+	if (definitely_inside_loop())
+		return;
+	if (__inline_fn)
+		return;
+
+	FOR_EACH_SM(to_check, check) {
+		continue;
+		sm = get_sm_state(my_id, check->name, check->sym);
+		continue;
+		if (!sm)
+			continue;
+		if (slist_has_state(sm->possible, &modified))
+			continue;
+
+		sm_printf("%s:%d %s() ", get_filename(), get_check_line(sm), get_function());
+		sm_printf("warn: we tested '%s' already\n", check->name);
+	} END_FOR_EACH_SM(check);
+
+	free_stree(&to_check);
+}
+
+static void match_func_end(struct symbol *sym)
+{
+	if (__inline_fn)
+		return;
+	if (to_check)
+		sm_msg("debug: odd...  found an function without an end.");
+	free_stree(&to_check);
+}
+
+void check_double_checking(int id)
+{
+	my_id = id;
+
+	if (!option_spammy)
+		return;
+
+	add_hook(&match_condition, CONDITION_HOOK);
+	add_modification_hook(my_id, &set_modified);
+	add_hook(after_loop, STMT_HOOK_AFTER);
+	add_hook(&match_func_end, AFTER_FUNC_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:03 2018
+++ new/usr/src/tools/smatch/src/check_err_ptr.c	Fri Dec 21 15:00:03 2018
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+static int err_ptr = 0;
+static int returns_null = 0;
+
+static void match_err_ptr(struct expression *expr)
+{
+	expr = strip_expr(expr);
+	if (!expr)
+		return;
+	if (expr->type != EXPR_CALL)
+		return;
+
+	if (expr->fn->type != EXPR_SYMBOL || !expr->fn->symbol)
+		return;
+	if (!strcmp(expr->fn->symbol->ident->name, "ERR_PTR"))
+		err_ptr = 1;
+}
+
+extern int check_assigned_expr_id;
+static void match_return(struct expression *ret_value)
+{
+	struct state_list *slist;
+	struct sm_state *tmp;
+	sval_t sval;
+
+	if (__inline_fn)
+		return;
+	match_err_ptr(ret_value);
+	slist = get_possible_states_expr(check_assigned_expr_id, ret_value);
+	FOR_EACH_PTR(slist, tmp) {
+		if (tmp->state == &undefined || tmp->state == &merged)
+			continue;
+		match_err_ptr((struct expression *)tmp->state->data);
+	} END_FOR_EACH_PTR(tmp);
+
+	if (get_implied_value(ret_value, &sval)) {
+		if (sval.value == 0)
+			returns_null = 1;
+	}
+}
+
+static void match_end_func(struct symbol *sym)
+{
+	if (__inline_fn)
+		return;
+	if (err_ptr)
+		sm_info("returns_err_ptr");
+	err_ptr = 0;
+	returns_null = 0;
+}
+
+void check_err_ptr(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+	if (!option_info)
+		return;
+
+	my_id = id;
+	add_hook(&match_return, RETURN_HOOK);
+	add_hook(&match_end_func, END_FUNC_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:03 2018
+++ new/usr/src/tools/smatch/src/check_err_ptr_deref.c	Fri Dec 21 15:00:03 2018
@@ -0,0 +1,241 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+STATE(err_ptr);
+STATE(checked);
+
+static sval_t err_ptr_min = {
+	.type = &int_ctype,
+	{.value = -4095},
+};
+
+static sval_t err_ptr_max = {
+	.type = &int_ctype,
+	{.value = -1},
+};
+
+struct range_list *err_ptr_rl;
+
+static void ok_to_use(struct sm_state *sm, struct expression *mod_expr)
+{
+	if (sm->state != &checked)
+		set_state(my_id, sm->name, sm->sym, &checked);
+}
+
+static void check_is_err_ptr(struct expression *expr)
+{
+	struct sm_state *sm;
+	struct range_list *rl;
+
+	sm = get_sm_state_expr(my_id, expr);
+	if (!sm)
+		return;
+
+	if (!slist_has_state(sm->possible, &err_ptr))
+		return;
+
+	get_absolute_rl(expr, &rl);
+	if (!possibly_true_rl(rl, SPECIAL_EQUAL, err_ptr_rl))
+		return;
+
+	sm_error("'%s' dereferencing possible ERR_PTR()", sm->name);
+	set_state(my_id, sm->name, sm->sym, &checked);
+}
+
+static void match_returns_err_ptr(const char *fn, struct expression *expr,
+				void *info)
+{
+	set_state_expr(my_id, expr->left, &err_ptr);
+}
+
+static void set_param_dereferenced(struct expression *call, struct expression *arg, char *key, char *unused)
+{
+	struct sm_state *sm;
+	struct smatch_state *estate;
+	struct symbol *sym;
+	char *name;
+
+	name = get_variable_from_key(arg, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	sm = get_sm_state(my_id, name, sym);
+	if (!sm)
+		goto free;
+
+	if (!slist_has_state(sm->possible, &err_ptr))
+		goto free;
+
+	estate = get_state(SMATCH_EXTRA, name, sym);
+	if (!estate || !possibly_true_rl(estate_rl(estate), SPECIAL_EQUAL, err_ptr_rl))
+		goto free;
+
+	sm_error("'%s' dereferencing possible ERR_PTR()", sm->name);
+	set_state(my_id, sm->name, sm->sym, &checked);
+
+free:
+	free_string(name);
+}
+
+static void match_checked(const char *fn, struct expression *call_expr,
+			struct expression *assign_expr, void *unused)
+{
+	struct expression *arg;
+
+	arg = get_argument_from_call_expr(call_expr->args, 0);
+	arg = strip_expr(arg);
+	while (arg->type == EXPR_ASSIGNMENT)
+		arg = strip_expr(arg->left);
+	set_state_expr(my_id, arg, &checked);
+}
+
+static void match_err(const char *fn, struct expression *call_expr,
+			struct expression *assign_expr, void *unused)
+{
+	struct expression *arg;
+
+	arg = get_argument_from_call_expr(call_expr->args, 0);
+	arg = strip_expr(arg);
+	while (arg->type == EXPR_ASSIGNMENT)
+		arg = strip_expr(arg->left);
+	set_state_expr(my_id, arg, &err_ptr);
+}
+
+static void match_dereferences(struct expression *expr)
+{
+	if (expr->type != EXPR_PREOP)
+		return;
+	check_is_err_ptr(expr->unop);
+}
+
+static void match_kfree(const char *fn, struct expression *expr, void *_arg_nr)
+{
+	int arg_nr = PTR_INT(_arg_nr);
+	struct expression *arg;
+
+	arg = get_argument_from_call_expr(expr->args, arg_nr);
+	check_is_err_ptr(arg);
+}
+
+static void match_condition(struct expression *expr)
+{
+	if (expr->type == EXPR_ASSIGNMENT) {
+		match_condition(expr->right);
+		match_condition(expr->left);
+	}
+	if (!get_state_expr(my_id, expr))
+		return;
+	/* If we know the variable is zero that means it's not an ERR_PTR */
+	set_true_false_states_expr(my_id, expr, NULL, &checked);
+}
+
+static void register_err_ptr_funcs(void)
+{
+	struct token *token;
+	const char *func;
+
+	token = get_tokens_file("kernel.returns_err_ptr");
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		func = show_ident(token->ident);
+		add_function_assign_hook(func, &match_returns_err_ptr, NULL);
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+static void match_err_ptr_positive_const(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *arg;
+	sval_t sval;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+
+	if (!get_value(arg, &sval))
+		return;
+	if (sval_is_positive(sval) && sval_cmp_val(sval, 0) != 0)
+		sm_error("passing non negative %s to ERR_PTR", sval_to_str(sval));
+}
+
+static void match_err_ptr(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *arg;
+	struct sm_state *sm;
+	struct sm_state *tmp;
+	sval_t tmp_min;
+	sval_t tmp_max;
+	sval_t min = sval_type_max(&llong_ctype);
+	sval_t max = sval_type_min(&llong_ctype);
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	sm = get_sm_state_expr(SMATCH_EXTRA, arg);
+	if (!sm)
+		return;
+	FOR_EACH_PTR(sm->possible, tmp) {
+		tmp_min = estate_min(tmp->state);
+		if (!sval_is_a_min(tmp_min) && sval_cmp(tmp_min, min) < 0)
+			min = tmp_min;
+		tmp_max = estate_max(tmp->state);
+		if (!sval_is_a_max(tmp_max) && sval_cmp(tmp_max, max) > 0)
+			max = tmp_max;
+	} END_FOR_EACH_PTR(tmp);
+	if (sval_is_negative(min) && sval_cmp_val(min, -4095) < 0)
+		sm_error("%s too low for ERR_PTR", sval_to_str(min));
+	if (sval_is_positive(max) && sval_cmp_val(max, 0) != 0)
+		sm_error("passing non negative %s to ERR_PTR", sval_to_str(max));
+}
+
+void check_err_ptr_deref(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	my_id = id;
+	return_implies_state("IS_ERR", 0, 0, &match_checked, NULL);
+	return_implies_state("IS_ERR", 1, 1, &match_err, NULL);
+	return_implies_state("IS_ERR_OR_NULL", 0, 0, &match_checked, NULL);
+	return_implies_state("IS_ERR_OR_NULL", 1, 1, &match_err, NULL);
+	return_implies_state("PTR_RET", 0, 0, &match_checked, NULL);
+	return_implies_state("PTR_RET", -4096, -1, &match_err, NULL);
+	register_err_ptr_funcs();
+	add_hook(&match_dereferences, DEREF_HOOK);
+	add_function_hook("ERR_PTR", &match_err_ptr_positive_const, NULL);
+	add_function_hook("ERR_PTR", &match_err_ptr, NULL);
+	add_hook(&match_condition, CONDITION_HOOK);
+	add_modification_hook(my_id, &ok_to_use);
+	add_function_hook("kfree", &match_kfree, INT_PTR(0));
+	add_function_hook("brelse", &match_kfree, INT_PTR(0));
+	add_function_hook("kmem_cache_free", &match_kfree, INT_PTR(1));
+	add_function_hook("vfree", &match_kfree, INT_PTR(0));
+
+	err_ptr_rl = clone_rl_permanent(alloc_rl(err_ptr_min, err_ptr_max));
+
+	select_return_implies_hook(DEREFERENCE, &set_param_dereferenced);
+}
+
--- /dev/null	Fri Dec 21 15:00:03 2018
+++ new/usr/src/tools/smatch/src/check_expects_err_ptr.c	Fri Dec 21 15:00:03 2018
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+static struct symbol *func_sym;
+
+STATE(argument);
+STATE(ok);
+
+static void set_ok(struct sm_state *sm, struct expression *mod_expr)
+{
+	if (sm->state != &ok)
+		set_state(my_id, sm->name, sm->sym, &ok);
+}
+
+static void match_function_def(struct symbol *sym)
+{
+	struct symbol *arg;
+
+	func_sym = sym;
+	FOR_EACH_PTR(func_sym->ctype.base_type->arguments, arg) {
+		if (!arg->ident) {
+			continue;
+		}
+		set_state(my_id, arg->ident->name, arg, &argument);
+	} END_FOR_EACH_PTR(arg);
+}
+
+static int get_arg_num(struct expression *expr)
+{
+	struct smatch_state *state;
+	struct symbol *arg;
+	struct symbol *this_arg;
+	int i;
+
+	expr = strip_expr(expr);
+	if (expr->type != EXPR_SYMBOL)
+		return -1;
+	this_arg = expr->symbol;
+
+	state = get_state_expr(my_id, expr);
+	if (!state || state != &argument)
+		return -1;
+	
+	i = 0;
+	FOR_EACH_PTR(func_sym->ctype.base_type->arguments, arg) {
+		if (arg == this_arg)
+			return i;
+		i++;
+	} END_FOR_EACH_PTR(arg);
+
+	return -1;
+}
+
+static void match_is_err(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *arg;
+	int arg_num;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	arg_num = get_arg_num(arg);
+	if (arg_num < 0)
+		return;
+	sm_msg("info: expects ERR_PTR %d", arg_num);
+}
+
+void check_expects_err_ptr(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+	if (!option_info)
+		return;
+
+	my_id = id;
+	add_hook(&match_function_def, FUNC_DEF_HOOK);
+	add_modification_hook(my_id, &set_ok);
+	add_function_hook("IS_ERR", &match_is_err, NULL);
+}
--- /dev/null	Fri Dec 21 15:00:03 2018
+++ new/usr/src/tools/smatch/src/check_free.c	Fri Dec 21 15:00:03 2018
@@ -0,0 +1,302 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * check_memory() is getting too big and messy.
+ *
+ */
+
+#include <string.h>
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+STATE(freed);
+STATE(ok);
+
+static void ok_to_use(struct sm_state *sm, struct expression *mod_expr)
+{
+	if (sm->state != &ok)
+		set_state(my_id, sm->name, sm->sym, &ok);
+}
+
+static void pre_merge_hook(struct sm_state *sm)
+{
+	if (is_impossible_path())
+		set_state(my_id, sm->name, sm->sym, &ok);
+}
+
+static int is_freed(struct expression *expr)
+{
+	struct sm_state *sm;
+
+	sm = get_sm_state_expr(my_id, expr);
+	if (sm && slist_has_state(sm->possible, &freed))
+		return 1;
+	return 0;
+}
+
+static void match_symbol(struct expression *expr)
+{
+	struct expression *parent;
+	char *name;
+
+	if (is_impossible_path())
+		return;
+	if (__in_fake_parameter_assign)
+		return;
+
+	parent = expr_get_parent_expr(expr);
+	while (parent && parent->type == EXPR_PREOP && parent->op == '(')
+		parent = expr_get_parent_expr(parent);
+	if (parent && parent->type == EXPR_PREOP && parent->op == '&')
+		return;
+
+	if (!is_freed(expr))
+		return;
+	name = expr_to_var(expr);
+	sm_warning("'%s' was already freed.", name);
+	free_string(name);
+}
+
+static void match_dereferences(struct expression *expr)
+{
+	char *name;
+
+	if (__in_fake_parameter_assign)
+		return;
+
+	if (expr->type != EXPR_PREOP)
+		return;
+
+	if (is_impossible_path())
+		return;
+
+	expr = strip_expr(expr->unop);
+	if (!is_freed(expr))
+		return;
+	name = expr_to_var(expr);
+	sm_error("dereferencing freed memory '%s'", name);
+	set_state_expr(my_id, expr, &ok);
+	free_string(name);
+}
+
+static int ignored_params[16];
+
+static void set_ignored_params(struct expression *call)
+{
+	struct expression *arg;
+	const char *p;
+	int i;
+
+	memset(&ignored_params, 0, sizeof(ignored_params));
+
+	i = -1;
+	FOR_EACH_PTR(call->args, arg) {
+		i++;
+		if (arg->type != EXPR_STRING)
+			continue;
+		goto found;
+	} END_FOR_EACH_PTR(arg);
+
+	return;
+
+found:
+	i++;
+	p = arg->string->data;
+	while ((p = strchr(p, '%'))) {
+		if (i >= ARRAY_SIZE(ignored_params))
+			return;
+		p++;
+		if (*p == '%') {
+			p++;
+			continue;
+		}
+		if (*p == '.')
+			p++;
+		if (*p == '*')
+			i++;
+		if (*p == 'p')
+			ignored_params[i] = 1;
+		i++;
+	}
+}
+
+static int is_free_func(struct expression *fn)
+{
+	char *name;
+	int ret = 0;
+
+	name = expr_to_str(fn);
+	if (!name)
+		return 0;
+	if (strstr(name, "free"))
+		ret = 1;
+	free_string(name);
+
+	return ret;
+}
+
+static void match_call(struct expression *expr)
+{
+	struct expression *arg;
+	char *name;
+	int i;
+
+	if (is_impossible_path())
+		return;
+
+	set_ignored_params(expr);
+
+	i = -1;
+	FOR_EACH_PTR(expr->args, arg) {
+		i++;
+		if (!is_pointer(arg))
+			continue;
+		if (!is_freed(arg))
+			continue;
+		if (ignored_params[i])
+			continue;
+
+		name = expr_to_var(arg);
+		if (is_free_func(expr->fn))
+			sm_error("double free of '%s'", name);
+		else
+			sm_warning("passing freed memory '%s'", name);
+		set_state_expr(my_id, arg, &ok);
+		free_string(name);
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void match_return(struct expression *expr)
+{
+	char *name;
+
+	if (is_impossible_path())
+		return;
+	if (__in_fake_parameter_assign)
+		return;
+
+	if (!expr)
+		return;
+	if (!is_freed(expr))
+		return;
+
+	name = expr_to_var(expr);
+	sm_warning("returning freed memory '%s'", name);
+	set_state_expr(my_id, expr, &ok);
+	free_string(name);
+}
+
+static void match_free(const char *fn, struct expression *expr, void *param)
+{
+	struct expression *arg;
+
+	if (is_impossible_path())
+		return;
+
+	arg = get_argument_from_call_expr(expr->args, PTR_INT(param));
+	if (!arg)
+		return;
+	if (is_freed(arg)) {
+		char *name = expr_to_var(arg);
+
+		sm_error("double free of '%s'", name);
+		free_string(name);
+	}
+	set_state_expr(my_id, arg, &freed);
+}
+
+static void set_param_freed(struct expression *call, struct expression *arg, char *key, char *unused)
+{
+	struct symbol *sym;
+	char *name;
+
+	name = get_variable_from_key(arg, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	set_state(my_id, name, sym, &freed);
+free:
+	free_string(name);
+}
+
+int parent_is_free_var_sym(const char *name, struct symbol *sym)
+{
+	char buf[256];
+	char *start;
+	char *end;
+	struct smatch_state *state;
+
+	if (option_project == PROJ_KERNEL)
+		return parent_is_free_var_sym_strict(name, sym);
+
+	strncpy(buf, name, sizeof(buf) - 1);
+	buf[sizeof(buf) - 1] = '\0';
+
+	start = &buf[0];
+	while ((*start == '&'))
+		start++;
+
+	while ((end = strrchr(start, '-'))) {
+		*end = '\0';
+		state = __get_state(my_id, start, sym);
+		if (state == &freed)
+			return 1;
+	}
+	return 0;
+}
+
+int parent_is_free(struct expression *expr)
+{
+	struct symbol *sym;
+	char *var;
+	int ret = 0;
+
+	expr = strip_expr(expr);
+	var = expr_to_var_sym(expr, &sym);
+	if (!var || !sym)
+		goto free;
+	ret = parent_is_free_var_sym(var, sym);
+free:
+	free_string(var);
+	return ret;
+}
+
+void check_free(int id)
+{
+	my_id = id;
+
+	if (option_project == PROJ_KERNEL) {
+		/* The kernel use check_free_strict.c */
+		return;
+	}
+
+	add_function_hook("free", &match_free, INT_PTR(0));
+
+	if (option_spammy)
+		add_hook(&match_symbol, SYM_HOOK);
+	add_hook(&match_dereferences, DEREF_HOOK);
+	add_hook(&match_call, FUNCTION_CALL_HOOK);
+	add_hook(&match_return, RETURN_HOOK);
+
+	add_modification_hook(my_id, &ok_to_use);
+	select_return_implies_hook(PARAM_FREED, &set_param_freed);
+	add_pre_merge_hook(my_id, &pre_merge_hook);
+}
--- /dev/null	Fri Dec 21 15:00:03 2018
+++ new/usr/src/tools/smatch/src/check_free_strict.c	Fri Dec 21 15:00:03 2018
@@ -0,0 +1,314 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * check_memory() is getting too big and messy.
+ *
+ */
+
+#include <string.h>
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+STATE(freed);
+STATE(ok);
+
+static void ok_to_use(struct sm_state *sm, struct expression *mod_expr)
+{
+	if (sm->state != &ok)
+		set_state(my_id, sm->name, sm->sym, &ok);
+}
+
+static void pre_merge_hook(struct sm_state *sm)
+{
+	if (is_impossible_path())
+		set_state(my_id, sm->name, sm->sym, &ok);
+}
+
+static int is_freed(struct expression *expr)
+{
+	struct sm_state *sm;
+
+	sm = get_sm_state_expr(my_id, expr);
+	if (sm && slist_has_state(sm->possible, &freed))
+		return 1;
+	return 0;
+}
+
+static void match_symbol(struct expression *expr)
+{
+	struct expression *parent;
+	char *name;
+
+	if (is_impossible_path())
+		return;
+	if (__in_fake_parameter_assign)
+		return;
+
+	parent = expr_get_parent_expr(expr);
+	while (parent && parent->type == EXPR_PREOP && parent->op == '(')
+		parent = expr_get_parent_expr(parent);
+	if (parent && parent->type == EXPR_PREOP && parent->op == '&')
+		return;
+
+	if (!is_freed(expr))
+		return;
+	name = expr_to_var(expr);
+	sm_warning("'%s' was already freed.", name);
+	free_string(name);
+}
+
+static void match_dereferences(struct expression *expr)
+{
+	char *name;
+
+	if (expr->type != EXPR_PREOP)
+		return;
+
+	if (is_impossible_path())
+		return;
+	if (__in_fake_parameter_assign)
+		return;
+
+	expr = strip_expr(expr->unop);
+	if (!is_freed(expr))
+		return;
+	name = expr_to_var(expr);
+	sm_error("dereferencing freed memory '%s'", name);
+	set_state_expr(my_id, expr, &ok);
+	free_string(name);
+}
+
+static int ignored_params[16];
+
+static void set_ignored_params(struct expression *call)
+{
+	struct expression *arg;
+	const char *p;
+	int i;
+
+	memset(&ignored_params, 0, sizeof(ignored_params));
+
+	i = -1;
+	FOR_EACH_PTR(call->args, arg) {
+		i++;
+		if (arg->type != EXPR_STRING)
+			continue;
+		goto found;
+	} END_FOR_EACH_PTR(arg);
+
+	return;
+
+found:
+	i++;
+	p = arg->string->data;
+	while ((p = strchr(p, '%'))) {
+		if (i >= ARRAY_SIZE(ignored_params))
+			return;
+		p++;
+		if (*p == '%') {
+			p++;
+			continue;
+		}
+		if (*p == '.')
+			p++;
+		if (*p == '*')
+			i++;
+		if (*p == 'p')
+			ignored_params[i] = 1;
+		i++;
+	}
+}
+
+static int is_free_func(struct expression *fn)
+{
+	char *name;
+	int ret = 0;
+
+	name = expr_to_str(fn);
+	if (!name)
+		return 0;
+	if (strstr(name, "free"))
+		ret = 1;
+	free_string(name);
+
+	return ret;
+}
+
+static void match_call(struct expression *expr)
+{
+	struct expression *arg;
+	char *name;
+	int i;
+
+	if (is_impossible_path())
+		return;
+
+	set_ignored_params(expr);
+
+	i = -1;
+	FOR_EACH_PTR(expr->args, arg) {
+		i++;
+		if (!is_pointer(arg))
+			continue;
+		if (!is_freed(arg))
+			continue;
+		if (ignored_params[i])
+			continue;
+
+		name = expr_to_var(arg);
+		if (is_free_func(expr->fn))
+			sm_error("double free of '%s'", name);
+		else
+			sm_warning("passing freed memory '%s'", name);
+		set_state_expr(my_id, arg, &ok);
+		free_string(name);
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void match_return(struct expression *expr)
+{
+	char *name;
+
+	if (is_impossible_path())
+		return;
+
+	if (!expr)
+		return;
+	if (!is_freed(expr))
+		return;
+
+	name = expr_to_var(expr);
+	sm_warning("returning freed memory '%s'", name);
+	set_state_expr(my_id, expr, &ok);
+	free_string(name);
+}
+
+static void match_free(const char *fn, struct expression *expr, void *param)
+{
+	struct expression *arg;
+
+	if (is_impossible_path())
+		return;
+
+	arg = get_argument_from_call_expr(expr->args, PTR_INT(param));
+	if (!arg)
+		return;
+	if (is_freed(arg)) {
+		char *name = expr_to_var(arg);
+
+		sm_error("double free of '%s'", name);
+		free_string(name);
+	}
+	set_state_expr(my_id, arg, &freed);
+}
+
+static void set_param_freed(struct expression *expr, int param, char *key, char *value)
+{
+	struct expression *arg;
+	char *name;
+	struct symbol *sym;
+	struct sm_state *sm;
+
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+	if (expr->type != EXPR_CALL)
+		return;
+
+	arg = get_argument_from_call_expr(expr->args, param);
+	if (!arg)
+		return;
+	name = get_variable_from_key(arg, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	if (!is_impossible_path()) {
+		sm = get_sm_state(my_id, name, sym);
+		if (sm && slist_has_state(sm->possible, &freed)) {
+			sm_warning("'%s' double freed", name);
+			set_state(my_id, name, sym, &ok);  /* fixme: doesn't silence anything.  I know */
+		}
+	}
+
+	set_state(my_id, name, sym, &freed);
+free:
+	free_string(name);
+}
+
+int parent_is_free_var_sym_strict(const char *name, struct symbol *sym)
+{
+	char buf[256];
+	char *start;
+	char *end;
+	struct smatch_state *state;
+
+	strncpy(buf, name, sizeof(buf) - 1);
+	buf[sizeof(buf) - 1] = '\0';
+
+	start = &buf[0];
+	while ((*start == '&'))
+		start++;
+
+	while ((end = strrchr(start, '-'))) {
+		*end = '\0';
+		state = __get_state(my_id, start, sym);
+		if (state == &freed)
+			return 1;
+	}
+	return 0;
+}
+
+int parent_is_free_strict(struct expression *expr)
+{
+	struct symbol *sym;
+	char *var;
+	int ret = 0;
+
+	expr = strip_expr(expr);
+	var = expr_to_var_sym(expr, &sym);
+	if (!var || !sym)
+		goto free;
+	ret = parent_is_free_var_sym_strict(var, sym);
+free:
+	free_string(var);
+	return ret;
+}
+
+void check_free_strict(int id)
+{
+	my_id = id;
+
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	add_function_hook("kfree", &match_free, INT_PTR(0));
+	add_function_hook("kmem_cache_free", &match_free, INT_PTR(1));
+
+	if (option_spammy)
+		add_hook(&match_symbol, SYM_HOOK);
+	add_hook(&match_dereferences, DEREF_HOOK);
+	add_hook(&match_call, FUNCTION_CALL_HOOK);
+	add_hook(&match_return, RETURN_HOOK);
+
+	add_modification_hook_late(my_id, &ok_to_use);
+	add_pre_merge_hook(my_id, &pre_merge_hook);
+
+	select_return_states_hook(PARAM_FREED, &set_param_freed);
+}
--- /dev/null	Fri Dec 21 15:00:03 2018
+++ new/usr/src/tools/smatch/src/check_freeing_devm.c	Fri Dec 21 15:00:03 2018
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2013 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+STATE(devm);
+
+static int my_id;
+
+static void match_assign(const char *fn, struct expression *expr, void *unused)
+{
+	set_state_expr(my_id, expr->left, &devm);
+}
+
+static void match_free_func(const char *fn, struct expression *expr, void *_arg)
+{
+	struct expression *arg_expr;
+	int arg = PTR_INT(_arg);
+	char *name;
+
+	arg_expr = get_argument_from_call_expr(expr->args, arg);
+	if (!get_state_expr(my_id, arg_expr))
+		return;
+	name = expr_to_str(arg_expr);
+	sm_warning("passing devm_ allocated variable to kfree. '%s'", name);
+	free_string(name);
+}
+
+static void register_funcs_from_file(void)
+{
+	struct token *token;
+	const char *func;
+	int arg;
+
+	token = get_tokens_file("kernel.frees_argument");
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		func = show_ident(token->ident);
+		token = token->next;
+		if (token_type(token) != TOKEN_NUMBER)
+			return;
+		arg = atoi(token->number);
+		add_function_hook(func, &match_free_func, INT_PTR(arg));
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+void check_freeing_devm(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	my_id = id;
+
+	add_function_assign_hook("devm_kmalloc", &match_assign, NULL);
+	add_function_assign_hook("devm_kzalloc", &match_assign, NULL);
+	add_function_assign_hook("devm_kcalloc", &match_assign, NULL);
+	add_function_assign_hook("devm_kmalloc_array", &match_assign, NULL);
+
+
+	add_function_hook("kfree", &match_free_func, INT_PTR(0));
+	add_function_hook("krealloc", &match_free_func, INT_PTR(0));
+	register_funcs_from_file();
+}
--- /dev/null	Fri Dec 21 15:00:03 2018
+++ new/usr/src/tools/smatch/src/check_freeing_null.c	Fri Dec 21 15:00:03 2018
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static void match_free(const char *fn, struct expression *expr, void *data)
+{
+	struct expression *arg_expr;
+	char *name;
+	sval_t sval;
+
+	arg_expr = get_argument_from_call_expr(expr->args, 0);
+	if (!get_implied_value(arg_expr, &sval))
+		return;
+	if (sval.value != 0)
+		return;
+	name = expr_to_var(arg_expr);
+	sm_warning("calling %s() when '%s' is always NULL.", fn, name);
+	free_string(name);
+}
+
+void check_freeing_null(int id)
+{
+	my_id = id;
+	if (!option_spammy)
+		return;
+	if (option_project == PROJ_KERNEL)
+		add_function_hook("kfree", &match_free, NULL);
+	else
+		add_function_hook("free", &match_free, NULL);
+}
--- /dev/null	Fri Dec 21 15:00:03 2018
+++ new/usr/src/tools/smatch/src/check_frees_argument.c	Fri Dec 21 15:00:03 2018
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/* 
+ * This script is for finding functions like hcd_buffer_free() which free
+ * their arguments.  After running it, add those functions to check_memory.c
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+STATE(freed);
+
+static struct symbol *this_func;
+static struct tracker_list *freed_args = NULL;
+
+static void match_function_def(struct symbol *sym)
+{
+	this_func = sym;
+}
+
+static int is_arg(char *name, struct symbol *sym)
+{
+	struct symbol *arg;
+	const char *arg_name;
+
+	FOR_EACH_PTR(this_func->ctype.base_type->arguments, arg) {
+		arg_name = (arg->ident?arg->ident->name:"-");
+		if (sym == arg && !strcmp(name, arg_name))
+			return 1;
+	} END_FOR_EACH_PTR(arg);
+	return 0;
+}
+
+static void match_kfree(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *tmp;
+	struct symbol *sym;
+	char *name;
+
+	tmp = get_argument_from_call_expr(expr->args, 0);
+	tmp = strip_expr(tmp);
+	name = expr_to_var_sym(tmp, &sym);
+	if (is_arg(name, sym)) {
+		set_state(my_id, name, sym, &freed);
+	}
+	free_string(name);
+}
+
+static int return_count = 0;
+static void match_return(struct expression *ret_value)
+{
+	struct stree *stree;
+	struct sm_state *tmp;
+	struct tracker *tracker;
+
+	if (__inline_fn)
+		return;
+
+	if (!return_count) {
+		stree = __get_cur_stree();
+		FOR_EACH_MY_SM(my_id, stree, tmp) {
+			if (tmp->state == &freed)
+				add_tracker(&freed_args, my_id, tmp->name,
+					    tmp->sym);
+		} END_FOR_EACH_SM(tmp);
+	} else {
+		FOR_EACH_PTR(freed_args, tracker) {
+			tmp = get_sm_state(my_id, tracker->name, tracker->sym);
+			if (tmp && tmp->state != &freed)
+				del_tracker(&freed_args, my_id, tracker->name,
+					    tracker->sym);
+		} END_FOR_EACH_PTR(tracker);
+	}
+}
+
+static void print_arg(struct symbol *sym)
+{
+	struct symbol *arg;
+	int i = 0;
+
+	FOR_EACH_PTR(this_func->ctype.base_type->arguments, arg) {
+		if (sym == arg) {
+			sm_info("free_arg %s %d", get_function(), i);
+			return;
+		}
+		i++;
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void match_end_func(struct symbol *sym)
+{
+	if (__inline_fn)
+		return;
+	if (is_reachable())
+		match_return(NULL);
+}
+
+static void match_after_func(struct symbol *sym)
+{
+	struct tracker *tracker;
+
+	if (__inline_fn)
+		return;
+
+	FOR_EACH_PTR(freed_args, tracker) {
+		print_arg(tracker->sym);
+	} END_FOR_EACH_PTR(tracker);
+
+	free_trackers_and_list(&freed_args);
+	return_count = 0;
+}
+
+void check_frees_argument(int id)
+{
+	if (!option_info)
+		return;
+
+	my_id = id;
+	add_hook(&match_function_def, FUNC_DEF_HOOK);
+	if (option_project == PROJ_KERNEL)
+		add_function_hook("kfree", &match_kfree, NULL);
+	else
+		add_function_hook("free", &match_kfree, NULL);
+	add_hook(&match_return, RETURN_HOOK);
+	add_hook(&match_end_func, END_FUNC_HOOK);
+	add_hook(&match_after_func, AFTER_FUNC_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:03 2018
+++ new/usr/src/tools/smatch/src/check_frees_param.c	Fri Dec 21 15:00:03 2018
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This file is sort of like check_dereferences_param.c.  In theory the one
+ * difference should be that the param is NULL it should still be counted as a
+ * free.  But for now I don't handle that case.
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+STATE(freed);
+STATE(ignore);
+STATE(param);
+
+static void set_ignore(struct sm_state *sm, struct expression *mod_expr)
+{
+	set_state(my_id, sm->name, sm->sym, &ignore);
+}
+
+static void match_function_def(struct symbol *sym)
+{
+	struct symbol *arg;
+	int i;
+
+	i = -1;
+	FOR_EACH_PTR(sym->ctype.base_type->arguments, arg) {
+		i++;
+		if (!arg->ident)
+			continue;
+		set_state(my_id, arg->ident->name, arg, &param);
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void freed_variable(struct expression *expr)
+{
+	struct sm_state *sm;
+
+	expr = strip_expr(expr);
+	if (get_param_num(expr) < 0)
+		return;
+
+	sm = get_sm_state_expr(my_id, expr);
+	if (sm && slist_has_state(sm->possible, &ignore))
+		return;
+	set_state_expr(my_id, expr, &freed);
+}
+
+static void match_free(const char *fn, struct expression *expr, void *param)
+{
+	struct expression *arg;
+
+	arg = get_argument_from_call_expr(expr->args, PTR_INT(param));
+	if (!arg)
+		return;
+	freed_variable(arg);
+}
+
+static void set_param_freed(struct expression *call, struct expression *arg, char *key, char *unused)
+{
+	/* XXX FIXME: return_implies has been updated with more information */
+	if (strcmp(key, "$") != 0)
+		return;
+	freed_variable(arg);
+}
+
+static void process_states(void)
+{
+	struct sm_state *sm;
+	int param;
+	const char *param_name;
+
+	FOR_EACH_MY_SM(my_id, __get_cur_stree(), sm) {
+		if (sm->state != &freed)
+			continue;
+		param = get_param_num_from_sym(sm->sym);
+		if (param < 0)
+			continue;
+		param_name = get_param_name(sm);
+		if (!param_name)
+			continue;
+		sql_insert_return_implies(PARAM_FREED, param, param_name, "1");
+	} END_FOR_EACH_SM(sm);
+
+}
+
+void check_frees_param(int id)
+{
+	my_id = id;
+
+	if (option_project == PROJ_KERNEL) {
+		/* The kernel uses check_frees_param_strict.c */
+		return;
+	}
+
+	add_hook(&match_function_def, FUNC_DEF_HOOK);
+
+	add_function_hook("free", &match_free, INT_PTR(0));
+
+	select_return_implies_hook(PARAM_FREED, &set_param_freed);
+	add_modification_hook(my_id, &set_ignore);
+
+	all_return_states_hook(&process_states);
+}
--- /dev/null	Fri Dec 21 15:00:04 2018
+++ new/usr/src/tools/smatch/src/check_frees_param_strict.c	Fri Dec 21 15:00:04 2018
@@ -0,0 +1,162 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This file is sort of like check_dereferences_param.c.  In theory the one
+ * difference should be that the param is NULL it should still be counted as a
+ * free.  But for now I don't handle that case.
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+STATE(freed);
+STATE(ignore);
+
+static struct smatch_state *unmatched_state(struct sm_state *sm)
+{
+	if (sm->state != &freed)
+		return &undefined;
+	if (parent_is_null_var_sym(sm->name, sm->sym))
+		return &freed;
+	return &undefined;
+}
+
+static void set_ignore(struct sm_state *sm, struct expression *mod_expr)
+{
+	set_state(my_id, sm->name, sm->sym, &ignore);
+}
+
+static int counter_was_inced(struct expression *expr)
+{
+	char *name;
+	struct symbol *sym;
+	char buf[256];
+	int ret = 0;
+
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+
+	snprintf(buf, sizeof(buf), "%s->users.counter", name);
+	ret = was_inced(buf, sym);
+free:
+	free_string(name);
+	return ret;
+}
+
+static void match_free(const char *fn, struct expression *expr, void *param)
+{
+	struct expression *arg, *tmp;
+	int cnt = 0;
+
+	arg = get_argument_from_call_expr(expr->args, PTR_INT(param));
+	if (!arg)
+		return;
+	while ((tmp = get_assigned_expr(arg))) {
+		arg = strip_expr(tmp);
+		if (cnt++ > 5)
+			break;
+	}
+
+	if (get_param_num(arg) < 0)
+		return;
+	if (param_was_set(arg))
+		return;
+	if (strcmp(fn, "kfree_skb") == 0 && counter_was_inced(arg))
+		return;
+
+	set_state_expr(my_id, arg, &freed);
+}
+
+static void set_param_freed(struct expression *expr, int param, char *key, char *value)
+{
+	struct expression *arg;
+	char *name;
+	struct symbol *sym;
+
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+	if (expr->type != EXPR_CALL)
+		return;
+
+	arg = get_argument_from_call_expr(expr->args, param);
+	if (!arg)
+		return;
+	name = get_variable_from_key(arg, key, &sym);
+	if (!name || !sym)
+		goto free;
+	if (get_param_num_from_sym(sym) < 0)
+		goto free;
+
+	if (param_was_set_var_sym(name, sym))
+		goto free;
+
+	set_state(my_id, name, sym, &freed);
+free:
+	free_string(name);
+}
+
+static void param_freed_info(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct sm_state *sm;
+	int param;
+	const char *param_name;
+
+	if (on_atomic_dec_path())
+		return;
+
+	FOR_EACH_MY_SM(my_id, __get_cur_stree(), sm) {
+		if (sm->state != &freed)
+			continue;
+
+		param = get_param_num_from_sym(sm->sym);
+		if (param < 0)
+			continue;
+
+		param_name = get_param_name(sm);
+		if (!param_name)
+			continue;
+
+		sql_insert_return_states(return_id, return_ranges, PARAM_FREED,
+					 param, param_name, "");
+	} END_FOR_EACH_SM(sm);
+}
+
+void check_frees_param_strict(int id)
+{
+	my_id = id;
+
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	add_function_hook("kfree", &match_free, INT_PTR(0));
+	add_function_hook("kmem_cache_free", &match_free, INT_PTR(1));
+	add_function_hook("kfree_skb", &match_free, INT_PTR(0));
+	add_function_hook("kfree_skbmem", &match_free, INT_PTR(0));
+	add_function_hook("dma_pool_free", &match_free, INT_PTR(1));
+	add_function_hook("spi_unregister_controller", &match_free, INT_PTR(0));
+
+	select_return_states_hook(PARAM_FREED, &set_param_freed);
+	add_modification_hook(my_id, &set_ignore);
+	add_split_return_callback(&param_freed_info);
+
+	add_unmatched_state_hook(my_id, &unmatched_state);
+}
--- /dev/null	Fri Dec 21 15:00:04 2018
+++ new/usr/src/tools/smatch/src/check_get_user_overflow.c	Fri Dec 21 15:00:04 2018
@@ -0,0 +1,187 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Looks for integers that we get from the user which can be attacked
+ * with an integer overflow.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_max_id;
+static int my_min_id;
+
+STATE(capped);
+STATE(user_data);
+
+static void match_condition(struct expression *expr)
+{
+	struct smatch_state *left_max_true = NULL;
+	struct smatch_state *left_max_false = NULL;
+	struct smatch_state *right_max_true = NULL;
+	struct smatch_state *right_max_false = NULL;
+
+	struct smatch_state *left_min_true = NULL;
+	struct smatch_state *left_min_false = NULL;
+	struct smatch_state *right_min_true = NULL;
+	struct smatch_state *right_min_false = NULL;
+
+	if (expr->type != EXPR_COMPARE)
+		return;
+
+	switch (expr->op) {
+	case '<':
+	case SPECIAL_LTE:
+	case SPECIAL_UNSIGNED_LT:
+	case SPECIAL_UNSIGNED_LTE:
+		left_max_true = &capped;
+		right_max_false = &capped;
+		right_min_true = &capped;
+		left_min_false = &capped;
+		break;
+	case '>':
+	case SPECIAL_GTE:
+	case SPECIAL_UNSIGNED_GT:
+	case SPECIAL_UNSIGNED_GTE:
+		left_max_false = &capped;
+		right_max_true = &capped;
+		left_min_true = &capped;
+		right_min_false = &capped;
+		break;
+	case SPECIAL_EQUAL:
+		left_max_true = &capped;
+		right_max_true = &capped;
+		left_min_true = &capped;
+		right_min_true = &capped;
+		break;
+	case SPECIAL_NOTEQUAL:
+		left_max_false = &capped;
+		right_max_false = &capped;
+		left_min_false = &capped;
+		right_min_false = &capped;
+		break;
+	default:
+		return;
+	}
+
+	if (get_state_expr(my_max_id, expr->left)) {
+		set_true_false_states_expr(my_max_id, expr->left, left_max_true, left_max_false);
+		set_true_false_states_expr(my_min_id, expr->left, left_min_true, left_min_false);
+	}
+	if (get_state_expr(my_max_id, expr->right)) {
+		set_true_false_states_expr(my_max_id, expr->right, right_max_true, right_max_false);
+		set_true_false_states_expr(my_min_id, expr->right, right_min_true, right_min_false);
+	}
+}
+
+static void match_normal_assign(struct expression *expr)
+{
+	if (get_state_expr(my_max_id, expr->left)) {
+		set_state_expr(my_max_id, expr->left, &capped);
+		set_state_expr(my_min_id, expr->left, &capped);
+	}
+}
+
+static void match_assign(struct expression *expr)
+{
+	char *name;
+
+	name = get_macro_name(expr->pos);
+	if (!name || strcmp(name, "get_user") != 0) {
+		match_normal_assign(expr);
+		return;
+	}
+	name = expr_to_var(expr->right);
+	if (!name || strcmp(name, "__val_gu") != 0)
+		goto free;
+	set_state_expr(my_max_id, expr->left, &user_data);
+	set_state_expr(my_min_id, expr->left, &user_data);
+free:
+	free_string(name);
+}
+
+static void check_expr(struct expression *expr)
+{
+	struct sm_state *sm;
+	sval_t max;
+	sval_t sval;
+	char *name;
+	int overflow = 0;
+	int underflow = 0;
+
+	sm = get_sm_state_expr(my_max_id, expr);
+	if (sm && slist_has_state(sm->possible, &user_data)) {
+		if (!get_absolute_max(expr, &max) || sval_cmp_val(max, 20000) > 0)
+			overflow = 1;
+	}
+
+	sm = get_sm_state_expr(my_min_id, expr);
+	if (sm && slist_has_state(sm->possible, &user_data)) {
+		if (!get_absolute_min(expr, &sval) ||
+		    (sval_is_negative(sval) && sval_cmp_val(sval, -20000) < 0))
+			underflow = 1;
+	}
+
+	if (!overflow && !underflow)
+		return;
+
+	name = expr_to_var_sym(expr, NULL);
+	if (overflow && underflow)
+		sm_warning("check for integer over/underflow '%s'", name);
+	else if (underflow)
+		sm_warning("check for integer underflow '%s'", name);
+	else
+		sm_warning("check for integer overflow '%s'", name);
+	free_string(name);
+
+	set_state_expr(my_max_id, expr, &capped);
+	set_state_expr(my_min_id, expr, &capped);
+}
+
+static void match_binop(struct expression *expr)
+{
+	if (expr->op == '^')
+		return;
+	if (expr->op == '&')
+		return;
+	if (expr->op == '|')
+		return;
+	if (expr->op == SPECIAL_RIGHTSHIFT)
+		return;
+	if (expr->op == SPECIAL_LEFTSHIFT)
+		return;
+
+	check_expr(expr->left);
+	check_expr(expr->right);
+}
+
+void check_get_user_overflow(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+	my_max_id = id;
+	add_hook(&match_condition, CONDITION_HOOK);
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+	add_hook(&match_binop, BINOP_HOOK);
+}
+
+void check_get_user_overflow2(int id)
+{
+	my_min_id = id;
+}
--- /dev/null	Fri Dec 21 15:00:04 2018
+++ new/usr/src/tools/smatch/src/check_gfp_dma.c	Fri Dec 21 15:00:04 2018
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+/* this is stolen from the kernel but it's totally fair use dude...  */
+#define __GFP_DMA       (0x01u)
+#define __GFP_HIGHMEM   (0x02u)
+#define __GFP_DMA32     (0x04u)
+#define __GFP_MOVABLE   (0x08u)
+#define GFP_ZONEMASK    (__GFP_DMA|__GFP_HIGHMEM|__GFP_DMA32|__GFP_MOVABLE)
+
+static void match_alloc(const char *fn, struct expression *expr, void *_arg)
+{
+	int arg_nr = PTR_INT(_arg);
+	struct expression *arg_expr;
+	sval_t sval;
+
+	arg_expr = get_argument_from_call_expr(expr->args, arg_nr);
+	if (!get_value(arg_expr, &sval))
+		return;
+	if (sval.uvalue == 0) /* GFP_NOWAIT */
+		return;
+	if (!(sval.uvalue & ~GFP_ZONEMASK))
+		sm_error("no modifiers for allocation.");
+}
+
+void check_gfp_dma(int id)
+{
+	my_id = id;
+	if (option_project != PROJ_KERNEL)
+		return;
+	add_function_hook("kmalloc", &match_alloc, INT_PTR(1));
+	add_function_hook("kzalloc", &match_alloc, INT_PTR(1));
+}
--- /dev/null	Fri Dec 21 15:00:04 2018
+++ new/usr/src/tools/smatch/src/check_held_dev.c	Fri Dec 21 15:00:04 2018
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This check is supposed to find bugs in reference counting using dev_hold()
+ * and dev_put().
+ *
+ * When a device is first held, if an error happens later in the function
+ * it needs to be released on all the error paths.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+STATE(held);
+STATE(released);
+
+static void match_dev_hold(const char *fn, struct expression *expr, void *data)
+{
+	struct expression *arg_expr;
+
+	arg_expr = get_argument_from_call_expr(expr->args, 0);
+	set_state_expr(my_id, arg_expr, &held);
+}
+
+static void match_dev_put(const char *fn, struct expression *expr, void *data)
+{
+	struct expression *arg_expr;
+
+	arg_expr = get_argument_from_call_expr(expr->args, 0);
+	set_state_expr(my_id, arg_expr, &released);
+}
+
+static void match_returns_held(const char *fn, struct expression *call_expr,
+			struct expression *assign_expr, void *unused)
+{
+	if (assign_expr)
+		set_state_expr(my_id, assign_expr->left, &held);
+}
+
+static void match_returns_null(const char *fn, struct expression *call_expr,
+			struct expression *assign_expr, void *unused)
+{
+	if (assign_expr)
+		set_state_expr(my_id, assign_expr->left, &released);
+}
+
+static void check_for_held(void)
+{
+	struct stree *stree;
+	struct sm_state *tmp;
+
+	stree = __get_cur_stree();
+	FOR_EACH_MY_SM(my_id, stree, tmp) {
+		if (slist_has_state(tmp->possible, &held)) {
+			sm_warning("'%s' held on error path.",
+				tmp->name);
+		}
+	} END_FOR_EACH_SM(tmp);
+}
+
+static void print_returns_held(struct expression *expr)
+{
+	struct sm_state *sm;
+
+	if (!option_info)
+		return;
+	sm = get_sm_state_expr(my_id, expr);
+	if (!sm)
+		return;
+	if (slist_has_state(sm->possible, &held))
+		sm_info("returned dev is held.");
+}
+
+static void match_return(struct expression *ret_value)
+{
+	print_returns_held(ret_value);
+	if (!is_error_return(ret_value))
+		return;
+	check_for_held();
+}
+
+static void register_returns_held_funcs(void)
+{
+	struct token *token;
+	const char *func;
+
+	token = get_tokens_file("kernel.returns_held_funcs");
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		func = show_ident(token->ident);
+		return_implies_state(func, valid_ptr_min, valid_ptr_max,
+				     &match_returns_held, NULL);
+		return_implies_state(func, 0, 0, &match_returns_null,
+					 NULL);
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+void check_held_dev(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	my_id = id;
+	add_function_hook("dev_hold", &match_dev_hold, NULL);
+	add_function_hook("dev_put", &match_dev_put, NULL);
+	register_returns_held_funcs();
+	add_hook(&match_return, RETURN_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:04 2018
+++ new/usr/src/tools/smatch/src/check_implicit_dependencies.c	Fri Dec 21 15:00:04 2018
@@ -0,0 +1,309 @@
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+/* If set, we ignore struct type symbols as implicit dependencies */
+static int ignore_structs;
+
+static struct symbol *cur_syscall;
+/* note: cannot track return type and remove from implicit dependencies,
+ * because every syscall returns a long, and we don't have a good way to know
+ * whether or not this is a resource. The only example I can think of is open
+ * returning a filedescriptor, so in the implicit dep parsing, we will just
+ * blacklist struct fd --> file
+ */
+static struct symbol *cur_return_type;
+static char *syscall_name;
+
+static struct tracker_list *read_list;	// what fields does syscall branch on?
+static struct tracker_list *write_list; // what fields does syscall modify?
+static struct tracker_list *arg_list;	// what struct arguments does the syscall take?
+static struct tracker_list *parsed_syscalls; // syscalls we have already checked
+
+static inline void prefix(void)
+{
+	printf("%s:%d %s() ", get_filename(), get_lineno(), get_function());
+}
+
+static void match_syscall_definition(struct symbol *sym)
+{
+	struct symbol *arg;
+	struct tracker *tracker;
+	char *macro;
+	char *name;
+	int is_syscall = 0;
+
+	macro = get_macro_name(sym->pos);
+	if (macro &&
+	    (strncmp("SYSCALL_DEFINE", macro, strlen("SYSCALL_DEFINE")) == 0 ||
+	     strncmp("COMPAT_SYSCALL_DEFINE", macro, strlen("COMPAT_SYSCALL_DEFINE")) == 0))
+		is_syscall = 1;
+
+	name = get_function();
+
+	if (name && strncmp(name, "sys_", 4) == 0)
+		is_syscall = 1;
+
+	if (name && strncmp(name, "compat_sys_", 11) == 0)
+		is_syscall = 1;
+
+	if (!is_syscall)
+		return;
+
+	FOR_EACH_PTR(parsed_syscalls, tracker) {
+		if (tracker->sym == sym) // don't re-parse
+			return;
+	} END_FOR_EACH_PTR(tracker);
+
+	syscall_name = name;
+	cur_syscall = sym;
+
+	cur_return_type = cur_func_return_type();
+	if (cur_return_type && cur_return_type->ident)
+		sm_msg("return type: %s\n", cur_return_type->ident->name);
+
+
+	FOR_EACH_PTR(sym->ctype.base_type->arguments, arg) {
+		// set_state(my_id, arg->ident->name, arg, &user_data_set);
+		sm_msg("=======check_impl: arguments for call %s=========\n", syscall_name);
+		if (arg->type == SYM_STRUCT)
+			arg = get_real_base_type(arg);
+		if (cur_return_type && cur_return_type->ident)
+			sm_msg("arg type: %s\n", cur_return_type->ident->name);
+		// add_tracker(&arg_list, my_id, member, arg);
+		sm_msg("=================================\n");
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void print_read_list(void)
+{
+    struct tracker *tracker;
+    int i = 0;
+
+    FOR_EACH_PTR(read_list, tracker) {
+	    if (i == 0)
+		    sm_printf("%s read_list: [", syscall_name);
+	    sm_printf("%s, ", tracker->name);
+	    i++;
+    } END_FOR_EACH_PTR(tracker);
+
+    if (i > 0)
+	    sm_printf("]\n");
+}
+
+static void print_write_list(void)
+{
+	struct tracker *tracker;
+	int i = 0;
+
+	FOR_EACH_PTR(write_list, tracker) {
+		if (i == 0)
+			sm_printf("%s write_list: [", syscall_name);
+		sm_printf("%s, ", tracker->name);
+		i++;
+	} END_FOR_EACH_PTR(tracker);
+
+	if (i > 0)
+		sm_printf("]\n");
+}
+
+static void print_arg_list(void)
+{
+	struct tracker *tracker;
+	int i = 0;
+
+	FOR_EACH_PTR(write_list, tracker) {
+		if (i == 0)
+			sm_printf("%s arg_list: [", syscall_name);
+		sm_printf("%s, ", tracker->name);
+		i++;
+	} END_FOR_EACH_PTR(tracker);
+
+	if (i > 0)
+		sm_printf("]\n");
+}
+
+static void match_after_syscall(struct symbol *sym)
+{
+	if (!cur_syscall || sym != cur_syscall)
+		return;
+	// printf("\n"); prefix();
+	// printf("exiting scope of syscall %s\n", get_function());
+	// printf("-------------------------\n");
+	print_read_list();
+	print_write_list();
+	print_arg_list();
+	free_trackers_and_list(&read_list);
+	free_trackers_and_list(&write_list);
+	free_trackers_and_list(&arg_list);
+	add_tracker(&parsed_syscalls, my_id, syscall_name, sym);
+	cur_syscall = NULL;
+	cur_return_type = NULL;
+	syscall_name = NULL;
+}
+
+static void print_read_member_type(struct expression *expr)
+{
+	char *member;
+	struct symbol *sym;
+	struct symbol *member_sym;
+
+	member = get_member_name(expr);
+	if (!member)
+		return;
+
+	sym = get_type(expr->deref);
+	member_sym = get_type(expr);
+
+	if (member_sym->type == SYM_PTR)
+		member_sym = get_real_base_type(member_sym);
+
+	/*
+	if (member_sym->type == SYM_STRUCT)
+		printf("found struct type %s\n", member);
+	else
+		printf("found non-struct type %s with enum value%d\n", member, member_sym->type);
+	*/
+
+	if (ignore_structs && member_sym->type == SYM_STRUCT) {
+		// printf("ignoring %s\n", member);
+		return;
+	}
+
+	add_tracker(&read_list, my_id, member, sym);
+	// sm_msg("info: uses %s", member);
+	// prefix();
+	// printf("info: uses %s\n", member);
+	free_string(member);
+}
+
+static void print_write_member_type(struct expression *expr)
+{
+	char *member;
+	struct symbol *sym;
+	struct symbol *member_sym;
+
+	member = get_member_name(expr);
+	if (!member)
+		return;
+
+	sym = get_type(expr->deref);
+	member_sym = get_type(expr);
+
+	if (member_sym->type == SYM_PTR)
+		member_sym = get_real_base_type(member_sym);
+
+	/*
+	if (member_sym->type == SYM_STRUCT)
+		printf("found struct type %s\n", member);
+	else
+		printf("found non-struct type %s with enum value%d\n", member, member_sym->type);
+	*/
+
+	if (ignore_structs && member_sym->type == SYM_STRUCT) {
+		// printf("ignoring %s\n", member);
+		return;
+	}
+
+	add_tracker(&write_list, my_id, member, sym);
+	free_string(member);
+}
+
+static void match_condition(struct expression *expr)
+{
+	struct expression *arg;
+
+	if (!cur_syscall)
+		return;
+
+	// prefix(); printf("-- condition found\n");
+
+	if (expr->type == EXPR_COMPARE ||
+	    expr->type == EXPR_BINOP ||
+	    expr->type == EXPR_LOGICAL ||
+	    expr->type == EXPR_ASSIGNMENT ||
+	    expr->type == EXPR_COMMA) {
+		match_condition(expr->left);
+		match_condition(expr->right);
+		return;
+	}
+
+	if (expr->type == EXPR_CALL) {
+		FOR_EACH_PTR(expr->args, arg) {
+			// if we find deref in conditional call,
+			// mark it as a read dependency
+			print_read_member_type(arg);
+		} END_FOR_EACH_PTR(arg);
+		return;
+	}
+
+	print_read_member_type(expr);
+}
+
+
+/* when we are parsing an inline function and can no longer nest,
+ * assume that all struct fields passed to nested inline functions
+ * are read dependencies
+ */
+static void match_call_info(struct expression *expr)
+{
+	struct expression *arg;
+	int i;
+
+	if (!__inline_fn || !cur_syscall)
+		return;
+
+	// prefix(); printf("fn: %s\n", expr->fn->symbol->ident->name);
+
+	i = 0;
+	FOR_EACH_PTR(expr->args, arg) {
+		/*
+		   if (arg->type == EXPR_DEREF)
+		   printf("arg %d is deref\n", i);
+		 */
+		print_read_member_type(arg);
+		i++;
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void match_assign_value(struct expression *expr)
+{
+	if (!cur_syscall)
+		return;
+	print_write_member_type(expr->left);
+}
+
+static void unop_expr(struct expression *expr)
+{
+	if (!cur_syscall)
+		return;
+
+	if (expr->op == SPECIAL_ADD_ASSIGN || expr->op == SPECIAL_INCREMENT ||
+	    expr->op == SPECIAL_SUB_ASSIGN || expr->op == SPECIAL_DECREMENT ||
+	    expr->op == SPECIAL_MUL_ASSIGN || expr->op == SPECIAL_DIV_ASSIGN ||
+	    expr->op == SPECIAL_MOD_ASSIGN || expr->op == SPECIAL_AND_ASSIGN ||
+	    expr->op == SPECIAL_OR_ASSIGN || expr->op == SPECIAL_XOR_ASSIGN ||
+	    expr->op == SPECIAL_SHL_ASSIGN || expr->op == SPECIAL_SHR_ASSIGN)
+		print_write_member_type(strip_expr(expr->unop));
+}
+
+void check_implicit_dependencies(int id)
+{
+	my_id = id;
+	ignore_structs = 0;
+
+	if (option_project != PROJ_KERNEL)
+		return;
+	if (!option_info)
+		return;
+
+	add_hook(&match_syscall_definition, AFTER_DEF_HOOK);
+	add_hook(&match_after_syscall, AFTER_FUNC_HOOK);
+	add_hook(&match_condition, CONDITION_HOOK);
+	add_hook(&match_call_info, FUNCTION_CALL_HOOK);
+
+	/* hooks to track written fields */
+	add_hook(&match_assign_value, ASSIGNMENT_HOOK_AFTER);
+	add_hook(&unop_expr, OP_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:04 2018
+++ new/usr/src/tools/smatch/src/check_implicit_dependencies_tester.c	Fri Dec 21 15:00:04 2018
@@ -0,0 +1,168 @@
+#include "smatch.h"
+#include "linearize.h"
+
+static int my_id;
+static struct symbol *cur_syscall;
+
+static const char *expression_type_name(enum expression_type type)
+{
+	static const char *expression_type_name[] = {
+		[EXPR_VALUE] = "EXPR_VALUE",
+		[EXPR_STRING] = "EXPR_STRING",
+		[EXPR_SYMBOL] = "EXPR_SYMBOL",
+		[EXPR_TYPE] = "EXPR_TYPE",
+		[EXPR_BINOP] = "EXPR_BINOP",
+		[EXPR_ASSIGNMENT] = "EXPR_ASSIGNMENT",
+		[EXPR_LOGICAL] = "EXPR_LOGICAL",
+		[EXPR_DEREF] = "EXPR_DEREF",
+		[EXPR_PREOP] = "EXPR_PREOP",
+		[EXPR_POSTOP] = "EXPR_POSTOP",
+		[EXPR_CAST] = "EXPR_CAST",
+		[EXPR_FORCE_CAST] = "EXPR_FORCE_CAST",
+		[EXPR_IMPLIED_CAST] = "EXPR_IMPLIED_CAST",
+		[EXPR_SIZEOF] = "EXPR_SIZEOF",
+		[EXPR_ALIGNOF] = "EXPR_ALIGNOF",
+		[EXPR_PTRSIZEOF] = "EXPR_PTRSIZEOF",
+		[EXPR_CONDITIONAL] = "EXPR_CONDITIONAL",
+		[EXPR_SELECT] = "EXPR_SELECT",
+		[EXPR_STATEMENT] = "EXPR_STATEMENT",
+		[EXPR_CALL] = "EXPR_CALL",
+		[EXPR_COMMA] = "EXPR_COMMA",
+		[EXPR_COMPARE] = "EXPR_COMPARE",
+		[EXPR_LABEL] = "EXPR_LABEL",
+		[EXPR_INITIALIZER] = "EXPR_INITIALIZER",
+		[EXPR_IDENTIFIER] = "EXPR_IDENTIFIER",
+		[EXPR_INDEX] = "EXPR_INDEX",
+		[EXPR_POS] = "EXPR_POS",
+		[EXPR_FVALUE] = "EXPR_FVALUE",
+		[EXPR_SLICE] = "EXPR_SLICE",
+		[EXPR_OFFSETOF] = "EXPR_OFFSETOF",
+	};
+	return expression_type_name[type] ?: "UNKNOWN_EXPRESSION_TYPE";
+}
+
+static inline void prefix() {
+	printf("%s:%d %s() ", get_filename(), get_lineno(), get_function());
+}
+
+static void match_syscall_definition(struct symbol *sym)
+{
+	// struct symbol *arg;
+	char *macro;
+	char *name;
+	int is_syscall = 0;
+
+	macro = get_macro_name(sym->pos);
+	if (macro &&
+	    (strncmp("SYSCALL_DEFINE", macro, strlen("SYSCALL_DEFINE")) == 0 ||
+	     strncmp("COMPAT_SYSCALL_DEFINE", macro, strlen("COMPAT_SYSCALL_DEFINE")) == 0))
+		is_syscall = 1;
+
+	name = get_function();
+	
+	/* 
+	if (!option_no_db && get_state(my_id, "this_function", NULL) != &called) {
+		if (name && strncmp(name, "sys_", 4) == 0)
+			is_syscall = 1;
+	}
+	*/
+
+	/* Ignore compat_sys b/c syzkaller doesn't fuzz these?
+	if (name && strncmp(name, "compat_sys_", 11) == 0)
+		is_syscall = 1;
+	*/
+
+	if (!is_syscall)
+		return;
+	printf("-------------------------\n");	
+	printf("\nsyscall found: %s at: ", name);
+	prefix(); printf("\n");
+	cur_syscall = sym;
+
+	/*
+	FOR_EACH_PTR(sym->ctype.base_type->arguments, arg) {
+		set_state(my_id, arg->ident->name, arg, &user_data_set);
+	} END_FOR_EACH_PTR(arg);
+	*/
+}
+
+static void match_after_syscall(struct symbol *sym) {
+    if (cur_syscall && sym == cur_syscall) {
+	printf("\n"); prefix();
+	printf("exiting scope of syscall %s\n", get_function());
+	printf("-------------------------\n");	
+	cur_syscall = NULL;
+    }
+}
+
+static void print_member_type(struct expression *expr)
+{
+	char *member;
+
+	member = get_member_name(expr);
+	if (!member)
+		return;
+	// sm_msg("info: uses %s", member);
+	prefix();
+	printf("info: uses %s\n", member);
+	free_string(member);
+}
+
+static void match_condition(struct expression *expr) {
+    if (!cur_syscall)
+	return;
+    
+    /*
+    prefix();
+    printf("found conditional %s on line %d\n", expression_type_name(expr->type), get_lineno());
+    printf("expr_str: %s\n", expr_to_str(expr));
+    */
+
+    /* 
+    switch (expr->type) {
+	case EXPR_COMPARE:
+	    match_condition(expr->left);
+	    match_condition(expr->right);
+	    break;
+	case EXPR_SYMBOL:
+	    printf("symbol: %s\n", expr->symbol_name->name);
+	    break;
+	case EXPR_CALL:
+	    break;
+    }
+    */
+
+    prefix(); printf("-- condition found\n");
+
+    if (expr->type == EXPR_COMPARE || expr->type == EXPR_BINOP
+	    || expr->type == EXPR_LOGICAL
+	    || expr->type == EXPR_ASSIGNMENT
+	    || expr->type == EXPR_COMMA) {
+	    match_condition(expr->left);
+	    match_condition(expr->right);
+	    return;
+    }
+    print_member_type(expr);
+
+}
+
+static void match_function_call(struct expression *expr) {
+    if (!cur_syscall)
+	return;
+    prefix();
+    printf("function call %s\n", expression_type_name(expr->type)); 
+}
+
+void check_implicit_dependencies_tester(int id)
+{
+    my_id = id;
+
+    if (option_project != PROJ_KERNEL)
+	return;
+
+    add_hook(&match_syscall_definition, AFTER_DEF_HOOK);
+    add_hook(&match_after_syscall, AFTER_FUNC_HOOK);
+    add_hook(&match_condition, CONDITION_HOOK);
+    add_hook(&match_function_call, FUNCTION_CALL_HOOK);
+}
+
--- /dev/null	Fri Dec 21 15:00:04 2018
+++ new/usr/src/tools/smatch/src/check_impossible_mask.c	Fri Dec 21 15:00:04 2018
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+#if 0
+static unsigned long long find_possible_bits(struct expression *expr)
+{
+	sval_t sval;
+	unsigned long long ret;
+	int set;
+	int i;
+
+	expr = strip_expr(expr);
+
+	if (get_implied_value(expr, &sval))
+		return sval.uvalue;
+
+	if (expr->type == EXPR_BINOP && (expr->op == '&' || expr->op == '|')) {
+		unsigned long long left, right;
+
+		left = find_possible_bits(expr->left);
+		if (!left)
+			return 0;
+		right = find_possible_bits(expr->right);
+		if (!right)
+			return 0;
+
+		if (expr->op == '&')
+			return left & right;
+		return left | right;
+	}
+
+	get_absolute_max(expr, &sval);
+	ret = sval.value;
+
+	set = false;
+	for (i = 63; i >= 0; i--) {
+		if (ret & 1 << i)
+			set = true;
+		if (set)
+			ret |= 1 << i;
+	}
+	return ret;
+}
+#endif
+
+static unsigned long long get_possible_bits(struct expression *expr)
+{
+	sval_t sval;
+
+	expr = strip_expr(expr);
+	if (expr->type != EXPR_BINOP)
+		return 0;
+	if (expr->op != '&')
+		return 0;
+	if (!get_implied_value(expr->right, &sval))
+		return 0;
+
+	return sval.uvalue;
+}
+
+static void match_condition(struct expression *expr)
+{
+	struct symbol *type;
+	sval_t sval;
+	unsigned long long left_mask, right_mask;
+	char *str;
+
+	type = get_type(expr);
+	if (!type)
+		type = &int_ctype;
+
+	if (expr->type != EXPR_COMPARE)
+		return;
+	if (expr->op != SPECIAL_EQUAL && expr->op != SPECIAL_NOTEQUAL)
+		return;
+
+	if (!get_value(expr->right, &sval))
+		return;
+	right_mask = sval.uvalue;
+
+	left_mask = get_possible_bits(expr->left);
+	if (!left_mask)
+		return;
+
+	if (type_bits(type) < 64) {
+		left_mask &= (1ULL << type_bits(type)) - 1;
+		right_mask &= (1ULL << type_bits(type)) - 1;
+	}
+
+	if ((left_mask & right_mask) == right_mask)
+		return;
+
+	str = expr_to_str(expr);
+	sm_warning("masked condition '%s' is always %s.", str,
+	       expr->op == SPECIAL_EQUAL ? "false" : "true");
+	free_string(str);
+}
+
+void check_impossible_mask(int id)
+{
+	my_id = id;
+
+	add_hook(&match_condition, CONDITION_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:04 2018
+++ new/usr/src/tools/smatch/src/check_indenting.c	Fri Dec 21 15:00:04 2018
@@ -0,0 +1,237 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static struct string_list *ignored_macros;
+
+static int in_ignored_macro(struct statement *stmt)
+{
+	const char *macro;
+	char *tmp;
+
+	macro = get_macro_name(stmt->pos);
+	if (!macro)
+		return 0;
+
+	FOR_EACH_PTR(ignored_macros, tmp) {
+		if (!strcmp(tmp, macro))
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+	return 0;
+}
+
+static int missing_curly_braces(struct statement *stmt)
+{
+	int inside_pos;
+
+	if (stmt->pos.pos == __prev_stmt->pos.pos)
+		return 0;
+
+	if (__prev_stmt->type == STMT_IF) {
+		if (__prev_stmt->if_true->type == STMT_COMPOUND)
+			return 0;
+		inside_pos = __prev_stmt->if_true->pos.pos;
+	} else if (__prev_stmt->type == STMT_ITERATOR) {
+		if (!__prev_stmt->iterator_pre_condition)
+			return 0;
+		if (__prev_stmt->iterator_statement->type == STMT_COMPOUND)
+			return 0;
+		inside_pos = __prev_stmt->iterator_statement->pos.pos;
+	} else {
+		return 0;
+	}
+
+	if (stmt->pos.pos != inside_pos)
+		return 0;
+
+	sm_warning("curly braces intended?");
+	return 1;
+}
+
+static int prev_lines_say_endif(struct statement *stmt)
+{
+	struct token *token;
+	struct position pos = stmt->pos;
+	int i;
+
+	pos.pos = 2;
+
+	for (i = 0; i < 4; i++) {
+		pos.line--;
+		token = pos_get_token(pos);
+		if (token && token_type(token) == TOKEN_IDENT &&
+		    strcmp(show_ident(token->ident), "endif") == 0)
+			return 1;
+	}
+
+	return 0;
+}
+
+static int is_pre_or_post_statement(struct statement *stmt)
+{
+	if (!stmt->parent)
+		return 0;
+	if (stmt->parent->type != STMT_ITERATOR)
+		return 0;
+	if (stmt->parent->iterator_pre_statement == stmt ||
+	    stmt->parent->iterator_post_statement == stmt)
+		return 1;
+	return 0;
+}
+
+/*
+ * If we go out of position, then warn, but don't warn when we go back
+ * into the correct position.
+ */
+static int orig_pos;
+
+/*
+ * If the code has two statements on the same line then don't complain
+ * on the following line.  This is a bit of hack because it relies on the
+ * quirk that we don't process nested inline functions.
+ */
+static struct position ignore_prev;
+static struct position ignore_prev_inline;
+
+static void match_stmt(struct statement *stmt)
+{
+	if (stmt != __cur_stmt)
+		return;
+	if (!__prev_stmt)
+		return;
+
+	if (prev_lines_say_endif(stmt))
+		return;
+
+	if (is_pre_or_post_statement(stmt))
+		return;
+	/* ignore empty statements if (foo) frob();; */
+	if (stmt->type == STMT_EXPRESSION && !stmt->expression)
+		return;
+	if (__prev_stmt->type == STMT_EXPRESSION && !__prev_stmt->expression)
+		return;
+
+	if (__prev_stmt->type == STMT_LABEL || __prev_stmt->type == STMT_CASE)
+		return;
+	/*
+	 * This is sort of ugly.  The first statement after a case/label is
+	 * special.  Probably we should handle this in smatch_flow.c so that
+	 * this is not a special case.  Anyway it's like this:
+	 * "foo: one++; two++;"  The code is on the same line.
+	 * Also there is still a false positive here, if the first case
+	 * statement has two statements on the same line.  I'm not sure what the
+	 * deal is with that.
+	 */
+	if (stmt->type == STMT_CASE) {
+		if (__next_stmt &&
+		    __next_stmt->pos.line == stmt->case_statement->pos.line)
+			ignore_prev = __next_stmt->pos;
+		return;
+	}
+	if (stmt->type == STMT_LABEL) {
+		if (__next_stmt &&
+		    __next_stmt->pos.line == stmt->label_statement->pos.line)
+			ignore_prev = __next_stmt->pos;
+		return;
+	}
+
+	if (missing_curly_braces(stmt))
+		return;
+
+	if (stmt->pos.line == __prev_stmt->pos.line) {
+		if (__inline_fn)
+			ignore_prev_inline = stmt->pos;
+		else
+			ignore_prev = stmt->pos;
+		return;
+	}
+	if (stmt->pos.pos == __prev_stmt->pos.pos)
+		return;
+
+	/* some people like to line up their break and case statements. */
+	if (stmt->type == STMT_GOTO && stmt->goto_label &&
+	    stmt->goto_label->type == SYM_NODE &&
+	    strcmp(stmt->goto_label->ident->name, "break") == 0) {
+		if (__next_stmt && __next_stmt->type == STMT_CASE &&
+		    (stmt->pos.line == __next_stmt->pos.line ||
+		     stmt->pos.pos == __next_stmt->pos.pos))
+			return;
+		/*
+		 * If we have a compound and the last statement is a break then
+		 * it's probably intentional.  This is most likely inside a
+		 * case statement.
+		 */
+		if (!__next_stmt)
+			return;
+	}
+
+	if (cmp_pos(__prev_stmt->pos, ignore_prev) == 0 ||
+	    cmp_pos(__prev_stmt->pos, ignore_prev_inline) == 0)
+		return;
+
+	if (in_ignored_macro(stmt))
+		return;
+
+	if (stmt->pos.pos == orig_pos) {
+		orig_pos = 0;
+		return;
+	}
+	sm_warning("inconsistent indenting");
+	orig_pos = __prev_stmt->pos.pos;
+}
+
+static void match_end_func(void)
+{
+	if (__inline_fn)
+		return;
+	orig_pos = 0;
+}
+
+static void register_ignored_macros(void)
+{
+	struct token *token;
+	char *macro;
+	char name[256];
+
+	snprintf(name, 256, "%s.ignore_macro_indenting", option_project_str);
+
+	token = get_tokens_file(name);
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		macro = alloc_string(show_ident(token->ident));
+		add_ptr_list(&ignored_macros, macro);
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+void check_indenting(int id)
+{
+	my_id = id;
+	add_hook(&match_stmt, STMT_HOOK);
+	add_hook(&match_end_func, END_FUNC_HOOK);
+	register_ignored_macros();
+}
--- /dev/null	Fri Dec 21 15:00:04 2018
+++ new/usr/src/tools/smatch/src/check_index_overflow.c	Fri Dec 21 15:00:04 2018
@@ -0,0 +1,367 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include <stdlib.h>
+#include "parse.h"
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int loop_id;
+
+STATE(loop_end);
+
+static int definitely_just_used_as_limiter(struct expression *array, struct expression *offset)
+{
+	sval_t sval;
+	struct expression *tmp;
+
+	if (!get_implied_value(offset, &sval))
+		return 0;
+	if (get_array_size(array) != sval.value)
+		return 0;
+
+	tmp = array;
+	while ((tmp = expr_get_parent_expr(tmp))) {
+		if (tmp->type == EXPR_PREOP && tmp->op == '&')
+			return 1;
+	}
+
+	return 0;
+}
+
+static int fake_get_hard_max(struct expression *expr, sval_t *sval)
+{
+	struct range_list *implied_rl;
+
+	if (!get_hard_max(expr, sval))
+		return 0;
+
+	/*
+	 * The problem is that hard_max doesn't care about minimums
+	 * properly.  So if you give it thing like:
+	 *	err = (-10)-(-1)
+	 *	__smatch_hard_max(-err);
+	 *
+	 * Then it returns s32max instead of 10.
+	 */
+
+	if (get_implied_rl(expr, &implied_rl) &&
+	    sval_cmp(rl_max(implied_rl), *sval) < 0)
+		*sval = rl_max(implied_rl);
+	return 1;
+}
+
+static int get_the_max(struct expression *expr, sval_t *sval)
+{
+	struct range_list *rl;
+
+	if (get_hard_max(expr, sval)) {
+		struct range_list *implied_rl;
+
+		/*
+		 * The problem is that hard_max doesn't care about minimums
+		 * properly.  So if you give it thing like:
+		 *	err = (-10)-(-1)
+		 *	__smatch_hard_max(-err);
+		 *
+		 * Then it returns s32max instead of 10.
+		 */
+
+		if (get_implied_rl(expr, &implied_rl) &&
+		    sval_cmp(rl_max(implied_rl), *sval) < 0)
+			*sval = rl_max(implied_rl);
+		return 1;
+	}
+	if (!option_spammy)
+		return 0;
+
+	/* Fixme:  use fuzzy max */
+
+	if (!get_user_rl(expr, &rl))
+		return 0;
+	if (rl_max(rl).uvalue > sval_type_max(rl_type(rl)).uvalue - 4 &&
+	    is_capped(expr))
+		return 0;
+
+	*sval = rl_max(rl);
+	return 1;
+}
+
+static int common_false_positives(struct expression *array, sval_t max)
+{
+	char *name;
+	int ret;
+
+	name = expr_to_str(array);
+
+	/* Smatch can't figure out glibc's strcmp __strcmp_cg()
+	 * so it prints an error every time you compare to a string
+	 * literal array with 4 or less chars.
+	 */
+	if (name &&
+	    (strcmp(name, "__s1") == 0 || strcmp(name, "__s2") == 0)) {
+		ret = 1;
+		goto free;
+	}
+
+	/* Ugh... People are saying that Smatch still barfs on glibc strcmp()
+	 * functions.
+	 */
+	if (array) {
+		char *macro;
+
+		/* why is this again??? */
+		if (array->type == EXPR_STRING &&
+		    max.value == array->string->length) {
+			ret = 1;
+			goto free;
+		}
+
+		macro = get_macro_name(array->pos);
+		if (macro && max.uvalue < 4 &&
+		    (strcmp(macro, "strcmp")  == 0 ||
+		     strcmp(macro, "strncmp") == 0 ||
+		     strcmp(macro, "streq")   == 0 ||
+		     strcmp(macro, "strneq")  == 0 ||
+		     strcmp(macro, "strsep")  == 0)) {
+			ret = 1;
+			goto free;
+		}
+	}
+
+	/*
+	 * passing WORK_CPU_UNBOUND is idiomatic but Smatch doesn't understand
+	 * how it's used so it causes a bunch of false positives.
+	 */
+	if (option_project == PROJ_KERNEL && name &&
+	    strcmp(name, "__per_cpu_offset") == 0) {
+		ret = 1;
+		goto free;
+	}
+	ret = 0;
+
+free:
+	free_string(name);
+	return ret;
+}
+
+static int is_subtract(struct expression *expr)
+{
+	struct expression *tmp;
+	int cnt = 0;
+
+	expr = strip_expr(expr);
+	while ((tmp = get_assigned_expr(expr))) {
+		expr = strip_expr(tmp);
+		if (++cnt > 5)
+			break;
+	}
+
+	if (expr->type == EXPR_BINOP && expr->op == '-')
+		return 1;
+	return 0;
+}
+
+static int constraint_met(struct expression *array_expr, struct expression *offset)
+{
+	char *data_str, *required, *unmet;
+	int ret = 0;
+
+	data_str = get_constraint_str(array_expr);
+	if (!data_str)
+		return 0;
+
+	required = get_required_constraint(data_str);
+	if (!required)
+		goto free_data_str;
+
+	unmet = unmet_constraint(array_expr, offset);
+	if (!unmet)
+		ret = 1;
+	free_string(unmet);
+	free_string(required);
+
+free_data_str:
+	free_string(data_str);
+	return ret;
+}
+
+
+static int should_warn(struct expression *expr)
+{
+	struct expression *array_expr;
+	struct range_list *abs_rl;
+	sval_t hard_max = { .type = &int_ctype, };
+	sval_t fuzzy_max = { .type = &int_ctype, };
+	int array_size;
+	struct expression *offset;
+	sval_t max;
+
+	expr = strip_expr(expr);
+	if (!is_array(expr))
+		return 0;
+
+	if (is_impossible_path())
+		return 0;
+	array_expr = get_array_base(expr);
+	array_size = get_array_size(array_expr);
+	if (!array_size || array_size == 1)
+		return 0;
+
+	offset = get_array_offset(expr);
+	get_absolute_rl(offset, &abs_rl);
+	fake_get_hard_max(offset, &hard_max);
+	get_fuzzy_max(offset, &fuzzy_max);
+
+	if (!get_the_max(offset, &max))
+		return 0;
+	if (array_size > max.value)
+		return 0;
+	if (constraint_met(array_expr, offset))
+		return 0;
+
+	if (array_size > rl_max(abs_rl).uvalue)
+		return 0;
+
+	if (definitely_just_used_as_limiter(array_expr, offset))
+		return 0;
+
+	array_expr = strip_expr(array_expr);
+	if (common_false_positives(array_expr, max))
+		return 0;
+
+	if (impossibly_high_comparison(offset))
+		return 0;
+
+	return 1;
+
+}
+
+static int is_because_of_no_break(struct expression *offset)
+{
+	if (get_state_expr(loop_id, offset) == &loop_end)
+		return 1;
+	return 0;
+}
+
+static void array_check(struct expression *expr)
+{
+	struct expression *array_expr;
+	struct range_list *abs_rl;
+	struct range_list *user_rl = NULL;
+	sval_t hard_max = { .type = &int_ctype, };
+	sval_t fuzzy_max = { .type = &int_ctype, };
+	int array_size;
+	struct expression *array_size_value, *comparison;
+	struct expression *offset;
+	sval_t max;
+	char *name;
+	int no_break = 0;
+
+	if (!should_warn(expr))
+		return;
+
+	expr = strip_expr(expr);
+	array_expr = get_array_base(expr);
+	array_size = get_array_size(array_expr);
+	offset = get_array_offset(expr);
+
+	/*
+	 * Perhaps if the offset is out of bounds that means a constraint
+	 * applies or maybe it means we are on an impossible path.  So test
+	 * again based on that assumption.
+	 *
+	 */
+	array_size_value = value_expr(array_size);
+	comparison = compare_expression(offset, SPECIAL_GTE, array_size_value);
+	if (assume(comparison)) {
+		if (!should_warn(expr)) {
+			end_assume();
+			return;
+		}
+		no_break = is_because_of_no_break(offset);
+		end_assume();
+	}
+
+	get_absolute_rl(offset, &abs_rl);
+	get_user_rl(offset, &user_rl);
+	fake_get_hard_max(offset, &hard_max);
+	get_fuzzy_max(offset, &fuzzy_max);
+
+	array_expr = strip_expr(array_expr);
+	name = expr_to_str(array_expr);
+
+	if (user_rl)
+		max = rl_max(user_rl);
+	else
+		max = rl_max(abs_rl);
+
+	if (!option_spammy && is_subtract(offset))
+		return;
+
+	if (no_break) {
+		sm_error("buffer overflow '%s' %d <= %s (assuming for loop doesn't break)",
+			name, array_size, sval_to_str(max));
+	} else if (user_rl) {
+		sm_error("buffer overflow '%s' %d <= %s user_rl='%s'%s",
+			name, array_size, sval_to_str(max), show_rl(user_rl),
+			is_subtract(offset) ? " subtract" : "");
+	} else {
+		sm_error("buffer overflow '%s' %d <= %s%s",
+			name, array_size, sval_to_str(max),
+			is_subtract(offset) ? " subtract" : "");
+	}
+
+	free_string(name);
+}
+
+void check_index_overflow(int id)
+{
+	add_hook(&array_check, OP_HOOK);
+}
+
+static void match_condition(struct expression *expr)
+{
+	struct statement *stmt;
+
+	if (expr->type != EXPR_COMPARE)
+		return;
+	if (expr->op != '<' && expr->op != SPECIAL_UNSIGNED_LT)
+		return;
+
+	stmt = expr_get_parent_stmt(expr);
+	if (!stmt || stmt->type != STMT_ITERATOR)
+		return;
+
+	set_true_false_states_expr(loop_id, expr->left, NULL, &loop_end);
+}
+
+static void set_undefined(struct sm_state *sm, struct expression *mod_expr)
+{
+	if (sm->state == &loop_end)
+		set_state(loop_id, sm->name, sm->sym, &undefined);
+}
+
+void check_index_overflow_loop_marker(int id)
+{
+	loop_id = id;
+
+	add_hook(&match_condition, CONDITION_HOOK);
+	add_modification_hook(loop_id, &set_undefined);
+}
+
--- /dev/null	Fri Dec 21 15:00:04 2018
+++ new/usr/src/tools/smatch/src/check_info_leak.c	Fri Dec 21 15:00:04 2018
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+STATE(alloced);
+STATE(string);
+
+static char *my_get_variable(struct expression *expr, struct symbol **sym)
+{
+	char *name;
+
+	name = expr_to_var_sym(expr, sym);
+	free_string(name);
+	if (!name || !*sym)
+		return NULL;
+
+	return (*sym)->ident->name;
+}
+
+static void match_kmalloc(const char *fn, struct expression *expr, void *unused)
+{
+	char *name;
+	struct symbol *sym;
+
+	name = my_get_variable(expr->left, &sym);
+	if (!name)
+		return;
+	set_state(my_id, name, sym, &alloced);
+}
+
+static void match_strcpy(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *dest;
+	char *name;
+	struct symbol *sym;
+
+	dest = get_argument_from_call_expr(expr->args, 0);
+	name = my_get_variable(dest, &sym);
+	if (!name || !sym)
+		return;
+	if (!get_state(my_id, name, sym))
+		return;
+	set_state(my_id, name, sym, &string);
+}
+
+static void match_copy_to_user(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *src;
+	char *name;
+	struct symbol *sym;
+	struct sm_state *sm;
+
+	src = get_argument_from_call_expr(expr->args, 1);
+	name = my_get_variable(src, &sym);
+	if (!name || !sym)
+		return;
+	sm = get_sm_state(my_id, name, sym);
+	if (!sm || !slist_has_state(sm->possible, &string))
+		return;
+	name = expr_to_var(src);
+	sm_warning("possible info leak '%s'", name);
+	free_string(name);
+}
+
+void check_info_leak(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+	my_id = id;
+	add_function_assign_hook("kmalloc", &match_kmalloc, NULL);
+	add_function_hook("strcpy", &match_strcpy, NULL);
+	add_function_hook("strlcpy", &match_strcpy, NULL);
+	add_function_hook("strlcat", &match_strcpy, NULL);
+	add_function_hook("strncpy", &match_strcpy, NULL);
+	add_function_hook("copy_to_user", &match_copy_to_user, NULL);
+}
--- /dev/null	Fri Dec 21 15:00:04 2018
+++ new/usr/src/tools/smatch/src/check_input_free_device.c	Fri Dec 21 15:00:04 2018
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Don't call input_free_device() after calling
+ * input_unregister_device()
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+STATE(no_free);
+STATE(ok);
+
+static int my_id;
+
+static void match_assign(struct expression *expr)
+{
+	if (get_state_expr(my_id, expr->left)) {
+		set_state_expr(my_id, expr->left, &ok);
+	}
+}
+
+static void match_input_unregister(const char *fn, struct expression *expr, void *data)
+{
+	struct expression *arg;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	set_state_expr(my_id, arg, &no_free);
+}
+
+static void match_input_free(const char *fn, struct expression *expr, void *data)
+{
+	struct expression *arg;
+	struct sm_state *sm;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	sm = get_sm_state_expr(my_id, arg);
+	if (!sm)
+		return;
+	if (!slist_has_state(sm->possible, &no_free))
+		return;
+	sm_error("don't call input_free_device() after input_unregister_device()");
+}
+
+void check_input_free_device(int id)
+{
+	my_id = id;
+	if (option_project != PROJ_KERNEL)
+		return;
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+	add_function_hook("input_unregister_device", &match_input_unregister, NULL);
+	add_function_hook("input_free_device", &match_input_free, NULL);
+}
--- /dev/null	Fri Dec 21 15:00:04 2018
+++ new/usr/src/tools/smatch/src/check_kernel.c	Fri Dec 21 15:00:04 2018
@@ -0,0 +1,416 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This is kernel specific stuff for smatch_extra.
+ */
+
+#include "scope.h"
+#include "smatch.h"
+#include "smatch_extra.h"
+
+static int implied_err_cast_return(struct expression *call, void *unused, struct range_list **rl)
+{
+	struct expression *arg;
+
+	arg = get_argument_from_call_expr(call->args, 0);
+	if (!get_implied_rl(arg, rl))
+		*rl = alloc_rl(ll_to_sval(-4095), ll_to_sval(-1));
+	return 1;
+}
+
+static void hack_ERR_PTR(struct symbol *sym)
+{
+	struct symbol *arg;
+	struct smatch_state *estate;
+	struct range_list *after;
+	sval_t low_error;
+	sval_t minus_one;
+	sval_t zero;
+
+	low_error.type = &long_ctype;
+	low_error.value = -4095;
+
+	minus_one.type = &long_ctype;
+	minus_one.value = -1;
+
+	zero.type = &long_ctype;
+	zero.value = 0;
+
+	if (!sym || !sym->ident)
+		return;
+	if (strcmp(sym->ident->name, "ERR_PTR") != 0)
+		return;
+
+	arg = first_ptr_list((struct ptr_list *)sym->ctype.base_type->arguments);
+	if (!arg || !arg->ident)
+		return;
+
+	estate = get_state(SMATCH_EXTRA, arg->ident->name, arg);
+	if (!estate) {
+		after = alloc_rl(low_error, minus_one);
+	} else {
+		after = rl_intersection(estate_rl(estate), alloc_rl(low_error, zero));
+		if (rl_equiv(estate_rl(estate), after))
+			return;
+	}
+	set_state(SMATCH_EXTRA, arg->ident->name, arg, alloc_estate_rl(after));
+}
+
+static void match_param_valid_ptr(const char *fn, struct expression *call_expr,
+			struct expression *assign_expr, void *_param)
+{
+	int param = PTR_INT(_param);
+	struct expression *arg;
+	struct smatch_state *pre_state;
+	struct smatch_state *end_state;
+
+	arg = get_argument_from_call_expr(call_expr->args, param);
+	pre_state = get_state_expr(SMATCH_EXTRA, arg);
+	end_state = estate_filter_range(pre_state, ll_to_sval(-4095), ll_to_sval(0));
+	set_extra_expr_nomod(arg, end_state);
+}
+
+static void match_param_err_or_null(const char *fn, struct expression *call_expr,
+			struct expression *assign_expr, void *_param)
+{
+	int param = PTR_INT(_param);
+	struct expression *arg;
+	struct range_list *rl;
+	struct smatch_state *pre_state;
+	struct smatch_state *end_state;
+
+	arg = get_argument_from_call_expr(call_expr->args, param);
+	pre_state = get_state_expr(SMATCH_EXTRA, arg);
+	rl = alloc_rl(ll_to_sval(-4095), ll_to_sval(0));
+	rl = rl_intersection(estate_rl(pre_state), rl);
+	rl = cast_rl(estate_type(pre_state), rl);
+	end_state = alloc_estate_rl(rl);
+	set_extra_expr_nomod(arg, end_state);
+}
+
+static void match_not_err(const char *fn, struct expression *call_expr,
+			struct expression *assign_expr, void *unused)
+{
+	struct expression *arg;
+	struct smatch_state *pre_state;
+	struct smatch_state *new_state;
+
+	arg = get_argument_from_call_expr(call_expr->args, 0);
+	pre_state = get_state_expr(SMATCH_EXTRA, arg);
+	new_state = estate_filter_range(pre_state, sval_type_min(&long_ctype), ll_to_sval(-1));
+	set_extra_expr_nomod(arg, new_state);
+}
+
+static void match_err(const char *fn, struct expression *call_expr,
+			struct expression *assign_expr, void *unused)
+{
+	struct expression *arg;
+	struct smatch_state *pre_state;
+	struct smatch_state *new_state;
+
+	arg = get_argument_from_call_expr(call_expr->args, 0);
+	pre_state = get_state_expr(SMATCH_EXTRA, arg);
+	new_state = estate_filter_range(pre_state, sval_type_min(&long_ctype), ll_to_sval(-4096));
+	new_state = estate_filter_range(new_state, ll_to_sval(0), sval_type_max(&long_ctype));
+	set_extra_expr_nomod(arg, new_state);
+}
+
+static void match_container_of_macro(const char *fn, struct expression *expr, void *unused)
+{
+	set_extra_expr_mod(expr->left, alloc_estate_range(valid_ptr_min_sval, valid_ptr_max_sval));
+}
+
+static void match_container_of(struct expression *expr)
+{
+	struct expression *right = expr->right;
+	char *macro;
+
+	/*
+	 * The problem here is that sometimes the container_of() macro is itself
+	 * inside a macro and get_macro() only returns the name of the outside
+	 * macro.
+	 */
+
+	/*
+	 * This actually an expression statement assignment but smatch_flow
+	 * pre-mangles it for us so we only get the last chunk:
+	 * sk = (typeof(sk))((char *)__mptr - offsetof(...))
+	 */
+
+	macro = get_macro_name(right->pos);
+	if (!macro)
+		return;
+	if (right->type != EXPR_CAST)
+		return;
+	right = strip_expr(right);
+	if (right->type != EXPR_BINOP || right->op != '-' ||
+	    right->left->type != EXPR_CAST)
+		return;
+	right = strip_expr(right->left);
+	if (right->type != EXPR_SYMBOL)
+		return;
+	if (!right->symbol->ident ||
+	    strcmp(right->symbol->ident->name, "__mptr") != 0)
+		return;
+	set_extra_expr_mod(expr->left, alloc_estate_range(valid_ptr_min_sval, valid_ptr_max_sval));
+}
+
+static int match_next_bit(struct expression *call, void *unused, struct range_list **rl)
+{
+	struct expression *start_arg;
+	struct expression *size_arg;
+	struct symbol *type;
+	sval_t min, max, tmp;
+
+	size_arg = get_argument_from_call_expr(call->args, 1);
+	/* btw. there isn't a start_arg for find_first_bit() */
+	start_arg = get_argument_from_call_expr(call->args, 2);
+
+	type = get_type(call);
+	min = sval_type_val(type, 0);
+	max = sval_type_val(type, sizeof(long long) * 8);
+
+	if (get_implied_max(size_arg, &tmp) && tmp.uvalue < max.value)
+		max = tmp;
+	if (start_arg && get_implied_min(start_arg, &tmp) && !sval_is_negative(tmp))
+		min = tmp;
+	if (sval_cmp(min, max) > 0)
+		max = min;
+	min = sval_cast(type, min);
+	max = sval_cast(type, max);
+	*rl = alloc_rl(min, max);
+	return 1;
+}
+
+static int match_fls(struct expression *call, void *unused, struct range_list **rl)
+{
+	struct expression *arg;
+	struct range_list *arg_rl;
+	sval_t zero = {};
+	sval_t start, end, sval;
+
+	start.type = &int_ctype;
+	start.value = 0;
+	end.type = &int_ctype;
+	end.value = 32;
+
+	arg = get_argument_from_call_expr(call->args, 0);
+	if (!get_implied_rl(arg, &arg_rl))
+		return 0;
+	if (rl_to_sval(arg_rl, &sval)) {
+		int i;
+
+		for (i = 63; i >= 0; i--) {
+			if (sval.uvalue & 1ULL << i)
+				break;
+		}
+		sval.value = i + 1;
+		*rl = alloc_rl(sval, sval);
+		return 1;
+	}
+	zero.type = rl_type(arg_rl);
+	if (!rl_has_sval(arg_rl, zero))
+		start.value = 1;
+	*rl = alloc_rl(start, end);
+	return 1;
+}
+
+
+
+static void find_module_init_exit(struct symbol_list *sym_list)
+{
+	struct symbol *sym;
+	struct symbol *fn;
+	struct statement *stmt;
+	char *name;
+	int init;
+	int count;
+
+	/*
+	 * This is more complicated because Sparse ignores the "alias"
+	 * attribute.  I search backwards because module_init() is normally at
+	 * the end of the file.
+	 */
+	count = 0;
+	FOR_EACH_PTR_REVERSE(sym_list, sym) {
+		if (sym->type != SYM_NODE)
+			continue;
+		if (!(sym->ctype.modifiers & MOD_STATIC))
+			continue;
+		fn = get_base_type(sym);
+		if (!fn)
+			continue;
+		if (fn->type != SYM_FN)
+			continue;
+		if (!sym->ident)
+			continue;
+		if (!fn->inline_stmt)
+			continue;
+		if (strcmp(sym->ident->name, "__inittest") == 0)
+			init = 1;
+		else if (strcmp(sym->ident->name, "__exittest") == 0)
+			init = 0;
+		else
+			continue;
+
+		count++;
+
+		stmt = first_ptr_list((struct ptr_list *)fn->inline_stmt->stmts);
+		if (!stmt || stmt->type != STMT_RETURN)
+			continue;
+		name = expr_to_var(stmt->ret_value);
+		if (!name)
+			continue;
+		if (init)
+			sql_insert_function_ptr(name, "(struct module)->init");
+		else
+			sql_insert_function_ptr(name, "(struct module)->exit");
+		free_string(name);
+		if (count >= 2)
+			return;
+	} END_FOR_EACH_PTR_REVERSE(sym);
+}
+
+static void match_end_file(struct symbol_list *sym_list)
+{
+	struct symbol *sym;
+
+	/* find the last static symbol in the file */
+	FOR_EACH_PTR_REVERSE(sym_list, sym) {
+		if (!(sym->ctype.modifiers & MOD_STATIC))
+			continue;
+		if (!sym->scope)
+			continue;
+		find_module_init_exit(sym->scope->symbols);
+		return;
+	} END_FOR_EACH_PTR_REVERSE(sym);
+}
+
+static struct expression *get_val_expr(struct expression *expr)
+{
+	struct symbol *sym, *val;
+
+	if (expr->type != EXPR_DEREF)
+		return NULL;
+	expr = expr->deref;
+	if (expr->type != EXPR_SYMBOL)
+		return NULL;
+	if (strcmp(expr->symbol_name->name, "__u") != 0)
+		return NULL;
+	sym = get_base_type(expr->symbol);
+	val = first_ptr_list((struct ptr_list *)sym->symbol_list);
+	if (!val || strcmp(val->ident->name, "__val") != 0)
+		return NULL;
+	return member_expression(expr, '.', val->ident);
+}
+
+static void match__write_once_size(const char *fn, struct expression *call,
+			       void *unused)
+{
+	struct expression *dest, *data, *assign;
+	struct range_list *rl;
+
+	dest = get_argument_from_call_expr(call->args, 0);
+	if (dest->type != EXPR_PREOP || dest->op != '&')
+		return;
+	dest = strip_expr(dest->unop);
+
+	data = get_argument_from_call_expr(call->args, 1);
+	data = get_val_expr(data);
+	if (!data)
+		return;
+	get_absolute_rl(data, &rl);
+	assign = assign_expression(dest, '=', data);
+
+	__in_fake_assign++;
+	__split_expr(assign);
+	__in_fake_assign--;
+}
+
+static void match__read_once_size(const char *fn, struct expression *call,
+			       void *unused)
+{
+	struct expression *dest, *data, *assign;
+	struct symbol *type, *val_sym;
+
+	/*
+	 * We want to change:
+	 *	__read_once_size_nocheck(&(x), __u.__c, sizeof(x));
+	 * into a fake assignment:
+	 *	__u.val = x;
+	 *
+	 */
+
+	data = get_argument_from_call_expr(call->args, 0);
+	if (data->type != EXPR_PREOP || data->op != '&')
+		return;
+	data = strip_parens(data->unop);
+
+	dest = get_argument_from_call_expr(call->args, 1);
+	if (dest->type != EXPR_DEREF || dest->op != '.')
+		return;
+	if (!dest->member || strcmp(dest->member->name, "__c") != 0)
+		return;
+	dest = dest->deref;
+	type = get_type(dest);
+	if (!type)
+		return;
+	val_sym = first_ptr_list((struct ptr_list *)type->symbol_list);
+	dest = member_expression(dest, '.', val_sym->ident);
+
+	assign = assign_expression(dest, '=', data);
+	__in_fake_assign++;
+	__split_expr(assign);
+	__in_fake_assign--;
+}
+
+void check_kernel(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	add_implied_return_hook("ERR_PTR", &implied_err_cast_return, NULL);
+	add_implied_return_hook("ERR_CAST", &implied_err_cast_return, NULL);
+	add_implied_return_hook("PTR_ERR", &implied_err_cast_return, NULL);
+	add_hook(hack_ERR_PTR, AFTER_DEF_HOOK);
+	return_implies_state("IS_ERR_OR_NULL", 0, 0, &match_param_valid_ptr, (void *)0);
+	return_implies_state("IS_ERR_OR_NULL", 1, 1, &match_param_err_or_null, (void *)0);
+	return_implies_state("IS_ERR", 0, 0, &match_not_err, NULL);
+	return_implies_state("IS_ERR", 1, 1, &match_err, NULL);
+	return_implies_state("tomoyo_memory_ok", 1, 1, &match_param_valid_ptr, (void *)0);
+
+	add_macro_assign_hook_extra("container_of", &match_container_of_macro, NULL);
+	add_hook(match_container_of, ASSIGNMENT_HOOK);
+
+	add_implied_return_hook("find_next_bit", &match_next_bit, NULL);
+	add_implied_return_hook("find_next_zero_bit", &match_next_bit, NULL);
+	add_implied_return_hook("find_first_bit", &match_next_bit, NULL);
+	add_implied_return_hook("find_first_zero_bit", &match_next_bit, NULL);
+
+	add_implied_return_hook("fls", &match_fls, NULL);
+	add_implied_return_hook("fls64", &match_fls, NULL);
+
+	add_function_hook("__ftrace_bad_type", &__match_nullify_path_hook, NULL);
+	add_function_hook("__write_once_size", &match__write_once_size, NULL);
+
+	add_function_hook("__read_once_size", &match__read_once_size, NULL);
+	add_function_hook("__read_once_size_nocheck", &match__read_once_size, NULL);
+
+	if (option_info)
+		add_hook(match_end_file, END_FILE_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:04 2018
+++ new/usr/src/tools/smatch/src/check_kernel_printf.c	Fri Dec 21 15:00:04 2018
@@ -0,0 +1,1467 @@
+/*
+ * Copyright (C) 2015 Rasmus Villemoes.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include <assert.h>
+#include <ctype.h>
+#include <string.h>
+#include "smatch.h"
+#include "smatch_slist.h"
+
+#define spam(args...) do {			\
+	if (option_spammy)			\
+		sm_msg(args);			\
+	} while (0)
+
+static int my_id;
+
+/*
+ * Much of this is taken directly from the kernel (mostly vsprintf.c),
+ * with a few modifications here and there.
+ */
+
+#define KERN_SOH_ASCII  '\001'
+
+typedef unsigned char u8;
+typedef signed short s16;
+
+#define SIGN	1		/* unsigned/signed, must be 1 */
+#define LEFT	2		/* left justified */
+#define PLUS	4		/* show plus */
+#define SPACE	8		/* space if plus */
+#define ZEROPAD	16		/* pad with zero, must be 16 == '0' - ' ' */
+#define SMALL	32		/* use lowercase in hex (must be 32 == 0x20) */
+#define SPECIAL	64		/* prefix hex with "0x", octal with "0" */
+
+enum format_type {
+	FORMAT_TYPE_NONE, /* Just a string part */
+	FORMAT_TYPE_WIDTH,
+	FORMAT_TYPE_PRECISION,
+	FORMAT_TYPE_CHAR,
+	FORMAT_TYPE_STR,
+	FORMAT_TYPE_PTR,
+	FORMAT_TYPE_PERCENT_CHAR,
+	FORMAT_TYPE_INVALID,
+	FORMAT_TYPE_LONG_LONG,
+	FORMAT_TYPE_ULONG,
+	FORMAT_TYPE_LONG,
+	FORMAT_TYPE_UBYTE,
+	FORMAT_TYPE_BYTE,
+	FORMAT_TYPE_USHORT,
+	FORMAT_TYPE_SHORT,
+	FORMAT_TYPE_UINT,
+	FORMAT_TYPE_INT,
+	FORMAT_TYPE_SIZE_T,
+	FORMAT_TYPE_PTRDIFF,
+	FORMAT_TYPE_NRCHARS, /* Reintroduced for this checker */
+	FORMAT_TYPE_FLOAT, /* for various floating point formatters */
+};
+
+struct printf_spec {
+	unsigned int	type:8;		/* format_type enum */
+	signed int	field_width:24;	/* width of output field */
+	unsigned int	flags:8;	/* flags to number() */
+	unsigned int	base:8;		/* number base, 8, 10 or 16 only */
+	signed int	precision:16;	/* # of digits/chars */
+} __packed;
+#define FIELD_WIDTH_MAX ((1 << 23) - 1)
+#define PRECISION_MAX ((1 << 15) - 1)
+extern char __check_printf_spec[1-2*(sizeof(struct printf_spec) != 8)];
+
+static int
+skip_atoi(const char **s)
+{
+	int i = 0;
+
+	while (isdigit(**s))
+		i = i*10 + *((*s)++) - '0';
+
+	return i;
+}
+
+static int
+format_decode(const char *fmt, struct printf_spec *spec)
+{
+	const char *start = fmt;
+	char qualifier;
+
+	/* we finished early by reading the field width */
+	if (spec->type == FORMAT_TYPE_WIDTH) {
+		if (spec->field_width < 0) {
+			spec->field_width = -spec->field_width;
+			spec->flags |= LEFT;
+		}
+		spec->type = FORMAT_TYPE_NONE;
+		goto precision;
+	}
+
+	/* we finished early by reading the precision */
+	if (spec->type == FORMAT_TYPE_PRECISION) {
+		if (spec->precision < 0)
+			spec->precision = 0;
+
+		spec->type = FORMAT_TYPE_NONE;
+		goto qualifier;
+	}
+
+	/* By default */
+	spec->type = FORMAT_TYPE_NONE;
+
+	for (; *fmt ; ++fmt) {
+		if (*fmt == '%')
+			break;
+	}
+
+	/* Return the current non-format string */
+	if (fmt != start || !*fmt)
+		return fmt - start;
+
+	/* Process flags */
+	spec->flags = 0;
+
+	while (1) { /* this also skips first '%' */
+		bool found = true;
+
+		++fmt;
+
+		switch (*fmt) {
+		case '-': spec->flags |= LEFT;    break;
+		case '+': spec->flags |= PLUS;    break;
+		case ' ': spec->flags |= SPACE;   break;
+		case '#': spec->flags |= SPECIAL; break;
+		case '0': spec->flags |= ZEROPAD; break;
+		default:  found = false;
+		}
+
+		if (!found)
+			break;
+	}
+
+	/* get field width */
+	spec->field_width = -1;
+
+	if (isdigit(*fmt))
+		spec->field_width = skip_atoi(&fmt);
+	else if (*fmt == '*') {
+		/* it's the next argument */
+		spec->type = FORMAT_TYPE_WIDTH;
+		return ++fmt - start;
+	}
+
+precision:
+	/* get the precision */
+	spec->precision = -1;
+	if (*fmt == '.') {
+		++fmt;
+		if (isdigit(*fmt)) {
+			spec->precision = skip_atoi(&fmt);
+			if (spec->precision < 0)
+				spec->precision = 0;
+		} else if (*fmt == '*') {
+			/* it's the next argument */
+			spec->type = FORMAT_TYPE_PRECISION;
+			return ++fmt - start;
+		}
+	}
+
+qualifier:
+	/* get the conversion qualifier */
+	qualifier = 0;
+	if (*fmt == 'h' || _tolower(*fmt) == 'l' ||
+	    _tolower(*fmt) == 'z' || *fmt == 't') {
+		qualifier = *fmt++;
+		if (qualifier == *fmt) {
+			if (qualifier == 'l') {
+				qualifier = 'L';
+				++fmt;
+			} else if (qualifier == 'h') {
+				qualifier = 'H';
+				++fmt;
+			} else {
+				sm_warning("invalid repeated qualifier '%c'", *fmt);
+			}
+		}
+	}
+
+	/* default base */
+	spec->base = 10;
+	switch (*fmt) {
+	case 'c':
+		if (qualifier)
+			sm_warning("qualifier '%c' ignored for %%c specifier", qualifier);
+
+		spec->type = FORMAT_TYPE_CHAR;
+		return ++fmt - start;
+
+	case 's':
+		if (qualifier)
+			sm_warning("qualifier '%c' ignored for %%s specifier", qualifier);
+
+		spec->type = FORMAT_TYPE_STR;
+		return ++fmt - start;
+
+	case 'p':
+		spec->type = FORMAT_TYPE_PTR;
+		return ++fmt - start;
+
+	case '%':
+		spec->type = FORMAT_TYPE_PERCENT_CHAR;
+		return ++fmt - start;
+
+	/* integer number formats - set up the flags and "break" */
+	case 'o':
+		spec->base = 8;
+		break;
+
+	case 'x':
+		spec->flags |= SMALL;
+
+	case 'X':
+		spec->base = 16;
+		break;
+
+	case 'd':
+	case 'i':
+		spec->flags |= SIGN;
+	case 'u':
+		break;
+
+	case 'n':
+		spec->type = FORMAT_TYPE_NRCHARS;
+		return ++fmt - start;
+
+	case 'a': case 'A':
+	case 'e': case 'E':
+	case 'f': case 'F':
+	case 'g': case 'G':
+		spec->type = FORMAT_TYPE_FLOAT;
+		return ++fmt - start;
+
+	default:
+		spec->type = FORMAT_TYPE_INVALID;
+		/* Unlike the kernel code, we 'consume' the invalid
+		 * character so that it can get included in the
+		 * report. After that, we bail out. */
+		return ++fmt - start;
+	}
+
+	if (qualifier == 'L')
+		spec->type = FORMAT_TYPE_LONG_LONG;
+	else if (qualifier == 'l') {
+		if (spec->flags & SIGN)
+			spec->type = FORMAT_TYPE_LONG;
+		else
+			spec->type = FORMAT_TYPE_ULONG;
+	} else if (_tolower(qualifier) == 'z') {
+		spec->type = FORMAT_TYPE_SIZE_T;
+	} else if (qualifier == 't') {
+		spec->type = FORMAT_TYPE_PTRDIFF;
+	} else if (qualifier == 'H') {
+		if (spec->flags & SIGN)
+			spec->type = FORMAT_TYPE_BYTE;
+		else
+			spec->type = FORMAT_TYPE_UBYTE;
+	} else if (qualifier == 'h') {
+		if (spec->flags & SIGN)
+			spec->type = FORMAT_TYPE_SHORT;
+		else
+			spec->type = FORMAT_TYPE_USHORT;
+	} else {
+		if (spec->flags & SIGN)
+			spec->type = FORMAT_TYPE_INT;
+		else
+			spec->type = FORMAT_TYPE_UINT;
+	}
+
+	return ++fmt - start;
+}
+
+static int is_struct_tag(struct symbol *type, const char *tag)
+{
+	return type->type == SYM_STRUCT && type->ident && !strcmp(type->ident->name, tag);
+}
+
+static int has_struct_tag(struct symbol *type, const char *tag)
+{
+	struct symbol *tmp;
+
+	if (type->type == SYM_STRUCT)
+		return is_struct_tag(type, tag);
+	if (type->type == SYM_UNION) {
+		FOR_EACH_PTR(type->symbol_list, tmp) {
+			tmp = get_real_base_type(tmp);
+			if (tmp && is_struct_tag(tmp, tag))
+				return 1;
+		} END_FOR_EACH_PTR(tmp);
+	}
+	return 0;
+}
+
+static int is_char_type(struct symbol *type)
+{
+	return type == &uchar_ctype || type == &char_ctype || type == &schar_ctype;
+}
+
+/*
+ * I have absolutely no idea if this is how one is supposed to get the
+ * symbol representing a typedef, but it seems to work.
+ */
+struct typedef_lookup {
+	const char *name;
+	struct symbol *sym;
+	int failed;
+};
+
+static struct symbol *_typedef_lookup(const char *name)
+{
+	struct ident *id;
+	struct symbol *node;
+
+	id = built_in_ident(name);
+	if (!id)
+		return NULL;
+	node = lookup_symbol(id, NS_TYPEDEF);
+	if (!node || node->type != SYM_NODE)
+		return NULL;
+	return get_real_base_type(node);
+}
+
+static void typedef_lookup(struct typedef_lookup *tl)
+{
+	if (tl->sym || tl->failed)
+		return;
+	tl->sym = _typedef_lookup(tl->name);
+	if (!tl->sym) {
+		sm_perror(" could not find typedef '%s'", tl->name);
+		tl->failed = 1;
+	}
+}
+
+
+static void ip4(const char *fmt, struct symbol *type, struct symbol *basetype, int vaidx)
+{
+	enum { ENDIAN_BIG, ENDIAN_LITTLE, ENDIAN_HOST } endian = ENDIAN_BIG;
+
+	assert(fmt[0] == 'i' || fmt[0] == 'I');
+	assert(fmt[1] == '4');
+
+	if (isalnum(fmt[2])) {
+		switch (fmt[2]) {
+		case 'h':
+			endian = ENDIAN_HOST;
+			break;
+		case 'l':
+			endian = ENDIAN_LITTLE;
+			break;
+		case 'n':
+		case 'b':
+			endian = ENDIAN_BIG;
+			break;
+		default:
+			sm_warning("'%%p%c4' can only be followed by one of [hnbl], not '%c'", fmt[0], fmt[2]);
+		}
+		if (isalnum(fmt[3]))
+			sm_warning("'%%p%c4' can only be followed by precisely one of [hnbl]", fmt[0]);
+	}
+
+
+	if (type->ctype.modifiers & MOD_NODEREF)
+		sm_error("passing __user pointer to '%%p%c4'", fmt[0]);
+
+	/*
+	 * If we have a pointer to char/u8/s8, we expect the caller to
+	 * handle endianness; I don't think there's anything we can
+	 * do. I'd like to check that if we're passed a pointer to a
+	 * __bitwise u32 (most likely a __be32), we should have endian
+	 * == ENDIAN_BIG. But I can't figure out how to get that
+	 * information (it also seems to require ensuring certain
+	 * macros are defined). But struct in_addr certainly consists
+	 * of only a single __be32, so in that case we can do a check.
+	 */
+	if (is_char_type(basetype))
+		return;
+
+	if (is_struct_tag(basetype, "in_addr") && endian != ENDIAN_BIG)
+		sm_warning("passing struct in_addr* to '%%p%c4%c', is the endianness ok?", fmt[0], fmt[2]);
+
+	/* ... */
+}
+
+static void ip6(const char *fmt, struct symbol *type, struct symbol *basetype, int vaidx)
+{
+	assert(fmt[0] == 'i' || fmt[0] == 'I');
+	assert(fmt[1] == '6');
+
+	if (isalnum(fmt[2])) {
+		if (fmt[2] != 'c')
+			sm_warning("'%%p%c6' can only be followed by c", fmt[0]);
+		else if (fmt[0] == 'i')
+			sm_warning("'%%pi6' does not allow flag c");
+		if (isalnum(fmt[3]))
+			sm_warning("'%%p%c6%c' cannot be followed by other alphanumerics", fmt[0], fmt[2]);
+	}
+
+	if (type->ctype.modifiers & MOD_NODEREF)
+		sm_error("passing __user pointer to '%%p%c6'", fmt[0]);
+}
+
+static void ipS(const char *fmt, struct symbol *type, struct symbol *basetype, int vaidx)
+{
+	const char *f;
+
+	assert(tolower(fmt[0]) == 'i');
+	assert(fmt[1] == 'S');
+
+	for (f = fmt+2; isalnum(*f); ++f) {
+		/* It's probably too anal checking for duplicate flags. */
+		if (!strchr("pfschnbl", *f))
+			sm_warning("'%%p%cS' cannot be followed by '%c'", fmt[0], *f);
+	}
+
+	/*
+	 * XXX: Should we also allow passing a pointer to a union, one
+	 * member of which is a struct sockaddr? It may be slightly
+	 * cleaner actually passing &u.raw instead of just &u, though
+	 * the generated code is of course exactly the same. For now,
+	 * we do accept struct sockaddr_in and struct sockaddr_in6,
+	 * since those are easy to handle and rather harmless.
+	 */
+	if (!has_struct_tag(basetype, "sockaddr") &&
+	    !has_struct_tag(basetype, "sockaddr_in") &&
+	    !has_struct_tag(basetype, "sockaddr_in6") &&
+	    !has_struct_tag(basetype, "__kernel_sockaddr_storage"))
+		sm_error("'%%p%cS' expects argument of type struct sockaddr *, "
+			"argument %d has type '%s'", fmt[0], vaidx, type_to_str(type));
+}
+
+static void hex_string(const char *fmt, struct symbol *type, struct symbol *basetype, int vaidx)
+{
+	assert(fmt[0] == 'h');
+	if (isalnum(fmt[1])) {
+		if (!strchr("CDN", fmt[1]))
+			sm_warning("'%%ph' cannot be followed by '%c'", fmt[1]);
+		if (isalnum(fmt[2]))
+			sm_warning("'%%ph' can be followed by at most one of [CDN], and no other alphanumerics");
+	}
+	if (type->ctype.modifiers & MOD_NODEREF)
+		sm_error("passing __user pointer to %%ph");
+}
+
+static void escaped_string(const char *fmt, struct symbol *type, struct symbol *basetype, int vaidx)
+{
+	assert(fmt[0] == 'E');
+	while (isalnum(*++fmt)) {
+		if (!strchr("achnops", *fmt))
+			sm_warning("%%pE can only be followed by a combination of [achnops]");
+	}
+	if (type->ctype.modifiers & MOD_NODEREF)
+		sm_error("passing __user pointer to %%pE");
+}
+
+static void resource_string(const char *fmt, struct symbol *type, struct symbol *basetype, int vaidx)
+{
+	assert(tolower(fmt[0]) == 'r');
+	if (!is_struct_tag(basetype, "resource")) {
+		sm_error("'%%p%c' expects argument of type struct resource *, "
+			"but argument %d has type '%s'", fmt[0], vaidx, type_to_str(type));
+	}
+	if (isalnum(fmt[1]))
+		sm_warning("'%%p%c' cannot be followed by '%c'", fmt[0], fmt[1]);
+}
+
+static void mac_address_string(const char *fmt, struct symbol *type, struct symbol *basetype, int vaidx)
+{
+	assert(tolower(fmt[0]) == 'm');
+	if (isalnum(fmt[1])) {
+		if (!(fmt[1] == 'F' || fmt[1] == 'R'))
+			sm_warning("'%%p%c' cannot be followed by '%c'", fmt[0], fmt[1]);
+		if (fmt[0] == 'm' && fmt[1] == 'F')
+			sm_warning("it is pointless to pass flag F to %%pm");
+		if (isalnum(fmt[2]))
+			sm_warning("'%%p%c%c' cannot be followed by other alphanumeric", fmt[0], fmt[1]);
+	}
+	/* Technically, bdaddr_t is a typedef for an anonymous struct, but this still seems to work. */
+	if (!is_char_type(basetype) && !is_struct_tag(basetype, "bdaddr_t") && basetype != &void_ctype) {
+		sm_warning("'%%p%c' expects argument of type u8 * or bdaddr_t *, argument %d has type '%s'",
+			fmt[0], vaidx, type_to_str(type));
+	}
+	if (type->ctype.modifiers & MOD_NODEREF)
+		sm_error("passing __user pointer to '%%p%c'", fmt[0]);
+}
+
+static void dentry_file(const char *fmt, struct symbol *type, struct symbol *basetype, int vaidx)
+{
+	const char *tag;
+
+	assert(tolower(fmt[0]) == 'd');
+	tag = fmt[0] == 'd' ? "dentry" : "file";
+
+	if (isalnum(fmt[1])) {
+		if (!strchr("234", fmt[1]))
+			sm_warning("'%%p%c' can only be followed by one of [234]", fmt[0]);
+		if (isalnum(fmt[2]))
+			sm_warning("'%%p%c%c' cannot be followed by '%c'", fmt[0], fmt[1], fmt[2]);
+	}
+
+	if (!is_struct_tag(basetype, tag))
+		sm_error("'%%p%c' expects argument of type struct '%s*', argument %d has type '%s'",
+			fmt[0], tag, vaidx, type_to_str(type));
+}
+
+static void check_clock(const char *fmt, struct symbol *type, struct symbol *basetype, int vaidx)
+{
+	assert(fmt[0] == 'C');
+	if (isalnum(fmt[1])) {
+		if (!strchr("nr", fmt[1]))
+			sm_warning("'%%pC' can only be followed by one of [nr]");
+		if (isalnum(fmt[2]))
+			sm_warning("'%%pC%c' cannot be followed by '%c'", fmt[1], fmt[2]);
+	}
+	if (!is_struct_tag(basetype, "clk"))
+		sm_error("'%%pC' expects argument of type 'struct clk*', argument %d has type '%s'",
+		       vaidx, type_to_str(type));
+}
+
+static void va_format(const char *fmt, struct symbol *type, struct symbol *basetype, int vaidx)
+{
+	assert(fmt[0] == 'V');
+	if (isalnum(fmt[1]))
+		sm_warning("%%pV cannot be followed by any alphanumerics");
+	if (!is_struct_tag(basetype, "va_format"))
+		sm_error("%%pV expects argument of type struct va_format*, argument %d has type '%s'", vaidx, type_to_str(type));
+}
+
+static void netdev_feature(const char *fmt, struct symbol *type, struct symbol *basetype, int vaidx)
+{
+	static struct typedef_lookup netdev = { .name = "netdev_features_t" };
+
+	assert(fmt[0] == 'N');
+	if (fmt[1] != 'F') {
+		sm_error("%%pN must be followed by 'F'");
+		return;
+	}
+	if (isalnum(fmt[2]))
+		sm_warning("%%pNF cannot be followed by '%c'", fmt[2]);
+
+	typedef_lookup(&netdev);
+	if (!netdev.sym)
+		return;
+	if (basetype != netdev.sym)
+		sm_error("%%pNF expects argument of type netdev_features_t*, argument %d has type '%s'",
+			vaidx, type_to_str(type));
+
+}
+static void address_val(const char *fmt, struct symbol *type, struct symbol *basetype, int vaidx)
+{
+	static struct typedef_lookup dma = { .name = "dma_addr_t" };
+	static struct typedef_lookup phys = { .name = "phys_addr_t" };
+	struct typedef_lookup *which = &phys;
+	const char *suf = "";
+	assert(fmt[0] == 'a');
+
+	if (isalnum(fmt[1])) {
+		switch (fmt[1]) {
+		case 'd':
+			which = &dma;
+			suf = "d";
+			break;
+		case 'p':
+			suf = "p";
+			break;
+		default:
+			sm_error("'%%pa' can only be followed by one of [dp]");
+		}
+		if (isalnum(fmt[2]))
+			sm_error("'%%pa%c' cannot be followed by '%c'", fmt[1], fmt[2]);
+	}
+
+	typedef_lookup(which);
+	if (!which->sym)
+		return;
+	if (basetype != which->sym) {
+		sm_error("'%%pa%s' expects argument of type '%s*', argument %d has type '%s'",
+			suf, which->name, vaidx, type_to_str(type));
+	}
+}
+
+static void block_device(const char *fmt, struct symbol *type, struct symbol *basetype, int vaidx)
+{
+	const char *tag = "block_device";
+
+	assert(fmt[0] == 'g');
+	if (isalnum(fmt[1])) {
+		sm_warning("%%pg cannot be followed by '%c'", fmt[1]);
+	}
+	if (!is_struct_tag(basetype, tag))
+		sm_error("'%%p%c' expects argument of type struct '%s*', argument %d has type '%s'",
+			fmt[0], tag, vaidx, type_to_str(type));
+}
+
+static void flag_string(const char *fmt, struct symbol *type, struct symbol *basetype, int vaidx)
+{
+	static struct typedef_lookup gfp = { .name = "gfp_t" };
+
+	assert(fmt[0] == 'G');
+	if (!isalnum(fmt[1])) {
+		sm_error("%%pG must be followed by one of [gpv]");
+		return;
+	}
+	switch (fmt[1]) {
+	case 'p':
+	case 'v':
+		if (basetype != &ulong_ctype)
+			sm_error("'%%pG%c' expects argument of type 'unsigned long *', argument %d has type '%s'",
+				fmt[1], vaidx, type_to_str(type));
+		break;
+	case 'g':
+		typedef_lookup(&gfp);
+		if (basetype != gfp.sym)
+			sm_error("'%%pGg' expects argument of type 'gfp_t *', argument %d has type '%s'",
+				vaidx, type_to_str(type));
+		break;
+	default:
+		sm_error("'%%pG' must be followed by one of [gpv]");
+	}
+}
+
+static void device_node_string(const char *fmt, struct symbol *type, struct symbol *basetype, int vaidx)
+{
+	if (fmt[1] != 'F') {
+		sm_error("%%pO can only be followed by 'F'");
+		return;
+	}
+	if (!is_struct_tag(basetype, "device_node"))
+		sm_error("'%%pOF' expects argument of type 'struct device_node*', argument %d has type '%s'",
+		       vaidx, type_to_str(type));
+}
+
+static void
+pointer(const char *fmt, struct expression *arg, int vaidx)
+{
+	struct symbol *type, *basetype;
+
+	type = get_type(arg);
+	if (!type) {
+		sm_warning("could not determine type of argument %d", vaidx);
+		return;
+	}
+	if (!is_ptr_type(type)) {
+		sm_error("%%p expects pointer argument, but argument %d has type '%s'",
+			vaidx, type_to_str(type));
+		return;
+	}
+	/* Just plain %p, nothing to check. */
+	if (!isalnum(*fmt))
+		return;
+
+	basetype = get_real_base_type(type);
+	if (is_void_type(basetype))
+		return;
+	/*
+	 * Passing a pointer-to-array is harmless, but most likely one
+	 * meant to pass pointer-to-first-element. If basetype is
+	 * array type, we issue a notice and "dereference" the types
+	 * once more.
+	 */
+	if (basetype->type == SYM_ARRAY) {
+		spam("note: passing pointer-to-array; is the address-of redundant?");
+		type = basetype;
+		basetype = get_real_base_type(type);
+	}
+
+	/*
+	 * We pass both the type and the basetype to the helpers. If,
+	 * for example, the pointer is really a decayed array which is
+	 * passed to %pI4, we might want to check that it is in fact
+	 * an array of four bytes. But most are probably only
+	 * interested in whether the basetype makes sense. Also, the
+	 * pointer may carry some annotation such as __user which
+	 * might be worth checking in the handlers which actually
+	 * dereference the pointer.
+	 */
+
+	switch (*fmt) {
+	case 'b':
+	case 'F':
+	case 'f':
+	case 'S':
+	case 's':
+	case 'B':
+		/* Can we do anything sensible? Check that the arg is a function pointer, for example? */
+		break;
+
+	case 'R':
+	case 'r':
+		resource_string(fmt, type, basetype, vaidx);
+		break;
+	case 'M':
+	case 'm':
+		mac_address_string(fmt, type, basetype, vaidx);
+		break;
+	case 'I':
+	case 'i':
+		switch (fmt[1]) {
+		case '4':
+			ip4(fmt, type, basetype, vaidx);
+			break;
+		case '6':
+			ip6(fmt, type, basetype, vaidx);
+			break;
+		case 'S':
+			ipS(fmt, type, basetype, vaidx);
+			break;
+		default:
+			sm_warning("'%%p%c' must be followed by one of [46S]", fmt[0]);
+			break;
+		}
+		break;
+       /*
+	* %pE and %ph can handle any valid pointer. We still check
+	* whether all the subsequent alphanumerics are valid for the
+	* particular %pX conversion.
+	*/
+	case 'E':
+		escaped_string(fmt, type, basetype, vaidx);
+		break;
+	case 'h':
+		hex_string(fmt, type, basetype, vaidx);
+		break;
+	case 'U': /* TODO */
+		break;
+	case 'V':
+		va_format(fmt, type, basetype, vaidx);
+		break;
+	case 'K': /* TODO */
+		break;
+	case 'N':
+		netdev_feature(fmt, type, basetype, vaidx);
+		break;
+	case 'a':
+		address_val(fmt, type, basetype, vaidx);
+		break;
+	case 'D':
+	case 'd':
+		dentry_file(fmt, type, basetype, vaidx);
+		break;
+	case 'C':
+		check_clock(fmt, type, basetype, vaidx);
+		break;
+	case 'g':
+		block_device(fmt, type, basetype, vaidx);
+		break;
+	case 'G':
+		flag_string(fmt, type, basetype, vaidx);
+		break;
+	case 'O':
+		device_node_string(fmt, type, basetype, vaidx);
+		break;
+	case 'x':
+		/* 'x' is for an unhashed pointer */
+		break;
+	default:
+		sm_error("unrecognized %%p extension '%c', treated as normal %%p", *fmt);
+	}
+}
+
+/*
+ * A common error is to pass a "char" or "signed char" to %02x (or
+ * %.2X or some other variant). This can actually be a security
+ * problem, because a lot of code expects this to produce exactly two
+ * characters of output. Unfortunately this also produces false
+ * positives, since we're sometimes in arch-specific code on an arch
+ * where char is always unsigned.
+ */
+static void
+hexbyte(const char *fmt, int fmt_len, struct expression *arg, int vaidx, struct printf_spec spec)
+{
+	struct symbol *type;
+
+	/*
+	 * For now, just check the most common and obvious, which is
+	 * roughly %[.0]2[xX].
+	 */
+	if (spec.field_width != 2 && spec.precision != 2)
+		return;
+	if (spec.base != 16)
+		return;
+
+	type = get_type(arg);
+	if (!type) {
+		sm_warning("could not determine type of argument %d", vaidx);
+		return;
+	}
+	if (type == &char_ctype || type == &schar_ctype)
+		sm_warning("argument %d to %.*s specifier has type '%s'",
+		       vaidx, fmt_len, fmt, type_to_str(type));
+}
+
+static int
+check_format_string(const char *fmt, const char *caller)
+{
+	const char *f;
+
+	for (f = fmt; *f; ++f) {
+		unsigned char c = *f;
+		switch (c) {
+		case KERN_SOH_ASCII:
+			/*
+			 * This typically arises from bad conversion
+			 * to pr_*, e.g. pr_warn(KERN_WARNING "something").
+			 */
+			if (f != fmt)
+				sm_warning("KERN_* level not at start of string");
+			/*
+			 * In a very few cases, the level is actually
+			 * computed and passed via %c, as in KERN_SOH
+			 * "%c...". printk explicitly supports
+			 * this.
+			 */
+			if (!(('0' <= f[1] && f[1] <= '7') ||
+			      f[1] == 'd' || /* KERN_DEFAULT */
+			      f[1] == 'c' || /* KERN_CONT */
+			      (f[1] == '%' && f[2] == 'c')))
+				sm_warning("invalid KERN_* level: KERN_SOH_ASCII followed by '\\x%02x'", (unsigned char)f[1]);
+			break;
+		case '\t':
+		case '\n':
+		case '\r':
+		case 0x20 ... 0x7e:
+			break;
+		case 0x80 ... 0xff:
+			sm_warning("format string contains non-ascii character '\\x%02x'", c);
+			break;
+		case 0x08:
+			if (f == fmt)
+				break;
+			/* fall through */
+		default:
+			sm_warning("format string contains unusual character '\\x%02x'", c);
+			break;
+		}
+	}
+
+	f = strstr(fmt, caller);
+	if (f && strstr(f+1, caller))
+		sm_warning("format string contains name of enclosing function '%s' twice", caller);
+
+	return f != NULL;
+}
+
+static int arg_is___func__(struct expression *arg)
+{
+	if (arg->type != EXPR_SYMBOL)
+		return 0;
+	return !strcmp(arg->symbol_name->name, "__func__") ||
+	       !strcmp(arg->symbol_name->name, "__FUNCTION__") ||
+	       !strcmp(arg->symbol_name->name, "__PRETTY_FUNCTION__");
+}
+static int arg_contains_caller(struct expression *arg, const char *caller)
+{
+	if (arg->type != EXPR_STRING)
+		return 0;
+	return strstr(arg->string->data, caller) != NULL;
+}
+
+static int is_array_of_const_char(struct symbol *sym)
+{
+	struct symbol *base = sym->ctype.base_type;
+	if (base->type != SYM_ARRAY)
+		return 0;
+	if (!(base->ctype.modifiers & MOD_CONST))
+		return 0;
+	if (!is_char_type(base->ctype.base_type)) {
+		spam("weird: format argument is array of const '%s'", type_to_str(base->ctype.base_type));
+		return 0;
+	}
+	return 1;
+}
+
+static int is_const_pointer_to_const_char(struct symbol *sym)
+{
+	struct symbol *base = sym->ctype.base_type;
+	if (!(sym->ctype.modifiers & MOD_CONST))
+		return 0;
+	if (base->type != SYM_PTR)
+		return 0;
+	if (!(base->ctype.modifiers & MOD_CONST))
+		return 0;
+	if (!is_char_type(base->ctype.base_type)) {
+		spam("weird: format argument is pointer to const '%s'", type_to_str(base->ctype.base_type));
+		return 0;
+	}
+	return 1;
+}
+
+static int unknown_format(struct expression *expr)
+{
+	struct state_list *slist;
+
+	slist = get_strings(expr);
+	if (!slist)
+		return 1;
+	if (slist_has_state(slist, &undefined))
+		return 1;
+	free_slist(&slist);
+	return 0;
+}
+
+static bool has_hex_prefix(const char *orig_fmt, const char *old_fmt)
+{
+	return old_fmt >= orig_fmt + 2 &&
+		old_fmt[-2] == '0' && _tolower(old_fmt[-1]) == 'x';
+}
+
+static bool is_integer_specifier(int type)
+{
+	switch (type) {
+	case FORMAT_TYPE_LONG_LONG:
+	case FORMAT_TYPE_ULONG:
+	case FORMAT_TYPE_LONG:
+	case FORMAT_TYPE_UBYTE:
+	case FORMAT_TYPE_BYTE:
+	case FORMAT_TYPE_USHORT:
+	case FORMAT_TYPE_SHORT:
+	case FORMAT_TYPE_UINT:
+	case FORMAT_TYPE_INT:
+	case FORMAT_TYPE_SIZE_T:
+	case FORMAT_TYPE_PTRDIFF:
+		return true;
+	default:
+		return false;
+	}
+}
+
+static int
+is_cast_expr(struct expression *expr)
+{
+	if (!expr)
+		return 0;
+
+	switch (expr->type) {
+	case EXPR_CAST:
+	case EXPR_FORCE_CAST:
+		/* not EXPR_IMPLIED_CAST for our purposes */
+		return 1;
+	default:
+		return 0;
+	}
+}
+
+static void
+check_cast_from_pointer(const char *fmt, int len, struct expression *arg, int va_idx)
+{
+	/*
+	 * This can easily be fooled by passing 0+(long)ptr or doing
+	 * "long local_var = (long)ptr" and passing local_var to
+	 * %lx. Tough.
+	 */
+	if (!is_cast_expr(arg))
+		return;
+	while (is_cast_expr(arg))
+		arg = arg->cast_expression;
+	if (is_ptr_type(get_final_type(arg)))
+		sm_warning("argument %d to %.*s specifier is cast from pointer",
+			va_idx, len, fmt);
+}
+
+static void
+do_check_printf_call(const char *caller, const char *name, struct expression *callexpr, struct expression *fmtexpr, int vaidx)
+{
+	struct printf_spec spec = {0};
+	const char *fmt, *orig_fmt;
+	int caller_in_fmt;
+
+	fmtexpr = strip_parens(fmtexpr);
+	if (fmtexpr->type == EXPR_CONDITIONAL) {
+		do_check_printf_call(caller, name, callexpr, fmtexpr->cond_true ? : fmtexpr->conditional, vaidx);
+		do_check_printf_call(caller, name, callexpr, fmtexpr->cond_false, vaidx);
+		return;
+	}
+	if (fmtexpr->type == EXPR_SYMBOL) {
+		/*
+		 * If the symbol has an initializer, we can handle
+		 *
+		 *   const char foo[] = "abc";         and
+		 *   const char * const foo = "abc";
+		 *
+		 * We simply replace fmtexpr with the initializer
+		 * expression. If foo is not one of the above, or if
+		 * the initializer expression is somehow not a string
+		 * literal, fmtexpr->type != EXPR_STRING will trigger
+		 * below and we'll spam+return.
+		 */
+		struct symbol *sym = fmtexpr->symbol;
+		if (sym && sym->initializer &&
+		    (is_array_of_const_char(sym) ||
+		     is_const_pointer_to_const_char(sym))) {
+			fmtexpr = strip_parens(sym->initializer);
+		}
+	}
+
+	if (fmtexpr->type != EXPR_STRING) {
+		if (!unknown_format(fmtexpr))
+			return;
+		/*
+		 * Since we're now handling both ?: and static const
+		 * char[] arguments, we don't get as much noise. It's
+		 * still spammy, though.
+		 */
+		spam("warn: call of '%s' with non-constant format argument", name);
+		return;
+	}
+
+	orig_fmt = fmt = fmtexpr->string->data;
+	caller_in_fmt = check_format_string(fmt, caller);
+
+	while (*fmt) {
+		const char *old_fmt = fmt;
+		int read = format_decode(fmt, &spec);
+		struct expression *arg;
+
+		fmt += read;
+		if (spec.type == FORMAT_TYPE_NONE ||
+		    spec.type == FORMAT_TYPE_PERCENT_CHAR)
+			continue;
+
+		/*
+		 * vaidx is currently the correct 0-based index for
+		 * get_argument_from_call_expr. We post-increment it
+		 * here so that it is the correct 1-based index for
+		 * all the handlers below. This of course requires
+		 * that we handle all FORMAT_TYPE_* things not taking
+		 * an argument above.
+		 */
+		arg = get_argument_from_call_expr(callexpr->args, vaidx++);
+
+		if (spec.flags & SPECIAL && has_hex_prefix(orig_fmt, old_fmt))
+			sm_warning("'%.2s' prefix is redundant when # flag is used", old_fmt-2);
+		if (is_integer_specifier(spec.type)) {
+			if (spec.base != 16 && has_hex_prefix(orig_fmt, old_fmt))
+				sm_warning("'%.2s' prefix is confusing together with '%.*s' specifier",
+				       old_fmt-2, (int)(fmt-old_fmt), old_fmt);
+
+			check_cast_from_pointer(old_fmt, read, arg, vaidx);
+		}
+
+		switch (spec.type) {
+		/* case FORMAT_TYPE_NONE: */
+		/* case FORMAT_TYPE_PERCENT_CHAR: */
+		/* 	break; */
+
+		case FORMAT_TYPE_INVALID:
+			sm_error("format specifier '%.*s' invalid", read, old_fmt);
+			return;
+
+		case FORMAT_TYPE_FLOAT:
+			sm_error("no floats in the kernel; invalid format specifier '%.*s'", read, old_fmt);
+			return;
+
+		case FORMAT_TYPE_NRCHARS:
+			sm_error("%%n not supported in kernel");
+			return;
+
+		case FORMAT_TYPE_WIDTH:
+		case FORMAT_TYPE_PRECISION:
+			/* check int argument */
+			break;
+
+		case FORMAT_TYPE_STR:
+			/*
+			 * If the format string already contains the
+			 * function name, it probably doesn't make
+			 * sense to pass __func__ as well (or rather
+			 * vice versa: If pr_fmt(fmt) has been defined
+			 * to '"%s: " fmt, __func__', it doesn't make
+			 * sense to use a format string containing the
+			 * function name).
+			 *
+			 * This produces a lot of hits. They are not
+			 * false positives, but it is easier to handle
+			 * the things which don't occur that often
+			 * first, so we use spam().
+			 */
+			if (caller_in_fmt) {
+				if (arg_is___func__(arg))
+					spam("warn: passing __func__ while the format string already contains the name of the function '%s'",
+					     caller);
+				else if (arg_contains_caller(arg, caller))
+					sm_warning("passing string constant '%s' containing '%s' which is already part of the format string",
+					       arg->string->data, caller);
+			}
+			break;
+
+		case FORMAT_TYPE_PTR:
+			/* This is the most important part: Checking %p extensions. */
+			pointer(fmt, arg, vaidx);
+			while (isalnum(*fmt))
+				fmt++;
+			break;
+
+		case FORMAT_TYPE_CHAR:
+
+		case FORMAT_TYPE_UBYTE:
+		case FORMAT_TYPE_BYTE:
+		case FORMAT_TYPE_USHORT:
+		case FORMAT_TYPE_SHORT:
+		case FORMAT_TYPE_INT:
+			/* argument should have integer type of width <= sizeof(int) */
+			break;
+
+		case FORMAT_TYPE_UINT:
+			hexbyte(old_fmt, fmt-old_fmt, arg, vaidx, spec);
+		case FORMAT_TYPE_LONG:
+		case FORMAT_TYPE_ULONG:
+		case FORMAT_TYPE_LONG_LONG:
+		case FORMAT_TYPE_PTRDIFF:
+		case FORMAT_TYPE_SIZE_T:
+			break;
+		}
+
+
+	}
+
+	if (get_argument_from_call_expr(callexpr->args, vaidx))
+		sm_warning("excess argument passed to '%s'", name);
+
+
+}
+
+static void
+check_printf_call(const char *name, struct expression *callexpr, void *_info)
+{
+	/*
+	 * Note: attribute(printf) uses 1-based indexing, but
+	 * get_argument_from_call_expr() uses 0-based indexing.
+	 */
+	int info = PTR_INT(_info);
+	int fmtidx = (info & 0xff) - 1;
+	int vaidx = ((info >> 8) & 0xff) - 1;
+	struct expression *fmtexpr;
+	const char *caller = get_function();
+
+	if (!caller)
+		return;
+
+	/*
+	 * Calling a v*printf function with a literal format arg is
+	 * extremely rare, so we don't bother doing the only checking
+	 * we could do, namely checking that the format string is
+	 * valid.
+	 */
+	if (vaidx < 0)
+		return;
+
+	/*
+	 * For the things we use the name of the calling function for,
+	 * it is more appropriate to skip a potential SyS_ prefix; the
+	 * same goes for leading underscores.
+	 */
+	if (!strncmp(caller, "SyS_", 4))
+		caller += 4;
+	while (*caller == '_')
+		++caller;
+
+	/* Lack of format argument is a bug. */
+	fmtexpr = get_argument_from_call_expr(callexpr->args, fmtidx);
+	if (!fmtexpr) {
+		sm_error("call of '%s' with no format argument", name);
+		return;
+	}
+
+	do_check_printf_call(caller, name, callexpr, fmtexpr, vaidx);
+}
+
+
+void check_kernel_printf(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	my_id = id;
+
+#define printf_hook(func, fmt, first_to_check)	\
+	add_function_hook(#func, check_printf_call, INT_PTR(fmt + (first_to_check << 8)))
+
+	/* Extracted using stupid perl script. */
+
+#if 0
+	printf_hook(srm_printk, 1, 2);                    /* arch/alpha/include/asm/console.h */
+	printf_hook(die_if_kernel, 1, 2);                 /* arch/frv/include/asm/bug.h */
+	printf_hook(ia64_mca_printk, 1, 2);               /* arch/ia64/include/asm/mca.h */
+	printf_hook(nfprint, 1, 2);                       /* arch/m68k/include/asm/natfeat.h */
+	printf_hook(gdbstub_printk, 1, 2);                /* arch/mn10300/include/asm/gdb-stub.h */
+	printf_hook(DBG, 1, 2);                           /* arch/powerpc/boot/ps3.c */
+	printf_hook(printf, 1, 2);                        /* arch/powerpc/boot/stdio.h */
+	printf_hook(udbg_printf, 1, 2);                   /* arch/powerpc/include/asm/udbg.h */
+	printf_hook(__debug_sprintf_event, 3, 4);         /* arch/s390/include/asm/debug.h */
+	printf_hook(__debug_sprintf_exception, 3, 4);     /* arch/s390/include/asm/debug.h */
+	printf_hook(prom_printf, 1, 2);                   /* arch/sparc/include/asm/oplib_32.h */
+
+	printf_hook(fail, 1, 2);                          /* arch/x86/vdso/vdso2c.c */
+#endif
+
+	printf_hook(_ldm_printk, 3, 4);                   /* block/partitions/ldm.c */
+	printf_hook(rbd_warn, 2, 3);                      /* drivers/block/rbd.c */
+	printf_hook(fw_err, 2, 3);                        /* drivers/firewire/core.h */
+	printf_hook(fw_notice, 2, 3);                     /* drivers/firewire/core.h */
+	printf_hook(i915_error_printf, 2, 3);             /* drivers/gpu/drm/i915/i915_drv.h */
+	printf_hook(i915_handle_error, 3, 4);             /* drivers/gpu/drm/i915/i915_drv.h */
+	printf_hook(nv_printk_, 3, 4);                    /* drivers/gpu/drm/nouveau/core/include/core/printk.h */
+	printf_hook(host1x_debug_output, 2, 3);           /* drivers/gpu/host1x/debug.h */
+	printf_hook(callc_debug, 2, 3);                   /* drivers/isdn/hisax/callc.c */
+	printf_hook(link_debug, 3, 4);                    /* drivers/isdn/hisax/callc.c */
+	printf_hook(HiSax_putstatus, 3, 4);               /* drivers/isdn/hisax/hisax.h */
+	printf_hook(VHiSax_putstatus, 3, 0);              /* drivers/isdn/hisax/hisax.h */
+	printf_hook(debugl1, 2, 3);                       /* drivers/isdn/hisax/isdnl1.h */
+	printf_hook(l3m_debug, 2, 3);                     /* drivers/isdn/hisax/isdnl3.c */
+	printf_hook(dout_debug, 2, 3);                    /* drivers/isdn/hisax/st5481_d.c */
+	printf_hook(l1m_debug, 2, 3);                     /* drivers/isdn/hisax/st5481_d.c */
+	printf_hook(bch_cache_set_error, 2, 3);           /* drivers/md/bcache/bcache.h */
+	printf_hook(_tda_printk, 4, 5);                   /* drivers/media/tuners/tda18271-priv.h */
+	printf_hook(i40evf_debug_d, 3, 4);                /* drivers/net/ethernet/intel/i40evf/i40e_osdep.h */
+	printf_hook(en_print, 3, 4);                      /* drivers/net/ethernet/mellanox/mlx4/mlx4_en.h */
+	printf_hook(_ath_dbg, 3, 4);                      /* drivers/net/wireless/ath/ath.h */
+	printf_hook(ath_printk, 3, 4);                    /* drivers/net/wireless/ath/ath.h */
+	printf_hook(ath10k_dbg, 3, 4);                    /* drivers/net/wireless/ath/ath10k/debug.h */
+	printf_hook(ath10k_err, 2, 3);                    /* drivers/net/wireless/ath/ath10k/debug.h */
+	printf_hook(ath10k_info, 2, 3);                   /* drivers/net/wireless/ath/ath10k/debug.h */
+	printf_hook(ath10k_warn, 2, 3);                   /* drivers/net/wireless/ath/ath10k/debug.h */
+	printf_hook(_ath5k_printk, 3, 4);                 /* drivers/net/wireless/ath/ath5k/ath5k.h */
+	printf_hook(ATH5K_DBG, 3, 4);                     /* drivers/net/wireless/ath/ath5k/debug.h */
+	printf_hook(ATH5K_DBG_UNLIMIT, 3, 4);             /* drivers/net/wireless/ath/ath5k/debug.h */
+	printf_hook(ath6kl_printk, 2, 3);                 /* drivers/net/wireless/ath/ath6kl/common.h */
+	printf_hook(ath6kl_err, 1, 2);                    /* drivers/net/wireless/ath/ath6kl/debug.h */
+	printf_hook(ath6kl_info, 1, 2);                   /* drivers/net/wireless/ath/ath6kl/debug.h */
+	printf_hook(ath6kl_warn, 1, 2);                   /* drivers/net/wireless/ath/ath6kl/debug.h */
+	printf_hook(wil_dbg_trace, 2, 3);                 /* drivers/net/wireless/ath/wil6210/wil6210.h */
+	printf_hook(wil_err, 2, 3);                       /* drivers/net/wireless/ath/wil6210/wil6210.h */
+	printf_hook(wil_err_ratelimited, 2, 3);           /* drivers/net/wireless/ath/wil6210/wil6210.h */
+	printf_hook(wil_info, 2, 3);                      /* drivers/net/wireless/ath/wil6210/wil6210.h */
+	printf_hook(b43dbg, 2, 3);                        /* drivers/net/wireless/b43/b43.h */
+	printf_hook(b43err, 2, 3);                        /* drivers/net/wireless/b43/b43.h */
+	printf_hook(b43info, 2, 3);                       /* drivers/net/wireless/b43/b43.h */
+	printf_hook(b43warn, 2, 3);                       /* drivers/net/wireless/b43/b43.h */
+	printf_hook(b43legacydbg, 2, 3);                  /* drivers/net/wireless/b43legacy/b43legacy.h */
+	printf_hook(b43legacyerr, 2, 3);                  /* drivers/net/wireless/b43legacy/b43legacy.h */
+	printf_hook(b43legacyinfo, 2, 3);                 /* drivers/net/wireless/b43legacy/b43legacy.h */
+	printf_hook(b43legacywarn, 2, 3);                 /* drivers/net/wireless/b43legacy/b43legacy.h */
+	printf_hook(__brcmf_dbg, 3, 4);                   /* drivers/net/wireless/brcm80211/brcmfmac/debug.h */
+	printf_hook(__brcmf_err, 2, 3);                   /* drivers/net/wireless/brcm80211/brcmfmac/debug.h */
+	printf_hook(__brcms_crit, 2, 3);                  /* drivers/net/wireless/brcm80211/brcmsmac/debug.h */
+	printf_hook(__brcms_dbg, 4, 5);                   /* drivers/net/wireless/brcm80211/brcmsmac/debug.h */
+	printf_hook(__brcms_err, 2, 3);                   /* drivers/net/wireless/brcm80211/brcmsmac/debug.h */
+	printf_hook(__brcms_info, 2, 3);                  /* drivers/net/wireless/brcm80211/brcmsmac/debug.h */
+	printf_hook(__brcms_warn, 2, 3);                  /* drivers/net/wireless/brcm80211/brcmsmac/debug.h */
+	printf_hook(brcmu_dbg_hex_dump, 3, 4);            /* drivers/net/wireless/brcm80211/include/brcmu_utils.h */
+	printf_hook(__iwl_crit, 2, 3);                    /* drivers/net/wireless/iwlwifi/iwl-debug.h */
+	printf_hook(__iwl_dbg, 5, 6);                     /* drivers/net/wireless/iwlwifi/iwl-debug.h */
+	printf_hook(__iwl_err, 4, 5);                     /* drivers/net/wireless/iwlwifi/iwl-debug.h */
+	printf_hook(__iwl_info, 2, 3);                    /* drivers/net/wireless/iwlwifi/iwl-debug.h */
+	printf_hook(__iwl_warn, 2, 3);                    /* drivers/net/wireless/iwlwifi/iwl-debug.h */
+	printf_hook(rsi_dbg, 2, 3);                       /* drivers/net/wireless/rsi/rsi_main.h */
+	printf_hook(RTPRINT, 4, 5);                       /* drivers/net/wireless/rtlwifi/debug.h */
+	printf_hook(RT_ASSERT, 2, 3);                     /* drivers/net/wireless/rtlwifi/debug.h */
+	printf_hook(RT_TRACE, 4, 5);                      /* drivers/net/wireless/rtlwifi/debug.h */
+	printf_hook(__of_node_dup, 2, 3);                 /* drivers/of/of_private.h */
+	printf_hook(BNX2FC_HBA_DBG, 2, 3);                /* drivers/scsi/bnx2fc/bnx2fc_debug.h */
+	printf_hook(BNX2FC_IO_DBG, 2, 3);                 /* drivers/scsi/bnx2fc/bnx2fc_debug.h */
+	printf_hook(BNX2FC_TGT_DBG, 2, 3);                /* drivers/scsi/bnx2fc/bnx2fc_debug.h */
+	printf_hook(ql_dbg, 4, 5);                        /* drivers/scsi/qla2xxx/qla_dbg.h */
+	printf_hook(ql_dbg_pci, 4, 5);                    /* drivers/scsi/qla2xxx/qla_dbg.h */
+	printf_hook(ql_log, 4, 5);                        /* drivers/scsi/qla2xxx/qla_dbg.h */
+	printf_hook(ql_log_pci, 4, 5);                    /* drivers/scsi/qla2xxx/qla_dbg.h */
+	printf_hook(libcfs_debug_msg, 2, 3);              /* drivers/staging/lustre/include/linux/libcfs/libcfs_debug.h */
+	printf_hook(libcfs_debug_vmsg2, 4, 5);            /* drivers/staging/lustre/include/linux/libcfs/libcfs_debug.h */
+	printf_hook(_ldlm_lock_debug, 3, 4);              /* drivers/staging/lustre/lustre/include/lustre_dlm.h */
+	printf_hook(_debug_req, 3, 4);                    /* drivers/staging/lustre/lustre/include/lustre_net.h */
+	printf_hook(iscsi_change_param_sprintf, 2, 3);    /* drivers/target/iscsi/iscsi_target_login.c */
+	printf_hook(dbg, 1, 2);                           /* drivers/tty/serial/samsung.c */
+	printf_hook(_usb_stor_dbg, 2, 3);                 /* drivers/usb/storage/debug.h */
+	printf_hook(usb_stor_dbg, 2, 3);                  /* drivers/usb/storage/debug.h */
+	printf_hook(vringh_bad, 1, 2);                    /* drivers/vhost/vringh.c */
+	printf_hook(__adfs_error, 3, 4);                  /* fs/adfs/adfs.h */
+	printf_hook(affs_error, 3, 4);                    /* fs/affs/affs.h */
+	printf_hook(affs_warning, 3, 4);                  /* fs/affs/affs.h */
+	printf_hook(befs_debug, 2, 3);                    /* fs/befs/befs.h */
+	printf_hook(befs_error, 2, 3);                    /* fs/befs/befs.h */
+	printf_hook(befs_warning, 2, 3);                  /* fs/befs/befs.h */
+	printf_hook(__btrfs_panic, 5, 6);                 /* fs/btrfs/ctree.h */
+	printf_hook(__btrfs_std_error, 5, 6);             /* fs/btrfs/ctree.h */
+	printf_hook(btrfs_printk, 2, 3);                  /* fs/btrfs/ctree.h */
+	printf_hook(cifs_vfs_err, 1, 2);                  /* fs/cifs/cifs_debug.h */
+	printf_hook(__ecryptfs_printk, 1, 2);             /* fs/ecryptfs/ecryptfs_kernel.h */
+	printf_hook(ext2_error, 3, 4);                    /* fs/ext2/ext2.h */
+	printf_hook(ext2_msg, 3, 4);                      /* fs/ext2/ext2.h */
+	printf_hook(ext3_abort, 3, 4);                    /* fs/ext3/ext3.h */
+	printf_hook(ext3_error, 3, 4);                    /* fs/ext3/ext3.h */
+	printf_hook(ext3_msg, 3, 4);                      /* fs/ext3/ext3.h */
+	printf_hook(ext3_warning, 3, 4);                  /* fs/ext3/ext3.h */
+	printf_hook(__ext4_abort, 4, 5);                  /* fs/ext4/ext4.h */
+	printf_hook(__ext4_error, 4, 5);                  /* fs/ext4/ext4.h */
+	printf_hook(__ext4_error_file, 5, 6);             /* fs/ext4/ext4.h */
+	printf_hook(__ext4_error_inode, 5, 6);            /* fs/ext4/ext4.h */
+	printf_hook(__ext4_grp_locked_error, 7, 8);       /* fs/ext4/ext4.h */
+	printf_hook(__ext4_msg, 3, 4);                    /* fs/ext4/ext4.h */
+	printf_hook(__ext4_warning, 4, 5);                /* fs/ext4/ext4.h */
+	printf_hook(f2fs_msg, 3, 4);                      /* fs/f2fs/f2fs.h */
+	printf_hook(__fat_fs_error, 3, 4);                /* fs/fat/fat.h */
+	printf_hook(fat_msg, 3, 4);                       /* fs/fat/fat.h */
+	printf_hook(gfs2_print_dbg, 2, 3);                /* fs/gfs2/glock.h */
+	printf_hook(gfs2_lm_withdraw, 2, 3);              /* fs/gfs2/util.h */
+	printf_hook(hpfs_error, 2, 3);                    /* fs/hpfs/hpfs_fn.h */
+	printf_hook(jfs_error, 2, 3);                     /* fs/jfs/jfs_superblock.h */
+	printf_hook(nilfs_error, 3, 4);                   /* fs/nilfs2/nilfs.h */
+	printf_hook(nilfs_warning, 3, 4);                 /* fs/nilfs2/nilfs.h */
+	printf_hook(__ntfs_debug, 4, 5);                  /* fs/ntfs/debug.h */
+	printf_hook(__ntfs_error, 3, 4);                  /* fs/ntfs/debug.h */
+	printf_hook(__ntfs_warning, 3, 4);                /* fs/ntfs/debug.h */
+	printf_hook(__ocfs2_abort, 3, 4);                 /* fs/ocfs2/super.h */
+	printf_hook(__ocfs2_error, 3, 4);                 /* fs/ocfs2/super.h */
+	printf_hook(_udf_err, 3, 4);                      /* fs/udf/udfdecl.h */
+	printf_hook(_udf_warn, 3, 4);                     /* fs/udf/udfdecl.h */
+	printf_hook(ufs_error, 3, 4);                     /* fs/ufs/ufs.h */
+	printf_hook(ufs_panic, 3, 4);                     /* fs/ufs/ufs.h */
+	printf_hook(ufs_warning, 3, 4);                   /* fs/ufs/ufs.h */
+	printf_hook(xfs_alert, 2, 3);                     /* fs/xfs/xfs_message.h */
+	printf_hook(xfs_alert_tag, 3, 4);                 /* fs/xfs/xfs_message.h */
+	printf_hook(xfs_crit, 2, 3);                      /* fs/xfs/xfs_message.h */
+	printf_hook(xfs_debug, 2, 3);                     /* fs/xfs/xfs_message.h */
+	printf_hook(xfs_emerg, 2, 3);                     /* fs/xfs/xfs_message.h */
+	printf_hook(xfs_err, 2, 3);                       /* fs/xfs/xfs_message.h */
+	printf_hook(xfs_info, 2, 3);                      /* fs/xfs/xfs_message.h */
+	printf_hook(xfs_notice, 2, 3);                    /* fs/xfs/xfs_message.h */
+	printf_hook(xfs_warn, 2, 3);                      /* fs/xfs/xfs_message.h */
+	printf_hook(warn_slowpath_fmt, 3, 4);             /* include/asm-generic/bug.h */
+	printf_hook(warn_slowpath_fmt_taint, 4, 5);       /* include/asm-generic/bug.h */
+	printf_hook(drm_err, 1, 2);                       /* include/drm/drmP.h */
+	printf_hook(drm_ut_debug_printk, 2, 3);           /* include/drm/drmP.h */
+	printf_hook(__acpi_handle_debug, 3, 4);           /* include/linux/acpi.h */
+	printf_hook(acpi_handle_printk, 3, 4);            /* include/linux/acpi.h */
+	printf_hook(audit_log, 4, 5);                     /* include/linux/audit.h */
+	printf_hook(audit_log_format, 2, 3);              /* include/linux/audit.h */
+	printf_hook(bdi_register, 3, 4);                  /* include/linux/backing-dev.h */
+	printf_hook(__trace_note_message, 2, 3);          /* include/linux/blktrace_api.h */
+	printf_hook(_dev_info, 2, 3);                     /* include/linux/device.h */
+	printf_hook(dev_alert, 2, 3);                     /* include/linux/device.h */
+	printf_hook(dev_crit, 2, 3);                      /* include/linux/device.h */
+	printf_hook(dev_emerg, 2, 3);                     /* include/linux/device.h */
+	printf_hook(dev_err, 2, 3);                       /* include/linux/device.h */
+	printf_hook(dev_notice, 2, 3);                    /* include/linux/device.h */
+	printf_hook(dev_printk, 3, 4);                    /* include/linux/device.h */
+	printf_hook(dev_printk_emit, 3, 4);               /* include/linux/device.h */
+	printf_hook(dev_set_name, 2, 3);                  /* include/linux/device.h */
+	printf_hook(dev_vprintk_emit, 3, 0);              /* include/linux/device.h */
+	printf_hook(dev_warn, 2, 3);                      /* include/linux/device.h */
+	printf_hook(device_create, 5, 6);                 /* include/linux/device.h */
+	printf_hook(device_create_with_groups, 6, 7);     /* include/linux/device.h */
+	printf_hook(devm_kasprintf, 3, 4);                /* include/linux/device.h */
+	printf_hook(__dynamic_dev_dbg, 3, 4);             /* include/linux/dynamic_debug.h */
+	printf_hook(__dynamic_netdev_dbg, 3, 4);          /* include/linux/dynamic_debug.h */
+	printf_hook(__dynamic_pr_debug, 2, 3);            /* include/linux/dynamic_debug.h */
+	printf_hook(__simple_attr_check_format, 1, 2);    /* include/linux/fs.h */
+	printf_hook(fscache_init_cache, 3, 4);            /* include/linux/fscache-cache.h */
+	printf_hook(gameport_set_phys, 2, 3);             /* include/linux/gameport.h */
+	printf_hook(iio_trigger_alloc, 1, 2);             /* include/linux/iio/trigger.h */
+	printf_hook(__check_printsym_format, 1, 2);       /* include/linux/kallsyms.h */
+	printf_hook(kdb_printf, 1, 2);                    /* include/linux/kdb.h */
+	printf_hook(vkdb_printf, 1, 0);                   /* include/linux/kdb.h */
+	printf_hook(____trace_printk_check_format, 1, 2);  /* include/linux/kernel.h */
+	printf_hook(__trace_bprintk, 2, 3);               /* include/linux/kernel.h */
+	printf_hook(__trace_printk, 2, 3);                /* include/linux/kernel.h */
+	printf_hook(kasprintf, 2, 3);                     /* include/linux/kernel.h */
+	printf_hook(panic, 1, 2);                         /* include/linux/kernel.h */
+	printf_hook(scnprintf, 3, 4);                     /* include/linux/kernel.h */
+	printf_hook(snprintf, 3, 4);                      /* include/linux/kernel.h */
+	printf_hook(sprintf, 2, 3);                       /* include/linux/kernel.h */
+	printf_hook(trace_printk, 1, 2);                  /* include/linux/kernel.h */
+	printf_hook(vscnprintf, 3, 0);                    /* include/linux/kernel.h */
+	printf_hook(vsnprintf, 3, 0);                     /* include/linux/kernel.h */
+	printf_hook(vsprintf, 2, 0);                      /* include/linux/kernel.h */
+	printf_hook(vmcoreinfo_append_str, 1, 2);         /* include/linux/kexec.h */
+	printf_hook(__request_module, 2, 3);              /* include/linux/kmod.h */
+	printf_hook(add_uevent_var, 2, 3);                /* include/linux/kobject.h */
+	printf_hook(kobject_add, 3, 4);                   /* include/linux/kobject.h */
+	printf_hook(kobject_init_and_add, 4, 5);          /* include/linux/kobject.h */
+	printf_hook(kobject_set_name, 2, 3);              /* include/linux/kobject.h */
+	printf_hook(kthread_create_on_node, 4, 5);        /* include/linux/kthread.h */
+	printf_hook(__ata_ehi_push_desc, 2, 3);           /* include/linux/libata.h */
+	printf_hook(ata_dev_printk, 3, 4);                /* include/linux/libata.h */
+	printf_hook(ata_ehi_push_desc, 2, 3);             /* include/linux/libata.h */
+	printf_hook(ata_link_printk, 3, 4);               /* include/linux/libata.h */
+	printf_hook(ata_port_desc, 2, 3);                 /* include/linux/libata.h */
+	printf_hook(ata_port_printk, 3, 4);               /* include/linux/libata.h */
+	printf_hook(warn_alloc_failed, 3, 4);             /* include/linux/mm.h */
+	printf_hook(mmiotrace_printk, 1, 2);              /* include/linux/mmiotrace.h */
+	printf_hook(netdev_alert, 2, 3);                  /* include/linux/netdevice.h */
+	printf_hook(netdev_crit, 2, 3);                   /* include/linux/netdevice.h */
+	printf_hook(netdev_emerg, 2, 3);                  /* include/linux/netdevice.h */
+	printf_hook(netdev_err, 2, 3);                    /* include/linux/netdevice.h */
+	printf_hook(netdev_info, 2, 3);                   /* include/linux/netdevice.h */
+	printf_hook(netdev_notice, 2, 3);                 /* include/linux/netdevice.h */
+	printf_hook(netdev_printk, 3, 4);                 /* include/linux/netdevice.h */
+	printf_hook(netdev_warn, 2, 3);                   /* include/linux/netdevice.h */
+	printf_hook(early_printk, 1, 2);                  /* include/linux/printk.h */
+	printf_hook(no_printk, 1, 2);                     /* include/linux/printk.h */
+	printf_hook(printk, 1, 2);                        /* include/linux/printk.h */
+	printf_hook(printk_deferred, 1, 2);               /* include/linux/printk.h */
+	printf_hook(printk_emit, 5, 6);                   /* include/linux/printk.h */
+	printf_hook(vprintk, 1, 0);                       /* include/linux/printk.h */
+	printf_hook(vprintk_emit, 5, 0);                  /* include/linux/printk.h */
+	printf_hook(__quota_error, 3, 4);                 /* include/linux/quotaops.h */
+	printf_hook(seq_buf_printf, 2, 3);                /* include/linux/seq_buf.h */
+	printf_hook(seq_buf_vprintf, 2, 0);               /* include/linux/seq_buf.h */
+	printf_hook(seq_printf, 2, 3);                    /* include/linux/seq_file.h */
+	printf_hook(seq_vprintf, 2, 0);                   /* include/linux/seq_file.h */
+	printf_hook(bprintf, 3, 4);                       /* include/linux/string.h */
+	printf_hook(trace_seq_printf, 2, 3);              /* include/linux/trace_seq.h */
+	printf_hook(trace_seq_vprintf, 2, 0);             /* include/linux/trace_seq.h */
+	printf_hook(__alloc_workqueue_key, 1, 6);         /* include/linux/workqueue.h */
+	printf_hook(set_worker_desc, 1, 2);               /* include/linux/workqueue.h */
+	printf_hook(_p9_debug, 3, 4);                     /* include/net/9p/9p.h */
+	printf_hook(bt_err, 1, 2);                        /* include/net/bluetooth/bluetooth.h */
+	printf_hook(bt_info, 1, 2);                       /* include/net/bluetooth/bluetooth.h */
+	printf_hook(nf_ct_helper_log, 3, 4);              /* include/net/netfilter/nf_conntrack_helper.h */
+	printf_hook(nf_log_buf_add, 2, 3);                /* include/net/netfilter/nf_log.h */
+	printf_hook(nf_log_packet, 8, 9);                 /* include/net/netfilter/nf_log.h */
+	printf_hook(SOCK_DEBUG, 2, 3);                    /* include/net/sock.h */
+	printf_hook(__snd_printk, 4, 5);                  /* include/sound/core.h */
+	printf_hook(_snd_printd, 2, 3);                   /* include/sound/core.h */
+	printf_hook(snd_printd, 1, 2);                    /* include/sound/core.h */
+	printf_hook(snd_printdd, 1, 2);                   /* include/sound/core.h */
+	printf_hook(snd_iprintf, 2, 3);                   /* include/sound/info.h */
+	printf_hook(snd_seq_create_kernel_client, 3, 4);  /* include/sound/seq_kernel.h */
+	printf_hook(xen_raw_printk, 1, 2);                /* include/xen/hvc-console.h */
+	printf_hook(xenbus_dev_error, 3, 4);              /* include/xen/xenbus.h */
+	printf_hook(xenbus_dev_fatal, 3, 4);              /* include/xen/xenbus.h */
+	printf_hook(xenbus_printf, 4, 5);                 /* include/xen/xenbus.h */
+	printf_hook(xenbus_watch_pathfmt, 4, 5);          /* include/xen/xenbus.h */
+	printf_hook(batadv_fdebug_log, 2, 3);             /* net/batman-adv/debugfs.c */
+	printf_hook(_batadv_dbg, 4, 5);                   /* net/batman-adv/main.h */
+	printf_hook(batadv_debug_log, 2, 3);              /* net/batman-adv/main.h */
+	printf_hook(__sdata_dbg, 2, 3);                   /* net/mac80211/debug.h */
+	printf_hook(__sdata_err, 1, 2);                   /* net/mac80211/debug.h */
+	printf_hook(__sdata_info, 1, 2);                  /* net/mac80211/debug.h */
+	printf_hook(__wiphy_dbg, 3, 4);                   /* net/mac80211/debug.h */
+	printf_hook(mac80211_format_buffer, 4, 5);        /* net/mac80211/debugfs.h */
+	printf_hook(__rds_conn_error, 2, 3);              /* net/rds/rds.h */
+	printf_hook(rdsdebug, 1, 2);                      /* net/rds/rds.h */
+	printf_hook(printl, 1, 2);                        /* net/sctp/probe.c */
+	printf_hook(svc_printk, 2, 3);                    /* net/sunrpc/svc.c */
+	printf_hook(tomoyo_io_printf, 2, 3);              /* security/tomoyo/common.c */
+	printf_hook(tomoyo_supervisor, 2, 3);             /* security/tomoyo/common.h */
+	printf_hook(tomoyo_write_log, 2, 3);              /* security/tomoyo/common.h */
+	printf_hook(cmp_error, 2, 3);                     /* sound/firewire/cmp.c */
+}
--- /dev/null	Fri Dec 21 15:00:05 2018
+++ new/usr/src/tools/smatch/src/check_kmalloc_to_bugon.c	Fri Dec 21 15:00:05 2018
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+extern int check_assigned_expr_id;
+
+static int is_kmalloc_call(struct expression *expr)
+{
+	if (expr->type != EXPR_CALL)
+		return 0;
+	if (expr->fn->type != EXPR_SYMBOL)
+		return 0;
+	if (!strcmp(expr->fn->symbol_name->name, "kmalloc"))
+		return 1;
+	if (!strcmp(expr->fn->symbol_name->name, "kzalloc"))
+		return 1;
+	return 0;
+}
+
+static void match_condition(struct expression *expr)
+{
+	char *macro;
+	struct smatch_state *state;
+	struct expression *right;
+	char *name;
+
+	macro = get_macro_name(expr->pos);
+	if (!macro || strcmp(macro, "BUG_ON") != 0)
+		return;
+	state = get_state_expr(check_assigned_expr_id, expr);
+	if (!state || !state->data)
+		return;
+	right = (struct expression *)state->data;
+	if (!is_kmalloc_call(right))
+		return;
+
+	name = expr_to_var(expr);
+	sm_warning("bug on allocation failure '%s'", name);
+	free_string(name);
+}
+
+void check_kmalloc_to_bugon(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+	if (!option_spammy)
+		return;
+	my_id = id;
+	add_hook(&match_condition, CONDITION_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:05 2018
+++ new/usr/src/tools/smatch/src/check_kmalloc_wrong_size.c	Fri Dec 21 15:00:05 2018
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2011 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static int get_data_size(struct expression *ptr)
+{
+	struct symbol *type;
+
+	type = get_type(ptr);
+	if (!type || type->type != SYM_PTR)
+		return 0;
+	type = get_base_type(type);
+	if (!type)
+		return 0;
+	return type_bytes(type);
+}
+
+static void check_size_matches(int data_size, struct expression *size_expr)
+{
+	sval_t sval;
+
+	if (data_size == 1)  /* this is generic a buffer */
+		return;
+
+	if (!get_implied_value(size_expr, &sval))
+		return;
+	if (sval_cmp_val(sval, data_size) != 0)
+		sm_warning("double check that we're allocating correct size: %d vs %s", data_size, sval_to_str(sval));
+}
+
+static void match_alloc(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *call = strip_expr(expr->right);
+	struct expression *arg;
+	int ptr_size;
+
+	ptr_size = get_data_size(expr->left);
+	if (!ptr_size)
+		return;
+
+	arg = get_argument_from_call_expr(call->args, 0);
+	arg = strip_expr(arg);
+	if (!arg || arg->type != EXPR_BINOP || arg->op != '*')
+		return;
+	if (expr->left->type == EXPR_SIZEOF)
+		check_size_matches(ptr_size, arg->left);
+	if (expr->right->type == EXPR_SIZEOF)
+		check_size_matches(ptr_size, arg->right);
+}
+
+static void match_calloc(const char *fn, struct expression *expr, void *_arg_nr)
+{
+	int arg_nr = PTR_INT(_arg_nr);
+	struct expression *call = strip_expr(expr->right);
+	struct expression *arg;
+	int ptr_size;
+
+	ptr_size = get_data_size(expr->left);
+	if (!ptr_size)
+		return;
+
+	arg = get_argument_from_call_expr(call->args, arg_nr);
+	check_size_matches(ptr_size, arg);
+}
+
+void check_kmalloc_wrong_size(int id)
+{
+	my_id = id;
+
+	if (option_project != PROJ_KERNEL) {
+		add_function_assign_hook("malloc", &match_alloc, NULL);
+		add_function_assign_hook("calloc", &match_calloc, INT_PTR(1));
+		return;
+	}
+
+	add_function_assign_hook("kmalloc", &match_alloc, NULL);
+	add_function_assign_hook("kcalloc", &match_calloc, INT_PTR(1));
+}
--- /dev/null	Fri Dec 21 15:00:05 2018
+++ new/usr/src/tools/smatch/src/check_kunmap.c	Fri Dec 21 15:00:05 2018
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+STATE(no_unmap);
+
+extern int check_assigned_expr_id;
+static int my_id;
+
+static void check_assignment(void *data)
+{
+	struct expression *expr = (struct expression *)data;
+	char *fn;
+
+	if (!expr)
+		return;
+	if (expr->type != EXPR_CALL)
+		return;
+	fn = expr_to_var(expr->fn);
+	if (!fn)
+		return;
+	if (!strcmp(fn, "kmap"))
+		sm_warning("passing the wrong variable to kunmap()");
+	free_string(fn);
+}
+
+static void match_kmap_atomic(const char *fn, struct expression *expr, void *data)
+{
+	struct expression *arg;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	set_state_expr(my_id, arg, &no_unmap);
+}
+
+static void match_kunmap_atomic(const char *fn, struct expression *expr, void *data)
+{
+	struct expression *arg;
+	struct sm_state *sm;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	sm = get_sm_state_expr(my_id, arg);
+	if (!sm)
+		return;
+	if (slist_has_state(sm->possible, &no_unmap))
+		sm_warning("passing the wrong variable to kmap_atomic()");
+}
+
+static void match_kunmap(const char *fn, struct expression *expr, void *data)
+{
+	struct expression *arg;
+	struct sm_state *sm;
+	struct sm_state *tmp;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	sm = get_sm_state_expr(check_assigned_expr_id, arg);
+	if (!sm)
+		return;
+	FOR_EACH_PTR(sm->possible, tmp) {
+		check_assignment(tmp->state->data);
+	} END_FOR_EACH_PTR(tmp);
+}
+
+void check_kunmap(int id)
+{
+	my_id = id;
+	if (option_project != PROJ_KERNEL)
+		return;
+	add_function_hook("kunmap", &match_kunmap, NULL);
+	add_function_hook("kmap_atomic", &match_kmap_atomic, NULL);
+	add_function_hook("kunmap_atomic", &match_kunmap_atomic, NULL);
+}
--- /dev/null	Fri Dec 21 15:00:05 2018
+++ new/usr/src/tools/smatch/src/check_leaks.c	Fri Dec 21 15:00:05 2018
@@ -0,0 +1,270 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * The point of this check is to look for leaks.
+ * foo = malloc();  // <- mark it as allocated.
+ * A variable becomes &ok if we:
+ * 1) assign it to another variable.
+ * 2) pass it to a function.
+ *
+ * One complication is dealing with stuff like:
+ * foo->bar = malloc();
+ * foo->baz = malloc();
+ * foo = something();
+ *
+ * The work around is that for now what this check only
+ * checks simple expressions and doesn't check whether
+ * foo->bar is leaked.
+ * 
+ */
+
+#include <fcntl.h>
+#include <unistd.h>
+#include "parse.h"
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+STATE(allocated);
+STATE(ok);
+
+static void set_parent(struct expression *expr, struct smatch_state *state);
+
+static const char *allocation_funcs[] = {
+	"malloc",
+	"kmalloc",
+	"kzalloc",
+	"kmemdup",
+};
+
+static char *alloc_parent_str(struct symbol *sym)
+{
+	static char buf[256];
+
+	if (!sym || !sym->ident)
+		return NULL;
+
+	snprintf(buf, 255, "%s", sym->ident->name);
+	buf[255] = '\0';
+	return alloc_string(buf);
+}
+
+static char *get_parent_from_expr(struct expression *expr, struct symbol **sym)
+{
+	char *name;
+
+	expr = strip_expr(expr);
+
+	name = expr_to_str_sym(expr, sym);
+	free_string(name);
+	if (!name || !*sym || !(*sym)->ident) {
+		*sym = NULL;
+		return NULL;
+	}
+	return alloc_parent_str(*sym);
+}
+
+static int is_local(struct expression *expr)
+{
+	char *name;
+	struct symbol *sym;
+	int ret = 0;
+
+	name = expr_to_str_sym(expr, &sym);
+	if (!name || !sym)
+		goto out;
+	if (sym->ctype.modifiers & (MOD_NONLOCAL | MOD_STATIC | MOD_ADDRESSABLE))
+		goto out;
+	ret = 1;
+out:
+	free_string(name);
+	return ret;
+}
+
+static int is_param(struct expression *expr)
+{
+	char *name;
+	struct symbol *sym;
+	struct symbol *tmp;
+	int ret = 0;
+
+	name = expr_to_str_sym(expr, &sym);
+	if (!name || !sym)
+		goto out;
+	FOR_EACH_PTR(cur_func_sym->ctype.base_type->arguments, tmp) {
+		if (tmp == sym) {
+			ret = 1;
+			goto out;
+		}
+	} END_FOR_EACH_PTR(tmp);
+out:
+	free_string(name);
+	return ret;
+	
+}
+
+static void match_alloc(const char *fn, struct expression *expr, void *unused)
+{
+	if (!is_local(expr->left))
+		return;
+	if (is_param(expr->left))
+		return;
+	if (expr->left->type != EXPR_SYMBOL)
+		return;
+	set_state_expr(my_id, expr->left, &allocated);
+}
+
+static void match_condition(struct expression *expr)
+{
+	struct sm_state *sm;
+
+	expr = strip_expr(expr);
+
+	switch (expr->type) {
+	case EXPR_PREOP:
+	case EXPR_SYMBOL:
+	case EXPR_DEREF:
+		sm = get_sm_state_expr(my_id, expr);
+		if (sm && slist_has_state(sm->possible, &allocated))
+			set_true_false_states_expr(my_id, expr, NULL, &ok);
+		return;
+	case EXPR_ASSIGNMENT:
+		 /* You have to deal with stuff like if (a = b = c) */
+		match_condition(expr->left);
+		return;
+	default:
+		return;
+	}
+}
+
+static void set_parent(struct expression *expr, struct smatch_state *state)
+{
+	char *name;
+	struct symbol *sym;
+
+	expr = strip_expr(expr);
+	if (!expr)
+		return;
+	if (expr->type == EXPR_CONDITIONAL ||
+	    expr->type == EXPR_SELECT) {
+		set_parent(expr->cond_true, state);
+		set_parent(expr->cond_false, state);
+		return;
+	}
+
+	name = get_parent_from_expr(expr, &sym);
+	if (!name || !sym)
+		goto free;
+	if (state == &ok && !get_state(my_id, name, sym))
+		goto free;
+	set_state(my_id, name, sym, state);
+free:
+	free_string(name);
+}
+
+static void match_function_call(struct expression *expr)
+{
+	struct expression *tmp;
+
+	FOR_EACH_PTR(expr->args, tmp) {
+		set_parent(tmp, &ok);
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void warn_if_allocated(struct expression *expr)
+{
+	struct sm_state *sm;
+	char *name;
+	sval_t sval;
+
+	if (get_implied_value(expr, &sval) && sval.value == 0)
+		return;
+
+	sm = get_sm_state_expr(my_id, expr);
+	if (!sm)
+		return;
+	if (!slist_has_state(sm->possible, &allocated))
+		return;
+
+	name = expr_to_var(expr);
+	sm_warning("overwrite may leak '%s'", name);
+	free_string(name);
+
+	/* silence further warnings */
+	set_state_expr(my_id, expr, &ok);
+}
+
+static void match_assign(struct expression *expr)
+{
+	struct expression *right;
+
+	right = expr->right;
+
+	while (right->type == EXPR_ASSIGNMENT)
+		right = right->left;
+
+	warn_if_allocated(expr->left);
+	set_parent(right, &ok);
+}
+
+static void check_for_allocated(void)
+{
+	struct stree *stree;
+	struct sm_state *tmp;
+
+	stree = __get_cur_stree();
+	FOR_EACH_MY_SM(my_id, stree, tmp) {
+		if (!slist_has_state(tmp->possible, &allocated))
+			continue;
+		sm_warning("possible memory leak of '%s'", tmp->name);
+	} END_FOR_EACH_SM(tmp);
+}
+
+static void match_return(struct expression *ret_value)
+{
+	if (__inline_fn)
+		return;
+	set_parent(ret_value, &ok);
+	check_for_allocated();
+}
+
+static void match_end_func(struct symbol *sym)
+{
+	if (__inline_fn)
+		return;
+	check_for_allocated();
+}
+
+void check_leaks(int id)
+{
+	int i;
+
+	my_id = id;
+
+	for (i = 0; i < ARRAY_SIZE(allocation_funcs); i++)
+		add_function_assign_hook(allocation_funcs[i], &match_alloc, NULL);
+
+	add_hook(&match_condition, CONDITION_HOOK);
+
+	add_hook(&match_function_call, FUNCTION_CALL_HOOK);
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+
+	add_hook(&match_return, RETURN_HOOK);
+	add_hook(&match_end_func, END_FUNC_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:05 2018
+++ new/usr/src/tools/smatch/src/check_list.h	Fri Dec 21 15:00:05 2018
@@ -0,0 +1,219 @@
+#ifndef CK
+#define CK(_x) void _x(int id);
+#define __undo_CK_def
+#endif
+
+CK(register_db_call_marker) /* always has to be first  */
+CK(register_param_used)     /* get_state_hooks have to be registered before smatch_extra */
+CK(register_container_of)
+CK(register_container_of2)
+CK(register_smatch_extra)   /* smatch_extra always has to be SMATCH_EXTRA */
+CK(register_smatch_extra_links)
+CK(register_modification_hooks)
+/*
+ * Implications should probably be after all the modification and smatch_extra
+ * hooks have run.
+ *
+ */
+CK(register_implications)
+CK(register_definition_db_callbacks)
+CK(register_project)
+CK(register_untracked_param)
+CK(register_buf_comparison)
+CK(register_buf_comparison_links)
+CK(register_param_compare_limit)
+CK(register_param_compare_limit_links)
+CK(register_returns_early)
+
+CK(register_smatch_ignore)
+CK(register_buf_size)
+CK(register_strlen)
+CK(register_strlen_equiv)
+CK(register_capped)
+CK(register_parse_call_math)
+CK(register_param_limit)
+CK(register_param_filter)
+CK(register_param_set)
+CK(register_param_cleared)
+CK(register_struct_assignment)
+CK(register_comparison)
+CK(register_comparison_links)
+CK(register_comparison_inc_dec)
+CK(register_comparison_inc_dec_links)
+CK(register_local_values)
+CK(register_function_ptrs)
+CK(register_annotate)
+CK(register_start_states)
+CK(register_type_val)
+CK(register_data_source)
+CK(register_common_functions)
+CK(register_function_info)
+CK(register_auto_copy)
+CK(register_type_links)
+CK(register_impossible)
+CK(register_impossible_return)
+CK(register_strings)
+CK(register_real_absolute)
+CK(register_imaginary_absolute)
+CK(register_fn_arg_link)
+CK(register_parameter_names)
+CK(register_return_to_param)
+CK(register_return_to_param_links)
+CK(register_constraints)
+CK(register_constraints_required)
+CK(register_about_fn_ptr_arg)
+CK(register_mtag)
+CK(register_mtag_map)
+CK(register_mtag_data)
+CK(register_param_to_mtag_data)
+CK(register_array_values)
+CK(register_nul_terminator)
+CK(register_nul_terminator_param_set)
+CK(register_statement_count)
+
+CK(register_kernel_user_data2)
+CK(register_kernel_user_data3)
+
+CK(check_debug)
+
+CK(check_bogus_loop)
+
+CK(check_deref)
+CK(check_check_deref)
+CK(check_dereferences_param)
+CK(check_index_overflow)
+CK(check_index_overflow_loop_marker)
+CK(check_testing_index_after_use)
+CK(check_memcpy_overflow)
+CK(check_strcpy_overflow)
+CK(check_sprintf_overflow)
+CK(check_snprintf_overflow)
+CK(check_allocating_enough_data)
+CK(check_leaks)
+CK(check_type)
+CK(check_allocation_funcs)
+CK(check_frees_argument)
+CK(check_deref_check)
+CK(check_signed)
+CK(check_precedence)
+CK(check_unused_ret)
+CK(check_dma_on_stack)
+CK(check_param_mapper)
+CK(check_call_tree)
+CK(check_dev_queue_xmit)
+CK(check_stack)
+CK(check_no_return)
+CK(check_mod_timer)
+CK(check_return)
+CK(check_resource_size)
+CK(check_release_resource)
+CK(check_proc_create)
+CK(check_freeing_null)
+CK(check_frees_param)
+CK(check_free)
+CK(check_frees_param_strict)
+CK(check_free_strict)
+CK(check_no_effect)
+CK(check_kunmap)
+CK(check_snprintf)
+CK(check_macros)
+CK(check_return_efault)
+CK(check_gfp_dma)
+CK(check_unwind)
+CK(check_kmalloc_to_bugon)
+CK(check_platform_device_put)
+CK(check_info_leak)
+CK(check_return_enomem)
+CK(check_get_user_overflow)
+CK(check_get_user_overflow2)
+CK(check_access_ok_math)
+CK(check_container_of)
+CK(check_input_free_device)
+CK(check_select)
+CK(check_memset)
+CK(check_logical_instead_of_bitwise)
+CK(check_kmalloc_wrong_size)
+CK(check_pointer_math)
+CK(check_bit_shift)
+CK(check_macro_side_effects)
+CK(check_sizeof)
+CK(check_return_cast)
+CK(check_or_vs_and)
+CK(check_passes_sizeof)
+CK(check_assign_vs_compare)
+CK(check_missing_break)
+CK(check_array_condition)
+CK(check_struct_type)
+CK(check_64bit_shift)
+CK(check_wrong_size_arg)
+CK(check_cast_assign)
+CK(check_readl_infinite_loops)
+CK(check_double_checking)
+CK(check_shift_to_zero)
+CK(check_indenting)
+CK(check_unreachable)
+CK(check_no_if_block)
+CK(check_buffer_too_small_for_struct)
+CK(check_uninitialized)
+CK(check_signed_integer_overflow_check)
+CK(check_continue_vs_break)
+CK(check_impossible_mask)
+CK(check_syscall_arg_type)
+CK(check_trinity_generator)
+
+/* <- your test goes here */
+/* CK(register_template) */
+
+/* kernel specific */
+CK(check_kernel_printf)
+CK(check_locking)
+CK(check_puts_argument)
+CK(check_err_ptr)
+CK(check_err_ptr_deref)
+CK(check_expects_err_ptr)
+CK(check_held_dev)
+CK(check_return_negative_var)
+CK(check_rosenberg)
+CK(check_rosenberg2)
+CK(check_wait_for_common)
+CK(check_bogus_irqrestore)
+CK(check_zero_to_err_ptr)
+CK(check_freeing_devm)
+CK(check_off_by_one_relative)
+CK(check_capable)
+CK(check_ns_capable)
+CK(check_test_bit)
+CK(check_dma_mapping_error)
+CK(check_nospec)
+CK(check_nospec_barrier)
+CK(check_spectre)
+CK(check_implicit_dependencies)
+
+/* wine specific stuff */
+CK(check_wine_filehandles)
+CK(check_wine_WtoA)
+
+/* illumos specific */
+CK(check_all_func_returns)
+
+#include "check_list_local.h"
+
+CK(register_scope)
+CK(register_stored_conditions)
+CK(register_stored_conditions_links)
+CK(register_sval)
+CK(register_buf_size_late)
+CK(register_smatch_extra_late)
+CK(register_assigned_expr) /* This is used by smatch_extra.c so it has to come really late */
+CK(register_assigned_expr_links)
+CK(register_modification_hooks_late)  /* has to come after smatch_extra */
+CK(register_comparison_late) /* has to come after modification_hooks_late */
+CK(register_function_hooks)
+CK(check_kernel)  /* this is overwriting stuff from smatch_extra_late */
+CK(check_wine)
+CK(register_returns)
+
+#ifdef __undo_CK_def
+#undef CK
+#undef __undo_CK_def
+#endif
--- /dev/null	Fri Dec 21 15:00:05 2018
+++ new/usr/src/tools/smatch/src/check_locking.c	Fri Dec 21 15:00:05 2018
@@ -0,0 +1,969 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This test checks that locks are held the same across all returns.
+ *
+ * Of course, some functions are designed to only hold the locks on success.
+ * Oh well... We can rewrite it later if we want.
+ *
+ * The list of wine locking functions came from an earlier script written
+ * by Michael Stefaniuc.
+ *
+ */
+
+#include "parse.h"
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+static int func_has_transition;
+
+STATE(locked);
+STATE(start_state);
+STATE(unlocked);
+STATE(impossible);
+
+enum action {
+	LOCK,
+	UNLOCK,
+};
+
+enum return_type {
+	ret_any,
+	ret_non_zero,
+	ret_zero,
+	ret_negative,
+	ret_positive,
+};
+
+#define RETURN_VAL -1
+#define NO_ARG -2
+
+struct lock_info {
+	const char *function;
+	enum action action;
+	const char *name;
+	int arg;
+	enum return_type return_type;
+};
+
+static struct lock_info wine_lock_table[] = {
+	{"create_window_handle", LOCK, "create_window_handle", RETURN_VAL, ret_non_zero},
+	{"WIN_GetPtr", LOCK, "create_window_handle", RETURN_VAL, ret_non_zero},
+	{"WIN_ReleasePtr", UNLOCK, "create_window_handle", 0, ret_any},
+	{"EnterCriticalSection", LOCK, "CriticalSection", 0, ret_any},
+	{"LeaveCriticalSection", UNLOCK, "CriticalSection", 0, ret_any},
+	{"RtlEnterCriticalSection", LOCK, "RtlCriticalSection", 0, ret_any},
+	{"RtlLeaveCriticalSection", UNLOCK, "RtlCriticalSection", 0, ret_any},
+	{"GDI_GetObjPtr", LOCK, "GDI_Get", 0, ret_non_zero},
+	{"GDI_ReleaseObj", UNLOCK, "GDI_Get", 0, ret_any},
+	{"LdrLockLoaderLock", LOCK, "LdrLockLoaderLock", 2, ret_any},
+	{"LdrUnlockLoaderLock", UNLOCK, "LdrLockLoaderLock", 1, ret_any},
+	{"_lock", LOCK, "_lock", 0, ret_any},
+	{"_unlock", UNLOCK, "_lock", 0, ret_any},
+	{"msiobj_lock", LOCK, "msiobj_lock", 0, ret_any},
+	{"msiobj_unlock", UNLOCK, "msiobj_lock", 0, ret_any},
+	{"RtlAcquirePebLock", LOCK, "PebLock", NO_ARG, ret_any},
+	{"RtlReleasePebLock", UNLOCK, "PebLock", NO_ARG, ret_any},
+	{"server_enter_uninterrupted_section", LOCK, "server_uninterrupted_section", 0, ret_any},
+	{"server_leave_uninterrupted_section", UNLOCK, "server_uninterrupted_section", 0, ret_any},
+	{"RtlLockHeap", LOCK, "RtlLockHeap", 0, ret_any},
+	{"RtlUnlockHeap", UNLOCK, "RtlLockHeap", 0, ret_any},
+	{"_EnterSysLevel", LOCK, "SysLevel", 0, ret_any},
+	{"_LeaveSysLevel", UNLOCK, "SysLevel", 0, ret_any},
+	{"USER_Lock", LOCK, "USER_Lock", NO_ARG, ret_any},
+	{"USER_Unlock", UNLOCK, "USER_Lock", NO_ARG, ret_any},
+	{"wine_tsx11_lock", LOCK, "wine_tsx11_lock", NO_ARG, ret_any},
+	{"wine_tsx11_unlock", UNLOCK, "wine_tsx11_lock", NO_ARG, ret_any},
+	{"wine_tsx11_lock_ptr", LOCK, "wine_tsx11_lock_ptr", NO_ARG, ret_any},
+	{"wine_tsx11_unlock_ptr", UNLOCK, "wine_tsx11_lock_ptr", NO_ARG, ret_any},
+	{"wined3d_mutex_lock", LOCK, "wined3d_mutex_lock", NO_ARG, ret_any},
+	{"wined3d_mutex_unlock", UNLOCK, "wined3d_mutex_lock", NO_ARG, ret_any},
+	{"X11DRV_DIB_Lock", LOCK, "X11DRV_DIB_Lock", 0, ret_any},
+	{"X11DRV_DIB_Unlock", UNLOCK, "X11DRV_DIB_Lock", 0, ret_any},
+};
+
+static struct lock_info kernel_lock_table[] = {
+	{"lock_kernel",   LOCK,   "BKL", NO_ARG, ret_any},
+	{"unlock_kernel", UNLOCK, "BKL", NO_ARG, ret_any},
+
+	{"spin_lock",                  LOCK,   "spin_lock", 0, ret_any},
+	{"spin_unlock",                UNLOCK, "spin_lock", 0, ret_any},
+	{"spin_lock_nested",           LOCK,   "spin_lock", 0, ret_any},
+	{"_spin_lock",                 LOCK,   "spin_lock", 0, ret_any},
+	{"_spin_unlock",               UNLOCK, "spin_lock", 0, ret_any},
+	{"_spin_lock_nested",          LOCK,   "spin_lock", 0, ret_any},
+	{"__spin_lock",                LOCK,   "spin_lock", 0, ret_any},
+	{"__spin_unlock",              UNLOCK, "spin_lock", 0, ret_any},
+	{"__spin_lock_nested",         LOCK,   "spin_lock", 0, ret_any},
+	{"raw_spin_lock",              LOCK,   "spin_lock", 0, ret_any},
+	{"raw_spin_unlock",            UNLOCK, "spin_lock", 0, ret_any},
+	{"_raw_spin_lock",             LOCK,   "spin_lock", 0, ret_any},
+	{"_raw_spin_lock_nested",      LOCK,   "spin_lock", 0, ret_any},
+	{"_raw_spin_unlock",           UNLOCK, "spin_lock", 0, ret_any},
+	{"__raw_spin_lock",            LOCK,   "spin_lock", 0, ret_any},
+	{"__raw_spin_unlock",          UNLOCK, "spin_lock", 0, ret_any},
+
+	{"spin_lock_irq",              LOCK,   "spin_lock", 0, ret_any},
+	{"spin_unlock_irq",            UNLOCK, "spin_lock", 0, ret_any},
+	{"_spin_lock_irq",             LOCK,   "spin_lock", 0, ret_any},
+	{"_spin_unlock_irq",           UNLOCK, "spin_lock", 0, ret_any},
+	{"__spin_lock_irq",            LOCK,   "spin_lock", 0, ret_any},
+	{"__spin_unlock_irq",          UNLOCK, "spin_lock", 0, ret_any},
+	{"_raw_spin_lock_irq",         LOCK,   "spin_lock", 0, ret_any},
+	{"_raw_spin_unlock_irq",       UNLOCK, "spin_lock", 0, ret_any},
+	{"__raw_spin_unlock_irq",      UNLOCK, "spin_lock", 0, ret_any},
+	{"spin_lock_irqsave",          LOCK,   "spin_lock", 0, ret_any},
+	{"spin_unlock_irqrestore",     UNLOCK, "spin_lock", 0, ret_any},
+	{"_spin_lock_irqsave",         LOCK,   "spin_lock", 0, ret_any},
+	{"_spin_unlock_irqrestore",    UNLOCK, "spin_lock", 0, ret_any},
+	{"__spin_lock_irqsave",        LOCK,   "spin_lock", 0, ret_any},
+	{"__spin_unlock_irqrestore",   UNLOCK, "spin_lock", 0, ret_any},
+	{"_raw_spin_lock_irqsave",     LOCK,   "spin_lock", 0, ret_any},
+	{"_raw_spin_unlock_irqrestore", UNLOCK, "spin_lock", 0, ret_any},
+	{"__raw_spin_lock_irqsave",    LOCK,   "spin_lock", 0, ret_any},
+	{"__raw_spin_unlock_irqrestore", UNLOCK, "spin_lock", 0, ret_any},
+	{"spin_lock_irqsave_nested",   LOCK,   "spin_lock", 0, ret_any},
+	{"_spin_lock_irqsave_nested",  LOCK,   "spin_lock", 0, ret_any},
+	{"__spin_lock_irqsave_nested", LOCK,   "spin_lock", 0, ret_any},
+	{"_raw_spin_lock_irqsave_nested", LOCK, "spin_lock", 0, ret_any},
+	{"spin_lock_bh",               LOCK,   "spin_lock", 0, ret_any},
+	{"spin_unlock_bh",             UNLOCK, "spin_lock", 0, ret_any},
+	{"_spin_lock_bh",              LOCK,   "spin_lock", 0, ret_any},
+	{"_spin_unlock_bh",            UNLOCK, "spin_lock", 0, ret_any},
+	{"__spin_lock_bh",             LOCK,   "spin_lock", 0, ret_any},
+	{"__spin_unlock_bh",           UNLOCK, "spin_lock", 0, ret_any},
+
+	{"spin_trylock",               LOCK,   "spin_lock", 0, ret_non_zero},
+	{"_spin_trylock",              LOCK,   "spin_lock", 0, ret_non_zero},
+	{"__spin_trylock",             LOCK,   "spin_lock", 0, ret_non_zero},
+	{"raw_spin_trylock",           LOCK,   "spin_lock", 0, ret_non_zero},
+	{"_raw_spin_trylock",          LOCK,   "spin_lock", 0, ret_non_zero},
+	{"spin_trylock_irq",           LOCK,   "spin_lock", 0, ret_non_zero},
+	{"spin_trylock_irqsave",       LOCK,   "spin_lock", 0, ret_non_zero},
+	{"spin_trylock_bh",            LOCK,   "spin_lock", 0, ret_non_zero},
+	{"_spin_trylock_bh",           LOCK,   "spin_lock", 0, ret_non_zero},
+	{"__spin_trylock_bh",          LOCK,   "spin_lock", 0, ret_non_zero},
+	{"__raw_spin_trylock",         LOCK,   "spin_lock", 0, ret_non_zero},
+	{"_atomic_dec_and_lock",       LOCK,   "spin_lock", 1, ret_non_zero},
+
+	{"read_lock",                 LOCK,   "read_lock", 0, ret_any},
+	{"read_unlock",               UNLOCK, "read_lock", 0, ret_any},
+	{"_read_lock",                LOCK,   "read_lock", 0, ret_any},
+	{"_read_unlock",              UNLOCK, "read_lock", 0, ret_any},
+	{"__read_lock",               LOCK,   "read_lock", 0, ret_any},
+	{"__read_unlock",             UNLOCK, "read_lock", 0, ret_any},
+	{"_raw_read_lock",            LOCK,   "read_lock", 0, ret_any},
+	{"_raw_read_unlock",          UNLOCK, "read_lock", 0, ret_any},
+	{"__raw_read_lock",           LOCK,   "read_lock", 0, ret_any},
+	{"__raw_read_unlock",         UNLOCK, "read_lock", 0, ret_any},
+	{"read_lock_irq",             LOCK,   "read_lock", 0, ret_any},
+	{"read_unlock_irq" ,          UNLOCK, "read_lock", 0, ret_any},
+	{"_read_lock_irq",            LOCK,   "read_lock", 0, ret_any},
+	{"_read_unlock_irq",          UNLOCK, "read_lock", 0, ret_any},
+	{"__read_lock_irq",           LOCK,   "read_lock", 0, ret_any},
+	{"__read_unlock_irq",         UNLOCK, "read_lock", 0, ret_any},
+	{"read_lock_irqsave",         LOCK,   "read_lock", 0, ret_any},
+	{"read_unlock_irqrestore",    UNLOCK, "read_lock", 0, ret_any},
+	{"_read_lock_irqsave",        LOCK,   "read_lock", 0, ret_any},
+	{"_read_unlock_irqrestore",   UNLOCK, "read_lock", 0, ret_any},
+	{"__read_lock_irqsave",       LOCK,   "read_lock", 0, ret_any},
+	{"__read_unlock_irqrestore",  UNLOCK, "read_lock", 0, ret_any},
+	{"read_lock_bh",              LOCK,   "read_lock", 0, ret_any},
+	{"read_unlock_bh",            UNLOCK, "read_lock", 0, ret_any},
+	{"_read_lock_bh",             LOCK,   "read_lock", 0, ret_any},
+	{"_read_unlock_bh",           UNLOCK, "read_lock", 0, ret_any},
+	{"__read_lock_bh",            LOCK,   "read_lock", 0, ret_any},
+	{"__read_unlock_bh",          UNLOCK, "read_lock", 0, ret_any},
+	{"_raw_read_lock_bh",         LOCK,   "read_lock", 0, ret_any},
+	{"_raw_read_unlock_bh",       UNLOCK, "read_lock", 0, ret_any},
+	{"__raw_read_lock_bh",        LOCK,   "read_lock", 0, ret_any},
+	{"__raw_read_unlock_bh",      UNLOCK, "read_lock", 0, ret_any},
+
+	{"generic__raw_read_trylock", LOCK,   "read_lock", 0, ret_non_zero},
+	{"read_trylock",              LOCK,   "read_lock", 0, ret_non_zero},
+	{"_read_trylock",             LOCK,   "read_lock", 0, ret_non_zero},
+	{"raw_read_trylock",          LOCK,   "read_lock", 0, ret_non_zero},
+	{"_raw_read_trylock",         LOCK,   "read_lock", 0, ret_non_zero},
+	{"__raw_read_trylock",        LOCK,   "read_lock", 0, ret_non_zero},
+	{"__read_trylock",            LOCK,   "read_lock", 0, ret_non_zero},
+
+	{"write_lock",                LOCK,   "write_lock", 0, ret_any},
+	{"write_unlock",              UNLOCK, "write_lock", 0, ret_any},
+	{"_write_lock",               LOCK,   "write_lock", 0, ret_any},
+	{"_write_unlock",             UNLOCK, "write_lock", 0, ret_any},
+	{"__write_lock",              LOCK,   "write_lock", 0, ret_any},
+	{"__write_unlock",            UNLOCK, "write_lock", 0, ret_any},
+	{"write_lock_irq",            LOCK,   "write_lock", 0, ret_any},
+	{"write_unlock_irq",          UNLOCK, "write_lock", 0, ret_any},
+	{"_write_lock_irq",           LOCK,   "write_lock", 0, ret_any},
+	{"_write_unlock_irq",         UNLOCK, "write_lock", 0, ret_any},
+	{"__write_lock_irq",          LOCK,   "write_lock", 0, ret_any},
+	{"__write_unlock_irq",        UNLOCK, "write_lock", 0, ret_any},
+	{"write_lock_irqsave",        LOCK,   "write_lock", 0, ret_any},
+	{"write_unlock_irqrestore",   UNLOCK, "write_lock", 0, ret_any},
+	{"_write_lock_irqsave",       LOCK,   "write_lock", 0, ret_any},
+	{"_write_unlock_irqrestore",  UNLOCK, "write_lock", 0, ret_any},
+	{"__write_lock_irqsave",      LOCK,   "write_lock", 0, ret_any},
+	{"__write_unlock_irqrestore", UNLOCK, "write_lock", 0, ret_any},
+	{"write_lock_bh",             LOCK,   "write_lock", 0, ret_any},
+	{"write_unlock_bh",           UNLOCK, "write_lock", 0, ret_any},
+	{"_write_lock_bh",            LOCK,   "write_lock", 0, ret_any},
+	{"_write_unlock_bh",          UNLOCK, "write_lock", 0, ret_any},
+	{"__write_lock_bh",           LOCK,   "write_lock", 0, ret_any},
+	{"__write_unlock_bh",         UNLOCK, "write_lock", 0, ret_any},
+	{"_raw_write_lock",           LOCK,   "write_lock", 0, ret_any},
+	{"__raw_write_lock",          LOCK,   "write_lock", 0, ret_any},
+	{"_raw_write_unlock",         UNLOCK, "write_lock", 0, ret_any},
+	{"__raw_write_unlock",        UNLOCK, "write_lock", 0, ret_any},
+
+	{"write_trylock",             LOCK,   "write_lock", 0, ret_non_zero},
+	{"_write_trylock",            LOCK,   "write_lock", 0, ret_non_zero},
+	{"raw_write_trylock",         LOCK,   "write_lock", 0, ret_non_zero},
+	{"_raw_write_trylock",        LOCK,   "write_lock", 0, ret_non_zero},
+	{"__write_trylock",           LOCK,   "write_lock", 0, ret_non_zero},
+	{"__raw_write_trylock",       LOCK,   "write_lock", 0, ret_non_zero},
+
+	{"down",               LOCK,   "sem", 0, ret_any},
+	{"up",                 UNLOCK, "sem", 0, ret_any},
+	{"down_trylock",       LOCK,   "sem", 0, ret_zero},
+	{"down_timeout",       LOCK,   "sem", 0, ret_zero},
+	{"down_interruptible", LOCK,   "sem", 0, ret_zero},
+
+	{"mutex_lock",                      LOCK,   "mutex", 0, ret_any},
+	{"mutex_unlock",                    UNLOCK, "mutex", 0, ret_any},
+	{"mutex_lock_nested",               LOCK,   "mutex", 0, ret_any},
+
+	{"mutex_lock_interruptible",        LOCK,   "mutex", 0, ret_zero},
+	{"mutex_lock_interruptible_nested", LOCK,   "mutex", 0, ret_zero},
+	{"mutex_lock_killable",             LOCK,   "mutex", 0, ret_zero},
+	{"mutex_lock_killable_nested",      LOCK,   "mutex", 0, ret_zero},
+
+	{"mutex_trylock",                   LOCK,   "mutex", 0, ret_non_zero},
+
+	{"raw_local_irq_disable", LOCK,   "irq", NO_ARG, ret_any},
+	{"raw_local_irq_enable",  UNLOCK, "irq", NO_ARG, ret_any},
+	{"spin_lock_irq",         LOCK,   "irq", NO_ARG, ret_any},
+	{"spin_unlock_irq",       UNLOCK, "irq", NO_ARG, ret_any},
+	{"_spin_lock_irq",        LOCK,   "irq", NO_ARG, ret_any},
+	{"_spin_unlock_irq",      UNLOCK, "irq", NO_ARG, ret_any},
+	{"__spin_lock_irq",       LOCK,   "irq", NO_ARG, ret_any},
+	{"__spin_unlock_irq",     UNLOCK, "irq", NO_ARG, ret_any},
+	{"_raw_spin_lock_irq",    LOCK,   "irq", NO_ARG, ret_any},
+	{"_raw_spin_unlock_irq",  UNLOCK, "irq", NO_ARG, ret_any},
+	{"__raw_spin_unlock_irq", UNLOCK, "irq", NO_ARG, ret_any},
+	{"spin_trylock_irq",      LOCK,   "irq", NO_ARG, ret_non_zero},
+	{"read_lock_irq",         LOCK,   "irq", NO_ARG, ret_any},
+	{"read_unlock_irq",       UNLOCK, "irq", NO_ARG, ret_any},
+	{"_read_lock_irq",        LOCK,   "irq", NO_ARG, ret_any},
+	{"_read_unlock_irq",      UNLOCK, "irq", NO_ARG, ret_any},
+	{"__read_lock_irq",       LOCK,   "irq", NO_ARG, ret_any},
+	{"__read_unlock_irq",     UNLOCK, "irq", NO_ARG, ret_any},
+	{"write_lock_irq",        LOCK,   "irq", NO_ARG, ret_any},
+	{"write_unlock_irq",      UNLOCK, "irq", NO_ARG, ret_any},
+	{"_write_lock_irq",       LOCK,   "irq", NO_ARG, ret_any},
+	{"_write_unlock_irq",     UNLOCK, "irq", NO_ARG, ret_any},
+	{"__write_lock_irq",      LOCK,   "irq", NO_ARG, ret_any},
+	{"__write_unlock_irq",    UNLOCK, "irq", NO_ARG, ret_any},
+
+	{"arch_local_irq_save",        LOCK,   "irqsave", RETURN_VAL, ret_any},
+	{"arch_local_irq_restore",     UNLOCK, "irqsave", 0, ret_any},
+	{"__raw_local_irq_save",       LOCK,   "irqsave", RETURN_VAL, ret_any},
+	{"raw_local_irq_restore",      UNLOCK, "irqsave", 0, ret_any},
+	{"spin_lock_irqsave_nested",   LOCK,   "irqsave", RETURN_VAL, ret_any},
+	{"spin_lock_irqsave",          LOCK,   "irqsave", RETURN_VAL, ret_any},
+	{"spin_lock_irqsave",          LOCK,   "irqsave", 1, ret_any},
+	{"spin_unlock_irqrestore",     UNLOCK, "irqsave", 1, ret_any},
+	{"_spin_lock_irqsave_nested",  LOCK,   "irqsave", RETURN_VAL, ret_any},
+	{"_spin_lock_irqsave",         LOCK,   "irqsave", RETURN_VAL, ret_any},
+	{"_spin_lock_irqsave",         LOCK,   "irqsave", 1, ret_any},
+	{"_spin_unlock_irqrestore",    UNLOCK, "irqsave", 1, ret_any},
+	{"__spin_lock_irqsave_nested", LOCK,   "irqsave", 1, ret_any},
+	{"__spin_lock_irqsave",        LOCK,   "irqsave", 1, ret_any},
+	{"__spin_unlock_irqrestore",   UNLOCK, "irqsave", 1, ret_any},
+	{"_raw_spin_lock_irqsave",     LOCK,   "irqsave", RETURN_VAL, ret_any},
+	{"_raw_spin_lock_irqsave",     LOCK,   "irqsave", 1, ret_any},
+	{"_raw_spin_unlock_irqrestore",UNLOCK, "irqsave", 1, ret_any},
+	{"__raw_spin_lock_irqsave",    LOCK,   "irqsave", RETURN_VAL, ret_any},
+	{"__raw_spin_unlock_irqrestore",UNLOCK, "irqsave", 1, ret_any},
+	{"_raw_spin_lock_irqsave_nested", LOCK, "irqsave", RETURN_VAL, ret_any},
+	{"spin_trylock_irqsave",       LOCK,   "irqsave", 1, ret_non_zero},
+	{"read_lock_irqsave",          LOCK,   "irqsave", RETURN_VAL, ret_any},
+	{"read_lock_irqsave",          LOCK,   "irqsave", 1, ret_any},
+	{"read_unlock_irqrestore",     UNLOCK, "irqsave", 1, ret_any},
+	{"_read_lock_irqsave",         LOCK,   "irqsave", RETURN_VAL, ret_any},
+	{"_read_lock_irqsave",         LOCK,   "irqsave", 1, ret_any},
+	{"_read_unlock_irqrestore",    UNLOCK, "irqsave", 1, ret_any},
+	{"__read_lock_irqsave",        LOCK,   "irqsave", RETURN_VAL, ret_any},
+	{"__read_unlock_irqrestore",   UNLOCK, "irqsave", 1, ret_any},
+	{"write_lock_irqsave",         LOCK,   "irqsave", RETURN_VAL, ret_any},
+	{"write_lock_irqsave",         LOCK,   "irqsave", 1, ret_any},
+	{"write_unlock_irqrestore",    UNLOCK, "irqsave", 1, ret_any},
+	{"_write_lock_irqsave",        LOCK,   "irqsave", RETURN_VAL, ret_any},
+	{"_write_lock_irqsave",        LOCK,   "irqsave", 1, ret_any},
+	{"_write_unlock_irqrestore",   UNLOCK, "irqsave", 1, ret_any},
+	{"__write_lock_irqsave",       LOCK,   "irqsave", RETURN_VAL, ret_any},
+	{"__write_unlock_irqrestore",  UNLOCK, "irqsave", 1, ret_any},
+
+	{"local_bh_disable",	LOCK,	"bottom_half", NO_ARG, ret_any},
+	{"_local_bh_disable",	LOCK,	"bottom_half", NO_ARG, ret_any},
+	{"__local_bh_disable",	LOCK,	"bottom_half", NO_ARG, ret_any},
+	{"local_bh_enable",	UNLOCK,	"bottom_half", NO_ARG, ret_any},
+	{"_local_bh_enable",	UNLOCK,	"bottom_half", NO_ARG, ret_any},
+	{"__local_bh_enable",	UNLOCK,	"bottom_half", NO_ARG, ret_any},
+	{"spin_lock_bh",        LOCK,   "bottom_half", NO_ARG, ret_any},
+	{"spin_unlock_bh",      UNLOCK, "bottom_half", NO_ARG, ret_any},
+	{"_spin_lock_bh",       LOCK,   "bottom_half", NO_ARG, ret_any},
+	{"_spin_unlock_bh",     UNLOCK, "bottom_half", NO_ARG, ret_any},
+	{"__spin_lock_bh",      LOCK,   "bottom_half", NO_ARG, ret_any},
+	{"__spin_unlock_bh",    UNLOCK, "bottom_half", NO_ARG, ret_any},
+	{"read_lock_bh",        LOCK,   "bottom_half", NO_ARG, ret_any},
+	{"read_unlock_bh",      UNLOCK, "bottom_half", NO_ARG, ret_any},
+	{"_read_lock_bh",       LOCK,   "bottom_half", NO_ARG, ret_any},
+	{"_read_unlock_bh",     UNLOCK, "bottom_half", NO_ARG, ret_any},
+	{"__read_lock_bh",      LOCK,   "bottom_half", NO_ARG, ret_any},
+	{"__read_unlock_bh",    UNLOCK, "bottom_half", NO_ARG, ret_any},
+	{"_raw_read_lock_bh",   LOCK,   "bottom_half", NO_ARG, ret_any},
+	{"_raw_read_unlock_bh", UNLOCK, "bottom_half", NO_ARG, ret_any},
+	{"write_lock_bh",       LOCK,   "bottom_half", NO_ARG, ret_any},
+	{"write_unlock_bh",     UNLOCK, "bottom_half", NO_ARG, ret_any},
+	{"_write_lock_bh",      LOCK,   "bottom_half", NO_ARG, ret_any},
+	{"_write_unlock_bh",    UNLOCK, "bottom_half", NO_ARG, ret_any},
+	{"__write_lock_bh",     LOCK,   "bottom_half", NO_ARG, ret_any},
+	{"__write_unlock_bh",   UNLOCK, "bottom_half", NO_ARG, ret_any},
+	{"spin_trylock_bh",     LOCK,   "bottom_half", NO_ARG, ret_non_zero},
+	{"_spin_trylock_bh",    LOCK,   "bottom_half", NO_ARG, ret_non_zero},
+	{"__spin_trylock_bh",   LOCK,   "bottom_half", NO_ARG, ret_non_zero},
+
+	{"ffs_mutex_lock",        LOCK,   "mutex", 0, ret_zero},
+};
+
+static struct lock_info *lock_table;
+
+static struct tracker_list *starts_locked;
+static struct tracker_list *starts_unlocked;
+
+struct locks_on_return {
+	int line;
+	struct tracker_list *locked;
+	struct tracker_list *unlocked;
+	struct tracker_list *impossible;
+	struct range_list *return_values;
+};
+DECLARE_PTR_LIST(return_list, struct locks_on_return);
+static struct return_list *all_returns;
+
+static char *make_full_name(const char *lock, const char *var)
+{
+	static char tmp_buf[512];
+
+	snprintf(tmp_buf, sizeof(tmp_buf), "%s:%s", lock, var);
+	remove_parens(tmp_buf);
+	return alloc_string(tmp_buf);
+}
+
+static struct expression *remove_spinlock_check(struct expression *expr)
+{
+	if (expr->type != EXPR_CALL)
+		return expr;
+	if (expr->fn->type != EXPR_SYMBOL)
+		return expr;
+	if (strcmp(expr->fn->symbol_name->name, "spinlock_check"))
+		return expr;
+	expr = get_argument_from_call_expr(expr->args, 0);
+	return expr;
+}
+
+static char *get_full_name(struct expression *expr, int index)
+{
+	struct expression *arg;
+	char *name = NULL;
+	char *full_name = NULL;
+	struct lock_info *lock = &lock_table[index];
+
+	if (lock->arg == RETURN_VAL) {
+		name = expr_to_var(expr->left);
+		full_name = make_full_name(lock->name, name);
+	} else if (lock->arg == NO_ARG) {
+		full_name = make_full_name(lock->name, "");
+	} else {
+		arg = get_argument_from_call_expr(expr->args, lock->arg);
+		if (!arg)
+			goto free;
+		arg = remove_spinlock_check(arg);
+		name = expr_to_str(arg);
+		if (!name)
+			goto free;
+		full_name = make_full_name(lock->name, name);
+	}
+free:
+	free_string(name);
+	return full_name;
+}
+
+static struct smatch_state *get_start_state(struct sm_state *sm)
+{
+	int is_locked = 0;
+	int is_unlocked = 0;
+
+	if (in_tracker_list(starts_locked, my_id, sm->name, sm->sym))
+		is_locked = 1;
+	if (in_tracker_list(starts_unlocked, my_id, sm->name, sm->sym))
+		is_unlocked = 1;
+	if (is_locked && is_unlocked)
+		return &undefined;
+	if (is_locked)
+		return &locked;
+	if (is_unlocked)
+		return &unlocked;
+	return &undefined;
+}
+
+static struct smatch_state *unmatched_state(struct sm_state *sm)
+{
+	return &start_state;
+}
+
+static void pre_merge_hook(struct sm_state *sm)
+{
+	if (is_impossible_path())
+		set_state(my_id, sm->name, sm->sym, &impossible);
+}
+
+static void do_lock(const char *name)
+{
+	struct sm_state *sm;
+
+	if (__inline_fn)
+		return;
+
+	sm = get_sm_state(my_id, name, NULL);
+	if (!sm)
+		add_tracker(&starts_unlocked, my_id, name, NULL);
+	if (sm && slist_has_state(sm->possible, &locked) &&
+			strcmp(name, "bottom_half:") != 0)
+		sm_error("double lock '%s'", name);
+	if (sm)
+		func_has_transition = TRUE;
+	set_state(my_id, name, NULL, &locked);
+}
+
+static void do_lock_failed(const char *name)
+{
+	struct sm_state *sm;
+
+	if (__inline_fn)
+		return;
+
+	sm = get_sm_state(my_id, name, NULL);
+	if (!sm)
+		add_tracker(&starts_unlocked, my_id, name, NULL);
+	set_state(my_id, name, NULL, &unlocked);
+}
+
+static void do_unlock(const char *name)
+{
+	struct sm_state *sm;
+
+	if (__inline_fn)
+		return;
+	if (__path_is_null())
+		return;
+	sm = get_sm_state(my_id, name, NULL);
+	if (!sm)
+		add_tracker(&starts_locked, my_id, name, NULL);
+	if (sm && slist_has_state(sm->possible, &unlocked) &&
+			strcmp(name, "bottom_half:") != 0)
+		sm_error("double unlock '%s'", name);
+	if (sm)
+		func_has_transition = TRUE;
+	set_state(my_id, name, NULL, &unlocked);
+}
+
+static void match_lock_held(const char *fn, struct expression *call_expr,
+			struct expression *assign_expr, void *_index)
+{
+	int index = PTR_INT(_index);
+	char *lock_name;
+	struct lock_info *lock = &lock_table[index];
+
+	if (lock->arg == NO_ARG) {
+		lock_name = get_full_name(NULL, index);
+	} else if (lock->arg == RETURN_VAL) {
+		if (!assign_expr)
+			return;
+		lock_name = get_full_name(assign_expr, index);
+	} else {
+		lock_name = get_full_name(call_expr, index);
+	}
+	if (!lock_name)
+		return;
+	do_lock(lock_name);
+	free_string(lock_name);
+}
+
+static void match_lock_failed(const char *fn, struct expression *call_expr,
+			struct expression *assign_expr, void *_index)
+{
+	int index = PTR_INT(_index);
+	char *lock_name;
+	struct lock_info *lock = &lock_table[index];
+
+	if (lock->arg == NO_ARG) {
+		lock_name = get_full_name(NULL, index);
+	} else if (lock->arg == RETURN_VAL) {
+		if (!assign_expr)
+			return;
+		lock_name = get_full_name(assign_expr, index);
+	} else {
+		lock_name = get_full_name(call_expr, index);
+	}
+	if (!lock_name)
+		return;
+	do_lock_failed(lock_name);
+	free_string(lock_name);
+}
+
+static void match_returns_locked(const char *fn, struct expression *expr,
+				      void *_index)
+{
+	char *full_name = NULL;
+	int index = PTR_INT(_index);
+	struct lock_info *lock = &lock_table[index];
+
+	if (lock->arg != RETURN_VAL)
+		return;
+	full_name = get_full_name(expr, index);
+	do_lock(full_name);
+}
+
+static void match_lock_unlock(const char *fn, struct expression *expr, void *_index)
+{
+	char *full_name = NULL;
+	int index = PTR_INT(_index);
+	struct lock_info *lock = &lock_table[index];
+
+	if (__inline_fn)
+		return;
+
+	full_name = get_full_name(expr, index);
+	if (!full_name)
+		return;
+	if (lock->action == LOCK)
+		do_lock(full_name);
+	else
+		do_unlock(full_name);
+	free_string(full_name);
+}
+
+static struct locks_on_return *alloc_return(struct expression *expr)
+{
+	struct locks_on_return *ret;
+
+	ret = malloc(sizeof(*ret));
+	if (!get_implied_rl(expr, &ret->return_values))
+		ret->return_values = NULL;
+	ret->line = get_lineno();
+	ret->locked = NULL;
+	ret->unlocked = NULL;
+	ret->impossible = NULL;
+	return ret;
+}
+
+static int check_possible(struct sm_state *sm)
+{
+	struct sm_state *tmp;
+	int islocked = 0;
+	int isunlocked = 0;
+	int undef = 0;
+
+	if (!option_spammy)
+		return 0;
+
+	FOR_EACH_PTR(sm->possible, tmp) {
+		if (tmp->state == &locked)
+			islocked = 1;
+		if (tmp->state == &unlocked)
+			isunlocked = 1;
+		if (tmp->state == &start_state) {
+			struct smatch_state *s;
+
+			s = get_start_state(tmp);
+			if (s == &locked)
+				islocked = 1;
+			else if (s == &unlocked)
+				isunlocked = 1;
+			else
+				undef = 1;
+		}
+		if (tmp->state == &undefined)
+			undef = 1;  // i don't think this is possible any more.
+	} END_FOR_EACH_PTR(tmp);
+	if ((islocked && isunlocked) || undef) {
+		sm_warning("'%s' is sometimes locked here and sometimes unlocked.", sm->name);
+		return 1;
+	}
+	return 0;
+}
+
+static struct position warned_pos;
+
+static void match_return(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct locks_on_return *ret;
+	struct stree *stree;
+	struct sm_state *tmp;
+
+	if (!final_pass)
+		return;
+	if (__inline_fn)
+		return;
+
+	if (expr && cmp_pos(expr->pos, warned_pos) == 0)
+		return;
+
+	ret = alloc_return(expr);
+
+	stree = __get_cur_stree();
+	FOR_EACH_MY_SM(my_id, stree, tmp) {
+		if (tmp->state == &locked) {
+			add_tracker(&ret->locked, tmp->owner, tmp->name,
+				tmp->sym);
+		} else if (tmp->state == &unlocked) {
+			add_tracker(&ret->unlocked, tmp->owner, tmp->name,
+				tmp->sym);
+		} else if (tmp->state == &start_state) {
+			struct smatch_state *s;
+
+			s = get_start_state(tmp);
+			if (s == &locked)
+				add_tracker(&ret->locked, tmp->owner, tmp->name, 
+					    tmp->sym);
+			if (s == &unlocked)
+				add_tracker(&ret->unlocked, tmp->owner,tmp->name,
+					     tmp->sym);
+		} else if (tmp->state == &impossible) {
+			add_tracker(&ret->impossible, tmp->owner, tmp->name,
+				    tmp->sym);
+		} else {
+			if (check_possible(tmp)) {
+				if (expr)
+					warned_pos = expr->pos;
+			}
+		}
+	} END_FOR_EACH_SM(tmp);
+	add_ptr_list(&all_returns, ret);
+}
+
+static void add_line(struct range_list **rl, int line)
+{
+	sval_t sval = sval_type_val(&int_ctype, line);
+
+	add_range(rl, sval, sval);
+}
+
+static int line_printed(struct range_list *rl, int line)
+{
+	sval_t sval = sval_type_val(&int_ctype, line);
+
+	return rl_has_sval(rl, sval);
+}
+
+static void print_inconsistent_returns(struct tracker *lock,
+				struct smatch_state *start)
+{
+	struct locks_on_return *tmp;
+	struct range_list *printed = NULL;
+	int i;
+
+	sm_warning("inconsistent returns '%s'.", lock->name);
+	sm_printf("  Locked on:   ");
+
+	i = 0;
+	FOR_EACH_PTR(all_returns, tmp) {
+		if (line_printed(printed, tmp->line))
+			continue;
+		if (in_tracker_list(tmp->unlocked, lock->owner, lock->name, lock->sym))
+			continue;
+		if (in_tracker_list(tmp->locked, lock->owner, lock->name, lock->sym)) {
+			if (i++)
+				sm_printf("               ");
+			sm_printf("line %d\n", tmp->line);
+			add_line(&printed, tmp->line);
+			continue;
+		}
+		if (start == &locked) {
+			if (i++)
+				sm_printf("               ");
+			sm_printf("line %d\n", tmp->line);
+			add_line(&printed, tmp->line);
+		}
+	} END_FOR_EACH_PTR(tmp);
+
+	sm_printf("  Unlocked on: ");
+	printed = NULL;
+	i = 0;
+	FOR_EACH_PTR(all_returns, tmp) {
+		if (line_printed(printed, tmp->line))
+			continue;
+		if (in_tracker_list(tmp->unlocked, lock->owner, lock->name, lock->sym)) {
+			if (i++)
+				sm_printf("               ");
+			sm_printf("line %d\n", tmp->line);
+			add_line(&printed, tmp->line);
+			continue;
+		}
+		if (in_tracker_list(tmp->locked, lock->owner, lock->name, lock->sym))
+			continue;
+		if (start == &unlocked) {
+			if (i++)
+				sm_printf("               ");
+			sm_printf("line %d\n", tmp->line);
+			add_line(&printed, tmp->line);
+		}
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static int matches_return_type(struct range_list *rl, enum return_type type)
+{
+	sval_t zero_sval = ll_to_sval(0);
+
+	/* All these double negatives are super ugly!  */
+
+	switch (type) {
+	case ret_zero:
+		return !possibly_true_rl(rl, SPECIAL_NOTEQUAL, alloc_rl(zero_sval, zero_sval));
+	case ret_non_zero:
+		return !possibly_true_rl(rl, SPECIAL_EQUAL, alloc_rl(zero_sval, zero_sval));
+	case ret_negative:
+		return !possibly_true_rl(rl, SPECIAL_GTE, alloc_rl(zero_sval, zero_sval));
+	case ret_positive:
+		return !possibly_true_rl(rl, '<', alloc_rl(zero_sval, zero_sval));
+	case ret_any:
+	default:
+		return 1;
+	}
+}
+
+static int match_held(struct tracker *lock, struct locks_on_return *this_return, struct smatch_state *start)
+{
+	if (in_tracker_list(this_return->impossible, lock->owner, lock->name, lock->sym))
+		return 0;
+	if (in_tracker_list(this_return->unlocked, lock->owner, lock->name, lock->sym))
+		return 0;
+	if (in_tracker_list(this_return->locked, lock->owner, lock->name, lock->sym))
+		return 1;
+	if (start == &unlocked)
+		return 0;
+	return 1;
+}
+
+static int match_released(struct tracker *lock, struct locks_on_return *this_return, struct smatch_state *start)
+{
+	if (in_tracker_list(this_return->impossible, lock->owner, lock->name, lock->sym))
+		return 0;
+	if (in_tracker_list(this_return->unlocked, lock->owner, lock->name, lock->sym))
+		return 1;
+	if (in_tracker_list(this_return->locked, lock->owner, lock->name, lock->sym))
+		return 0;
+	if (start == &unlocked)
+		return 1;
+	return 0;
+}
+
+static int held_on_return(struct tracker *lock, struct smatch_state *start, enum return_type type)
+{
+	struct locks_on_return *tmp;
+
+	FOR_EACH_PTR(all_returns, tmp) {
+		if (!matches_return_type(tmp->return_values, type))
+			continue;
+		if (match_held(lock, tmp, start))
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+	return 0;
+}
+
+static int released_on_return(struct tracker *lock, struct smatch_state *start, enum return_type type)
+{
+	struct locks_on_return *tmp;
+
+	FOR_EACH_PTR(all_returns, tmp) {
+		if (!matches_return_type(tmp->return_values, type))
+			continue;
+		if (match_released(lock, tmp, start))
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+	return 0;
+}
+
+static void check_returns_consistently(struct tracker *lock,
+				struct smatch_state *start)
+{
+	struct symbol *type;
+
+	if (!held_on_return(lock, start, ret_any) ||
+	    !released_on_return(lock, start, ret_any))
+		return;
+
+	if (held_on_return(lock, start, ret_zero) &&
+	    !held_on_return(lock, start, ret_non_zero))
+		return;
+
+	if (held_on_return(lock, start, ret_positive) &&
+	    !held_on_return(lock, start, ret_zero))
+		return;
+
+	if (held_on_return(lock, start, ret_positive) &&
+	    !held_on_return(lock, start, ret_negative))
+		return;
+
+	type = cur_func_return_type();
+	if (type && type->type == SYM_PTR) {
+		if (held_on_return(lock, start, ret_non_zero) &&
+		    !held_on_return(lock, start, ret_zero))
+			return;
+	}
+
+	print_inconsistent_returns(lock, start);
+}
+
+static void check_consistency(struct symbol *sym)
+{
+	struct tracker *tmp;
+
+	FOR_EACH_PTR(starts_locked, tmp) {
+		if (in_tracker_list(starts_unlocked, tmp->owner, tmp->name,
+					tmp->sym))
+			sm_error("locking inconsistency.  We assume "
+				   "'%s' is both locked and unlocked at the "
+				   "start.",
+				tmp->name);
+	} END_FOR_EACH_PTR(tmp);
+
+	FOR_EACH_PTR(starts_locked, tmp) {
+		check_returns_consistently(tmp, &locked);
+	} END_FOR_EACH_PTR(tmp);
+
+	FOR_EACH_PTR(starts_unlocked, tmp) {
+		check_returns_consistently(tmp, &unlocked);
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void clear_lists(void)
+{
+	struct locks_on_return *tmp;
+
+	func_has_transition = FALSE;
+
+	free_trackers_and_list(&starts_locked);
+	free_trackers_and_list(&starts_unlocked);
+
+	FOR_EACH_PTR(all_returns, tmp) {
+		free_trackers_and_list(&tmp->locked);
+		free_trackers_and_list(&tmp->unlocked);
+		free(tmp);
+	} END_FOR_EACH_PTR(tmp);
+	__free_ptr_list((struct ptr_list **)&all_returns);
+}
+
+static void match_func_end(struct symbol *sym)
+{
+	if (__inline_fn)
+		return;
+
+	if (func_has_transition)
+		check_consistency(sym);
+}
+
+static void match_after_func(struct symbol *sym)
+{
+	if (__inline_fn)
+		return;
+	clear_lists();
+}
+
+static void register_lock(int index)
+{
+	struct lock_info *lock = &lock_table[index];
+	void *idx = INT_PTR(index);
+
+	if (lock->return_type == ret_non_zero) {
+		return_implies_state(lock->function, valid_ptr_min, valid_ptr_max, &match_lock_held, idx);
+		return_implies_state(lock->function, 0, 0, &match_lock_failed, idx);
+	} else if (lock->return_type == ret_any && lock->arg == RETURN_VAL) {
+		add_function_assign_hook(lock->function, &match_returns_locked, idx);
+	} else if (lock->return_type == ret_any) {
+		add_function_hook(lock->function, &match_lock_unlock, idx);
+	} else if (lock->return_type == ret_zero) {
+		return_implies_state(lock->function, 0, 0, &match_lock_held, idx);
+		return_implies_state(lock->function, -4095, -1, &match_lock_failed, idx);
+	}
+}
+
+static void load_table(struct lock_info *_lock_table, int size)
+{
+	int i;
+
+	lock_table = _lock_table;
+
+	for (i = 0; i < size; i++) {
+		if (lock_table[i].action == LOCK)
+			register_lock(i);
+		else
+			add_function_hook(lock_table[i].function, &match_lock_unlock, INT_PTR(i));
+	}
+}
+
+/* print_held_locks() is used in check_call_tree.c */
+void print_held_locks(void)
+{
+	struct stree *stree;
+	struct sm_state *sm;
+	int i = 0;
+
+	stree = __get_cur_stree();
+	FOR_EACH_MY_SM(my_id, stree, sm) {
+		if (sm->state != &locked)
+			continue;
+		if (i++)
+			sm_printf(" ");
+		sm_printf("'%s'", sm->name);
+	} END_FOR_EACH_SM(sm);
+}
+
+void check_locking(int id)
+{
+	my_id = id;
+
+	if (option_project == PROJ_WINE)
+		load_table(wine_lock_table, ARRAY_SIZE(wine_lock_table));
+	else if (option_project == PROJ_KERNEL)
+		load_table(kernel_lock_table, ARRAY_SIZE(kernel_lock_table));
+	else
+		return;
+
+	add_unmatched_state_hook(my_id, &unmatched_state);
+	add_pre_merge_hook(my_id, &pre_merge_hook);
+	add_split_return_callback(match_return);
+	add_hook(&match_func_end, END_FUNC_HOOK);
+	add_hook(&match_after_func, AFTER_FUNC_HOOK);
+
+}
--- /dev/null	Fri Dec 21 15:00:05 2018
+++ new/usr/src/tools/smatch/src/check_logical_instead_of_bitwise.c	Fri Dec 21 15:00:05 2018
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+static int is_bitshift(struct expression *expr)
+{
+	expr = strip_expr(expr);
+
+	if (expr->type != EXPR_BINOP)
+		return 0;
+	if (expr->op == SPECIAL_LEFTSHIFT)
+		return 1;
+	return 0;
+}
+
+static void match_logic(struct expression *expr)
+{
+	sval_t sval;
+
+	if (expr->type != EXPR_LOGICAL)
+		return;
+
+	if (get_macro_name(expr->pos))
+		return;
+
+	if (!get_value(expr->right, &sval)) {
+		if (!get_value(expr->left, &sval))
+			return;
+	}
+
+	if (sval.value == 0 || sval.value == 1)
+		return;
+
+	sm_warning("should this be a bitwise op?");
+}
+
+static void match_assign(struct expression *expr)
+{
+	struct expression *right;
+
+	right = strip_expr(expr->right);
+	if (right->type != EXPR_LOGICAL)
+		return;
+	if (is_bitshift(right->left) || is_bitshift(right->right))
+		sm_warning("should this be a bitwise op?");
+}
+
+void check_logical_instead_of_bitwise(int id)
+{
+	my_id = id;
+
+	add_hook(&match_logic, LOGIC_HOOK);
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:05 2018
+++ new/usr/src/tools/smatch/src/check_macro_side_effects.c	Fri Dec 21 15:00:05 2018
@@ -0,0 +1,166 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "scope.h"
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_expression_stacks.h"
+
+static int my_id;
+
+static struct string_list *ignored_macros;
+static struct position old_pos;
+
+static struct smatch_state *alloc_my_state(struct expression *expr)
+{
+	struct smatch_state *state;
+	char *name;
+
+	state = __alloc_smatch_state(0);
+	expr = strip_expr(expr);
+	name = expr_to_str(expr);
+	state->name = alloc_sname(name);
+	free_string(name);
+	state->data = expr;
+	return state;
+}
+
+static int defined_inside_macro(struct position macro_pos, struct expression *expr)
+{
+	char *name;
+	struct symbol *sym;
+	int ret = 0;
+
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+	if (!sym->scope || !sym->scope->token)
+		goto free;
+	if (positions_eq(macro_pos, sym->scope->token->pos))
+		ret = 1;
+free:
+	free_string(name);
+	return ret;
+}
+
+static int affected_inside_macro_before(struct expression *expr)
+{
+	struct sm_state *sm;
+	struct sm_state *tmp;
+	struct expression *old_mod;
+
+	sm = get_sm_state_expr(my_id, expr);
+	if (!sm)
+		return 0;
+
+	FOR_EACH_PTR(sm->possible, tmp) {
+		old_mod = tmp->state->data;
+		if (!old_mod)
+			continue;
+		if (positions_eq(old_mod->pos, expr->pos))
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+	return 0;
+}
+
+static int is_ignored_macro(const char *macro)
+{
+	char *tmp;
+
+	FOR_EACH_PTR(ignored_macros, tmp) {
+		if (!strcmp(tmp, macro))
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+	return 0;
+}
+
+static void match_unop(struct expression *raw_expr)
+{
+	struct expression *expr;
+	char *macro, *name;
+
+	if (raw_expr->op != SPECIAL_INCREMENT && raw_expr->op != SPECIAL_DECREMENT)
+		return;
+
+	macro = get_macro_name(raw_expr->pos);
+	if (!macro)
+		return;
+
+	expr = strip_expr(raw_expr->unop);
+
+	if (defined_inside_macro(expr->pos, expr))
+		return;
+
+	if (is_ignored_macro(macro))
+		return;
+
+	if (!affected_inside_macro_before(expr)) {
+		set_state_expr(my_id, expr, alloc_my_state(expr));
+		old_pos = expr->pos;
+		return;
+	}
+
+	if (!positions_eq(old_pos, expr->pos))
+		return;
+
+	name = expr_to_str(raw_expr);
+	sm_warning("side effect in macro '%s' doing '%s'",
+		macro, name);
+	free_string(name);
+}
+
+static void match_stmt(struct statement *stmt)
+{
+	if (!positions_eq(old_pos, stmt->pos))
+		old_pos.line = 0;
+}
+
+static void register_ignored_macros(void)
+{
+	struct token *token;
+	char *macro;
+	char name[256];
+
+	snprintf(name, 256, "%s.ignore_side_effects", option_project_str);
+
+	token = get_tokens_file(name);
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		macro = alloc_string(show_ident(token->ident));
+		add_ptr_list(&ignored_macros, macro);
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+void check_macro_side_effects(int id)
+{
+	my_id = id;
+
+	if (!option_spammy)
+		return;
+
+	add_hook(&match_unop, OP_HOOK);
+	add_hook(&match_stmt, STMT_HOOK);
+	register_ignored_macros();
+}
--- /dev/null	Fri Dec 21 15:00:05 2018
+++ new/usr/src/tools/smatch/src/check_macros.c	Fri Dec 21 15:00:05 2018
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static void match_inside(struct expression *expr, struct position pos)
+{
+	char *name;
+	int matched = 0;
+
+	if (positions_eq(expr->pos, pos))
+		matched++;
+	if (positions_eq(expr->unop->pos, pos))
+		matched++;
+	if (matched != 1)
+		return;
+	name = get_macro_name(pos);
+	if (!name)
+		return;
+	sm_warning("the '%s' macro might need parens", name);
+}
+
+static void match_one_side(struct expression *expr, struct position pos, int op)
+{
+	char *name;
+	int matched = 0;
+
+	if ((op == '+' || op == '*' || op == '|' || op == '&') && expr->op == op)
+		return;
+	if (positions_eq(expr->right->pos, pos))
+		matched++;
+	if (positions_eq(expr->left->pos, pos))
+		matched++;
+	if (matched != 1)
+		return;
+	name = get_macro_name(pos);
+	if (!name)
+		return;
+	if (option_project == PROJ_WINE && !strcmp("BEGIN", name))
+		return;
+	sm_warning("the '%s' macro might need parens", name);
+}
+
+static void match_join(struct expression *expr)
+{
+	if (expr->left->type == EXPR_PREOP)
+		match_inside(expr->left, expr->pos);
+	if (expr->right->type == EXPR_POSTOP)
+		match_inside(expr->right, expr->pos);
+
+	if (expr->left->type == EXPR_BINOP)
+		match_one_side(expr->left, expr->pos, expr->op);
+	if (expr->right->type == EXPR_BINOP)
+		match_one_side(expr->right, expr->pos, expr->op);
+}
+
+void check_macros(int id)
+{
+	my_id = id;
+	add_hook(&match_join, BINOP_HOOK);
+	add_hook(&match_join, LOGIC_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:05 2018
+++ new/usr/src/tools/smatch/src/check_memcpy_overflow.c	Fri Dec 21 15:00:05 2018
@@ -0,0 +1,372 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include <stdlib.h>
+#include "parse.h"
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+struct limiter {
+	int buf_arg;
+	int limit_arg;
+};
+static struct limiter b0_l2 = {0, 2};
+static struct limiter b1_l2 = {1, 2};
+
+struct string_list *ignored_structs;
+
+static int get_the_max(struct expression *expr, sval_t *sval)
+{
+	struct range_list *rl;
+
+	if (get_hard_max(expr, sval))
+		return 1;
+	if (!option_spammy)
+		return 0;
+	if (get_fuzzy_max(expr, sval))
+		return 1;
+	if (!get_user_rl(expr, &rl))
+		return 0;
+	*sval = rl_max(rl);
+	return 1;
+}
+
+static int bytes_to_end_of_struct(struct expression *expr)
+{
+	struct expression *deref;
+	struct symbol *type;
+	int struct_bytes;
+	int offset;
+
+	if (expr->type == EXPR_PREOP && expr->op == '&')
+		expr = strip_parens(expr->unop);
+	else {
+		type = get_type(expr);
+		if (!type || type->type != SYM_ARRAY)
+			return 0;
+	}
+	if (expr->type != EXPR_DEREF || !expr->member)
+		return 0;
+	deref = expr->deref;
+	if (deref->type == EXPR_PREOP && deref->op == '*')
+		deref = deref->unop;
+	struct_bytes = get_array_size_bytes_max(deref);
+	if (struct_bytes <= 0) {
+		type = get_type(expr->deref);
+		struct_bytes = type_bytes(type);
+	}
+	offset = get_member_offset_from_deref(expr);
+	if (offset <= 0)
+		return 0;
+	return struct_bytes - expr->member_offset;
+}
+
+static int size_of_union(struct expression *expr)
+{
+	struct symbol *type;
+
+	if (expr->type != EXPR_PREOP || expr->op != '&')
+		return 0;
+	expr = strip_parens(expr->unop);
+	if (expr->type != EXPR_DEREF || !expr->member)
+		return 0;
+	expr = expr->unop;
+	type = get_type(expr);
+	if (!type || type->type != SYM_UNION)
+		return 0;
+	return type_bytes(type);
+}
+
+static int is_likely_multiple(int has, int needed, struct expression *limit)
+{
+	sval_t mult;
+
+	limit = strip_parens(limit);
+	if (limit->type != EXPR_BINOP || limit->op != '*')
+		return 0;
+	if (!get_value(limit->left, &mult))
+		return 0;
+	if (has * mult.value == needed)
+		return 1;
+	if (!get_value(limit->right, &mult))
+		return 0;
+	if (has * mult.value == needed)
+		return 1;
+
+	return 0;
+}
+
+static int name_in_union(struct symbol *type, const char *name)
+{
+	struct symbol *tmp;
+
+	if (type->type == SYM_NODE)
+		type = get_real_base_type(type);
+	if (!type || type->type != SYM_UNION)
+		return 0;
+
+	FOR_EACH_PTR(type->symbol_list, tmp) {
+		if (tmp->ident &&
+		    strcmp(name, tmp->ident->name) == 0)
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+
+	return 0;
+}
+
+static int ends_on_struct_member_boundary(struct expression *expr, int needed)
+{
+	struct symbol *type, *tmp;
+	int offset;
+	int size;
+	int found = 0;
+
+	expr = strip_expr(expr);
+	if (expr->type == EXPR_PREOP && expr->op == '&') {
+		expr = strip_parens(expr->unop);
+	} else {
+		type = get_type(expr);
+		if (!type || type->type != SYM_ARRAY)
+			return 0;
+	}
+	if (expr->type != EXPR_DEREF || !expr->member)
+		return 0;
+
+	type = get_type(expr->unop);
+	if (!type)
+		return 0;
+	if (type->type == SYM_UNION) {
+		struct expression *unop = strip_expr(expr->unop);
+
+		if (unop->type != EXPR_DEREF)
+			return 0;
+		type = get_type(unop->unop);
+		if (!type)
+			return 0;
+	}
+	if (type->type != SYM_STRUCT)
+		return 0;
+
+	offset = 0;
+	FOR_EACH_PTR(type->symbol_list, tmp) {
+		if (!found) {
+			if ((tmp->ident &&
+			     strcmp(expr->member->name, tmp->ident->name) == 0) ||
+			    name_in_union(tmp, expr->member->name))
+				found = 1;
+
+			offset = ALIGN(offset, tmp->ctype.alignment);
+
+			offset += type_bytes(tmp);
+			size = type_bytes(tmp);
+			continue;
+		}
+
+		/* if there is a hole then fail. */
+		if (offset != ALIGN(offset, tmp->ctype.alignment))
+			return 0;
+		offset += type_bytes(tmp);
+		size += type_bytes(tmp);
+
+		if (size == needed)
+			return 1;
+		if (size > needed)
+			return 0;
+	} END_FOR_EACH_PTR(tmp);
+	return 0;
+}
+
+static int is_one_element_array(struct expression *expr)
+{
+	struct symbol *type;
+	sval_t sval;
+
+	if (expr->type == EXPR_PREOP && expr->op == '&')
+		expr = expr->unop;
+	if (expr->type == EXPR_BINOP) /* array elements foo[5] */
+		return 0;
+
+	type = get_type(expr);
+	if (!type)
+		return 0;
+	if (!type || type->type != SYM_ARRAY)
+		return 0;
+
+	if (!get_implied_value(type->array_size, &sval))
+		return 0;
+
+	if (sval.value == 1)
+		return 1;
+	return 0;
+}
+
+static int is_ignored_struct(struct expression *expr)
+{
+	struct symbol *type;
+
+	type = get_type(expr);
+	if (!type)
+		return 0;
+	if (type->type == SYM_PTR)
+		type = get_real_base_type(type);
+	if (type->type != SYM_STRUCT)
+		return 0;
+	if (!type->ident)
+		return 0;
+	if (list_has_string(ignored_structs, type->ident->name))
+		return 1;
+	return 0;
+}
+
+static void match_limited(const char *fn, struct expression *expr, void *_limiter)
+{
+	struct limiter *limiter = (struct limiter *)_limiter;
+	struct expression *dest;
+	struct expression *limit;
+	char *dest_name = NULL;
+	sval_t needed;
+	int has;
+
+	dest = get_argument_from_call_expr(expr->args, limiter->buf_arg);
+	limit = get_argument_from_call_expr(expr->args, limiter->limit_arg);
+	if (!get_the_max(limit, &needed))
+		return;
+	has = get_array_size_bytes_max(dest);
+	if (!has)
+		return;
+	if (has >= needed.value)
+		return;
+
+	if (needed.value == bytes_to_end_of_struct(dest))
+		return;
+
+	if (needed.value <= size_of_union(dest))
+		return;
+
+	if (is_likely_multiple(has, needed.value, limit))
+		return;
+
+	if (ends_on_struct_member_boundary(dest, needed.value))
+		return;
+
+	if (is_one_element_array(dest))
+		return;
+
+	if (is_ignored_struct(dest))
+		return;
+
+	dest_name = expr_to_str(dest);
+	sm_error("%s() '%s' too small (%d vs %s)", fn, dest_name, has, sval_to_str(needed));
+	free_string(dest_name);
+}
+
+static void register_funcs_from_file(void)
+{
+	char name[256];
+	struct token *token;
+	const char *func;
+	int size, buf;
+	struct limiter *limiter;
+
+	snprintf(name, 256, "%s.sizeof_param", option_project_str);
+	name[255] = '\0';
+	token = get_tokens_file(name);
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			break;
+		func = show_ident(token->ident);
+
+		token = token->next;
+		if (token_type(token) != TOKEN_NUMBER)
+			break;
+		size = atoi(token->number);
+
+		token = token->next;
+		if (token_type(token) == TOKEN_SPECIAL) {
+			if (token->special != '-')
+				break;
+			token = token->next;
+			if (token_type(token) != TOKEN_NUMBER)
+				break;
+			token = token->next;
+			continue;
+
+		}
+		if (token_type(token) != TOKEN_NUMBER)
+			break;
+		buf = atoi(token->number);
+
+		limiter = malloc(sizeof(*limiter));
+		limiter->limit_arg = size;
+		limiter->buf_arg = buf;
+
+		add_function_hook(func, &match_limited, limiter);
+
+		token = token->next;
+	}
+	if (token_type(token) != TOKEN_STREAMEND)
+		sm_perror("parsing '%s'", name);
+	clear_token_alloc();
+}
+
+static void register_ignored_structs_from_file(void)
+{
+	char name[256];
+	struct token *token;
+	const char *struct_type;
+
+	snprintf(name, 256, "%s.ignore_memcpy_struct_overflows", option_project_str);
+	name[255] = '\0';
+	token = get_tokens_file(name);
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+
+		struct_type = show_ident(token->ident);
+		insert_string(&ignored_structs, alloc_string(struct_type));
+
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+void check_memcpy_overflow(int id)
+{
+	register_funcs_from_file();
+	register_ignored_structs_from_file();
+	add_function_hook("memcmp", &match_limited, &b0_l2);
+	add_function_hook("memcmp", &match_limited, &b1_l2);
+	if (option_project == PROJ_KERNEL) {
+		add_function_hook("copy_to_user", &match_limited, &b1_l2);
+		add_function_hook("_copy_to_user", &match_limited, &b1_l2);
+		add_function_hook("__copy_to_user", &match_limited, &b1_l2);
+		add_function_hook("copy_from_user", &match_limited, &b0_l2);
+		add_function_hook("_copy_from_user", &match_limited, &b0_l2);
+		add_function_hook("__copy_from_user", &match_limited, &b0_l2);
+	}
+}
--- /dev/null	Fri Dec 21 15:00:05 2018
+++ new/usr/src/tools/smatch/src/check_memory.c	Fri Dec 21 15:00:05 2018
@@ -0,0 +1,466 @@
+/*
+ * Copyright (C) 2008 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include <fcntl.h>
+#include <unistd.h>
+#include "parse.h"
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static void check_sm_is_leaked(struct sm_state *sm);
+
+static int my_id;
+
+STATE(allocated);
+STATE(assigned);
+STATE(isfree);
+STATE(malloced);
+STATE(isnull);
+STATE(unfree);
+
+/*
+  malloced --> allocated --> assigned --> isfree +
+            \-> isnull.    \-> isfree +
+
+  isfree --> unfree.
+          \-> isnull.
+*/
+
+static struct tracker_list *arguments;
+
+static const char *allocation_funcs[] = {
+	"malloc",
+	"kmalloc",
+	"kzalloc",
+	NULL,
+};
+
+static char *get_parent_name(struct symbol *sym)
+{
+	static char buf[256];
+
+	if (!sym || !sym->ident)
+		return NULL;
+
+	snprintf(buf, 255, "-%s", sym->ident->name);
+	buf[255] = '\0';
+	return alloc_string(buf);
+}
+
+static int is_parent_sym(const char *name)
+{
+	if (!strncmp(name, "-", 1))
+		return 1;
+	return 0;
+}
+
+static int is_complex(struct expression *expr)
+{
+	char *name;
+	int ret = 1;
+
+	name = expr_to_var(expr);
+	if (name)
+		ret = 0;
+	free_string(name);
+	return ret;
+}
+
+static struct smatch_state *unmatched_state(struct sm_state *sm)
+{
+	if (is_parent_sym(sm->name))
+		return &assigned;
+	return &undefined;
+}
+
+static void assign_parent(struct symbol *sym)
+{
+	char *name;
+
+	name = get_parent_name(sym);
+	if (!name)
+		return;
+	set_state(my_id, name, sym, &assigned);
+	free_string(name);
+}
+
+static int parent_is_assigned(struct symbol *sym)
+{
+	struct smatch_state *state;
+	char *name;
+
+	name = get_parent_name(sym);
+	if (!name)
+		return 0;
+	state = get_state(my_id, name, sym);
+	free_string(name);
+	if (state == &assigned)
+		return 1;
+	return 0;
+}
+
+static int is_allocation(struct expression *expr)
+{
+	char *fn_name;
+	int i;
+
+	if (expr->type != EXPR_CALL)
+		return 0;
+
+	if (!(fn_name = expr_to_var_sym(expr->fn, NULL)))
+		return 0;
+
+	for (i = 0; allocation_funcs[i]; i++) {
+		if (!strcmp(fn_name, allocation_funcs[i])) {
+			free_string(fn_name);
+			return 1;
+		}
+	}
+	free_string(fn_name);
+	return 0;
+}
+
+static int is_freed(const char *name, struct symbol *sym)
+{
+	struct state_list *slist;
+
+	slist = get_possible_states(my_id, name, sym);
+	if (slist_has_state(slist, &isfree)) {
+		return 1;
+	}
+	return 0;
+}
+
+static int is_argument(struct symbol *sym)
+{
+	struct tracker *arg;
+
+	FOR_EACH_PTR(arguments, arg) {
+		if (arg->sym == sym)
+			return 1;
+	} END_FOR_EACH_PTR(arg);
+	return 0;
+}
+
+static void match_function_def(struct symbol *sym)
+{
+	struct symbol *arg;
+
+	FOR_EACH_PTR(sym->ctype.base_type->arguments, arg) {
+		add_tracker(&arguments, my_id, (arg->ident?arg->ident->name:"NULL"), arg);
+	} END_FOR_EACH_PTR(arg);
+}
+
+static int is_parent(struct expression *expr)
+{
+	if (expr->type == EXPR_DEREF)
+		return 0;
+	return 1;
+}
+
+static void match_assign(struct expression *expr)
+{
+	struct expression *left, *right;
+	char *left_name = NULL;
+	char *right_name = NULL;
+	struct symbol *left_sym, *right_sym;
+	struct smatch_state *state;
+	struct state_list *slist;
+	struct sm_state *tmp;
+
+	left = strip_expr(expr->left);
+	left_name = expr_to_str_sym(left, &left_sym);
+
+	right = strip_expr(expr->right);
+	while (right->type == EXPR_ASSIGNMENT)
+		right = right->left;
+
+	if (left_name && left_sym && is_allocation(right) && 
+	    !(left_sym->ctype.modifiers & 
+	      (MOD_NONLOCAL | MOD_STATIC | MOD_ADDRESSABLE)) &&
+	    !parent_is_assigned(left_sym)) {
+		set_state(my_id, left_name, left_sym, &malloced);
+		goto exit;
+	}
+
+	right_name = expr_to_str_sym(right, &right_sym);
+
+	if (right_name && (state = get_state(my_id, right_name, right_sym))) {
+		if (state == &isfree && !is_complex(right))
+			sm_error("assigning freed pointer '%s'", right_name);
+		set_state(my_id, right_name, right_sym, &assigned);
+	}
+
+	if (is_zero(expr->right)) {
+		slist = get_possible_states(my_id, left_name, left_sym);
+
+		FOR_EACH_PTR(slist, tmp) {
+			check_sm_is_leaked(tmp);
+		} END_FOR_EACH_PTR(tmp);
+	}
+
+	if (is_freed(left_name, left_sym)) {
+		set_state(my_id, left_name, left_sym, &unfree);
+	}
+	if (left_name && is_parent(left))
+		assign_parent(left_sym);
+	if (right_name && is_parent(right))
+		assign_parent(right_sym);
+exit:
+	free_string(left_name);
+	free_string(right_name);
+}
+
+static int is_null(const char *name, struct symbol *sym)
+{
+	struct smatch_state *state;
+
+	state = get_state(my_id, name, sym);
+	if (state && !strcmp(state->name, "isnull"))
+		return 1;
+	return 0;
+}
+
+static void set_unfree(struct sm_state *sm, struct expression *mod_expr)
+{
+	if (slist_has_state(sm->possible, &isfree))
+		set_state(my_id, sm->name, sm->sym, &unfree);
+}
+
+static void match_free_func(const char *fn, struct expression *expr, void *data)
+{
+	struct expression *ptr_expr;
+	char *ptr_name;
+	struct symbol *ptr_sym;
+	int arg_num = PTR_INT(data);
+
+	ptr_expr = get_argument_from_call_expr(expr->args, arg_num);
+	ptr_name = expr_to_var_sym(ptr_expr, &ptr_sym);
+	if (!ptr_name)
+		return;
+	set_state(my_id, ptr_name, ptr_sym, &isfree);
+	free_string(ptr_name);
+}
+
+static int possibly_allocated(struct state_list *slist)
+{
+	struct sm_state *tmp;
+
+	FOR_EACH_PTR(slist, tmp) {
+		if (tmp->state == &allocated)
+			return 1;
+		if (tmp->state == &malloced)
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+	return 0;
+}
+
+static void check_sm_is_leaked(struct sm_state *sm)
+{
+	if (possibly_allocated(sm->possible) && 
+		!is_null(sm->name, sm->sym) &&
+		!is_argument(sm->sym) && 
+		!parent_is_assigned(sm->sym))
+		sm_error("memory leak of '%s'", sm->name);
+}
+
+static void check_tracker_is_leaked(struct tracker *t)
+{
+	struct sm_state *sm;
+
+	sm = get_sm_state(t->owner, t->name, t->sym);
+	if (sm)
+		check_sm_is_leaked(sm);
+	__free_tracker(t);
+}
+
+static void match_declarations(struct symbol *sym)
+{
+	const char *name;
+
+	if ((get_base_type(sym))->type == SYM_ARRAY) {
+		return;
+	}
+
+	name = sym->ident->name;
+
+	if (sym->initializer) {
+		if (is_allocation(sym->initializer)) {
+			set_state(my_id, name, sym, &malloced);
+			add_scope_hook((scope_hook *)&check_tracker_is_leaked,
+				alloc_tracker(my_id, name, sym));
+			scoped_state(my_id, name, sym);
+		} else {
+			assign_parent(sym);
+		}
+	}
+}
+
+static void check_for_allocated(void)
+{
+	struct stree *stree;
+	struct sm_state *tmp;
+
+	stree = __get_cur_stree();
+	FOR_EACH_MY_SM(my_id, stree, tmp) {
+		check_sm_is_leaked(tmp);
+	} END_FOR_EACH_SM(tmp);
+}
+
+static void match_return(struct expression *ret_value)
+{
+	char *name;
+	struct symbol *sym;
+
+	if (__inline_fn)
+		return;
+	name = expr_to_str_sym(ret_value, &sym);
+	if (sym)
+		assign_parent(sym);
+	free_string(name);
+	check_for_allocated();
+}
+
+static void set_new_true_false_paths(const char *name, struct symbol *sym)
+{
+	struct smatch_state *tmp;
+
+	tmp = get_state(my_id, name, sym);
+
+	if (!tmp) {
+		return;
+	}
+
+	if (tmp == &isfree) {
+		sm_warning("why do you care about freed memory? '%s'", name);
+	}
+
+	if (tmp == &assigned) {
+		/* we don't care about assigned pointers any more */
+		return;
+	}
+	set_true_false_states(my_id, name, sym, &allocated, &isnull);
+}
+
+static void match_condition(struct expression *expr)
+{
+	struct symbol *sym;
+	char *name;
+
+	expr = strip_expr(expr);
+	switch (expr->type) {
+	case EXPR_PREOP:
+	case EXPR_SYMBOL:
+	case EXPR_DEREF:
+		name = expr_to_var_sym(expr, &sym);
+		if (!name)
+			return;
+		set_new_true_false_paths(name, sym);
+		free_string(name);
+		return;
+	case EXPR_ASSIGNMENT:
+		 /* You have to deal with stuff like if (a = b = c) */
+		match_condition(expr->right);
+		match_condition(expr->left);
+		return;
+	default:
+		return;
+	}
+}
+
+static void match_function_call(struct expression *expr)
+{
+	struct expression *tmp;
+	struct symbol *sym;
+	char *name;
+	struct sm_state *state;
+
+	FOR_EACH_PTR(expr->args, tmp) {
+		tmp = strip_expr(tmp);
+		name = expr_to_str_sym(tmp, &sym);
+		if (!name)
+			continue;
+		if ((state = get_sm_state(my_id, name, sym))) {
+			if (possibly_allocated(state->possible)) {
+				set_state(my_id, name, sym, &assigned);
+			}
+		}
+		assign_parent(sym);
+		free_string(name);
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void match_end_func(struct symbol *sym)
+{
+	if (__inline_fn)
+		return;
+	check_for_allocated();
+}
+
+static void match_after_func(struct symbol *sym)
+{
+	if (__inline_fn)
+		return;
+	free_trackers_and_list(&arguments);
+}
+
+static void register_funcs_from_file(void)
+{
+	struct token *token;
+	const char *func;
+	int arg;
+
+	token = get_tokens_file("kernel.frees_argument");
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		func = show_ident(token->ident);
+		token = token->next;
+		if (token_type(token) != TOKEN_NUMBER)
+			return;
+		arg = atoi(token->number);
+		add_function_hook(func, &match_free_func, INT_PTR(arg));
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+void check_memory(int id)
+{
+	my_id = id;
+	add_unmatched_state_hook(my_id, &unmatched_state);
+	add_hook(&match_function_def, FUNC_DEF_HOOK);
+	add_hook(&match_declarations, DECLARATION_HOOK);
+	add_hook(&match_function_call, FUNCTION_CALL_HOOK);
+	add_hook(&match_condition, CONDITION_HOOK);
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+	add_hook(&match_return, RETURN_HOOK);
+	add_hook(&match_end_func, END_FUNC_HOOK);
+	add_hook(&match_after_func, AFTER_FUNC_HOOK);
+	add_modification_hook(my_id, &set_unfree);
+	if (option_project == PROJ_KERNEL) {
+		add_function_hook("kfree", &match_free_func, (void *)0);
+		register_funcs_from_file();
+	} else {
+		add_function_hook("free", &match_free_func, (void *)0);
+	}
+}
--- /dev/null	Fri Dec 21 15:00:05 2018
+++ new/usr/src/tools/smatch/src/check_memset.c	Fri Dec 21 15:00:05 2018
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2011 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static void match_memset(const char *fn, struct expression *expr, void *data)
+{
+	struct expression *arg_expr;
+	sval_t sval;
+
+	arg_expr = get_argument_from_call_expr(expr->args, 2);
+
+	if (arg_expr->type != EXPR_VALUE)
+		return;
+	if (!get_value(arg_expr, &sval))
+		return;
+	if (sval.value != 0)
+		return;
+	sm_error("calling memset(x, y, 0);");
+}
+
+void check_memset(int id)
+{
+	my_id = id;
+	add_function_hook("memset", &match_memset, NULL);
+	add_function_hook("__builtin_memset", &match_memset, NULL);
+}
--- /dev/null	Fri Dec 21 15:00:06 2018
+++ new/usr/src/tools/smatch/src/check_min_t.c	Fri Dec 21 15:00:06 2018
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2011 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static void match_assign(struct expression *expr)
+{
+	const char *macro;
+	sval_t max_left, max_right;
+	char *name;
+
+	if (expr->op != '=')
+		return;
+
+	macro = get_macro_name(expr->pos);
+	if (!macro)
+		return;
+	if (strcmp(macro, "min_t"))
+		return;
+
+	if (!get_absolute_max(expr->left, &max_left))
+		return;
+	if (!get_absolute_max(expr->right, &max_right))
+		return;
+
+	if (sval_cmp(max_left, max_right) >= 0)
+		return;
+
+	name = expr_to_str(expr->right);
+	sm_warning("min_t truncates here '%s' (%s vs %s)", name, sval_to_str(max_left), sval_to_str(max_right));
+	free_string(name);
+}
+
+void check_min_t(int id)
+{
+	my_id = id;
+	if (option_project != PROJ_KERNEL)
+		return;
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:06 2018
+++ new/usr/src/tools/smatch/src/check_missing_break.c	Fri Dec 21 15:00:06 2018
@@ -0,0 +1,188 @@
+/*
+ * Copyright (C) 2013 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * The way I'm detecting missing breaks is if there is an assignment inside a
+ * switch statement which is over written.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+static struct expression *skip_this;
+
+/*
+ * It goes like this:
+ * - Allocate a state which stores the switch expression.  I wanted to
+ *   just have a state &assigned but we need to know the switch statement where
+ *   it was assigned.
+ * - If it gets used then we change it to &used.
+ * - For unmatched states we use &used (because of cleanness, not because we need
+ *   to).
+ * - If we merge inside a case statement and one of the states is &assigned (or
+ *   if it is &nobreak) then &nobreak is used.
+ *
+ * We print an error when we assign something to a &no_break symbol.
+ *
+ */
+
+STATE(used);
+STATE(no_break);
+
+static int in_switch_stmt;
+
+static struct smatch_state *alloc_my_state(struct expression *expr)
+{
+	struct smatch_state *state;
+	char *name;
+
+	state = __alloc_smatch_state(0);
+	expr = strip_expr(expr);
+	name = expr_to_str(expr);
+	if (!name)
+		name = alloc_string("");
+	state->name = alloc_sname(name);
+	free_string(name);
+	state->data = expr;
+	return state;
+}
+
+struct expression *last_print_expr;
+static void print_missing_break(struct expression *expr)
+{
+	char *name;
+
+	if (get_switch_expr() == last_print_expr)
+		return;
+	last_print_expr = get_switch_expr();
+
+	name = expr_to_var(expr);
+	sm_warning("missing break? reassigning '%s'", name);
+	free_string(name);
+}
+
+static void match_assign(struct expression *expr)
+{
+	struct expression *left;
+
+	if (expr->op != '=')
+		return;
+	if (!get_switch_expr())
+		return;
+	left = strip_expr(expr->left);
+	if (get_state_expr(my_id, left) == &no_break)
+		print_missing_break(left);
+
+	set_state_expr(my_id, left, alloc_my_state(get_switch_expr()));
+	skip_this = left;
+}
+
+static void match_symbol(struct expression *expr)
+{
+	if (outside_of_function())
+		return;
+	if (!get_switch_expr())
+		return;
+
+	expr = strip_expr(expr);
+	if (expr == skip_this)
+		return;
+	set_state_expr(my_id, expr, &used);
+}
+
+static struct smatch_state *unmatched_state(struct sm_state *sm)
+{
+	return &used;
+}
+
+static int in_case;
+static struct smatch_state *merge_hook(struct smatch_state *s1, struct smatch_state *s2)
+{
+	struct expression *switch_expr;
+
+	if (s1 == &no_break || s2 == &no_break)
+		return &no_break;
+	if (!in_case)
+		return &used;
+	switch_expr = get_switch_expr();
+	if (s1->data == switch_expr || s2->data == switch_expr)
+		return &no_break;
+	return &used;
+}
+
+static void match_stmt(struct statement *stmt)
+{
+	if (stmt->type == STMT_CASE)
+		in_case = 1;
+	else
+		in_case = 0;
+}
+
+static void match_switch(struct statement *stmt)
+{
+	if (stmt->type != STMT_SWITCH)
+		return;
+
+	in_switch_stmt++;
+}
+
+static void delete_my_states(int owner)
+{
+	struct state_list *slist = NULL;
+	struct sm_state *sm;
+
+	FOR_EACH_MY_SM(owner, __get_cur_stree(), sm) {
+		add_ptr_list(&slist, sm);
+	} END_FOR_EACH_SM(sm);
+
+	FOR_EACH_PTR(slist, sm) {
+		delete_state(sm->owner, sm->name, sm->sym);
+	} END_FOR_EACH_PTR(sm);
+
+	free_slist(&slist);
+}
+
+static void match_switch_end(struct statement *stmt)
+{
+
+	if (stmt->type != STMT_SWITCH)
+		return;
+
+	in_switch_stmt--;
+
+	if (!in_switch_stmt)
+		delete_my_states(my_id);
+}
+
+void check_missing_break(int id)
+{
+	my_id = id;
+
+	if (!option_spammy)
+		return;
+
+	add_unmatched_state_hook(my_id, &unmatched_state);
+	add_merge_hook(my_id, &merge_hook);
+
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+	add_hook(&match_symbol, SYM_HOOK);
+	add_hook(&match_stmt, STMT_HOOK);
+	add_hook(&match_switch, STMT_HOOK);
+	add_hook(&match_switch_end, STMT_HOOK_AFTER);
+}
--- /dev/null	Fri Dec 21 15:00:06 2018
+++ new/usr/src/tools/smatch/src/check_mod_timer.c	Fri Dec 21 15:00:06 2018
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+static void match_mod_timer(const char *fn, struct expression *expr, void *param)
+{
+	struct expression *arg;
+	sval_t sval;
+
+	arg = get_argument_from_call_expr(expr->args, 1);
+	if (!get_value(arg, &sval) || sval.value == 0)
+		return;
+	sm_warning("mod_timer() takes an absolute time not an offset.");
+}
+
+void check_mod_timer(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	my_id = id;
+	add_function_hook("mod_timer", &match_mod_timer, NULL);
+}
--- /dev/null	Fri Dec 21 15:00:06 2018
+++ new/usr/src/tools/smatch/src/check_no_effect.c	Fri Dec 21 15:00:06 2018
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static void match_stmt(struct statement *stmt)
+{
+	struct expression *expr;
+
+	if (stmt->type != STMT_EXPRESSION)
+		return;
+	expr = stmt->expression;
+	if (!expr)
+		return;
+	switch(expr->type) {
+	case EXPR_PREOP:
+		if (expr->op == '!')
+			break;
+		if (expr->op == '~')
+			break;
+	case EXPR_POSTOP:
+	case EXPR_STATEMENT:
+	case EXPR_ASSIGNMENT:
+	case EXPR_CALL:
+	case EXPR_CONDITIONAL:
+	case EXPR_SELECT:
+	case EXPR_CAST:
+	case EXPR_FORCE_CAST:
+	case EXPR_COMMA:
+		return;
+	}
+	if (in_expression_statement())
+		return;
+	sm_warning("statement has no effect %d", expr->type);
+}
+
+void check_no_effect(int id)
+{
+	my_id = id;
+	add_hook(&match_stmt, STMT_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:06 2018
+++ new/usr/src/tools/smatch/src/check_no_if_block.c	Fri Dec 21 15:00:06 2018
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static void match_if_stmt(struct statement *stmt)
+{
+	if (__inline_fn)
+		return;
+	if (stmt->type != STMT_IF)
+		return;
+	if (stmt->if_true->type == STMT_COMPOUND)
+		return;
+	if (get_macro_name(stmt->pos))
+		return;
+	if (stmt->pos.pos != stmt->if_true->pos.pos)
+		return;
+	sm_warning("if statement not indented");
+}
+
+static void match_for_stmt(struct statement *stmt)
+{
+	if (__inline_fn)
+		return;
+	if (stmt->type != STMT_ITERATOR)
+		return;
+	if (stmt->iterator_statement->type == STMT_COMPOUND)
+		return;
+	if (get_macro_name(stmt->pos))
+		return;
+	if (stmt->pos.pos != stmt->iterator_statement->pos.pos)
+		return;
+	sm_warning("for statement not indented");
+}
+
+void check_no_if_block(int id)
+{
+	my_id = id;
+
+	add_hook(&match_if_stmt, STMT_HOOK);
+	add_hook(&match_for_stmt, STMT_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:06 2018
+++ new/usr/src/tools/smatch/src/check_no_return.c	Fri Dec 21 15:00:06 2018
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+static int returned;
+
+static void match_return(struct expression *ret_value)
+{
+	if (__inline_fn)
+		return;
+	if (is_reachable())
+		returned = 1;
+}
+
+static void match_func_end(struct symbol *sym)
+{
+	if (__inline_fn)
+		return;
+	if (!is_reachable() && !returned)
+		sm_info("info: add to no_return_funcs");
+	returned = 0;
+}
+
+void check_no_return(int id)
+{
+	if (!option_info)
+		return;
+	my_id = id;
+	add_hook(&match_return, RETURN_HOOK);
+	add_hook(&match_func_end, END_FUNC_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:06 2018
+++ new/usr/src/tools/smatch/src/check_nospec.c	Fri Dec 21 15:00:06 2018
@@ -0,0 +1,261 @@
+/*
+ * Copyright (C) 2018 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include <stdlib.h>
+#include "parse.h"
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+static int barrier_id;
+
+STATE(nospec);
+
+static bool in_nospec_stmt;
+
+static struct smatch_state *unmatched_state(struct sm_state *sm)
+{
+	struct range_list *rl;
+
+	if (__in_function_def && !get_user_rl_var_sym(sm->name, sm->sym, &rl))
+		return &nospec;
+	return &undefined;
+}
+
+bool is_nospec(struct expression *expr)
+{
+	char *macro;
+
+	if (in_nospec_stmt)
+		return true;
+	if (!expr)
+		return false;
+	if (get_state_expr(my_id, expr) == &nospec)
+		return true;
+	macro = get_macro_name(expr->pos);
+	if (macro && strcmp(macro, "array_index_nospec") == 0)
+		return true;
+	return false;
+}
+
+static void nospec_assign(struct expression *expr)
+{
+	if (is_nospec(expr->right))
+		set_state_expr(my_id, expr->left, &nospec);
+}
+
+static void set_param_nospec(const char *name, struct symbol *sym, char *key, char *value)
+{
+	char fullname[256];
+
+	if (strcmp(key, "*$") == 0)
+		snprintf(fullname, sizeof(fullname), "*%s", name);
+	else if (strncmp(key, "$", 1) == 0)
+		snprintf(fullname, 256, "%s%s", name, key + 1);
+	else
+		return;
+
+	set_state(my_id, fullname, sym, &nospec);
+}
+
+static void match_call_info(struct expression *expr)
+{
+	struct expression *arg;
+	int i = 0;
+
+	FOR_EACH_PTR(expr->args, arg) {
+		if (get_state_expr(my_id, arg) == &nospec)
+			sql_insert_caller_info(expr, NOSPEC, i, "$", "");
+		i++;
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void struct_member_callback(struct expression *call, int param, char *printed_name, struct sm_state *sm)
+{
+	struct range_list *rl;
+
+	if (!get_user_rl_var_sym(sm->name, sm->sym, &rl))
+		return;
+	sql_insert_caller_info(call, NOSPEC, param, printed_name, "");
+}
+
+static void returned_struct_members(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct symbol *returned_sym;
+	struct sm_state *sm;
+	const char *param_name;
+	struct range_list *rl;
+	int param;
+
+	returned_sym = expr_to_sym(expr);
+
+	FOR_EACH_MY_SM(my_id, __get_cur_stree(), sm) {
+		param = get_param_num_from_sym(sm->sym);
+		if (param < 0) {
+			if (!returned_sym || returned_sym != sm->sym)
+				continue;
+			param = -1;
+		}
+
+		param_name = get_param_name(sm);
+		if (!param_name)
+			continue;
+		if (param != -1 && strcmp(param_name, "$") == 0)
+			continue;
+
+		if (!get_user_rl_var_sym(sm->name, sm->sym, &rl))
+			continue;
+
+		sql_insert_return_states(return_id, return_ranges, NOSPEC, param, param_name, "");
+	} END_FOR_EACH_SM(sm);
+
+	if (is_nospec(expr) && get_user_rl(expr, &rl))
+		sql_insert_return_states(return_id, return_ranges, NOSPEC, -1, "$", "");
+
+	if (get_state(barrier_id, "barrier", NULL) == &nospec)
+		sql_insert_return_states(return_id, return_ranges, NOSPEC_WB, -1, "", "");
+}
+
+static int is_return_statement(void)
+{
+	if (__cur_stmt && __cur_stmt->type == STMT_RETURN)
+		return 1;
+	return 0;
+}
+
+static void db_returns_nospec(struct expression *expr, int param, char *key, char *value)
+{
+	struct expression *call;
+	struct expression *arg;
+	char *name;
+	struct symbol *sym;
+
+	call = expr;
+	while (call->type == EXPR_ASSIGNMENT)
+		call = strip_expr(call->right);
+	if (call->type != EXPR_CALL)
+		return;
+
+	if (param == -1 && expr->type == EXPR_ASSIGNMENT) {
+		name = get_variable_from_key(expr->left, key, &sym);
+	} else if (param == -1 && is_return_statement()) {
+		in_nospec_stmt = true;
+		return;
+	} else {
+		arg = get_argument_from_call_expr(call->args, param);
+		if (!arg)
+			return;
+		name = get_variable_from_key(arg, key, &sym);
+	}
+	if (!name || !sym)
+		goto free;
+
+	set_state(my_id, name, sym, &nospec);
+free:
+	free_string(name);
+}
+
+static int is_nospec_asm(struct statement *stmt)
+{
+	char *macro;
+
+	if (!stmt || stmt->type != STMT_ASM)
+		return 0;
+	macro = get_macro_name(stmt->asm_string->pos);
+	if (!macro || strcmp(macro, "CALL_NOSPEC") != 0)
+		return 0;
+	return 1;
+}
+
+static void match_asm(struct statement *stmt)
+{
+	if (is_nospec_asm(stmt))
+		in_nospec_stmt = true;
+}
+
+static void match_after_nospec_asm(struct statement *stmt)
+{
+	in_nospec_stmt = false;
+}
+
+static void mark_user_data_as_nospec(void)
+{
+	struct stree *stree;
+	struct symbol *type;
+	struct sm_state *sm;
+
+	stree = get_user_stree();
+	FOR_EACH_SM(stree, sm) {
+		if (is_whole_rl(estate_rl(sm->state)))
+			continue;
+		type = estate_type(sm->state);
+		if (!type || type->type != SYM_BASETYPE)
+			continue;
+		if (!is_capped_var_sym(sm->name, sm->sym))
+			continue;
+		set_state(my_id, sm->name, sm->sym, &nospec);
+	} END_FOR_EACH_SM(sm);
+	free_stree(&stree);
+}
+
+static void match_barrier(struct statement *stmt)
+{
+	char *macro;
+
+	macro = get_macro_name(stmt->pos);
+	if (!macro)
+		return;
+	if (strcmp(macro, "rmb") != 0 &&
+	    strcmp(macro, "smp_rmb") != 0 &&
+	    strcmp(macro, "barrier_nospec") != 0)
+		return;
+
+	set_state(barrier_id, "barrier", NULL, &nospec);
+	mark_user_data_as_nospec();
+}
+
+static void db_returns_barrier(struct expression *expr, int param, char *key, char *value)
+{
+	mark_user_data_as_nospec();
+}
+
+void check_nospec(int id)
+{
+	my_id = id;
+
+	add_hook(&nospec_assign, ASSIGNMENT_HOOK);
+
+	select_caller_info_hook(set_param_nospec, NOSPEC);
+	add_unmatched_state_hook(my_id, &unmatched_state);
+
+	add_hook(&match_call_info, FUNCTION_CALL_HOOK);
+	add_member_info_callback(my_id, struct_member_callback);
+	add_split_return_callback(&returned_struct_members);
+	select_return_states_hook(NOSPEC, &db_returns_nospec);
+	select_return_states_hook(NOSPEC_WB, &db_returns_barrier);
+
+	add_hook(&match_asm, ASM_HOOK);
+	add_hook(&match_after_nospec_asm, STMT_HOOK_AFTER);
+}
+
+void check_nospec_barrier(int id)
+{
+	barrier_id = id;
+
+	add_hook(&match_barrier, ASM_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:06 2018
+++ new/usr/src/tools/smatch/src/check_off_by_one_relative.c	Fri Dec 21 15:00:06 2018
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2015 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * The point here is to store that a buffer has x bytes even if we don't know
+ * the value of x.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+static void array_check(struct expression *expr)
+{
+	struct expression *array;
+	struct expression *size;
+	struct expression *offset;
+	char *array_str, *offset_str;
+
+	expr = strip_expr(expr);
+	if (!is_array(expr))
+		return;
+
+	array = get_array_base(expr);
+	size = get_size_variable(array);
+	if (!size)
+		return;
+	offset = get_array_offset(expr);
+	if (!possible_comparison(size, SPECIAL_EQUAL, offset))
+		return;
+
+	array_str = expr_to_str(array);
+	offset_str = expr_to_str(offset);
+	sm_warning("potentially one past the end of array '%s[%s]'", array_str, offset_str);
+	free_string(array_str);
+	free_string(offset_str);
+}
+
+static int known_access_ok_comparison(struct expression *expr)
+{
+	struct expression *array;
+	struct expression *size;
+	struct expression *offset;
+	int comparison;
+
+	array = get_array_base(expr);
+	size = get_size_variable(array);
+	if (!size)
+		return 0;
+	offset = get_array_offset(expr);
+	comparison = get_comparison(size, offset);
+	if (comparison == '>' || comparison == SPECIAL_UNSIGNED_GT)
+		return 1;
+
+	return 0;
+}
+
+static int known_access_ok_numbers(struct expression *expr)
+{
+	struct expression *array;
+	struct expression *offset;
+	sval_t max;
+	int size;
+
+	array = get_array_base(expr);
+	offset = get_array_offset(expr);
+
+	size = get_array_size(array);
+	if (size <= 0)
+		return 0;
+
+	get_absolute_max(offset, &max);
+	if (max.uvalue < size)
+		return 1;
+	return 0;
+}
+
+static void array_check_data_info(struct expression *expr)
+{
+	struct expression *array;
+	struct expression *offset;
+	struct state_list *slist;
+	struct sm_state *sm;
+	struct compare_data *comp;
+	char *offset_name;
+	const char *equal_name = NULL;
+
+	expr = strip_expr(expr);
+	if (!is_array(expr))
+		return;
+
+	if (known_access_ok_numbers(expr))
+		return;
+	if (known_access_ok_comparison(expr))
+		return;
+
+	array = get_array_base(expr);
+	offset = get_array_offset(expr);
+	offset_name = expr_to_var(offset);
+	if (!offset_name)
+		return;
+	slist = get_all_possible_equal_comparisons(offset);
+	if (!slist)
+		goto free;
+
+	FOR_EACH_PTR(slist, sm) {
+		comp = sm->state->data;
+		if (strcmp(comp->left_var, offset_name) == 0) {
+			if (db_var_is_array_limit(array, comp->right_var, comp->right_vsl)) {
+				equal_name = comp->right_var;
+				break;
+			}
+		} else if (strcmp(comp->right_var, offset_name) == 0) {
+			if (db_var_is_array_limit(array, comp->left_var, comp->left_vsl)) {
+				equal_name = comp->left_var;
+				break;
+			}
+		}
+	} END_FOR_EACH_PTR(sm);
+
+	if (equal_name) {
+		char *array_name = expr_to_str(array);
+
+		sm_warning("potential off by one '%s[]' limit '%s'", array_name, equal_name);
+		free_string(array_name);
+	}
+
+free:
+	free_slist(&slist);
+	free_string(offset_name);
+}
+
+void check_off_by_one_relative(int id)
+{
+	my_id = id;
+
+	add_hook(&array_check, OP_HOOK);
+	add_hook(&array_check_data_info, OP_HOOK);
+}
+
--- /dev/null	Fri Dec 21 15:00:06 2018
+++ new/usr/src/tools/smatch/src/check_or_vs_and.c	Fri Dec 21 15:00:06 2018
@@ -0,0 +1,192 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_function_hashtable.h"
+
+static int my_id;
+
+DEFINE_STRING_HASHTABLE_STATIC(unconstant_macros);
+
+static int does_inc_dec(struct expression *expr)
+{
+	if (expr->type == EXPR_PREOP || expr->type == EXPR_POSTOP) {
+		if (expr->op == SPECIAL_INCREMENT || expr->op == SPECIAL_DECREMENT)
+			return 1;
+		return does_inc_dec(expr->unop);
+	}
+	return 0;
+}
+
+static int expr_equiv_no_inc_dec(struct expression *one, struct expression *two)
+{
+	if (does_inc_dec(one) || does_inc_dec(two))
+		return 0;
+	return expr_equiv(one, two);
+}
+
+static int inconsistent_check(struct expression *left, struct expression *right)
+{
+	sval_t sval;
+
+	if (get_value(left->left, &sval)) {
+		if (get_value(right->left, &sval))
+			return expr_equiv_no_inc_dec(left->right, right->right);
+		if (get_value(right->right, &sval))
+			return expr_equiv_no_inc_dec(left->right, right->left);
+		return 0;
+	}
+	if (get_value(left->right, &sval)) {
+		if (get_value(right->left, &sval))
+			return expr_equiv_no_inc_dec(left->left, right->right);
+		if (get_value(right->right, &sval))
+			return expr_equiv_no_inc_dec(left->left, right->left);
+		return 0;
+	}
+
+	return 0;
+}
+
+static void check_or(struct expression *expr)
+{
+	struct expression *left, *right;
+
+	left = strip_expr(expr->left);
+	right = strip_expr(expr->right);
+
+	if (left->type != EXPR_COMPARE || left->op != SPECIAL_NOTEQUAL)
+		return;
+	if (right->type != EXPR_COMPARE || right->op != SPECIAL_NOTEQUAL)
+		return;
+	if (!inconsistent_check(left, right))
+		return;
+
+	sm_warning("was && intended here instead of ||?");
+}
+
+static int is_kernel_min_macro(struct expression *expr)
+{
+	char *macro;
+
+	if (option_project != PROJ_KERNEL)
+		return 0;
+	macro = get_macro_name(expr->pos);
+	if (!macro)
+		return 0;
+	if (strcmp(macro, "min") == 0 ||
+	    strcmp(macro, "min_t") == 0 ||
+	    strcmp(macro, "max") == 0 ||
+	    strcmp(macro, "max_t") == 0)
+		return 1;
+	return 0;
+}
+
+static void check_and(struct expression *expr)
+{
+	struct expression *left, *right;
+
+	if (is_kernel_min_macro(expr))
+		return;
+
+	left = strip_expr(expr->left);
+	right = strip_expr(expr->right);
+
+	if (left->type != EXPR_COMPARE || left->op != SPECIAL_EQUAL)
+		return;
+	if (right->type != EXPR_COMPARE || right->op != SPECIAL_EQUAL)
+		return;
+	if (!inconsistent_check(left, right))
+		return;
+
+	sm_warning("was || intended here instead of &&?");
+}
+
+static void match_logic(struct expression *expr)
+{
+	if (expr->type != EXPR_LOGICAL)
+		return;
+
+	if (expr->op == SPECIAL_LOGICAL_OR)
+		check_or(expr);
+	if (expr->op == SPECIAL_LOGICAL_AND)
+		check_and(expr);
+}
+
+static int is_unconstant_macro(struct expression *expr)
+{
+	char *macro;
+
+	macro = get_macro_name(expr->pos);
+	if (!macro)
+		return 0;
+	if (search_unconstant_macros(unconstant_macros, macro))
+		return 1;
+	return 0;
+}
+
+static void match_condition(struct expression *expr)
+{
+	sval_t sval;
+
+	if (expr->type != EXPR_BINOP)
+		return;
+	if (expr->op == '|') {
+		if (get_value(expr->left, &sval) || get_value(expr->right, &sval))
+			sm_warning("suspicious bitop condition");
+		return;
+	}
+
+	if (expr->op != '&')
+		return;
+
+	if (get_macro_name(expr->pos))
+		return;
+	if (is_unconstant_macro(expr->left) || is_unconstant_macro(expr->right))
+		return;
+
+	if ((get_value(expr->left, &sval) && sval.value == 0) ||
+	    (get_value(expr->right, &sval) && sval.value == 0))
+		sm_warning("bitwise AND condition is false here");
+}
+
+static void match_binop(struct expression *expr)
+{
+	sval_t left, right, sval;
+
+	if (expr->op != '&')
+		return;
+	if (!get_value(expr, &sval) || sval.value != 0)
+		return;
+	if (get_macro_name(expr->pos))
+		return;
+	if (!get_value(expr->left, &left) || !get_value(expr->right, &right))
+		return;
+	sm_warning("odd binop '0x%llx & 0x%llx'", left.uvalue, right.uvalue);
+}
+
+void check_or_vs_and(int id)
+{
+	my_id = id;
+
+	unconstant_macros = create_function_hashtable(100);
+	load_strings("unconstant_macros", unconstant_macros);
+
+	add_hook(&match_logic, LOGIC_HOOK);
+	add_hook(&match_condition, CONDITION_HOOK);
+	if (option_spammy)
+		add_hook(&match_binop, BINOP_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:06 2018
+++ new/usr/src/tools/smatch/src/check_param_mapper.c	Fri Dec 21 15:00:06 2018
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * The idea behind this test is that if we have:
+ * void foo(int bar)
+ * {
+ *         baz(1, bar);
+ * }
+ *
+ * Passing "bar" to foo() really means passing "bar" to baz();
+ * 
+ * In this case it would print:
+ * info: param_mapper 0 => bar 1
+ *
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+STATE(argument);
+
+static struct symbol *func_sym;
+
+static void delete(struct sm_state *sm, struct expression *mod_expr)
+{
+	set_state(my_id, sm->name, sm->sym, &undefined);
+}
+
+static void match_function_def(struct symbol *sym)
+{
+	struct symbol *arg;
+
+	func_sym = sym;
+	FOR_EACH_PTR(func_sym->ctype.base_type->arguments, arg) {
+		if (!arg->ident) {
+			continue;
+		}
+		set_state(my_id, arg->ident->name, arg, &argument);
+	} END_FOR_EACH_PTR(arg);
+}
+
+static int get_arg_num(struct expression *expr)
+{
+	struct smatch_state *state;
+	struct symbol *arg;
+	struct symbol *this_arg;
+	int i;
+
+	expr = strip_expr(expr);
+	if (expr->type != EXPR_SYMBOL)
+		return -1;
+	this_arg = expr->symbol;
+
+	state = get_state_expr(my_id, expr);
+	if (!state || state != &argument)
+		return -1;
+	
+	i = 0;
+	FOR_EACH_PTR(func_sym->ctype.base_type->arguments, arg) {
+		if (arg == this_arg)
+			return i;
+		i++;
+	} END_FOR_EACH_PTR(arg);
+
+	return -1;
+}
+
+static void match_call(struct expression *expr)
+{
+	struct expression *tmp;
+	char *func;
+	int arg_num;
+	int i;
+
+	if (expr->fn->type != EXPR_SYMBOL)
+		return;
+
+	func = expr->fn->symbol_name->name;
+
+	i = 0;
+	FOR_EACH_PTR(expr->args, tmp) {
+		tmp = strip_expr(tmp);
+		arg_num = get_arg_num(tmp);
+		if (arg_num >= 0)
+			sm_msg("info: param_mapper %d => %s %d", arg_num, func, i);
+		i++;
+	} END_FOR_EACH_PTR(tmp);
+}
+
+void check_param_mapper(int id)
+{
+	if (!option_param_mapper)
+		return;
+	my_id = id;
+	add_modification_hook(my_id, &delete);
+	add_hook(&match_function_def, FUNC_DEF_HOOK);
+	add_hook(&match_call, FUNCTION_CALL_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:06 2018
+++ new/usr/src/tools/smatch/src/check_passes_sizeof.c	Fri Dec 21 15:00:06 2018
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+#define NOBUF -2
+
+static int my_id;
+
+static struct expression *get_returned_expr(struct expression *expr)
+{
+	struct statement *stmt;
+
+	stmt = last_ptr_list((struct ptr_list *)big_statement_stack);
+	if (!stmt || stmt->type != STMT_EXPRESSION || !stmt->expression)
+		return NULL;
+	if (stmt->expression->type != EXPR_ASSIGNMENT)
+		return NULL;
+	if (stmt->expression->right != expr)
+		return NULL;
+	return stmt->expression->left;
+}
+
+static struct expression *remove_dereference(struct expression *expr)
+{
+	if (!expr || expr->type != EXPR_PREOP || expr->op != '*')
+		return expr;
+	expr = expr->unop;
+	if (!expr || expr->type != EXPR_PREOP || expr->op != '*')
+		return expr;
+	return expr->unop;
+}
+
+static int get_buf_number(struct expression *call, struct expression *size_arg)
+{
+	struct expression *arg;
+	int idx = -1;
+
+	size_arg = strip_expr(size_arg->cast_expression);
+	size_arg = remove_dereference(size_arg);
+
+	arg = get_returned_expr(call);
+	if (arg && expr_equiv(arg, size_arg))
+		return idx;
+
+	FOR_EACH_PTR(call->args, arg) {
+		idx++;
+		if (expr_equiv(arg, size_arg))
+			return idx;
+	} END_FOR_EACH_PTR(arg);
+
+	return NOBUF;
+}
+
+static void match_call(struct expression *call)
+{
+	struct expression *arg;
+	char *name;
+	int buf_nr;
+	int i = -1;
+
+	if (call->fn->type != EXPR_SYMBOL)
+		return;
+
+	name = expr_to_var(call->fn);
+	FOR_EACH_PTR(call->args, arg) {
+		i++;
+		if (arg->type != EXPR_SIZEOF)
+			continue;
+		buf_nr = get_buf_number(call, arg);
+		if (buf_nr == NOBUF)
+			sm_msg("info: sizeof_param '%s' %d", name, i);
+		else
+			sm_msg("info: sizeof_param '%s' %d %d", name, i, buf_nr);
+	} END_FOR_EACH_PTR(arg);
+	free_string(name);
+}
+
+void check_passes_sizeof(int id)
+{
+	if (!option_info)
+		return;
+
+	my_id = id;
+	add_hook(&match_call, FUNCTION_CALL_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:06 2018
+++ new/usr/src/tools/smatch/src/check_platform_device_put.c	Fri Dec 21 15:00:06 2018
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+#define MAX_ERRNO 4095
+
+STATE(added);
+STATE(not_added);
+
+static void match_added(const char *fn, struct expression *call_expr,
+			struct expression *assign_expr, void *unused)
+{
+	struct expression *arg_expr;
+
+	arg_expr = get_argument_from_call_expr(call_expr->args, 0);
+	set_state_expr(my_id, arg_expr, &added);
+}
+
+static void match_not_added(const char *fn, struct expression *call_expr,
+			struct expression *assign_expr, void *unused)
+{
+	struct expression *arg_expr;
+
+	arg_expr = get_argument_from_call_expr(call_expr->args, 0);
+	set_state_expr(my_id, arg_expr, &not_added);
+}
+
+static void match_platform_device_del(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *arg_expr;
+	struct sm_state *sm;
+
+	arg_expr = get_argument_from_call_expr(expr->args, 0);
+	sm = get_sm_state_expr(my_id, arg_expr);
+	if (!sm)
+		return;
+	if (!slist_has_state(sm->possible, &not_added))
+		return;
+	sm_warning("perhaps platform_device_put() was intended here?");
+}
+
+void check_platform_device_put(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+	my_id = id;
+
+	return_implies_state("platform_device_add", 0, 0, &match_added, NULL);
+	return_implies_state("platform_device_add", -MAX_ERRNO, -1, &match_not_added, NULL);
+	add_function_hook("platform_device_del", &match_platform_device_del, NULL);
+}
--- /dev/null	Fri Dec 21 15:00:06 2018
+++ new/usr/src/tools/smatch/src/check_pointer_math.c	Fri Dec 21 15:00:06 2018
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+STATE(size_in_bytes);
+
+static void set_undefined(struct sm_state *sm, struct expression *mod_expr)
+{
+	if (sm->state == &size_in_bytes)
+		set_state(my_id, sm->name, sm->sym, &undefined);
+}
+
+static int is_sizeof(struct expression *expr)
+{
+	return (expr->type == EXPR_SIZEOF);
+}
+
+static int is_macro(struct expression *expr, const char *macro_name)
+{
+	char *name;
+	struct expression *outside_expr;
+
+	/* check that we aren't inside the macro itself */
+	outside_expr = last_ptr_list((struct ptr_list *)big_expression_stack);
+	if (outside_expr && positions_eq(expr->pos, outside_expr->pos))
+		return 0;
+
+	name = get_macro_name(expr->pos);
+	if (name && strcmp(name, macro_name) == 0)
+		return 1;
+	return 0;
+}
+
+static int is_size_in_bytes(struct expression *expr)
+{
+	if (is_sizeof(expr))
+		return 1;
+
+	if (is_macro(expr, "offsetof"))
+		return 1;
+	if (is_macro(expr, "PAGE_SIZE"))
+		return 1;
+
+	if (get_state_expr(my_id, expr) == &size_in_bytes)
+		return 1;
+
+	return 0;
+}
+
+static void match_binop(struct expression *expr)
+{
+	struct symbol *type;
+	char *name;
+	int size;
+
+	if (expr->op != '+')
+		return;
+	type = get_pointer_type(expr->left);
+	if (!type)
+		return;
+	if (type_bits(type) <= 8) /* ignore void, bool and char pointers*/
+		return;
+	if (!is_size_in_bytes(expr->right))
+		return;
+
+	/* if we know it's within bounds then don't complain */
+	size = get_array_size(expr->left);
+	if (size) {
+		sval_t max;
+
+		get_absolute_max(expr->right, &max);
+		if (max.uvalue < size)
+			return;
+	}
+
+	name = expr_to_str(expr->left);
+	sm_warning("potential pointer math issue ('%s' is a %d bit pointer)",
+	       name, type_bits(type));
+	free_string(name);
+}
+
+static void match_assign(struct expression *expr)
+{
+	if (expr->op != '=')
+		return;
+
+	if (!is_size_in_bytes(expr->right))
+		return;
+	set_state_expr(my_id, expr->left, &size_in_bytes);
+}
+
+static void check_assign(struct expression *expr)
+{
+	struct symbol *type;
+	char *name;
+
+	if (expr->op != SPECIAL_ADD_ASSIGN && expr->op != SPECIAL_SUB_ASSIGN)
+		return;
+
+	type = get_pointer_type(expr->left);
+	if (!type)
+		return;
+	if (type_bits(type) == 8 || type_bits(type) == -1)
+		return;
+	if (!is_size_in_bytes(expr->right))
+		return;
+	name = expr_to_var(expr->left);
+	sm_warning("potential pointer math issue ('%s' is a %d bit pointer)",
+	       name, type_bits(type));
+	free_string(name);
+}
+
+void check_pointer_math(int id)
+{
+	my_id = id;
+	add_hook(&match_binop, BINOP_HOOK);
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+	add_hook(&check_assign, ASSIGNMENT_HOOK);
+	add_modification_hook(my_id, &set_undefined);
+}
--- /dev/null	Fri Dec 21 15:00:07 2018
+++ new/usr/src/tools/smatch/src/check_precedence.c	Fri Dec 21 15:00:07 2018
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+static int is_bool(struct expression *expr)
+{
+	struct symbol *type;
+
+	type = get_type(expr);
+	if (!type)
+		return 0;
+	if (type_bits(type) == 1 && type->ctype.modifiers & MOD_UNSIGNED)
+		return 1;
+	return 0;
+}
+
+static int is_bool_from_context(struct expression *expr)
+{
+	sval_t sval;
+
+	if (!get_implied_max(expr, &sval) || sval.uvalue > 1)
+		return 0;
+	if (!get_implied_min(expr, &sval) || sval.value < 0)
+		return 0;
+	return 1;
+}
+
+static int is_bool_op(struct expression *expr)
+{
+	expr = strip_expr(expr);
+
+	if (expr->type == EXPR_PREOP && expr->op == '!')
+		return 1;
+	if (expr->type == EXPR_COMPARE)
+		return 1;
+	if (expr->type == EXPR_LOGICAL)
+		return 1;
+	return is_bool(expr);
+}
+
+static void match_condition(struct expression *expr)
+{
+	int print = 0;
+
+	if (expr->type == EXPR_COMPARE) {
+		if (expr->left->type == EXPR_COMPARE || expr->right->type == EXPR_COMPARE)
+			print = 1;
+		if (expr->left->type == EXPR_PREOP && expr->left->op == '!') {
+			if (expr->left->unop->type == EXPR_PREOP && expr->left->unop->op == '!')
+				return;
+			if (expr->right->op == '!')
+				return;
+			if (is_bool(expr->right))
+				return;
+			if (is_bool(expr->left->unop))
+				return;
+			if (is_bool_from_context(expr->left->unop))
+				return;
+			print = 1;
+		}
+	}
+
+	if (expr->type == EXPR_BINOP) {
+		if (expr->left->type == EXPR_COMPARE || expr->right->type == EXPR_COMPARE)
+			print = 1;
+	}
+
+	if (print) {
+		sm_warning("add some parenthesis here?");
+		return;
+	}
+
+	if (expr->type == EXPR_BINOP && expr->op == '&') {
+		int i = 0;
+
+		if (is_bool_op(expr->left))
+			i++;
+		if (is_bool_op(expr->right))
+			i++;
+		if (i == 1)
+			sm_warning("maybe use && instead of &");
+	}
+}
+
+static void match_binop(struct expression *expr)
+{
+	if (expr->op != '&')
+		return;
+	if (expr->left->op == '!')
+		sm_warning("add some parenthesis here?");
+}
+
+static void match_mask(struct expression *expr)
+{
+	if (expr->op != '&')
+		return;
+	if (expr->right->type != EXPR_BINOP)
+		return;
+	if (expr->right->op != SPECIAL_RIGHTSHIFT)
+		return;
+
+	sm_warning("shift has higher precedence than mask");
+}
+
+static void match_subtract_shift(struct expression *expr)
+{
+	if (expr->op != SPECIAL_LEFTSHIFT)
+		return;
+	if (expr->right->type != EXPR_BINOP)
+		return;
+	if (expr->right->op != '-')
+		return;
+	sm_warning("subtract is higher precedence than shift");
+}
+
+void check_precedence(int id)
+{
+	my_id = id;
+
+	add_hook(&match_condition, CONDITION_HOOK);
+	add_hook(&match_binop, BINOP_HOOK);
+	add_hook(&match_mask, BINOP_HOOK);
+	add_hook(&match_subtract_shift, BINOP_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:07 2018
+++ new/usr/src/tools/smatch/src/check_proc_create.c	Fri Dec 21 15:00:07 2018
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static struct {
+	int name_param;
+	int mode_param;
+} param_index[] = {
+	{.name_param = 0, .mode_param = 1},
+	{.name_param = 1, .mode_param = 2},
+};
+
+#define S_IWOTH 00002
+
+static void match_create(const char *fn, struct expression *expr, void *_param_type)
+{
+	struct expression *arg_expr;
+	sval_t sval;
+	char *name;
+	int idx = PTR_INT(_param_type);
+
+	arg_expr = get_argument_from_call_expr(expr->args, param_index[idx].mode_param);
+	if (!get_implied_value(arg_expr, &sval))
+		return;
+	if (!(sval.uvalue & S_IWOTH))
+		return;
+	arg_expr = get_argument_from_call_expr(expr->args, param_index[idx].name_param);
+	name = expr_to_var(arg_expr);
+	sm_warning("proc file '%s' is world writable", name);
+	free_string(name);
+}
+
+void check_proc_create(int id)
+{
+	my_id = id;
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	add_function_hook("proc_create", &match_create, INT_PTR(0));
+	add_function_hook("create_proc_entry", &match_create, INT_PTR(0));
+	add_function_hook("proc_create_data", &match_create, INT_PTR(0));
+	add_function_hook("proc_net_fops_create", match_create, INT_PTR(1));
+}
--- /dev/null	Fri Dec 21 15:00:07 2018
+++ new/usr/src/tools/smatch/src/check_puts_argument.c	Fri Dec 21 15:00:07 2018
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/* 
+ * This script is for finding functions like hcd_buffer_free() which free
+ * their arguments.  After running it, add those functions to check_memory.c
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+STATE(putted);
+
+static struct symbol *this_func;
+static struct tracker_list *putted_args = NULL;
+
+static void match_function_def(struct symbol *sym)
+{
+	this_func = sym;
+}
+
+static int parent_is_arg(struct symbol *sym)
+{
+	struct symbol *arg;
+
+	FOR_EACH_PTR(this_func->ctype.base_type->arguments, arg) {
+		if (sym == arg)
+			return 1;
+	} END_FOR_EACH_PTR(arg);
+	return 0;
+}
+
+static void match_put(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *tmp;
+	struct symbol *sym;
+	char *name;
+
+	tmp = get_argument_from_call_expr(expr->args, 0);
+	tmp = strip_expr(tmp);
+	name = expr_to_var_sym(tmp, &sym);
+	free_string(name);
+	if (parent_is_arg(sym) && sym->ident)
+		set_state(my_id, sym->ident->name, sym, &putted);
+}
+
+static int return_count = 0;
+static void match_return(struct expression *ret_value)
+{
+	struct stree *stree;
+	struct sm_state *tmp;
+	struct tracker *tracker;
+
+	if (__inline_fn)
+		return;
+
+	if (!return_count) {
+		stree = __get_cur_stree();
+		FOR_EACH_MY_SM(my_id, stree, tmp) {
+			if (tmp->state == &putted)
+				add_tracker(&putted_args, my_id, tmp->name, 
+					    tmp->sym);
+		} END_FOR_EACH_SM(tmp);
+	} else {
+		FOR_EACH_PTR(putted_args, tracker) {
+			tmp = get_sm_state(my_id, tracker->name, tracker->sym);
+			if (tmp && tmp->state != &putted)
+				del_tracker(&putted_args, my_id, tracker->name, 
+					    tracker->sym);
+		} END_FOR_EACH_PTR(tracker);
+		
+	}
+}
+
+static void print_arg(struct symbol *sym)
+{
+	struct symbol *arg;
+	int i = 0;
+
+	FOR_EACH_PTR(this_func->ctype.base_type->arguments, arg) {
+		if (sym == arg) {
+			sm_info("puts_arg %s %d", get_function(), i);
+			return;
+		}
+		i++;
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void match_end_func(struct symbol *sym)
+{
+	struct tracker *tracker;
+
+	if (__inline_fn)
+		return;
+	if (is_reachable())
+		match_return(NULL);
+
+	FOR_EACH_PTR(putted_args, tracker) {
+		print_arg(tracker->sym);
+	} END_FOR_EACH_PTR(tracker);
+
+	free_trackers_and_list(&putted_args);
+	return_count = 0;
+}
+
+void check_puts_argument(int id)
+{
+	if (!option_info || option_project != PROJ_KERNEL)
+		return;
+
+	my_id = id;
+	add_hook(&match_function_def, FUNC_DEF_HOOK);
+	add_function_hook("kobject_put", &match_put, NULL);
+	add_function_hook("kref_put", &match_put, NULL);
+	add_hook(&match_return, RETURN_HOOK);
+	add_hook(&match_end_func, END_FUNC_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:07 2018
+++ new/usr/src/tools/smatch/src/check_readl_infinite_loops.c	Fri Dec 21 15:00:07 2018
@@ -0,0 +1,165 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+STATE(readl);
+STATE(readl_ff);
+STATE(readl_00);
+
+DECLARE_PTR_LIST(state_stack, struct smatch_state);
+struct state_stack *state_at_start;
+
+static int readl_has_been_called;
+static int returned;
+
+static int is_readl_call(struct expression *expr)
+{
+	struct symbol *sym;
+
+	expr = strip_expr(expr);
+	if (expr->type != EXPR_CALL)
+		return 0;
+	if (expr->fn->type != EXPR_SYMBOL)
+		return 0;
+	sym = expr->fn->symbol;
+	if (!sym || !sym->ident)
+		return 0;
+	if (strcmp(sym->ident->name, "readl") != 0)
+		return 0;
+	return 1;
+}
+
+static int is_readl(struct expression *expr)
+{
+	if (is_readl_call(expr))
+		return 1;
+	if (get_state_expr(my_id, expr) == &readl)
+		return 1;
+	return 0;
+}
+
+static void match_assign(struct expression *expr)
+{
+	if (is_readl(expr->right))
+		set_state_expr(my_id, expr->left, &readl);
+	else if (get_state_expr(my_id, expr->left))
+		set_state_expr(my_id, expr->left, &undefined);
+}
+
+static int condition_depends_on_readl(struct expression *expr)
+{
+	if (expr->type == EXPR_BINOP) {
+		if (condition_depends_on_readl(expr->left))
+			return 1;
+		if (condition_depends_on_readl(expr->right))
+			return 1;
+		return 0;
+	}
+	if (is_readl(expr))
+		return 1;
+	return 0;
+}
+
+static void check_condition(struct expression *expr)
+{
+	if (expr->op != '&')
+		return;
+	if (!condition_depends_on_readl(expr))
+		return;
+	readl_has_been_called = 1;
+	set_true_false_states(my_id, "depends on", NULL, &readl_ff, &readl_00);
+}
+
+static void match_return(struct expression *expr)
+{
+
+	if (__inline_fn)
+		return;
+	returned = 1;
+#if 0
+	struct smatch_state *tmp;
+
+	if (!readl_has_been_called)
+		return;
+
+	FOR_EACH_PTR(state_at_start, tmp) {
+		REPLACE_CURRENT_PTR(tmp, NULL);
+	}
+#endif
+}
+
+static void push_state_at_start(struct smatch_state *state)
+{
+	add_ptr_list(&state_at_start, state);
+}
+
+static struct smatch_state *pop_state_at_start(void)
+{
+	struct smatch_state *state;
+
+	state = last_ptr_list((struct ptr_list *)state_at_start);
+	delete_ptr_list_last((struct ptr_list **)&state_at_start);
+	return state;
+}
+
+static void before_loop(struct statement *stmt)
+{
+	struct smatch_state *state;
+
+	if (!stmt || stmt->type != STMT_ITERATOR)
+		return;
+	if (ptr_list_empty(state_at_start))
+		returned = 0;
+	state = get_state(my_id, "depends on", NULL);
+	push_state_at_start(state);
+}
+
+static void after_loop(struct statement *stmt)
+{
+	struct smatch_state *old_state;
+
+	if (!stmt || stmt->type != STMT_ITERATOR)
+		return;
+	old_state = pop_state_at_start();
+	if (old_state == &readl_00)
+		return;
+	if (returned)
+		return;
+	if (get_state(my_id, "depends on", NULL) != &readl_00)
+		return;
+	sm_warning("this loop depends on readl() succeeding");
+}
+
+void check_readl_infinite_loops(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	my_id = id;
+
+	add_hook(match_assign, ASSIGNMENT_HOOK);
+	add_hook(check_condition, CONDITION_HOOK);
+
+	add_hook(&match_return, RETURN_HOOK);
+
+	add_hook(before_loop, STMT_HOOK);
+	add_hook(after_loop, STMT_HOOK_AFTER);
+}
--- /dev/null	Fri Dec 21 15:00:07 2018
+++ new/usr/src/tools/smatch/src/check_release_resource.c	Fri Dec 21 15:00:07 2018
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * I found a bug where someone released the wrong resource and wanted to 
+ * prevent that from happening again.
+ *
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static struct tracker_list *resource_list;
+
+static void match_request(const char *fn, struct expression *expr, void *_arg_no)
+{
+	struct expression *arg_expr;
+	int arg_no = PTR_INT(_arg_no);
+	char *name;
+	struct symbol *sym;
+
+	arg_expr = get_argument_from_call_expr(expr->args, arg_no);
+	arg_expr = strip_expr(arg_expr);
+
+	name = expr_to_var_sym(arg_expr, &sym);
+	if (!name || !sym)
+		goto free;
+	add_tracker(&resource_list, my_id, name, sym);
+free:
+	free_string(name);
+}
+
+static void match_release(const char *fn, struct expression *expr, void *_arg_no)
+{
+	struct expression *arg_expr;
+	int arg_no = PTR_INT(_arg_no);
+	char *name;
+	struct symbol *sym;
+
+	arg_expr = get_argument_from_call_expr(expr->args, arg_no);
+	arg_expr = strip_expr(arg_expr);
+
+	if (!resource_list)
+		return;
+
+	name = expr_to_var_sym(arg_expr, &sym);
+	if (!name || !sym)
+		goto free;
+	if (in_tracker_list(resource_list, my_id, name, sym))
+		goto free;
+	sm_warning("'%s' was not one of the resources you requested", name);
+free:
+	free_string(name);
+}
+
+static void match_end_func(struct symbol *sym)
+{
+	if (__inline_fn)
+		return;
+	free_trackers_and_list(&resource_list);
+}
+
+void check_release_resource(int id)
+{
+	my_id = id;
+
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	add_function_hook("request_resource", &match_request, (void *)1);
+	add_function_hook("release_resource", &match_release, (void *)0);
+	add_function_hook("request_mem_resource", &match_request, (void *)0);
+	add_function_hook("release_mem_resource", &match_release, (void *)0);
+	add_hook(&match_end_func, END_FUNC_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:07 2018
+++ new/usr/src/tools/smatch/src/check_resource_size.c	Fri Dec 21 15:00:07 2018
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+extern int check_assigned_expr_id;
+
+static int is_probably_ok(struct expression *expr)
+{
+	expr = strip_expr(expr);
+
+	if (expr->type == EXPR_BINOP)
+		return 1;
+	if (expr->type == EXPR_SIZEOF)
+		return 1;
+
+	return 0;
+}
+
+static void verify_size_expr(struct expression *expr)
+{
+	if (expr->type != EXPR_BINOP)
+		return;
+	if (expr->op != '-')
+		return;
+	if (is_probably_ok(expr->left))
+		return;
+	if (is_probably_ok(expr->right))
+		return;
+	sm_warning("consider using resource_size() here");
+}
+
+static void handle_assigned_expr(struct expression *expr)
+{
+	struct smatch_state *state;
+
+	state = get_state_expr(check_assigned_expr_id, expr);
+	if (!state || !state->data)
+		return;
+	expr = (struct expression *)state->data;
+	verify_size_expr(expr);
+}
+
+static void match_resource(const char *fn, struct expression *expr, void *_arg_no)
+{
+	struct expression *arg_expr;
+	int arg_no = PTR_INT(_arg_no);
+
+	arg_expr = get_argument_from_call_expr(expr->args, arg_no);
+	arg_expr = strip_expr(arg_expr);
+	if (!arg_expr)
+		return;
+
+	if (arg_expr->type == EXPR_SYMBOL) {
+		handle_assigned_expr(arg_expr);
+		return;
+	}
+	verify_size_expr(arg_expr);
+}
+
+void check_resource_size(int id)
+{
+	my_id = id;
+
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	add_function_hook("ioremap_nocache", &match_resource, (void *)1);
+	add_function_hook("ioremap", &match_resource, (void *)1);
+	add_function_hook("__request_region", &match_resource, (void *)2);
+	add_function_hook("__release_region", &match_resource, (void *)2);
+	add_function_hook("__devm_request_region", &match_resource, (void *)3);
+	add_function_hook("__devm_release_region", &match_resource, (void *)3);
+}
--- /dev/null	Fri Dec 21 15:00:07 2018
+++ new/usr/src/tools/smatch/src/check_return.c	Fri Dec 21 15:00:07 2018
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+static void must_check(const char *fn, struct expression *expr, void *data)
+{
+	struct statement *stmt;
+
+	stmt = last_ptr_list((struct ptr_list *)big_statement_stack);
+	if (stmt->type == STMT_EXPRESSION && stmt->expression == expr)
+		sm_warning("unchecked '%s'", fn);
+}
+
+static void register_must_check_funcs(void)
+{
+	struct token *token;
+	const char *func;
+	static char name[256];
+
+
+	snprintf(name, 256, "%s.must_check_funcs", option_project_str);
+	name[255] = '\0';
+	token = get_tokens_file(name);
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		func = show_ident(token->ident);
+		add_function_hook(func, &must_check, NULL);
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+void check_return(int id)
+{
+	my_id = id;
+	register_must_check_funcs();
+}
--- /dev/null	Fri Dec 21 15:00:07 2018
+++ new/usr/src/tools/smatch/src/check_return_cast.c	Fri Dec 21 15:00:07 2018
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Complains about places that return -1 instead of -ENOMEM
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static void match_return(struct expression *ret_value)
+{
+	struct symbol *func_type = get_real_base_type(cur_func_sym);
+	sval_t sval;
+
+	if (!func_type)
+		return;
+	if (!type_unsigned(func_type))
+		return;
+	if (type_bits(func_type) > 16)
+		return;
+	if (!get_fuzzy_min(ret_value, &sval))
+		return;
+	if (sval_is_positive(sval) || sval_cmp_val(sval, -1) == 0)
+		return;
+
+	sm_warning("signedness bug returning '%s'", sval_to_str(sval));
+}
+
+void check_return_cast(int id)
+{
+	my_id = id;
+	add_hook(&match_return, RETURN_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:07 2018
+++ new/usr/src/tools/smatch/src/check_return_efault.c	Fri Dec 21 15:00:07 2018
@@ -0,0 +1,132 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This tries to find places which should probably return -EFAULT
+ * but return the number of bytes to copy instead.
+ */
+
+#include <string.h>
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+STATE(remaining);
+STATE(ok);
+
+static void ok_to_use(struct sm_state *sm, struct expression *mod_expr)
+{
+	if (sm->state != &ok)
+		set_state(my_id, sm->name, sm->sym, &ok);
+}
+
+static void match_copy(const char *fn, struct expression *expr, void *unused)
+{
+	if (expr->op == SPECIAL_SUB_ASSIGN)
+		return;
+	set_state_expr(my_id, expr->left, &remaining);
+}
+
+static void match_condition(struct expression *expr)
+{
+	if (!get_state_expr(my_id, expr))
+		return;
+	/* If the variable is zero that's ok */
+	set_true_false_states_expr(my_id, expr, NULL, &ok);
+}
+
+/*
+ * This function is biased in favour of print out errors.
+ * The heuristic to print is:
+ *    If we have a potentially positive return from copy_to_user
+ *    and there is a possibility that we return negative as well
+ *    then complain.
+ */
+static void match_return_var(struct expression *ret_value)
+{
+	struct smatch_state *state;
+	struct sm_state *sm;
+	sval_t min;
+
+	sm = get_sm_state_expr(my_id, ret_value);
+	if (!sm)
+		return;
+	if (!slist_has_state(sm->possible, &remaining))
+		return;
+	state = get_state_expr(SMATCH_EXTRA, ret_value);
+	if (!state)
+		return;
+	if (!get_absolute_min(ret_value, &min))
+		return;
+	if (min.value == 0)
+		return;
+	sm_warning("maybe return -EFAULT instead of the bytes remaining?");
+}
+
+static void match_return_call(struct expression *ret_value)
+{
+	struct expression *fn;
+	struct range_list *rl;
+	const char *fn_name;
+	char *cur_func;
+
+	if (!ret_value || ret_value->type != EXPR_CALL)
+		return;
+	cur_func = get_function();
+	if (!cur_func)
+		return;
+	if (strstr(cur_func, "_to_user") ||
+	    strstr(cur_func, "_from_user"))
+		return;
+
+	fn = strip_expr(ret_value->fn);
+	if (fn->type != EXPR_SYMBOL)
+		return;
+	fn_name = fn->symbol_name->name;
+	if (strcmp(fn_name, "copy_to_user") != 0 &&
+	    strcmp(fn_name, "__copy_to_user") != 0 &&
+	    strcmp(fn_name, "copy_from_user") != 0 &&
+	    strcmp(fn_name, "__copy_from_user"))
+		return;
+
+	rl = db_return_vals_from_str(get_function());
+	if (!rl)
+		return;
+
+	if (!sval_is_negative(rl_min(rl)))
+		return;
+	sm_warning("maybe return -EFAULT instead of the bytes remaining?");
+}
+
+void check_return_efault(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	my_id = id;
+	add_function_assign_hook("copy_to_user", &match_copy, NULL);
+	add_function_assign_hook("__copy_to_user", &match_copy, NULL);
+	add_function_assign_hook("copy_from_user", &match_copy, NULL);
+	add_function_assign_hook("__copy_from_user", &match_copy, NULL);
+	add_function_assign_hook("clear_user", &match_copy, NULL);
+	add_hook(&match_condition, CONDITION_HOOK);
+	add_hook(&match_return_var, RETURN_HOOK);
+	add_hook(&match_return_call, RETURN_HOOK);
+	add_modification_hook(my_id, &ok_to_use);
+}
--- /dev/null	Fri Dec 21 15:00:07 2018
+++ new/usr/src/tools/smatch/src/check_return_enomem.c	Fri Dec 21 15:00:07 2018
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Complains about places that return -1 instead of -ENOMEM
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+static void match_return(struct expression *ret_value)
+{
+	struct expression *expr;
+	struct sm_state *sm;
+	struct stree *stree;
+	sval_t sval;
+
+	if (!ret_value)
+		return;
+	if (returns_unsigned(cur_func_sym))
+		return;
+	if (returns_pointer(cur_func_sym))
+		return;
+	if (!get_value(ret_value, &sval) || sval.value != -1)
+		return;
+	if (get_macro_name(ret_value->pos))
+		return;
+
+	stree = __get_cur_stree();
+
+	FOR_EACH_MY_SM(SMATCH_EXTRA, stree, sm) {
+		if (!estate_get_single_value(sm->state, &sval) || sval.value != 0)
+			continue;
+		expr = get_assigned_expr_name_sym(sm->name, sm->sym);
+		if (!expr)
+			continue;
+		if (expr->type != EXPR_CALL || expr->fn->type != EXPR_SYMBOL)
+			continue;
+		if (!expr->fn->symbol_name)
+			continue;
+		/* To be honest the correct check is:
+		 * if (strstr(expr->fn->symbol_name->name, "alloc"))
+		 * 	complain();
+		 * But it generates too many warnings and it's too depressing.
+		 */
+		if (strcmp(expr->fn->symbol_name->name, "kmalloc") != 0 &&
+		    strcmp(expr->fn->symbol_name->name, "kzalloc") != 0)
+			continue;
+
+		sm_warning("returning -1 instead of -ENOMEM is sloppy");
+		return;
+
+	} END_FOR_EACH_SM(sm);
+}
+
+void check_return_enomem(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	my_id = id;
+	add_hook(&match_return, RETURN_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:07 2018
+++ new/usr/src/tools/smatch/src/check_return_negative_var.c	Fri Dec 21 15:00:07 2018
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2011 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+static void match_return(struct expression *ret_value)
+{
+	struct expression *expr;
+	char *macro;
+
+	if (!ret_value)
+		return;
+	expr = ret_value;
+	if (ret_value->type != EXPR_PREOP || ret_value->op != '-')
+		return;
+
+	macro = get_macro_name(expr->unop->pos);
+	if (macro && !strcmp(macro, "PTR_ERR")) {
+		sm_warning("returning -%s()", macro);
+		return;
+	}
+
+	if (!option_spammy)
+		return;
+
+	expr = get_assigned_expr(ret_value->unop);
+	if (!expr)
+		return;
+	if (expr->type != EXPR_CALL)
+		return;
+
+	sm_warning("should this return really be negated?");
+}
+
+void check_return_negative_var(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	my_id = id;
+	add_hook(&match_return, RETURN_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:07 2018
+++ new/usr/src/tools/smatch/src/check_rosenberg.c	Fri Dec 21 15:00:07 2018
@@ -0,0 +1,387 @@
+/*
+ * Copyright (C) 2011 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/* Does a search for Dan Rosenberg style info leaks */
+
+/* fixme: struct includes a struct with a hole in it */
+/* function is called that clears the struct */
+
+#include "scope.h"
+#include "smatch.h"
+#include "smatch_function_hashtable.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_whole_id;
+static int my_member_id;
+
+STATE(cleared);
+
+static void extra_mod_hook(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state)
+{
+	struct symbol *type;
+
+	type = get_real_base_type(sym);
+	if (!type || type->type != SYM_STRUCT)
+		return;
+
+	set_state(my_member_id, name, sym, state);
+}
+
+static void print_holey_warning(struct expression *data, const char *member)
+{
+	char *name;
+
+	name = expr_to_str(data);
+	if (member) {
+		sm_warning("check that '%s' doesn't leak information (struct has a hole after '%s')",
+		       name, member);
+	} else {
+		sm_warning("check that '%s' doesn't leak information (struct has holes)",
+		       name);
+	}
+	free_string(name);
+}
+
+static int check_struct(struct expression *expr, struct symbol *type)
+{
+	struct symbol *tmp, *base_type;
+	const char *prev = NULL;
+	int align;
+
+	if (type->ctype.alignment == 1)
+		return 0;
+
+	align = 0;
+	FOR_EACH_PTR(type->symbol_list, tmp) {
+		base_type = get_real_base_type(tmp);
+		if (base_type && base_type->type == SYM_STRUCT) {
+			if (check_struct(expr, base_type))
+				return 1;
+		}
+
+		if (!tmp->ctype.alignment) {
+			sm_perror("cannot determine the alignment here");
+		} else if (align % tmp->ctype.alignment) {
+			print_holey_warning(expr, prev);
+			return 1;
+		}
+
+		if (base_type == &bool_ctype)
+			align += 1;
+		else if (type_bits(tmp) <= 0)
+			align = 0;
+		else
+			align += type_bytes(tmp);
+
+		if (tmp->ident)
+			prev = tmp->ident->name;
+		else
+			prev = NULL;
+	} END_FOR_EACH_PTR(tmp);
+
+	if (align % type->ctype.alignment) {
+		print_holey_warning(expr, prev);
+		return 1;
+	}
+
+	return 0;
+}
+
+static int warn_on_holey_struct(struct expression *expr)
+{
+	struct symbol *type;
+	type = get_type(expr);
+	if (!type || type->type != SYM_STRUCT)
+		return 0;
+
+	return check_struct(expr, type);
+}
+
+static int has_global_scope(struct expression *expr)
+{
+	struct symbol *sym;
+
+	if (expr->type != EXPR_SYMBOL)
+		return FALSE;
+	sym = expr->symbol;
+	if (!sym)
+		return FALSE;
+	return toplevel(sym->scope);
+}
+
+static int was_initialized(struct expression *expr)
+{
+	struct symbol *sym;
+	char *name;
+
+	name = expr_to_var_sym(expr, &sym);
+	if (!name)
+		return 0;
+	if (sym->initializer)
+		return 1;
+	return 0;
+}
+
+static void match_clear(const char *fn, struct expression *expr, void *_arg_no)
+{
+	struct expression *ptr;
+	int arg_no = PTR_INT(_arg_no);
+
+	ptr = get_argument_from_call_expr(expr->args, arg_no);
+	if (!ptr)
+		return;
+	ptr = strip_expr(ptr);
+	if (ptr->type != EXPR_PREOP || ptr->op != '&')
+		return;
+	ptr = strip_expr(ptr->unop);
+	set_state_expr(my_whole_id, ptr, &cleared);
+}
+
+static int was_memset(struct expression *expr)
+{
+	if (get_state_expr(my_whole_id, expr) == &cleared)
+		return 1;
+	return 0;
+}
+
+static int member_initialized(char *name, struct symbol *outer, struct symbol *member, int pointer)
+{
+	char buf[256];
+	struct symbol *base;
+
+	base = get_base_type(member);
+	if (!base || base->type != SYM_BASETYPE || !member->ident)
+		return FALSE;
+
+	if (pointer)
+		snprintf(buf, 256, "%s->%s", name, member->ident->name);
+	else
+		snprintf(buf, 256, "%s.%s", name, member->ident->name);
+
+	if (get_state(my_member_id, buf, outer))
+		return TRUE;
+
+	return FALSE;
+}
+
+static int member_uninitialized(char *name, struct symbol *outer, struct symbol *member, int pointer)
+{
+	char buf[256];
+	struct symbol *base;
+	struct sm_state *sm;
+
+	base = get_base_type(member);
+	if (!base || base->type != SYM_BASETYPE || !member->ident)
+		return FALSE;
+
+	if (pointer)
+		snprintf(buf, 256, "%s->%s", name, member->ident->name);
+	else
+		snprintf(buf, 256, "%s.%s", name, member->ident->name);
+
+	sm = get_sm_state(my_member_id, buf, outer);
+	if (sm && !slist_has_state(sm->possible, &undefined))
+		return FALSE;
+
+	sm_warning("check that '%s' doesn't leak information", buf);
+	return TRUE;
+}
+
+static int check_members_initialized(struct expression *expr)
+{
+	char *name;
+	struct symbol *outer;
+	struct symbol *sym;
+	struct symbol *tmp;
+	int pointer = 0;
+	int printed = 0;
+
+	sym = get_type(expr);
+	if (sym && sym->type == SYM_PTR) {
+		pointer = 1;
+		sym = get_real_base_type(sym);
+	}
+	if (!sym)
+		return 0;
+	if (sym->type != SYM_STRUCT)
+		return 0;
+
+	name = expr_to_var_sym(expr, &outer);
+
+	/*
+	 * check that at least one member was set.  If all of them were not set
+	 * it's more likely a problem in the check than a problem in the kernel
+	 * code.
+	 */
+	FOR_EACH_PTR(sym->symbol_list, tmp) {
+		if (member_initialized(name, outer, tmp, pointer))
+			goto check;
+	} END_FOR_EACH_PTR(tmp);
+	goto out;
+
+check:
+	FOR_EACH_PTR(sym->symbol_list, tmp) {
+		if (member_uninitialized(name, outer, tmp, pointer)) {
+			printed = 1;
+			goto out;
+		}
+	} END_FOR_EACH_PTR(tmp);
+out:
+	free_string(name);
+	return printed;
+}
+
+static void check_was_initialized(struct expression *data)
+{
+	data = strip_expr(data);
+	if (!data)
+		return;
+	if (data->type == EXPR_PREOP && data->op == '&')
+		data = strip_expr(data->unop);
+	if (data->type != EXPR_SYMBOL)
+		return;
+
+	if (has_global_scope(data))
+		return;
+	if (was_initialized(data))
+		return;
+	if (was_memset(data))
+		return;
+	if (warn_on_holey_struct(data))
+		return;
+	check_members_initialized(data);
+}
+
+static void match_copy_to_user(const char *fn, struct expression *expr, void *_arg)
+{
+	int arg = PTR_INT(_arg);
+	struct expression *data;
+
+	data = get_argument_from_call_expr(expr->args, arg);
+	data = strip_expr(data);
+	if (!data)
+		return;
+	if (data->type != EXPR_PREOP || data->op != '&')
+		return;
+	check_was_initialized(data);
+}
+
+static void db_param_cleared(struct expression *expr, int param, char *key, char *value)
+{
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+	if (expr->type != EXPR_CALL)
+		return;
+
+	match_clear(NULL, expr, INT_PTR(param));
+}
+
+static void match_assign(struct expression *expr)
+{
+	struct symbol *type;
+
+	type = get_type(expr->left);
+	if (!type || type->type != SYM_STRUCT)
+		return;
+	set_state_expr(my_whole_id, expr->left, &cleared);
+}
+
+static void register_clears_argument(void)
+{
+	struct token *token;
+	const char *func;
+	int arg;
+
+	token = get_tokens_file("kernel.clears_argument");
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		func = show_ident(token->ident);
+		token = token->next;
+		if (token_type(token) != TOKEN_NUMBER)
+			return;
+		arg = atoi(token->number);
+
+		add_function_hook(func, &match_clear, INT_PTR(arg));
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+static void register_copy_funcs_from_file(void)
+{
+	struct token *token;
+	const char *func;
+	int arg;
+
+	token = get_tokens_file("kernel.rosenberg_funcs");
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		func = show_ident(token->ident);
+		token = token->next;
+		if (token_type(token) != TOKEN_NUMBER)
+			return;
+		arg = atoi(token->number);
+		add_function_hook(func, &match_copy_to_user, INT_PTR(arg));
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+void check_rosenberg(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+	my_whole_id = id;
+
+	add_function_hook("memset", &match_clear, INT_PTR(0));
+	add_function_hook("memcpy", &match_clear, INT_PTR(0));
+	add_function_hook("memzero", &match_clear, INT_PTR(0));
+	add_function_hook("__memset", &match_clear, INT_PTR(0));
+	add_function_hook("__memcpy", &match_clear, INT_PTR(0));
+	add_function_hook("__memzero", &match_clear, INT_PTR(0));
+	add_function_hook("__builtin_memset", &match_clear, INT_PTR(0));
+	add_function_hook("__builtin_memcpy", &match_clear, INT_PTR(0));
+
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+	register_clears_argument();
+	select_return_states_hook(PARAM_CLEARED, &db_param_cleared);
+
+	register_copy_funcs_from_file();
+}
+
+void check_rosenberg2(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	my_member_id = id;
+	add_extra_mod_hook(&extra_mod_hook);
+}
+
--- /dev/null	Fri Dec 21 15:00:07 2018
+++ new/usr/src/tools/smatch/src/check_select.c	Fri Dec 21 15:00:07 2018
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+static void match_select(struct expression *expr)
+{
+	if (expr->cond_true)
+		return;
+	expr = strip_expr(expr->conditional);
+	if (expr->type != EXPR_COMPARE)
+		return;
+	sm_warning("boolean comparison inside select");
+}
+
+void check_select(int id)
+{
+	my_id = id;
+	add_hook(&match_select, SELECT_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:08 2018
+++ new/usr/src/tools/smatch/src/check_shift_to_zero.c	Fri Dec 21 15:00:08 2018
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static void match_binop(struct expression *expr)
+{
+	struct symbol *type;
+	sval_t bits;
+
+	if (expr->op != SPECIAL_RIGHTSHIFT)
+		return;
+
+	if (!get_implied_value(expr->right, &bits))
+		return;
+
+	type = get_type(expr->left);
+	if (!type)
+		return;
+	if (type_bits(type) == -1 || type_bits(type) > bits.value)
+		return;
+	sm_warning("right shifting more than type allows %d vs %lld", type_bits(type), bits.value);
+}
+
+static void match_binop2(struct expression *expr)
+{
+	struct expression *left;
+	struct expression *tmp;
+	sval_t mask, shift;
+
+	if (expr->op != SPECIAL_RIGHTSHIFT)
+		return;
+
+	left = strip_expr(expr->left);
+	tmp = get_assigned_expr(left);
+	if (tmp)
+		left = tmp;
+	if (left->type != EXPR_BINOP || left->op != '&')
+		return;
+
+	if (!get_implied_value(expr->right, &shift))
+		return;
+	if (!get_implied_value(left->right, &mask))
+		return;
+
+	if (mask.uvalue >> shift.uvalue)
+		return;
+
+	sm_warning("mask and shift to zero");
+}
+
+static void match_assign(struct expression *expr)
+{
+	struct symbol *type;
+	sval_t bits;
+
+	if (expr->op != SPECIAL_SHR_ASSIGN)
+		return;
+
+	if (!get_implied_value(expr->right, &bits))
+		return;
+	type = get_type(expr->left);
+	if (!type)
+		return;
+	if (type_bits(type) > bits.value)
+		return;
+	sm_warning("right shift assign to zero");
+}
+
+void check_shift_to_zero(int id)
+{
+	my_id = id;
+
+	add_hook(&match_binop, BINOP_HOOK);
+	add_hook(&match_binop2, BINOP_HOOK);
+
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+
+}
--- /dev/null	Fri Dec 21 15:00:08 2018
+++ new/usr/src/tools/smatch/src/check_signed.c	Fri Dec 21 15:00:08 2018
@@ -0,0 +1,311 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Check for things which are signed but probably should be unsigned.
+ *
+ * Hm...  It seems like at this point in the processing, sparse makes all
+ * bitfields unsigned.  Which is logical but not what GCC does.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+#define VAR_ON_RIGHT 0
+#define VAR_ON_LEFT 1
+
+static void match_assign(struct expression *expr)
+{
+	struct symbol *sym;
+	sval_t sval;
+	sval_t max;
+	sval_t min;
+	char *left_name, *right_name;
+
+	if (__in_fake_assign)
+		return;
+	if (expr->op == SPECIAL_AND_ASSIGN || expr->op == SPECIAL_OR_ASSIGN)
+		return;
+
+	sym = get_type(expr->left);
+	if (!sym || sym->type != SYM_BASETYPE) {
+		//sm_msg("could not get type");
+		return;
+	}
+	if (type_bits(sym) < 0 || type_bits(sym) >= 32) /* max_val limits this */
+		return;
+	if (!get_implied_value(expr->right, &sval))
+		return;
+	max = sval_type_max(sym);
+	if (sym != &bool_ctype && sym != &uchar_ctype &&
+	    sval_cmp(max, sval) < 0 &&
+	    !(sval.value < 256 && max.value == 127)) {
+		left_name = expr_to_str(expr->left);
+		right_name = expr_to_str(expr->right);
+		sm_warning("'%s' %s can't fit into %s '%s'",
+		       right_name, sval_to_numstr(sval), sval_to_numstr(max), left_name);
+		free_string(left_name);
+	}
+	min = sval_type_min(sym);
+	if (sval_cmp_t(&llong_ctype, min, sval) > 0) {
+		if (min.value == 0 && sval.value == -1) /* assigning -1 to unsigned variables is idiomatic */
+			return;
+		if (expr->right->type == EXPR_PREOP && expr->right->op == '~')
+			return;
+		if (expr->op == SPECIAL_SUB_ASSIGN || expr->op == SPECIAL_ADD_ASSIGN)
+			return;
+		if (sval_positive_bits(sval) == 7)
+			return;
+		left_name = expr_to_str(expr->left);
+		if (min.value == 0) {
+			sm_warning("assigning %s to unsigned variable '%s'",
+			       sval_to_str(sval), left_name);
+		} else {
+			sm_warning("value %s can't fit into %s '%s'",
+			       sval_to_str(sval), sval_to_str(min), left_name);
+		}
+		free_string(left_name);
+	}
+}
+
+static int cap_gt_zero_and_lt(struct expression *expr)
+{
+
+	struct expression *var = expr->left;
+	struct expression *tmp;
+	char *name1 = NULL;
+	char *name2 = NULL;
+	sval_t known;
+	int ret = 0;
+	int i;
+
+	if (!get_value(expr->right, &known) || known.value != 0)
+		return 0;
+
+	i = 0;
+	FOR_EACH_PTR_REVERSE(big_expression_stack, tmp) {
+		if (!i++)
+			continue;
+		if (tmp->op == SPECIAL_LOGICAL_AND) {
+			struct expression *right = strip_expr(tmp->right);
+
+			if (right->op != '<' &&
+			    right->op != SPECIAL_UNSIGNED_LT &&
+			    right->op != SPECIAL_LTE &&
+			    right->op != SPECIAL_UNSIGNED_LTE)
+				return 0;
+
+			name1 = expr_to_str(var);
+			if (!name1)
+				goto free;
+
+			name2 = expr_to_str(right->left);
+			if (!name2)
+				goto free;
+			if (!strcmp(name1, name2))
+				ret = 1;
+			goto free;
+
+		}
+		return 0;
+	} END_FOR_EACH_PTR_REVERSE(tmp);
+
+free:
+	free_string(name1);
+	free_string(name2);
+	return ret;
+}
+
+static int cap_lt_zero_or_gt(struct expression *expr)
+{
+
+	struct expression *var = expr->left;
+	struct expression *tmp;
+	char *name1 = NULL;
+	char *name2 = NULL;
+	sval_t known;
+	int ret = 0;
+	int i;
+
+	if (!get_value(expr->right, &known) || known.value != 0)
+		return 0;
+
+	i = 0;
+	FOR_EACH_PTR_REVERSE(big_expression_stack, tmp) {
+		if (!i++)
+			continue;
+		if (tmp->op == SPECIAL_LOGICAL_OR) {
+			struct expression *right = strip_expr(tmp->right);
+
+			if (right->op != '>' &&
+			    right->op != SPECIAL_UNSIGNED_GT &&
+			    right->op != SPECIAL_GTE &&
+			    right->op != SPECIAL_UNSIGNED_GTE)
+				return 0;
+
+			name1 = expr_to_str(var);
+			if (!name1)
+				goto free;
+
+			name2 = expr_to_str(right->left);
+			if (!name2)
+				goto free;
+			if (!strcmp(name1, name2))
+				ret = 1;
+			goto free;
+
+		}
+		return 0;
+	} END_FOR_EACH_PTR_REVERSE(tmp);
+
+free:
+	free_string(name1);
+	free_string(name2);
+	return ret;
+}
+
+static int cap_both_sides(struct expression *expr)
+{
+	switch (expr->op) {
+	case '<':
+	case SPECIAL_UNSIGNED_LT:
+	case SPECIAL_LTE:
+	case SPECIAL_UNSIGNED_LTE:
+		return cap_lt_zero_or_gt(expr);
+	case '>':
+	case SPECIAL_UNSIGNED_GT:
+	case SPECIAL_GTE:
+	case SPECIAL_UNSIGNED_GTE:
+		return cap_gt_zero_and_lt(expr);
+	}
+	return 0;
+}
+
+static int compare_against_macro(struct expression *expr)
+{
+	sval_t known;
+
+	if (expr->op != SPECIAL_UNSIGNED_LT)
+		return 0;
+
+	if (!get_value(expr->right, &known) || known.value != 0)
+		return 0;
+	return !!get_macro_name(expr->right->pos);
+}
+
+static int print_unsigned_never_less_than_zero(struct expression *expr)
+{
+	sval_t known;
+	char *name;
+
+	if (expr->op != SPECIAL_UNSIGNED_LT)
+		return 0;
+
+	if (!get_value(expr->right, &known) || known.value != 0)
+		return 0;
+
+	name = expr_to_str(expr->left);
+	sm_warning("unsigned '%s' is never less than zero.", name);
+	free_string(name);
+	return 1;
+}
+
+static void match_condition(struct expression *expr)
+{
+	struct symbol *type;
+	sval_t known;
+	sval_t min, max;
+	struct range_list *rl_left_orig, *rl_right_orig;
+	struct range_list *rl_left, *rl_right;
+
+	if (expr->type != EXPR_COMPARE)
+		return;
+
+	type = get_type(expr);
+	if (!type)
+		return;
+
+	/* screw it.  I am writing this to mark yoda code as buggy.
+	 * Valid comparisons between an unsigned and zero are:
+	 * 1) inside a macro.
+	 * 2) foo < LOWER_BOUND where LOWER_BOUND is a macro.
+	 * 3) foo < 0 || foo > X in exactly this format.  No Yoda.
+	 * 4) foo >= 0 && foo < X
+	 */
+	if (get_macro_name(expr->pos))
+		return;
+	if (compare_against_macro(expr))
+		return;
+	if (cap_both_sides(expr))
+		return;
+
+	/* This is a special case for the common error */
+	if (print_unsigned_never_less_than_zero(expr))
+		return;
+
+	/* check that one and only one side is known */
+	if (get_value(expr->left, &known)) {
+		if (get_value(expr->right, &known))
+			return;
+		rl_left_orig = alloc_rl(known, known);
+		rl_left = cast_rl(type, rl_left_orig);
+
+		min = sval_type_min(get_type(expr->right));
+		max = sval_type_max(get_type(expr->right));
+		rl_right_orig = alloc_rl(min, max);
+		rl_right = cast_rl(type, rl_right_orig);
+	} else if (get_value(expr->right, &known)) {
+		rl_right_orig = alloc_rl(known, known);
+		rl_right = cast_rl(type, rl_right_orig);
+
+		min = sval_type_min(get_type(expr->left));
+		max = sval_type_max(get_type(expr->left));
+		rl_left_orig = alloc_rl(min, max);
+		rl_left = cast_rl(type, rl_left_orig);
+	} else {
+		return;
+	}
+
+	if (!possibly_true_rl(rl_left, expr->op, rl_right)) {
+		char *name = expr_to_str(expr);
+
+		sm_warning("impossible condition '(%s) => (%s %s %s)'", name,
+		       show_rl(rl_left), show_special(expr->op),
+		       show_rl(rl_right));
+		free_string(name);
+	}
+
+	if (!possibly_false_rl(rl_left, expr->op, rl_right)) {
+		char *name = expr_to_str(expr);
+
+		sm_warning("always true condition '(%s) => (%s %s %s)'", name,
+		       show_rl(rl_left_orig), show_special(expr->op),
+		       show_rl(rl_right_orig));
+		free_string(name);
+	}
+}
+
+void check_signed(int id)
+{
+	my_id = id;
+
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+	add_hook(&match_condition, CONDITION_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:08 2018
+++ new/usr/src/tools/smatch/src/check_signed_integer_overflow_check.c	Fri Dec 21 15:00:08 2018
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Looks for integers that we get from the user which can be attacked
+ * with an integer overflow.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+static void match_condition(struct expression *expr)
+{
+	struct expression *left, *right;
+	struct symbol *type;
+	char *right_name;
+	char *left_name;
+
+	if (expr->type != EXPR_COMPARE)
+		return;
+	if (expr->op != '<')
+		return;
+
+	type = get_type(expr);
+	if (!type_signed(type))
+		return;
+
+	left = strip_expr(expr->left);
+	right = strip_expr(expr->right);
+
+	if (left->type != EXPR_BINOP) {
+		left = get_assigned_expr(left);
+		left = strip_expr(left);
+		if (!left || left->type != EXPR_BINOP)
+			return;
+	}
+
+	if (left->op != '+' && left->op != '*' && left->op != SPECIAL_LEFTSHIFT)
+		return;
+
+	if (has_variable(left, right) == 1) {
+		left_name = expr_to_str(left);
+		right_name = expr_to_str(right);
+		sm_warning("signed overflow undefined. '%s %s %s'", left_name, show_special(expr->op), right_name);
+		free_string(left_name);
+		free_string(right_name);
+	}
+}
+
+static void match_binop(struct expression *expr)
+{
+	sval_t left_val, right_min;
+	char *str;
+
+	if (expr->op != '-')
+		return;
+
+	if (!get_value(expr->left, &left_val))
+		return;
+
+	switch (left_val.uvalue) {
+	case SHRT_MAX:
+	case USHRT_MAX:
+	case INT_MAX:
+	case UINT_MAX:
+	case LLONG_MAX:
+	case ULLONG_MAX:
+		break;
+	default:
+		return;
+	}
+
+	get_absolute_min(expr->right, &right_min);
+	if (!sval_is_negative(right_min))
+		return;
+
+	str = expr_to_str(expr);
+	sm_warning("potential negative subtraction from max '%s'", str);
+	free_string(str);
+}
+
+void check_signed_integer_overflow_check(int id)
+{
+	my_id = id;
+
+	if (option_project == PROJ_KERNEL) {
+		/* The kernel uses -fno-strict-overflow so it's fine */
+		return;
+	}
+
+	add_hook(&match_condition, CONDITION_HOOK);
+	add_hook(&match_binop, BINOP_HOOK);
+}
+
--- /dev/null	Fri Dec 21 15:00:08 2018
+++ new/usr/src/tools/smatch/src/check_sizeof.c	Fri Dec 21 15:00:08 2018
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static void check_pointer(struct expression *expr, char *ptr_name)
+{
+	char *name;
+	sval_t sval;
+
+	if (!expr || expr->type != EXPR_SIZEOF)
+		return;
+
+	get_value(expr, &sval);
+
+	expr = strip_expr(expr->cast_expression);
+	name = expr_to_str(expr);
+	if (!name)
+		return;
+
+	if (strcmp(ptr_name, name) == 0)
+		sm_warning("was 'sizeof(*%s)' intended?", ptr_name);
+	free_string(name);
+}
+
+static void match_call_assignment(struct expression *expr)
+{
+	struct expression *call = strip_expr(expr->right);
+	struct expression *arg;
+	char *ptr_name;
+
+	if (!is_pointer(expr->left))
+		return;
+
+	ptr_name = expr_to_str(expr->left);
+	if (!ptr_name)
+		return;
+
+	FOR_EACH_PTR(call->args, arg) {
+		check_pointer(arg, ptr_name);
+	} END_FOR_EACH_PTR(arg);
+
+	free_string(ptr_name);
+}
+
+static void check_passes_pointer(char *name, struct expression *call)
+{
+	struct expression *arg;
+	char *ptr_name;
+
+	FOR_EACH_PTR(call->args, arg) {
+		ptr_name = expr_to_var(arg);
+		if (!ptr_name)
+			continue;
+		if (strcmp(name, ptr_name) == 0)
+			sm_warning("was 'sizeof(*%s)' intended?", name);
+		free_string(ptr_name);
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void match_check_params(struct expression *call)
+{
+	struct expression *arg;
+	struct expression *obj;
+	char *name;
+
+	FOR_EACH_PTR(call->args, arg) {
+		if (arg->type != EXPR_SIZEOF)
+			continue;
+		obj = strip_expr(arg->cast_expression);
+		if (!is_pointer(obj))
+			continue;
+		name = expr_to_var(obj);
+		if (!name)
+			continue;
+		check_passes_pointer(name, call);
+		free_string(name);
+	} END_FOR_EACH_PTR(arg);
+}
+
+static struct string_list *macro_takes_sizeof_argument;
+static void check_sizeof_number(struct expression *expr)
+{
+	char *macro, *tmp;
+
+	if (expr->type != EXPR_VALUE)
+		return;
+	macro = get_macro_name(expr->pos);
+	FOR_EACH_PTR(macro_takes_sizeof_argument, tmp) {
+		if (macro && strcmp(tmp, macro) == 0)
+			return;
+	} END_FOR_EACH_PTR(tmp);
+
+	sm_warning("sizeof(NUMBER)?");
+}
+
+static void match_sizeof(struct expression *expr)
+{
+	check_sizeof_number(expr);
+	if (expr->type == EXPR_PREOP && expr->op == '&')
+		sm_warning("sizeof(&pointer)?");
+	if (expr->type == EXPR_SIZEOF)
+		sm_warning("sizeof(sizeof())?");
+	/* the ilog2() macro is a valid place to check the size of a binop */
+	if (expr->type == EXPR_BINOP && !get_macro_name(expr->pos))
+		sm_warning("taking sizeof binop");
+}
+
+static void register_macro_takes_sizeof_argument(void)
+{
+	struct token *token;
+	char *macro;
+	char name[256];
+
+	snprintf(name, 256, "%s.macro_takes_sizeof_argument", option_project_str);
+
+	token = get_tokens_file(name);
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		macro = alloc_string(show_ident(token->ident));
+		add_ptr_list(&macro_takes_sizeof_argument, macro);
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+void check_sizeof(int id)
+{
+	my_id = id;
+
+	register_macro_takes_sizeof_argument();
+	add_hook(&match_call_assignment, CALL_ASSIGNMENT_HOOK);
+	add_hook(&match_check_params, FUNCTION_CALL_HOOK);
+	add_hook(&match_sizeof, SIZEOF_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:08 2018
+++ new/usr/src/tools/smatch/src/check_snprintf.c	Fri Dec 21 15:00:08 2018
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+static void ok_to_use(struct sm_state *sm, struct expression *mod_expr)
+{
+	set_state(my_id, sm->name, sm->sym, &undefined);
+}
+
+static void match_snprintf(const char *fn, struct expression *expr, void *info)
+{
+	struct expression *call;
+	struct expression *arg;
+	sval_t buflen;
+
+	call = strip_expr(expr->right);
+	arg = get_argument_from_call_expr(call->args, 1);
+	if (!get_fuzzy_max(arg, &buflen))
+		return;
+	set_state_expr(my_id, expr->left, alloc_state_num(buflen.value));
+}
+
+static int get_old_buflen(struct sm_state *sm)
+{
+	struct sm_state *tmp;
+	int ret = 0;
+
+	FOR_EACH_PTR(sm->possible, tmp) {
+		if (PTR_INT(tmp->state->data) > ret)
+			ret = PTR_INT(tmp->state->data);
+	} END_FOR_EACH_PTR(tmp);
+	return ret;
+}
+
+static void match_call(struct expression *expr)
+{
+	struct expression *arg;
+	struct sm_state *sm;
+	int old_buflen;
+	sval_t max;
+
+	FOR_EACH_PTR(expr->args, arg) {
+		sm = get_sm_state_expr(my_id, arg);
+		if (!sm)
+			continue;
+		old_buflen = get_old_buflen(sm);
+		if (!old_buflen)
+			return;
+		if (get_absolute_max(arg, &max) && sval_cmp_val(max, old_buflen) > 0)
+			sm_warning("'%s' returned from snprintf() might be larger than %d",
+				sm->name, old_buflen);
+	} END_FOR_EACH_PTR(arg);
+}
+
+void check_snprintf(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+	if (!option_spammy)
+		return;
+
+	my_id = id;
+	add_hook(&match_call, FUNCTION_CALL_HOOK);
+	add_function_assign_hook("snprintf", &match_snprintf, NULL);
+	add_modification_hook(my_id, &ok_to_use);
+}
+
--- /dev/null	Fri Dec 21 15:00:08 2018
+++ new/usr/src/tools/smatch/src/check_snprintf_overflow.c	Fri Dec 21 15:00:08 2018
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static void match_snprintf(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *dest;
+	struct expression *dest_size_expr;
+	struct expression *format_string;
+	struct expression *data;
+	char *data_name = NULL;
+	int dest_size;
+	sval_t limit_size;
+	char *format;
+	int data_size;
+
+	dest = get_argument_from_call_expr(expr->args, 0);
+	dest_size_expr = get_argument_from_call_expr(expr->args, 1);
+	format_string = get_argument_from_call_expr(expr->args, 2);
+	data = get_argument_from_call_expr(expr->args, 3);
+
+	dest_size = get_array_size_bytes(dest);
+	if (!get_implied_value(dest_size_expr, &limit_size))
+		return;
+	if (dest_size > 1 && dest_size < limit_size.value)
+		sm_error("snprintf() is printing too much %s vs %d",
+			 sval_to_str(limit_size), dest_size);
+	format = expr_to_var(format_string);
+	if (!format)
+		return;
+	if (strcmp(format, "\"%s\""))
+		goto free;
+	data_name = expr_to_str(data);
+	data_size = get_size_from_strlen(data);
+	if (!data_size)
+		data_size = get_array_size_bytes(data);
+	if (limit_size.value < data_size)
+		sm_error("snprintf() chops off the last chars of '%s': %d vs %s",
+		       data_name, data_size, sval_to_str(limit_size));
+free:
+	free_string(data_name);
+	free_string(format);
+}
+
+void check_snprintf_overflow(int id)
+{
+	add_function_hook("snprintf", &match_snprintf, NULL);
+}
--- /dev/null	Fri Dec 21 15:00:08 2018
+++ new/usr/src/tools/smatch/src/check_spectre.c	Fri Dec 21 15:00:08 2018
@@ -0,0 +1,210 @@
+/*
+ * Copyright (C) 2018 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+static int suppress_multiple = 1;
+
+static int is_write(struct expression *expr)
+{
+	return 0;
+}
+
+static int is_read(struct expression *expr)
+{
+	struct expression *parent, *last_parent;
+	struct statement *stmt;
+
+	if (is_write(expr))
+		return 0;
+
+	last_parent = expr;
+	while ((parent = expr_get_parent_expr(expr))){
+
+		last_parent = parent;
+
+		/* If we pass a value as a parameter that's a read, probably? */
+//		if (parent->type == EXPR_CALL)
+//			return 1;
+
+		if (parent->type == EXPR_ASSIGNMENT) {
+			if (parent->right == expr)
+				return 1;
+			if (parent->left == expr)
+				return 0;
+		}
+		expr = parent;
+	}
+
+	stmt = expr_get_parent_stmt(last_parent);
+	if (stmt && stmt->type == STMT_RETURN)
+		return 1;
+
+	return 0;
+}
+
+static int is_harmless(struct expression *expr)
+{
+	struct expression *tmp, *parent;
+	struct statement *stmt;
+	int count = 0;
+
+	parent = expr;
+	while ((tmp = expr_get_parent_expr(parent))) {
+		if (tmp->type == EXPR_ASSIGNMENT || tmp->type == EXPR_CALL)
+			return 0;
+		parent = tmp;
+		if (count++ > 4)
+			break;
+	}
+
+	stmt = expr_get_parent_stmt(parent);
+	if (!stmt)
+		return 0;
+	if (stmt->type == STMT_IF && stmt->if_conditional == parent)
+		return 1;
+	if (stmt->type == STMT_ITERATOR &&
+	    (stmt->iterator_pre_condition == parent ||
+	     stmt->iterator_post_condition == parent))
+		return 1;
+
+	return 0;
+}
+
+static unsigned long long get_max_by_type(struct expression *expr)
+{
+	struct symbol *type;
+	int cnt = 0;
+	sval_t max;
+
+	max.type = &ullong_ctype;
+	max.uvalue = -1ULL;
+
+	while (true) {
+		expr = strip_parens(expr);
+		type = get_type(expr);
+		if (type && sval_type_max(type).uvalue < max.uvalue)
+			max = sval_type_max(type);
+		if (expr->type == EXPR_PREOP) {
+			expr = expr->unop;
+		} else if (expr->type == EXPR_BINOP) {
+			if (expr->op == '%' || expr->op == '&')
+				expr = expr->right;
+			else
+				return max.uvalue;
+		} else {
+			expr = get_assigned_expr(expr);
+			if (!expr)
+				return max.uvalue;
+		}
+		if (cnt++ > 5)
+			return max.uvalue;
+	}
+
+	return max.uvalue;
+}
+
+static unsigned long long get_mask(struct expression *expr)
+{
+	struct expression *tmp;
+	sval_t mask;
+	int cnt = 0;
+
+	expr = strip_expr(expr);
+
+	tmp = get_assigned_expr(expr);
+	while (tmp) {
+		expr = tmp;
+		if (++cnt > 3)
+			break;
+		tmp = get_assigned_expr(expr);
+	}
+
+	if (expr->type == EXPR_BINOP && expr->op == '&') {
+		if (get_value(expr->right, &mask))  /* right is the common case */
+			return mask.uvalue;
+		if (get_value(expr->left, &mask))
+			return mask.uvalue;
+	}
+
+	return ULLONG_MAX;
+}
+
+static void array_check(struct expression *expr)
+{
+	struct expression_list *conditions;
+	struct expression *array_expr, *offset;
+	unsigned long long mask;
+	int array_size;
+	char *name;
+
+	expr = strip_expr(expr);
+	if (!is_array(expr))
+		return;
+
+	if (is_impossible_path())
+		return;
+	if (is_harmless(expr))
+		return;
+
+	array_expr = get_array_base(expr);
+	if (suppress_multiple && is_ignored_expr(my_id, array_expr))
+		return;
+
+	offset = get_array_offset(expr);
+	if (!is_user_rl(offset))
+		return;
+	if (is_nospec(offset))
+		return;
+
+	array_size = get_array_size(array_expr);
+	if (array_size > 0 && get_max_by_type(offset) < array_size)
+		return;
+//	binfo = get_bit_info(offset);
+//	if (array_size > 0 && binfo && binfo->possible < array_size)
+//		return;
+
+	mask = get_mask(offset);
+	if (mask <= array_size)
+		return;
+
+	conditions = get_conditions(offset);
+
+	name = expr_to_str(array_expr);
+	sm_warning("potential spectre issue '%s' [%s]%s",
+	       name,
+	       is_read(expr) ? "r" : "w",
+	       conditions ? " (local cap)" : "");
+	if (suppress_multiple)
+		add_ignore_expr(my_id, array_expr);
+	free_string(name);
+}
+
+void check_spectre(int id)
+{
+	my_id = id;
+
+	suppress_multiple = getenv("FULL_SPECTRE") == NULL;
+
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	add_hook(&array_check, OP_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:08 2018
+++ new/usr/src/tools/smatch/src/check_sprintf_overflow.c	Fri Dec 21 15:00:08 2018
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static void match_sprintf(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *dest;
+	struct expression *format_string;
+	struct expression *data;
+	char *data_name = NULL;
+	int dest_size;
+	char *format;
+	int data_size;
+
+	dest = get_argument_from_call_expr(expr->args, 0);
+	format_string = get_argument_from_call_expr(expr->args, 1);
+	data = get_argument_from_call_expr(expr->args, 2);
+
+	dest_size = get_array_size_bytes(dest);
+	if (!dest_size)
+		return;
+	format = expr_to_var(format_string);
+	if (!format)
+		return;
+	if (strcmp(format, "\"%s\""))
+		goto free;
+	data_name = expr_to_str(data);
+	data_size = get_size_from_strlen(data);
+	if (!data_size)
+		data_size = get_array_size_bytes(data);
+	if (dest_size < data_size)
+		sm_error("sprintf() copies too much data from '%s': %d vs %d",
+		       data_name, data_size, dest_size);
+free:
+	free_string(data_name);
+	free_string(format);
+}
+
+void check_sprintf_overflow(int id)
+{
+	add_function_hook("sprintf", &match_sprintf, NULL);
+}
--- /dev/null	Fri Dec 21 15:00:08 2018
+++ new/usr/src/tools/smatch/src/check_stack.c	Fri Dec 21 15:00:08 2018
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * The kernel has a small stack so putting huge structs and arrays on the
+ * stack is a bug.
+ *
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static int total_size;
+static int max_size;
+static int max_lineno;
+static int complained;
+
+#define MAX_ALLOWED 1000
+
+static void scope_end(void *_size)
+{
+	int size = PTR_INT(_size);
+	total_size -= size;
+}
+
+static void match_declarations(struct symbol *sym)
+{
+	struct symbol *base;
+	const char *name;
+
+	base = get_base_type(sym);
+	if (sym->ctype.modifiers & MOD_STATIC)
+		return;
+	name = sym->ident->name;
+	total_size += type_bytes(base);
+	if (total_size > max_size) {
+		max_size = total_size;
+		max_lineno = get_lineno();
+	}
+	if (type_bytes(base) >= MAX_ALLOWED) {
+		complained = 1;
+		sm_warning("'%s' puts %d bytes on stack", name, type_bytes(base));
+	}
+	add_scope_hook(&scope_end, INT_PTR(type_bytes(base))); 
+}
+
+static void match_end_func(struct symbol *sym)
+{
+	if (__inline_fn)
+		return;
+
+	if ((max_size >= MAX_ALLOWED) && !complained) {
+		sm_printf("%s:%d %s() ", get_filename(), max_lineno, get_function());
+		sm_printf("warn: function puts %d bytes on stack\n", max_size);
+	}
+	total_size = 0;
+	complained = 0;
+	max_size = 0;
+	max_lineno = 0;
+}
+
+void check_stack(int id)
+{
+	if (option_project != PROJ_KERNEL || !option_spammy)
+		return;
+
+	my_id = id;
+	add_hook(&match_declarations, DECLARATION_HOOK);
+	add_hook(&match_end_func, END_FUNC_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:08 2018
+++ new/usr/src/tools/smatch/src/check_strcpy_overflow.c	Fri Dec 21 15:00:08 2018
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static void match_strcpy(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *dest;
+	struct expression *data;
+	char *dest_name = NULL;
+	char *data_name = NULL;
+	int dest_size;
+	int data_size;
+
+	dest = get_argument_from_call_expr(expr->args, 0);
+	data = get_argument_from_call_expr(expr->args, 1);
+	dest_size = get_array_size_bytes(dest);
+	if (!dest_size)
+		return;
+
+	data_size = get_size_from_strlen(data);
+	if (!data_size)
+		data_size = get_array_size_bytes(data);
+
+	/* If the size of both arrays is known and the destination
+	 * buffer is larger than the source buffer, we're okay.
+	 */
+	if (data_size && dest_size >= data_size)
+		return;
+
+	dest_name = expr_to_str(dest);
+	data_name = expr_to_str(data);
+
+	if (data_size)
+		sm_error("%s() '%s' too large for '%s' (%d vs %d)",
+			fn, data_name, dest_name, data_size, dest_size);
+	else if (option_spammy)
+		sm_warning("%s() '%s' of unknown size might be too large for '%s'",
+			fn, data_name, dest_name);
+
+	free_string(dest_name);
+	free_string(data_name);
+}
+
+void check_strcpy_overflow(int id)
+{
+	add_function_hook("strcpy", &match_strcpy, NULL);
+}
--- /dev/null	Fri Dec 21 15:00:08 2018
+++ new/usr/src/tools/smatch/src/check_string_len.c	Fri Dec 21 15:00:08 2018
@@ -0,0 +1,251 @@
+/*
+ * Copyright (C) 2013 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This tries to find buffer overflows in sprintf().
+ * I'll freely admit that the code is sort of crap.
+ * Also if it sees "sprintf("%2d\n", x)" then it assumes x is less than 99.
+ * That might not be true so there maybe buffer overflows which are missed.
+ *
+ */
+
+#include <ctype.h>
+#include "smatch.h"
+
+static int my_id;
+
+struct param_info {
+	int buf_or_limit;
+	int string;
+};
+
+struct param_info zero_one = {0, 1};
+
+static int handle_format(struct expression *call, char **pp, int *arg_nr)
+{
+	struct expression *arg;
+	char *p = *pp;
+	int ret = 1;
+	char buf[256];
+	sval_t max;
+
+	p++;  /* we passed it with *p == '%' */
+
+	if (*p == '%') {
+		p++;
+		ret = 1;
+		goto out_no_arg;
+	}
+	if (*p == 'c') {
+		p++;
+		ret = 1;
+		goto out;
+	}
+
+
+	if (isdigit(*p) || *p == '.') {
+		unsigned long num;
+
+		if (*p == '.')
+			p++;
+
+		num = strtoul(p, &p, 10);
+		ret = num;
+
+		while (*p == 'l')
+			p++;
+		p++; /* eat the 'd' char */
+		goto out;
+	}
+
+	if (*p == 'l') {
+		p++;
+		if (*p == 'l')
+			p++;
+	}
+
+	if (option_project == PROJ_KERNEL && *p == 'z')
+		p++;
+
+	if (option_project == PROJ_KERNEL && *p == 'p') {
+		if (*(p + 1) == 'I' || *(p + 1) == 'i') {
+			char *eye;
+
+			eye = p + 1;
+			p += 2;
+			if (*p == 'h' || *p == 'n' || *p == 'b' || *p == 'l')
+				p++;
+			if (*p == '4') {
+				p++;
+				ret = 15;
+				goto out;
+			}
+			if (*p == '6') {
+				p++;
+				if (*p == 'c')
+					p++;
+				if (*eye == 'I')
+					ret = 39;
+				if (*eye == 'i')
+					ret = 32;
+				goto out;
+			}
+		}
+		if (*(p + 1) == 'M') {
+			p += 2;
+			if (*p == 'R' || *p == 'F')
+				p++;
+			ret = 17;
+			goto out;
+		}
+		if (*(p + 1) == 'm') {
+			p += 2;
+			if (*p == 'R')
+				p++;
+			ret = 12;
+			goto out;
+		}
+	}
+
+	arg = get_argument_from_call_expr(call->args, *arg_nr);
+	if (!arg)
+		goto out;
+
+	if (*p == 's') {
+		ret = get_array_size_bytes(arg);
+		if (ret < 0)
+			ret = 1;
+		/* we don't print the NUL here */
+		ret--;
+		p++;
+		goto out;
+	}
+
+	if (*p != 'd' && *p != 'i' && *p != 'x' && *p != 'X' && *p != 'u' && *p != 'p') {
+		ret = 1;
+		p++;
+		goto out;
+	}
+
+	get_absolute_max(arg, &max);
+
+	if (*p == 'x' || *p == 'X' || *p == 'p') {
+		ret = snprintf(buf, sizeof(buf), "%llx", max.uvalue);
+	} else if (*p == 'u') {
+		ret = snprintf(buf, sizeof(buf), "%llu", max.uvalue);
+	} else if (!expr_unsigned(arg)) {
+		sval_t min;
+		int tmp;
+
+		ret = snprintf(buf, sizeof(buf), "%lld", max.value);
+		get_absolute_min(arg, &min);
+		tmp = snprintf(buf, sizeof(buf), "%lld", min.value);
+		if (tmp > ret)
+			ret = tmp;
+	} else {
+		ret = snprintf(buf, sizeof(buf), "%lld", max.value);
+	}
+	p++;
+
+out:
+	(*arg_nr)++;
+out_no_arg:
+	*pp = p;
+	return ret;
+}
+
+int get_formatted_string_size(struct expression *call, int arg)
+{
+	struct expression *expr;
+	char *p;
+	int count;
+
+	expr = get_argument_from_call_expr(call->args, arg);
+	if (!expr || expr->type != EXPR_STRING)
+		return -1;
+
+	arg++;
+	count = 0;
+	p = expr->string->data;
+	while (*p) {
+
+		if (*p == '%') {
+			count += handle_format(call, &p, &arg);
+		} else if (*p == '\\') {
+			p++;
+		}else {
+			p++;
+			count++;
+		}
+	}
+
+	count++; /* count the NUL terminator */
+	return count;
+}
+
+static void match_not_limited(const char *fn, struct expression *call, void *info)
+{
+	struct param_info *params = info;
+	struct range_list *rl;
+	struct expression *dest;
+	struct expression *arg;
+	int buf_size, size;
+	int user = 0;
+	int i;
+	int offset = 0;
+
+	dest = get_argument_from_call_expr(call->args, params->buf_or_limit);
+	dest = strip_expr(dest);
+	if (dest->type == EXPR_BINOP && dest->op == '+') {
+		sval_t max;
+
+		if (get_hard_max(dest->right, &max))
+			offset = max.value;
+		dest = dest->left;
+	}
+
+
+	buf_size = get_array_size_bytes(dest);
+	if (buf_size <= 0)
+		return;
+
+	size = get_formatted_string_size(call, params->string);
+	if (size <= 0)
+		return;
+	if (size < offset)
+		size -= offset;
+	if (size <= buf_size)
+		return;
+
+	i = 0;
+	FOR_EACH_PTR(call->args, arg) {
+		if (i++ <= params->string)
+			continue;
+		if (get_user_rl(arg, &rl))
+			user = 1;
+	} END_FOR_EACH_PTR(arg);
+
+	sm_error("format string overflow. buf_size: %d length: %d%s",
+	       buf_size, size, user ? " [user data]": "");
+}
+
+void check_string_len(int id)
+{
+	my_id = id;
+	add_function_hook("sprintf", &match_not_limited, &zero_one);
+}
+
--- /dev/null	Fri Dec 21 15:00:08 2018
+++ new/usr/src/tools/smatch/src/check_struct_type.c	Fri Dec 21 15:00:08 2018
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2013 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static void match_assign(const char *fn, struct expression *expr, void *_size_arg)
+{
+	int size_arg = PTR_INT(_size_arg);
+	struct expression *left;
+	struct expression *call;
+	struct expression *arg;
+	struct symbol *left_type;
+	struct symbol *size_type;
+
+	left = strip_expr(expr->left);
+	left_type = get_type(left);
+	if (!left_type || left_type->type != SYM_PTR)
+		return;
+	left_type = get_real_base_type(left_type);
+	if (!left_type || left_type->type != SYM_STRUCT)
+		return;
+
+	call = strip_expr(expr->right);
+	arg = get_argument_from_call_expr(call->args, size_arg);
+	if (!arg || arg->type != EXPR_SIZEOF || !arg->cast_type)
+		return;
+	size_type = arg->cast_type;
+	if (size_type->type != SYM_NODE)
+		return;
+	size_type = get_real_base_type(size_type);
+	if (size_type->type != SYM_STRUCT)
+		return;
+	if (strcmp(left_type->ident->name, size_type->ident->name) == 0)
+		return;
+	sm_warning("struct type mismatch '%s vs %s'", left_type->ident->name,
+	       size_type->ident->name);
+
+}
+
+void check_struct_type(int id)
+{
+	my_id = id;
+
+	if (option_project == PROJ_KERNEL) {
+		add_function_assign_hook("kmalloc", &match_assign, INT_PTR(0));
+		add_function_assign_hook("kzalloc", &match_assign, INT_PTR(0));
+	}
+}
--- /dev/null	Fri Dec 21 15:00:08 2018
+++ new/usr/src/tools/smatch/src/check_syscall_arg_type.c	Fri Dec 21 15:00:08 2018
@@ -0,0 +1,168 @@
+/*
+ * Copyright (C) 2017 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This is to help create Trinity fuzzer templates.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+STATE(ARG_FD);
+#if 0
+STATE(arg_range);
+STATE(arg_op);
+STATE(arg_list);
+STATE(arg_cpu);
+STATE(arg_pathname);
+#endif
+// nr_segs * sizeof(struct iovec)
+// if (nr_segs > UIO_MAXIOV)
+#if 0
+STATE(arg_ioveclen);
+STATE(arg_sockaddrlen);
+STATE(arg_socketinfo);
+#endif
+
+struct smatch_state *merge_states(struct smatch_state *s1, struct smatch_state *s2)
+{
+	if (s1 == &undefined)
+		return s2;
+	return s1;
+}
+
+struct typedef_lookup {
+	const char *name;
+	struct symbol *sym;
+	int failed;
+};
+
+static struct symbol *_typedef_lookup(const char *name)
+{
+	struct ident *id;
+	struct symbol *node;
+
+	id = built_in_ident(name);
+	if (!id)
+		return NULL;
+	node = lookup_symbol(id, NS_TYPEDEF);
+	if (!node || node->type != SYM_NODE)
+		return NULL;
+	return get_real_base_type(node);
+}
+
+static void typedef_lookup(struct typedef_lookup *tl)
+{
+	if (tl->sym || tl->failed)
+		return;
+	tl->sym = _typedef_lookup(tl->name);
+	if (!tl->sym)
+		tl->failed = 1;
+}
+
+static int is_mode_t(struct symbol *sym)
+{
+	static struct typedef_lookup umode_t = { .name = "umode_t" };
+	struct symbol *type;
+
+	typedef_lookup(&umode_t);
+	if (!umode_t.sym)
+		return 0;
+	type = get_base_type(sym);
+	if (type == umode_t.sym)
+		return 1;
+	return 0;
+}
+
+static int is_pid_t(struct symbol *sym)
+{
+	static struct typedef_lookup pid_t = { .name = "pid_t" };
+	struct symbol *type;
+
+	typedef_lookup(&pid_t);
+	if (!pid_t.sym)
+		return 0;
+	type = get_base_type(sym);
+	if (type == pid_t.sym)
+		return 1;
+	return 0;
+}
+
+static const char *get_arg_type_from_type(struct symbol *sym)
+{
+	struct symbol *type;
+
+	if (is_mode_t(sym))
+		return "ARG_MODE_T";
+	if (is_pid_t(sym))
+		return "ARG_PID";
+
+	type = get_real_base_type(sym);
+	if (!type || type->type != SYM_PTR)
+		return NULL;
+	type = get_real_base_type(type);
+	if (!type)
+		return NULL;
+	if (type == &char_ctype)
+		return "ARG_MMAP";
+	if (!type->ident)
+		return NULL;
+	if (strcmp(type->ident->name, "iovec") == 0)
+		return "ARG_IOVEC";
+	if (strcmp(type->ident->name, "sockaddr") == 0)
+		return "ARG_SOCKADDR";
+	return "ARG_ADDRESS";
+}
+
+static void match_fdget(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *arg;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	set_state_expr(my_id, arg, &ARG_FD);
+}
+
+const char *get_syscall_arg_type(struct symbol *sym)
+{
+	struct smatch_state *state;
+	const char *type;
+
+	if (!sym || !sym->ident)
+		return "ARG_UNDEFINED";
+	type = get_arg_type_from_type(sym);
+	if (type)
+		return type;
+	state = get_state(my_id, sym->ident->name, sym);
+	if (!state)
+		return "ARG_UNDEFINED";
+	return state->name;
+}
+
+void check_syscall_arg_type(int id)
+{
+	my_id = id;
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	add_merge_hook(my_id, &merge_states);
+	add_function_hook("fdget", &match_fdget, NULL);
+}
+
+
--- /dev/null	Fri Dec 21 15:00:09 2018
+++ new/usr/src/tools/smatch/src/check_template.c	Fri Dec 21 15:00:09 2018
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 20XX Your Name.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * First of all, it's best if you lower your expectations from finding
+ * errors to just finding suspicious code.  There tends to be a lot
+ * of false positives so having low expectations helps.
+ *
+ * For this test let's look for functions that return a negative value
+ * with a semaphore held.
+ *
+ * This is just a template check.  It's designed for teaching
+ * only and is deliberately less useful than it could be.  check_locking.c
+ * is a better real world test.
+ *
+ * The biggest short coming is that it assumes a function isn't supposed
+ * to return negative with a lock held.  Also it assumes the function was
+ * called without the lock held. It would be better if it handled the stuff
+ * like this:
+ *     ret = -ENOMEM;
+ *     return ret;
+ * Another idea would be to test other kinds of locks besides just semaphores.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+STATE(lock);
+STATE(unlock);
+
+/*
+ * unmatched_state() deals with the case where code is known to be
+ * locked on one path but not known on the other side of a merge.  Here
+ * we assume it's the opposite.
+ */
+
+static struct smatch_state *unmatched_state(struct sm_state *sm)
+{
+	if (sm->state == &lock)
+		return &unlock;
+	if (sm->state == &unlock)
+		return &lock;
+	return &undefined;
+}
+
+static void match_call(struct expression *expr)
+{
+	char *fn_name;
+	struct expression *sem_expr;
+	char *sem_name;
+
+	fn_name = expr_to_var(expr->fn);
+	if (!fn_name || (strcmp(fn_name, "down") && strcmp(fn_name, "up")))
+		goto free_fn;
+
+	sem_expr = get_argument_from_call_expr(expr->args, 0);
+	sem_name = expr_to_var(sem_expr);
+	if (!strcmp(fn_name, "down")) {
+		set_state(my_id, sem_name, NULL, &lock);
+	} else {
+		set_state(my_id, sem_name, NULL, &unlock);
+	}
+	free_string(sem_name);
+free_fn:
+	free_string(fn_name);
+}
+
+static void match_return(struct expression *ret_value)
+{
+	sval_t ret_val;
+	struct stree *stree;
+	struct sm_state *tmp;
+
+	if (!get_value(ret_value, &ret_val) || sval_cmp_val(ret_val, 0) >= 0)
+		return;
+
+	stree = __get_cur_stree();
+	FOR_EACH_MY_SM(my_id, stree, tmp) {
+		if (tmp->state != &unlock)
+			sm_warning("returned negative with %s semaphore held",
+				   tmp->name);
+	} END_FOR_EACH_SM(tmp);
+}
+
+void check_template(int id)
+{
+	my_id = id;
+	add_unmatched_state_hook(my_id, &unmatched_state);
+	add_hook(&match_call, FUNCTION_CALL_HOOK);
+	add_hook(&match_return, RETURN_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:09 2018
+++ new/usr/src/tools/smatch/src/check_test_bit.c	Fri Dec 21 15:00:09 2018
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2015 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+static void match_test_bit(const char *fn, struct expression *expr, void *data)
+{
+	struct expression *arg;
+	char *macro;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	arg = strip_expr(arg);
+
+	if (!arg || arg->type != EXPR_BINOP)
+		return;
+	if (arg->op != '|' && arg->op != SPECIAL_LEFTSHIFT)
+		return;
+	macro = get_macro_name(arg->pos);
+	if (macro && strstr(macro, "cpu_has"))
+		return;
+	sm_warning("test_bit() takes a bit number");
+}
+
+void check_test_bit(int id)
+{
+	my_id = id;
+
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	add_function_hook("test_bit", &match_test_bit, NULL);
+	add_function_hook("variable_test_bit", &match_test_bit, NULL);
+	add_function_hook("set_bit", &match_test_bit, NULL);
+	add_function_hook("clear_bit", &match_test_bit, NULL);
+	add_function_hook("test_and_clear_bit", &match_test_bit, NULL);
+	add_function_hook("test_and_set_bit", &match_test_bit, NULL);
+}
--- /dev/null	Fri Dec 21 15:00:09 2018
+++ new/usr/src/tools/smatch/src/check_testing_index_after_use.c	Fri Dec 21 15:00:09 2018
@@ -0,0 +1,127 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include <stdlib.h>
+#include "parse.h"
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+/*
+ * This check has two smatch IDs.
+ * my_used_id - keeps a record of array offsets that have been used.
+ *              If the code checks that they are within bounds later on,
+ *              we complain about using an array offset before checking
+ *              that it is within bounds.
+ */
+static int my_used_id;
+
+static void delete(struct sm_state *sm, struct expression *mod_expr)
+{
+	set_state(my_used_id, sm->name, sm->sym, &undefined);
+}
+
+static int get_the_max(struct expression *expr, sval_t *sval)
+{
+	struct range_list *rl;
+
+	if (get_hard_max(expr, sval))
+		return 1;
+	if (!option_spammy)
+		return 0;
+	if (get_fuzzy_max(expr, sval))
+		return 1;
+	if (get_user_rl(expr, &rl)) {
+		*sval = rl_max(rl);
+		return 1;
+	}
+	return 0;
+}
+
+static void array_check(struct expression *expr)
+{
+	struct expression *array_expr;
+	int array_size;
+	struct expression *offset;
+	sval_t max;
+
+	expr = strip_expr(expr);
+	if (!is_array(expr))
+		return;
+
+	array_expr = get_array_base(expr);
+	array_size = get_array_size(array_expr);
+	if (!array_size || array_size == 1)
+		return;
+
+	offset = get_array_offset(expr);
+	if (!get_the_max(offset, &max)) {
+		if (getting_address())
+			return;
+		if (is_capped(offset))
+			return;
+		set_state_expr(my_used_id, offset, alloc_state_num(array_size));
+	}
+}
+
+static void match_condition(struct expression *expr)
+{
+	int left;
+	sval_t sval;
+	struct state_list *slist;
+	struct sm_state *tmp;
+	int boundary;
+
+	if (!expr || expr->type != EXPR_COMPARE)
+		return;
+	if (get_macro_name(expr->pos))
+		return;
+	if (get_implied_value(expr->left, &sval))
+		left = 1;
+	else if (get_implied_value(expr->right, &sval))
+		left = 0;
+	else
+		return;
+
+	if (left)
+		slist = get_possible_states_expr(my_used_id, expr->right);
+	else
+		slist = get_possible_states_expr(my_used_id, expr->left);
+	if (!slist)
+		return;
+	FOR_EACH_PTR(slist, tmp) {
+		if (tmp->state == &merged || tmp->state == &undefined)
+			continue;
+		boundary = PTR_INT(tmp->state->data);
+		boundary -= sval.value;
+		if (boundary < 1 && boundary > -1) {
+			char *name;
+
+			name = expr_to_var(left ? expr->right : expr->left);
+			sm_error("testing array offset '%s' after use.", name);
+			return;
+		}
+	} END_FOR_EACH_PTR(tmp);
+}
+
+void check_testing_index_after_use(int id)
+{
+	my_used_id = id;
+	add_hook(&array_check, OP_HOOK);
+	add_hook(&match_condition, CONDITION_HOOK);
+	add_modification_hook(my_used_id, &delete);
+}
--- /dev/null	Fri Dec 21 15:00:09 2018
+++ new/usr/src/tools/smatch/src/check_trinity_generator.c	Fri Dec 21 15:00:09 2018
@@ -0,0 +1,98 @@
+/*
+ * Copyright (C) 2017 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * The idea is to generate syscall templates for the Trinity fuzzer.  There
+ * isn't currently quite enough information to do it right but I want to start
+ * and see how far I can get.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+FILE *sysc_fd;
+
+static int gen_custom_struct(int nr, struct symbol *arg)
+{
+	return 0;
+}
+
+static void print_arg(int nr, struct symbol *arg)
+{
+	fprintf(sysc_fd, "\t.arg%dname = \"%s\",\n", nr + 1, arg->ident->name);
+	fprintf(sysc_fd, "\t.arg%dtype = %s,\n", nr + 1, get_syscall_arg_type(arg));
+}
+
+static void match_return(struct expression *ret_value)
+{
+	struct symbol *arg;
+	int num_args;
+	char *name;
+	int i;
+	char buf[256];
+	int has_custom_struct[6];
+
+	if (!get_function() || !cur_func_sym)
+		return;
+	if (strncmp(get_function(), "SYSC_", 5) != 0)
+		return;
+
+	num_args = ptr_list_size((struct ptr_list *)cur_func_sym->ctype.base_type->arguments);
+	name = get_function() + 5;
+
+	snprintf(buf, sizeof(buf), "smatch_trinity_%s", name);
+	sysc_fd = fopen(buf, "w");
+	if (!sm_outfd) {
+		printf("Error:  Cannot open %s\n", buf);
+		return;
+	}
+
+	i = 0;
+	FOR_EACH_PTR(cur_func_sym->ctype.base_type->arguments, arg) {
+		if (gen_custom_struct(i, arg))
+			has_custom_struct[i] = true;
+		else
+			has_custom_struct[i] = false;
+		i++;
+	} END_FOR_EACH_PTR(arg);
+
+	fprintf(sysc_fd, "struct syscallentry sm_%s = {\n", name);
+	fprintf(sysc_fd, "\t.name = \"%s\",\n", name);
+	fprintf(sysc_fd, "\t.num_args = %d,\n", num_args);
+
+	i = 0;
+	FOR_EACH_PTR(cur_func_sym->ctype.base_type->arguments, arg) {
+		if (has_custom_struct[i])
+			;
+		else
+			print_arg(i++, arg);
+	} END_FOR_EACH_PTR(arg);
+
+	fprintf(sysc_fd, "};\n");
+}
+
+void check_trinity_generator(int id)
+{
+	my_id = id;
+
+	if (option_project != PROJ_KERNEL)
+		return;
+	add_hook(&match_return, RETURN_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:09 2018
+++ new/usr/src/tools/smatch/src/check_type.c	Fri Dec 21 15:00:09 2018
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static int in_function(const char *fn)
+{
+	char *cur_func = get_function();
+
+	if (!cur_func)
+		return 0;
+	if (!strcmp(cur_func, fn))
+		return 1;
+	return 0;
+}
+
+static void match_free(const char *fn, struct expression *expr, void *data)
+{
+	struct expression *arg_expr;
+	char *name;
+	struct symbol *type;
+
+	arg_expr = get_argument_from_call_expr(expr->args, 0);
+	type = get_pointer_type(arg_expr);
+	if (!type || !type->ident)
+		return;
+
+	name = expr_to_str(arg_expr);
+
+	if (!strcmp("sk_buff", type->ident->name)) {
+		sm_error("use kfree_skb() here instead of kfree(%s)", name);
+	} else if (!strcmp("net_device", type->ident->name)) {
+		if (in_function("alloc_netdev"))
+			return;
+		if (in_function("alloc_netdev_mqs"))
+			return;
+		sm_error("use free_netdev() here instead of kfree(%s)", name);
+	}
+
+	free_string(name);
+}
+
+void check_type(int id)
+{
+	my_id = id;
+	if (option_project == PROJ_KERNEL)
+		add_function_hook("kfree", &match_free, NULL);
+}
--- /dev/null	Fri Dec 21 15:00:09 2018
+++ new/usr/src/tools/smatch/src/check_uninitialized.c	Fri Dec 21 15:00:09 2018
@@ -0,0 +1,365 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+STATE(uninitialized);
+STATE(initialized);
+
+static void pre_merge_hook(struct sm_state *sm)
+{
+	if (is_impossible_path())
+		set_state(my_id, sm->name, sm->sym, &initialized);
+}
+
+static void mark_members_uninitialized(struct symbol *sym)
+{
+	struct symbol *struct_type, *tmp, *base_type;
+	char buf[256];
+
+	struct_type = get_real_base_type(sym);
+	FOR_EACH_PTR(struct_type->symbol_list, tmp) {
+		if (!tmp->ident)
+			continue;
+		base_type = get_real_base_type(tmp);
+		if (!base_type ||
+		    base_type->type == SYM_STRUCT ||
+		    base_type->type == SYM_ARRAY ||
+		    base_type->type == SYM_UNION)
+			continue;
+		snprintf(buf, sizeof(buf), "%s.%s", sym->ident->name, tmp->ident->name);
+		set_state(my_id, buf, sym, &uninitialized);
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void match_declarations(struct symbol *sym)
+{
+	struct symbol *type;
+
+	if (sym->initializer)
+		return;
+
+	type = get_real_base_type(sym);
+	/* Smatch is crap at tracking arrays */
+	if (type->type == SYM_ARRAY)
+		return;
+	if (type->type == SYM_UNION)
+		return;
+	if (sym->ctype.modifiers & MOD_STATIC)
+		return;
+
+	if (!sym->ident)
+		return;
+
+	if (type->type == SYM_STRUCT) {
+		mark_members_uninitialized(sym);
+		return;
+	}
+
+	set_state(my_id, sym->ident->name, sym, &uninitialized);
+}
+
+static void extra_mod_hook(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state)
+{
+	if (!sym || !sym->ident)
+		return;
+	if (strcmp(name, sym->ident->name) != 0)
+		return;
+	set_state(my_id, name, sym, &initialized);
+}
+
+static void match_assign(struct expression *expr)
+{
+	struct expression *right;
+
+	right = strip_expr(expr->right);
+	if (right->type == EXPR_PREOP && right->op == '&')
+		set_state_expr(my_id, right->unop, &initialized);
+}
+
+static int is_initialized(struct expression *expr)
+{
+	struct sm_state *sm;
+
+	expr = strip_expr(expr);
+	if (expr->type != EXPR_SYMBOL)
+		return 1;
+	sm = get_sm_state_expr(my_id, expr);
+	if (!sm)
+		return 1;
+	if (!slist_has_state(sm->possible, &uninitialized))
+		return 1;
+	return 0;
+}
+
+static void match_dereferences(struct expression *expr)
+{
+	char *name;
+
+	if (parse_error)
+		return;
+
+	if (expr->type != EXPR_PREOP)
+		return;
+	if (is_impossible_path())
+		return;
+	if (is_initialized(expr->unop))
+		return;
+
+	name = expr_to_str(expr->unop);
+	sm_error("potentially dereferencing uninitialized '%s'.", name);
+	free_string(name);
+
+	set_state_expr(my_id, expr->unop, &initialized);
+}
+
+static void match_condition(struct expression *expr)
+{
+	char *name;
+
+	if (parse_error)
+		return;
+
+	if (is_impossible_path())
+		return;
+
+	if (is_initialized(expr))
+		return;
+
+	name = expr_to_str(expr);
+	sm_error("potentially using uninitialized '%s'.", name);
+	free_string(name);
+
+	set_state_expr(my_id, expr, &initialized);
+}
+
+static void match_call(struct expression *expr)
+{
+	struct expression *arg;
+	char *name;
+
+	if (parse_error)
+		return;
+
+	if (is_impossible_path())
+		return;
+
+	FOR_EACH_PTR(expr->args, arg) {
+		if (is_initialized(arg))
+			continue;
+
+		name = expr_to_str(arg);
+		sm_warning("passing uninitialized '%s'", name);
+		free_string(name);
+
+		set_state_expr(my_id, arg, &initialized);
+	} END_FOR_EACH_PTR(arg);
+}
+
+static int param_used_callback(void *found, int argc, char **argv, char **azColName)
+{
+	*(int *)found = 1;
+	return 0;
+}
+
+static int member_is_used(struct expression *call, int param, char *printed_name)
+{
+	int found;
+
+	/* for function pointers assume everything is used */
+	if (call->fn->type != EXPR_SYMBOL)
+		return 0;
+
+	found = 0;
+	run_sql(&param_used_callback, &found,
+		"select * from return_implies where %s and type = %d and parameter = %d and key = '%s';",
+		get_static_filter(call->fn->symbol), PARAM_USED, param, printed_name);
+	return found;
+}
+
+static void match_call_struct_members(struct expression *expr)
+{
+	struct symbol *type, *sym;
+	struct expression *arg;
+	struct sm_state *sm;
+	char *arg_name;
+	char buf[256];
+	int param;
+
+	return;
+
+	if (parse_error)
+		return;
+
+	param = -1;
+	FOR_EACH_PTR(expr->args, arg) {
+		param++;
+		if (arg->type != EXPR_PREOP || arg->op != '&')
+			continue;
+		type = get_type(arg->unop);
+		if (!type || type->type != SYM_STRUCT)
+			continue;
+		arg_name = expr_to_var_sym(arg->unop, &sym);
+		if (!arg_name || !sym)
+			goto free;
+		FOR_EACH_MY_SM(my_id, __get_cur_stree(), sm) {
+			if (sm->sym != sym)
+				continue;
+			if (!slist_has_state(sm->possible, &uninitialized))
+				continue;
+			snprintf(buf, sizeof(buf), "$->%s", sm->name + strlen(arg_name) + 1);
+			if (!member_is_used(expr, param, buf))
+				goto free;
+			sm_warning("struct member %s is uninitialized", sm->name);
+		} END_FOR_EACH_SM(sm);
+
+free:
+		free_string(arg_name);
+	} END_FOR_EACH_PTR(arg);
+}
+
+static int is_being_modified(struct expression *expr)
+{
+	struct expression *parent;
+	struct statement *stmt;
+
+	parent = expr_get_parent_expr(expr);
+	if (!parent)
+		return 0;
+	while (parent->type == EXPR_PREOP && parent->op == '(') {
+		parent = expr_get_parent_expr(parent);
+		if (!parent)
+			return 0;
+	}
+	if (parent->type == EXPR_PREOP && parent->op == '&')
+		return 1;
+	if (parent->type == EXPR_ASSIGNMENT && expr_equiv(parent->left, expr))
+		return 1;
+
+	stmt = last_ptr_list((struct ptr_list *)big_statement_stack);
+	if (stmt && stmt->type == STMT_ASM)
+		return 1;
+
+	return 0;
+}
+
+static void match_symbol(struct expression *expr)
+{
+	char *name;
+
+	if (parse_error)
+		return;
+
+	if (is_impossible_path())
+		return;
+
+	if (is_initialized(expr))
+		return;
+
+	if (is_being_modified(expr))
+		return;
+
+	name = expr_to_str(expr);
+	sm_error("uninitialized symbol '%s'.", name);
+	free_string(name);
+
+	set_state_expr(my_id, expr, &initialized);
+}
+
+static void match_untracked(struct expression *call, int param)
+{
+	struct expression *arg;
+
+	arg = get_argument_from_call_expr(call->args, param);
+	arg = strip_expr(arg);
+	if (!arg || arg->type != EXPR_PREOP || arg->op != '&')
+		return;
+	arg = strip_expr(arg->unop);
+	set_state_expr(my_id, arg, &initialized);
+}
+
+static void match_ignore_param(const char *fn, struct expression *expr, void *_arg_nr)
+{
+	int arg_nr = PTR_INT(_arg_nr);
+	struct expression *arg;
+
+	arg = get_argument_from_call_expr(expr->args, arg_nr);
+	arg = strip_expr(arg);
+	if (!arg)
+		return;
+	if (arg->type != EXPR_PREOP || arg->op != '&')
+		return;
+	arg = strip_expr(arg->unop);
+	set_state_expr(my_id, arg, &initialized);
+}
+
+static void register_ignored_params_from_file(void)
+{
+	char name[256];
+	struct token *token;
+	const char *func;
+	char prev_func[256];
+	int param;
+
+	memset(prev_func, 0, sizeof(prev_func));
+	snprintf(name, 256, "%s.ignore_uninitialized_param", option_project_str);
+	name[255] = '\0';
+	token = get_tokens_file(name);
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		func = show_ident(token->ident);
+
+		token = token->next;
+		if (token_type(token) != TOKEN_NUMBER)
+			return;
+		param = atoi(token->number);
+
+		add_function_hook(func, &match_ignore_param, INT_PTR(param));
+
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+void check_uninitialized(int id)
+{
+	my_id = id;
+
+	add_hook(&match_declarations, DECLARATION_HOOK);
+	add_extra_mod_hook(&extra_mod_hook);
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+	add_untracked_param_hook(&match_untracked);
+	add_pre_merge_hook(my_id, &pre_merge_hook);
+
+	add_hook(&match_dereferences, DEREF_HOOK);
+	add_hook(&match_condition, CONDITION_HOOK);
+	add_hook(&match_call, FUNCTION_CALL_HOOK);
+	add_hook(&match_call_struct_members, FUNCTION_CALL_HOOK);
+	add_hook(&match_symbol, SYM_HOOK);
+
+	register_ignored_params_from_file();
+}
--- /dev/null	Fri Dec 21 15:00:09 2018
+++ new/usr/src/tools/smatch/src/check_unreachable.c	Fri Dec 21 15:00:09 2018
@@ -0,0 +1,291 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static int print_unreached = 1;
+static struct string_list *turn_off_names;
+static struct string_list *ignore_names;
+
+static int empty_statement(struct statement *stmt)
+{
+	if (!stmt)
+		return 0;
+	if (stmt->type == STMT_EXPRESSION && !stmt->expression)
+		return 1;
+	return 0;
+}
+
+static int is_last_stmt(struct statement *cur_stmt)
+{
+	struct symbol *fn = get_base_type(cur_func_sym);
+	struct statement *stmt;
+
+	if (!fn)
+		return 0;
+	stmt = fn->stmt;
+	if (!stmt)
+		stmt = fn->inline_stmt;
+	if (!stmt || stmt->type != STMT_COMPOUND)
+		return 0;
+	stmt = last_ptr_list((struct ptr_list *)stmt->stmts);
+	if (stmt == cur_stmt)
+		return 1;
+	return 0;
+}
+
+static void print_unreached_initializers(struct symbol_list *sym_list)
+{
+	struct symbol *sym;
+
+	FOR_EACH_PTR(sym_list, sym) {
+		if (sym->initializer && !(sym->ctype.modifiers & MOD_STATIC))
+			sm_msg("info: '%s' is not actually initialized (unreached code).",
+				(sym->ident ? sym->ident->name : "this variable"));
+	} END_FOR_EACH_PTR(sym);
+}
+
+static int is_ignored_macro(struct statement *stmt)
+{
+	char *name;
+	char *tmp;
+
+	name = get_macro_name(stmt->pos);
+	if (!name)
+		return 0;
+
+	FOR_EACH_PTR(ignore_names, tmp) {
+		if (strcmp(tmp, name) == 0)
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+
+	return 0;
+}
+
+static int prev_line_was_endif(struct statement *stmt)
+{
+	struct token *token;
+	struct position pos = stmt->pos;
+
+	pos.line--;
+	pos.pos = 2;
+
+	token = pos_get_token(pos);
+	if (token && token_type(token) == TOKEN_IDENT &&
+	    strcmp(show_ident(token->ident), "endif") == 0)
+		return 1;
+
+	pos.line--;
+	token = pos_get_token(pos);
+	if (token && token_type(token) == TOKEN_IDENT &&
+	    strcmp(show_ident(token->ident), "endif") == 0)
+		return 1;
+
+	return 0;
+}
+
+static int we_jumped_into_the_middle_of_a_loop(struct statement *stmt)
+{
+	struct statement *prev;
+
+	/*
+	 * Smatch doesn't handle loops correctly and this is a hack.  What we
+	 * do is that if the first unreachable statement is a loop and the
+	 * previous statement was a goto then it's probably code like this:
+	 * 	goto first;
+	 * 	for (;;) {
+	 *		frob();
+	 * first:
+	 *		more_frob();
+	 * 	}
+	 * Every statement is reachable but only on the second iteration.
+	 */
+
+	if (stmt->type != STMT_ITERATOR)
+		return 0;
+	prev = get_prev_statement();
+	if (prev && prev->type == STMT_GOTO)
+		return 1;
+	return 0;
+}
+
+static void unreachable_stmt(struct statement *stmt)
+{
+
+	if (__inline_fn)
+		return;
+
+	if (!__path_is_null()) {
+		print_unreached = 1;
+		return;
+	}
+
+	/* if we hit a label then assume there is a matching goto */
+	if (stmt->type == STMT_LABEL)
+		print_unreached = 0;
+	if (prev_line_was_endif(stmt))
+		print_unreached = 0;
+	if (we_jumped_into_the_middle_of_a_loop(stmt))
+		print_unreached = 0;
+
+	if (!print_unreached)
+		return;
+	if (empty_statement(stmt))
+		return;
+	if (is_ignored_macro(stmt))
+		return;
+
+	switch (stmt->type) {
+	case STMT_COMPOUND: /* after a switch before a case stmt */
+	case STMT_RANGE:
+	case STMT_CASE:
+		return;
+	case STMT_DECLARATION: /* switch (x) { int a; case foo: ... */
+		print_unreached_initializers(stmt->declaration);
+		return;
+	case STMT_RETURN: /* gcc complains if you don't have a return statement */
+		if (is_last_stmt(stmt))
+			return;
+		break;
+	case STMT_GOTO:
+		/* people put extra breaks inside switch statements */
+		if (stmt->goto_label && stmt->goto_label->type == SYM_NODE &&
+		    strcmp(stmt->goto_label->ident->name, "break") == 0)
+			return;
+		break;
+	default:
+		break;
+	}
+	sm_msg("info: ignoring unreachable code.");
+	print_unreached = 0;
+}
+
+static int is_turn_off(char *name)
+{
+	char *tmp;
+
+	if (!name)
+		return 0;
+
+	FOR_EACH_PTR(turn_off_names, tmp) {
+		if (strcmp(tmp, name) == 0)
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+
+	return 0;
+}
+
+static char *get_function_name(struct statement *stmt)
+{
+	struct expression *expr;
+
+	if (stmt->type != STMT_EXPRESSION)
+		return NULL;
+	expr = stmt->expression;
+	if (!expr || expr->type != EXPR_CALL)
+		return NULL;
+	if (expr->fn->type != EXPR_SYMBOL || !expr->fn->symbol_name)
+		return NULL;
+	return expr->fn->symbol_name->name;
+}
+
+static void turn_off_unreachable(struct statement *stmt)
+{
+	char *name;
+
+	name = get_macro_name(stmt->pos);
+	if (is_turn_off(name)) {
+		print_unreached = 0;
+		return;
+	}
+
+	if (stmt->type == STMT_IF &&
+	    known_condition_true(stmt->if_conditional) &&  __path_is_null()) {
+		print_unreached = 0;
+		return;
+	}
+
+	name = get_function_name(stmt);
+	if (is_turn_off(name))
+		print_unreached = 0;
+}
+
+static void register_turn_off_macros(void)
+{
+	struct token *token;
+	char *macro;
+	char name[256];
+
+	if (option_project == PROJ_NONE)
+		strcpy(name, "unreachable.turn_off");
+	else
+		snprintf(name, 256, "%s.unreachable.turn_off", option_project_str);
+
+	token = get_tokens_file(name);
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		macro = alloc_string(show_ident(token->ident));
+		add_ptr_list(&turn_off_names, macro);
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+static void register_ignored_macros(void)
+{
+	struct token *token;
+	char *macro;
+	char name[256];
+
+	if (option_project == PROJ_NONE)
+		strcpy(name, "unreachable.ignore");
+	else
+		snprintf(name, 256, "%s.unreachable.ignore", option_project_str);
+
+	token = get_tokens_file(name);
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		macro = alloc_string(show_ident(token->ident));
+		add_ptr_list(&ignore_names, macro);
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+void check_unreachable(int id)
+{
+	my_id = id;
+
+	register_turn_off_macros();
+	register_ignored_macros();
+	add_hook(&unreachable_stmt, STMT_HOOK);
+	add_hook(&turn_off_unreachable, STMT_HOOK_AFTER);
+}
--- /dev/null	Fri Dec 21 15:00:09 2018
+++ new/usr/src/tools/smatch/src/check_unused_ret.c	Fri Dec 21 15:00:09 2018
@@ -0,0 +1,219 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This check is supposed to find places like this:
+ * err = foo();
+ * err = bar();
+ * if (err)
+ *         return err;
+ * (the first assignment isn't used)
+ *
+ * How the check works is that every assignment gets an ID.
+ * We store that assignment ID in a list of assignments that
+ * haven't been used.  We also set the state of 'err' from
+ * the example above to be.  Then when we use 'err' we remove
+ * it from the list.  At the end of the function we print
+ * a list of assignments that still haven't been used.
+ *
+ * Note that this check only works for assignments to
+ * EXPR_SYMBOL.  Maybe it could be modified to cover other
+ * assignments later but then you would have to deal with
+ * scope issues.
+ *
+ * Also this state is quite tied to the order the callbacks
+ * are called in smatch_flow.c.  (If the order changed it
+ * would break).
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_function_hashtable.h"
+
+static int my_id;
+
+struct assignment {
+	int assign_id;
+	char *name;
+	char *function;
+	int line;
+};
+ALLOCATOR(assignment, "assignment id");
+DECLARE_PTR_LIST(assignment_list, struct assignment);
+static struct assignment_list *assignment_list;
+
+static struct expression *skip_this;
+static int assign_id;
+
+static DEFINE_HASHTABLE_INSERT(insert_func, char, int);
+static DEFINE_HASHTABLE_SEARCH(search_func, char, int);
+static struct hashtable *ignored_funcs;
+
+static const char *kernel_ignored[] = {
+	"inb",
+	"inl",
+	"inw",
+	"readb",
+	"readl",
+	"readw",
+};
+
+static char *get_fn_name(struct expression *expr)
+{
+	if (expr->type != EXPR_CALL)
+		return NULL;
+	if (expr->fn->type != EXPR_SYMBOL)
+		return NULL;
+	return expr_to_var(expr->fn);
+}
+
+static int ignored_function(struct expression *expr)
+{
+	char *func;
+	int ret = 0;
+
+	func = get_fn_name(expr);
+	if (!func)
+		return 0;
+	if (search_func(ignored_funcs, func))
+		ret = 1;
+	free_string(func);
+	return ret;
+}
+
+static void match_assign_call(struct expression *expr)
+{
+	struct expression *left;
+	struct assignment *assign;
+
+	if (final_pass)
+		return;
+	if (in_condition())
+		return;
+	if (expr->op != '=')
+		return;
+	if (unreachable())
+		return;
+	if (ignored_function(expr->right))
+		return;
+	left = strip_expr(expr->left);
+	if (!left || left->type != EXPR_SYMBOL)
+		return;
+	if (left->symbol->ctype.modifiers & (MOD_TOPLEVEL | MOD_EXTERN | MOD_STATIC))
+		return;
+
+	skip_this = left;
+
+	set_state_expr(my_id, left, alloc_state_num(assign_id));
+
+	assign = __alloc_assignment(0);
+	assign->assign_id = assign_id++;
+	assign->name = expr_to_var(left);
+	assign->function = get_fn_name(expr->right);
+	assign->line = get_lineno();
+	add_ptr_list(&assignment_list, assign);
+}
+
+static void match_assign(struct expression *expr)
+{
+	struct expression *left;
+
+	if (expr->op != '=')
+		return;
+	left = strip_expr(expr->left);
+	if (!left || left->type != EXPR_SYMBOL)
+		return;
+	set_state_expr(my_id, left, &undefined);
+}
+
+static void delete_used(int assign_id)
+{
+	struct assignment *tmp;
+
+ 	FOR_EACH_PTR(assignment_list, tmp) {
+		if (tmp->assign_id == assign_id) {
+			DELETE_CURRENT_PTR(tmp);
+			return;
+		}
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void delete_used_symbols(struct state_list *possible)
+{
+	struct sm_state *tmp;
+
+ 	FOR_EACH_PTR(possible, tmp) {
+		delete_used(PTR_INT(tmp->state->data));
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void match_symbol(struct expression *expr)
+{
+	struct sm_state *sm;
+
+	expr = strip_expr(expr);
+	if (expr == skip_this)
+		return;
+	sm = get_sm_state_expr(my_id, expr);
+	if (!sm)
+		return;
+	delete_used_symbols(sm->possible);
+	set_state_expr(my_id, expr, &undefined);
+}
+
+static void match_end_func(struct symbol *sym)
+{
+	struct assignment *tmp;
+
+	if (__inline_fn)
+		return;
+ 	FOR_EACH_PTR(assignment_list, tmp) {
+		sm_printf("%s:%d %s() ", get_filename(), tmp->line, get_function());
+		sm_printf("warn: unused return: %s = %s()\n",
+			tmp->name, tmp->function);
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void match_after_func(struct symbol *sym)
+{
+	if (__inline_fn)
+		return;
+	clear_assignment_alloc();
+	__free_ptr_list((struct ptr_list **)&assignment_list);
+}
+
+void check_unused_ret(int id)
+{
+	my_id = id;
+
+	/* It turns out that this test is worthless unless you use --two-passes.  */
+	if (!option_two_passes)
+		return;
+	add_hook(&match_assign_call, CALL_ASSIGNMENT_HOOK);
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+	add_hook(&match_symbol, SYM_HOOK);
+	add_hook(&match_end_func, END_FUNC_HOOK);
+	add_hook(&match_after_func, AFTER_FUNC_HOOK);
+	ignored_funcs = create_function_hashtable(100);
+	if (option_project == PROJ_KERNEL) {
+		int i;
+
+		for (i = 0; i < ARRAY_SIZE(kernel_ignored); i++)
+			insert_func(ignored_funcs, (char *)kernel_ignored[i], (int *)1);
+	}
+}
--- /dev/null	Fri Dec 21 15:00:09 2018
+++ new/usr/src/tools/smatch/src/check_unwind.c	Fri Dec 21 15:00:09 2018
@@ -0,0 +1,233 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This is a kernel check to make sure we unwind everything on
+ * on errors.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+#define EBUSY 16
+#define MAX_ERRNO 4095
+
+static int my_id;
+
+STATE(allocated);
+STATE(unallocated);
+
+/* state of unwind function */
+STATE(called);
+
+static int was_passed_as_param(struct expression *expr)
+{
+	char *name;
+	struct symbol *sym;
+	struct symbol *arg;
+
+	name = expr_to_var_sym(expr, &sym);
+	if (!name)
+		return 0;
+	free_string(name);
+
+	FOR_EACH_PTR(cur_func_sym->ctype.base_type->arguments, arg) {
+		if (arg == sym)
+			return 1;
+	} END_FOR_EACH_PTR(arg);
+	return 0;
+}
+
+static void print_unwind_functions(const char *fn, struct expression *expr, void *_arg_no)
+{
+	struct expression *arg_expr;
+	int arg_no = PTR_INT(_arg_no);
+	static struct symbol *last_printed = NULL;
+
+	arg_expr = get_argument_from_call_expr(expr->args, arg_no);
+	if (!was_passed_as_param(arg_expr))
+		return;
+	if (last_printed == cur_func_sym)
+		return;
+	last_printed = cur_func_sym;
+	sm_msg("info: is unwind function");
+}
+
+static void request_granted(const char *fn, struct expression *call_expr,
+			struct expression *assign_expr, void *_arg_no)
+{
+	struct expression *arg_expr;
+	int arg_no = PTR_INT(_arg_no);
+
+	if (arg_no == -1) {
+		if (!assign_expr)
+			return;
+		arg_expr = assign_expr->left;
+	} else {
+		arg_expr = get_argument_from_call_expr(call_expr->args, arg_no);
+	}
+	set_state_expr(my_id, arg_expr, &allocated);
+}
+
+static void request_denied(const char *fn, struct expression *call_expr,
+			struct expression *assign_expr, void *_arg_no)
+{
+	struct expression *arg_expr;
+	int arg_no = PTR_INT(_arg_no);
+
+	if (arg_no == -1) {
+		if (!assign_expr)
+			return;
+		arg_expr = assign_expr->left;
+	} else {
+		arg_expr = get_argument_from_call_expr(call_expr->args, arg_no);
+	}
+	set_state_expr(my_id, arg_expr, &unallocated);
+}
+
+static void match_release(const char *fn, struct expression *expr, void *_arg_no)
+{
+	struct expression *arg_expr;
+	int arg_no = PTR_INT(_arg_no);
+
+	arg_expr = get_argument_from_call_expr(expr->args, arg_no);
+	if (get_state_expr(my_id, arg_expr))
+		set_state_expr(my_id, arg_expr, &unallocated);
+	set_equiv_state_expr(my_id, arg_expr, &unallocated);
+}
+
+static void match_unwind_function(const char *fn, struct expression *expr, void *unused)
+{
+	set_state(my_id, "unwind_function", NULL, &called);
+}
+
+static int func_returns_int(void)
+{
+	struct symbol *type;
+
+	type = get_base_type(cur_func_sym);
+	if (!type || type->type != SYM_FN)
+		return 0;
+	type = get_base_type(type);
+	if (type->ctype.base_type == &int_type) {
+		return 1;
+	}
+	return 0;
+}
+
+static void match_return(struct expression *ret_value)
+{
+	struct stree *stree;
+	struct sm_state *tmp;
+	sval_t sval;
+
+	if (!func_returns_int())
+		return;
+	if (get_value(ret_value, &sval) && sval_cmp_val(sval, 0) >= 0)
+		return;
+	if (!implied_not_equal(ret_value, 0))
+		return;
+	if (get_state(my_id, "unwind_function", NULL) == &called)
+		return;
+
+	stree = __get_cur_stree();
+	FOR_EACH_MY_SM(my_id, stree, tmp) {
+		if (slist_has_state(tmp->possible, &allocated))
+			sm_warning("'%s' was not released on error", tmp->name);
+	} END_FOR_EACH_SM(tmp);
+}
+
+static void register_unwind_functions(void)
+{
+	struct token *token;
+	const char *func;
+
+	token = get_tokens_file("kernel.unwind_functions");
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		func = show_ident(token->ident);
+		add_function_hook(func, &match_unwind_function, NULL);
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+static void release_function_indicator(const char *name)
+{
+	if (!option_info)
+		return;
+	add_function_hook(name, &print_unwind_functions, INT_PTR(0));
+}
+
+void check_unwind(int id)
+{
+	if (option_project != PROJ_KERNEL || !option_spammy)
+		return;
+	my_id = id;
+
+	register_unwind_functions();
+
+	return_implies_state("request_resource", 0, 0, &request_granted, INT_PTR(1));
+	return_implies_state("request_resource", -EBUSY, -EBUSY, &request_denied, INT_PTR(1));
+	add_function_hook("release_resource", &match_release, INT_PTR(0));
+	release_function_indicator("release_resource");
+
+	return_implies_state("__request_region", valid_ptr_min, valid_ptr_max, &request_granted, INT_PTR(1));
+	return_implies_state("__request_region", 0, 0, &request_denied, INT_PTR(1));
+	add_function_hook("__release_region", &match_release, INT_PTR(1));
+	release_function_indicator("__release_region");
+
+	return_implies_state("ioremap", valid_ptr_min, valid_ptr_max, &request_granted, INT_PTR(-1));
+	return_implies_state("ioremap", 0, 0, &request_denied, INT_PTR(-1));
+	add_function_hook("iounmap", &match_release, INT_PTR(0));
+
+	return_implies_state("pci_iomap", valid_ptr_min, valid_ptr_max, &request_granted, INT_PTR(-1));
+	return_implies_state("pci_iomap", 0, 0, &request_denied, INT_PTR(-1));
+	add_function_hook("pci_iounmap", &match_release, INT_PTR(1));
+	release_function_indicator("pci_iounmap");
+
+	return_implies_state("__create_workqueue_key", valid_ptr_min, valid_ptr_max, &request_granted,
+			INT_PTR(-1));
+	return_implies_state("__create_workqueue_key", 0, 0, &request_denied, INT_PTR(-1));
+	add_function_hook("destroy_workqueue", &match_release, INT_PTR(0));
+
+	return_implies_state("request_irq", 0, 0, &request_granted, INT_PTR(0));
+	return_implies_state("request_irq", -MAX_ERRNO, -1, &request_denied, INT_PTR(0));
+	add_function_hook("free_irq", &match_release, INT_PTR(0));
+	release_function_indicator("free_irq");
+
+	return_implies_state("register_netdev", 0, 0, &request_granted, INT_PTR(0));
+	return_implies_state("register_netdev", -MAX_ERRNO, -1, &request_denied, INT_PTR(0));
+	add_function_hook("unregister_netdev", &match_release, INT_PTR(0));
+	release_function_indicator("unregister_netdev");
+
+	return_implies_state("misc_register", 0, 0, &request_granted, INT_PTR(0));
+	return_implies_state("misc_register", -MAX_ERRNO, -1, &request_denied, INT_PTR(0));
+	add_function_hook("misc_deregister", &match_release, INT_PTR(0));
+	release_function_indicator("misc_deregister");
+
+
+	add_hook(&match_return, RETURN_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:09 2018
+++ new/usr/src/tools/smatch/src/check_wait_for_common.c	Fri Dec 21 15:00:09 2018
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2011 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static void match_wait_for_common(const char *fn, struct expression *expr, void *unused)
+{
+	char *name;
+
+	if (!expr_unsigned(expr->left))
+		return;
+	name = expr_to_str(expr->left);
+	sm_error("'%s()' returns negative and '%s' is unsigned", fn, name);
+	free_string(name);
+}
+
+void check_wait_for_common(int id)
+{
+	my_id = id;
+
+	if (option_project != PROJ_KERNEL)
+		return;
+	add_function_assign_hook("wait_for_common", &match_wait_for_common, NULL);
+	add_function_assign_hook("wait_for_completion_interruptible_timeout", &match_wait_for_common, NULL);
+}
--- /dev/null	Fri Dec 21 15:00:09 2018
+++ new/usr/src/tools/smatch/src/check_wine.c	Fri Dec 21 15:00:09 2018
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2016 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This is wine specific stuff for smatch_extra.
+ */
+
+#include "scope.h"
+#include "smatch.h"
+#include "smatch_extra.h"
+
+/* report (R_FATAL, "Can't get OS version."); */
+void match_fatal_report(const char *fn, struct expression *expr,
+			void *unused)
+{
+	struct expression *arg;
+	sval_t sval;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	if (!get_implied_value(arg, &sval))
+		return;
+
+	/* R_FATAL is 9. */
+	if (sval.value == 9)
+		nullify_path();
+}
+
+
+void check_wine(int id)
+{
+	if (option_project != PROJ_WINE)
+		return;
+
+	add_function_hook("report", &match_fatal_report, NULL);
+}
--- /dev/null	Fri Dec 21 15:00:09 2018
+++ new/usr/src/tools/smatch/src/check_wine_WtoA.c	Fri Dec 21 15:00:09 2018
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Idea from Michael Stefaniuc and Vincent Béron's earlier WtoA
+ * check.
+ *
+ * Apparently when you are coding WINE, you are not allowed to call 
+ * functions that end in capital 'A' from functions that end in 
+ * capital 'W'
+ *
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static int in_w = 0;
+
+static void match_function_def(struct symbol *sym)
+{
+	char *func = get_function();
+	int len;
+
+	if (!func) {
+		in_w = 0;
+		return;
+	}
+	len = strlen(func);
+	if (func[len - 1] == 'W' && len > 2 && func[len - 2] != 'A' )
+		in_w = 1;
+	else
+		in_w = 0;
+}
+
+static int allowed_func(const char *fn)
+{
+	if (!strcmp("lstrcatA", fn))
+		return 1;
+	if (!strcmp("lstrcpyA", fn))
+		return 1;
+	if (!strcmp("lstrcpynA", fn))
+		return 1;
+	if (!strcmp("lstrlenA", fn))
+		return 1;
+	return 0;
+}
+
+static void match_call(struct expression *expr)
+{
+	char *fn_name;
+	int len;
+
+	if (!in_w)
+		return;
+
+	fn_name = expr_to_var(expr->fn);
+	if (!fn_name)
+		goto free;
+	len = strlen(fn_name);
+	if (fn_name[len - 1] == 'A' && !allowed_func(fn_name)) {
+		sm_warning("WtoA call '%s()'", fn_name);
+	}
+free:
+	free_string(fn_name);
+}
+
+void check_wine_WtoA(int id)
+{
+	if (option_project != PROJ_WINE)
+		return;
+
+	my_id = id;
+	add_hook(&match_function_def, FUNC_DEF_HOOK);
+	add_hook(&match_call, FUNCTION_CALL_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:09 2018
+++ new/usr/src/tools/smatch/src/check_wine_filehandles.c	Fri Dec 21 15:00:09 2018
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * In wine you aren't allowed to compare file handles with 0,
+ * only with INVALID_HANDLE_VALUE.
+ *
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+STATE(filehandle);
+STATE(oktocheck);
+
+/* originally:
+ *  "(?:CreateFile|CreateMailslot|CreateNamedPipe|FindFirstFile(?:Ex)?|OpenConsole|SetupOpenInfFile|socket)[AW]?"
+ *
+ */
+static const char *filehandle_funcs[] = {
+	"CreateFile",
+	"CreateMailslot",
+	"CreateNamedPipe",
+	"FindFirstFile",
+	"FindFirstFileEx",
+	"OpenConsole",
+	"SetupOpenInfFile",
+	"socket",
+	NULL,
+};
+
+static void ok_to_use(struct sm_state *sm, struct expression *mod_expr)
+{
+	if (sm->state != &oktocheck)
+		set_state(my_id, sm->name, sm->sym, &oktocheck);
+}
+
+static void match_returns_handle(const char *fn, struct expression *expr,
+			     void *info)
+{
+	char *left_name = NULL;
+	struct symbol *left_sym;
+
+	left_name = expr_to_var_sym(expr->left, &left_sym);
+	if (!left_name || !left_sym)
+		goto free;
+	set_state_expr(my_id, expr->left, &filehandle);
+free:
+	free_string(left_name);
+}
+
+static void match_condition(struct expression *expr)
+{
+	if (expr->type == EXPR_ASSIGNMENT)
+		match_condition(expr->left);
+
+	if (get_state_expr(my_id, expr) == &filehandle) {
+		char *name;
+
+		name = expr_to_var(expr);
+		sm_error("comparing a filehandle against zero '%s'", name);
+		set_state_expr(my_id, expr, &oktocheck);
+		free_string(name);
+	}
+}
+
+void check_wine_filehandles(int id)
+{
+	int i;
+
+	if (option_project != PROJ_WINE)
+		return;
+
+	my_id = id;
+	for (i = 0; filehandle_funcs[i]; i++) {
+		add_function_assign_hook(filehandle_funcs[i],
+					 &match_returns_handle, NULL);
+	}
+	add_hook(&match_condition, CONDITION_HOOK);
+	add_modification_hook(my_id, ok_to_use);
+}
--- /dev/null	Fri Dec 21 15:00:10 2018
+++ new/usr/src/tools/smatch/src/check_wrong_size_arg.c	Fri Dec 21 15:00:10 2018
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static int my_id;
+
+static void match_parameter(const char *fn, struct expression *expr, void *_param)
+{
+	int param = PTR_INT(_param);
+	struct expression *arg;
+	char *name;
+
+	arg = get_argument_from_call_expr(expr->args, param);
+	arg = strip_expr(arg);
+	if (!arg)
+		return;
+	if (arg->type != EXPR_COMPARE)
+		return;
+
+	name = expr_to_str_sym(arg, NULL);
+	sm_warning("expected a buffer size but got a comparison '%s'", name);
+	free_string(name);
+}
+
+static void register_funcs_from_file(void)
+{
+	char name[256];
+	struct token *token;
+	const char *func;
+	char prev_func[256];
+	int size;
+
+	memset(prev_func, 0, sizeof(prev_func));
+	snprintf(name, 256, "%s.sizeof_param", option_project_str);
+	name[255] = '\0';
+	token = get_tokens_file(name);
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			break;
+		func = show_ident(token->ident);
+
+		token = token->next;
+		if (token_type(token) != TOKEN_NUMBER)
+			break;
+		size = atoi(token->number);
+
+		token = token->next;
+		if (token_type(token) == TOKEN_SPECIAL) {
+			if (token->special != '-')
+				break;
+			token = token->next;
+		}
+		if (token_type(token) != TOKEN_NUMBER)
+			break;
+		/* we don't care which argument hold the buf pointer */
+		token = token->next;
+
+		if (strcmp(func, prev_func) == 0)
+			continue;
+		strncpy(prev_func, func, 255);
+
+		add_function_hook(func, &match_parameter, INT_PTR(size));
+
+	}
+	if (token_type(token) != TOKEN_STREAMEND)
+		sm_perror("problem parsing '%s'", name);
+	clear_token_alloc();
+}
+
+void check_wrong_size_arg(int id)
+{
+	my_id = id;
+	register_funcs_from_file();
+}
--- /dev/null	Fri Dec 21 15:00:10 2018
+++ new/usr/src/tools/smatch/src/check_zero_to_err_ptr.c	Fri Dec 21 15:00:10 2018
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2013 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+static int is_comparison_call(struct expression *expr)
+{
+	expr = expr_get_parent_expr(expr);
+	if (!expr || expr->type != EXPR_COMPARE)
+		return 0;
+	if (expr->op != SPECIAL_EQUAL && expr->op != SPECIAL_NOTEQUAL)
+		return 0;
+	return 1;
+}
+
+static int next_line_is_if(struct expression *expr)
+{
+	struct expression *next;
+
+	if (!__next_stmt || __next_stmt->type != STMT_IF)
+		return 0;
+
+	next = strip_expr(__next_stmt->if_conditional);
+	while (next->type == EXPR_PREOP && next->op == '!')
+		next = strip_expr(next->unop);
+	if (expr_equiv(expr, next))
+		return 1;
+	return 0;
+}
+
+static int next_line_checks_IS_ERR(struct expression *call, struct expression *arg)
+{
+	struct expression *next;
+	struct expression *tmp;
+
+	tmp = expr_get_parent_expr(call);
+	if (tmp && tmp->type == EXPR_ASSIGNMENT) {
+		if (next_line_checks_IS_ERR(NULL, tmp->left))
+			return 1;
+	}
+
+	if (!__next_stmt || __next_stmt->type != STMT_IF)
+		return 0;
+
+	next = strip_expr(__next_stmt->if_conditional);
+	while (next->type == EXPR_PREOP && next->op == '!')
+		next = strip_expr(next->unop);
+	if (!next || next->type != EXPR_CALL)
+		return 0;
+	if (next->fn->type != EXPR_SYMBOL || !next->fn->symbol ||
+	    !next->fn->symbol->ident ||
+	    (strcmp(next->fn->symbol->ident->name, "IS_ERR") != 0 &&
+	     strcmp(next->fn->symbol->ident->name, "IS_ERR_OR_NULL") != 0))
+		return 0;
+	next = get_argument_from_call_expr(next->args, 0);
+	return expr_equiv(next, arg);
+}
+
+static int is_valid_ptr(sval_t sval)
+{
+	if (sval.type == &int_ctype &&
+	    (sval.value == INT_MIN || sval.value == INT_MAX))
+		return 0;
+
+	if (sval_cmp(valid_ptr_min_sval, sval) <= 0 &&
+	    sval_cmp(valid_ptr_max_sval, sval) >= 0)
+		return 1;
+	return 0;
+}
+
+static void match_err_ptr(const char *fn, struct expression *expr, void *data)
+{
+	struct expression *arg_expr;
+	struct sm_state *sm, *tmp;
+	sval_t sval;
+
+	arg_expr = get_argument_from_call_expr(expr->args, 0);
+	sm = get_sm_state_expr(SMATCH_EXTRA, arg_expr);
+	if (!sm)
+		return;
+
+	if (is_comparison_call(expr))
+		return;
+
+	if (next_line_checks_IS_ERR(expr, arg_expr))
+		return;
+	if (strcmp(fn, "ERR_PTR") == 0 &&
+	    next_line_is_if(arg_expr))
+		return;
+
+	FOR_EACH_PTR(sm->possible, tmp) {
+		if (!estate_rl(tmp->state))
+			continue;
+		if (is_valid_ptr(estate_min(tmp->state)) &&
+		    is_valid_ptr(estate_max(tmp->state))) {
+			sm_warning("passing a valid pointer to '%s'", fn);
+			return;
+		}
+		if (!rl_to_sval(estate_rl(tmp->state), &sval))
+			continue;
+		if (sval.value != 0)
+			continue;
+		sm_warning("passing zero to '%s'", fn);
+		return;
+	} END_FOR_EACH_PTR(tmp);
+}
+
+void check_zero_to_err_ptr(int id)
+{
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	my_id = id;
+	add_function_hook("ERR_PTR", &match_err_ptr, NULL);
+	add_function_hook("ERR_CAST", &match_err_ptr, NULL);
+	add_function_hook("PTR_ERR", &match_err_ptr, NULL);
+}
--- /dev/null	Fri Dec 21 15:00:10 2018
+++ new/usr/src/tools/smatch/src/compat-bsd.c	Fri Dec 21 15:00:10 2018
@@ -0,0 +1,36 @@
+/*
+ * BSD Compatibility functions
+ *
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include <sys/types.h>
+#include <string.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "token.h"
+
+#include "compat/mmap-blob.c"
+
+long double string_to_ld(const char *nptr, char **endptr)
+{
+	return strtod(nptr, endptr);
+}
--- /dev/null	Fri Dec 21 15:00:10 2018
+++ new/usr/src/tools/smatch/src/compat-cygwin.c	Fri Dec 21 15:00:10 2018
@@ -0,0 +1,56 @@
+/*	
+ * Cygwin Compatibility functions	
+ *	
+ *	
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */	
+	
+	
+	
+#include <sys/mman.h>	
+#include <stdlib.h>	
+#include <string.h>	
+#include <sys/stat.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "token.h"
+	
+void *blob_alloc(unsigned long size)	
+{	
+	void *ptr;	
+	size = (size + 4095) & ~4095;	
+	ptr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);	
+	if (ptr == MAP_FAILED)	
+		ptr = NULL;	
+	else	
+		memset(ptr, 0, size);	
+	return ptr;	
+}	
+	
+void blob_free(void *addr, unsigned long size)	
+{	
+	size = (size + 4095) & ~4095;	
+	munmap(addr, size);	
+}	
+	
+long double string_to_ld(const char *nptr, char **endptr) 	
+{	
+	return strtod(nptr, endptr);	
+}
--- /dev/null	Fri Dec 21 15:00:10 2018
+++ new/usr/src/tools/smatch/src/compat-linux.c	Fri Dec 21 15:00:10 2018
@@ -0,0 +1,7 @@
+#define _GNU_SOURCE
+
+#include "lib.h"
+#include "allocate.h"
+
+#include "compat/mmap-blob.c"
+#include "compat/strtold.c"
--- /dev/null	Fri Dec 21 15:00:10 2018
+++ new/usr/src/tools/smatch/src/compat-mingw.c	Fri Dec 21 15:00:10 2018
@@ -0,0 +1,53 @@
+/*	
+ * MinGW Compatibility functions	
+ *	
+ *	
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */	
+	
+	
+	
+#include <stdarg.h>	
+#include <windef.h>	
+#include <winbase.h>	
+#include <stdlib.h>	
+#include <string.h>	
+	
+#include "lib.h"
+#include "allocate.h"
+#include "token.h"
+	
+void *blob_alloc(unsigned long size)	
+{	
+	void *ptr;	
+	ptr = malloc(size);	
+	if (ptr != NULL)	
+		memset(ptr, 0, size);	
+	return ptr;	
+}	
+	
+void blob_free(void *addr, unsigned long size)	
+{	
+	free(addr);	
+}	
+	
+long double string_to_ld(const char *nptr, char **endptr) 	
+{	
+	return strtod(nptr, endptr);	
+}
--- /dev/null	Fri Dec 21 15:00:10 2018
+++ new/usr/src/tools/smatch/src/compat-solaris.c	Fri Dec 21 15:00:10 2018
@@ -0,0 +1,33 @@
+#include "lib.h"
+#include "allocate.h"
+
+#include "compat/mmap-blob.c"
+
+#include <floatingpoint.h>
+#include <limits.h>
+#include <errno.h>
+
+long double string_to_ld(const char *str, char **endptr)
+{
+	long double res;
+	decimal_record dr;
+	enum decimal_string_form form;
+	decimal_mode dm;
+	fp_exception_field_type excp;
+	char *echar;
+
+	string_to_decimal ((char **)&str, INT_MAX, 0,
+			   &dr, &form, &echar);
+	if (endptr) *endptr = (char *)str;
+
+	if (form == invalid_form) {
+		errno = EINVAL;
+		return 0.0;
+	}
+
+	dm.rd = fp_nearest;
+	decimal_to_quadruple (&res, &dm, &dr, &excp);
+        if (excp & ((1 << fp_overflow) | (1 << fp_underflow)))
+                errno = ERANGE;
+	return res;
+}
--- /dev/null	Fri Dec 21 15:00:10 2018
+++ new/usr/src/tools/smatch/src/compat.h	Fri Dec 21 15:00:10 2018
@@ -0,0 +1,28 @@
+#ifndef COMPAT_H
+#define COMPAT_H
+
+/*
+ * Various systems get these things wrong. So
+ * we create a small compat library for them.
+ *
+ *  - zeroed anonymous mmap
+ *	Missing in MinGW
+ *  - "string to long double" (C99 strtold())
+ *	Missing in Solaris and MinGW
+ */
+struct stream;
+struct stat;
+
+/*
+ * Our "blob" allocator works on chunks that are multiples
+ * of this size (the underlying allocator may be a mmap that
+ * cannot handle smaller chunks, for example, so trying to
+ * allocate blobs that aren't aligned is not going to work).
+ */
+#define CHUNK 32768
+
+void *blob_alloc(unsigned long size);
+void blob_free(void *addr, unsigned long size);
+long double string_to_ld(const char *nptr, char **endptr);
+
+#endif
--- /dev/null	Fri Dec 21 15:00:10 2018
+++ new/usr/src/tools/smatch/src/compat/bswap.h	Fri Dec 21 15:00:10 2018
@@ -0,0 +1,54 @@
+#ifndef _COMPAT_BSWAP_H_
+#define _COMPAT_BSWAP_H_
+
+#if defined(__GNUC__)
+#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 8))
+#define	__HAS_BUILTIN_BSWAP16
+#endif
+#if (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4))
+#define	__HAS_BUILTIN_BSWAP32
+#define	__HAS_BUILTIN_BSWAP64
+#endif
+#endif
+
+#if defined(__clang__)
+#if (__clang_major__ > 3) || ((__clang_major__ == 3) && (__clang_minor__ >= 2))
+#define	__HAS_BUILTIN_BSWAP16
+#endif
+#if (__clang_major__ > 3) || ((__clang_major__ == 3) && (__clang_minor__ >= 0))
+#define	__HAS_BUILTIN_BSWAP32
+#define	__HAS_BUILTIN_BSWAP64
+#endif
+#endif
+
+#ifdef __HAS_BUILTIN_BSWAP16
+#define bswap16(x)	__builtin_bswap16(x)
+#else
+#include <stdint.h>
+static inline uint16_t bswap16(uint16_t x)
+{
+	return x << 8 | x >> 8;
+}
+#endif
+
+#ifdef __HAS_BUILTIN_BSWAP32
+#define bswap32(x)	__builtin_bswap32(x)
+#else
+#include <stdint.h>
+static inline uint32_t bswap32(uint32_t x)
+{
+	return x >> 24 | (x >> 8 & 0xff00) | (x << 8 & 0xff0000) | x << 24;
+}
+#endif
+
+#ifdef __HAS_BUILTIN_BSWAP64
+#define bswap64(x)	__builtin_bswap64(x)
+#else
+#include <stdint.h>
+static inline uint64_t bswap64(uint64_t x)
+{
+	return ((uint64_t)bswap32(x)) << 32 | bswap32(x >> 32);
+}
+#endif
+
+#endif
--- /dev/null	Fri Dec 21 15:00:10 2018
+++ new/usr/src/tools/smatch/src/compat/mmap-blob.c	Fri Dec 21 15:00:10 2018
@@ -0,0 +1,37 @@
+#include <sys/mman.h>
+#include <sys/types.h>
+
+/*
+ * Allow old BSD naming too, it would be a pity to have to make a
+ * separate file just for this.
+ */
+#ifndef MAP_ANONYMOUS
+#define MAP_ANONYMOUS MAP_ANON
+#endif
+
+/*
+ * Our blob allocator enforces the strict CHUNK size
+ * requirement, as a portability check.
+ */
+void *blob_alloc(unsigned long size)
+{
+	void *ptr;
+
+	if (size & ~CHUNK)
+		die("internal error: bad allocation size (%lu bytes)", size);
+	ptr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+	if (ptr == MAP_FAILED)
+		ptr = NULL;
+	return ptr;
+}
+
+void blob_free(void *addr, unsigned long size)
+{
+	if (!size || (size & ~CHUNK) || ((unsigned long) addr & 512))
+		die("internal error: bad blob free (%lu bytes at %p)", size, addr);
+#ifndef DEBUG
+	munmap(addr, size);
+#else
+	mprotect(addr, size, PROT_NONE);
+#endif
+}
--- /dev/null	Fri Dec 21 15:00:10 2018
+++ new/usr/src/tools/smatch/src/compat/strtold.c	Fri Dec 21 15:00:10 2018
@@ -0,0 +1,6 @@
+#include <stdlib.h>
+
+long double string_to_ld(const char *nptr, char **endptr)
+{
+	return strtold(nptr, endptr);
+}
--- /dev/null	Fri Dec 21 15:00:10 2018
+++ new/usr/src/tools/smatch/src/compile-i386.c	Fri Dec 21 15:00:10 2018
@@ -0,0 +1,2405 @@
+/*
+ * sparse/compile-i386.c
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003 Linus Torvalds
+ * Copyright 2003 Jeff Garzik
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * x86 backend
+ *
+ * TODO list:
+ * in general, any non-32bit SYM_BASETYPE is unlikely to work.
+ * complex initializers
+ * bitfields
+ * global struct/union variables
+ * addressing structures, and members of structures (as opposed to
+ *     scalars) on the stack.  Requires smarter stack frame allocation.
+ * labels / goto
+ * any function argument that isn't 32 bits (or promoted to such)
+ * inline asm
+ * floating point
+ *
+ */
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <assert.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "token.h"
+#include "parse.h"
+#include "symbol.h"
+#include "scope.h"
+#include "expression.h"
+#include "target.h"
+#include "compile.h"
+#include "bitmap.h"
+#include "version.h"
+
+struct textbuf {
+	unsigned int	len;	/* does NOT include terminating null */
+	char		*text;
+	struct textbuf	*next;
+	struct textbuf	*prev;
+};
+
+struct loop_stack {
+	int		continue_lbl;
+	int		loop_bottom_lbl;
+	struct loop_stack *next;
+};
+
+struct atom;
+struct storage;
+DECLARE_PTR_LIST(str_list, struct atom);
+DECLARE_PTR_LIST(atom_list, struct atom);
+DECLARE_PTR_LIST(storage_list, struct storage);
+
+struct function {
+	int stack_size;
+	int pseudo_nr;
+	struct storage_list *pseudo_list;
+	struct atom_list *atom_list;
+	struct str_list *str_list;
+	struct loop_stack *loop_stack;
+	struct symbol **argv;
+	unsigned int argc;
+	int ret_target;
+};
+
+enum storage_type {
+	STOR_PSEUDO,	/* variable stored on the stack */
+	STOR_ARG,	/* function argument */
+	STOR_SYM,	/* a symbol we can directly ref in the asm */
+	STOR_REG,	/* scratch register */
+	STOR_VALUE,	/* integer constant */
+	STOR_LABEL,	/* label / jump target */
+	STOR_LABELSYM,	/* label generated from symbol's pointer value */
+};
+
+struct reg_info {
+	const char	*name;
+	struct storage	*contains;
+	const unsigned char aliases[12];
+#define own_regno aliases[0]
+};
+
+struct storage {
+	enum storage_type type;
+	unsigned long flags;
+
+	/* STOR_REG */
+	struct reg_info *reg;
+	struct symbol *ctype;
+
+	union {
+		/* STOR_PSEUDO */
+		struct {
+			int pseudo;
+			int offset;
+			int size;
+		};
+		/* STOR_ARG */
+		struct {
+			int idx;
+		};
+		/* STOR_SYM */
+		struct {
+			struct symbol *sym;
+		};
+		/* STOR_VALUE */
+		struct {
+			long long value;
+		};
+		/* STOR_LABEL */
+		struct {
+			int label;
+		};
+		/* STOR_LABELSYM */
+		struct {
+			struct symbol *labelsym;
+		};
+	};
+};
+
+enum {
+	STOR_LABEL_VAL	= (1 << 0),
+	STOR_WANTS_FREE	= (1 << 1),
+};
+
+struct symbol_private {
+	struct storage *addr;
+};
+
+enum atom_type {
+	ATOM_TEXT,
+	ATOM_INSN,
+	ATOM_CSTR,
+};
+
+struct atom {
+	enum atom_type type;
+	union {
+		/* stuff for text */
+		struct {
+			char *text;
+			unsigned int text_len;  /* w/o terminating null */
+		};
+
+		/* stuff for insns */
+		struct {
+			char insn[32];
+			char comment[40];
+			struct storage *op1;
+			struct storage *op2;
+		};
+
+		/* stuff for C strings */
+		struct {
+			struct string *string;
+			int label;
+		};
+	};
+};
+
+
+static struct function *current_func = NULL;
+static struct textbuf *unit_post_text = NULL;
+static const char *current_section;
+
+static void emit_comment(const char * fmt, ...) FORMAT_ATTR(1);
+static void emit_move(struct storage *src, struct storage *dest,
+		      struct symbol *ctype, const char *comment);
+static int type_is_signed(struct symbol *sym);
+static struct storage *x86_address_gen(struct expression *expr);
+static struct storage *x86_symbol_expr(struct symbol *sym);
+static void x86_symbol(struct symbol *sym);
+static struct storage *x86_statement(struct statement *stmt);
+static struct storage *x86_expression(struct expression *expr);
+
+enum registers {
+	NOREG,
+	 AL,  DL,  CL,  BL,  AH,  DH,  CH,  BH,	// 8-bit
+	 AX,  DX,  CX,  BX,  SI,  DI,  BP,  SP,	// 16-bit
+	EAX, EDX, ECX, EBX, ESI, EDI, EBP, ESP,	// 32-bit
+	EAX_EDX, ECX_EBX, ESI_EDI,		// 64-bit
+};
+
+/* This works on regno's, reg_info's and hardreg_storage's */
+#define byte_reg(reg) ((reg) - 16)
+#define highbyte_reg(reg) ((reg)-12)
+#define word_reg(reg) ((reg)-8)
+
+#define REGINFO(nr, str, conflicts...)	[nr] = { .name = str, .aliases = { nr , conflicts } }
+
+static struct reg_info reg_info_table[] = {
+	REGINFO( AL,  "%al", AX, EAX, EAX_EDX),
+	REGINFO( DL,  "%dl", DX, EDX, EAX_EDX),
+	REGINFO( CL,  "%cl", CX, ECX, ECX_EBX),
+	REGINFO( BL,  "%bl", BX, EBX, ECX_EBX),
+	REGINFO( AH,  "%ah", AX, EAX, EAX_EDX),
+	REGINFO( DH,  "%dh", DX, EDX, EAX_EDX),
+	REGINFO( CH,  "%ch", CX, ECX, ECX_EBX),
+	REGINFO( BH,  "%bh", BX, EBX, ECX_EBX),
+	REGINFO( AX,  "%ax", AL, AH, EAX, EAX_EDX),
+	REGINFO( DX,  "%dx", DL, DH, EDX, EAX_EDX),
+	REGINFO( CX,  "%cx", CL, CH, ECX, ECX_EBX),
+	REGINFO( BX,  "%bx", BL, BH, EBX, ECX_EBX),
+	REGINFO( SI,  "%si", ESI, ESI_EDI),
+	REGINFO( DI,  "%di", EDI, ESI_EDI),
+	REGINFO( BP,  "%bp", EBP),
+	REGINFO( SP,  "%sp", ESP),
+	REGINFO(EAX, "%eax", AL, AH, AX, EAX_EDX),
+	REGINFO(EDX, "%edx", DL, DH, DX, EAX_EDX),
+	REGINFO(ECX, "%ecx", CL, CH, CX, ECX_EBX),
+	REGINFO(EBX, "%ebx", BL, BH, BX, ECX_EBX),
+	REGINFO(ESI, "%esi", SI, ESI_EDI),
+	REGINFO(EDI, "%edi", DI, ESI_EDI),
+	REGINFO(EBP, "%ebp", BP),
+	REGINFO(ESP, "%esp", SP),
+	REGINFO(EAX_EDX, "%eax:%edx", AL, AH, AX, EAX, DL, DH, DX, EDX),
+	REGINFO(ECX_EBX, "%ecx:%ebx", CL, CH, CX, ECX, BL, BH, BX, EBX),
+	REGINFO(ESI_EDI, "%esi:%edi", SI, ESI, DI, EDI),
+};
+
+#define REGSTORAGE(nr) [nr] = { .type = STOR_REG, .reg = reg_info_table + (nr) }
+
+static struct storage hardreg_storage_table[] = {
+	REGSTORAGE(AL), REGSTORAGE(DL), REGSTORAGE(CL), REGSTORAGE(BL),
+	REGSTORAGE(AH), REGSTORAGE(DH), REGSTORAGE(CH), REGSTORAGE(BH),
+	REGSTORAGE(AX), REGSTORAGE(DX), REGSTORAGE(CX), REGSTORAGE(BX),
+	REGSTORAGE(SI), REGSTORAGE(DI), REGSTORAGE(BP), REGSTORAGE(SP),
+	REGSTORAGE(EAX), REGSTORAGE(EDX), REGSTORAGE(ECX), REGSTORAGE(EBX),
+	REGSTORAGE(ESI), REGSTORAGE(EDI), REGSTORAGE(EBP), REGSTORAGE(ESP),
+	REGSTORAGE(EAX_EDX), REGSTORAGE(ECX_EBX), REGSTORAGE(ESI_EDI),
+};
+
+#define REG_EAX (&hardreg_storage_table[EAX])
+#define REG_ECX (&hardreg_storage_table[ECX])
+#define REG_EDX (&hardreg_storage_table[EDX])
+#define REG_ESP (&hardreg_storage_table[ESP])
+#define REG_DL	(&hardreg_storage_table[DL])
+#define REG_DX	(&hardreg_storage_table[DX])
+#define REG_AL	(&hardreg_storage_table[AL])
+#define REG_AX	(&hardreg_storage_table[AX])
+
+static DECLARE_BITMAP(regs_in_use, 256);
+
+static inline struct storage * reginfo_reg(struct reg_info *info)
+{
+	return hardreg_storage_table + info->own_regno;
+}
+
+static struct storage * get_hardreg(struct storage *reg, int clear)
+{
+	struct reg_info *info = reg->reg;
+	const unsigned char *aliases;
+	int regno;
+
+	aliases = info->aliases;
+	while ((regno = *aliases++) != NOREG) {
+		if (test_bit(regno, regs_in_use))
+			goto busy;
+		if (clear)
+			reg_info_table[regno].contains = NULL;
+	}
+	set_bit(info->own_regno, regs_in_use);
+	return reg;
+busy:
+	fprintf(stderr, "register %s is busy\n", info->name);
+	if (regno + reg_info_table != info)
+		fprintf(stderr, "  conflicts with %s\n", reg_info_table[regno].name);
+	exit(1);
+}
+
+static void put_reg(struct storage *reg)
+{
+	struct reg_info *info = reg->reg;
+	int regno = info->own_regno;
+
+	if (test_and_clear_bit(regno, regs_in_use))
+		return;
+	fprintf(stderr, "freeing already free'd register %s\n", reg_info_table[regno].name);
+}
+
+struct regclass {
+	const char *name;
+	const unsigned char regs[30];
+};
+
+static struct regclass regclass_8 = { "8-bit", { AL, DL, CL, BL, AH, DH, CH, BH }};
+static struct regclass regclass_16 = { "16-bit", { AX, DX, CX, BX, SI, DI, BP }};
+static struct regclass regclass_32 = { "32-bit", { EAX, EDX, ECX, EBX, ESI, EDI, EBP }};
+static struct regclass regclass_64 = { "64-bit", { EAX_EDX, ECX_EBX, ESI_EDI }};
+
+static struct regclass regclass_32_8 = { "32-bit bytes", { EAX, EDX, ECX, EBX }};
+
+static struct regclass *get_regclass_bits(int bits)
+{
+	switch (bits) {
+	case 8: return &regclass_8;
+	case 16: return &regclass_16;
+	case 64: return &regclass_64;
+	default: return &regclass_32;
+	}
+}
+
+static struct regclass *get_regclass(struct expression *expr)
+{
+	return get_regclass_bits(expr->ctype->bit_size);
+}
+
+static int register_busy(int regno)
+{
+	if (!test_bit(regno, regs_in_use)) {
+		struct reg_info *info = reg_info_table + regno;
+		const unsigned char *regs = info->aliases+1;
+
+		while ((regno = *regs) != NOREG) {
+			regs++;
+			if (test_bit(regno, regs_in_use))
+				goto busy;
+		}
+		return 0;
+	}
+busy:
+	return 1;
+}
+
+static struct storage *get_reg(struct regclass *class)
+{
+	const unsigned char *regs = class->regs;
+	int regno;
+
+	while ((regno = *regs) != NOREG) {
+		regs++;
+		if (register_busy(regno))
+			continue;
+		return get_hardreg(hardreg_storage_table + regno, 1);
+	}
+	fprintf(stderr, "Ran out of %s registers\n", class->name);
+	exit(1);
+}
+
+static struct storage *get_reg_value(struct storage *value, struct regclass *class)
+{
+	struct reg_info *info;
+	struct storage *reg;
+
+	/* Do we already have it somewhere */
+	info = value->reg;
+	if (info && info->contains == value) {
+		emit_comment("already have register %s", info->name);
+		return get_hardreg(hardreg_storage_table + info->own_regno, 0);
+	}
+
+	reg = get_reg(class);
+	emit_move(value, reg, value->ctype, "reload register");
+	info = reg->reg;
+	info->contains = value;
+	value->reg = info;
+	return reg;
+}
+
+static struct storage *temp_from_bits(unsigned int bit_size)
+{
+	return get_reg(get_regclass_bits(bit_size));
+}
+
+static inline unsigned int pseudo_offset(struct storage *s)
+{
+	if (s->type != STOR_PSEUDO)
+		return 123456;	/* intentionally bogus value */
+
+	return s->offset;
+}
+
+static inline unsigned int arg_offset(struct storage *s)
+{
+	if (s->type != STOR_ARG)
+		return 123456;	/* intentionally bogus value */
+
+	/* FIXME: this is wrong wrong wrong */
+	return current_func->stack_size + ((1 + s->idx) * 4);
+}
+
+static const char *pretty_offset(int ofs)
+{
+	static char esp_buf[64];
+
+	if (ofs)
+		sprintf(esp_buf, "%d(%%esp)", ofs);
+	else
+		strcpy(esp_buf, "(%esp)");
+
+	return esp_buf;
+}
+
+static void stor_sym_init(struct symbol *sym)
+{
+	struct storage *stor;
+	struct symbol_private *priv;
+
+	priv = calloc(1, sizeof(*priv) + sizeof(*stor));
+	if (!priv)
+		die("OOM in stor_sym_init");
+
+	stor = (struct storage *) (priv + 1);
+
+	priv->addr = stor;
+	stor->type = STOR_SYM;
+	stor->sym = sym;
+}
+
+static const char *stor_op_name(struct storage *s)
+{
+	static char name[32];
+
+	switch (s->type) {
+	case STOR_PSEUDO:
+		strcpy(name, pretty_offset((int) pseudo_offset(s)));
+		break;
+	case STOR_ARG:
+		strcpy(name, pretty_offset((int) arg_offset(s)));
+		break;
+	case STOR_SYM:
+		strcpy(name, show_ident(s->sym->ident));
+		break;
+	case STOR_REG:
+		strcpy(name, s->reg->name);
+		break;
+	case STOR_VALUE:
+		sprintf(name, "$%Ld", s->value);
+		break;
+	case STOR_LABEL:
+		sprintf(name, "%s.L%d", s->flags & STOR_LABEL_VAL ? "$" : "",
+			s->label);
+		break;
+	case STOR_LABELSYM:
+		sprintf(name, "%s.LS%p", s->flags & STOR_LABEL_VAL ? "$" : "",
+			s->labelsym);
+		break;
+	}
+
+	return name;
+}
+
+static struct atom *new_atom(enum atom_type type)
+{
+	struct atom *atom;
+
+	atom = calloc(1, sizeof(*atom));	/* TODO: chunked alloc */
+	if (!atom)
+		die("nuclear OOM");
+
+	atom->type = type;
+
+	return atom;
+}
+
+static inline void push_cstring(struct function *f, struct string *str,
+				int label)
+{
+	struct atom *atom;
+
+	atom = new_atom(ATOM_CSTR);
+	atom->string = str;
+	atom->label = label;
+
+	add_ptr_list(&f->str_list, atom);	/* note: _not_ atom_list */
+}
+
+static inline void push_atom(struct function *f, struct atom *atom)
+{
+	add_ptr_list(&f->atom_list, atom);
+}
+
+static void push_text_atom(struct function *f, const char *text)
+{
+	struct atom *atom = new_atom(ATOM_TEXT);
+
+	atom->text = strdup(text);
+	atom->text_len = strlen(text);
+
+	push_atom(f, atom);
+}
+
+static struct storage *new_storage(enum storage_type type)
+{
+	struct storage *stor;
+
+	stor = calloc(1, sizeof(*stor));
+	if (!stor)
+		die("OOM in new_storage");
+
+	stor->type = type;
+
+	return stor;
+}
+
+static struct storage *stack_alloc(int n_bytes)
+{
+	struct function *f = current_func;
+	struct storage *stor;
+
+	assert(f != NULL);
+
+	stor = new_storage(STOR_PSEUDO);
+	stor->type = STOR_PSEUDO;
+	stor->pseudo = f->pseudo_nr;
+	stor->offset = f->stack_size; /* FIXME: stack req. natural align */
+	stor->size = n_bytes;
+	f->stack_size += n_bytes;
+	f->pseudo_nr++;
+
+	add_ptr_list(&f->pseudo_list, stor);
+
+	return stor;
+}
+
+static struct storage *new_labelsym(struct symbol *sym)
+{
+	struct storage *stor;
+
+	stor = new_storage(STOR_LABELSYM);
+
+	if (stor) {
+		stor->flags |= STOR_WANTS_FREE;
+		stor->labelsym = sym;
+	}
+
+	return stor;
+}
+
+static struct storage *new_val(long long value)
+{
+	struct storage *stor;
+
+	stor = new_storage(STOR_VALUE);
+
+	if (stor) {
+		stor->flags |= STOR_WANTS_FREE;
+		stor->value = value;
+	}
+
+	return stor;
+}
+
+static int new_label(void)
+{
+	static int label = 0;
+	return ++label;
+}
+
+static void textbuf_push(struct textbuf **buf_p, const char *text)
+{
+	struct textbuf *tmp, *list = *buf_p;
+	unsigned int text_len = strlen(text);
+	unsigned int alloc_len = text_len + 1 + sizeof(*list);
+
+	tmp = calloc(1, alloc_len);
+	if (!tmp)
+		die("OOM on textbuf alloc");
+
+	tmp->text = ((void *) tmp) + sizeof(*tmp);
+	memcpy(tmp->text, text, text_len + 1);
+	tmp->len = text_len;
+
+	/* add to end of list */
+	if (!list) {
+		list = tmp;
+		tmp->prev = tmp;
+	} else {
+		tmp->prev = list->prev;
+		tmp->prev->next = tmp;
+		list->prev = tmp;
+	}
+	tmp->next = list;
+
+	*buf_p = list;
+}
+
+static void textbuf_emit(struct textbuf **buf_p)
+{
+	struct textbuf *tmp, *list = *buf_p;
+
+	while (list) {
+		tmp = list;
+		if (tmp->next == tmp)
+			list = NULL;
+		else {
+			tmp->prev->next = tmp->next;
+			tmp->next->prev = tmp->prev;
+			list = tmp->next;
+		}
+
+		fputs(tmp->text, stdout);
+
+		free(tmp);
+	}
+
+	*buf_p = list;
+}
+
+static void insn(const char *insn, struct storage *op1, struct storage *op2,
+		 const char *comment_in)
+{
+	struct function *f = current_func;
+	struct atom *atom = new_atom(ATOM_INSN);
+
+	assert(insn != NULL);
+
+	strcpy(atom->insn, insn);
+	if (comment_in && (*comment_in))
+		strncpy(atom->comment, comment_in,
+			sizeof(atom->comment) - 1);
+
+	atom->op1 = op1;
+	atom->op2 = op2;
+
+	push_atom(f, atom);
+}
+
+static void emit_comment(const char *fmt, ...)
+{
+	struct function *f = current_func;
+	static char tmpbuf[100] = "\t# ";
+	va_list args;
+	int i;
+
+	va_start(args, fmt);
+	i = vsnprintf(tmpbuf+3, sizeof(tmpbuf)-4, fmt, args);
+	va_end(args);
+	tmpbuf[i+3] = '\n';
+	tmpbuf[i+4] = '\0';
+	push_text_atom(f, tmpbuf);
+}
+
+static void emit_label (int label, const char *comment)
+{
+	struct function *f = current_func;
+	char s[64];
+
+	if (!comment)
+		sprintf(s, ".L%d:\n", label);
+	else
+		sprintf(s, ".L%d:\t\t\t\t\t# %s\n", label, comment);
+
+	push_text_atom(f, s);
+}
+
+static void emit_labelsym (struct symbol *sym, const char *comment)
+{
+	struct function *f = current_func;
+	char s[64];
+
+	if (!comment)
+		sprintf(s, ".LS%p:\n", sym);
+	else
+		sprintf(s, ".LS%p:\t\t\t\t# %s\n", sym, comment);
+
+	push_text_atom(f, s);
+}
+
+void emit_unit_begin(const char *basename)
+{
+	printf("\t.file\t\"%s\"\n", basename);
+}
+
+void emit_unit_end(void)
+{
+	textbuf_emit(&unit_post_text);
+	printf("\t.ident\t\"sparse silly x86 backend (version %s)\"\n", SPARSE_VERSION);
+}
+
+/* conditionally switch sections */
+static void emit_section(const char *s)
+{
+	if (s == current_section)
+		return;
+	if (current_section && (!strcmp(s, current_section)))
+		return;
+
+	printf("\t%s\n", s);
+	current_section = s;
+}
+
+static void emit_insn_atom(struct function *f, struct atom *atom)
+{
+	char s[128];
+	char comment[64];
+	struct storage *op1 = atom->op1;
+	struct storage *op2 = atom->op2;
+
+	if (atom->comment[0])
+		sprintf(comment, "\t\t# %s", atom->comment);
+	else
+		comment[0] = 0;
+
+	if (atom->op2) {
+		char tmp[16];
+		strcpy(tmp, stor_op_name(op1));
+		sprintf(s, "\t%s\t%s, %s%s\n",
+			atom->insn, tmp, stor_op_name(op2), comment);
+	} else if (atom->op1)
+		sprintf(s, "\t%s\t%s%s%s\n",
+			atom->insn, stor_op_name(op1),
+			comment[0] ? "\t" : "", comment);
+	else
+		sprintf(s, "\t%s\t%s%s\n",
+			atom->insn,
+			comment[0] ? "\t\t" : "", comment);
+
+	if (write(STDOUT_FILENO, s, strlen(s)) < 0)
+		die("can't write to stdout");
+}
+
+static void emit_atom_list(struct function *f)
+{
+	struct atom *atom;
+
+	FOR_EACH_PTR(f->atom_list, atom) {
+		switch (atom->type) {
+		case ATOM_TEXT: {
+			if (write(STDOUT_FILENO, atom->text, atom->text_len) < 0)
+				die("can't write to stdout");
+			break;
+		}
+		case ATOM_INSN:
+			emit_insn_atom(f, atom);
+			break;
+		case ATOM_CSTR:
+			assert(0);
+			break;
+		}
+	} END_FOR_EACH_PTR(atom);
+}
+
+static void emit_string_list(struct function *f)
+{
+	struct atom *atom;
+
+	emit_section(".section\t.rodata");
+
+	FOR_EACH_PTR(f->str_list, atom) {
+		/* FIXME: escape " in string */
+		printf(".L%d:\n", atom->label);
+		printf("\t.string\t%s\n", show_string(atom->string));
+
+		free(atom);
+	} END_FOR_EACH_PTR(atom);
+}
+
+static void func_cleanup(struct function *f)
+{
+	struct storage *stor;
+	struct atom *atom;
+
+	FOR_EACH_PTR(f->atom_list, atom) {
+		if ((atom->type == ATOM_TEXT) && (atom->text))
+			free(atom->text);
+		if (atom->op1 && (atom->op1->flags & STOR_WANTS_FREE))
+			free(atom->op1);
+		if (atom->op2 && (atom->op2->flags & STOR_WANTS_FREE))
+			free(atom->op2);
+		free(atom);
+	} END_FOR_EACH_PTR(atom);
+
+	FOR_EACH_PTR(f->pseudo_list, stor) {
+		free(stor);
+	} END_FOR_EACH_PTR(stor);
+
+	free_ptr_list(&f->pseudo_list);
+	free(f);
+}
+
+/* function prologue */
+static void emit_func_pre(struct symbol *sym)
+{
+	struct function *f;
+	struct symbol *arg;
+	unsigned int i, argc = 0, alloc_len;
+	unsigned char *mem;
+	struct symbol_private *privbase;
+	struct storage *storage_base;
+	struct symbol *base_type = sym->ctype.base_type;
+
+	FOR_EACH_PTR(base_type->arguments, arg) {
+		argc++;
+	} END_FOR_EACH_PTR(arg);
+
+	alloc_len =
+		sizeof(*f) +
+		(argc * sizeof(struct symbol *)) +
+		(argc * sizeof(struct symbol_private)) +
+		(argc * sizeof(struct storage));
+	mem = calloc(1, alloc_len);
+	if (!mem)
+		die("OOM on func info");
+
+	f		=  (struct function *) mem;
+	mem		+= sizeof(*f);
+	f->argv		=  (struct symbol **) mem;
+	mem		+= (argc * sizeof(struct symbol *));
+	privbase	=  (struct symbol_private *) mem;
+	mem		+= (argc * sizeof(struct symbol_private));
+	storage_base	=  (struct storage *) mem;
+
+	f->argc = argc;
+	f->ret_target = new_label();
+
+	i = 0;
+	FOR_EACH_PTR(base_type->arguments, arg) {
+		f->argv[i] = arg;
+		arg->aux = &privbase[i];
+		storage_base[i].type = STOR_ARG;
+		storage_base[i].idx = i;
+		privbase[i].addr = &storage_base[i];
+		i++;
+	} END_FOR_EACH_PTR(arg);
+
+	assert(current_func == NULL);
+	current_func = f;
+}
+
+/* function epilogue */
+static void emit_func_post(struct symbol *sym)
+{
+	const char *name = show_ident(sym->ident);
+	struct function *f = current_func;
+	int stack_size = f->stack_size;
+
+	if (f->str_list)
+		emit_string_list(f);
+
+	/* function prologue */
+	emit_section(".text");
+	if ((sym->ctype.modifiers & MOD_STATIC) == 0)
+		printf(".globl %s\n", name);
+	printf("\t.type\t%s, @function\n", name);
+	printf("%s:\n", name);
+
+	if (stack_size) {
+		char pseudo_const[16];
+
+		sprintf(pseudo_const, "$%d", stack_size);
+		printf("\tsubl\t%s, %%esp\n", pseudo_const);
+	}
+
+	/* function epilogue */
+
+	/* jump target for 'return' statements */
+	emit_label(f->ret_target, NULL);
+
+	if (stack_size) {
+		struct storage *val;
+
+		val = new_storage(STOR_VALUE);
+		val->value = (long long) (stack_size);
+		val->flags = STOR_WANTS_FREE;
+
+		insn("addl", val, REG_ESP, NULL);
+	}
+
+	insn("ret", NULL, NULL, NULL);
+
+	/* output everything to stdout */
+	fflush(stdout);		/* paranoia; needed? */
+	emit_atom_list(f);
+
+	/* function footer */
+	name = show_ident(sym->ident);
+	printf("\t.size\t%s, .-%s\n", name, name);
+
+	func_cleanup(f);
+	current_func = NULL;
+}
+
+/* emit object (a.k.a. variable, a.k.a. data) prologue */
+static void emit_object_pre(const char *name, unsigned long modifiers,
+			    unsigned long alignment, unsigned int byte_size)
+{
+	if ((modifiers & MOD_STATIC) == 0)
+		printf(".globl %s\n", name);
+	emit_section(".data");
+	if (alignment)
+		printf("\t.align %lu\n", alignment);
+	printf("\t.type\t%s, @object\n", name);
+	printf("\t.size\t%s, %d\n", name, byte_size);
+	printf("%s:\n", name);
+}
+
+/* emit value (only) for an initializer scalar */
+static void emit_scalar(struct expression *expr, unsigned int bit_size)
+{
+	const char *type;
+	long long ll;
+
+	assert(expr->type == EXPR_VALUE);
+
+	if (expr->value == 0ULL) {
+		printf("\t.zero\t%d\n", bit_size / 8);
+		return;
+	}
+
+	ll = (long long) expr->value;
+
+	switch (bit_size) {
+	case 8:		type = "byte";	ll = (char) ll; break;
+	case 16:	type = "value";	ll = (short) ll; break;
+	case 32:	type = "long";	ll = (int) ll; break;
+	case 64:	type = "quad";	break;
+	default:	type = NULL;	break;
+	}
+
+	assert(type != NULL);
+
+	printf("\t.%s\t%Ld\n", type, ll);
+}
+
+static void emit_global_noinit(const char *name, unsigned long modifiers,
+			       unsigned long alignment, unsigned int byte_size)
+{
+	char s[64];
+
+	if (modifiers & MOD_STATIC) {
+		sprintf(s, "\t.local\t%s\n", name);
+		textbuf_push(&unit_post_text, s);
+	}
+	if (alignment)
+		sprintf(s, "\t.comm\t%s,%d,%lu\n", name, byte_size, alignment);
+	else
+		sprintf(s, "\t.comm\t%s,%d\n", name, byte_size);
+	textbuf_push(&unit_post_text, s);
+}
+
+static int ea_current, ea_last;
+
+static void emit_initializer(struct symbol *sym,
+			     struct expression *expr)
+{
+	int distance = ea_current - ea_last - 1;
+
+	if (distance > 0)
+		printf("\t.zero\t%d\n", (sym->bit_size / 8) * distance);
+
+	if (expr->type == EXPR_VALUE) {
+		struct symbol *base_type = sym->ctype.base_type;
+		assert(base_type != NULL);
+
+		emit_scalar(expr, sym->bit_size / get_expression_value(base_type->array_size));
+		return;
+	}
+	if (expr->type != EXPR_INITIALIZER)
+		return;
+
+	assert(0); /* FIXME */
+}
+
+static int sort_array_cmp(const struct expression *a,
+			  const struct expression *b)
+{
+	int a_ofs = 0, b_ofs = 0;
+
+	if (a->type == EXPR_POS)
+		a_ofs = (int) a->init_offset;
+	if (b->type == EXPR_POS)
+		b_ofs = (int) b->init_offset;
+
+	return a_ofs - b_ofs;
+}
+
+/* move to front-end? */
+static void sort_array(struct expression *expr)
+{
+	struct expression *entry, **list;
+	unsigned int elem, sorted, i;
+
+	elem = expression_list_size(expr->expr_list);
+	if (!elem)
+		return;
+
+	list = malloc(sizeof(entry) * elem);
+	if (!list)
+		die("OOM in sort_array");
+
+	/* this code is no doubt evil and ignores EXPR_INDEX possibly
+	 * to its detriment and other nasty things.  improvements
+	 * welcome.
+	 */
+	i = 0;
+	sorted = 0;
+	FOR_EACH_PTR(expr->expr_list, entry) {
+		if ((entry->type == EXPR_POS) || (entry->type == EXPR_VALUE)) {
+			/* add entry to list[], in sorted order */
+			if (sorted == 0) {
+				list[0] = entry;
+				sorted = 1;
+			} else {
+				for (i = 0; i < sorted; i++)
+					if (sort_array_cmp(entry, list[i]) <= 0)
+						break;
+
+				/* If inserting into the middle of list[]
+				 * instead of appending, we memmove.
+				 * This is ugly, but thankfully
+				 * uncommon.  Input data with tons of
+				 * entries very rarely have explicit
+				 * offsets.  convert to qsort eventually...
+				 */
+				if (i != sorted)
+					memmove(&list[i + 1], &list[i],
+						(sorted - i) * sizeof(entry));
+				list[i] = entry;
+				sorted++;
+			}
+		}
+	} END_FOR_EACH_PTR(entry);
+
+	i = 0;
+	FOR_EACH_PTR(expr->expr_list, entry) {
+		if ((entry->type == EXPR_POS) || (entry->type == EXPR_VALUE))
+			*THIS_ADDRESS(entry) = list[i++];
+	} END_FOR_EACH_PTR(entry);
+
+	free(list);
+}
+
+static void emit_array(struct symbol *sym)
+{
+	struct symbol *base_type = sym->ctype.base_type;
+	struct expression *expr = sym->initializer;
+	struct expression *entry;
+
+	assert(base_type != NULL);
+
+	stor_sym_init(sym);
+
+	ea_last = -1;
+
+	emit_object_pre(show_ident(sym->ident), sym->ctype.modifiers,
+		        sym->ctype.alignment,
+			sym->bit_size / 8);
+
+	sort_array(expr);
+
+	FOR_EACH_PTR(expr->expr_list, entry) {
+		if (entry->type == EXPR_VALUE) {
+			ea_current = 0;
+			emit_initializer(sym, entry);
+			ea_last = ea_current;
+		} else if (entry->type == EXPR_POS) {
+			ea_current =
+			    entry->init_offset / (base_type->bit_size / 8);
+			emit_initializer(sym, entry->init_expr);
+			ea_last = ea_current;
+		}
+	} END_FOR_EACH_PTR(entry);
+}
+
+void emit_one_symbol(struct symbol *sym)
+{
+	x86_symbol(sym);
+}
+
+static void emit_copy(struct storage *dest, struct storage *src,
+		      struct symbol *ctype)
+{
+	struct storage *reg = NULL;
+	unsigned int bit_size;
+
+	/* FIXME: Bitfield copy! */
+
+	bit_size = src->size * 8;
+	if (!bit_size)
+		bit_size = 32;
+	if ((src->type == STOR_ARG) && (bit_size < 32))
+		bit_size = 32;
+
+	reg = temp_from_bits(bit_size);
+	emit_move(src, reg, ctype, "begin copy ..");
+
+	bit_size = dest->size * 8;
+	if (!bit_size)
+		bit_size = 32;
+	if ((dest->type == STOR_ARG) && (bit_size < 32))
+		bit_size = 32;
+
+	emit_move(reg, dest, ctype, ".... end copy");
+	put_reg(reg);
+}
+
+static void emit_store(struct expression *dest_expr, struct storage *dest,
+		       struct storage *src, int bits)
+{
+	/* FIXME: Bitfield store! */
+	printf("\tst.%d\t\tv%d,[v%d]\n", bits, src->pseudo, dest->pseudo);
+}
+
+static void emit_scalar_noinit(struct symbol *sym)
+{
+	emit_global_noinit(show_ident(sym->ident),
+			   sym->ctype.modifiers, sym->ctype.alignment,
+			   sym->bit_size / 8);
+	stor_sym_init(sym);
+}
+
+static void emit_array_noinit(struct symbol *sym)
+{
+	emit_global_noinit(show_ident(sym->ident),
+			   sym->ctype.modifiers, sym->ctype.alignment,
+			   get_expression_value(sym->array_size) * (sym->bit_size / 8));
+	stor_sym_init(sym);
+}
+
+static const char *opbits(const char *insn, unsigned int bits)
+{
+	static char opbits_str[32];
+	char c;
+
+	switch (bits) {
+	case 8:	 c = 'b'; break;
+	case 16: c = 'w'; break;
+	case 32: c = 'l'; break;
+	case 64: c = 'q'; break;
+	default: abort(); break;
+	}
+
+	sprintf(opbits_str, "%s%c", insn, c);
+
+	return opbits_str;
+}
+
+static void emit_move(struct storage *src, struct storage *dest,
+		      struct symbol *ctype, const char *comment)
+{
+	unsigned int bits;
+	unsigned int is_signed;
+	unsigned int is_dest = (src->type == STOR_REG);
+	const char *opname;
+
+	if (ctype) {
+		bits = ctype->bit_size;
+		is_signed = type_is_signed(ctype);
+	} else {
+		bits = 32;
+		is_signed = 0;
+	}
+
+	/*
+	 * Are we moving from a register to a register?
+	 * Make the new reg to be the "cache".
+	 */
+	if ((dest->type == STOR_REG) && (src->type == STOR_REG)) {
+		struct storage *backing;
+
+reg_reg_move:
+		if (dest == src)
+			return;
+
+		backing = src->reg->contains;
+		if (backing) {
+			/* Is it still valid? */
+			if (backing->reg != src->reg)
+				backing = NULL;
+			else
+				backing->reg = dest->reg;
+		}
+		dest->reg->contains = backing;
+		insn("mov", src, dest, NULL);
+		return;
+	}
+
+	/*
+	 * Are we moving to a register from a non-reg?
+	 *
+	 * See if we have the non-reg source already cached
+	 * in a register..
+	 */
+	if (dest->type == STOR_REG) {
+		if (src->reg) {
+			struct reg_info *info = src->reg;
+			if (info->contains == src) {
+				src = reginfo_reg(info);
+				goto reg_reg_move;
+			}
+		}
+		dest->reg->contains = src;
+		src->reg = dest->reg;
+	}
+
+	if (src->type == STOR_REG) {
+		/* We could just mark the register dirty here and do lazy store.. */
+		src->reg->contains = dest;
+		dest->reg = src->reg;
+	}
+
+	if ((bits == 8) || (bits == 16)) {
+		if (is_dest)
+			opname = "mov";
+		else
+			opname = is_signed ? "movsx" : "movzx";
+	} else
+		opname = "mov";
+
+	insn(opbits(opname, bits), src, dest, comment);
+}
+
+static struct storage *emit_compare(struct expression *expr)
+{
+	struct storage *left = x86_expression(expr->left);
+	struct storage *right = x86_expression(expr->right);
+	struct storage *reg1, *reg2;
+	struct storage *new, *val;
+	const char *opname = NULL;
+	unsigned int right_bits = expr->right->ctype->bit_size;
+
+	switch(expr->op) {
+	case '<': 		opname = "setl";	break;
+	case '>':		opname = "setg";	break;
+	case SPECIAL_LTE:
+				opname = "setle";	break;
+	case SPECIAL_GTE:
+				opname = "setge";	break;
+	case SPECIAL_EQUAL:	opname = "sete";	break;
+	case SPECIAL_NOTEQUAL:	opname = "setne";	break;
+	case SPECIAL_UNSIGNED_LT:
+				opname = "setb";	break;
+	case SPECIAL_UNSIGNED_GT:
+				opname = "seta";	break;
+	case SPECIAL_UNSIGNED_LTE:
+				opname = "setb";	break;
+	case SPECIAL_UNSIGNED_GTE:
+				opname = "setae";	break;
+	default:
+		assert(0);
+		break;
+	}
+
+	/* init EDX to 0 */
+	val = new_storage(STOR_VALUE);
+	val->flags = STOR_WANTS_FREE;
+
+	reg1 = get_reg(&regclass_32_8);
+	emit_move(val, reg1, NULL, NULL);
+
+	/* move op1 into EAX */
+	reg2 = get_reg_value(left, get_regclass(expr->left));
+
+	/* perform comparison, RHS (op1, right) and LHS (op2, EAX) */
+	insn(opbits("cmp", right_bits), right, reg2, NULL);
+	put_reg(reg2);
+
+	/* store result of operation, 0 or 1, in DL using SETcc */
+	insn(opname, byte_reg(reg1), NULL, NULL);
+
+	/* finally, store the result (DL) in a new pseudo / stack slot */
+	new = stack_alloc(4);
+	emit_move(reg1, new, NULL, "end EXPR_COMPARE");
+	put_reg(reg1);
+
+	return new;
+}
+
+static struct storage *emit_value(struct expression *expr)
+{
+#if 0 /* old and slow way */
+	struct storage *new = stack_alloc(4);
+	struct storage *val;
+
+	val = new_storage(STOR_VALUE);
+	val->value = (long long) expr->value;
+	val->flags = STOR_WANTS_FREE;
+	insn("movl", val, new, NULL);
+
+	return new;
+#else
+	struct storage *val;
+
+	val = new_storage(STOR_VALUE);
+	val->value = (long long) expr->value;
+
+	return val;	/* FIXME: memory leak */
+#endif
+}
+
+static struct storage *emit_divide(struct expression *expr, struct storage *left, struct storage *right)
+{
+	struct storage *eax_edx;
+	struct storage *reg, *new;
+	struct storage *val = new_storage(STOR_VALUE);
+
+	emit_comment("begin DIVIDE");
+	eax_edx = get_hardreg(hardreg_storage_table + EAX_EDX, 1);
+
+	/* init EDX to 0 */
+	val->flags = STOR_WANTS_FREE;
+	emit_move(val, REG_EDX, NULL, NULL);
+
+	new = stack_alloc(expr->ctype->bit_size / 8);
+
+	/* EAX is dividend */
+	emit_move(left, REG_EAX, NULL, NULL);
+
+	reg = get_reg_value(right, &regclass_32);
+
+	/* perform binop */
+	insn("div", reg, REG_EAX, NULL);
+	put_reg(reg);
+
+	reg = REG_EAX;
+	if (expr->op == '%')
+		reg = REG_EDX;
+	emit_move(reg, new, NULL, NULL);
+
+	put_reg(eax_edx);
+	emit_comment("end DIVIDE");
+	return new;
+}
+
+static struct storage *emit_binop(struct expression *expr)
+{
+	struct storage *left = x86_expression(expr->left);
+	struct storage *right = x86_expression(expr->right);
+	struct storage *new;
+	struct storage *dest, *src;
+	const char *opname = NULL;
+	const char *suffix = NULL;
+	char opstr[16];
+	int is_signed;
+
+	/* Divides have special register constraints */
+	if ((expr->op == '/') || (expr->op == '%'))
+		return emit_divide(expr, left, right);
+
+	is_signed = type_is_signed(expr->ctype);
+
+	switch (expr->op) {
+	case '+':
+		opname = "add";
+		break;
+	case '-':
+		opname = "sub";
+		break;
+	case '&':
+		opname = "and";
+		break;
+	case '|':
+		opname = "or";
+		break;
+	case '^':
+		opname = "xor";
+		break;
+	case SPECIAL_LEFTSHIFT:
+		opname = "shl";
+		break;
+	case SPECIAL_RIGHTSHIFT:
+		if (is_signed)
+			opname = "sar";
+		else
+			opname = "shr";
+		break;
+	case '*':
+		if (is_signed)
+			opname = "imul";
+		else
+			opname = "mul";
+		break;
+	case SPECIAL_LOGICAL_AND:
+		warning(expr->pos, "bogus bitwise and for logical op (should use '2*setne + and' or something)");
+		opname = "and";
+		break;
+	case SPECIAL_LOGICAL_OR:
+		warning(expr->pos, "bogus bitwise or for logical op (should use 'or + setne' or something)");
+		opname = "or";
+		break;
+	default:
+		error_die(expr->pos, "unhandled binop '%s'\n", show_special(expr->op));
+		break;
+	}
+
+	dest = get_reg_value(right, &regclass_32);
+	src = get_reg_value(left, &regclass_32);
+	switch (expr->ctype->bit_size) {
+	case 8:
+		suffix = "b";
+		break;
+	case 16:
+		suffix = "w";
+		break;
+	case 32:
+		suffix = "l";
+		break;
+	case 64:
+		suffix = "q";		/* FIXME */
+		break;
+	default:
+		assert(0);
+		break;
+	}
+
+	snprintf(opstr, sizeof(opstr), "%s%s", opname, suffix);
+
+	/* perform binop */
+	insn(opstr, src, dest, NULL);
+	put_reg(src);
+
+	/* store result in new pseudo / stack slot */
+	new = stack_alloc(expr->ctype->bit_size / 8);
+	emit_move(dest, new, NULL, "end EXPR_BINOP");
+
+	put_reg(dest);
+
+	return new;
+}
+
+static int emit_conditional_test(struct storage *val)
+{
+	struct storage *reg;
+	struct storage *target_val;
+	int target_false;
+
+	/* load result into EAX */
+	emit_comment("begin if/conditional");
+	reg = get_reg_value(val, &regclass_32);
+
+	/* compare result with zero */
+	insn("test", reg, reg, NULL);
+	put_reg(reg);
+
+	/* create conditional-failed label to jump to */
+	target_false = new_label();
+	target_val = new_storage(STOR_LABEL);
+	target_val->label = target_false;
+	target_val->flags = STOR_WANTS_FREE;
+	insn("jz", target_val, NULL, NULL);
+
+	return target_false;
+}
+
+static int emit_conditional_end(int target_false)
+{
+	struct storage *cond_end_st;
+	int cond_end;
+
+	/* finished generating code for if-true statement.
+	 * add a jump-to-end jump to avoid falling through
+	 * to the if-false statement code.
+	 */
+	cond_end = new_label();
+	cond_end_st = new_storage(STOR_LABEL);
+	cond_end_st->label = cond_end;
+	cond_end_st->flags = STOR_WANTS_FREE;
+	insn("jmp", cond_end_st, NULL, NULL);
+
+	/* if we have both if-true and if-false statements,
+	 * the failed-conditional case will fall through to here
+	 */
+	emit_label(target_false, NULL);
+
+	return cond_end;
+}
+
+static void emit_if_conditional(struct statement *stmt)
+{
+	struct storage *val;
+	int cond_end;
+
+	/* emit test portion of conditional */
+	val = x86_expression(stmt->if_conditional);
+	cond_end = emit_conditional_test(val);
+
+	/* emit if-true statement */
+	x86_statement(stmt->if_true);
+
+	/* emit if-false statement, if present */
+	if (stmt->if_false) {
+		cond_end = emit_conditional_end(cond_end);
+		x86_statement(stmt->if_false);
+	}
+
+	/* end of conditional; jump target for if-true branch */
+	emit_label(cond_end, "end if");
+}
+
+static struct storage *emit_inc_dec(struct expression *expr, int postop)
+{
+	struct storage *addr = x86_address_gen(expr->unop);
+	struct storage *retval;
+	char opname[16];
+
+	strcpy(opname, opbits(expr->op == SPECIAL_INCREMENT ? "inc" : "dec",
+			      expr->ctype->bit_size));
+
+	if (postop) {
+		struct storage *new = stack_alloc(4);
+
+		emit_copy(new, addr, expr->unop->ctype);
+
+		retval = new;
+	} else
+		retval = addr;
+
+	insn(opname, addr, NULL, NULL);
+
+	return retval;
+}
+
+static struct storage *emit_postop(struct expression *expr)
+{
+	return emit_inc_dec(expr, 1);
+}
+
+static struct storage *emit_return_stmt(struct statement *stmt)
+{
+	struct function *f = current_func;
+	struct expression *expr = stmt->ret_value;
+	struct storage *val = NULL, *jmplbl;
+
+	if (expr && expr->ctype) {
+		val = x86_expression(expr);
+		assert(val != NULL);
+		emit_move(val, REG_EAX, expr->ctype, "return");
+	}
+
+	jmplbl = new_storage(STOR_LABEL);
+	jmplbl->flags |= STOR_WANTS_FREE;
+	jmplbl->label = f->ret_target;
+	insn("jmp", jmplbl, NULL, NULL);
+
+	return val;
+}
+
+static struct storage *emit_conditional_expr(struct expression *expr)
+{
+	struct storage *cond, *true = NULL, *false = NULL;
+	struct storage *new = stack_alloc(expr->ctype->bit_size / 8);
+	int target_false, cond_end;
+
+	/* evaluate conditional */
+	cond = x86_expression(expr->conditional);
+	target_false = emit_conditional_test(cond);
+
+	/* handle if-true part of the expression */
+	true = x86_expression(expr->cond_true);
+
+	emit_copy(new, true, expr->ctype);
+
+	cond_end = emit_conditional_end(target_false);
+
+	/* handle if-false part of the expression */
+	false = x86_expression(expr->cond_false);
+
+	emit_copy(new, false, expr->ctype);
+
+	/* end of conditional; jump target for if-true branch */
+	emit_label(cond_end, "end conditional");
+
+	return new;
+}
+
+static struct storage *emit_select_expr(struct expression *expr)
+{
+	struct storage *cond = x86_expression(expr->conditional);
+	struct storage *true = x86_expression(expr->cond_true);
+	struct storage *false = x86_expression(expr->cond_false);
+	struct storage *reg_cond, *reg_true, *reg_false;
+	struct storage *new = stack_alloc(4);
+
+	emit_comment("begin SELECT");
+	reg_cond = get_reg_value(cond, get_regclass(expr->conditional));
+	reg_true = get_reg_value(true, get_regclass(expr));
+	reg_false = get_reg_value(false, get_regclass(expr));
+
+	/*
+	 * Do the actual select: check the conditional for zero,
+	 * move false over true if zero
+	 */ 
+	insn("test", reg_cond, reg_cond, NULL);
+	insn("cmovz", reg_false, reg_true, NULL);
+
+	/* Store it back */
+	emit_move(reg_true, new, expr->ctype, NULL);
+	put_reg(reg_cond);
+	put_reg(reg_true);
+	put_reg(reg_false);
+	emit_comment("end SELECT");
+	return new;
+}
+
+static struct storage *emit_symbol_expr_init(struct symbol *sym)
+{
+	struct expression *expr = sym->initializer;
+	struct symbol_private *priv = sym->aux;
+
+	if (priv == NULL) {
+		priv = calloc(1, sizeof(*priv));
+		sym->aux = priv;
+
+		if (expr == NULL) {
+			struct storage *new = stack_alloc(4);
+			fprintf(stderr, "FIXME! no value for symbol %s.  creating pseudo %d (stack offset %d)\n",
+				show_ident(sym->ident),
+				new->pseudo, new->pseudo * 4);
+			priv->addr = new;
+		} else {
+			priv->addr = x86_expression(expr);
+		}
+	}
+
+	return priv->addr;
+}
+
+static struct storage *emit_string_expr(struct expression *expr)
+{
+	struct function *f = current_func;
+	int label = new_label();
+	struct storage *new;
+
+	push_cstring(f, expr->string, label);
+
+	new = new_storage(STOR_LABEL);
+	new->label = label;
+	new->flags = STOR_LABEL_VAL | STOR_WANTS_FREE;
+	return new;
+}
+
+static struct storage *emit_cast_expr(struct expression *expr)
+{
+	struct symbol *old_type, *new_type;
+	struct storage *op = x86_expression(expr->cast_expression);
+	int oldbits, newbits;
+	struct storage *new;
+
+	old_type = expr->cast_expression->ctype;
+	new_type = expr->cast_type;
+
+	oldbits = old_type->bit_size;
+	newbits = new_type->bit_size;
+	if (oldbits >= newbits)
+		return op;
+
+	emit_move(op, REG_EAX, old_type, "begin cast ..");
+
+	new = stack_alloc(newbits / 8);
+	emit_move(REG_EAX, new, new_type, ".... end cast");
+
+	return new;
+}
+
+static struct storage *emit_regular_preop(struct expression *expr)
+{
+	struct storage *target = x86_expression(expr->unop);
+	struct storage *val, *new = stack_alloc(4);
+	const char *opname = NULL;
+
+	switch (expr->op) {
+	case '!':
+		val = new_storage(STOR_VALUE);
+		val->flags = STOR_WANTS_FREE;
+		emit_move(val, REG_EDX, NULL, NULL);
+		emit_move(target, REG_EAX, expr->unop->ctype, NULL);
+		insn("test", REG_EAX, REG_EAX, NULL);
+		insn("setz", REG_DL, NULL, NULL);
+		emit_move(REG_EDX, new, expr->unop->ctype, NULL);
+
+		break;
+	case '~':
+		opname = "not";
+	case '-':
+		if (!opname)
+			opname = "neg";
+		emit_move(target, REG_EAX, expr->unop->ctype, NULL);
+		insn(opname, REG_EAX, NULL, NULL);
+		emit_move(REG_EAX, new, expr->unop->ctype, NULL);
+		break;
+	default:
+		assert(0);
+		break;
+	}
+
+	return new;
+}
+
+static void emit_case_statement(struct statement *stmt)
+{
+	emit_labelsym(stmt->case_label, NULL);
+	x86_statement(stmt->case_statement);
+}
+
+static void emit_switch_statement(struct statement *stmt)
+{
+	struct storage *val = x86_expression(stmt->switch_expression);
+	struct symbol *sym, *default_sym = NULL;
+	struct storage *labelsym, *label;
+	int switch_end = 0;
+
+	emit_move(val, REG_EAX, stmt->switch_expression->ctype, "begin case");
+
+	/*
+	 * This is where a _real_ back-end would go through the
+	 * cases to decide whether to use a lookup table or a
+	 * series of comparisons etc
+	 */
+	FOR_EACH_PTR(stmt->switch_case->symbol_list, sym) {
+		struct statement *case_stmt = sym->stmt;
+		struct expression *expr = case_stmt->case_expression;
+		struct expression *to = case_stmt->case_to;
+
+		/* default: */
+		if (!expr)
+			default_sym = sym;
+
+		/* case NNN: */
+		else {
+			struct storage *case_val = new_val(expr->value);
+
+			assert (expr->type == EXPR_VALUE);
+
+			insn("cmpl", case_val, REG_EAX, NULL);
+
+			if (!to) {
+				labelsym = new_labelsym(sym);
+				insn("je", labelsym, NULL, NULL);
+			} else {
+				int next_test;
+
+				label = new_storage(STOR_LABEL);
+				label->flags |= STOR_WANTS_FREE;
+				label->label = next_test = new_label();
+
+				/* FIXME: signed/unsigned */
+				insn("jl", label, NULL, NULL);
+
+				case_val = new_val(to->value);
+				insn("cmpl", case_val, REG_EAX, NULL);
+
+				/* TODO: implement and use refcounting... */
+				label = new_storage(STOR_LABEL);
+				label->flags |= STOR_WANTS_FREE;
+				label->label = next_test;
+
+				/* FIXME: signed/unsigned */
+				insn("jg", label, NULL, NULL);
+
+				labelsym = new_labelsym(sym);
+				insn("jmp", labelsym, NULL, NULL);
+
+				emit_label(next_test, NULL);
+			}
+		}
+	} END_FOR_EACH_PTR(sym);
+
+	if (default_sym) {
+		labelsym = new_labelsym(default_sym);
+		insn("jmp", labelsym, NULL, "default");
+	} else {
+		label = new_storage(STOR_LABEL);
+		label->flags |= STOR_WANTS_FREE;
+		label->label = switch_end = new_label();
+		insn("jmp", label, NULL, "goto end of switch");
+	}
+
+	x86_statement(stmt->switch_statement);
+
+	if (stmt->switch_break->used)
+		emit_labelsym(stmt->switch_break, NULL);
+
+	if (switch_end)
+		emit_label(switch_end, NULL);
+}
+
+static void x86_struct_member(struct symbol *sym)
+{
+	printf("\t%s:%d:%ld at offset %ld.%d", show_ident(sym->ident), sym->bit_size, sym->ctype.alignment, sym->offset, sym->bit_offset);
+	printf("\n");
+}
+
+static void x86_symbol(struct symbol *sym)
+{
+	struct symbol *type;
+
+	if (!sym)
+		return;
+
+	type = sym->ctype.base_type;
+	if (!type)
+		return;
+
+	/*
+	 * Show actual implementation information
+	 */
+	switch (type->type) {
+
+	case SYM_ARRAY:
+		if (sym->initializer)
+			emit_array(sym);
+		else
+			emit_array_noinit(sym);
+		break;
+
+	case SYM_BASETYPE:
+		if (sym->initializer) {
+			emit_object_pre(show_ident(sym->ident),
+					sym->ctype.modifiers,
+				        sym->ctype.alignment,
+					sym->bit_size / 8);
+			emit_scalar(sym->initializer, sym->bit_size);
+			stor_sym_init(sym);
+		} else
+			emit_scalar_noinit(sym);
+		break;
+
+	case SYM_STRUCT:
+	case SYM_UNION: {
+		struct symbol *member;
+
+		printf(" {\n");
+		FOR_EACH_PTR(type->symbol_list, member) {
+			x86_struct_member(member);
+		} END_FOR_EACH_PTR(member);
+		printf("}\n");
+		break;
+	}
+
+	case SYM_FN: {
+		struct statement *stmt = type->stmt;
+		if (stmt) {
+			emit_func_pre(sym);
+			x86_statement(stmt);
+			emit_func_post(sym);
+		}
+		break;
+	}
+
+	default:
+		break;
+	}
+
+	if (sym->initializer && (type->type != SYM_BASETYPE) &&
+	    (type->type != SYM_ARRAY)) {
+		printf(" = \n");
+		x86_expression(sym->initializer);
+	}
+}
+
+static void x86_symbol_init(struct symbol *sym);
+
+static void x86_symbol_decl(struct symbol_list *syms)
+{
+	struct symbol *sym;
+	FOR_EACH_PTR(syms, sym) {
+		x86_symbol_init(sym);
+	} END_FOR_EACH_PTR(sym);
+}
+
+static void loopstk_push(int cont_lbl, int loop_bottom_lbl)
+{
+	struct function *f = current_func;
+	struct loop_stack *ls;
+
+	ls = malloc(sizeof(*ls));
+	ls->continue_lbl = cont_lbl;
+	ls->loop_bottom_lbl = loop_bottom_lbl;
+	ls->next = f->loop_stack;
+	f->loop_stack = ls;
+}
+
+static void loopstk_pop(void)
+{
+	struct function *f = current_func;
+	struct loop_stack *ls;
+
+	assert(f->loop_stack != NULL);
+	ls = f->loop_stack;
+	f->loop_stack = f->loop_stack->next;
+	free(ls);
+}
+
+static int loopstk_break(void)
+{
+	return current_func->loop_stack->loop_bottom_lbl;
+}
+
+static int loopstk_continue(void)
+{
+	return current_func->loop_stack->continue_lbl;
+}
+
+static void emit_loop(struct statement *stmt)
+{
+	struct statement  *pre_statement = stmt->iterator_pre_statement;
+	struct expression *pre_condition = stmt->iterator_pre_condition;
+	struct statement  *statement = stmt->iterator_statement;
+	struct statement  *post_statement = stmt->iterator_post_statement;
+	struct expression *post_condition = stmt->iterator_post_condition;
+	int loop_top = 0, loop_bottom, loop_continue;
+	int have_bottom = 0;
+	struct storage *val;
+
+	loop_bottom = new_label();
+	loop_continue = new_label();
+	loopstk_push(loop_continue, loop_bottom);
+
+	x86_symbol_decl(stmt->iterator_syms);
+	x86_statement(pre_statement);
+	if (!post_condition || post_condition->type != EXPR_VALUE || post_condition->value) {
+		loop_top = new_label();
+		emit_label(loop_top, "loop top");
+	}
+	if (pre_condition) {
+		if (pre_condition->type == EXPR_VALUE) {
+			if (!pre_condition->value) {
+				struct storage *lbv;
+				lbv = new_storage(STOR_LABEL);
+				lbv->label = loop_bottom;
+				lbv->flags = STOR_WANTS_FREE;
+				insn("jmp", lbv, NULL, "go to loop bottom");
+				have_bottom = 1;
+			}
+		} else {
+			struct storage *lbv = new_storage(STOR_LABEL);
+			lbv->label = loop_bottom;
+			lbv->flags = STOR_WANTS_FREE;
+			have_bottom = 1;
+
+			val = x86_expression(pre_condition);
+
+			emit_move(val, REG_EAX, NULL, "loop pre condition");
+			insn("test", REG_EAX, REG_EAX, NULL);
+			insn("jz", lbv, NULL, NULL);
+		}
+	}
+	x86_statement(statement);
+	if (stmt->iterator_continue->used)
+		emit_label(loop_continue, "'continue' iterator");
+	x86_statement(post_statement);
+	if (!post_condition) {
+		struct storage *lbv = new_storage(STOR_LABEL);
+		lbv->label = loop_top;
+		lbv->flags = STOR_WANTS_FREE;
+		insn("jmp", lbv, NULL, "go to loop top");
+	} else if (post_condition->type == EXPR_VALUE) {
+		if (post_condition->value) {
+			struct storage *lbv = new_storage(STOR_LABEL);
+			lbv->label = loop_top;
+			lbv->flags = STOR_WANTS_FREE;
+			insn("jmp", lbv, NULL, "go to loop top");
+		}
+	} else {
+		struct storage *lbv = new_storage(STOR_LABEL);
+		lbv->label = loop_top;
+		lbv->flags = STOR_WANTS_FREE;
+
+		val = x86_expression(post_condition);
+
+		emit_move(val, REG_EAX, NULL, "loop post condition");
+		insn("test", REG_EAX, REG_EAX, NULL);
+		insn("jnz", lbv, NULL, NULL);
+	}
+	if (have_bottom || stmt->iterator_break->used)
+		emit_label(loop_bottom, "loop bottom");
+
+	loopstk_pop();
+}
+
+/*
+ * Print out a statement
+ */
+static struct storage *x86_statement(struct statement *stmt)
+{
+	if (!stmt)
+		return NULL;
+	switch (stmt->type) {
+	default:
+		return NULL;
+	case STMT_RETURN:
+		return emit_return_stmt(stmt);
+	case STMT_DECLARATION:
+		x86_symbol_decl(stmt->declaration);
+		break;
+	case STMT_COMPOUND: {
+		struct statement *s;
+		struct storage *last = NULL;
+
+		FOR_EACH_PTR(stmt->stmts, s) {
+			last = x86_statement(s);
+		} END_FOR_EACH_PTR(s);
+
+		return last;
+	}
+
+	case STMT_EXPRESSION:
+		return x86_expression(stmt->expression);
+	case STMT_IF:
+		emit_if_conditional(stmt);
+		return NULL;
+
+	case STMT_CASE:
+		emit_case_statement(stmt);
+		break;
+	case STMT_SWITCH:
+		emit_switch_statement(stmt);
+		break;
+
+	case STMT_ITERATOR:
+		emit_loop(stmt);
+		break;
+
+	case STMT_NONE:
+		break;
+
+	case STMT_LABEL:
+		printf(".L%p:\n", stmt->label_identifier);
+		x86_statement(stmt->label_statement);
+		break;
+
+	case STMT_GOTO:
+		if (stmt->goto_expression) {
+			struct storage *val = x86_expression(stmt->goto_expression);
+			printf("\tgoto *v%d\n", val->pseudo);
+		} else if (!strcmp("break", show_ident(stmt->goto_label->ident))) {
+			struct storage *lbv = new_storage(STOR_LABEL);
+			lbv->label = loopstk_break();
+			lbv->flags = STOR_WANTS_FREE;
+			insn("jmp", lbv, NULL, "'break'; go to loop bottom");
+		} else if (!strcmp("continue", show_ident(stmt->goto_label->ident))) {
+			struct storage *lbv = new_storage(STOR_LABEL);
+			lbv->label = loopstk_continue();
+			lbv->flags = STOR_WANTS_FREE;
+			insn("jmp", lbv, NULL, "'continue'; go to loop top");
+		} else {
+			struct storage *labelsym = new_labelsym(stmt->goto_label);
+			insn("jmp", labelsym, NULL, NULL);
+		}
+		break;
+	case STMT_ASM:
+		printf("\tasm( .... )\n");
+		break;
+	}
+	return NULL;
+}
+
+static struct storage *x86_call_expression(struct expression *expr)
+{
+	struct function *f = current_func;
+	struct symbol *direct;
+	struct expression *arg, *fn;
+	struct storage *retval, *fncall;
+	int framesize;
+	char s[64];
+
+	if (!expr->ctype) {
+		warning(expr->pos, "\tcall with no type!");
+		return NULL;
+	}
+
+	framesize = 0;
+	FOR_EACH_PTR_REVERSE(expr->args, arg) {
+		struct storage *new = x86_expression(arg);
+		int size = arg->ctype->bit_size;
+
+		/*
+		 * FIXME: i386 SysV ABI dictates that values
+		 * smaller than 32 bits should be placed onto
+		 * the stack as 32-bit objects.  We should not
+		 * blindly do a 32-bit push on objects smaller
+		 * than 32 bits.
+		 */
+		if (size < 32)
+			size = 32;
+		insn("pushl", new, NULL,
+		     !framesize ? "begin function call" : NULL);
+
+		framesize += bits_to_bytes(size);
+	} END_FOR_EACH_PTR_REVERSE(arg);
+
+	fn = expr->fn;
+
+	/* Remove dereference, if any */
+	direct = NULL;
+	if (fn->type == EXPR_PREOP) {
+		if (fn->unop->type == EXPR_SYMBOL) {
+			struct symbol *sym = fn->unop->symbol;
+			if (sym->ctype.base_type->type == SYM_FN)
+				direct = sym;
+		}
+	}
+	if (direct) {
+		struct storage *direct_stor = new_storage(STOR_SYM);
+		direct_stor->flags |= STOR_WANTS_FREE;
+		direct_stor->sym = direct;
+		insn("call", direct_stor, NULL, NULL);
+	} else {
+		fncall = x86_expression(fn);
+		emit_move(fncall, REG_EAX, fn->ctype, NULL);
+
+		strcpy(s, "\tcall\t*%eax\n");
+		push_text_atom(f, s);
+	}
+
+	/* FIXME: pay attention to BITS_IN_POINTER */
+	if (framesize) {
+		struct storage *val = new_storage(STOR_VALUE);
+		val->value = (long long) framesize;
+		val->flags = STOR_WANTS_FREE;
+		insn("addl", val, REG_ESP, NULL);
+	}
+
+	retval = stack_alloc(4);
+	emit_move(REG_EAX, retval, NULL, "end function call");
+
+	return retval;
+}
+
+static struct storage *x86_address_gen(struct expression *expr)
+{
+	struct function *f = current_func;
+	struct storage *addr;
+	struct storage *new;
+	char s[32];
+
+	addr = x86_expression(expr->unop);
+	if (expr->unop->type == EXPR_SYMBOL)
+		return addr;
+
+	emit_move(addr, REG_EAX, NULL, "begin deref ..");
+
+	/* FIXME: operand size */
+	strcpy(s, "\tmovl\t(%eax), %ecx\n");
+	push_text_atom(f, s);
+
+	new = stack_alloc(4);
+	emit_move(REG_ECX, new, NULL, ".... end deref");
+
+	return new;
+}
+
+static struct storage *x86_assignment(struct expression *expr)
+{
+	struct expression *target = expr->left;
+	struct storage *val, *addr;
+
+	if (!expr->ctype)
+		return NULL;
+
+	val = x86_expression(expr->right);
+	addr = x86_address_gen(target);
+
+	switch (val->type) {
+	/* copy, where both operands are memory */
+	case STOR_PSEUDO:
+	case STOR_ARG:
+		emit_copy(addr, val, expr->ctype);
+		break;
+
+	/* copy, one or zero operands are memory */
+	case STOR_REG:
+	case STOR_SYM:
+	case STOR_VALUE:
+	case STOR_LABEL:
+		emit_move(val, addr, expr->left->ctype, NULL);
+		break;
+
+	case STOR_LABELSYM:
+		assert(0);
+		break;
+	}
+	return val;
+}
+
+static int x86_initialization(struct symbol *sym, struct expression *expr)
+{
+	struct storage *val, *addr;
+	int bits;
+
+	if (!expr->ctype)
+		return 0;
+
+	bits = expr->ctype->bit_size;
+	val = x86_expression(expr);
+	addr = x86_symbol_expr(sym);
+	// FIXME! The "target" expression is for bitfield store information.
+	// Leave it NULL, which works fine.
+	emit_store(NULL, addr, val, bits);
+	return 0;
+}
+
+static struct storage *x86_access(struct expression *expr)
+{
+	return x86_address_gen(expr);
+}
+
+static struct storage *x86_preop(struct expression *expr)
+{
+	/*
+	 * '*' is an lvalue access, and is fundamentally different
+	 * from an arithmetic operation. Maybe it should have an
+	 * expression type of its own..
+	 */
+	if (expr->op == '*')
+		return x86_access(expr);
+	if (expr->op == SPECIAL_INCREMENT || expr->op == SPECIAL_DECREMENT)
+		return emit_inc_dec(expr, 0);
+	return emit_regular_preop(expr);
+}
+
+static struct storage *x86_symbol_expr(struct symbol *sym)
+{
+	struct storage *new = stack_alloc(4);
+
+	if (sym->ctype.modifiers & (MOD_TOPLEVEL | MOD_EXTERN | MOD_STATIC)) {
+		printf("\tmovi.%d\t\tv%d,$%s\n", bits_in_pointer, new->pseudo, show_ident(sym->ident));
+		return new;
+	}
+	if (sym->ctype.modifiers & MOD_ADDRESSABLE) {
+		printf("\taddi.%d\t\tv%d,vFP,$%lld\n", bits_in_pointer, new->pseudo, sym->value);
+		return new;
+	}
+	printf("\taddi.%d\t\tv%d,vFP,$offsetof(%s:%p)\n", bits_in_pointer, new->pseudo, show_ident(sym->ident), sym);
+	return new;
+}
+
+static void x86_symbol_init(struct symbol *sym)
+{
+	struct symbol_private *priv = sym->aux;
+	struct expression *expr = sym->initializer;
+	struct storage *new;
+
+	if (expr)
+		new = x86_expression(expr);
+	else
+		new = stack_alloc(sym->bit_size / 8);
+
+	if (!priv) {
+		priv = calloc(1, sizeof(*priv));
+		sym->aux = priv;
+		/* FIXME: leak! we don't free... */
+		/* (well, we don't free symbols either) */
+	}
+
+	priv->addr = new;
+}
+
+static int type_is_signed(struct symbol *sym)
+{
+	if (sym->type == SYM_NODE)
+		sym = sym->ctype.base_type;
+	if (sym->type == SYM_PTR)
+		return 0;
+	return !(sym->ctype.modifiers & MOD_UNSIGNED);
+}
+
+static struct storage *x86_label_expr(struct expression *expr)
+{
+	struct storage *new = stack_alloc(4);
+	printf("\tmovi.%d\t\tv%d,.L%p\n", bits_in_pointer, new->pseudo, expr->label_symbol);
+	return new;
+}
+
+static struct storage *x86_statement_expr(struct expression *expr)
+{
+	return x86_statement(expr->statement);
+}
+
+static int x86_position_expr(struct expression *expr, struct symbol *base)
+{
+	struct storage *new = x86_expression(expr->init_expr);
+	struct symbol *ctype = expr->init_expr->ctype;
+
+	printf("\tinsert v%d at [%d:%d] of %s\n", new->pseudo,
+		expr->init_offset, ctype->bit_offset,
+		show_ident(base->ident));
+	return 0;
+}
+
+static void x86_initializer_expr(struct expression *expr, struct symbol *ctype)
+{
+	struct expression *entry;
+
+	FOR_EACH_PTR(expr->expr_list, entry) {
+		// Nested initializers have their positions already
+		// recursively calculated - just output them too
+		if (entry->type == EXPR_INITIALIZER) {
+			x86_initializer_expr(entry, ctype);
+			continue;
+		}
+
+		// Ignore initializer indexes and identifiers - the
+		// evaluator has taken them into account
+		if (entry->type == EXPR_IDENTIFIER || entry->type == EXPR_INDEX)
+			continue;
+		if (entry->type == EXPR_POS) {
+			x86_position_expr(entry, ctype);
+			continue;
+		}
+		x86_initialization(ctype, entry);
+	} END_FOR_EACH_PTR(entry);
+}
+
+/*
+ * Print out an expression. Return the pseudo that contains the
+ * variable.
+ */
+static struct storage *x86_expression(struct expression *expr)
+{
+	if (!expr)
+		return NULL;
+
+	if (!expr->ctype) {
+		struct position *pos = &expr->pos;
+		printf("\tno type at %s:%d:%d\n",
+			stream_name(pos->stream),
+			pos->line, pos->pos);
+		return NULL;
+	}
+
+	switch (expr->type) {
+	default:
+		return NULL;
+	case EXPR_CALL:
+		return x86_call_expression(expr);
+
+	case EXPR_ASSIGNMENT:
+		return x86_assignment(expr);
+
+	case EXPR_COMPARE:
+		return emit_compare(expr);
+	case EXPR_BINOP:
+	case EXPR_COMMA:
+	case EXPR_LOGICAL:
+		return emit_binop(expr);
+	case EXPR_PREOP:
+		return x86_preop(expr);
+	case EXPR_POSTOP:
+		return emit_postop(expr);
+	case EXPR_SYMBOL:
+		return emit_symbol_expr_init(expr->symbol);
+	case EXPR_DEREF:
+	case EXPR_SIZEOF:
+	case EXPR_ALIGNOF:
+		warning(expr->pos, "invalid expression after evaluation");
+		return NULL;
+	case EXPR_CAST:
+	case EXPR_FORCE_CAST:
+	case EXPR_IMPLIED_CAST:
+		return emit_cast_expr(expr);
+	case EXPR_VALUE:
+		return emit_value(expr);
+	case EXPR_STRING:
+		return emit_string_expr(expr);
+	case EXPR_INITIALIZER:
+		x86_initializer_expr(expr, expr->ctype);
+		return NULL;
+	case EXPR_SELECT:
+		return emit_select_expr(expr);
+	case EXPR_CONDITIONAL:
+		return emit_conditional_expr(expr);
+	case EXPR_STATEMENT:
+		return x86_statement_expr(expr);
+	case EXPR_LABEL:
+		return x86_label_expr(expr);
+
+	// None of these should exist as direct expressions: they are only
+	// valid as sub-expressions of initializers.
+	case EXPR_POS:
+		warning(expr->pos, "unable to show plain initializer position expression");
+		return NULL;
+	case EXPR_IDENTIFIER:
+		warning(expr->pos, "unable to show identifier expression");
+		return NULL;
+	case EXPR_INDEX:
+		warning(expr->pos, "unable to show index expression");
+		return NULL;
+	case EXPR_TYPE:
+		warning(expr->pos, "unable to show type expression");
+		return NULL;
+	case EXPR_FVALUE:
+		warning(expr->pos, "floating point support is not implemented");
+		return NULL;
+	}
+	return NULL;
+}
--- /dev/null	Fri Dec 21 15:00:10 2018
+++ new/usr/src/tools/smatch/src/compile.c	Fri Dec 21 15:00:10 2018
@@ -0,0 +1,86 @@
+/*
+ * Example trivial client program that uses the sparse library
+ * and x86 backend.
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003 Linus Torvalds
+ * Copyright 2003 Jeff Garzik
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ */
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "token.h"
+#include "parse.h"
+#include "symbol.h"
+#include "expression.h"
+#include "compile.h"
+
+static void clean_up_symbols(struct symbol_list *list)
+{
+	struct symbol *sym;
+
+	FOR_EACH_PTR(list, sym) {
+		expand_symbol(sym);
+		emit_one_symbol(sym);
+	} END_FOR_EACH_PTR(sym);
+}
+
+int main(int argc, char **argv)
+{
+	char *file;
+	struct string_list *filelist = NULL;
+
+	bits_in_bool = 8;
+
+	clean_up_symbols(sparse_initialize(argc, argv, &filelist));
+	FOR_EACH_PTR_NOTAG(filelist, file) {
+		struct symbol_list *list;
+		const char *basename = strrchr(file, '/');
+		basename = basename ?  basename+1 : file;
+
+		list = sparse(file);
+
+		// Do type evaluation and simplification
+		emit_unit_begin(basename);
+		clean_up_symbols(list);
+		emit_unit_end();
+	} END_FOR_EACH_PTR_NOTAG(file);
+
+#if 0
+	// And show the allocation statistics
+	show_ident_alloc();
+	show_token_alloc();
+	show_symbol_alloc();
+	show_expression_alloc();
+	show_statement_alloc();
+	show_string_alloc();
+	show_bytes_alloc();
+#endif
+	return 0;
+}
--- /dev/null	Fri Dec 21 15:00:11 2018
+++ new/usr/src/tools/smatch/src/compile.h	Fri Dec 21 15:00:11 2018
@@ -0,0 +1,10 @@
+#ifndef COMPILE_H
+#define COMPILE_H
+
+struct symbol;
+
+extern void emit_one_symbol(struct symbol *);
+extern void emit_unit_begin(const char *);
+extern void emit_unit_end(void);
+
+#endif /* COMPILE_H */
--- /dev/null	Fri Dec 21 15:00:11 2018
+++ new/usr/src/tools/smatch/src/cse.c	Fri Dec 21 15:00:11 2018
@@ -0,0 +1,397 @@
+/*
+ * CSE - walk the linearized instruction flow, and
+ * see if we can simplify it and apply CSE on it.
+ *
+ * Copyright (C) 2004 Linus Torvalds
+ */
+
+#include <string.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <stddef.h>
+#include <assert.h>
+
+#include "parse.h"
+#include "expression.h"
+#include "linearize.h"
+#include "flow.h"
+
+#define INSN_HASH_SIZE 256
+static struct instruction_list *insn_hash_table[INSN_HASH_SIZE];
+
+int repeat_phase;
+
+static int phi_compare(pseudo_t phi1, pseudo_t phi2)
+{
+	const struct instruction *def1 = phi1->def;
+	const struct instruction *def2 = phi2->def;
+
+	if (def1->src1 != def2->src1)
+		return def1->src1 < def2->src1 ? -1 : 1;
+	if (def1->bb != def2->bb)
+		return def1->bb < def2->bb ? -1 : 1;
+	return 0;
+}
+
+
+static void clean_up_one_instruction(struct basic_block *bb, struct instruction *insn)
+{
+	unsigned long hash;
+
+	if (!insn->bb)
+		return;
+	assert(insn->bb == bb);
+	repeat_phase |= simplify_instruction(insn);
+	if (!insn->bb)
+		return;
+	hash = (insn->opcode << 3) + (insn->size >> 3);
+	switch (insn->opcode) {
+	case OP_SEL:
+		hash += hashval(insn->src3);
+		/* Fall through */	
+
+	/* Binary arithmetic */
+	case OP_ADD: case OP_SUB:
+	case OP_MULU: case OP_MULS:
+	case OP_DIVU: case OP_DIVS:
+	case OP_MODU: case OP_MODS:
+	case OP_SHL:
+	case OP_LSR: case OP_ASR:
+	case OP_AND: case OP_OR:
+
+	/* Binary logical */
+	case OP_XOR: case OP_AND_BOOL:
+	case OP_OR_BOOL:
+
+	/* Binary comparison */
+	case OP_SET_EQ: case OP_SET_NE:
+	case OP_SET_LE: case OP_SET_GE:
+	case OP_SET_LT: case OP_SET_GT:
+	case OP_SET_B:  case OP_SET_A:
+	case OP_SET_BE: case OP_SET_AE:
+		hash += hashval(insn->src2);
+		/* Fall through */
+	
+	/* Unary */
+	case OP_NOT: case OP_NEG:
+		hash += hashval(insn->src1);
+		break;
+
+	case OP_SETVAL:
+		hash += hashval(insn->val);
+		break;
+
+	case OP_SYMADDR:
+		hash += hashval(insn->symbol);
+		break;
+
+	case OP_CAST:
+	case OP_SCAST:
+	case OP_PTRCAST:
+		/*
+		 * This is crap! Many "orig_types" are the
+		 * same as far as casts go, we should generate
+		 * some kind of "type hash" that is identical
+		 * for identical casts
+		 */
+		hash += hashval(insn->orig_type);
+		hash += hashval(insn->src);
+		break;
+
+	/* Other */
+	case OP_PHI: {
+		pseudo_t phi;
+		FOR_EACH_PTR(insn->phi_list, phi) {
+			struct instruction *def;
+			if (phi == VOID || !phi->def)
+				continue;
+			def = phi->def;
+			hash += hashval(def->src1);
+			hash += hashval(def->bb);
+		} END_FOR_EACH_PTR(phi);
+		break;
+	}
+
+	default:
+		/*
+		 * Nothing to do, don't even bother hashing them,
+		 * we're not going to try to CSE them
+		 */
+		return;
+	}
+	hash += hash >> 16;
+	hash &= INSN_HASH_SIZE-1;
+	add_instruction(insn_hash_table + hash, insn);
+}
+
+static void clean_up_insns(struct entrypoint *ep)
+{
+	struct basic_block *bb;
+
+	FOR_EACH_PTR(ep->bbs, bb) {
+		struct instruction *insn;
+		FOR_EACH_PTR(bb->insns, insn) {
+			clean_up_one_instruction(bb, insn);
+		} END_FOR_EACH_PTR(insn);
+	} END_FOR_EACH_PTR(bb);
+}
+
+/* Compare two (sorted) phi-lists */
+static int phi_list_compare(struct pseudo_list *l1, struct pseudo_list *l2)
+{
+	pseudo_t phi1, phi2;
+
+	PREPARE_PTR_LIST(l1, phi1);
+	PREPARE_PTR_LIST(l2, phi2);
+	for (;;) {
+		int cmp;
+
+		while (phi1 && (phi1 == VOID || !phi1->def))
+			NEXT_PTR_LIST(phi1);
+		while (phi2 && (phi2 == VOID || !phi2->def))
+			NEXT_PTR_LIST(phi2);
+
+		if (!phi1)
+			return phi2 ? -1 : 0;
+		if (!phi2)
+			return phi1 ? 1 : 0;
+		cmp = phi_compare(phi1, phi2);
+		if (cmp)
+			return cmp;
+		NEXT_PTR_LIST(phi1);
+		NEXT_PTR_LIST(phi2);
+	}
+	/* Not reached, but we need to make the nesting come out right */
+	FINISH_PTR_LIST(phi2);
+	FINISH_PTR_LIST(phi1);
+}
+
+static int insn_compare(const void *_i1, const void *_i2)
+{
+	const struct instruction *i1 = _i1;
+	const struct instruction *i2 = _i2;
+
+	if (i1->opcode != i2->opcode)
+		return i1->opcode < i2->opcode ? -1 : 1;
+
+	switch (i1->opcode) {
+
+	/* commutative binop */
+	case OP_ADD:
+	case OP_MULU: case OP_MULS:
+	case OP_AND_BOOL: case OP_OR_BOOL:
+	case OP_AND: case OP_OR:
+	case OP_XOR:
+	case OP_SET_EQ: case OP_SET_NE:
+		if (i1->src1 == i2->src2 && i1->src2 == i2->src1)
+			return 0;
+		goto case_binops;
+
+	case OP_SEL:
+		if (i1->src3 != i2->src3)
+			return i1->src3 < i2->src3 ? -1 : 1;
+		/* Fall-through to binops */
+
+	/* Binary arithmetic */
+	case OP_SUB:
+	case OP_DIVU: case OP_DIVS:
+	case OP_MODU: case OP_MODS:
+	case OP_SHL:
+	case OP_LSR: case OP_ASR:
+
+	/* Binary comparison */
+	case OP_SET_LE: case OP_SET_GE:
+	case OP_SET_LT: case OP_SET_GT:
+	case OP_SET_B:  case OP_SET_A:
+	case OP_SET_BE: case OP_SET_AE:
+	case_binops:
+		if (i1->src2 != i2->src2)
+			return i1->src2 < i2->src2 ? -1 : 1;
+		/* Fall through to unops */
+
+	/* Unary */
+	case OP_NOT: case OP_NEG:
+		if (i1->src1 != i2->src1)
+			return i1->src1 < i2->src1 ? -1 : 1;
+		break;
+
+	case OP_SYMADDR:
+		if (i1->symbol != i2->symbol)
+			return i1->symbol < i2->symbol ? -1 : 1;
+		break;
+
+	case OP_SETVAL:
+		if (i1->val != i2->val)
+			return i1->val < i2->val ? -1 : 1;
+		break;
+
+	/* Other */
+	case OP_PHI:
+		return phi_list_compare(i1->phi_list, i2->phi_list);
+
+	case OP_CAST:
+	case OP_SCAST:
+	case OP_PTRCAST:
+		/*
+		 * This is crap! See the comments on hashing.
+		 */
+		if (i1->orig_type != i2->orig_type)
+			return i1->orig_type < i2->orig_type ? -1 : 1;
+		if (i1->src != i2->src)
+			return i1->src < i2->src ? -1 : 1;
+		break;
+
+	default:
+		warning(i1->pos, "bad instruction on hash chain");
+	}
+	if (i1->size != i2->size)
+		return i1->size < i2->size ? -1 : 1;
+	return 0;
+}
+
+static void sort_instruction_list(struct instruction_list **list)
+{
+	sort_list((struct ptr_list **)list , insn_compare);
+}
+
+static struct instruction * cse_one_instruction(struct instruction *insn, struct instruction *def)
+{
+	convert_instruction_target(insn, def->target);
+
+	kill_instruction(insn);
+	repeat_phase |= REPEAT_CSE;
+	return def;
+}
+
+/*
+ * Does "bb1" dominate "bb2"?
+ */
+static int bb_dominates(struct entrypoint *ep, struct basic_block *bb1, struct basic_block *bb2, unsigned long generation)
+{
+	struct basic_block *parent;
+
+	/* Nothing dominates the entrypoint.. */
+	if (bb2 == ep->entry->bb)
+		return 0;
+	FOR_EACH_PTR(bb2->parents, parent) {
+		if (parent == bb1)
+			continue;
+		if (parent->generation == generation)
+			continue;
+		parent->generation = generation;
+		if (!bb_dominates(ep, bb1, parent, generation))
+			return 0;
+	} END_FOR_EACH_PTR(parent);
+	return 1;
+}
+
+static struct basic_block *trivial_common_parent(struct basic_block *bb1, struct basic_block *bb2)
+{
+	struct basic_block *parent;
+
+	if (bb_list_size(bb1->parents) != 1)
+		return NULL;
+	parent = first_basic_block(bb1->parents);
+	if (bb_list_size(bb2->parents) != 1)
+		return NULL;
+	if (first_basic_block(bb2->parents) != parent)
+		return NULL;
+	return parent;
+}
+
+static inline void remove_instruction(struct instruction_list **list, struct instruction *insn, int count)
+{
+	delete_ptr_list_entry((struct ptr_list **)list, insn, count);
+}
+
+static void add_instruction_to_end(struct instruction *insn, struct basic_block *bb)
+{
+	struct instruction *br = delete_last_instruction(&bb->insns);
+	insn->bb = bb;
+	add_instruction(&bb->insns, insn);
+	add_instruction(&bb->insns, br);
+}
+
+static struct instruction * try_to_cse(struct entrypoint *ep, struct instruction *i1, struct instruction *i2)
+{
+	struct basic_block *b1, *b2, *common;
+
+	/*
+	 * OK, i1 and i2 are the same instruction, modulo "target".
+	 * We should now see if we can combine them.
+	 */
+	b1 = i1->bb;
+	b2 = i2->bb;
+
+	/*
+	 * Currently we only handle the uninteresting degenerate case where
+	 * the CSE is inside one basic-block.
+	 */
+	if (b1 == b2) {
+		struct instruction *insn;
+		FOR_EACH_PTR(b1->insns, insn) {
+			if (insn == i1)
+				return cse_one_instruction(i2, i1);
+			if (insn == i2)
+				return cse_one_instruction(i1, i2);
+		} END_FOR_EACH_PTR(insn);
+		warning(b1->pos, "Whaa? unable to find CSE instructions");
+		return i1;
+	}
+	if (bb_dominates(ep, b1, b2, ++bb_generation))
+		return cse_one_instruction(i2, i1);
+
+	if (bb_dominates(ep, b2, b1, ++bb_generation))
+		return cse_one_instruction(i1, i2);
+
+	/* No direct dominance - but we could try to find a common ancestor.. */
+	common = trivial_common_parent(b1, b2);
+	if (common) {
+		i1 = cse_one_instruction(i2, i1);
+		remove_instruction(&b1->insns, i1, 1);
+		add_instruction_to_end(i1, common);
+	}
+
+	return i1;
+}
+
+void cleanup_and_cse(struct entrypoint *ep)
+{
+	int i;
+
+	simplify_memops(ep);
+repeat:
+	repeat_phase = 0;
+	clean_up_insns(ep);
+	if (repeat_phase & REPEAT_CFG_CLEANUP)
+		kill_unreachable_bbs(ep);
+	for (i = 0; i < INSN_HASH_SIZE; i++) {
+		struct instruction_list **list = insn_hash_table + i;
+		if (*list) {
+			if (instruction_list_size(*list) > 1) {
+				struct instruction *insn, *last;
+
+				sort_instruction_list(list);
+
+				last = NULL;
+				FOR_EACH_PTR(*list, insn) {
+					if (!insn->bb)
+						continue;
+					if (last) {
+						if (!insn_compare(last, insn))
+							insn = try_to_cse(ep, last, insn);
+					}
+					last = insn;
+				} END_FOR_EACH_PTR(insn);
+			}
+			free_ptr_list((struct ptr_list **)list);
+		}
+	}
+
+	if (repeat_phase & REPEAT_SYMBOL_CLEANUP)
+		simplify_memops(ep);
+
+	if (repeat_phase & REPEAT_CSE)
+		goto repeat;
+}
--- /dev/null	Fri Dec 21 15:00:11 2018
+++ new/usr/src/tools/smatch/src/ctags.c	Fri Dec 21 15:00:11 2018
@@ -0,0 +1,227 @@
+/*
+ * Sparse Ctags
+ *
+ * Ctags generates tags from preprocessing results.
+ *
+ * Copyright (C) 2006 Christopher Li
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "parse.h"
+#include "scope.h"
+
+static struct symbol_list *taglist = NULL;
+
+static void examine_symbol(struct symbol *sym);
+
+#define MAX(_x,_y) ((_x) > (_y) ? (_x) : (_y))
+
+static int cmp_sym(const void *m, const void *n)
+{
+	const struct ident *a = ((const struct symbol *)m)->ident;
+	const struct ident *b = ((const struct symbol *)n)->ident;
+	int ret = strncmp(a->name, b->name, MAX(a->len, b->len));
+	if (!ret) {
+		const struct position a_pos = ((const struct symbol *)m)->pos;
+		const struct position b_pos = ((const struct symbol *)n)->pos;
+
+		ret = strcmp(stream_name(a_pos.stream),
+		             stream_name(b_pos.stream));
+		if (!ret)
+			return a_pos.line < b_pos.line;
+	}
+	return ret;
+}
+
+static void show_tag_header(FILE *fp)
+{
+	fprintf(fp, "!_TAG_FILE_FORMAT\t2\t/extended format; --format=1 will not append ;\" to lines/\n");
+	fprintf(fp, "!_TAG_FILE_SORTED\t0\t/0=unsorted, 1=sorted, 2=foldcase/\n");
+	fprintf(fp, "!_TAG_PROGRAM_AUTHOR\tChristopher Li\t/sparse@chrisli.org/\n");
+	fprintf(fp, "!_TAG_PROGRAM_NAME\tSparse Ctags\t//\n");
+	fprintf(fp, "!_TAG_PROGRAM_URL\thttp://www.kernel.org/pub/software/devel/sparse/\t/official site/\n");
+	fprintf(fp, "!_TAG_PROGRAM_VERSION\t0.01\t//\n");
+}
+
+static inline void show_symbol_tag(FILE *fp, struct symbol *sym)
+{
+	fprintf(fp, "%s\t%s\t%d;\"\t%c\tfile:\n", show_ident(sym->ident),
+	       stream_name(sym->pos.stream), sym->pos.line, (int)sym->kind);
+}
+
+static void show_tags(struct symbol_list *list)
+{
+	struct symbol *sym;
+	struct ident *ident = NULL;
+	struct position pos = {};
+	static const char *filename;
+	FILE *fp;
+
+	if (!list)
+		return;
+
+	fp = fopen("tags", "w");
+	if (!fp) {
+		perror("open tags file");
+		return;
+	}
+	show_tag_header(fp);
+	FOR_EACH_PTR(list, sym) {
+		if (ident == sym->ident && pos.line == sym->pos.line &&
+		    !strcmp(filename, stream_name(sym->pos.stream)))
+			continue;
+
+		show_symbol_tag(fp, sym);
+		ident = sym->ident;
+		pos = sym->pos;
+		filename = stream_name(sym->pos.stream);
+	} END_FOR_EACH_PTR(sym);
+	fclose(fp);
+}
+
+static inline void add_tag(struct symbol *sym)
+{
+	if (sym->ident && !sym->visited) {
+		sym->visited = 1;
+		add_symbol(&taglist, sym);
+	}
+}
+
+static inline void examine_members(struct symbol_list *list)
+{
+	struct symbol *sym;
+
+	FOR_EACH_PTR(list, sym) {
+		sym->kind = 'm';
+		examine_symbol(sym);
+	} END_FOR_EACH_PTR(sym);
+}
+
+static void examine_symbol(struct symbol *sym)
+{
+	struct symbol *base = sym;
+
+	if (!sym || sym->visited)
+		return;
+	if (sym->ident && sym->ident->reserved)
+		return;
+	if (sym->type == SYM_KEYWORD || sym->type == SYM_PREPROCESSOR)
+		return;
+
+	add_tag(sym);
+	base = sym->ctype.base_type;
+
+	switch (sym->type) {
+	case SYM_NODE:
+		if (base->type == SYM_FN)
+			sym->kind = 'f';
+		examine_symbol(base);
+		break;
+	case SYM_STRUCT:
+		sym->kind = 's';
+		examine_members(sym->symbol_list);
+		break;
+	case SYM_UNION:
+		sym->kind = 'u';
+		examine_members(sym->symbol_list);
+		break;
+	case SYM_ENUM:
+		sym->kind = 'e';
+	case SYM_PTR:
+	case SYM_TYPEOF:
+	case SYM_BITFIELD:
+	case SYM_FN:
+	case SYM_ARRAY:
+		examine_symbol(sym->ctype.base_type);
+		break;
+	case SYM_BASETYPE:
+		break;
+
+	default:
+		die("unknown symbol %s namespace:%d type:%d\n", show_ident(sym->ident),
+		    sym->namespace, sym->type);
+	}
+	if (!sym->kind)
+		sym->kind = 'v';
+	return;
+}
+
+static void examine_namespace(struct symbol *sym)
+{
+	if (sym->visited)
+		return;
+	if (sym->ident && sym->ident->reserved)
+		return;
+
+	switch(sym->namespace) {
+	case NS_KEYWORD:
+	case NS_PREPROCESSOR:
+		return;
+	case NS_LABEL:
+		sym->kind = 'l';
+		break;
+	case NS_MACRO:
+	case NS_UNDEF:
+		sym->kind = 'd';
+		break;
+	case NS_TYPEDEF:
+		sym->kind = 't';
+	case NS_SYMBOL:
+	case NS_STRUCT:
+		examine_symbol(sym);
+		break;
+	default:
+		die("unknown namespace %d symbol:%s type:%d\n", sym->namespace,
+		    show_ident(sym->ident), sym->type);
+	}
+	add_tag(sym);
+}
+
+static inline void examine_symbol_list(struct symbol_list *list)
+{
+	struct symbol *sym;
+
+	if (!list)
+		return;
+	FOR_EACH_PTR(list, sym) {
+		examine_namespace(sym);
+	} END_FOR_EACH_PTR(sym);
+}
+
+int main(int argc, char **argv)
+{
+	struct string_list *filelist = NULL;
+	char *file;
+
+	examine_symbol_list(sparse_initialize(argc, argv, &filelist));
+	FOR_EACH_PTR_NOTAG(filelist, file) {
+		sparse(file);
+		examine_symbol_list(file_scope->symbols);
+	} END_FOR_EACH_PTR_NOTAG(file);
+	examine_symbol_list(global_scope->symbols);
+	sort_list((struct ptr_list **)&taglist, cmp_sym);
+	show_tags(taglist);
+	return 0;
+}
--- /dev/null	Fri Dec 21 15:00:11 2018
+++ new/usr/src/tools/smatch/src/cwchash/Makefile	Fri Dec 21 15:00:11 2018
@@ -0,0 +1,26 @@
+
+tester: hashtable.o tester.o hashtable_itr.o
+	gcc -g -Wall -O -o tester hashtable.o hashtable_itr.o tester.o -lm
+
+all: tester old_tester
+
+tester.o:	tester.c
+	gcc -g -Wall -O -c tester.c -o tester.o
+
+old_tester: hashtable_powers.o tester.o hashtable_itr.o
+	gcc -g -Wall -O -o old_tester hashtable_powers.o hashtable_itr.o tester.o
+
+hashtable_powers.o:	hashtable_powers.c
+	gcc -g -Wall -O -c hashtable_powers.c -o hashtable_powers.o
+
+hashtable.o:	hashtable.c
+	gcc -g -Wall -O -c hashtable.c -o hashtable.o
+
+hashtable_itr.o: hashtable_itr.c
+	gcc -g -Wall -O -c hashtable_itr.c -o hashtable_itr.o
+
+tidy:
+	rm *.o
+
+clean: tidy
+	rm -f tester old_tester
--- /dev/null	Fri Dec 21 15:00:11 2018
+++ new/usr/src/tools/smatch/src/cwchash/hashtable.c	Fri Dec 21 15:00:11 2018
@@ -0,0 +1,274 @@
+/* Copyright (C) 2004 Christopher Clark <firstname.lastname@cl.cam.ac.uk> */
+
+#include "hashtable.h"
+#include "hashtable_private.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+
+/*
+Credit for primes table: Aaron Krowne
+ http://br.endernet.org/~akrowne/
+ http://planetmath.org/encyclopedia/GoodHashTablePrimes.html
+*/
+static const unsigned int primes[] = {
+53, 97, 193, 389,
+769, 1543, 3079, 6151,
+12289, 24593, 49157, 98317,
+196613, 393241, 786433, 1572869,
+3145739, 6291469, 12582917, 25165843,
+50331653, 100663319, 201326611, 402653189,
+805306457, 1610612741
+};
+const unsigned int prime_table_length = sizeof(primes)/sizeof(primes[0]);
+const float max_load_factor = 0.65;
+
+/*****************************************************************************/
+struct hashtable *
+create_hashtable(unsigned int minsize,
+                 unsigned int (*hashf) (void*),
+                 int (*eqf) (void*,void*))
+{
+    struct hashtable *h;
+    unsigned int pindex, size = primes[0];
+    /* Check requested hashtable isn't too large */
+    if (minsize > (1u << 30)) return NULL;
+    /* Enforce size as prime */
+    for (pindex=0; pindex < prime_table_length; pindex++) {
+        if (primes[pindex] > minsize) { size = primes[pindex]; break; }
+    }
+    h = (struct hashtable *)malloc(sizeof(struct hashtable));
+    if (NULL == h) return NULL; /*oom*/
+    h->table = (struct entry **)malloc(sizeof(struct entry*) * size);
+    if (NULL == h->table) { free(h); return NULL; } /*oom*/
+    memset(h->table, 0, size * sizeof(struct entry *));
+    h->tablelength  = size;
+    h->primeindex   = pindex;
+    h->entrycount   = 0;
+    h->hashfn       = hashf;
+    h->eqfn         = eqf;
+    h->loadlimit    = (unsigned int) ceil(size * max_load_factor);
+    return h;
+}
+
+/*****************************************************************************/
+unsigned int
+hash(struct hashtable *h, void *k)
+{
+    /* Aim to protect against poor hash functions by adding logic here
+     * - logic taken from java 1.4 hashtable source */
+    unsigned int i = h->hashfn(k);
+    i += ~(i << 9);
+    i ^=  ((i >> 14) | (i << 18)); /* >>> */
+    i +=  (i << 4);
+    i ^=  ((i >> 10) | (i << 22)); /* >>> */
+    return i;
+}
+
+/*****************************************************************************/
+static int
+hashtable_expand(struct hashtable *h)
+{
+    /* Double the size of the table to accomodate more entries */
+    struct entry **newtable;
+    struct entry *e;
+    struct entry **pE;
+    unsigned int newsize, i, index;
+    /* Check we're not hitting max capacity */
+    if (h->primeindex == (prime_table_length - 1)) return 0;
+    newsize = primes[++(h->primeindex)];
+
+    newtable = (struct entry **)malloc(sizeof(struct entry*) * newsize);
+    if (NULL != newtable)
+    {
+        memset(newtable, 0, newsize * sizeof(struct entry *));
+        /* This algorithm is not 'stable'. ie. it reverses the list
+         * when it transfers entries between the tables */
+        for (i = 0; i < h->tablelength; i++) {
+            while (NULL != (e = h->table[i])) {
+                h->table[i] = e->next;
+                index = indexFor(newsize,e->h);
+                e->next = newtable[index];
+                newtable[index] = e;
+            }
+        }
+        free(h->table);
+        h->table = newtable;
+    }
+    /* Plan B: realloc instead */
+    else 
+    {
+        newtable = (struct entry **)
+                   realloc(h->table, newsize * sizeof(struct entry *));
+        if (NULL == newtable) { (h->primeindex)--; return 0; }
+        h->table = newtable;
+        memset(newtable[h->tablelength], 0, newsize - h->tablelength);
+        for (i = 0; i < h->tablelength; i++) {
+            for (pE = &(newtable[i]), e = *pE; e != NULL; e = *pE) {
+                index = indexFor(newsize,e->h);
+                if (index == i)
+                {
+                    pE = &(e->next);
+                }
+                else
+                {
+                    *pE = e->next;
+                    e->next = newtable[index];
+                    newtable[index] = e;
+                }
+            }
+        }
+    }
+    h->tablelength = newsize;
+    h->loadlimit   = (unsigned int) ceil(newsize * max_load_factor);
+    return -1;
+}
+
+/*****************************************************************************/
+unsigned int
+hashtable_count(struct hashtable *h)
+{
+    return h->entrycount;
+}
+
+/*****************************************************************************/
+int
+hashtable_insert(struct hashtable *h, void *k, void *v)
+{
+    /* This method allows duplicate keys - but they shouldn't be used */
+    unsigned int index;
+    struct entry *e;
+    if (++(h->entrycount) > h->loadlimit)
+    {
+        /* Ignore the return value. If expand fails, we should
+         * still try cramming just this value into the existing table
+         * -- we may not have memory for a larger table, but one more
+         * element may be ok. Next time we insert, we'll try expanding again.*/
+        hashtable_expand(h);
+    }
+    e = (struct entry *)malloc(sizeof(struct entry));
+    if (NULL == e) { --(h->entrycount); return 0; } /*oom*/
+    e->h = hash(h,k);
+    index = indexFor(h->tablelength,e->h);
+    e->k = k;
+    e->v = v;
+    e->next = h->table[index];
+    h->table[index] = e;
+    return -1;
+}
+
+/*****************************************************************************/
+void * /* returns value associated with key */
+hashtable_search(struct hashtable *h, void *k)
+{
+    struct entry *e;
+    unsigned int hashvalue, index;
+    hashvalue = hash(h,k);
+    index = indexFor(h->tablelength,hashvalue);
+    e = h->table[index];
+    while (NULL != e)
+    {
+        /* Check hash value to short circuit heavier comparison */
+        if ((hashvalue == e->h) && (h->eqfn(k, e->k))) return e->v;
+        e = e->next;
+    }
+    return NULL;
+}
+
+/*****************************************************************************/
+void * /* returns value associated with key */
+hashtable_remove(struct hashtable *h, void *k)
+{
+    /* TODO: consider compacting the table when the load factor drops enough,
+     *       or provide a 'compact' method. */
+
+    struct entry *e;
+    struct entry **pE;
+    void *v;
+    unsigned int hashvalue, index;
+
+    hashvalue = hash(h,k);
+    index = indexFor(h->tablelength,hash(h,k));
+    pE = &(h->table[index]);
+    e = *pE;
+    while (NULL != e)
+    {
+        /* Check hash value to short circuit heavier comparison */
+        if ((hashvalue == e->h) && (h->eqfn(k, e->k)))
+        {
+            *pE = e->next;
+            h->entrycount--;
+            v = e->v;
+            freekey(e->k);
+            free(e);
+            return v;
+        }
+        pE = &(e->next);
+        e = e->next;
+    }
+    return NULL;
+}
+
+/*****************************************************************************/
+/* destroy */
+void
+hashtable_destroy(struct hashtable *h, int free_values)
+{
+    unsigned int i;
+    struct entry *e, *f;
+    struct entry **table = h->table;
+    if (free_values)
+    {
+        for (i = 0; i < h->tablelength; i++)
+        {
+            e = table[i];
+            while (NULL != e)
+            { f = e; e = e->next; freekey(f->k); free(f->v); free(f); }
+        }
+    }
+    else
+    {
+        for (i = 0; i < h->tablelength; i++)
+        {
+            e = table[i];
+            while (NULL != e)
+            { f = e; e = e->next; freekey(f->k); free(f); }
+        }
+    }
+    free(h->table);
+    free(h);
+}
+
+/*
+ * Copyright (c) 2002, Christopher Clark
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 
+ * * Neither the name of the original author; nor the names of any contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ * 
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
--- /dev/null	Fri Dec 21 15:00:11 2018
+++ new/usr/src/tools/smatch/src/cwchash/hashtable.h	Fri Dec 21 15:00:11 2018
@@ -0,0 +1,199 @@
+/* Copyright (C) 2002 Christopher Clark <firstname.lastname@cl.cam.ac.uk> */
+
+#ifndef __HASHTABLE_CWC22_H__
+#define __HASHTABLE_CWC22_H__
+
+struct hashtable;
+
+/* Example of use:
+ *
+ *      struct hashtable  *h;
+ *      struct some_key   *k;
+ *      struct some_value *v;
+ *
+ *      static unsigned int         hash_from_key_fn( void *k );
+ *      static int                  keys_equal_fn ( void *key1, void *key2 );
+ *
+ *      h = create_hashtable(16, hash_from_key_fn, keys_equal_fn);
+ *      k = (struct some_key *)     malloc(sizeof(struct some_key));
+ *      v = (struct some_value *)   malloc(sizeof(struct some_value));
+ *
+ *      (initialise k and v to suitable values)
+ * 
+ *      if (! hashtable_insert(h,k,v) )
+ *      {     exit(-1);               }
+ *
+ *      if (NULL == (found = hashtable_search(h,k) ))
+ *      {    printf("not found!");                  }
+ *
+ *      if (NULL == (found = hashtable_remove(h,k) ))
+ *      {    printf("Not found\n");                 }
+ *
+ */
+
+/* Macros may be used to define type-safe(r) hashtable access functions, with
+ * methods specialized to take known key and value types as parameters.
+ * 
+ * Example:
+ *
+ * Insert this at the start of your file:
+ *
+ * DEFINE_HASHTABLE_INSERT(insert_some, struct some_key, struct some_value);
+ * DEFINE_HASHTABLE_SEARCH(search_some, struct some_key, struct some_value);
+ * DEFINE_HASHTABLE_REMOVE(remove_some, struct some_key, struct some_value);
+ *
+ * This defines the functions 'insert_some', 'search_some' and 'remove_some'.
+ * These operate just like hashtable_insert etc., with the same parameters,
+ * but their function signatures have 'struct some_key *' rather than
+ * 'void *', and hence can generate compile time errors if your program is
+ * supplying incorrect data as a key (and similarly for value).
+ *
+ * Note that the hash and key equality functions passed to create_hashtable
+ * still take 'void *' parameters instead of 'some key *'. This shouldn't be
+ * a difficult issue as they're only defined and passed once, and the other
+ * functions will ensure that only valid keys are supplied to them.
+ *
+ * The cost for this checking is increased code size and runtime overhead
+ * - if performance is important, it may be worth switching back to the
+ * unsafe methods once your program has been debugged with the safe methods.
+ * This just requires switching to some simple alternative defines - eg:
+ * #define insert_some hashtable_insert
+ *
+ */
+
+/*****************************************************************************
+ * create_hashtable
+   
+ * @name                    create_hashtable
+ * @param   minsize         minimum initial size of hashtable
+ * @param   hashfunction    function for hashing keys
+ * @param   key_eq_fn       function for determining key equality
+ * @return                  newly created hashtable or NULL on failure
+ */
+
+struct hashtable *
+create_hashtable(unsigned int minsize,
+                 unsigned int (*hashfunction) (void*),
+                 int (*key_eq_fn) (void*,void*));
+
+/*****************************************************************************
+ * hashtable_insert
+   
+ * @name        hashtable_insert
+ * @param   h   the hashtable to insert into
+ * @param   k   the key - hashtable claims ownership and will free on removal
+ * @param   v   the value - does not claim ownership
+ * @return      non-zero for successful insertion
+ *
+ * This function will cause the table to expand if the insertion would take
+ * the ratio of entries to table size over the maximum load factor.
+ *
+ * This function does not check for repeated insertions with a duplicate key.
+ * The value returned when using a duplicate key is undefined -- when
+ * the hashtable changes size, the order of retrieval of duplicate key
+ * entries is reversed.
+ * If in doubt, remove before insert.
+ */
+
+int 
+hashtable_insert(struct hashtable *h, void *k, void *v);
+
+#define DEFINE_HASHTABLE_INSERT(fnname, keytype, valuetype) \
+int fnname (struct hashtable *h, keytype *k, valuetype *v) \
+{ \
+    return hashtable_insert(h,k,v); \
+}
+
+/*****************************************************************************
+ * hashtable_search
+   
+ * @name        hashtable_search
+ * @param   h   the hashtable to search
+ * @param   k   the key to search for  - does not claim ownership
+ * @return      the value associated with the key, or NULL if none found
+ */
+
+void *
+hashtable_search(struct hashtable *h, void *k);
+
+#define DEFINE_HASHTABLE_SEARCH(fnname, keytype, valuetype) \
+valuetype * fnname (struct hashtable *h, keytype *k) \
+{ \
+    return (valuetype *) (hashtable_search(h,k)); \
+}
+
+/*****************************************************************************
+ * hashtable_remove
+   
+ * @name        hashtable_remove
+ * @param   h   the hashtable to remove the item from
+ * @param   k   the key to search for  - does not claim ownership
+ * @return      the value associated with the key, or NULL if none found
+ */
+
+void * /* returns value */
+hashtable_remove(struct hashtable *h, void *k);
+
+#define DEFINE_HASHTABLE_REMOVE(fnname, keytype, valuetype) \
+valuetype * fnname (struct hashtable *h, keytype *k) \
+{ \
+    return (valuetype *) (hashtable_remove(h,k)); \
+}
+
+
+/*****************************************************************************
+ * hashtable_count
+   
+ * @name        hashtable_count
+ * @param   h   the hashtable
+ * @return      the number of items stored in the hashtable
+ */
+unsigned int
+hashtable_count(struct hashtable *h);
+
+
+/*****************************************************************************
+ * hashtable_destroy
+   
+ * @name        hashtable_destroy
+ * @param   h   the hashtable
+ * @param       free_values     whether to call 'free' on the remaining values
+ */
+
+void
+hashtable_destroy(struct hashtable *h, int free_values);
+
+#endif /* __HASHTABLE_CWC22_H__ */
+
+/*
+ * Copyright (c) 2002, Christopher Clark
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 
+ * * Neither the name of the original author; nor the names of any contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ * 
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
--- /dev/null	Fri Dec 21 15:00:11 2018
+++ new/usr/src/tools/smatch/src/cwchash/hashtable_itr.c	Fri Dec 21 15:00:11 2018
@@ -0,0 +1,188 @@
+/* Copyright (C) 2002, 2004 Christopher Clark  <firstname.lastname@cl.cam.ac.uk> */
+
+#include "hashtable.h"
+#include "hashtable_private.h"
+#include "hashtable_itr.h"
+#include <stdlib.h> /* defines NULL */
+
+/*****************************************************************************/
+/* hashtable_iterator    - iterator constructor */
+
+struct hashtable_itr *
+hashtable_iterator(struct hashtable *h)
+{
+    unsigned int i, tablelength;
+    struct hashtable_itr *itr = (struct hashtable_itr *)
+        malloc(sizeof(struct hashtable_itr));
+    if (NULL == itr) return NULL;
+    itr->h = h;
+    itr->e = NULL;
+    itr->parent = NULL;
+    tablelength = h->tablelength;
+    itr->index = tablelength;
+    if (0 == h->entrycount) return itr;
+
+    for (i = 0; i < tablelength; i++)
+    {
+        if (NULL != h->table[i])
+        {
+            itr->e = h->table[i];
+            itr->index = i;
+            break;
+        }
+    }
+    return itr;
+}
+
+/*****************************************************************************/
+/* key      - return the key of the (key,value) pair at the current position */
+/* value    - return the value of the (key,value) pair at the current position */
+
+void *
+hashtable_iterator_key(struct hashtable_itr *i)
+{ return i->e->k; }
+
+void *
+hashtable_iterator_value(struct hashtable_itr *i)
+{ return i->e->v; }
+
+/*****************************************************************************/
+/* advance - advance the iterator to the next element
+ *           returns zero if advanced to end of table */
+
+int
+hashtable_iterator_advance(struct hashtable_itr *itr)
+{
+    unsigned int j,tablelength;
+    struct entry **table;
+    struct entry *next;
+    if (NULL == itr->e) return 0; /* stupidity check */
+
+    next = itr->e->next;
+    if (NULL != next)
+    {
+        itr->parent = itr->e;
+        itr->e = next;
+        return -1;
+    }
+    tablelength = itr->h->tablelength;
+    itr->parent = NULL;
+    if (tablelength <= (j = ++(itr->index)))
+    {
+        itr->e = NULL;
+        return 0;
+    }
+    table = itr->h->table;
+    while (NULL == (next = table[j]))
+    {
+        if (++j >= tablelength)
+        {
+            itr->index = tablelength;
+            itr->e = NULL;
+            return 0;
+        }
+    }
+    itr->index = j;
+    itr->e = next;
+    return -1;
+}
+
+/*****************************************************************************/
+/* remove - remove the entry at the current iterator position
+ *          and advance the iterator, if there is a successive
+ *          element.
+ *          If you want the value, read it before you remove:
+ *          beware memory leaks if you don't.
+ *          Returns zero if end of iteration. */
+
+int
+hashtable_iterator_remove(struct hashtable_itr *itr)
+{
+    struct entry *remember_e, *remember_parent;
+    int ret;
+
+    /* Do the removal */
+    if (NULL == (itr->parent))
+    {
+        /* element is head of a chain */
+        itr->h->table[itr->index] = itr->e->next;
+    } else {
+        /* element is mid-chain */
+        itr->parent->next = itr->e->next;
+    }
+    /* itr->e is now outside the hashtable */
+    remember_e = itr->e;
+    itr->h->entrycount--;
+    freekey(remember_e->k);
+
+    /* Advance the iterator, correcting the parent */
+    remember_parent = itr->parent;
+    ret = hashtable_iterator_advance(itr);
+    if (itr->parent == remember_e) { itr->parent = remember_parent; }
+    free(remember_e);
+    return ret;
+}
+
+/*****************************************************************************/
+int /* returns zero if not found */
+hashtable_iterator_search(struct hashtable_itr *itr,
+                          struct hashtable *h, void *k)
+{
+    struct entry *e, *parent;
+    unsigned int hashvalue, index;
+
+    hashvalue = hash(h,k);
+    index = indexFor(h->tablelength,hashvalue);
+
+    e = h->table[index];
+    parent = NULL;
+    while (NULL != e)
+    {
+        /* Check hash value to short circuit heavier comparison */
+        if ((hashvalue == e->h) && (h->eqfn(k, e->k)))
+        {
+            itr->index = index;
+            itr->e = e;
+            itr->parent = parent;
+            itr->h = h;
+            return -1;
+        }
+        parent = e;
+        e = e->next;
+    }
+    return 0;
+}
+
+
+/*
+ * Copyright (c) 2002, 2004, Christopher Clark
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 
+ * * Neither the name of the original author; nor the names of any contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ * 
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
--- /dev/null	Fri Dec 21 15:00:11 2018
+++ new/usr/src/tools/smatch/src/cwchash/hashtable_itr.h	Fri Dec 21 15:00:11 2018
@@ -0,0 +1,112 @@
+/* Copyright (C) 2002, 2004 Christopher Clark <firstname.lastname@cl.cam.ac.uk> */
+
+#ifndef __HASHTABLE_ITR_CWC22__
+#define __HASHTABLE_ITR_CWC22__
+#include "hashtable.h"
+#include "hashtable_private.h" /* needed to enable inlining */
+
+/*****************************************************************************/
+/* This struct is only concrete here to allow the inlining of two of the
+ * accessor functions. */
+struct hashtable_itr
+{
+    struct hashtable *h;
+    struct entry *e;
+    struct entry *parent;
+    unsigned int index;
+};
+
+
+/*****************************************************************************/
+/* hashtable_iterator
+ */
+
+struct hashtable_itr *
+hashtable_iterator(struct hashtable *h);
+
+/*****************************************************************************/
+/* hashtable_iterator_key
+ * - return the value of the (key,value) pair at the current position */
+
+extern inline void *
+hashtable_iterator_key(struct hashtable_itr *i)
+{
+    return i->e->k;
+}
+
+/*****************************************************************************/
+/* value - return the value of the (key,value) pair at the current position */
+
+extern inline void *
+hashtable_iterator_value(struct hashtable_itr *i)
+{
+    return i->e->v;
+}
+
+/*****************************************************************************/
+/* advance - advance the iterator to the next element
+ *           returns zero if advanced to end of table */
+
+int
+hashtable_iterator_advance(struct hashtable_itr *itr);
+
+/*****************************************************************************/
+/* remove - remove current element and advance the iterator to the next element
+ *          NB: if you need the value to free it, read it before
+ *          removing. ie: beware memory leaks!
+ *          returns zero if advanced to end of table */
+
+int
+hashtable_iterator_remove(struct hashtable_itr *itr);
+
+/*****************************************************************************/
+/* search - overwrite the supplied iterator, to point to the entry
+ *          matching the supplied key.
+            h points to the hashtable to be searched.
+ *          returns zero if not found. */
+int
+hashtable_iterator_search(struct hashtable_itr *itr,
+                          struct hashtable *h, void *k);
+
+#define DEFINE_HASHTABLE_ITERATOR_SEARCH(fnname, keytype) \
+int fnname (struct hashtable_itr *i, struct hashtable *h, keytype *k) \
+{ \
+    return (hashtable_iterator_search(i,h,k)); \
+}
+
+
+
+#endif /* __HASHTABLE_ITR_CWC22__*/
+
+/*
+ * Copyright (c) 2002, 2004, Christopher Clark
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 
+ * * Neither the name of the original author; nor the names of any contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ * 
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
--- /dev/null	Fri Dec 21 15:00:11 2018
+++ new/usr/src/tools/smatch/src/cwchash/hashtable_private.h	Fri Dec 21 15:00:11 2018
@@ -0,0 +1,85 @@
+/* Copyright (C) 2002, 2004 Christopher Clark <firstname.lastname@cl.cam.ac.uk> */
+
+#ifndef __HASHTABLE_PRIVATE_CWC22_H__
+#define __HASHTABLE_PRIVATE_CWC22_H__
+
+#include "hashtable.h"
+
+/*****************************************************************************/
+struct entry
+{
+    void *k, *v;
+    unsigned int h;
+    struct entry *next;
+};
+
+struct hashtable {
+    unsigned int tablelength;
+    struct entry **table;
+    unsigned int entrycount;
+    unsigned int loadlimit;
+    unsigned int primeindex;
+    unsigned int (*hashfn) (void *k);
+    int (*eqfn) (void *k1, void *k2);
+};
+
+/*****************************************************************************/
+unsigned int
+hash(struct hashtable *h, void *k);
+
+/*****************************************************************************/
+/* indexFor */
+static inline unsigned int
+indexFor(unsigned int tablelength, unsigned int hashvalue) {
+    return (hashvalue % tablelength);
+};
+
+/* Only works if tablelength == 2^N */
+/*static inline unsigned int
+indexFor(unsigned int tablelength, unsigned int hashvalue)
+{
+    return (hashvalue & (tablelength - 1u));
+}
+*/
+
+/*****************************************************************************/
+#define freekey(X) free(X)
+/*define freekey(X) ; */
+
+
+/*****************************************************************************/
+
+#endif /* __HASHTABLE_PRIVATE_CWC22_H__*/
+
+/*
+ * Copyright (c) 2002, Christopher Clark
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 
+ * * Neither the name of the original author; nor the names of any contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ * 
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
--- /dev/null	Fri Dec 21 15:00:11 2018
+++ new/usr/src/tools/smatch/src/cwchash/hashtable_utility.c	Fri Dec 21 15:00:11 2018
@@ -0,0 +1,71 @@
+/* Copyright (C) 2002 Christopher Clark <firstname.lastname@cl.cam.ac.uk> */
+
+#include "hashtable.h"
+#include "hashtable_private.h"
+#include "hashtable_utility.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+/*****************************************************************************/
+/* hashtable_change
+ *
+ * function to change the value associated with a key, where there already
+ * exists a value bound to the key in the hashtable.
+ * Source due to Holger Schemel.
+ * 
+ *  */
+int
+hashtable_change(struct hashtable *h, void *k, void *v)
+{
+    struct entry *e;
+    unsigned int hashvalue, index;
+    hashvalue = hash(h,k);
+    index = indexFor(h->tablelength,hashvalue);
+    e = h->table[index];
+    while (NULL != e)
+    {
+        /* Check hash value to short circuit heavier comparison */
+        if ((hashvalue == e->h) && (h->eqfn(k, e->k)))
+        {
+            free(e->v);
+            e->v = v;
+            return -1;
+        }
+        e = e->next;
+    }
+    return 0;
+}
+
+/*
+ * Copyright (c) 2002, Christopher Clark
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 
+ * * Neither the name of the original author; nor the names of any contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ * 
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
--- /dev/null	Fri Dec 21 15:00:11 2018
+++ new/usr/src/tools/smatch/src/cwchash/hashtable_utility.h	Fri Dec 21 15:00:11 2018
@@ -0,0 +1,55 @@
+/* Copyright (C) 2002 Christopher Clark <firstname.lastname@cl.cam.ac.uk> */
+
+#ifndef __HASHTABLE_CWC22_UTILITY_H__
+#define __HASHTABLE_CWC22_UTILITY_H__
+
+/*****************************************************************************
+ * hashtable_change
+ *
+ * function to change the value associated with a key, where there already
+ * exists a value bound to the key in the hashtable.
+ * Source due to Holger Schemel.
+ *
+ * @name        hashtable_change
+ * @param   h   the hashtable
+ * @param       key
+ * @param       value
+ *
+ */
+int
+hashtable_change(struct hashtable *h, void *k, void *v);
+
+#endif /* __HASHTABLE_CWC22_H__ */
+
+/*
+ * Copyright (c) 2002, Christopher Clark
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 
+ * * Neither the name of the original author; nor the names of any contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ * 
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
--- /dev/null	Fri Dec 21 15:00:11 2018
+++ new/usr/src/tools/smatch/src/cwchash/tester.c	Fri Dec 21 15:00:11 2018
@@ -0,0 +1,270 @@
+/* Copyright (C) 2002, 2004 Christopher Clark <firstname.lastname@cl.cam.ac.uk> */
+
+#include "hashtable.h"
+#include "hashtable_itr.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h> /* for memcmp */
+
+static const int ITEM_COUNT = 4000;
+
+typedef unsigned int uint32_t;
+typedef unsigned short uint16_t;
+
+/*****************************************************************************/
+struct key
+{
+    uint32_t one_ip; uint32_t two_ip; uint16_t one_port; uint16_t two_port;
+};
+
+struct value
+{
+    char *id;
+};
+
+DEFINE_HASHTABLE_INSERT(insert_some, struct key, struct value);
+DEFINE_HASHTABLE_SEARCH(search_some, struct key, struct value);
+DEFINE_HASHTABLE_REMOVE(remove_some, struct key, struct value);
+DEFINE_HASHTABLE_ITERATOR_SEARCH(search_itr_some, struct key);
+
+
+/*****************************************************************************/
+static unsigned int
+hashfromkey(void *ky)
+{
+    struct key *k = (struct key *)ky;
+    return (((k->one_ip << 17) | (k->one_ip >> 15)) ^ k->two_ip) +
+            (k->one_port * 17) + (k->two_port * 13 * 29);
+}
+
+static int
+equalkeys(void *k1, void *k2)
+{
+    return (0 == memcmp(k1,k2,sizeof(struct key)));
+}
+
+/*****************************************************************************/
+int
+main(int argc, char **argv)
+{
+    struct key *k, *kk;
+    struct value *v, *found;
+    struct hashtable *h;
+    struct hashtable_itr *itr;
+    int i;
+
+    h = create_hashtable(16, hashfromkey, equalkeys);
+    if (NULL == h) exit(-1); /*oom*/
+
+
+/*****************************************************************************/
+/* Insertion */
+    for (i = 0; i < ITEM_COUNT; i++)
+    {
+        k = (struct key *)malloc(sizeof(struct key));
+        if (NULL == k) {
+            printf("ran out of memory allocating a key\n");
+            return 1;
+        }
+        k->one_ip = 0xcfccee40 + i;
+        k->two_ip = 0xcf0cee67 - (5 * i);
+        k->one_port = 22 + (7 * i);
+        k->two_port = 5522 - (3 * i);
+        
+        v = (struct value *)malloc(sizeof(struct value));
+        v->id = "a value";
+        
+        if (!insert_some(h,k,v)) exit(-1); /*oom*/
+    }
+    printf("After insertion, hashtable contains %u items.\n",
+            hashtable_count(h));
+
+/*****************************************************************************/
+/* Hashtable search */
+    k = (struct key *)malloc(sizeof(struct key));
+    if (NULL == k) {
+        printf("ran out of memory allocating a key\n");
+        return 1;
+    }
+    
+    for (i = 0; i < ITEM_COUNT; i++)
+    {
+        k->one_ip = 0xcfccee40 + i;
+        k->two_ip = 0xcf0cee67 - (5 * i);
+        k->one_port = 22 + (7 * i);
+        k->two_port = 5522 - (3 * i);
+        
+        if (NULL == (found = search_some(h,k))) {
+            printf("BUG: key not found\n");
+        }
+    }
+
+/*****************************************************************************/
+/* Hashtable iteration */
+    /* Iterator constructor only returns a valid iterator if
+     * the hashtable is not empty */
+    itr = hashtable_iterator(h);
+    i = 0;
+    if (hashtable_count(h) > 0)
+    {
+        do {
+            kk = hashtable_iterator_key(itr);
+            v = hashtable_iterator_value(itr);
+            /* here (kk,v) are a valid (key, value) pair */
+            /* We could call 'hashtable_remove(h,kk)' - and this operation
+             * 'free's kk. However, the iterator is then broken.
+             * This is why hashtable_iterator_remove exists - see below.
+             */
+            i++;
+
+        } while (hashtable_iterator_advance(itr));
+    }
+    printf("Iterated through %u entries.\n", i);
+
+/*****************************************************************************/
+/* Hashtable iterator search */
+
+    /* Try the search some method */
+    for (i = 0; i < ITEM_COUNT; i++)
+    {
+        k->one_ip = 0xcfccee40 + i;
+        k->two_ip = 0xcf0cee67 - (5 * i);
+        k->one_port = 22 + (7 * i);
+        k->two_port = 5522 - (3 * i);
+        
+        if (0 == search_itr_some(itr,h,k)) {
+            printf("BUG: key not found searching with iterator");
+        }
+    }
+
+/*****************************************************************************/
+/* Hashtable removal */
+
+    for (i = 0; i < ITEM_COUNT; i++)
+    {
+        k->one_ip = 0xcfccee40 + i;
+        k->two_ip = 0xcf0cee67 - (5 * i);
+        k->one_port = 22 + (7 * i);
+        k->two_port = 5522 - (3 * i);
+        
+        if (NULL == (found = remove_some(h,k))) {
+            printf("BUG: key not found for removal\n");
+        }
+    }
+    printf("After removal, hashtable contains %u items.\n",
+            hashtable_count(h));
+
+/*****************************************************************************/
+/* Hashtable destroy and create */
+
+    hashtable_destroy(h, 1);
+    h = NULL;
+    free(k);
+
+    h = create_hashtable(160, hashfromkey, equalkeys);
+    if (NULL == h) {
+        printf("out of memory allocating second hashtable\n");
+        return 1;
+    }
+
+/*****************************************************************************/
+/* Hashtable insertion */
+
+    for (i = 0; i < ITEM_COUNT; i++)
+    {
+        k = (struct key *)malloc(sizeof(struct key));
+        k->one_ip = 0xcfccee40 + i;
+        k->two_ip = 0xcf0cee67 - (5 * i);
+        k->one_port = 22 + (7 * i);
+        k->two_port = 5522 - (3 * i);
+        
+        v = (struct value *)malloc(sizeof(struct value));
+        v->id = "a value";
+        
+        if (!insert_some(h,k,v))
+        {
+            printf("out of memory inserting into second hashtable\n");
+            return 1;
+        }
+    }
+    printf("After insertion, hashtable contains %u items.\n",
+            hashtable_count(h));
+
+/*****************************************************************************/
+/* Hashtable iterator search and iterator remove */
+
+    k = (struct key *)malloc(sizeof(struct key));
+    if (NULL == k) {
+        printf("ran out of memory allocating a key\n");
+        return 1;
+    }
+    
+    for (i = ITEM_COUNT - 1; i >= 0; i = i - 7)
+    {
+        k->one_ip = 0xcfccee40 + i;
+        k->two_ip = 0xcf0cee67 - (5 * i);
+        k->one_port = 22 + (7 * i);
+        k->two_port = 5522 - (3 * i);
+        
+        if (0 == search_itr_some(itr, h, k)) {
+            printf("BUG: key %u not found for search preremoval using iterator\n", i);
+            return 1;
+        }
+        if (0 == hashtable_iterator_remove(itr)) {
+            printf("BUG: key not found for removal using iterator\n");
+            return 1;
+        }
+    }
+    free(itr);
+
+/*****************************************************************************/
+/* Hashtable iterator remove and advance */
+
+    for (itr = hashtable_iterator(h);
+         hashtable_iterator_remove(itr) != 0; ) {
+        ;
+    }
+    free(itr);
+    printf("After removal, hashtable contains %u items.\n",
+            hashtable_count(h));
+
+/*****************************************************************************/
+/* Hashtable destroy */
+
+    hashtable_destroy(h, 1);
+    free(k);
+    return 0;
+}
+
+/*
+ * Copyright (c) 2002, 2004, Christopher Clark
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 
+ * * Neither the name of the original author; nor the names of any contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ * 
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
--- /dev/null	Fri Dec 21 15:00:12 2018
+++ new/usr/src/tools/smatch/src/dissect.c	Fri Dec 21 15:00:12 2018
@@ -0,0 +1,613 @@
+/*
+ * sparse/dissect.c
+ *
+ * Started by Oleg Nesterov <oleg@redhat.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "dissect.h"
+
+#define	U_VOID	 0x00
+#define	U_SELF	((1 << U_SHIFT) - 1)
+#define	U_MASK	(U_R_VAL | U_W_VAL | U_R_AOF)
+
+#define	DO_LIST(l__, p__, expr__)		\
+	do {					\
+		typeof(l__->list[0]) p__;	\
+		FOR_EACH_PTR(l__, p__)		\
+			expr__;			\
+		END_FOR_EACH_PTR(p__);		\
+	} while (0)
+
+#define	DO_2_LIST(l1__,l2__, p1__,p2__, expr__)	\
+	do {					\
+		typeof(l1__->list[0]) p1__;	\
+		typeof(l2__->list[0]) p2__;	\
+		PREPARE_PTR_LIST(l1__, p1__);	\
+		FOR_EACH_PTR(l2__, p2__)	\
+			expr__;			\
+			NEXT_PTR_LIST(p1__);	\
+		END_FOR_EACH_PTR(p2__);		\
+		FINISH_PTR_LIST(p1__);		\
+	} while (0)
+
+
+typedef unsigned usage_t;
+
+static struct reporter *reporter;
+static struct symbol *return_type;
+
+static void do_sym_list(struct symbol_list *list);
+
+static struct symbol
+	*base_type(struct symbol *sym),
+	*do_initializer(struct symbol *type, struct expression *expr),
+	*do_expression(usage_t mode, struct expression *expr),
+	*do_statement(usage_t mode, struct statement *stmt);
+
+static inline int is_ptr(struct symbol *type)
+{
+	return type->type == SYM_PTR || type->type == SYM_ARRAY;
+}
+
+static inline usage_t u_rval(usage_t mode)
+{
+	return mode & (U_R_VAL | (U_MASK << U_SHIFT))
+		? U_R_VAL : 0;
+}
+
+static inline usage_t u_addr(usage_t mode)
+{
+	return mode = mode & U_MASK
+		? U_R_AOF | (mode & U_W_AOF) : 0;
+}
+
+static usage_t u_lval(struct symbol *type)
+{
+	int wptr = is_ptr(type) && !(type->ctype.modifiers & MOD_CONST);
+	return wptr || type == &bad_ctype
+		? U_W_AOF | U_R_VAL : U_R_VAL;
+}
+
+static usage_t fix_mode(struct symbol *type, usage_t mode)
+{
+	mode &= (U_SELF | (U_SELF << U_SHIFT));
+
+	switch (type->type) {
+		case SYM_BASETYPE:
+			if (!type->ctype.base_type)
+				break;
+		case SYM_ENUM:
+		case SYM_BITFIELD:
+			if (mode & U_MASK)
+				mode &= U_SELF;
+		default:
+
+		break; case SYM_FN:
+			if (mode & U_R_VAL)
+				mode |= U_R_AOF;
+			mode &= ~(U_R_VAL | U_W_AOF);
+
+		break; case SYM_ARRAY:
+			if (mode & (U_MASK << U_SHIFT))
+				mode >>= U_SHIFT;
+			else if (mode != U_W_VAL)
+				mode = u_addr(mode);
+	}
+
+	if (!(mode & U_R_AOF))
+		mode &= ~U_W_AOF;
+
+	return mode;
+}
+
+static inline struct symbol *no_member(struct ident *name)
+{
+	static struct symbol sym = {
+		.type = SYM_BAD,
+	};
+
+	sym.ctype.base_type = &bad_ctype;
+	sym.ident = name;
+
+	return &sym;
+}
+
+static struct symbol *report_member(usage_t mode, struct position *pos,
+					struct symbol *type, struct symbol *mem)
+{
+	struct symbol *ret = mem->ctype.base_type;
+
+	if (reporter->r_member)
+		reporter->r_member(fix_mode(ret, mode), pos, type, mem);
+
+	return ret;
+}
+
+static void report_implicit(usage_t mode, struct position *pos, struct symbol *type)
+{
+	if (type->type != SYM_STRUCT && type->type != SYM_UNION)
+		return;
+
+	if (!reporter->r_member)
+		return;
+
+	if (type->ident != NULL)
+		reporter->r_member(mode, pos, type, NULL);
+
+	DO_LIST(type->symbol_list, mem,
+		report_implicit(mode, pos, base_type(mem)));
+}
+
+static inline struct symbol *expr_symbol(struct expression *expr)
+{
+	struct symbol *sym = expr->symbol;
+
+	if (!sym) {
+		sym = lookup_symbol(expr->symbol_name, NS_SYMBOL);
+
+		if (!sym) {
+			sym = alloc_symbol(expr->pos, SYM_BAD);
+			bind_symbol(sym, expr->symbol_name, NS_SYMBOL);
+			sym->ctype.modifiers = MOD_EXTERN;
+		}
+	}
+
+	if (!sym->ctype.base_type)
+		sym->ctype.base_type = &bad_ctype;
+
+	return sym;
+}
+
+static struct symbol *report_symbol(usage_t mode, struct expression *expr)
+{
+	struct symbol *sym = expr_symbol(expr);
+	struct symbol *ret = base_type(sym);
+
+	if (0 && ret->type == SYM_ENUM)
+		return report_member(mode, &expr->pos, ret, expr->symbol);
+
+	if (reporter->r_symbol)
+		reporter->r_symbol(fix_mode(ret, mode), &expr->pos, sym);
+
+	return ret;
+}
+
+static inline struct ident *mk_name(struct ident *root, struct ident *node)
+{
+	char name[256];
+
+	snprintf(name, sizeof(name), "%.*s:%.*s",
+			root ? root->len : 0, root ? root->name : "",
+			node ? node->len : 0, node ? node->name : "");
+
+	return built_in_ident(name);
+}
+
+static void examine_sym_node(struct symbol *node, struct ident *root)
+{
+	struct symbol *base;
+	struct ident *name;
+
+	if (node->examined)
+		return;
+
+	node->examined = 1;
+	name = node->ident;
+
+	while ((base = node->ctype.base_type) != NULL)
+		switch (base->type) {
+		case SYM_TYPEOF:
+			node->ctype.base_type =
+				do_expression(U_VOID, base->initializer);
+			break;
+
+		case SYM_ARRAY:
+			do_expression(U_R_VAL, base->array_size);
+		case SYM_PTR: case SYM_FN:
+			node = base;
+			break;
+
+		case SYM_STRUCT: case SYM_UNION: //case SYM_ENUM:
+			if (base->evaluated)
+				return;
+			if (!base->symbol_list)
+				return;
+			base->evaluated = 1;
+
+			if (!base->ident && name)
+				base->ident = mk_name(root, name);
+			if (base->ident && reporter->r_symdef)
+				reporter->r_symdef(base);
+			DO_LIST(base->symbol_list, mem,
+				examine_sym_node(mem, base->ident ?: root));
+		default:
+			return;
+		}
+}
+
+static struct symbol *base_type(struct symbol *sym)
+{
+	if (!sym)
+		return &bad_ctype;
+
+	if (sym->type == SYM_NODE)
+		examine_sym_node(sym, NULL);
+
+	return sym->ctype.base_type	// builtin_fn_type
+		?: &bad_ctype;
+}
+
+static struct symbol *__lookup_member(struct symbol *type, struct ident *name, int *p_addr)
+{
+	struct symbol *node;
+	int addr = 0;
+
+	FOR_EACH_PTR(type->symbol_list, node)
+		if (!name) {
+			if (addr == *p_addr)
+				return node;
+		}
+		else if (node->ident == NULL) {
+			node = __lookup_member(node->ctype.base_type, name, NULL);
+			if (node)
+				goto found;
+		}
+		else if (node->ident == name) {
+found:
+			if (p_addr)
+				*p_addr = addr;
+			return node;
+		}
+		addr++;
+	END_FOR_EACH_PTR(node);
+
+	return NULL;
+}
+
+static struct symbol *lookup_member(struct symbol *type, struct ident *name, int *addr)
+{
+	return __lookup_member(type, name, addr)
+		?: no_member(name);
+}
+
+static struct expression *peek_preop(struct expression *expr, int op)
+{
+	do {
+		if (expr->type != EXPR_PREOP)
+			break;
+		if (expr->op == op)
+			return expr->unop;
+		if (expr->op == '(')
+			expr = expr->unop;
+		else
+			break;
+	} while (expr);
+
+	return NULL;
+}
+
+static struct symbol *do_expression(usage_t mode, struct expression *expr)
+{
+	struct symbol *ret = &int_ctype;
+
+again:
+	if (expr) switch (expr->type) {
+	default:
+		warning(expr->pos, "bad expr->type: %d", expr->type);
+
+	case EXPR_TYPE:		// [struct T]; Why ???
+	case EXPR_VALUE:
+	case EXPR_FVALUE:
+
+	break; case EXPR_LABEL:
+		ret = &label_ctype;
+
+	break; case EXPR_STRING:
+		ret = &string_ctype;
+
+	break; case EXPR_STATEMENT:
+		ret = do_statement(mode, expr->statement);
+
+	break; case EXPR_SIZEOF: case EXPR_ALIGNOF: case EXPR_PTRSIZEOF:
+		do_expression(U_VOID, expr->cast_expression);
+
+	break; case EXPR_COMMA:
+		do_expression(U_VOID, expr->left);
+		ret = do_expression(mode, expr->right);
+
+	break; case EXPR_CAST: case EXPR_FORCE_CAST: //case EXPR_IMPLIED_CAST:
+		ret = base_type(expr->cast_type);
+		do_initializer(ret, expr->cast_expression);
+
+	break; case EXPR_COMPARE: case EXPR_LOGICAL:
+		mode = u_rval(mode);
+		do_expression(mode, expr->left);
+		do_expression(mode, expr->right);
+
+	break; case EXPR_CONDITIONAL: //case EXPR_SELECT:
+		do_expression(expr->cond_true
+					? U_R_VAL : U_R_VAL | mode,
+				expr->conditional);
+		ret = do_expression(mode, expr->cond_true);
+		ret = do_expression(mode, expr->cond_false);
+
+	break; case EXPR_CALL:
+		ret = do_expression(U_R_PTR, expr->fn);
+		if (is_ptr(ret))
+			ret = ret->ctype.base_type;
+		DO_2_LIST(ret->arguments, expr->args, arg, val,
+			do_expression(u_lval(base_type(arg)), val));
+		ret = ret->type == SYM_FN ? base_type(ret)
+			: &bad_ctype;
+
+	break; case EXPR_ASSIGNMENT:
+		mode |= U_W_VAL | U_R_VAL;
+		if (expr->op == '=')
+			mode &= ~U_R_VAL;
+		ret = do_expression(mode, expr->left);
+		report_implicit(mode, &expr->pos, ret);
+		mode = expr->op == '='
+			? u_lval(ret) : U_R_VAL;
+		do_expression(mode, expr->right);
+
+	break; case EXPR_BINOP: {
+		struct symbol *l, *r;
+		mode |= u_rval(mode);
+		l = do_expression(mode, expr->left);
+		r = do_expression(mode, expr->right);
+		if (expr->op != '+' && expr->op != '-')
+			;
+		else if (!is_ptr_type(r))
+			ret = l;
+		else if (!is_ptr_type(l))
+			ret = r;
+	}
+
+	break; case EXPR_PREOP: case EXPR_POSTOP: {
+		struct expression *unop = expr->unop;
+
+		switch (expr->op) {
+		case SPECIAL_INCREMENT:
+		case SPECIAL_DECREMENT:
+			mode |= U_W_VAL | U_R_VAL;
+		default:
+			mode |= u_rval(mode);
+		case '(':
+			ret = do_expression(mode, unop);
+
+		break; case '&':
+			if ((expr = peek_preop(unop, '*')))
+				goto again;
+			ret = alloc_symbol(unop->pos, SYM_PTR);
+			ret->ctype.base_type =
+				do_expression(u_addr(mode), unop);
+
+		break; case '*':
+			if ((expr = peek_preop(unop, '&')))
+				goto again;
+			if (mode & (U_MASK << U_SHIFT))
+				mode |= U_R_VAL;
+			mode <<= U_SHIFT;
+			if (mode & (U_R_AOF << U_SHIFT))
+				mode |= U_R_VAL;
+			if (mode & (U_W_VAL << U_SHIFT))
+				mode |= U_W_AOF;
+			ret = do_expression(mode, unop);
+			ret = is_ptr(ret) ? base_type(ret)
+				: &bad_ctype;
+		}
+	}
+
+	break; case EXPR_DEREF: {
+		struct symbol *p_type;
+		usage_t p_mode;
+
+		p_mode = mode & U_SELF;
+		if (!(mode & U_MASK) && (mode & (U_MASK << U_SHIFT)))
+			p_mode = U_R_VAL;
+		p_type = do_expression(p_mode, expr->deref);
+
+		ret = report_member(mode, &expr->pos, p_type,
+			lookup_member(p_type, expr->member, NULL));
+	}
+
+	break; case EXPR_OFFSETOF: {
+		struct symbol *in = base_type(expr->in);
+
+		do {
+			if (expr->op == '.') {
+				in = report_member(U_VOID, &expr->pos, in,
+					lookup_member(in, expr->ident, NULL));
+			} else {
+				do_expression(U_R_VAL, expr->index);
+				in = in->ctype.base_type;
+			}
+		} while ((expr = expr->down));
+	}
+
+	break; case EXPR_SYMBOL:
+		ret = report_symbol(mode, expr);
+	}
+
+	return ret;
+}
+
+static void do_asm_xputs(usage_t mode, struct expression_list *xputs)
+{
+	int nr = 0;
+
+	DO_LIST(xputs, expr,
+		if (++nr % 3 == 0)
+			do_expression(U_W_AOF | mode, expr));
+}
+
+static struct symbol *do_statement(usage_t mode, struct statement *stmt)
+{
+	struct symbol *ret = &void_ctype;
+
+	if (stmt) switch (stmt->type) {
+	default:
+		warning(stmt->pos, "bad stmt->type: %d", stmt->type);
+
+	case STMT_NONE:
+	case STMT_RANGE:
+	case STMT_CONTEXT:
+
+	break; case STMT_DECLARATION:
+		do_sym_list(stmt->declaration);
+
+	break; case STMT_EXPRESSION:
+		ret = do_expression(mode, stmt->expression);
+
+	break; case STMT_RETURN:
+		do_expression(u_lval(return_type), stmt->expression);
+
+	break; case STMT_ASM:
+		do_expression(U_R_VAL, stmt->asm_string);
+		do_asm_xputs(U_W_VAL, stmt->asm_outputs);
+		do_asm_xputs(U_R_VAL, stmt->asm_inputs);
+
+	break; case STMT_COMPOUND: {
+		int count;
+
+		count = statement_list_size(stmt->stmts);
+		DO_LIST(stmt->stmts, st,
+			ret = do_statement(--count ? U_VOID : mode, st));
+	}
+
+	break; case STMT_ITERATOR:
+		do_sym_list(stmt->iterator_syms);
+		do_statement(U_VOID, stmt->iterator_pre_statement);
+		do_expression(U_R_VAL, stmt->iterator_pre_condition);
+		do_statement(U_VOID, stmt->iterator_post_statement);
+		do_statement(U_VOID, stmt->iterator_statement);
+		do_expression(U_R_VAL, stmt->iterator_post_condition);
+
+	break; case STMT_IF:
+		do_expression(U_R_VAL, stmt->if_conditional);
+		do_statement(U_VOID, stmt->if_true);
+		do_statement(U_VOID, stmt->if_false);
+
+	break; case STMT_SWITCH:
+		do_expression(U_R_VAL, stmt->switch_expression);
+		do_statement(U_VOID, stmt->switch_statement);
+
+	break; case STMT_CASE:
+		do_expression(U_R_VAL, stmt->case_expression);
+		do_expression(U_R_VAL, stmt->case_to);
+		do_statement(U_VOID, stmt->case_statement);
+
+	break; case STMT_GOTO:
+		do_expression(U_R_PTR, stmt->goto_expression);
+
+	break; case STMT_LABEL:
+		do_statement(mode, stmt->label_statement);
+
+	}
+
+	return ret;
+}
+
+static struct symbol *do_initializer(struct symbol *type, struct expression *expr)
+{
+	struct symbol *m_type;
+	struct expression *m_expr;
+	int m_addr;
+
+	if (expr) switch (expr->type) {
+	default:
+		do_expression(u_lval(type), expr);
+
+	break; case EXPR_INDEX:
+		do_initializer(base_type(type), expr->idx_expression);
+
+	break; case EXPR_INITIALIZER:
+		m_addr = 0;
+		FOR_EACH_PTR(expr->expr_list, m_expr) {
+			if (type->type == SYM_ARRAY) {
+				m_type = base_type(type);
+				if (m_expr->type == EXPR_INDEX)
+					m_expr = m_expr->idx_expression;
+			} else {
+				int *m_atop = &m_addr;
+
+				m_type = type;
+				while (m_expr->type == EXPR_IDENTIFIER) {
+					m_type = report_member(U_W_VAL, &m_expr->pos, m_type,
+							lookup_member(m_type, m_expr->expr_ident, m_atop));
+					m_expr = m_expr->ident_expression;
+					m_atop = NULL;
+				}
+
+				if (m_atop) {
+					m_type = report_member(U_W_VAL, &m_expr->pos, m_type,
+							lookup_member(m_type, NULL, m_atop));
+				}
+
+				if (m_expr->type != EXPR_INITIALIZER)
+					report_implicit(U_W_VAL, &m_expr->pos, m_type);
+			}
+			do_initializer(m_type, m_expr);
+			m_addr++;
+		} END_FOR_EACH_PTR(m_expr);
+	}
+
+	return type;
+}
+
+static inline struct symbol *do_symbol(struct symbol *sym)
+{
+	struct symbol *type;
+
+	type = base_type(sym);
+
+	if (reporter->r_symdef)
+		reporter->r_symdef(sym);
+
+	switch (type->type) {
+	default:
+		if (!sym->initializer)
+			break;
+		if (reporter->r_symbol)
+			reporter->r_symbol(U_W_VAL, &sym->pos, sym);
+		do_initializer(type, sym->initializer);
+
+	break; case SYM_FN:
+		do_sym_list(type->arguments);
+		return_type = base_type(type);
+		do_statement(U_VOID, sym->ctype.modifiers & MOD_INLINE
+					? type->inline_stmt
+					: type->stmt);
+	}
+
+	return type;
+}
+
+static void do_sym_list(struct symbol_list *list)
+{
+	DO_LIST(list, sym, do_symbol(sym));
+}
+
+void dissect(struct symbol_list *list, struct reporter *rep)
+{
+	reporter = rep;
+	do_sym_list(list);
+}
--- /dev/null	Fri Dec 21 15:00:12 2018
+++ new/usr/src/tools/smatch/src/dissect.h	Fri Dec 21 15:00:12 2018
@@ -0,0 +1,29 @@
+#ifndef	DISSECT_H
+#define	DISSECT_H
+
+#include <stdio.h>
+#include "parse.h"
+#include "expression.h"
+
+#define	U_SHIFT		8
+
+#define	U_R_AOF		0x01
+#define	U_W_AOF		0x02
+
+#define	U_R_VAL		0x04
+#define	U_W_VAL		0x08
+
+#define	U_R_PTR		(U_R_VAL << U_SHIFT)
+#define	U_W_PTR		(U_W_VAL << U_SHIFT)
+
+struct reporter
+{
+	void (*r_symdef)(struct symbol *);
+
+	void (*r_symbol)(unsigned, struct position *, struct symbol *);
+	void (*r_member)(unsigned, struct position *, struct symbol *, struct symbol *);
+};
+
+extern void dissect(struct symbol_list *, struct reporter *);
+
+#endif
--- /dev/null	Fri Dec 21 15:00:12 2018
+++ new/usr/src/tools/smatch/src/evaluate.c	Fri Dec 21 15:00:12 2018
@@ -0,0 +1,3666 @@
+/*
+ * sparse/evaluate.c
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003-2004 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * Evaluate constant expressions.
+ */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <limits.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "parse.h"
+#include "token.h"
+#include "symbol.h"
+#include "target.h"
+#include "expression.h"
+
+struct symbol *current_fn;
+
+static struct symbol *degenerate(struct expression *expr);
+static struct symbol *evaluate_symbol(struct symbol *sym);
+
+static struct symbol *evaluate_symbol_expression(struct expression *expr)
+{
+	struct expression *addr;
+	struct symbol *sym = expr->symbol;
+	struct symbol *base_type;
+
+	if (!sym) {
+		expression_error(expr, "undefined identifier '%s'", show_ident(expr->symbol_name));
+		return NULL;
+	}
+
+	examine_symbol_type(sym);
+
+	base_type = get_base_type(sym);
+	if (!base_type) {
+		expression_error(expr, "identifier '%s' has no type", show_ident(expr->symbol_name));
+		return NULL;
+	}
+
+	addr = alloc_expression(expr->pos, EXPR_SYMBOL);
+	addr->symbol = sym;
+	addr->symbol_name = expr->symbol_name;
+	addr->ctype = &lazy_ptr_ctype;	/* Lazy evaluation: we need to do a proper job if somebody does &sym */
+	addr->flags = expr->flags;
+	expr->type = EXPR_PREOP;
+	expr->op = '*';
+	expr->unop = addr;
+	expr->flags = CEF_NONE;
+
+	/* The type of a symbol is the symbol itself! */
+	expr->ctype = sym;
+	return sym;
+}
+
+static struct symbol *evaluate_string(struct expression *expr)
+{
+	struct symbol *sym = alloc_symbol(expr->pos, SYM_NODE);
+	struct symbol *array = alloc_symbol(expr->pos, SYM_ARRAY);
+	struct expression *addr = alloc_expression(expr->pos, EXPR_SYMBOL);
+	struct expression *initstr = alloc_expression(expr->pos, EXPR_STRING);
+	unsigned int length = expr->string->length;
+
+	sym->array_size = alloc_const_expression(expr->pos, length);
+	sym->bit_size = bytes_to_bits(length);
+	sym->ctype.alignment = 1;
+	sym->string = 1;
+	sym->ctype.modifiers = MOD_STATIC;
+	sym->ctype.base_type = array;
+	sym->initializer = initstr;
+
+	initstr->ctype = sym;
+	initstr->string = expr->string;
+
+	array->array_size = sym->array_size;
+	array->bit_size = bytes_to_bits(length);
+	array->ctype.alignment = 1;
+	array->ctype.modifiers = MOD_STATIC;
+	array->ctype.base_type = &char_ctype;
+	
+	addr->symbol = sym;
+	addr->ctype = &lazy_ptr_ctype;
+	addr->flags = CEF_ADDR;
+
+	expr->type = EXPR_PREOP;
+	expr->op = '*';
+	expr->unop = addr;  
+	expr->ctype = sym;
+	return sym;
+}
+
+/* type has come from classify_type and is an integer type */
+static inline struct symbol *integer_promotion(struct symbol *type)
+{
+	unsigned long mod =  type->ctype.modifiers;
+	int width = type->bit_size;
+
+	/*
+	 * Bitfields always promote to the base type,
+	 * even if the bitfield might be bigger than
+	 * an "int".
+	 */
+	if (type->type == SYM_BITFIELD) {
+		type = type->ctype.base_type;
+	}
+	mod = type->ctype.modifiers;
+	if (width < bits_in_int)
+		return &int_ctype;
+
+	/* If char/short has as many bits as int, it still gets "promoted" */
+	if (mod & (MOD_CHAR | MOD_SHORT)) {
+		if (mod & MOD_UNSIGNED)
+			return &uint_ctype;
+		return &int_ctype;
+	}
+	return type;
+}
+
+/*
+ * integer part of usual arithmetic conversions:
+ *	integer promotions are applied
+ *	if left and right are identical, we are done
+ *	if signedness is the same, convert one with lower rank
+ *	unless unsigned argument has rank lower than signed one, convert the
+ *	signed one.
+ *	if signed argument is bigger than unsigned one, convert the unsigned.
+ *	otherwise, convert signed.
+ *
+ * Leaving aside the integer promotions, that is equivalent to
+ *	if identical, don't convert
+ *	if left is bigger than right, convert right
+ *	if right is bigger than left, convert right
+ *	otherwise, if signedness is the same, convert one with lower rank
+ *	otherwise convert the signed one.
+ */
+static struct symbol *bigger_int_type(struct symbol *left, struct symbol *right)
+{
+	unsigned long lmod, rmod;
+
+	left = integer_promotion(left);
+	right = integer_promotion(right);
+
+	if (left == right)
+		goto left;
+
+	if (left->bit_size > right->bit_size)
+		goto left;
+
+	if (right->bit_size > left->bit_size)
+		goto right;
+
+	lmod = left->ctype.modifiers;
+	rmod = right->ctype.modifiers;
+	if ((lmod ^ rmod) & MOD_UNSIGNED) {
+		if (lmod & MOD_UNSIGNED)
+			goto left;
+	} else if ((lmod & ~rmod) & (MOD_LONG_ALL))
+		goto left;
+right:
+	left = right;
+left:
+	return left;
+}
+
+static int same_cast_type(struct symbol *orig, struct symbol *new)
+{
+	return orig->bit_size == new->bit_size &&
+	       orig->bit_offset == new->bit_offset;
+}
+
+static struct symbol *base_type(struct symbol *node, unsigned long *modp, unsigned long *asp)
+{
+	unsigned long mod, as;
+
+	mod = 0; as = 0;
+	while (node) {
+		mod |= node->ctype.modifiers;
+		as |= node->ctype.as;
+		if (node->type == SYM_NODE) {
+			node = node->ctype.base_type;
+			continue;
+		}
+		break;
+	}
+	*modp = mod & ~MOD_IGNORE;
+	*asp = as;
+	return node;
+}
+
+static int is_same_type(struct expression *expr, struct symbol *new)
+{
+	struct symbol *old = expr->ctype;
+	unsigned long oldmod, newmod, oldas, newas;
+
+	old = base_type(old, &oldmod, &oldas);
+	new = base_type(new, &newmod, &newas);
+
+	/* Same base type, same address space? */
+	if (old == new && oldas == newas) {
+		unsigned long difmod;
+
+		/* Check the modifier bits. */
+		difmod = (oldmod ^ newmod) & ~MOD_NOCAST;
+
+		/* Exact same type? */
+		if (!difmod)
+			return 1;
+
+		/*
+		 * Not the same type, but differs only in "const".
+		 * Don't warn about MOD_NOCAST.
+		 */
+		if (difmod == MOD_CONST)
+			return 0;
+	}
+	if ((oldmod | newmod) & MOD_NOCAST) {
+		const char *tofrom = "to/from";
+		if (!(newmod & MOD_NOCAST))
+			tofrom = "from";
+		if (!(oldmod & MOD_NOCAST))
+			tofrom = "to";
+		warning(expr->pos, "implicit cast %s nocast type", tofrom);
+	}
+	return 0;
+}
+
+static void
+warn_for_different_enum_types (struct position pos,
+			       struct symbol *typea,
+			       struct symbol *typeb)
+{
+	if (!Wenum_mismatch)
+		return;
+	if (typea->type == SYM_NODE)
+		typea = typea->ctype.base_type;
+	if (typeb->type == SYM_NODE)
+		typeb = typeb->ctype.base_type;
+
+	if (typea == typeb)
+		return;
+
+	if (typea->type == SYM_ENUM && typeb->type == SYM_ENUM) {
+		warning(pos, "mixing different enum types");
+		info(pos, "    %s versus", show_typename(typea));
+		info(pos, "    %s", show_typename(typeb));
+	}
+}
+
+static int cast_flags(struct expression *expr, struct expression *target);
+static struct symbol *cast_to_bool(struct expression *expr);
+
+/*
+ * This gets called for implicit casts in assignments and
+ * integer promotion. We often want to try to move the
+ * cast down, because the ops involved may have been
+ * implicitly cast up, and we can get rid of the casts
+ * early.
+ */
+static struct expression * cast_to(struct expression *old, struct symbol *type)
+{
+	struct expression *expr;
+
+	warn_for_different_enum_types (old->pos, old->ctype, type);
+
+	if (old->ctype != &null_ctype && is_same_type(old, type))
+		return old;
+
+	/*
+	 * See if we can simplify the op. Move the cast down.
+	 */
+	switch (old->type) {
+	case EXPR_PREOP:
+		if (old->ctype->bit_size < type->bit_size)
+			break;
+		if (old->op == '~') {
+			old->ctype = type;
+			old->unop = cast_to(old->unop, type);
+			return old;
+		}
+		break;
+
+	case EXPR_IMPLIED_CAST:
+		warn_for_different_enum_types(old->pos, old->ctype, type);
+
+		if (old->ctype->bit_size >= type->bit_size) {
+			struct expression *orig = old->cast_expression;
+			if (same_cast_type(orig->ctype, type))
+				return orig;
+			if (old->ctype->bit_offset == type->bit_offset) {
+				old->ctype = type;
+				old->cast_type = type;
+				return old;
+			}
+		}
+		break;
+
+	default:
+		/* nothing */;
+	}
+
+	expr = alloc_expression(old->pos, EXPR_IMPLIED_CAST);
+	expr->ctype = type;
+	expr->cast_type = type;
+	expr->cast_expression = old;
+	expr->flags = cast_flags(expr, old);
+
+	if (is_bool_type(type))
+		cast_to_bool(expr);
+
+	return expr;
+}
+
+enum {
+	TYPE_NUM = 1,
+	TYPE_BITFIELD = 2,
+	TYPE_RESTRICT = 4,
+	TYPE_FLOAT = 8,
+	TYPE_PTR = 16,
+	TYPE_COMPOUND = 32,
+	TYPE_FOULED = 64,
+	TYPE_FN = 128,
+};
+
+static inline int classify_type(struct symbol *type, struct symbol **base)
+{
+	static int type_class[SYM_BAD + 1] = {
+		[SYM_PTR] = TYPE_PTR,
+		[SYM_FN] = TYPE_PTR | TYPE_FN,
+		[SYM_ARRAY] = TYPE_PTR | TYPE_COMPOUND,
+		[SYM_STRUCT] = TYPE_COMPOUND,
+		[SYM_UNION] = TYPE_COMPOUND,
+		[SYM_BITFIELD] = TYPE_NUM | TYPE_BITFIELD,
+		[SYM_RESTRICT] = TYPE_NUM | TYPE_RESTRICT,
+		[SYM_FOULED] = TYPE_NUM | TYPE_RESTRICT | TYPE_FOULED,
+	};
+	if (type->type == SYM_NODE)
+		type = type->ctype.base_type;
+	if (type->type == SYM_TYPEOF) {
+		type = evaluate_expression(type->initializer);
+		if (!type)
+			type = &bad_ctype;
+		else if (type->type == SYM_NODE)
+			type = type->ctype.base_type;
+	}
+	if (type->type == SYM_ENUM)
+		type = type->ctype.base_type;
+	*base = type;
+	if (type->type == SYM_BASETYPE) {
+		if (type->ctype.base_type == &int_type)
+			return TYPE_NUM;
+		if (type->ctype.base_type == &fp_type)
+			return TYPE_NUM | TYPE_FLOAT;
+	}
+	return type_class[type->type];
+}
+
+#define is_int(class) ((class & (TYPE_NUM | TYPE_FLOAT)) == TYPE_NUM)
+
+static inline int is_string_type(struct symbol *type)
+{
+	if (type->type == SYM_NODE)
+		type = type->ctype.base_type;
+	return type->type == SYM_ARRAY && is_byte_type(type->ctype.base_type);
+}
+
+static struct symbol *bad_expr_type(struct expression *expr)
+{
+	sparse_error(expr->pos, "incompatible types for operation (%s)", show_special(expr->op));
+	switch (expr->type) {
+	case EXPR_BINOP:
+	case EXPR_COMPARE:
+		info(expr->pos, "   left side has type %s", show_typename(expr->left->ctype));
+		info(expr->pos, "   right side has type %s", show_typename(expr->right->ctype));
+		break;
+	case EXPR_PREOP:
+	case EXPR_POSTOP:
+		info(expr->pos, "   argument has type %s", show_typename(expr->unop->ctype));
+		break;
+	default:
+		break;
+	}
+
+	expr->flags = CEF_NONE;
+	return expr->ctype = &bad_ctype;
+}
+
+static int restricted_value(struct expression *v, struct symbol *type)
+{
+	if (v->type != EXPR_VALUE)
+		return 1;
+	if (v->value != 0)
+		return 1;
+	return 0;
+}
+
+static int restricted_binop(int op, struct symbol *type)
+{
+	switch (op) {
+		case '&':
+		case '=':
+		case SPECIAL_AND_ASSIGN:
+		case SPECIAL_OR_ASSIGN:
+		case SPECIAL_XOR_ASSIGN:
+			return 1;	/* unfoul */
+		case '|':
+		case '^':
+		case '?':
+			return 2;	/* keep fouled */
+		case SPECIAL_EQUAL:
+		case SPECIAL_NOTEQUAL:
+			return 3;	/* warn if fouled */
+		default:
+			return 0;	/* warn */
+	}
+}
+
+static int restricted_unop(int op, struct symbol **type)
+{
+	if (op == '~') {
+		if ((*type)->bit_size < bits_in_int)
+			*type = befoul(*type);
+		return 0;
+	} if (op == '+')
+		return 0;
+	return 1;
+}
+
+/* type should be SYM_FOULED */
+static inline struct symbol *unfoul(struct symbol *type)
+{
+	return type->ctype.base_type;
+}
+
+static struct symbol *restricted_binop_type(int op,
+					struct expression *left,
+					struct expression *right,
+					int lclass, int rclass,
+					struct symbol *ltype,
+					struct symbol *rtype)
+{
+	struct symbol *ctype = NULL;
+	if (lclass & TYPE_RESTRICT) {
+		if (rclass & TYPE_RESTRICT) {
+			if (ltype == rtype) {
+				ctype = ltype;
+			} else if (lclass & TYPE_FOULED) {
+				if (unfoul(ltype) == rtype)
+					ctype = ltype;
+			} else if (rclass & TYPE_FOULED) {
+				if (unfoul(rtype) == ltype)
+					ctype = rtype;
+			}
+		} else {
+			if (!restricted_value(right, ltype))
+				ctype = ltype;
+		}
+	} else if (!restricted_value(left, rtype))
+		ctype = rtype;
+
+	if (ctype) {
+		switch (restricted_binop(op, ctype)) {
+		case 1:
+			if ((lclass ^ rclass) & TYPE_FOULED)
+				ctype = unfoul(ctype);
+			break;
+		case 3:
+			if (!(lclass & rclass & TYPE_FOULED))
+				break;
+		case 0:
+			ctype = NULL;
+		default:
+			break;
+		}
+	}
+
+	return ctype;
+}
+
+static inline void unrestrict(struct expression *expr,
+			      int class, struct symbol **ctype)
+{
+	if (class & TYPE_RESTRICT) {
+		if (class & TYPE_FOULED)
+			*ctype = unfoul(*ctype);
+		warning(expr->pos, "%s degrades to integer",
+			show_typename(*ctype));
+		*ctype = (*ctype)->ctype.base_type; /* get to arithmetic type */
+	}
+}
+
+static struct symbol *usual_conversions(int op,
+					struct expression *left,
+					struct expression *right,
+					int lclass, int rclass,
+					struct symbol *ltype,
+					struct symbol *rtype)
+{
+	struct symbol *ctype;
+
+	warn_for_different_enum_types(right->pos, left->ctype, right->ctype);
+
+	if ((lclass | rclass) & TYPE_RESTRICT)
+		goto Restr;
+
+Normal:
+	if (!(lclass & TYPE_FLOAT)) {
+		if (!(rclass & TYPE_FLOAT))
+			return bigger_int_type(ltype, rtype);
+		else
+			return rtype;
+	} else if (rclass & TYPE_FLOAT) {
+		unsigned long lmod = ltype->ctype.modifiers;
+		unsigned long rmod = rtype->ctype.modifiers;
+		if (rmod & ~lmod & (MOD_LONG_ALL))
+			return rtype;
+		else
+			return ltype;
+	} else
+		return ltype;
+
+Restr:
+	ctype = restricted_binop_type(op, left, right,
+				      lclass, rclass, ltype, rtype);
+	if (ctype)
+		return ctype;
+
+	unrestrict(left, lclass, &ltype);
+	unrestrict(right, rclass, &rtype);
+
+	goto Normal;
+}
+
+static inline int lvalue_expression(struct expression *expr)
+{
+	return expr->type == EXPR_PREOP && expr->op == '*';
+}
+
+static struct symbol *evaluate_ptr_add(struct expression *expr, struct symbol *itype)
+{
+	struct expression *index = expr->right;
+	struct symbol *ctype, *base;
+	int multiply;
+
+	classify_type(degenerate(expr->left), &ctype);
+	base = examine_pointer_target(ctype);
+
+	/*
+	 * An address constant +/- an integer constant expression
+	 * yields an address constant again [6.6(7)].
+	 */
+	if ((expr->left->flags & CEF_ADDR) && (expr->right->flags & CEF_ICE))
+		expr->flags = CEF_ADDR;
+
+	if (!base) {
+		expression_error(expr, "missing type information");
+		return NULL;
+	}
+	if (is_function(base)) {
+		expression_error(expr, "arithmetics on pointers to functions");
+		return NULL;
+	}
+
+	/* Get the size of whatever the pointer points to */
+	multiply = is_void_type(base) ? 1 : bits_to_bytes(base->bit_size);
+
+	if (ctype == &null_ctype)
+		ctype = &ptr_ctype;
+	expr->ctype = ctype;
+
+	if (multiply == 1 && itype->bit_size >= bits_in_pointer)
+		return ctype;
+
+	if (index->type == EXPR_VALUE) {
+		struct expression *val = alloc_expression(expr->pos, EXPR_VALUE);
+		unsigned long long v = index->value, mask;
+		mask = 1ULL << (itype->bit_size - 1);
+		if (v & mask)
+			v |= -mask;
+		else
+			v &= mask - 1;
+		v *= multiply;
+		mask = 1ULL << (bits_in_pointer - 1);
+		v &= mask | (mask - 1);
+		val->value = v;
+		val->ctype = ssize_t_ctype;
+		expr->right = val;
+		return ctype;
+	}
+
+	if (itype->bit_size < bits_in_pointer)
+		index = cast_to(index, ssize_t_ctype);
+
+	if (multiply > 1) {
+		struct expression *val = alloc_expression(expr->pos, EXPR_VALUE);
+		struct expression *mul = alloc_expression(expr->pos, EXPR_BINOP);
+
+		val->ctype = ssize_t_ctype;
+		val->value = multiply;
+
+		mul->op = '*';
+		mul->ctype = ssize_t_ctype;
+		mul->left = index;
+		mul->right = val;
+		index = mul;
+	}
+
+	expr->right = index;
+	return ctype;
+}
+
+static void examine_fn_arguments(struct symbol *fn);
+
+#define MOD_IGN (MOD_VOLATILE | MOD_CONST | MOD_PURE)
+
+const char *type_difference(struct ctype *c1, struct ctype *c2,
+	unsigned long mod1, unsigned long mod2)
+{
+	unsigned long as1 = c1->as, as2 = c2->as;
+	struct symbol *t1 = c1->base_type;
+	struct symbol *t2 = c2->base_type;
+	int move1 = 1, move2 = 1;
+	mod1 |= c1->modifiers;
+	mod2 |= c2->modifiers;
+	for (;;) {
+		unsigned long diff;
+		int type;
+		struct symbol *base1 = t1->ctype.base_type;
+		struct symbol *base2 = t2->ctype.base_type;
+
+		/*
+		 * FIXME! Collect alignment and context too here!
+		 */
+		if (move1) {
+			if (t1 && t1->type != SYM_PTR) {
+				mod1 |= t1->ctype.modifiers;
+				as1 |= t1->ctype.as;
+			}
+			move1 = 0;
+		}
+
+		if (move2) {
+			if (t2 && t2->type != SYM_PTR) {
+				mod2 |= t2->ctype.modifiers;
+				as2 |= t2->ctype.as;
+			}
+			move2 = 0;
+		}
+
+		if (t1 == t2)
+			break;
+		if (!t1 || !t2)
+			return "different types";
+
+		if (t1->type == SYM_NODE || t1->type == SYM_ENUM) {
+			t1 = base1;
+			move1 = 1;
+			if (!t1)
+				return "bad types";
+			continue;
+		}
+
+		if (t2->type == SYM_NODE || t2->type == SYM_ENUM) {
+			t2 = base2;
+			move2 = 1;
+			if (!t2)
+				return "bad types";
+			continue;
+		}
+
+		move1 = move2 = 1;
+		type = t1->type;
+		if (type != t2->type)
+			return "different base types";
+
+		switch (type) {
+		default:
+			sparse_error(t1->pos,
+				     "internal error: bad type in derived(%d)",
+				     type);
+			return "bad types";
+		case SYM_RESTRICT:
+			return "different base types";
+		case SYM_UNION:
+		case SYM_STRUCT:
+			/* allow definition of incomplete structs and unions */
+			if (t1->ident == t2->ident)
+			  return NULL;
+			return "different base types";
+		case SYM_ARRAY:
+			/* XXX: we ought to compare sizes */
+			break;
+		case SYM_PTR:
+			if (as1 != as2)
+				return "different address spaces";
+			/* MOD_SPECIFIER is due to idiocy in parse.c */
+			if ((mod1 ^ mod2) & ~MOD_IGNORE & ~MOD_SPECIFIER)
+				return "different modifiers";
+			/* we could be lazier here */
+			base1 = examine_pointer_target(t1);
+			base2 = examine_pointer_target(t2);
+			mod1 = t1->ctype.modifiers;
+			as1 = t1->ctype.as;
+			mod2 = t2->ctype.modifiers;
+			as2 = t2->ctype.as;
+			break;
+		case SYM_FN: {
+			struct symbol *arg1, *arg2;
+			int i;
+
+			if (as1 != as2)
+				return "different address spaces";
+			if ((mod1 ^ mod2) & ~MOD_IGNORE & ~MOD_SIGNEDNESS)
+				return "different modifiers";
+			mod1 = t1->ctype.modifiers;
+			as1 = t1->ctype.as;
+			mod2 = t2->ctype.modifiers;
+			as2 = t2->ctype.as;
+
+			if (t1->variadic != t2->variadic)
+				return "incompatible variadic arguments";
+			examine_fn_arguments(t1);
+			examine_fn_arguments(t2);
+			PREPARE_PTR_LIST(t1->arguments, arg1);
+			PREPARE_PTR_LIST(t2->arguments, arg2);
+			i = 1;
+			for (;;) {
+				const char *diffstr;
+				if (!arg1 && !arg2)
+					break;
+				if (!arg1 || !arg2)
+					return "different argument counts";
+				diffstr = type_difference(&arg1->ctype,
+							  &arg2->ctype,
+							  MOD_IGN, MOD_IGN);
+				if (diffstr) {
+					static char argdiff[80];
+					sprintf(argdiff, "incompatible argument %d (%s)", i, diffstr);
+					return argdiff;
+				}
+				NEXT_PTR_LIST(arg1);
+				NEXT_PTR_LIST(arg2);
+				i++;
+			}
+			FINISH_PTR_LIST(arg2);
+			FINISH_PTR_LIST(arg1);
+			break;
+		}
+		case SYM_BASETYPE:
+			if (as1 != as2)
+				return "different address spaces";
+			if (base1 != base2)
+				return "different base types";
+			diff = (mod1 ^ mod2) & ~MOD_IGNORE;
+			if (!diff)
+				return NULL;
+			if (diff & MOD_SIZE)
+				return "different type sizes";
+			else if (diff & ~MOD_SIGNEDNESS)
+				return "different modifiers";
+			else
+				return "different signedness";
+		}
+		t1 = base1;
+		t2 = base2;
+	}
+	if (as1 != as2)
+		return "different address spaces";
+	if ((mod1 ^ mod2) & ~MOD_IGNORE & ~MOD_SIGNEDNESS)
+		return "different modifiers";
+	return NULL;
+}
+
+static void bad_null(struct expression *expr)
+{
+	if (Wnon_pointer_null)
+		warning(expr->pos, "Using plain integer as NULL pointer");
+}
+
+static unsigned long target_qualifiers(struct symbol *type)
+{
+	unsigned long mod = type->ctype.modifiers & MOD_IGN;
+	if (type->ctype.base_type && type->ctype.base_type->type == SYM_ARRAY)
+		mod = 0;
+	return mod;
+}
+
+static struct symbol *evaluate_ptr_sub(struct expression *expr)
+{
+	const char *typediff;
+	struct symbol *ltype, *rtype;
+	struct expression *l = expr->left;
+	struct expression *r = expr->right;
+	struct symbol *lbase;
+
+	classify_type(degenerate(l), &ltype);
+	classify_type(degenerate(r), &rtype);
+
+	lbase = examine_pointer_target(ltype);
+	examine_pointer_target(rtype);
+	typediff = type_difference(&ltype->ctype, &rtype->ctype,
+				   target_qualifiers(rtype),
+				   target_qualifiers(ltype));
+	if (typediff)
+		expression_error(expr, "subtraction of different types can't work (%s)", typediff);
+
+	if (is_function(lbase)) {
+		expression_error(expr, "subtraction of functions? Share your drugs");
+		return NULL;
+	}
+
+	expr->ctype = ssize_t_ctype;
+	if (lbase->bit_size > bits_in_char) {
+		struct expression *sub = alloc_expression(expr->pos, EXPR_BINOP);
+		struct expression *div = expr;
+		struct expression *val = alloc_expression(expr->pos, EXPR_VALUE);
+		unsigned long value = bits_to_bytes(lbase->bit_size);
+
+		val->ctype = size_t_ctype;
+		val->value = value;
+
+		if (value & (value-1)) {
+			if (Wptr_subtraction_blows)
+				warning(expr->pos, "potentially expensive pointer subtraction");
+		}
+
+		sub->op = '-';
+		sub->ctype = ssize_t_ctype;
+		sub->left = l;
+		sub->right = r;
+
+		div->op = '/';
+		div->left = sub;
+		div->right = val;
+	}
+		
+	return ssize_t_ctype;
+}
+
+#define is_safe_type(type) ((type)->ctype.modifiers & MOD_SAFE)
+
+static struct symbol *evaluate_conditional(struct expression *expr, int iterator)
+{
+	struct symbol *ctype;
+
+	if (!expr)
+		return NULL;
+
+	if (!iterator && expr->type == EXPR_ASSIGNMENT && expr->op == '=')
+		warning(expr->pos, "assignment expression in conditional");
+
+	ctype = evaluate_expression(expr);
+	if (ctype) {
+		if (is_safe_type(ctype))
+			warning(expr->pos, "testing a 'safe expression'");
+		if (is_func_type(ctype)) {
+			if (Waddress)
+				warning(expr->pos, "the address of %s will always evaluate as true", "a function");
+		} else if (is_array_type(ctype)) {
+			if (Waddress)
+				warning(expr->pos, "the address of %s will always evaluate as true", "an array");
+		} else if (!is_scalar_type(ctype)) {
+			sparse_error(expr->pos, "incorrect type in conditional");
+			info(expr->pos, "   got %s", show_typename(ctype));
+			ctype = NULL;
+		}
+	}
+	ctype = degenerate(expr);
+
+	return ctype;
+}
+
+static struct symbol *evaluate_logical(struct expression *expr)
+{
+	if (!evaluate_conditional(expr->left, 0))
+		return NULL;
+	if (!evaluate_conditional(expr->right, 0))
+		return NULL;
+
+	/* the result is int [6.5.13(3), 6.5.14(3)] */
+	expr->ctype = &int_ctype;
+	expr->flags = expr->left->flags & expr->right->flags;
+	expr->flags &= ~(CEF_CONST_MASK | CEF_ADDR);
+	return &int_ctype;
+}
+
+static struct symbol *evaluate_binop(struct expression *expr)
+{
+	struct symbol *ltype, *rtype, *ctype;
+	int lclass = classify_type(expr->left->ctype, &ltype);
+	int rclass = classify_type(expr->right->ctype, &rtype);
+	int op = expr->op;
+
+	/* number op number */
+	if (lclass & rclass & TYPE_NUM) {
+		expr->flags = expr->left->flags & expr->right->flags;
+		expr->flags &= ~CEF_CONST_MASK;
+
+		if ((lclass | rclass) & TYPE_FLOAT) {
+			switch (op) {
+			case '+': case '-': case '*': case '/':
+				break;
+			default:
+				return bad_expr_type(expr);
+			}
+		}
+
+		if (op == SPECIAL_LEFTSHIFT || op == SPECIAL_RIGHTSHIFT) {
+			// shifts do integer promotions, but that's it.
+			unrestrict(expr->left, lclass, &ltype);
+			unrestrict(expr->right, rclass, &rtype);
+			ctype = ltype = integer_promotion(ltype);
+			rtype = integer_promotion(rtype);
+		} else {
+			// The rest do usual conversions
+			const unsigned left_not  = expr->left->type == EXPR_PREOP
+			                           && expr->left->op == '!';
+			const unsigned right_not = expr->right->type == EXPR_PREOP
+			                           && expr->right->op == '!';
+			if ((op == '&' || op == '|') && (left_not || right_not))
+				warning(expr->pos, "dubious: %sx %c %sy",
+				        left_not ? "!" : "",
+					op,
+					right_not ? "!" : "");
+
+			ltype = usual_conversions(op, expr->left, expr->right,
+						  lclass, rclass, ltype, rtype);
+			ctype = rtype = ltype;
+		}
+
+		expr->left = cast_to(expr->left, ltype);
+		expr->right = cast_to(expr->right, rtype);
+		expr->ctype = ctype;
+		return ctype;
+	}
+
+	/* pointer (+|-) integer */
+	if (lclass & TYPE_PTR && is_int(rclass) && (op == '+' || op == '-')) {
+		unrestrict(expr->right, rclass, &rtype);
+		return evaluate_ptr_add(expr, rtype);
+	}
+
+	/* integer + pointer */
+	if (rclass & TYPE_PTR && is_int(lclass) && op == '+') {
+		struct expression *index = expr->left;
+		unrestrict(index, lclass, &ltype);
+		expr->left = expr->right;
+		expr->right = index;
+		return evaluate_ptr_add(expr, ltype);
+	}
+
+	/* pointer - pointer */
+	if (lclass & rclass & TYPE_PTR && expr->op == '-')
+		return evaluate_ptr_sub(expr);
+
+	return bad_expr_type(expr);
+}
+
+static struct symbol *evaluate_comma(struct expression *expr)
+{
+	expr->ctype = degenerate(expr->right);
+	if (expr->ctype == &null_ctype)
+		expr->ctype = &ptr_ctype;
+	expr->flags &= expr->left->flags & expr->right->flags;
+	return expr->ctype;
+}
+
+static int modify_for_unsigned(int op)
+{
+	if (op == '<')
+		op = SPECIAL_UNSIGNED_LT;
+	else if (op == '>')
+		op = SPECIAL_UNSIGNED_GT;
+	else if (op == SPECIAL_LTE)
+		op = SPECIAL_UNSIGNED_LTE;
+	else if (op == SPECIAL_GTE)
+		op = SPECIAL_UNSIGNED_GTE;
+	return op;
+}
+
+static inline int is_null_pointer_constant(struct expression *e)
+{
+	if (e->ctype == &null_ctype)
+		return 1;
+	if (!(e->flags & CEF_ICE))
+		return 0;
+	return is_zero_constant(e) ? 2 : 0;
+}
+
+static struct symbol *evaluate_compare(struct expression *expr)
+{
+	struct expression *left = expr->left, *right = expr->right;
+	struct symbol *ltype, *rtype, *lbase, *rbase;
+	int lclass = classify_type(degenerate(left), &ltype);
+	int rclass = classify_type(degenerate(right), &rtype);
+	struct symbol *ctype;
+	const char *typediff;
+
+	/* Type types? */
+	if (is_type_type(ltype) && is_type_type(rtype)) {
+		/*
+		 * __builtin_types_compatible_p() yields an integer
+		 * constant expression
+		 */
+		expr->flags = CEF_SET_ICE;
+		goto OK;
+	}
+
+	if (is_safe_type(left->ctype) || is_safe_type(right->ctype))
+		warning(expr->pos, "testing a 'safe expression'");
+
+	expr->flags = left->flags & right->flags & ~CEF_CONST_MASK & ~CEF_ADDR;
+
+	/* number on number */
+	if (lclass & rclass & TYPE_NUM) {
+		ctype = usual_conversions(expr->op, expr->left, expr->right,
+					  lclass, rclass, ltype, rtype);
+		expr->left = cast_to(expr->left, ctype);
+		expr->right = cast_to(expr->right, ctype);
+		if (ctype->ctype.modifiers & MOD_UNSIGNED)
+			expr->op = modify_for_unsigned(expr->op);
+		goto OK;
+	}
+
+	/* at least one must be a pointer */
+	if (!((lclass | rclass) & TYPE_PTR))
+		return bad_expr_type(expr);
+
+	/* equality comparisons can be with null pointer constants */
+	if (expr->op == SPECIAL_EQUAL || expr->op == SPECIAL_NOTEQUAL) {
+		int is_null1 = is_null_pointer_constant(left);
+		int is_null2 = is_null_pointer_constant(right);
+		if (is_null1 == 2)
+			bad_null(left);
+		if (is_null2 == 2)
+			bad_null(right);
+		if (is_null1 && is_null2) {
+			int positive = expr->op == SPECIAL_EQUAL;
+			expr->type = EXPR_VALUE;
+			expr->value = positive;
+			goto OK;
+		}
+		if (is_null1 && (rclass & TYPE_PTR)) {
+			left = cast_to(left, rtype);
+			goto OK;
+		}
+		if (is_null2 && (lclass & TYPE_PTR)) {
+			right = cast_to(right, ltype);
+			goto OK;
+		}
+	}
+	/* both should be pointers */
+	if (!(lclass & rclass & TYPE_PTR))
+		return bad_expr_type(expr);
+	expr->op = modify_for_unsigned(expr->op);
+
+	lbase = examine_pointer_target(ltype);
+	rbase = examine_pointer_target(rtype);
+
+	/* they also have special treatment for pointers to void */
+	if (expr->op == SPECIAL_EQUAL || expr->op == SPECIAL_NOTEQUAL) {
+		if (ltype->ctype.as == rtype->ctype.as) {
+			if (lbase == &void_ctype) {
+				right = cast_to(right, ltype);
+				goto OK;
+			}
+			if (rbase == &void_ctype) {
+				left = cast_to(left, rtype);
+				goto OK;
+			}
+		}
+	}
+
+	typediff = type_difference(&ltype->ctype, &rtype->ctype,
+				   target_qualifiers(rtype),
+				   target_qualifiers(ltype));
+	if (!typediff)
+		goto OK;
+
+	expression_error(expr, "incompatible types in comparison expression (%s)", typediff);
+	return NULL;
+
+OK:
+	/* the result is int [6.5.8(6), 6.5.9(3)]*/
+	expr->ctype = &int_ctype;
+	return &int_ctype;
+}
+
+/*
+ * NOTE! The degenerate case of "x ? : y", where we don't
+ * have a true case, this will possibly promote "x" to the
+ * same type as "y", and thus _change_ the conditional
+ * test in the expression. But since promotion is "safe"
+ * for testing, that's OK.
+ */
+static struct symbol *evaluate_conditional_expression(struct expression *expr)
+{
+	struct expression **true;
+	struct symbol *ctype, *ltype, *rtype, *lbase, *rbase;
+	int lclass, rclass;
+	const char * typediff;
+	int qual;
+
+	if (!evaluate_conditional(expr->conditional, 0))
+		return NULL;
+	if (!evaluate_expression(expr->cond_false))
+		return NULL;
+
+	ctype = degenerate(expr->conditional);
+	rtype = degenerate(expr->cond_false);
+
+	true = &expr->conditional;
+	ltype = ctype;
+	if (expr->cond_true) {
+		if (!evaluate_expression(expr->cond_true))
+			return NULL;
+		ltype = degenerate(expr->cond_true);
+		true = &expr->cond_true;
+	}
+
+	expr->flags = (expr->conditional->flags & (*true)->flags &
+			expr->cond_false->flags & ~CEF_CONST_MASK);
+	/*
+	 * A conditional operator yields a particular constant
+	 * expression type only if all of its three subexpressions are
+	 * of that type [6.6(6), 6.6(8)].
+	 * As an extension, relax this restriction by allowing any
+	 * constant expression type for the condition expression.
+	 *
+	 * A conditional operator never yields an address constant
+	 * [6.6(9)].
+	 * However, as an extension, if the condition is any constant
+	 * expression, and the true and false expressions are both
+	 * address constants, mark the result as an address constant.
+	 */
+	if (expr->conditional->flags & (CEF_ACE | CEF_ADDR))
+		expr->flags = (*true)->flags & expr->cond_false->flags & ~CEF_CONST_MASK;
+
+	lclass = classify_type(ltype, &ltype);
+	rclass = classify_type(rtype, &rtype);
+	if (lclass & rclass & TYPE_NUM) {
+		ctype = usual_conversions('?', *true, expr->cond_false,
+					  lclass, rclass, ltype, rtype);
+		*true = cast_to(*true, ctype);
+		expr->cond_false = cast_to(expr->cond_false, ctype);
+		goto out;
+	}
+
+	if ((lclass | rclass) & TYPE_PTR) {
+		int is_null1 = is_null_pointer_constant(*true);
+		int is_null2 = is_null_pointer_constant(expr->cond_false);
+
+		if (is_null1 && is_null2) {
+			*true = cast_to(*true, &ptr_ctype);
+			expr->cond_false = cast_to(expr->cond_false, &ptr_ctype);
+			ctype = &ptr_ctype;
+			goto out;
+		}
+		if (is_null1 && (rclass & TYPE_PTR)) {
+			if (is_null1 == 2)
+				bad_null(*true);
+			*true = cast_to(*true, rtype);
+			ctype = rtype;
+			goto out;
+		}
+		if (is_null2 && (lclass & TYPE_PTR)) {
+			if (is_null2 == 2)
+				bad_null(expr->cond_false);
+			expr->cond_false = cast_to(expr->cond_false, ltype);
+			ctype = ltype;
+			goto out;
+		}
+		if (!(lclass & rclass & TYPE_PTR)) {
+			typediff = "different types";
+			goto Err;
+		}
+		/* OK, it's pointer on pointer */
+		if (ltype->ctype.as != rtype->ctype.as) {
+			typediff = "different address spaces";
+			goto Err;
+		}
+
+		/* need to be lazier here */
+		lbase = examine_pointer_target(ltype);
+		rbase = examine_pointer_target(rtype);
+		qual = target_qualifiers(ltype) | target_qualifiers(rtype);
+
+		if (lbase == &void_ctype) {
+			/* XXX: pointers to function should warn here */
+			ctype = ltype;
+			goto Qual;
+
+		}
+		if (rbase == &void_ctype) {
+			/* XXX: pointers to function should warn here */
+			ctype = rtype;
+			goto Qual;
+		}
+		/* XXX: that should be pointer to composite */
+		ctype = ltype;
+		typediff = type_difference(&ltype->ctype, &rtype->ctype,
+					   qual, qual);
+		if (!typediff)
+			goto Qual;
+		goto Err;
+	}
+
+	/* void on void, struct on same struct, union on same union */
+	if (ltype == rtype) {
+		ctype = ltype;
+		goto out;
+	}
+	typediff = "different base types";
+
+Err:
+	expression_error(expr, "incompatible types in conditional expression (%s)", typediff);
+	/*
+	 * if the condition is constant, the type is in fact known
+	 * so use it, as gcc & clang do.
+	 */
+	switch (expr_truth_value(expr->conditional)) {
+	case 1:	expr->ctype = ltype;
+		break;
+	case 0: expr->ctype = rtype;
+		break;
+	default:
+		break;
+	}
+	return NULL;
+
+out:
+	expr->ctype = ctype;
+	return ctype;
+
+Qual:
+	if (qual & ~ctype->ctype.modifiers) {
+		struct symbol *sym = alloc_symbol(ctype->pos, SYM_PTR);
+		*sym = *ctype;
+		sym->ctype.modifiers |= qual;
+		ctype = sym;
+	}
+	*true = cast_to(*true, ctype);
+	expr->cond_false = cast_to(expr->cond_false, ctype);
+	goto out;
+}
+
+/* FP assignments can not do modulo or bit operations */
+static int compatible_float_op(int op)
+{
+	return	op == SPECIAL_ADD_ASSIGN ||
+		op == SPECIAL_SUB_ASSIGN ||
+		op == SPECIAL_MUL_ASSIGN ||
+		op == SPECIAL_DIV_ASSIGN;
+}
+
+static int evaluate_assign_op(struct expression *expr)
+{
+	struct symbol *target = expr->left->ctype;
+	struct symbol *source = expr->right->ctype;
+	struct symbol *t, *s;
+	int tclass = classify_type(target, &t);
+	int sclass = classify_type(source, &s);
+	int op = expr->op;
+
+	if (tclass & sclass & TYPE_NUM) {
+		if (tclass & TYPE_FLOAT && !compatible_float_op(op)) {
+			expression_error(expr, "invalid assignment");
+			return 0;
+		}
+		if (tclass & TYPE_RESTRICT) {
+			if (!restricted_binop(op, t)) {
+				warning(expr->pos, "bad assignment (%s) to %s",
+					show_special(op), show_typename(t));
+				expr->right = cast_to(expr->right, target);
+				return 0;
+			}
+			/* allowed assignments unfoul */
+			if (sclass & TYPE_FOULED && unfoul(s) == t)
+				goto Cast;
+			if (!restricted_value(expr->right, t))
+				return 1;
+		} else if (!(sclass & TYPE_RESTRICT))
+			goto usual;
+		/* source and target would better be identical restricted */
+		if (t == s)
+			return 1;
+		warning(expr->pos, "invalid assignment: %s", show_special(op));
+		info(expr->pos, "   left side has type %s", show_typename(t));
+		info(expr->pos, "   right side has type %s", show_typename(s));
+		expr->right = cast_to(expr->right, target);
+		return 0;
+	}
+	if (tclass == TYPE_PTR && is_int(sclass)) {
+		if (op == SPECIAL_ADD_ASSIGN || op == SPECIAL_SUB_ASSIGN) {
+			unrestrict(expr->right, sclass, &s);
+			evaluate_ptr_add(expr, s);
+			return 1;
+		}
+		expression_error(expr, "invalid pointer assignment");
+		return 0;
+	}
+
+	expression_error(expr, "invalid assignment");
+	return 0;
+
+usual:
+	target = usual_conversions(op, expr->left, expr->right,
+				tclass, sclass, target, source);
+Cast:
+	expr->right = cast_to(expr->right, target);
+	return 1;
+}
+
+static int whitelist_pointers(struct symbol *t1, struct symbol *t2)
+{
+	if (t1 == t2)
+		return 0;	/* yes, 0 - we don't want a cast_to here */
+	if (t1 == &void_ctype)
+		return 1;
+	if (t2 == &void_ctype)
+		return 1;
+	if (classify_type(t1, &t1) != TYPE_NUM)
+		return 0;
+	if (classify_type(t2, &t2) != TYPE_NUM)
+		return 0;
+	if (t1 == t2)
+		return 1;
+	if (t1->ctype.modifiers & t2->ctype.modifiers & MOD_CHAR)
+		return 1;
+	if ((t1->ctype.modifiers ^ t2->ctype.modifiers) & MOD_SIZE)
+		return 0;
+	return !Wtypesign;
+}
+
+static int check_assignment_types(struct symbol *target, struct expression **rp,
+	const char **typediff)
+{
+	struct symbol *source = degenerate(*rp);
+	struct symbol *t, *s;
+	int tclass = classify_type(target, &t);
+	int sclass = classify_type(source, &s);
+
+	if (tclass & sclass & TYPE_NUM) {
+		if (tclass & TYPE_RESTRICT) {
+			/* allowed assignments unfoul */
+			if (sclass & TYPE_FOULED && unfoul(s) == t)
+				goto Cast;
+			if (!restricted_value(*rp, target))
+				return 1;
+			if (s == t)
+				return 1;
+		} else if (!(sclass & TYPE_RESTRICT))
+			goto Cast;
+                if (t == &bool_ctype) {
+                        if (is_fouled_type(s))
+                                warning((*rp)->pos, "%s degrades to integer",
+                                        show_typename(s->ctype.base_type));
+                        goto Cast;
+                }
+		*typediff = "different base types";
+		return 0;
+	}
+
+	if (tclass == TYPE_PTR) {
+		unsigned long mod1, mod2;
+		struct symbol *b1, *b2;
+		// NULL pointer is always OK
+		int is_null = is_null_pointer_constant(*rp);
+		if (is_null) {
+			if (is_null == 2)
+				bad_null(*rp);
+			goto Cast;
+		}
+		if (!(sclass & TYPE_PTR)) {
+			*typediff = "different base types";
+			return 0;
+		}
+		b1 = examine_pointer_target(t);
+		b2 = examine_pointer_target(s);
+		mod1 = target_qualifiers(t);
+		mod2 = target_qualifiers(s);
+		if (whitelist_pointers(b1, b2)) {
+			/*
+			 * assignments to/from void * are OK, provided that
+			 * we do not remove qualifiers from pointed to [C]
+			 * or mix address spaces [sparse].
+			 */
+			if (t->ctype.as != s->ctype.as) {
+				*typediff = "different address spaces";
+				return 0;
+			}
+			/*
+			 * If this is a function pointer assignment, it is
+			 * actually fine to assign a pointer to const data to
+			 * it, as a function pointer points to const data
+			 * implicitly, i.e., dereferencing it does not produce
+			 * an lvalue.
+			 */
+			if (b1->type == SYM_FN)
+				mod1 |= MOD_CONST;
+			if (mod2 & ~mod1) {
+				*typediff = "different modifiers";
+				return 0;
+			}
+			goto Cast;
+		}
+		/* It's OK if the target is more volatile or const than the source */
+		*typediff = type_difference(&t->ctype, &s->ctype, 0, mod1);
+		if (*typediff)
+			return 0;
+		return 1;
+	}
+
+	if ((tclass & TYPE_COMPOUND) && s == t)
+		return 1;
+
+	if (tclass & TYPE_NUM) {
+		/* XXX: need to turn into comparison with NULL */
+		if (t == &bool_ctype && (sclass & TYPE_PTR))
+			goto Cast;
+		*typediff = "different base types";
+		return 0;
+	}
+	*typediff = "invalid types";
+	return 0;
+
+Cast:
+	*rp = cast_to(*rp, target);
+	return 1;
+}
+
+static int compatible_assignment_types(struct expression *expr, struct symbol *target,
+	struct expression **rp, const char *where)
+{
+	const char *typediff;
+	struct symbol *source = degenerate(*rp);
+
+	if (!check_assignment_types(target, rp, &typediff)) {
+		warning(expr->pos, "incorrect type in %s (%s)", where, typediff);
+		info(expr->pos, "   expected %s", show_typename(target));
+		info(expr->pos, "   got %s", show_typename(source));
+		*rp = cast_to(*rp, target);
+		return 0;
+	}
+
+	return 1;
+}
+
+static int compatible_transparent_union(struct symbol *target,
+	struct expression **rp)
+{
+	struct symbol *t, *member;
+	classify_type(target, &t);
+	if (t->type != SYM_UNION || !t->transparent_union)
+		return 0;
+
+	FOR_EACH_PTR(t->symbol_list, member) {
+		const char *typediff;
+		if (check_assignment_types(member, rp, &typediff))
+			return 1;
+	} END_FOR_EACH_PTR(member);
+
+	return 0;
+}
+
+static int compatible_argument_type(struct expression *expr, struct symbol *target,
+	struct expression **rp, const char *where)
+{
+	if (compatible_transparent_union(target, rp))
+		return 1;
+
+	return compatible_assignment_types(expr, target, rp, where);
+}
+
+static void mark_assigned(struct expression *expr)
+{
+	struct symbol *sym;
+
+	if (!expr)
+		return;
+	switch (expr->type) {
+	case EXPR_SYMBOL:
+		sym = expr->symbol;
+		if (!sym)
+			return;
+		if (sym->type != SYM_NODE)
+			return;
+		sym->ctype.modifiers |= MOD_ASSIGNED;
+		return;
+
+	case EXPR_BINOP:
+		mark_assigned(expr->left);
+		mark_assigned(expr->right);
+		return;
+	case EXPR_CAST:
+	case EXPR_FORCE_CAST:
+		mark_assigned(expr->cast_expression);
+		return;
+	case EXPR_SLICE:
+		mark_assigned(expr->base);
+		return;
+	default:
+		/* Hmm? */
+		return;
+	}
+}
+
+static void evaluate_assign_to(struct expression *left, struct symbol *type)
+{
+	if (type->ctype.modifiers & MOD_CONST)
+		expression_error(left, "assignment to const expression");
+
+	/* We know left is an lvalue, so it's a "preop-*" */
+	mark_assigned(left->unop);
+}
+
+static struct symbol *evaluate_assignment(struct expression *expr)
+{
+	struct expression *left = expr->left;
+	struct expression *where = expr;
+	struct symbol *ltype;
+
+	if (!lvalue_expression(left)) {
+		expression_error(expr, "not an lvalue");
+		return NULL;
+	}
+
+	ltype = left->ctype;
+
+	if (expr->op != '=') {
+		if (!evaluate_assign_op(expr))
+			return NULL;
+	} else {
+		if (!compatible_assignment_types(where, ltype, &expr->right, "assignment"))
+			return NULL;
+	}
+
+	evaluate_assign_to(left, ltype);
+
+	expr->ctype = ltype;
+	return ltype;
+}
+
+static void examine_fn_arguments(struct symbol *fn)
+{
+	struct symbol *s;
+
+	FOR_EACH_PTR(fn->arguments, s) {
+		struct symbol *arg = evaluate_symbol(s);
+		/* Array/function arguments silently degenerate into pointers */
+		if (arg) {
+			struct symbol *ptr;
+			switch(arg->type) {
+			case SYM_ARRAY:
+			case SYM_FN:
+				ptr = alloc_symbol(s->pos, SYM_PTR);
+				if (arg->type == SYM_ARRAY)
+					ptr->ctype = arg->ctype;
+				else
+					ptr->ctype.base_type = arg;
+				ptr->ctype.as |= s->ctype.as;
+				ptr->ctype.modifiers |= s->ctype.modifiers & MOD_PTRINHERIT;
+
+				s->ctype.base_type = ptr;
+				s->ctype.as = 0;
+				s->ctype.modifiers &= ~MOD_PTRINHERIT;
+				s->bit_size = 0;
+				s->examined = 0;
+				examine_symbol_type(s);
+				break;
+			default:
+				/* nothing */
+				break;
+			}
+		}
+	} END_FOR_EACH_PTR(s);
+}
+
+static struct symbol *convert_to_as_mod(struct symbol *sym, int as, int mod)
+{
+	/* Take the modifiers of the pointer, and apply them to the member */
+	mod |= sym->ctype.modifiers;
+	if (sym->ctype.as != as || sym->ctype.modifiers != mod) {
+		struct symbol *newsym = alloc_symbol(sym->pos, SYM_NODE);
+		*newsym = *sym;
+		newsym->ctype.as = as;
+		newsym->ctype.modifiers = mod;
+		sym = newsym;
+	}
+	return sym;
+}
+
+static struct symbol *create_pointer(struct expression *expr, struct symbol *sym, int degenerate)
+{
+	struct symbol *node = alloc_symbol(expr->pos, SYM_NODE);
+	struct symbol *ptr = alloc_symbol(expr->pos, SYM_PTR);
+
+	node->ctype.base_type = ptr;
+	ptr->bit_size = bits_in_pointer;
+	ptr->ctype.alignment = pointer_alignment;
+
+	node->bit_size = bits_in_pointer;
+	node->ctype.alignment = pointer_alignment;
+
+	access_symbol(sym);
+	if (sym->ctype.modifiers & MOD_REGISTER) {
+		warning(expr->pos, "taking address of 'register' variable '%s'", show_ident(sym->ident));
+		sym->ctype.modifiers &= ~MOD_REGISTER;
+	}
+	if (sym->type == SYM_NODE) {
+		ptr->ctype.as |= sym->ctype.as;
+		ptr->ctype.modifiers |= sym->ctype.modifiers & MOD_PTRINHERIT;
+		sym = sym->ctype.base_type;
+	}
+	if (degenerate && sym->type == SYM_ARRAY) {
+		ptr->ctype.as |= sym->ctype.as;
+		ptr->ctype.modifiers |= sym->ctype.modifiers & MOD_PTRINHERIT;
+		sym = sym->ctype.base_type;
+	}
+	ptr->ctype.base_type = sym;
+
+	return node;
+}
+
+/* Arrays degenerate into pointers on pointer arithmetic */
+static struct symbol *degenerate(struct expression *expr)
+{
+	struct symbol *ctype, *base;
+
+	if (!expr)
+		return NULL;
+	ctype = expr->ctype;
+	if (!ctype)
+		return NULL;
+	base = examine_symbol_type(ctype);
+	if (ctype->type == SYM_NODE)
+		base = ctype->ctype.base_type;
+	/*
+	 * Arrays degenerate into pointers to the entries, while
+	 * functions degenerate into pointers to themselves.
+	 * If array was part of non-lvalue compound, we create a copy
+	 * of that compound first and then act as if we were dealing with
+	 * the corresponding field in there.
+	 */
+	switch (base->type) {
+	case SYM_ARRAY:
+		if (expr->type == EXPR_SLICE) {
+			struct symbol *a = alloc_symbol(expr->pos, SYM_NODE);
+			struct expression *e0, *e1, *e2, *e3, *e4;
+
+			a->ctype.base_type = expr->base->ctype;
+			a->bit_size = expr->base->ctype->bit_size;
+			a->array_size = expr->base->ctype->array_size;
+
+			e0 = alloc_expression(expr->pos, EXPR_SYMBOL);
+			e0->symbol = a;
+			e0->ctype = &lazy_ptr_ctype;
+
+			e1 = alloc_expression(expr->pos, EXPR_PREOP);
+			e1->unop = e0;
+			e1->op = '*';
+			e1->ctype = expr->base->ctype;	/* XXX */
+
+			e2 = alloc_expression(expr->pos, EXPR_ASSIGNMENT);
+			e2->left = e1;
+			e2->right = expr->base;
+			e2->op = '=';
+			e2->ctype = expr->base->ctype;
+
+			if (expr->r_bitpos) {
+				e3 = alloc_expression(expr->pos, EXPR_BINOP);
+				e3->op = '+';
+				e3->left = e0;
+				e3->right = alloc_const_expression(expr->pos,
+							bits_to_bytes(expr->r_bitpos));
+				e3->ctype = &lazy_ptr_ctype;
+			} else {
+				e3 = e0;
+			}
+
+			e4 = alloc_expression(expr->pos, EXPR_COMMA);
+			e4->left = e2;
+			e4->right = e3;
+			e4->ctype = &lazy_ptr_ctype;
+
+			expr->unop = e4;
+			expr->type = EXPR_PREOP;
+			expr->op = '*';
+		}
+	case SYM_FN:
+		if (expr->op != '*' || expr->type != EXPR_PREOP) {
+			expression_error(expr, "strange non-value function or array");
+			return &bad_ctype;
+		}
+		*expr = *expr->unop;
+		ctype = create_pointer(expr, ctype, 1);
+		expr->ctype = ctype;
+	default:
+		/* nothing */;
+	}
+	return ctype;
+}
+
+static struct symbol *evaluate_addressof(struct expression *expr)
+{
+	struct expression *op = expr->unop;
+	struct symbol *ctype;
+
+	if (op->op != '*' || op->type != EXPR_PREOP) {
+		expression_error(expr, "not addressable");
+		return NULL;
+	}
+	ctype = op->ctype;
+	*expr = *op->unop;
+
+	if (expr->type == EXPR_SYMBOL) {
+		struct symbol *sym = expr->symbol;
+		sym->ctype.modifiers |= MOD_ADDRESSABLE;
+	}
+
+	/*
+	 * symbol expression evaluation is lazy about the type
+	 * of the sub-expression, so we may have to generate
+	 * the type here if so..
+	 */
+	if (expr->ctype == &lazy_ptr_ctype) {
+		ctype = create_pointer(expr, ctype, 0);
+		expr->ctype = ctype;
+	}
+	return expr->ctype;
+}
+
+
+static struct symbol *evaluate_dereference(struct expression *expr)
+{
+	struct expression *op = expr->unop;
+	struct symbol *ctype = op->ctype, *node, *target;
+
+	/* Simplify: *&(expr) => (expr) */
+	if (op->type == EXPR_PREOP && op->op == '&') {
+		*expr = *op->unop;
+		expr->flags = CEF_NONE;
+		return expr->ctype;
+	}
+
+	examine_symbol_type(ctype);
+
+	/* Dereferencing a node drops all the node information. */
+	if (ctype->type == SYM_NODE)
+		ctype = ctype->ctype.base_type;
+
+	node = alloc_symbol(expr->pos, SYM_NODE);
+	target = ctype->ctype.base_type;
+
+	switch (ctype->type) {
+	default:
+		expression_error(expr, "cannot dereference this type");
+		return NULL;
+	case SYM_PTR:
+		node->ctype.modifiers = target->ctype.modifiers & MOD_SPECIFIER;
+		merge_type(node, ctype);
+		break;
+
+	case SYM_ARRAY:
+		if (!lvalue_expression(op)) {
+			expression_error(op, "non-lvalue array??");
+			return NULL;
+		}
+
+		/* Do the implied "addressof" on the array */
+		*op = *op->unop;
+
+		/*
+		 * When an array is dereferenced, we need to pick
+		 * up the attributes of the original node too..
+		 */
+		merge_type(node, op->ctype);
+		merge_type(node, ctype);
+		break;
+	}
+
+	node->bit_size = target->bit_size;
+	node->array_size = target->array_size;
+
+	expr->ctype = node;
+	return node;
+}
+
+/*
+ * Unary post-ops: x++ and x--
+ */
+static struct symbol *evaluate_postop(struct expression *expr)
+{
+	struct expression *op = expr->unop;
+	struct symbol *ctype = op->ctype;
+	int class = classify_type(ctype, &ctype);
+	int multiply = 0;
+
+	if (!class || class & TYPE_COMPOUND) {
+		expression_error(expr, "need scalar for ++/--");
+		return NULL;
+	}
+	if (!lvalue_expression(expr->unop)) {
+		expression_error(expr, "need lvalue expression for ++/--");
+		return NULL;
+	}
+
+	if ((class & TYPE_RESTRICT) && restricted_unop(expr->op, &ctype))
+		unrestrict(expr, class, &ctype);
+
+	if (class & TYPE_NUM) {
+		multiply = 1;
+	} else if (class == TYPE_PTR) {
+		struct symbol *target = examine_pointer_target(ctype);
+		if (!is_function(target))
+			multiply = bits_to_bytes(target->bit_size);
+	}
+
+	if (multiply) {
+		evaluate_assign_to(op, op->ctype);
+		expr->op_value = multiply;
+		expr->ctype = ctype;
+		return ctype;
+	}
+
+	expression_error(expr, "bad argument type for ++/--");
+	return NULL;
+}
+
+static struct symbol *evaluate_sign(struct expression *expr)
+{
+	struct symbol *ctype = expr->unop->ctype;
+	int class = classify_type(ctype, &ctype);
+	unsigned char flags = expr->unop->flags & ~CEF_CONST_MASK;
+
+	/* should be an arithmetic type */
+	if (!(class & TYPE_NUM))
+		return bad_expr_type(expr);
+	if (class & TYPE_RESTRICT)
+		goto Restr;
+Normal:
+	if (!(class & TYPE_FLOAT)) {
+		ctype = integer_promotion(ctype);
+		expr->unop = cast_to(expr->unop, ctype);
+	} else if (expr->op != '~') {
+		/* no conversions needed */
+	} else {
+		return bad_expr_type(expr);
+	}
+	if (expr->op == '+')
+		*expr = *expr->unop;
+	expr->flags = flags;
+	expr->ctype = ctype;
+	return ctype;
+Restr:
+	if (restricted_unop(expr->op, &ctype))
+		unrestrict(expr, class, &ctype);
+	goto Normal;
+}
+
+static struct symbol *evaluate_preop(struct expression *expr)
+{
+	struct symbol *ctype = expr->unop->ctype;
+
+	switch (expr->op) {
+	case '(':
+		*expr = *expr->unop;
+		return ctype;
+
+	case '+':
+	case '-':
+	case '~':
+		return evaluate_sign(expr);
+
+	case '*':
+		return evaluate_dereference(expr);
+
+	case '&':
+		return evaluate_addressof(expr);
+
+	case SPECIAL_INCREMENT:
+	case SPECIAL_DECREMENT:
+		/*
+		 * From a type evaluation standpoint the preops are
+		 * the same as the postops
+		 */
+		return evaluate_postop(expr);
+
+	case '!':
+		expr->flags = expr->unop->flags & ~CEF_CONST_MASK;
+		/*
+		 * A logical negation never yields an address constant
+		 * [6.6(9)].
+		 */
+		expr->flags &= ~CEF_ADDR;
+
+		if (is_safe_type(ctype))
+			warning(expr->pos, "testing a 'safe expression'");
+		if (is_float_type(ctype)) {
+			struct expression *arg = expr->unop;
+			expr->type = EXPR_COMPARE;
+			expr->op = SPECIAL_EQUAL;
+			expr->left = arg;
+			expr->right = alloc_expression(expr->pos, EXPR_FVALUE);
+			expr->right->ctype = ctype;
+			expr->right->fvalue = 0;
+		} else if (is_fouled_type(ctype)) {
+			warning(expr->pos, "%s degrades to integer",
+				show_typename(ctype->ctype.base_type));
+		}
+		/* the result is int [6.5.3.3(5)]*/
+		ctype = &int_ctype;
+		break;
+
+	default:
+		break;
+	}
+	expr->ctype = ctype;
+	return ctype;
+}
+
+static struct symbol *find_identifier(struct ident *ident, struct symbol_list *_list, int *offset)
+{
+	struct ptr_list *head = (struct ptr_list *)_list;
+	struct ptr_list *list = head;
+
+	if (!head)
+		return NULL;
+	do {
+		int i;
+		for (i = 0; i < list->nr; i++) {
+			struct symbol *sym = (struct symbol *) list->list[i];
+			if (sym->ident) {
+				if (sym->ident != ident)
+					continue;
+				*offset = sym->offset;
+				return sym;
+			} else {
+				struct symbol *ctype = sym->ctype.base_type;
+				struct symbol *sub;
+				if (!ctype)
+					continue;
+				if (ctype->type != SYM_UNION && ctype->type != SYM_STRUCT)
+					continue;
+				sub = find_identifier(ident, ctype->symbol_list, offset);
+				if (!sub)
+					continue;
+				*offset += sym->offset;
+				return sub;
+			}	
+		}
+	} while ((list = list->next) != head);
+	return NULL;
+}
+
+static struct expression *evaluate_offset(struct expression *expr, unsigned long offset)
+{
+	struct expression *add;
+
+	/*
+	 * Create a new add-expression
+	 *
+	 * NOTE! Even if we just add zero, we need a new node
+	 * for the member pointer, since it has a different
+	 * type than the original pointer. We could make that
+	 * be just a cast, but the fact is, a node is a node,
+	 * so we might as well just do the "add zero" here.
+	 */
+	add = alloc_expression(expr->pos, EXPR_BINOP);
+	add->op = '+';
+	add->left = expr;
+	add->right = alloc_expression(expr->pos, EXPR_VALUE);
+	add->right->ctype = &int_ctype;
+	add->right->value = offset;
+
+	/*
+	 * The ctype of the pointer will be lazily evaluated if
+	 * we ever take the address of this member dereference..
+	 */
+	add->ctype = &lazy_ptr_ctype;
+	/*
+	 * The resulting address of a member access through an address
+	 * constant is an address constant again [6.6(9)].
+	 */
+	add->flags = expr->flags;
+
+	return add;
+}
+
+/* structure/union dereference */
+static struct symbol *evaluate_member_dereference(struct expression *expr)
+{
+	int offset;
+	struct symbol *ctype, *member;
+	struct expression *deref = expr->deref, *add;
+	struct ident *ident = expr->member;
+	unsigned int mod;
+	int address_space;
+
+	if (!evaluate_expression(deref))
+		return NULL;
+	if (!ident) {
+		expression_error(expr, "bad member name");
+		return NULL;
+	}
+
+	ctype = deref->ctype;
+	examine_symbol_type(ctype);
+	address_space = ctype->ctype.as;
+	mod = ctype->ctype.modifiers;
+	if (ctype->type == SYM_NODE) {
+		ctype = ctype->ctype.base_type;
+		address_space |= ctype->ctype.as;
+		mod |= ctype->ctype.modifiers;
+	}
+	if (!ctype || (ctype->type != SYM_STRUCT && ctype->type != SYM_UNION)) {
+		expression_error(expr, "expected structure or union");
+		return NULL;
+	}
+	offset = 0;
+	member = find_identifier(ident, ctype->symbol_list, &offset);
+	if (!member) {
+		const char *type = ctype->type == SYM_STRUCT ? "struct" : "union";
+		const char *name = "<unnamed>";
+		int namelen = 9;
+		if (ctype->ident) {
+			name = ctype->ident->name;
+			namelen = ctype->ident->len;
+		}
+		if (ctype->symbol_list)
+			expression_error(expr, "no member '%s' in %s %.*s",
+				show_ident(ident), type, namelen, name);
+		else
+			expression_error(expr, "using member '%s' in "
+				"incomplete %s %.*s", show_ident(ident),
+				type, namelen, name);
+		return NULL;
+	}
+
+	/*
+	 * The member needs to take on the address space and modifiers of
+	 * the "parent" type.
+	 */
+	member = convert_to_as_mod(member, address_space, mod);
+	ctype = get_base_type(member);
+
+	if (!lvalue_expression(deref)) {
+		if (deref->type != EXPR_SLICE) {
+			expr->base = deref;
+			expr->r_bitpos = 0;
+		} else {
+			expr->base = deref->base;
+			expr->r_bitpos = deref->r_bitpos;
+		}
+		expr->r_bitpos += bytes_to_bits(offset);
+		expr->type = EXPR_SLICE;
+		expr->r_nrbits = member->bit_size;
+		expr->r_bitpos += member->bit_offset;
+		expr->ctype = member;
+		return member;
+	}
+
+	deref = deref->unop;
+	expr->deref = deref;
+
+	add = evaluate_offset(deref, offset);
+	expr->type = EXPR_PREOP;
+	expr->op = '*';
+	expr->unop = add;
+
+	expr->ctype = member;
+	return member;
+}
+
+static int is_promoted(struct expression *expr)
+{
+	while (1) {
+		switch (expr->type) {
+		case EXPR_BINOP:
+		case EXPR_SELECT:
+		case EXPR_CONDITIONAL:
+			return 1;
+		case EXPR_COMMA:
+			expr = expr->right;
+			continue;
+		case EXPR_PREOP:
+			switch (expr->op) {
+			case '(':
+				expr = expr->unop;
+				continue;
+			case '+':
+			case '-':
+			case '~':
+				return 1;
+			default:
+				return 0;
+			}
+		default:
+			return 0;
+		}
+	}
+}
+
+
+static struct symbol *evaluate_cast(struct expression *);
+
+static struct symbol *evaluate_type_information(struct expression *expr)
+{
+	struct symbol *sym = expr->cast_type;
+	if (!sym) {
+		sym = evaluate_expression(expr->cast_expression);
+		if (!sym)
+			return NULL;
+		/*
+		 * Expressions of restricted types will possibly get
+		 * promoted - check that here
+		 */
+		if (is_restricted_type(sym)) {
+			if (sym->bit_size < bits_in_int && is_promoted(expr))
+				sym = &int_ctype;
+		} else if (is_fouled_type(sym)) {
+			sym = &int_ctype;
+		}
+	}
+	examine_symbol_type(sym);
+	if (is_bitfield_type(sym)) {
+		expression_error(expr, "trying to examine bitfield type");
+		return NULL;
+	}
+	return sym;
+}
+
+static struct symbol *evaluate_sizeof(struct expression *expr)
+{
+	struct symbol *type;
+	int size;
+
+	type = evaluate_type_information(expr);
+	if (!type)
+		return NULL;
+
+	size = type->bit_size;
+
+	if (size < 0 && is_void_type(type)) {
+		if (Wpointer_arith)
+			warning(expr->pos, "expression using sizeof(void)");
+		size = bits_in_char;
+	}
+
+	if (size == 1 && is_bool_type(type)) {
+		if (Wsizeof_bool)
+			warning(expr->pos, "expression using sizeof bool");
+		size = bits_in_char;
+	}
+
+	if (is_function(type->ctype.base_type)) {
+		if (Wpointer_arith)
+			warning(expr->pos, "expression using sizeof on a function");
+		size = bits_in_char;
+	}
+
+	if ((size < 0) || (size & (bits_in_char - 1)))
+		expression_error(expr, "cannot size expression");
+
+	expr->type = EXPR_VALUE;
+	expr->value = bits_to_bytes(size);
+	expr->taint = 0;
+	expr->ctype = size_t_ctype;
+	return size_t_ctype;
+}
+
+static struct symbol *evaluate_ptrsizeof(struct expression *expr)
+{
+	struct symbol *type;
+	int size;
+
+	type = evaluate_type_information(expr);
+	if (!type)
+		return NULL;
+
+	if (type->type == SYM_NODE)
+		type = type->ctype.base_type;
+	if (!type)
+		return NULL;
+	switch (type->type) {
+	case SYM_ARRAY:
+		break;
+	case SYM_PTR:
+		type = get_base_type(type);
+		if (type)
+			break;
+	default:
+		expression_error(expr, "expected pointer expression");
+		return NULL;
+	}
+	size = type->bit_size;
+	if (size & (bits_in_char-1))
+		size = 0;
+	expr->type = EXPR_VALUE;
+	expr->value = bits_to_bytes(size);
+	expr->taint = 0;
+	expr->ctype = size_t_ctype;
+	return size_t_ctype;
+}
+
+static struct symbol *evaluate_alignof(struct expression *expr)
+{
+	struct symbol *type;
+
+	type = evaluate_type_information(expr);
+	if (!type)
+		return NULL;
+
+	expr->type = EXPR_VALUE;
+	expr->value = type->ctype.alignment;
+	expr->taint = 0;
+	expr->ctype = size_t_ctype;
+	return size_t_ctype;
+}
+
+static int evaluate_arguments(struct symbol *fn, struct expression_list *head)
+{
+	struct expression *expr;
+	struct symbol_list *argument_types = fn->arguments;
+	struct symbol *argtype;
+	int i = 1;
+
+	PREPARE_PTR_LIST(argument_types, argtype);
+	FOR_EACH_PTR (head, expr) {
+		struct expression **p = THIS_ADDRESS(expr);
+		struct symbol *ctype, *target;
+		ctype = evaluate_expression(expr);
+
+		if (!ctype)
+			return 0;
+
+		target = argtype;
+		if (!target) {
+			struct symbol *type;
+			int class = classify_type(ctype, &type);
+			if (is_int(class)) {
+				*p = cast_to(expr, integer_promotion(type));
+			} else if (class & TYPE_FLOAT) {
+				unsigned long mod = type->ctype.modifiers;
+				if (!(mod & (MOD_LONG_ALL)))
+					*p = cast_to(expr, &double_ctype);
+			} else if (class & TYPE_PTR) {
+				if (expr->ctype == &null_ctype)
+					*p = cast_to(expr, &ptr_ctype);
+				else
+					degenerate(expr);
+			}
+		} else if (!target->forced_arg){
+			static char where[30];
+			examine_symbol_type(target);
+			sprintf(where, "argument %d", i);
+			compatible_argument_type(expr, target, p, where);
+		}
+
+		i++;
+		NEXT_PTR_LIST(argtype);
+	} END_FOR_EACH_PTR(expr);
+	FINISH_PTR_LIST(argtype);
+	return 1;
+}
+
+static void convert_index(struct expression *e)
+{
+	struct expression *child = e->idx_expression;
+	unsigned from = e->idx_from;
+	unsigned to = e->idx_to + 1;
+	e->type = EXPR_POS;
+	e->init_offset = from * bits_to_bytes(e->ctype->bit_size);
+	e->init_nr = to - from;
+	e->init_expr = child;
+}
+
+static void convert_ident(struct expression *e)
+{
+	struct expression *child = e->ident_expression;
+	int offset = e->offset;
+
+	e->type = EXPR_POS;
+	e->init_offset = offset;
+	e->init_nr = 1;
+	e->init_expr = child;
+}
+
+static void convert_designators(struct expression *e)
+{
+	while (e) {
+		if (e->type == EXPR_INDEX)
+			convert_index(e);
+		else if (e->type == EXPR_IDENTIFIER)
+			convert_ident(e);
+		else
+			break;
+		e = e->init_expr;
+	}
+}
+
+static void excess(struct expression *e, const char *s)
+{
+	warning(e->pos, "excessive elements in %s initializer", s);
+}
+
+/*
+ * implicit designator for the first element
+ */
+static struct expression *first_subobject(struct symbol *ctype, int class,
+					  struct expression **v)
+{
+	struct expression *e = *v, *new;
+
+	if (ctype->type == SYM_NODE)
+		ctype = ctype->ctype.base_type;
+
+	if (class & TYPE_PTR) { /* array */
+		if (!ctype->bit_size)
+			return NULL;
+		new = alloc_expression(e->pos, EXPR_INDEX);
+		new->idx_expression = e;
+		new->ctype = ctype->ctype.base_type;
+	} else  {
+		struct symbol *field, *p;
+		PREPARE_PTR_LIST(ctype->symbol_list, p);
+		while (p && !p->ident && is_bitfield_type(p))
+			NEXT_PTR_LIST(p);
+		field = p;
+		FINISH_PTR_LIST(p);
+		if (!field)
+			return NULL;
+		new = alloc_expression(e->pos, EXPR_IDENTIFIER);
+		new->ident_expression = e;
+		new->field = new->ctype = field;
+		new->offset = field->offset;
+	}
+	*v = new;
+	return new;
+}
+
+/*
+ * sanity-check explicit designators; return the innermost one or NULL
+ * in case of error.  Assign types.
+ */
+static struct expression *check_designators(struct expression *e,
+					    struct symbol *ctype)
+{
+	struct expression *last = NULL;
+	const char *err;
+	while (1) {
+		if (ctype->type == SYM_NODE)
+			ctype = ctype->ctype.base_type;
+		if (e->type == EXPR_INDEX) {
+			struct symbol *type;
+			if (ctype->type != SYM_ARRAY) {
+				err = "array index in non-array";
+				break;
+			}
+			type = ctype->ctype.base_type;
+			if (ctype->bit_size >= 0 && type->bit_size >= 0) {
+				unsigned offset = array_element_offset(type->bit_size, e->idx_to);
+				if (offset >= ctype->bit_size) {
+					err = "index out of bounds in";
+					break;
+				}
+			}
+			e->ctype = ctype = type;
+			ctype = type;
+			last = e;
+			if (!e->idx_expression) {
+				err = "invalid";
+				break;
+			}
+			e = e->idx_expression;
+		} else if (e->type == EXPR_IDENTIFIER) {
+			int offset = 0;
+			if (ctype->type != SYM_STRUCT && ctype->type != SYM_UNION) {
+				err = "field name not in struct or union";
+				break;
+			}
+			ctype = find_identifier(e->expr_ident, ctype->symbol_list, &offset);
+			if (!ctype) {
+				err = "unknown field name in";
+				break;
+			}
+			e->offset = offset;
+			e->field = e->ctype = ctype;
+			last = e;
+			if (!e->ident_expression) {
+				err = "invalid";
+				break;
+			}
+			e = e->ident_expression;
+		} else if (e->type == EXPR_POS) {
+			err = "internal front-end error: EXPR_POS in";
+			break;
+		} else
+			return last;
+	}
+	expression_error(e, "%s initializer", err);
+	return NULL;
+}
+
+/*
+ * choose the next subobject to initialize.
+ *
+ * Get designators for next element, switch old ones to EXPR_POS.
+ * Return the resulting expression or NULL if we'd run out of subobjects.
+ * The innermost designator is returned in *v.  Designators in old
+ * are assumed to be already sanity-checked.
+ */
+static struct expression *next_designators(struct expression *old,
+			     struct symbol *ctype,
+			     struct expression *e, struct expression **v)
+{
+	struct expression *new = NULL;
+
+	if (!old)
+		return NULL;
+	if (old->type == EXPR_INDEX) {
+		struct expression *copy;
+		unsigned n;
+
+		copy = next_designators(old->idx_expression,
+					old->ctype, e, v);
+		if (!copy) {
+			n = old->idx_to + 1;
+			if (array_element_offset(old->ctype->bit_size, n) == ctype->bit_size) {
+				convert_index(old);
+				return NULL;
+			}
+			copy = e;
+			*v = new = alloc_expression(e->pos, EXPR_INDEX);
+		} else {
+			n = old->idx_to;
+			new = alloc_expression(e->pos, EXPR_INDEX);
+		}
+
+		new->idx_from = new->idx_to = n;
+		new->idx_expression = copy;
+		new->ctype = old->ctype;
+		convert_index(old);
+	} else if (old->type == EXPR_IDENTIFIER) {
+		struct expression *copy;
+		struct symbol *field;
+		int offset = 0;
+
+		copy = next_designators(old->ident_expression,
+					old->ctype, e, v);
+		if (!copy) {
+			field = old->field->next_subobject;
+			if (!field) {
+				convert_ident(old);
+				return NULL;
+			}
+			copy = e;
+			*v = new = alloc_expression(e->pos, EXPR_IDENTIFIER);
+			/*
+			 * We can't necessarily trust "field->offset",
+			 * because the field might be in an anonymous
+			 * union, and the field offset is then the offset
+			 * within that union.
+			 *
+			 * The "old->offset - old->field->offset"
+			 * would be the offset of such an anonymous
+			 * union.
+			 */
+			offset = old->offset - old->field->offset;
+		} else {
+			field = old->field;
+			new = alloc_expression(e->pos, EXPR_IDENTIFIER);
+		}
+
+		new->field = field;
+		new->expr_ident = field->ident;
+		new->ident_expression = copy;
+		new->ctype = field;
+		new->offset = field->offset + offset;
+		convert_ident(old);
+	}
+	return new;
+}
+
+static int handle_initializer(struct expression **ep, int nested,
+		int class, struct symbol *ctype, unsigned long mods);
+
+/*
+ * deal with traversing subobjects [6.7.8(17,18,20)]
+ */
+static void handle_list_initializer(struct expression *expr,
+		int class, struct symbol *ctype, unsigned long mods)
+{
+	struct expression *e, *last = NULL, *top = NULL, *next;
+	int jumped = 0;
+
+	FOR_EACH_PTR(expr->expr_list, e) {
+		struct expression **v;
+		struct symbol *type;
+		int lclass;
+
+		if (e->type != EXPR_INDEX && e->type != EXPR_IDENTIFIER) {
+			struct symbol *struct_sym;
+			if (!top) {
+				top = e;
+				last = first_subobject(ctype, class, &top);
+			} else {
+				last = next_designators(last, ctype, e, &top);
+			}
+			if (!last) {
+				excess(e, class & TYPE_PTR ? "array" :
+							"struct or union");
+				DELETE_CURRENT_PTR(e);
+				continue;
+			}
+			struct_sym = ctype->type == SYM_NODE ? ctype->ctype.base_type : ctype;
+			if (Wdesignated_init && struct_sym->designated_init)
+				warning(e->pos, "%s%.*s%spositional init of field in %s %s, declared with attribute designated_init",
+					ctype->ident ? "in initializer for " : "",
+					ctype->ident ? ctype->ident->len : 0,
+					ctype->ident ? ctype->ident->name : "",
+					ctype->ident ? ": " : "",
+					get_type_name(struct_sym->type),
+					show_ident(struct_sym->ident));
+			if (jumped) {
+				warning(e->pos, "advancing past deep designator");
+				jumped = 0;
+			}
+			REPLACE_CURRENT_PTR(e, last);
+		} else {
+			next = check_designators(e, ctype);
+			if (!next) {
+				DELETE_CURRENT_PTR(e);
+				continue;
+			}
+			top = next;
+			/* deeper than one designator? */
+			jumped = top != e;
+			convert_designators(last);
+			last = e;
+		}
+
+found:
+		lclass = classify_type(top->ctype, &type);
+		if (top->type == EXPR_INDEX)
+			v = &top->idx_expression;
+		else
+			v = &top->ident_expression;
+
+		mods |= ctype->ctype.modifiers & MOD_STORAGE;
+		if (handle_initializer(v, 1, lclass, top->ctype, mods))
+			continue;
+
+		if (!(lclass & TYPE_COMPOUND)) {
+			warning(e->pos, "bogus scalar initializer");
+			DELETE_CURRENT_PTR(e);
+			continue;
+		}
+
+		next = first_subobject(type, lclass, v);
+		if (next) {
+			warning(e->pos, "missing braces around initializer");
+			top = next;
+			goto found;
+		}
+
+		DELETE_CURRENT_PTR(e);
+		excess(e, lclass & TYPE_PTR ? "array" : "struct or union");
+
+	} END_FOR_EACH_PTR(e);
+
+	convert_designators(last);
+	expr->ctype = ctype;
+}
+
+static int is_string_literal(struct expression **v)
+{
+	struct expression *e = *v;
+	while (e && e->type == EXPR_PREOP && e->op == '(')
+		e = e->unop;
+	if (!e || e->type != EXPR_STRING)
+		return 0;
+	if (e != *v && Wparen_string)
+		warning(e->pos,
+			"array initialized from parenthesized string constant");
+	*v = e;
+	return 1;
+}
+
+/*
+ * We want a normal expression, possibly in one layer of braces.  Warn
+ * if the latter happens inside a list (it's legal, but likely to be
+ * an effect of screwup).  In case of anything not legal, we are definitely
+ * having an effect of screwup, so just fail and let the caller warn.
+ */
+static struct expression *handle_scalar(struct expression *e, int nested)
+{
+	struct expression *v = NULL, *p;
+	int count = 0;
+
+	/* normal case */
+	if (e->type != EXPR_INITIALIZER)
+		return e;
+
+	FOR_EACH_PTR(e->expr_list, p) {
+		if (!v)
+			v = p;
+		count++;
+	} END_FOR_EACH_PTR(p);
+	if (count != 1)
+		return NULL;
+	switch(v->type) {
+	case EXPR_INITIALIZER:
+	case EXPR_INDEX:
+	case EXPR_IDENTIFIER:
+		return NULL;
+	default:
+		break;
+	}
+	if (nested)
+		warning(e->pos, "braces around scalar initializer");
+	return v;
+}
+
+/*
+ * deal with the cases that don't care about subobjects:
+ * scalar <- assignment expression, possibly in braces [6.7.8(11)]
+ * character array <- string literal, possibly in braces [6.7.8(14)]
+ * struct or union <- assignment expression of compatible type [6.7.8(13)]
+ * compound type <- initializer list in braces [6.7.8(16)]
+ * The last one punts to handle_list_initializer() which, in turn will call
+ * us for individual elements of the list.
+ *
+ * We do not handle 6.7.8(15) (wide char array <- wide string literal) for
+ * the lack of support of wide char stuff in general.
+ *
+ * One note: we need to take care not to evaluate a string literal until
+ * we know that we *will* handle it right here.  Otherwise we would screw
+ * the cases like struct { struct {char s[10]; ...} ...} initialized with
+ * { "string", ...} - we need to preserve that string literal recognizable
+ * until we dig into the inner struct.
+ */
+static int handle_initializer(struct expression **ep, int nested,
+		int class, struct symbol *ctype, unsigned long mods)
+{
+	int is_string = is_string_type(ctype);
+	struct expression *e = *ep, *p;
+	struct symbol *type;
+
+	if (!e)
+		return 0;
+
+	/* scalar */
+	if (!(class & TYPE_COMPOUND)) {
+		e = handle_scalar(e, nested);
+		if (!e)
+			return 0;
+		*ep = e;
+		if (!evaluate_expression(e))
+			return 1;
+		compatible_assignment_types(e, ctype, ep, "initializer");
+		/*
+		 * Initializers for static storage duration objects
+		 * shall be constant expressions or a string literal [6.7.8(4)].
+		 */
+		mods |= ctype->ctype.modifiers;
+		mods &= (MOD_TOPLEVEL | MOD_STATIC);
+		if (mods && !(e->flags & (CEF_ACE | CEF_ADDR)))
+			if (Wconstexpr_not_const)
+				warning(e->pos, "non-constant initializer for static object");
+
+		return 1;
+	}
+
+	/*
+	 * sublist; either a string, or we dig in; the latter will deal with
+	 * pathologies, so we don't need anything fancy here.
+	 */
+	if (e->type == EXPR_INITIALIZER) {
+		if (is_string) {
+			struct expression *v = NULL;
+			int count = 0;
+
+			FOR_EACH_PTR(e->expr_list, p) {
+				if (!v)
+					v = p;
+				count++;
+			} END_FOR_EACH_PTR(p);
+			if (count == 1 && is_string_literal(&v)) {
+				*ep = e = v;
+				goto String;
+			}
+		}
+		handle_list_initializer(e, class, ctype, mods);
+		return 1;
+	}
+
+	/* string */
+	if (is_string_literal(&e)) {
+		/* either we are doing array of char, or we'll have to dig in */
+		if (is_string) {
+			*ep = e;
+			goto String;
+		}
+		return 0;
+	}
+	/* struct or union can be initialized by compatible */
+	if (class != TYPE_COMPOUND)
+		return 0;
+	type = evaluate_expression(e);
+	if (!type)
+		return 0;
+	if (ctype->type == SYM_NODE)
+		ctype = ctype->ctype.base_type;
+	if (type->type == SYM_NODE)
+		type = type->ctype.base_type;
+	if (ctype == type)
+		return 1;
+	return 0;
+
+String:
+	p = alloc_expression(e->pos, EXPR_STRING);
+	*p = *e;
+	type = evaluate_expression(p);
+	if (ctype->bit_size != -1) {
+		if (ctype->bit_size + bits_in_char < type->bit_size)
+			warning(e->pos,
+				"too long initializer-string for array of char");
+		else if (Winit_cstring && ctype->bit_size + bits_in_char == type->bit_size) {
+			warning(e->pos,
+				"too long initializer-string for array of char(no space for nul char)");
+		}
+	}
+	*ep = p;
+	return 1;
+}
+
+static void evaluate_initializer(struct symbol *ctype, struct expression **ep)
+{
+	struct symbol *type;
+	int class = classify_type(ctype, &type);
+	if (!handle_initializer(ep, 0, class, ctype, 0))
+		expression_error(*ep, "invalid initializer");
+}
+
+static struct symbol *cast_to_bool(struct expression *expr)
+{
+	struct expression *old = expr->cast_expression;
+	struct expression *zero;
+	struct symbol *otype;
+	int oclass = classify_type(degenerate(old), &otype);
+	struct symbol *ctype;
+
+	if (oclass & TYPE_COMPOUND)
+		return NULL;
+
+	zero = alloc_const_expression(expr->pos, 0);
+	expr->op = SPECIAL_NOTEQUAL;
+	ctype = usual_conversions(expr->op, old, zero,
+			oclass, TYPE_NUM, otype, zero->ctype);
+	expr->type = EXPR_COMPARE;
+	expr->left = cast_to(old, ctype);
+	expr->right = cast_to(zero, ctype);
+
+	return expr->ctype;
+}
+
+static int cast_flags(struct expression *expr, struct expression *old)
+{
+	struct symbol *t;
+	int class;
+	int flags = CEF_NONE;
+
+	class = classify_type(expr->ctype, &t);
+	if (class & TYPE_NUM) {
+		flags = old->flags & ~CEF_CONST_MASK;
+		/*
+		 * Casts to numeric types never result in address
+		 * constants [6.6(9)].
+		 */
+		flags &= ~CEF_ADDR;
+
+		/*
+		 * As an extension, treat address constants cast to
+		 * integer type as an arithmetic constant.
+		 */
+		if (old->flags & CEF_ADDR)
+			flags = CEF_ACE;
+
+		/*
+		 * Cast to float type -> not an integer constant
+		 * expression [6.6(6)].
+		 */
+		if (class & TYPE_FLOAT)
+			flags &= ~CEF_CLR_ICE;
+		/*
+		 * Casts of float literals to integer type results in
+		 * a constant integer expression [6.6(6)].
+		 */
+		else if (old->flags & CEF_FLOAT)
+			flags = CEF_SET_ICE;
+	} else if (class & TYPE_PTR) {
+		/*
+		 * Casts of integer literals to pointer type yield
+		 * address constants [6.6(9)].
+		 *
+		 * As an extension, treat address constants cast to a
+		 * different pointer type as address constants again.
+		 *
+		 * As another extension, treat integer constant
+		 * expressions (in contrast to literals) cast to
+		 * pointer type as address constants.
+		 */
+		if (old->flags & (CEF_ICE | CEF_ADDR))
+			flags = CEF_ADDR;
+	}
+
+	return flags;
+}
+
+static struct symbol *evaluate_cast(struct expression *expr)
+{
+	struct expression *target = expr->cast_expression;
+	struct symbol *ctype;
+	struct symbol *t1, *t2;
+	int class1, class2;
+	int as1 = 0, as2 = 0;
+
+	if (!target)
+		return NULL;
+
+	/*
+	 * Special case: a cast can be followed by an
+	 * initializer, in which case we need to pass
+	 * the type value down to that initializer rather
+	 * than trying to evaluate it as an expression
+	 *
+	 * A more complex case is when the initializer is
+	 * dereferenced as part of a post-fix expression.
+	 * We need to produce an expression that can be dereferenced.
+	 */
+	if (target->type == EXPR_INITIALIZER) {
+		struct symbol *sym = expr->cast_type;
+		struct expression *addr = alloc_expression(expr->pos, EXPR_SYMBOL);
+
+		sym->initializer = target;
+		evaluate_symbol(sym);
+
+		addr->ctype = &lazy_ptr_ctype;	/* Lazy eval */
+		addr->symbol = sym;
+		if (sym->ctype.modifiers & MOD_TOPLEVEL)
+			addr->flags |= CEF_ADDR;
+
+		expr->type = EXPR_PREOP;
+		expr->op = '*';
+		expr->unop = addr;
+		expr->ctype = sym;
+
+		return sym;
+	}
+
+	ctype = examine_symbol_type(expr->cast_type);
+	expr->ctype = ctype;
+	expr->cast_type = ctype;
+
+	evaluate_expression(target);
+	degenerate(target);
+
+	class1 = classify_type(ctype, &t1);
+
+	expr->flags = cast_flags(expr, target);
+
+	/*
+	 * You can always throw a value away by casting to
+	 * "void" - that's an implicit "force". Note that
+	 * the same is _not_ true of "void *".
+	 */
+	if (t1 == &void_ctype)
+		goto out;
+
+	if (class1 & (TYPE_COMPOUND | TYPE_FN))
+		warning(expr->pos, "cast to non-scalar");
+
+	t2 = target->ctype;
+	if (!t2) {
+		expression_error(expr, "cast from unknown type");
+		goto out;
+	}
+	class2 = classify_type(t2, &t2);
+
+	if (class2 & TYPE_COMPOUND)
+		warning(expr->pos, "cast from non-scalar");
+
+	if (expr->type == EXPR_FORCE_CAST)
+		goto out;
+
+	/* allowed cast unfouls */
+	if (class2 & TYPE_FOULED)
+		t2 = unfoul(t2);
+
+	if (t1 != t2) {
+		if ((class1 & TYPE_RESTRICT) && restricted_value(target, t1))
+			warning(expr->pos, "cast to %s",
+				show_typename(t1));
+		if (class2 & TYPE_RESTRICT) {
+			if (t1 == &bool_ctype) {
+				if (class2 & TYPE_FOULED)
+					warning(expr->pos, "%s degrades to integer",
+						show_typename(t2));
+			} else {
+				warning(expr->pos, "cast from %s",
+					show_typename(t2));
+			}
+		}
+	}
+
+	if (t1 == &ulong_ctype)
+		as1 = -1;
+	else if (class1 == TYPE_PTR) {
+		examine_pointer_target(t1);
+		as1 = t1->ctype.as;
+	}
+
+	if (t2 == &ulong_ctype)
+		as2 = -1;
+	else if (class2 == TYPE_PTR) {
+		examine_pointer_target(t2);
+		as2 = t2->ctype.as;
+	}
+
+	if (!as1 && as2 > 0)
+		warning(expr->pos, "cast removes address space of expression");
+	if (as1 > 0 && as2 > 0 && as1 != as2)
+		warning(expr->pos, "cast between address spaces (<asn:%d>-><asn:%d>)", as2, as1);
+	if (as1 > 0 && !as2 &&
+	    !is_null_pointer_constant(target) && Wcast_to_as)
+		warning(expr->pos,
+			"cast adds address space to expression (<asn:%d>)", as1);
+
+	if (!(t1->ctype.modifiers & MOD_PTRINHERIT) && class1 == TYPE_PTR &&
+	    !as1 && (target->flags & CEF_ICE)) {
+		if (t1->ctype.base_type == &void_ctype) {
+			if (is_zero_constant(target)) {
+				/* NULL */
+				expr->type = EXPR_VALUE;
+				expr->ctype = &null_ctype;
+				expr->value = 0;
+				return expr->ctype;
+			}
+		}
+	}
+
+	if (t1 == &bool_ctype)
+		cast_to_bool(expr);
+
+out:
+	return ctype;
+}
+
+/*
+ * Evaluate a call expression with a symbol. This
+ * should expand inline functions, and evaluate
+ * builtins.
+ */
+static int evaluate_symbol_call(struct expression *expr)
+{
+	struct expression *fn = expr->fn;
+	struct symbol *ctype = fn->ctype;
+
+	if (fn->type != EXPR_PREOP)
+		return 0;
+
+	if (ctype->op && ctype->op->evaluate)
+		return ctype->op->evaluate(expr);
+
+	if (ctype->ctype.modifiers & MOD_INLINE) {
+		int ret;
+		struct symbol *curr = current_fn;
+
+		if (ctype->definition)
+			ctype = ctype->definition;
+
+		current_fn = ctype->ctype.base_type;
+
+		ret = inline_function(expr, ctype);
+
+		/* restore the old function */
+		current_fn = curr;
+		return ret;
+	}
+
+	return 0;
+}
+
+static struct symbol *evaluate_call(struct expression *expr)
+{
+	int args, fnargs;
+	struct symbol *ctype, *sym;
+	struct expression *fn = expr->fn;
+	struct expression_list *arglist = expr->args;
+
+	if (!evaluate_expression(fn))
+		return NULL;
+	sym = ctype = fn->ctype;
+	if (ctype->type == SYM_NODE)
+		ctype = ctype->ctype.base_type;
+	if (ctype->type == SYM_PTR)
+		ctype = get_base_type(ctype);
+
+	if (ctype->type != SYM_FN) {
+		struct expression *arg;
+		expression_error(expr, "not a function %s",
+			     show_ident(sym->ident));
+		/* do typechecking in arguments */
+		FOR_EACH_PTR (arglist, arg) {
+			evaluate_expression(arg);
+		} END_FOR_EACH_PTR(arg);
+		return NULL;
+	}
+
+	examine_fn_arguments(ctype);
+        if (sym->type == SYM_NODE && fn->type == EXPR_PREOP &&
+	    sym->op && sym->op->args) {
+		if (!sym->op->args(expr))
+			return NULL;
+	} else {
+		if (!evaluate_arguments(ctype, arglist))
+			return NULL;
+		args = expression_list_size(expr->args);
+		fnargs = symbol_list_size(ctype->arguments);
+		if (args < fnargs) {
+			expression_error(expr,
+				     "not enough arguments for function %s",
+				     show_ident(sym->ident));
+			return NULL;
+		}
+		if (args > fnargs && !ctype->variadic)
+			expression_error(expr,
+				     "too many arguments for function %s",
+				     show_ident(sym->ident));
+	}
+	expr->ctype = ctype->ctype.base_type;
+	if (sym->type == SYM_NODE) {
+		if (evaluate_symbol_call(expr))
+			return expr->ctype;
+	}
+	return expr->ctype;
+}
+
+static struct symbol *evaluate_offsetof(struct expression *expr)
+{
+	struct expression *e = expr->down;
+	struct symbol *ctype = expr->in;
+	int class;
+
+	if (expr->op == '.') {
+		struct symbol *field;
+		int offset = 0;
+		if (!ctype) {
+			expression_error(expr, "expected structure or union");
+			return NULL;
+		}
+		examine_symbol_type(ctype);
+		class = classify_type(ctype, &ctype);
+		if (class != TYPE_COMPOUND) {
+			expression_error(expr, "expected structure or union");
+			return NULL;
+		}
+
+		field = find_identifier(expr->ident, ctype->symbol_list, &offset);
+		if (!field) {
+			expression_error(expr, "unknown member");
+			return NULL;
+		}
+		ctype = field;
+		expr->type = EXPR_VALUE;
+		expr->flags = CEF_SET_ICE;
+		expr->value = offset;
+		expr->taint = 0;
+		expr->ctype = size_t_ctype;
+	} else {
+		if (!ctype) {
+			expression_error(expr, "expected structure or union");
+			return NULL;
+		}
+		examine_symbol_type(ctype);
+		class = classify_type(ctype, &ctype);
+		if (class != (TYPE_COMPOUND | TYPE_PTR)) {
+			expression_error(expr, "expected array");
+			return NULL;
+		}
+		ctype = ctype->ctype.base_type;
+		if (!expr->index) {
+			expr->type = EXPR_VALUE;
+			expr->flags = CEF_SET_ICE;
+			expr->value = 0;
+			expr->taint = 0;
+			expr->ctype = size_t_ctype;
+		} else {
+			struct expression *idx = expr->index, *m;
+			struct symbol *i_type = evaluate_expression(idx);
+			unsigned old_idx_flags;
+			int i_class = classify_type(i_type, &i_type);
+
+			if (!is_int(i_class)) {
+				expression_error(expr, "non-integer index");
+				return NULL;
+			}
+			unrestrict(idx, i_class, &i_type);
+			old_idx_flags = idx->flags;
+			idx = cast_to(idx, size_t_ctype);
+			idx->flags = old_idx_flags;
+			m = alloc_const_expression(expr->pos,
+						   bits_to_bytes(ctype->bit_size));
+			m->ctype = size_t_ctype;
+			m->flags = CEF_SET_INT;
+			expr->type = EXPR_BINOP;
+			expr->left = idx;
+			expr->right = m;
+			expr->op = '*';
+			expr->ctype = size_t_ctype;
+			expr->flags = m->flags & idx->flags & ~CEF_CONST_MASK;
+		}
+	}
+	if (e) {
+		struct expression *copy = __alloc_expression(0);
+		*copy = *expr;
+		if (e->type == EXPR_OFFSETOF)
+			e->in = ctype;
+		if (!evaluate_expression(e))
+			return NULL;
+		expr->type = EXPR_BINOP;
+		expr->flags = e->flags & copy->flags & ~CEF_CONST_MASK;
+		expr->op = '+';
+		expr->ctype = size_t_ctype;
+		expr->left = copy;
+		expr->right = e;
+	}
+	return size_t_ctype;
+}
+
+struct symbol *evaluate_expression(struct expression *expr)
+{
+	if (!expr)
+		return NULL;
+	if (expr->ctype)
+		return expr->ctype;
+
+	switch (expr->type) {
+	case EXPR_VALUE:
+	case EXPR_FVALUE:
+		expression_error(expr, "value expression without a type");
+		return NULL;
+	case EXPR_STRING:
+		return evaluate_string(expr);
+	case EXPR_SYMBOL:
+		return evaluate_symbol_expression(expr);
+	case EXPR_BINOP:
+		if (!evaluate_expression(expr->left))
+			return NULL;
+		if (!evaluate_expression(expr->right))
+			return NULL;
+		return evaluate_binop(expr);
+	case EXPR_LOGICAL:
+		return evaluate_logical(expr);
+	case EXPR_COMMA:
+		evaluate_expression(expr->left);
+		if (!evaluate_expression(expr->right))
+			return NULL;
+		return evaluate_comma(expr);
+	case EXPR_COMPARE:
+		if (!evaluate_expression(expr->left))
+			return NULL;
+		if (!evaluate_expression(expr->right))
+			return NULL;
+		return evaluate_compare(expr);
+	case EXPR_ASSIGNMENT:
+		if (!evaluate_expression(expr->left))
+			return NULL;
+		if (!evaluate_expression(expr->right))
+			return NULL;
+		return evaluate_assignment(expr);
+	case EXPR_PREOP:
+		if (!evaluate_expression(expr->unop))
+			return NULL;
+		return evaluate_preop(expr);
+	case EXPR_POSTOP:
+		if (!evaluate_expression(expr->unop))
+			return NULL;
+		return evaluate_postop(expr);
+	case EXPR_CAST:
+	case EXPR_FORCE_CAST:
+	case EXPR_IMPLIED_CAST:
+		return evaluate_cast(expr);
+	case EXPR_SIZEOF:
+		return evaluate_sizeof(expr);
+	case EXPR_PTRSIZEOF:
+		return evaluate_ptrsizeof(expr);
+	case EXPR_ALIGNOF:
+		return evaluate_alignof(expr);
+	case EXPR_DEREF:
+		return evaluate_member_dereference(expr);
+	case EXPR_CALL:
+		return evaluate_call(expr);
+	case EXPR_SELECT:
+	case EXPR_CONDITIONAL:
+		return evaluate_conditional_expression(expr);
+	case EXPR_STATEMENT:
+		expr->ctype = evaluate_statement(expr->statement);
+		return expr->ctype;
+
+	case EXPR_LABEL:
+		expr->ctype = &ptr_ctype;
+		return &ptr_ctype;
+
+	case EXPR_TYPE:
+		/* Evaluate the type of the symbol .. */
+		evaluate_symbol(expr->symbol);
+		/* .. but the type of the _expression_ is a "type" */
+		expr->ctype = &type_ctype;
+		return &type_ctype;
+
+	case EXPR_OFFSETOF:
+		return evaluate_offsetof(expr);
+
+	/* These can not exist as stand-alone expressions */
+	case EXPR_INITIALIZER:
+	case EXPR_IDENTIFIER:
+	case EXPR_INDEX:
+	case EXPR_POS:
+		expression_error(expr, "internal front-end error: initializer in expression");
+		return NULL;
+	case EXPR_SLICE:
+		expression_error(expr, "internal front-end error: SLICE re-evaluated");
+		return NULL;
+	}
+	return NULL;
+}
+
+static void check_duplicates(struct symbol *sym)
+{
+	int declared = 0;
+	struct symbol *next = sym;
+	int initialized = sym->initializer != NULL;
+
+	while ((next = next->same_symbol) != NULL) {
+		const char *typediff;
+		evaluate_symbol(next);
+		if (initialized && next->initializer) {
+			sparse_error(sym->pos, "symbol '%s' has multiple initializers (originally initialized at %s:%d)",
+				show_ident(sym->ident),
+				stream_name(next->pos.stream), next->pos.line);
+			/* Only warn once */
+			initialized = 0;
+		}
+		declared++;
+		typediff = type_difference(&sym->ctype, &next->ctype, 0, 0);
+		if (typediff) {
+			sparse_error(sym->pos, "symbol '%s' redeclared with different type (originally declared at %s:%d) - %s",
+				show_ident(sym->ident),
+				stream_name(next->pos.stream), next->pos.line, typediff);
+			return;
+		}
+	}
+	if (!declared) {
+		unsigned long mod = sym->ctype.modifiers;
+		if (mod & (MOD_STATIC | MOD_REGISTER))
+			return;
+		if (!(mod & MOD_TOPLEVEL))
+			return;
+		if (!Wdecl)
+			return;
+		if (sym->ident == &main_ident)
+			return;
+		warning(sym->pos, "symbol '%s' was not declared. Should it be static?", show_ident(sym->ident));
+	}
+}
+
+static struct symbol *evaluate_symbol(struct symbol *sym)
+{
+	struct symbol *base_type;
+
+	if (!sym)
+		return sym;
+	if (sym->evaluated)
+		return sym;
+	sym->evaluated = 1;
+
+	sym = examine_symbol_type(sym);
+	base_type = get_base_type(sym);
+	if (!base_type)
+		return NULL;
+
+	/* Evaluate the initializers */
+	if (sym->initializer)
+		evaluate_initializer(sym, &sym->initializer);
+
+	/* And finally, evaluate the body of the symbol too */
+	if (base_type->type == SYM_FN) {
+		struct symbol *curr = current_fn;
+
+		if (sym->definition && sym->definition != sym)
+			return evaluate_symbol(sym->definition);
+
+		current_fn = base_type;
+
+		examine_fn_arguments(base_type);
+		if (!base_type->stmt && base_type->inline_stmt)
+			uninline(sym);
+		if (base_type->stmt)
+			evaluate_statement(base_type->stmt);
+
+		current_fn = curr;
+	}
+
+	return base_type;
+}
+
+void evaluate_symbol_list(struct symbol_list *list)
+{
+	struct symbol *sym;
+
+	FOR_EACH_PTR(list, sym) {
+		has_error &= ~ERROR_CURR_PHASE;
+		evaluate_symbol(sym);
+		check_duplicates(sym);
+	} END_FOR_EACH_PTR(sym);
+}
+
+static struct symbol *evaluate_return_expression(struct statement *stmt)
+{
+	struct expression *expr = stmt->expression;
+	struct symbol *fntype;
+
+	evaluate_expression(expr);
+	fntype = current_fn->ctype.base_type;
+	if (!fntype || fntype == &void_ctype) {
+		if (expr && expr->ctype != &void_ctype)
+			expression_error(expr, "return expression in %s function", fntype?"void":"typeless");
+		if (expr && Wreturn_void)
+			warning(stmt->pos, "returning void-valued expression");
+		return NULL;
+	}
+
+	if (!expr) {
+		sparse_error(stmt->pos, "return with no return value");
+		return NULL;
+	}
+	if (!expr->ctype)
+		return NULL;
+	compatible_assignment_types(expr, fntype, &stmt->expression, "return expression");
+	return NULL;
+}
+
+static void evaluate_if_statement(struct statement *stmt)
+{
+	if (!stmt->if_conditional)
+		return;
+
+	evaluate_conditional(stmt->if_conditional, 0);
+	evaluate_statement(stmt->if_true);
+	evaluate_statement(stmt->if_false);
+}
+
+static void evaluate_iterator(struct statement *stmt)
+{
+	evaluate_symbol_list(stmt->iterator_syms);
+	evaluate_conditional(stmt->iterator_pre_condition, 1);
+	evaluate_conditional(stmt->iterator_post_condition,1);
+	evaluate_statement(stmt->iterator_pre_statement);
+	evaluate_statement(stmt->iterator_statement);
+	evaluate_statement(stmt->iterator_post_statement);
+}
+
+static void verify_output_constraint(struct expression *expr, const char *constraint)
+{
+	switch (*constraint) {
+	case '=':	/* Assignment */
+	case '+':	/* Update */
+		break;
+	default:
+		expression_error(expr, "output constraint is not an assignment constraint (\"%s\")", constraint);
+	}
+}
+
+static void verify_input_constraint(struct expression *expr, const char *constraint)
+{
+	switch (*constraint) {
+	case '=':	/* Assignment */
+	case '+':	/* Update */
+		expression_error(expr, "input constraint with assignment (\"%s\")", constraint);
+	}
+}
+
+static void evaluate_asm_statement(struct statement *stmt)
+{
+	struct expression *expr;
+	struct symbol *sym;
+	int state;
+
+	expr = stmt->asm_string;
+	if (!expr || expr->type != EXPR_STRING) {
+		sparse_error(stmt->pos, "need constant string for inline asm");
+		return;
+	}
+
+	state = 0;
+	FOR_EACH_PTR(stmt->asm_outputs, expr) {
+		switch (state) {
+		case 0: /* Identifier */
+			state = 1;
+			continue;
+
+		case 1: /* Constraint */
+			state = 2;
+			if (!expr || expr->type != EXPR_STRING) {
+				sparse_error(expr ? expr->pos : stmt->pos, "asm output constraint is not a string");
+				*THIS_ADDRESS(expr) = NULL;
+				continue;
+			}
+			verify_output_constraint(expr, expr->string->data);
+			continue;
+
+		case 2: /* Expression */
+			state = 0;
+			if (!evaluate_expression(expr))
+				return;
+			if (!lvalue_expression(expr))
+				warning(expr->pos, "asm output is not an lvalue");
+			evaluate_assign_to(expr, expr->ctype);
+			continue;
+		}
+	} END_FOR_EACH_PTR(expr);
+
+	state = 0;
+	FOR_EACH_PTR(stmt->asm_inputs, expr) {
+		switch (state) {
+		case 0: /* Identifier */
+			state = 1;
+			continue;
+
+		case 1:	/* Constraint */
+			state = 2;
+			if (!expr || expr->type != EXPR_STRING) {
+				sparse_error(expr ? expr->pos : stmt->pos, "asm input constraint is not a string");
+				*THIS_ADDRESS(expr) = NULL;
+				continue;
+			}
+			verify_input_constraint(expr, expr->string->data);
+			continue;
+
+		case 2: /* Expression */
+			state = 0;
+			if (!evaluate_expression(expr))
+				return;
+			continue;
+		}
+	} END_FOR_EACH_PTR(expr);
+
+	FOR_EACH_PTR(stmt->asm_clobbers, expr) {
+		if (!expr) {
+			sparse_error(stmt->pos, "bad asm clobbers");
+			return;
+		}
+		if (expr->type == EXPR_STRING)
+			continue;
+		expression_error(expr, "asm clobber is not a string");
+	} END_FOR_EACH_PTR(expr);
+
+	FOR_EACH_PTR(stmt->asm_labels, sym) {
+		if (!sym || sym->type != SYM_LABEL) {
+			sparse_error(stmt->pos, "bad asm label");
+			return;
+		}
+	} END_FOR_EACH_PTR(sym);
+}
+
+static void evaluate_case_statement(struct statement *stmt)
+{
+	evaluate_expression(stmt->case_expression);
+	evaluate_expression(stmt->case_to);
+	evaluate_statement(stmt->case_statement);
+}
+
+static void check_case_type(struct expression *switch_expr,
+			    struct expression *case_expr,
+			    struct expression **enumcase)
+{
+	struct symbol *switch_type, *case_type;
+	int sclass, cclass;
+
+	if (!case_expr)
+		return;
+
+	switch_type = switch_expr->ctype;
+	case_type = evaluate_expression(case_expr);
+
+	if (!switch_type || !case_type)
+		goto Bad;
+	if (enumcase) {
+		if (*enumcase)
+			warn_for_different_enum_types(case_expr->pos, case_type, (*enumcase)->ctype);
+		else if (is_enum_type(case_type))
+			*enumcase = case_expr;
+	}
+
+	sclass = classify_type(switch_type, &switch_type);
+	cclass = classify_type(case_type, &case_type);
+
+	/* both should be arithmetic */
+	if (!(sclass & cclass & TYPE_NUM))
+		goto Bad;
+
+	/* neither should be floating */
+	if ((sclass | cclass) & TYPE_FLOAT)
+		goto Bad;
+
+	/* if neither is restricted, we are OK */
+	if (!((sclass | cclass) & TYPE_RESTRICT))
+		return;
+
+	if (!restricted_binop_type(SPECIAL_EQUAL, case_expr, switch_expr,
+				   cclass, sclass, case_type, switch_type)) {
+		unrestrict(case_expr, cclass, &case_type);
+		unrestrict(switch_expr, sclass, &switch_type);
+	}
+	return;
+
+Bad:
+	expression_error(case_expr, "incompatible types for 'case' statement");
+}
+
+static void evaluate_switch_statement(struct statement *stmt)
+{
+	struct symbol *sym;
+	struct expression *enumcase = NULL;
+	struct expression **enumcase_holder = &enumcase;
+	struct expression *sel = stmt->switch_expression;
+
+	evaluate_expression(sel);
+	evaluate_statement(stmt->switch_statement);
+	if (!sel)
+		return;
+	if (sel->ctype && is_enum_type(sel->ctype))
+		enumcase_holder = NULL; /* Only check cases against switch */
+
+	FOR_EACH_PTR(stmt->switch_case->symbol_list, sym) {
+		struct statement *case_stmt = sym->stmt;
+		check_case_type(sel, case_stmt->case_expression, enumcase_holder);
+		check_case_type(sel, case_stmt->case_to, enumcase_holder);
+	} END_FOR_EACH_PTR(sym);
+}
+
+static void evaluate_goto_statement(struct statement *stmt)
+{
+	struct symbol *label = stmt->goto_label;
+
+	if (label && !label->stmt && !lookup_keyword(label->ident, NS_KEYWORD))
+		sparse_error(stmt->pos, "label '%s' was not declared", show_ident(label->ident));
+
+	evaluate_expression(stmt->goto_expression);
+}
+
+struct symbol *evaluate_statement(struct statement *stmt)
+{
+	if (!stmt)
+		return NULL;
+
+	switch (stmt->type) {
+	case STMT_DECLARATION: {
+		struct symbol *s;
+		FOR_EACH_PTR(stmt->declaration, s) {
+			evaluate_symbol(s);
+		} END_FOR_EACH_PTR(s);
+		return NULL;
+	}
+
+	case STMT_RETURN:
+		return evaluate_return_expression(stmt);
+
+	case STMT_EXPRESSION:
+		if (!evaluate_expression(stmt->expression))
+			return NULL;
+		if (stmt->expression->ctype == &null_ctype)
+			stmt->expression = cast_to(stmt->expression, &ptr_ctype);
+		return degenerate(stmt->expression);
+
+	case STMT_COMPOUND: {
+		struct statement *s;
+		struct symbol *type = NULL;
+
+		/* Evaluate the return symbol in the compound statement */
+		evaluate_symbol(stmt->ret);
+
+		/*
+		 * Then, evaluate each statement, making the type of the
+		 * compound statement be the type of the last statement
+		 */
+		type = evaluate_statement(stmt->args);
+		FOR_EACH_PTR(stmt->stmts, s) {
+			type = evaluate_statement(s);
+		} END_FOR_EACH_PTR(s);
+		if (!type)
+			type = &void_ctype;
+		return type;
+	}
+	case STMT_IF:
+		evaluate_if_statement(stmt);
+		return NULL;
+	case STMT_ITERATOR:
+		evaluate_iterator(stmt);
+		return NULL;
+	case STMT_SWITCH:
+		evaluate_switch_statement(stmt);
+		return NULL;
+	case STMT_CASE:
+		evaluate_case_statement(stmt);
+		return NULL;
+	case STMT_LABEL:
+		return evaluate_statement(stmt->label_statement);
+	case STMT_GOTO:
+		evaluate_goto_statement(stmt);
+		return NULL;
+	case STMT_NONE:
+		break;
+	case STMT_ASM:
+		evaluate_asm_statement(stmt);
+		return NULL;
+	case STMT_CONTEXT:
+		evaluate_expression(stmt->expression);
+		return NULL;
+	case STMT_RANGE:
+		evaluate_expression(stmt->range_expression);
+		evaluate_expression(stmt->range_low);
+		evaluate_expression(stmt->range_high);
+		return NULL;
+	}
+	return NULL;
+}
--- /dev/null	Fri Dec 21 15:00:12 2018
+++ new/usr/src/tools/smatch/src/example.c	Fri Dec 21 15:00:12 2018
@@ -0,0 +1,1957 @@
+/*
+ * Example of how to write a compiler with sparse
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <assert.h>
+
+#include "symbol.h"
+#include "expression.h"
+#include "linearize.h"
+#include "flow.h"
+#include "storage.h"
+#include "target.h"
+
+static const char *opcodes[] = {
+	[OP_BADOP] = "bad_op",
+
+	/* Fn entrypoint */
+	[OP_ENTRY] = "<entry-point>",
+
+	/* Terminator */
+	[OP_RET] = "ret",
+	[OP_BR] = "br",
+	[OP_CBR] = "cbr",
+	[OP_SWITCH] = "switch",
+	[OP_INVOKE] = "invoke",
+	[OP_COMPUTEDGOTO] = "jmp *",
+	[OP_UNWIND] = "unwind",
+	
+	/* Binary */
+	[OP_ADD] = "add",
+	[OP_SUB] = "sub",
+	[OP_MULU] = "mulu",
+	[OP_MULS] = "muls",
+	[OP_DIVU] = "divu",
+	[OP_DIVS] = "divs",
+	[OP_MODU] = "modu",
+	[OP_MODS] = "mods",
+	[OP_SHL] = "shl",
+	[OP_LSR] = "lsr",
+	[OP_ASR] = "asr",
+	
+	/* Logical */
+	[OP_AND] = "and",
+	[OP_OR] = "or",
+	[OP_XOR] = "xor",
+	[OP_AND_BOOL] = "and-bool",
+	[OP_OR_BOOL] = "or-bool",
+
+	/* Binary comparison */
+	[OP_SET_EQ] = "seteq",
+	[OP_SET_NE] = "setne",
+	[OP_SET_LE] = "setle",
+	[OP_SET_GE] = "setge",
+	[OP_SET_LT] = "setlt",
+	[OP_SET_GT] = "setgt",
+	[OP_SET_B] = "setb",
+	[OP_SET_A] = "seta",
+	[OP_SET_BE] = "setbe",
+	[OP_SET_AE] = "setae",
+
+	/* Uni */
+	[OP_NOT] = "not",
+	[OP_NEG] = "neg",
+
+	/* Special three-input */
+	[OP_SEL] = "select",
+	
+	/* Memory */
+	[OP_MALLOC] = "malloc",
+	[OP_FREE] = "free",
+	[OP_ALLOCA] = "alloca",
+	[OP_LOAD] = "load",
+	[OP_STORE] = "store",
+	[OP_SETVAL] = "set",
+	[OP_GET_ELEMENT_PTR] = "getelem",
+
+	/* Other */
+	[OP_PHI] = "phi",
+	[OP_PHISOURCE] = "phisrc",
+	[OP_COPY] = "copy",
+	[OP_CAST] = "cast",
+	[OP_SCAST] = "scast",
+	[OP_FPCAST] = "fpcast",
+	[OP_PTRCAST] = "ptrcast",
+	[OP_CALL] = "call",
+	[OP_VANEXT] = "va_next",
+	[OP_VAARG] = "va_arg",
+	[OP_SLICE] = "slice",
+	[OP_SNOP] = "snop",
+	[OP_LNOP] = "lnop",
+	[OP_NOP] = "nop",
+	[OP_DEATHNOTE] = "dead",
+	[OP_ASM] = "asm",
+
+	/* Sparse tagging (line numbers, context, whatever) */
+	[OP_CONTEXT] = "context",
+};
+
+static int last_reg, stack_offset;
+
+struct hardreg {
+	const char *name;
+	struct pseudo_list *contains;
+	unsigned busy:16,
+		 dead:8,
+		 used:1;
+};
+
+#define TAG_DEAD 1
+#define TAG_DIRTY 2
+
+/* Our "switch" generation is very very stupid. */
+#define SWITCH_REG (1)
+
+static void output_bb(struct basic_block *bb, unsigned long generation);
+
+/*
+ * We only know about the caller-clobbered registers
+ * right now.
+ */
+static struct hardreg hardregs[] = {
+	{ .name = "%eax" },
+	{ .name = "%edx" },
+	{ .name = "%ecx" },
+	{ .name = "%ebx" },
+	{ .name = "%esi" },
+	{ .name = "%edi" },
+
+	{ .name = "%ebp" },
+	{ .name = "%esp" },
+};
+#define REGNO 6
+#define REG_EBP 6
+#define REG_ESP 7
+
+struct bb_state {
+	struct position pos;
+	struct storage_hash_list *inputs;
+	struct storage_hash_list *outputs;
+	struct storage_hash_list *internal;
+
+	/* CC cache.. */
+	int cc_opcode, cc_dead;
+	pseudo_t cc_target;
+};
+
+enum optype {
+	OP_UNDEF,
+	OP_REG,
+	OP_VAL,
+	OP_MEM,
+	OP_ADDR,
+};
+
+struct operand {
+	enum optype type;
+	int size;
+	union {
+		struct hardreg *reg;
+		long long value;
+		struct /* OP_MEM and OP_ADDR */ {
+			unsigned int offset;
+			unsigned int scale;
+			struct symbol *sym;
+			struct hardreg *base;
+			struct hardreg *index;
+		};
+	};
+};
+
+static const char *show_op(struct bb_state *state, struct operand *op)
+{
+	static char buf[256][4];
+	static int bufnr;
+	char *p, *ret;
+	int nr;
+
+	nr = (bufnr + 1) & 3;
+	bufnr = nr;
+	ret = p = buf[nr];
+
+	switch (op->type) {
+	case OP_UNDEF:
+		return "undef";
+	case OP_REG:
+		return op->reg->name;
+	case OP_VAL:
+		sprintf(p, "$%lld", op->value);
+		break;
+	case OP_MEM:
+	case OP_ADDR:
+		if (op->offset)
+			p += sprintf(p, "%d", op->offset);
+		if (op->sym)
+			p += sprintf(p, "%s%s",
+				op->offset ? "+" : "",
+				show_ident(op->sym->ident));
+		if (op->base || op->index) {
+			p += sprintf(p, "(%s%s%s",
+				op->base ? op->base->name : "",
+				(op->base && op->index) ? "," : "",
+				op->index ? op->index->name : "");
+			if (op->scale > 1)
+				p += sprintf(p, ",%d", op->scale);
+			*p++ = ')';
+			*p = '\0';
+		}
+		break;
+	}
+	return ret;
+}
+
+static struct storage_hash *find_storage_hash(pseudo_t pseudo, struct storage_hash_list *list)
+{
+	struct storage_hash *entry;
+	FOR_EACH_PTR(list, entry) {
+		if (entry->pseudo == pseudo)
+			return entry;
+	} END_FOR_EACH_PTR(entry);
+	return NULL;
+}
+
+static struct storage_hash *find_or_create_hash(pseudo_t pseudo, struct storage_hash_list **listp)
+{
+	struct storage_hash *entry;
+
+	entry = find_storage_hash(pseudo, *listp);
+	if (!entry) {
+		entry = alloc_storage_hash(alloc_storage());
+		entry->pseudo = pseudo;
+		add_ptr_list(listp, entry);
+	}
+	return entry;
+}
+
+/* Eventually we should just build it up in memory */
+static void FORMAT_ATTR(2) output_line(struct bb_state *state, const char *fmt, ...)
+{
+	va_list args;
+
+	va_start(args, fmt);
+	vprintf(fmt, args);
+	va_end(args);
+}
+
+static void FORMAT_ATTR(2) output_label(struct bb_state *state, const char *fmt, ...)
+{
+	static char buffer[512];
+	va_list args;
+
+	va_start(args, fmt);
+	vsnprintf(buffer, sizeof(buffer), fmt, args);
+	va_end(args);
+
+	output_line(state, "%s:\n", buffer);
+}
+
+static void FORMAT_ATTR(2) output_insn(struct bb_state *state, const char *fmt, ...)
+{
+	static char buffer[512];
+	va_list args;
+
+	va_start(args, fmt);
+	vsnprintf(buffer, sizeof(buffer), fmt, args);
+	va_end(args);
+
+	output_line(state, "\t%s\n", buffer);
+}
+
+#define output_insn(state, fmt, arg...) \
+	output_insn(state, fmt "\t\t# %s" , ## arg , __FUNCTION__)
+
+static void FORMAT_ATTR(2) output_comment(struct bb_state *state, const char *fmt, ...)
+{
+	static char buffer[512];
+	va_list args;
+
+	if (!verbose)
+		return;
+	va_start(args, fmt);
+	vsnprintf(buffer, sizeof(buffer), fmt, args);
+	va_end(args);
+
+	output_line(state, "\t# %s\n", buffer);
+}
+
+static const char *show_memop(struct storage *storage)
+{
+	static char buffer[1000];
+
+	if (!storage)
+		return "undef";
+	switch (storage->type) {
+	case REG_FRAME:
+		sprintf(buffer, "%d(FP)", storage->offset);
+		break;
+	case REG_STACK:
+		sprintf(buffer, "%d(SP)", storage->offset);
+		break;
+	case REG_REG:
+		return hardregs[storage->regno].name;
+	default:
+		return show_storage(storage);
+	}
+	return buffer;
+}
+
+static int alloc_stack_offset(int size)
+{
+	int ret = stack_offset;
+	stack_offset = ret + size;
+	return ret;
+}
+
+static void alloc_stack(struct bb_state *state, struct storage *storage)
+{
+	storage->type = REG_STACK;
+	storage->offset = alloc_stack_offset(4);
+}
+
+/*
+ * Can we re-generate the pseudo, so that we don't need to
+ * flush it to memory? We can regenerate:
+ *  - immediates and symbol addresses
+ *  - pseudos we got as input in non-registers
+ *  - pseudos we've already saved off earlier..
+ */
+static int can_regenerate(struct bb_state *state, pseudo_t pseudo)
+{
+	struct storage_hash *in;
+
+	switch (pseudo->type) {
+	case PSEUDO_VAL:
+	case PSEUDO_SYM:
+		return 1;
+
+	default:
+		in = find_storage_hash(pseudo, state->inputs);
+		if (in && in->storage->type != REG_REG)
+			return 1;
+		in = find_storage_hash(pseudo, state->internal);
+		if (in)
+			return 1;
+	}
+	return 0;
+}
+
+static void flush_one_pseudo(struct bb_state *state, struct hardreg *hardreg, pseudo_t pseudo)
+{
+	struct storage_hash *out;
+	struct storage *storage;
+
+	if (can_regenerate(state, pseudo))
+		return;
+
+	output_comment(state, "flushing %s from %s", show_pseudo(pseudo), hardreg->name);
+	out = find_storage_hash(pseudo, state->internal);
+	if (!out) {
+		out = find_storage_hash(pseudo, state->outputs);
+		if (!out)
+			out = find_or_create_hash(pseudo, &state->internal);
+	}
+	storage = out->storage;
+	switch (storage->type) {
+	default:
+		/*
+		 * Aieee - the next user wants it in a register, but we
+		 * need to flush it to memory in between. Which means that
+		 * we need to allocate an internal one, dammit..
+		 */
+		out = find_or_create_hash(pseudo, &state->internal);
+		storage = out->storage;
+		/* Fall through */
+	case REG_UDEF:
+		alloc_stack(state, storage);
+		/* Fall through */
+	case REG_STACK:
+		output_insn(state, "movl %s,%s", hardreg->name, show_memop(storage));
+		break;
+	}
+}
+
+/* Flush a hardreg out to the storage it has.. */
+static void flush_reg(struct bb_state *state, struct hardreg *reg)
+{
+	pseudo_t pseudo;
+
+	if (reg->busy)
+		output_comment(state, "reg %s flushed while busy is %d!", reg->name, reg->busy);
+	if (!reg->contains)
+		return;
+	reg->dead = 0;
+	reg->used = 1;
+	FOR_EACH_PTR(reg->contains, pseudo) {
+		if (CURRENT_TAG(pseudo) & TAG_DEAD)
+			continue;
+		if (!(CURRENT_TAG(pseudo) & TAG_DIRTY))
+			continue;
+		flush_one_pseudo(state, reg, pseudo);
+	} END_FOR_EACH_PTR(pseudo);
+	free_ptr_list(&reg->contains);
+}
+
+static struct storage_hash *find_pseudo_storage(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg)
+{
+	struct storage_hash *src;
+
+	src = find_storage_hash(pseudo, state->internal);
+	if (!src) {
+		src = find_storage_hash(pseudo, state->inputs);
+		if (!src) {
+			src = find_storage_hash(pseudo, state->outputs);
+			/* Undefined? Screw it! */
+			if (!src)
+				return NULL;
+
+			/*
+			 * If we found output storage, it had better be local stack
+			 * that we flushed to earlier..
+			 */
+			if (src->storage->type != REG_STACK)
+				return NULL;
+		}
+	}
+
+	/*
+	 * Incoming pseudo with out any pre-set storage allocation?
+	 * We can make up our own, and obviously prefer to get it
+	 * in the register we already selected (if it hasn't been
+	 * used yet).
+	 */
+	if (src->storage->type == REG_UDEF) {
+		if (reg && !reg->used) {
+			src->storage->type = REG_REG;
+			src->storage->regno = reg - hardregs;
+			return NULL;
+		}
+		alloc_stack(state, src->storage);
+	}
+	return src;
+}
+
+static void mark_reg_dead(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg)
+{
+	pseudo_t p;
+
+	FOR_EACH_PTR(reg->contains, p) {
+		if (p != pseudo)
+			continue;
+		if (CURRENT_TAG(p) & TAG_DEAD)
+			continue;
+		output_comment(state, "marking pseudo %s in reg %s dead", show_pseudo(pseudo), reg->name);
+		TAG_CURRENT(p, TAG_DEAD);
+		reg->dead++;
+	} END_FOR_EACH_PTR(p);
+}
+
+static void add_pseudo_reg(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg)
+{
+	output_comment(state, "added pseudo %s to reg %s", show_pseudo(pseudo), reg->name);
+	add_ptr_list_tag(&reg->contains, pseudo, TAG_DIRTY);
+}
+
+static struct hardreg *preferred_reg(struct bb_state *state, pseudo_t target)
+{
+	struct storage_hash *dst;
+
+	dst = find_storage_hash(target, state->outputs);
+	if (dst) {
+		struct storage *storage = dst->storage;
+		if (storage->type == REG_REG)
+			return hardregs + storage->regno;
+	}
+	return NULL;
+}
+
+static struct hardreg *empty_reg(struct bb_state *state)
+{
+	int i;
+	struct hardreg *reg = hardregs;
+
+	for (i = 0; i < REGNO; i++, reg++) {
+		if (!reg->contains)
+			return reg;
+	}
+	return NULL;
+}
+
+static struct hardreg *target_reg(struct bb_state *state, pseudo_t pseudo, pseudo_t target)
+{
+	int i;
+	int unable_to_find_reg = 0;
+	struct hardreg *reg;
+
+	/* First, see if we have a preferred target register.. */
+	reg = preferred_reg(state, target);
+	if (reg && !reg->contains)
+		goto found;
+
+	reg = empty_reg(state);
+	if (reg)
+		goto found;
+
+	i = last_reg;
+	do {
+		i++;
+		if (i >= REGNO)
+			i = 0;
+		reg = hardregs + i;
+		if (!reg->busy) {
+			flush_reg(state, reg);
+			last_reg = i;
+			goto found;
+		}
+	} while (i != last_reg);
+	assert(unable_to_find_reg);
+
+found:
+	add_pseudo_reg(state, pseudo, reg);
+	return reg;
+}
+
+static struct hardreg *find_in_reg(struct bb_state *state, pseudo_t pseudo)
+{
+	int i;
+	struct hardreg *reg;
+
+	for (i = 0; i < REGNO; i++) {
+		pseudo_t p;
+
+		reg = hardregs + i;
+		FOR_EACH_PTR(reg->contains, p) {
+			if (p == pseudo) {
+				last_reg = i;
+				output_comment(state, "found pseudo %s in reg %s (busy=%d)", show_pseudo(pseudo), reg->name, reg->busy);
+				return reg;
+			}
+		} END_FOR_EACH_PTR(p);
+	}
+	return NULL;
+}
+
+static void flush_pseudo(struct bb_state *state, pseudo_t pseudo, struct storage *storage)
+{
+	struct hardreg *reg = find_in_reg(state, pseudo);
+
+	if (reg)
+		flush_reg(state, reg);
+}
+
+static void flush_cc_cache_to_reg(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg)
+{
+	int opcode = state->cc_opcode;
+
+	state->cc_opcode = 0;
+	state->cc_target = NULL;
+	output_insn(state, "%s %s", opcodes[opcode], reg->name);
+}
+
+static void flush_cc_cache(struct bb_state *state)
+{
+	pseudo_t pseudo = state->cc_target;
+
+	if (pseudo) {
+		struct hardreg *dst;
+
+		state->cc_target = NULL;
+
+		if (!state->cc_dead) {
+			dst = target_reg(state, pseudo, pseudo);
+			flush_cc_cache_to_reg(state, pseudo, dst);
+		}
+	}
+}
+
+static void add_cc_cache(struct bb_state *state, int opcode, pseudo_t pseudo)
+{
+	assert(!state->cc_target);
+	state->cc_target = pseudo;
+	state->cc_opcode = opcode;
+	state->cc_dead = 0;
+	output_comment(state, "caching %s", opcodes[opcode]);
+}
+
+/* Fill a hardreg with the pseudo it has */
+static struct hardreg *fill_reg(struct bb_state *state, struct hardreg *hardreg, pseudo_t pseudo)
+{
+	struct storage_hash *src;
+	struct instruction *def;
+
+	if (state->cc_target == pseudo) {
+		flush_cc_cache_to_reg(state, pseudo, hardreg);
+		return hardreg;
+	}
+
+	switch (pseudo->type) {
+	case PSEUDO_VAL:
+		output_insn(state, "movl $%lld,%s", pseudo->value, hardreg->name);
+		break;
+	case PSEUDO_SYM:
+		src = find_pseudo_storage(state, pseudo, NULL);
+		/* Static thing? */
+		if (!src) {
+			output_insn(state, "movl $<%s>,%s", show_pseudo(pseudo), hardreg->name);
+			break;
+		}
+		switch (src->storage->type) {
+		case REG_REG:
+			/* Aiaiaiaiaii! Need to flush it to temporary memory */
+			src = find_or_create_hash(pseudo, &state->internal);
+			/* Fall through */
+		default:
+			alloc_stack(state, src->storage);
+			/* Fall through */
+		case REG_STACK:
+		case REG_FRAME:
+			flush_pseudo(state, pseudo, src->storage);
+			output_insn(state, "leal %s,%s", show_memop(src->storage), hardreg->name);
+			break;
+		}
+		break;
+	case PSEUDO_ARG:
+	case PSEUDO_REG:
+		def = pseudo->def;
+		if (def && def->opcode == OP_SETVAL) {
+			output_insn(state, "movl $<%s>,%s", show_pseudo(def->target), hardreg->name);
+			break;
+		}
+		src = find_pseudo_storage(state, pseudo, hardreg);
+		if (!src)
+			break;
+		if (src->flags & TAG_DEAD)
+			mark_reg_dead(state, pseudo, hardreg);
+		output_insn(state, "mov.%d %s,%s", 32, show_memop(src->storage), hardreg->name);
+		break;
+	default:
+		output_insn(state, "reload %s from %s", hardreg->name, show_pseudo(pseudo));
+		break;
+	}
+	return hardreg;
+}
+
+static struct hardreg *getreg(struct bb_state *state, pseudo_t pseudo, pseudo_t target)
+{
+	struct hardreg *reg;
+
+	reg = find_in_reg(state, pseudo);
+	if (reg)
+		return reg;
+	reg = target_reg(state, pseudo, target);
+	return fill_reg(state, reg, pseudo);
+}
+
+static void move_reg(struct bb_state *state, struct hardreg *src, struct hardreg *dst)
+{
+	output_insn(state, "movl %s,%s", src->name, dst->name);
+}
+
+static struct hardreg *copy_reg(struct bb_state *state, struct hardreg *src, pseudo_t target)
+{
+	int i;
+	struct hardreg *reg;
+
+	/* If the container has been killed off, just re-use it */
+	if (!src->contains)
+		return src;
+
+	/* If "src" only has one user, and the contents are dead, we can re-use it */
+	if (src->busy == 1 && src->dead == 1)
+		return src;
+
+	reg = preferred_reg(state, target);
+	if (reg && !reg->contains) {
+		output_comment(state, "copying %s to preferred target %s", show_pseudo(target), reg->name);
+		move_reg(state, src, reg);
+		return reg;
+	}
+
+	for (i = 0; i < REGNO; i++) {
+		reg = hardregs + i;
+		if (!reg->contains) {
+			output_comment(state, "copying %s to %s", show_pseudo(target), reg->name);
+			output_insn(state, "movl %s,%s", src->name, reg->name);
+			return reg;
+		}
+	}
+
+	flush_reg(state, src);
+	return src;
+}
+
+static void put_operand(struct bb_state *state, struct operand *op)
+{
+	switch (op->type) {
+	case OP_REG:
+		op->reg->busy--;
+		break;
+	case OP_ADDR:
+	case OP_MEM:
+		if (op->base)
+			op->base->busy--;
+		if (op->index)
+			op->index->busy--;
+		break;
+	default:
+		break;
+	}
+}
+
+static struct operand *alloc_op(void)
+{
+	struct operand *op = malloc(sizeof(*op));
+	memset(op, 0, sizeof(*op));
+	return op;
+}
+
+static struct operand *get_register_operand(struct bb_state *state, pseudo_t pseudo, pseudo_t target)
+{
+	struct operand *op = alloc_op();
+	op->type = OP_REG;
+	op->reg = getreg(state, pseudo, target);
+	op->reg->busy++;
+	return op;
+}
+
+static int get_sym_frame_offset(struct bb_state *state, pseudo_t pseudo)
+{
+	int offset = pseudo->nr;
+	if (offset < 0) {
+		offset = alloc_stack_offset(4);
+		pseudo->nr = offset;
+	}
+	return offset;
+}
+
+static struct operand *get_generic_operand(struct bb_state *state, pseudo_t pseudo)
+{
+	struct hardreg *reg;
+	struct storage *src;
+	struct storage_hash *hash;
+	struct operand *op = malloc(sizeof(*op));
+
+	memset(op, 0, sizeof(*op));
+	switch (pseudo->type) {
+	case PSEUDO_VAL:
+		op->type = OP_VAL;
+		op->value = pseudo->value;
+		break;
+
+	case PSEUDO_SYM: {
+		struct symbol *sym = pseudo->sym;
+		op->type = OP_ADDR;
+		if (sym->ctype.modifiers & MOD_NONLOCAL) {
+			op->sym = sym;
+			break;
+		}
+		op->base = hardregs + REG_EBP;
+		op->offset = get_sym_frame_offset(state, pseudo);
+		break;
+	}
+
+	default:
+		reg = find_in_reg(state, pseudo);
+		if (reg) {
+			op->type = OP_REG;
+			op->reg = reg;
+			reg->busy++;
+			break;
+		}
+		hash = find_pseudo_storage(state, pseudo, NULL);
+		if (!hash)
+			break;
+		src = hash->storage;
+		switch (src->type) {
+		case REG_REG:
+			op->type = OP_REG;
+			op->reg = hardregs + src->regno;
+			op->reg->busy++;
+			break;
+		case REG_FRAME:
+			op->type = OP_MEM;
+			op->offset = src->offset;
+			op->base = hardregs + REG_EBP;
+			break;
+		case REG_STACK:
+			op->type = OP_MEM;
+			op->offset = src->offset;
+			op->base = hardregs + REG_ESP;
+			break;
+		default:
+			break;
+		}
+	}
+	return op;
+}
+
+/* Callers should be made to use the proper "operand" formats */
+static const char *generic(struct bb_state *state, pseudo_t pseudo)
+{
+	struct hardreg *reg;
+	struct operand *op = get_generic_operand(state, pseudo);
+	static char buf[100];
+	const char *str;
+
+	switch (op->type) {
+	case OP_ADDR:
+		if (!op->offset && op->base && !op->sym)
+			return op->base->name;
+		if (op->sym && !op->base) {
+			int len = sprintf(buf, "$ %s", show_op(state, op));
+			if (op->offset)
+				sprintf(buf + len, " + %d", op->offset);
+			return buf;
+		}
+		str = show_op(state, op);
+		put_operand(state, op);
+		reg = target_reg(state, pseudo, NULL);
+		output_insn(state, "lea %s,%s", show_op(state, op), reg->name);
+		return reg->name;		
+
+	default:
+		str = show_op(state, op);
+	}
+	put_operand(state, op);
+	return str;
+}
+
+static struct operand *get_address_operand(struct bb_state *state, struct instruction *memop)
+{
+	struct hardreg *base;
+	struct operand *op = get_generic_operand(state, memop->src);
+
+	switch (op->type) {
+	case OP_ADDR:
+		op->offset += memop->offset;
+		break;
+	default:
+		put_operand(state, op);
+		base = getreg(state, memop->src, NULL);
+		op->type = OP_ADDR;
+		op->base = base;
+		base->busy++;
+		op->offset = memop->offset;
+		op->sym = NULL;
+	}
+	return op;
+}
+
+static const char *address(struct bb_state *state, struct instruction *memop)
+{
+	struct operand *op = get_address_operand(state, memop);
+	const char *str = show_op(state, op);
+	put_operand(state, op);
+	return str;
+}
+
+static const char *reg_or_imm(struct bb_state *state, pseudo_t pseudo)
+{
+	switch(pseudo->type) {
+	case PSEUDO_VAL:
+		return show_pseudo(pseudo);
+	default:
+		return getreg(state, pseudo, NULL)->name;
+	}
+}
+
+static void kill_dead_reg(struct hardreg *reg)
+{
+	if (reg->dead) {
+		pseudo_t p;
+		
+		FOR_EACH_PTR(reg->contains, p) {
+			if (CURRENT_TAG(p) & TAG_DEAD) {
+				DELETE_CURRENT_PTR(p);
+				reg->dead--;
+			}
+		} END_FOR_EACH_PTR(p);
+		PACK_PTR_LIST(&reg->contains);
+		assert(!reg->dead);
+	}
+}
+
+static struct hardreg *target_copy_reg(struct bb_state *state, struct hardreg *src, pseudo_t target)
+{
+	kill_dead_reg(src);
+	return copy_reg(state, src, target);
+}
+
+static void do_binop(struct bb_state *state, struct instruction *insn, pseudo_t val1, pseudo_t val2)
+{
+	const char *op = opcodes[insn->opcode];
+	struct operand *src = get_register_operand(state, val1, insn->target);
+	struct operand *src2 = get_generic_operand(state, val2);
+	struct hardreg *dst;
+
+	dst = target_copy_reg(state, src->reg, insn->target);
+	output_insn(state, "%s.%d %s,%s", op, insn->size, show_op(state, src2), dst->name);
+	put_operand(state, src);
+	put_operand(state, src2);
+	add_pseudo_reg(state, insn->target, dst);
+}
+
+static void generate_binop(struct bb_state *state, struct instruction *insn)
+{
+	flush_cc_cache(state);
+	do_binop(state, insn, insn->src1, insn->src2);
+}
+
+static int is_dead_reg(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg)
+{
+	pseudo_t p;
+	FOR_EACH_PTR(reg->contains, p) {
+		if (p == pseudo)
+			return CURRENT_TAG(p) & TAG_DEAD;
+	} END_FOR_EACH_PTR(p);
+	return 0;
+}
+
+/*
+ * Commutative binops are much more flexible, since we can switch the
+ * sources around to satisfy the target register, or to avoid having
+ * to load one of them into a register..
+ */
+static void generate_commutative_binop(struct bb_state *state, struct instruction *insn)
+{
+	pseudo_t src1, src2;
+	struct hardreg *reg1, *reg2;
+
+	flush_cc_cache(state);
+	src1 = insn->src1;
+	src2 = insn->src2;
+	reg2 = find_in_reg(state, src2);
+	if (!reg2)
+		goto dont_switch;
+	reg1 = find_in_reg(state, src1);
+	if (!reg1)
+		goto do_switch;
+	if (!is_dead_reg(state, src2, reg2))
+		goto dont_switch;
+	if (!is_dead_reg(state, src1, reg1))
+		goto do_switch;
+
+	/* Both are dead. Is one preferable? */
+	if (reg2 != preferred_reg(state, insn->target))
+		goto dont_switch;
+
+do_switch:
+	src1 = src2;
+	src2 = insn->src1;
+dont_switch:
+	do_binop(state, insn, src1, src2);
+}
+
+/*
+ * This marks a pseudo dead. It still stays on the hardreg list (the hardreg
+ * still has its value), but it's scheduled to be killed after the next
+ * "sequence point" when we call "kill_read_pseudos()"
+ */
+static void mark_pseudo_dead(struct bb_state *state, pseudo_t pseudo)
+{
+	int i;
+	struct storage_hash *src;
+
+	if (state->cc_target == pseudo)
+		state->cc_dead = 1;
+	src = find_pseudo_storage(state, pseudo, NULL);
+	if (src)
+		src->flags |= TAG_DEAD;
+	for (i = 0; i < REGNO; i++)
+		mark_reg_dead(state, pseudo, hardregs + i);
+}
+
+static void kill_dead_pseudos(struct bb_state *state)
+{
+	int i;
+
+	for (i = 0; i < REGNO; i++) {
+		kill_dead_reg(hardregs + i);
+	}
+}
+
+static void generate_store(struct instruction *insn, struct bb_state *state)
+{
+	output_insn(state, "mov.%d %s,%s", insn->size, reg_or_imm(state, insn->target), address(state, insn));
+}
+
+static void generate_load(struct instruction *insn, struct bb_state *state)
+{
+	const char *input = address(state, insn);
+	struct hardreg *dst;
+
+	kill_dead_pseudos(state);
+	dst = target_reg(state, insn->target, NULL);
+	output_insn(state, "mov.%d %s,%s", insn->size, input, dst->name);
+}
+
+static void kill_pseudo(struct bb_state *state, pseudo_t pseudo)
+{
+	int i;
+	struct hardreg *reg;
+
+	output_comment(state, "killing pseudo %s", show_pseudo(pseudo));
+	for (i = 0; i < REGNO; i++) {
+		pseudo_t p;
+
+		reg = hardregs + i;
+		FOR_EACH_PTR(reg->contains, p) {
+			if (p != pseudo)
+				continue;
+			if (CURRENT_TAG(p) & TAG_DEAD)
+				reg->dead--;
+			output_comment(state, "removing pseudo %s from reg %s", 
+				show_pseudo(pseudo), reg->name);
+			DELETE_CURRENT_PTR(p);
+		} END_FOR_EACH_PTR(p);
+		PACK_PTR_LIST(&reg->contains);
+	}
+}
+
+static void generate_copy(struct bb_state *state, struct instruction *insn)
+{
+	struct hardreg *src = getreg(state, insn->src, insn->target);
+	kill_pseudo(state, insn->target);
+	add_pseudo_reg(state, insn->target, src);
+}
+
+static void generate_cast(struct bb_state *state, struct instruction *insn)
+{
+	struct hardreg *src = getreg(state, insn->src, insn->target);
+	struct hardreg *dst;
+	unsigned int old = insn->orig_type ? insn->orig_type->bit_size : 0;
+	unsigned int new = insn->size;
+
+	/*
+	 * Cast to smaller type? Ignore the high bits, we
+	 * just keep both pseudos in the same register.
+	 */
+	if (old >= new) {
+		add_pseudo_reg(state, insn->target, src);
+		return;
+	}
+
+	dst = target_copy_reg(state, src, insn->target);
+
+	if (insn->orig_type && (insn->orig_type->ctype.modifiers & MOD_SIGNED)) {
+		output_insn(state, "sext.%d.%d %s", old, new, dst->name);
+	} else {
+		unsigned long long mask;
+		mask = ~(~0ULL << old);
+		mask &= ~(~0ULL << new);
+		output_insn(state, "andl.%d $%#llx,%s", insn->size, mask, dst->name);
+	}
+	add_pseudo_reg(state, insn->target, dst);
+}
+
+static void generate_output_storage(struct bb_state *state);
+
+static const char *conditional[] = {
+	[OP_SET_EQ] = "e",
+	[OP_SET_NE] = "ne",
+	[OP_SET_LE] = "le",
+	[OP_SET_GE] = "ge",
+	[OP_SET_LT] = "lt",
+	[OP_SET_GT] = "gt",
+	[OP_SET_B] = "b",
+	[OP_SET_A] = "a",
+	[OP_SET_BE] = "be",
+	[OP_SET_AE] = "ae"
+};
+	
+
+static void generate_branch(struct bb_state *state, struct instruction *br)
+{
+	const char *cond = "XXX";
+	struct basic_block *target;
+
+	if (br->cond) {
+		if (state->cc_target == br->cond) {
+			cond = conditional[state->cc_opcode];
+		} else {
+			struct hardreg *reg = getreg(state, br->cond, NULL);
+			output_insn(state, "testl %s,%s", reg->name, reg->name);
+			cond = "ne";
+		}
+	}
+	generate_output_storage(state);
+	target = br->bb_true;
+	if (br->cond) {
+		output_insn(state, "j%s .L%p", cond, target);
+		target = br->bb_false;
+	}
+	output_insn(state, "jmp .L%p", target);
+}
+
+/* We've made sure that there is a dummy reg live for the output */
+static void generate_switch(struct bb_state *state, struct instruction *insn)
+{
+	struct hardreg *reg = hardregs + SWITCH_REG;
+
+	generate_output_storage(state);
+	output_insn(state, "switch on %s", reg->name);
+	output_insn(state, "unimplemented: %s", show_instruction(insn));
+}
+
+static void generate_ret(struct bb_state *state, struct instruction *ret)
+{
+	if (ret->src && ret->src != VOID) {
+		struct hardreg *wants = hardregs+0;
+		struct hardreg *reg = getreg(state, ret->src, NULL);
+		if (reg != wants)
+			output_insn(state, "movl %s,%s", reg->name, wants->name);
+	}
+	output_insn(state, "ret");
+}
+
+/*
+ * Fake "call" linearization just as a taster..
+ */
+static void generate_call(struct bb_state *state, struct instruction *insn)
+{
+	int offset = 0;
+	pseudo_t arg;
+
+	FOR_EACH_PTR(insn->arguments, arg) {
+		output_insn(state, "pushl %s", generic(state, arg));
+		offset += 4;
+	} END_FOR_EACH_PTR(arg);
+	flush_reg(state, hardregs+0);
+	flush_reg(state, hardregs+1);
+	flush_reg(state, hardregs+2);
+	output_insn(state, "call %s", show_pseudo(insn->func));
+	if (offset)
+		output_insn(state, "addl $%d,%%esp", offset);
+	if (insn->target && insn->target != VOID)
+		add_pseudo_reg(state, insn->target, hardregs+0);
+}
+
+static void generate_select(struct bb_state *state, struct instruction *insn)
+{
+	const char *cond;
+	struct hardreg *src1, *src2, *dst;
+
+	src1 = getreg(state, insn->src2, NULL);
+	dst = copy_reg(state, src1, insn->target);
+	add_pseudo_reg(state, insn->target, dst);
+	src2 = getreg(state, insn->src3, insn->target);
+
+	if (state->cc_target == insn->src1) {
+		cond = conditional[state->cc_opcode];
+	} else {
+		struct hardreg *reg = getreg(state, insn->src1, NULL);
+		output_insn(state, "testl %s,%s", reg->name, reg->name);
+		cond = "ne";
+	}
+
+	output_insn(state, "sel%s %s,%s", cond, src2->name, dst->name);
+}
+
+struct asm_arg {
+	const struct ident *name;
+	const char *value;
+	pseudo_t pseudo;
+	struct hardreg *reg;
+};
+
+static void replace_asm_arg(char **dst_p, struct asm_arg *arg)
+{
+	char *dst = *dst_p;
+	int len = strlen(arg->value);
+
+	memcpy(dst, arg->value, len);
+	*dst_p = dst + len;
+}
+
+static void replace_asm_percent(const char **src_p, char **dst_p, struct asm_arg *args, int nr)
+{
+	const char *src = *src_p;
+	char c;
+	int index;
+
+	c = *src++;
+	switch (c) {
+	case '0' ... '9':
+		index = c - '0';
+		if (index < nr)
+			replace_asm_arg(dst_p, args+index);
+		break;
+	}	
+	*src_p = src;
+	return;
+}
+
+static void replace_asm_named(const char **src_p, char **dst_p, struct asm_arg *args, int nr)
+{
+	const char *src = *src_p;
+	const char *end = src;
+
+	for(;;) {
+		char c = *end++;
+		if (!c)
+			return;
+		if (c == ']') {
+			int i;
+
+			*src_p = end;
+			for (i = 0; i < nr; i++) {
+				const struct ident *ident = args[i].name;
+				int len;
+				if (!ident)
+					continue;
+				len = ident->len;
+				if (memcmp(src, ident->name, len))
+					continue;
+				replace_asm_arg(dst_p, args+i);
+				return;
+			}
+		}
+	}
+}
+
+static const char *replace_asm_args(const char *str, struct asm_arg *args, int nr)
+{
+	static char buffer[1000];
+	char *p = buffer;
+
+	for (;;) {
+		char c = *str;
+		*p = c;
+		if (!c)
+			return buffer;
+		str++;
+		switch (c) {
+		case '%':
+			if (*str == '%') {
+				str++;
+				p++;
+				continue;
+			}
+			replace_asm_percent(&str, &p, args, nr);
+			continue;
+		case '[':
+			replace_asm_named(&str, &p, args, nr);
+			continue;
+		default:
+			break;
+		}
+		p++;
+	}
+}
+
+#define MAX_ASM_ARG (50)
+static struct asm_arg asm_arguments[MAX_ASM_ARG];
+
+static struct asm_arg *generate_asm_inputs(struct bb_state *state, struct asm_constraint_list *list, struct asm_arg *arg)
+{
+	struct asm_constraint *entry;
+
+	FOR_EACH_PTR(list, entry) {
+		const char *constraint = entry->constraint;
+		pseudo_t pseudo = entry->pseudo;
+		struct hardreg *reg, *orig;
+		const char *string;
+		int index;
+
+		string = "undef";
+		switch (*constraint) {
+		case 'r':
+			string = getreg(state, pseudo, NULL)->name;
+			break;
+		case '0' ... '9':
+			index = *constraint - '0';
+			reg = asm_arguments[index].reg;
+			orig = find_in_reg(state, pseudo);
+			if (orig)
+				move_reg(state, orig, reg);
+			else
+				fill_reg(state, reg, pseudo);
+			string = reg->name;
+			break;
+		default:
+			string = generic(state, pseudo);
+			break;
+		}
+
+		output_insn(state, "# asm input \"%s\": %s : %s", constraint, show_pseudo(pseudo), string);
+
+		arg->name = entry->ident;
+		arg->value = string;
+		arg->pseudo = NULL;
+		arg->reg = NULL;
+		arg++;
+	} END_FOR_EACH_PTR(entry);
+	return arg;
+}
+
+static struct asm_arg *generate_asm_outputs(struct bb_state *state, struct asm_constraint_list *list, struct asm_arg *arg)
+{
+	struct asm_constraint *entry;
+
+	FOR_EACH_PTR(list, entry) {
+		const char *constraint = entry->constraint;
+		pseudo_t pseudo = entry->pseudo;
+		struct hardreg *reg;
+		const char *string;
+
+		while (*constraint == '=' || *constraint == '+')
+			constraint++;
+
+		string = "undef";
+		switch (*constraint) {
+		case 'r':
+		default:
+			reg = target_reg(state, pseudo, NULL);
+			arg->pseudo = pseudo;
+			arg->reg = reg;
+			string = reg->name;
+			break;
+		}
+
+		output_insn(state, "# asm output \"%s\": %s : %s", constraint, show_pseudo(pseudo), string);
+
+		arg->name = entry->ident;
+		arg->value = string;
+		arg++;
+	} END_FOR_EACH_PTR(entry);
+	return arg;
+}
+
+static void generate_asm(struct bb_state *state, struct instruction *insn)
+{
+	const char *str = insn->string;
+
+	if (insn->asm_rules->outputs || insn->asm_rules->inputs) {
+		struct asm_arg *arg;
+
+		arg = generate_asm_outputs(state, insn->asm_rules->outputs, asm_arguments);
+		arg = generate_asm_inputs(state, insn->asm_rules->inputs, arg);
+		str = replace_asm_args(str, asm_arguments, arg - asm_arguments);
+	}
+	output_insn(state, "%s", str);
+}
+
+static void generate_compare(struct bb_state *state, struct instruction *insn)
+{
+	struct hardreg *src;
+	const char *src2;
+	int opcode;
+
+	flush_cc_cache(state);
+	opcode = insn->opcode;
+
+	/*
+	 * We should try to switch these around if necessary,
+	 * and update the opcode to match..
+	 */
+	src = getreg(state, insn->src1, insn->target);
+	src2 = generic(state, insn->src2);
+
+	output_insn(state, "cmp.%d %s,%s", insn->size, src2, src->name);
+
+	add_cc_cache(state, opcode, insn->target);
+}
+
+static void generate_one_insn(struct instruction *insn, struct bb_state *state)
+{
+	if (verbose)
+		output_comment(state, "%s", show_instruction(insn));
+
+	switch (insn->opcode) {
+	case OP_ENTRY: {
+		struct symbol *sym = insn->bb->ep->name;
+		const char *name = show_ident(sym->ident);
+		if (sym->ctype.modifiers & MOD_STATIC)
+			printf("\n\n%s:\n", name);
+		else
+			printf("\n\n.globl %s\n%s:\n", name, name);
+		break;
+	}
+
+	/*
+	 * OP_SETVAL likewise doesn't actually generate any
+	 * code. On use, the "def" of the pseudo will be
+	 * looked up.
+	 */
+	case OP_SETVAL:
+		break;
+
+	case OP_STORE:
+		generate_store(insn, state);
+		break;
+
+	case OP_LOAD:
+		generate_load(insn, state);
+		break;
+
+	case OP_DEATHNOTE:
+		mark_pseudo_dead(state, insn->target);
+		return;
+
+	case OP_COPY:
+		generate_copy(state, insn);
+		break;
+
+	case OP_ADD: case OP_MULU: case OP_MULS:
+	case OP_AND: case OP_OR: case OP_XOR:
+	case OP_AND_BOOL: case OP_OR_BOOL:
+		generate_commutative_binop(state, insn);
+		break;
+
+	case OP_SUB: case OP_DIVU: case OP_DIVS:
+	case OP_MODU: case OP_MODS:
+	case OP_SHL: case OP_LSR: case OP_ASR:
+ 		generate_binop(state, insn);
+		break;
+
+	case OP_BINCMP ... OP_BINCMP_END:
+		generate_compare(state, insn);
+		break;
+
+	case OP_CAST: case OP_SCAST: case OP_FPCAST: case OP_PTRCAST:
+		generate_cast(state, insn);
+		break;
+
+	case OP_SEL:
+		generate_select(state, insn);
+		break;
+
+	case OP_BR:
+	case OP_CBR:
+		generate_branch(state, insn);
+		break;
+
+	case OP_SWITCH:
+		generate_switch(state, insn);
+		break;
+
+	case OP_CALL:
+		generate_call(state, insn);
+		break;
+
+	case OP_RET:
+		generate_ret(state, insn);
+		break;
+
+	case OP_ASM:
+		generate_asm(state, insn);
+		break;
+
+	case OP_PHI:
+	case OP_PHISOURCE:
+	default:
+		output_insn(state, "unimplemented: %s", show_instruction(insn));
+		break;
+	}
+	kill_dead_pseudos(state);
+}
+
+#define VERY_BUSY 1000
+#define REG_FIXED 2000
+
+static void write_reg_to_storage(struct bb_state *state, struct hardreg *reg, pseudo_t pseudo, struct storage *storage)
+{
+	int i;
+	struct hardreg *out;
+
+	switch (storage->type) {
+	case REG_REG:
+		out = hardregs + storage->regno;
+		if (reg == out)
+			return;
+		output_insn(state, "movl %s,%s", reg->name, out->name);
+		return;
+	case REG_UDEF:
+		if (reg->busy < VERY_BUSY) {
+			storage->type = REG_REG;
+			storage->regno = reg - hardregs;
+			reg->busy = REG_FIXED;
+			return;
+		}
+
+		/* Try to find a non-busy register.. */
+		for (i = 0; i < REGNO; i++) {
+			out = hardregs + i;
+			if (out->contains)
+				continue;
+			output_insn(state, "movl %s,%s", reg->name, out->name);
+			storage->type = REG_REG;
+			storage->regno = i;
+			out->busy = REG_FIXED;
+			return;
+		}
+
+		/* Fall back on stack allocation ... */
+		alloc_stack(state, storage);
+		/* Fall through */
+	default:
+		output_insn(state, "movl %s,%s", reg->name, show_memop(storage));
+		return;
+	}
+}
+
+static void write_val_to_storage(struct bb_state *state, pseudo_t src, struct storage *storage)
+{
+	struct hardreg *out;
+
+	switch (storage->type) {
+	case REG_UDEF:
+		alloc_stack(state, storage);
+	default:
+		output_insn(state, "movl %s,%s", show_pseudo(src), show_memop(storage));
+		break;
+	case REG_REG:
+		out = hardregs + storage->regno;
+		output_insn(state, "movl %s,%s", show_pseudo(src), out->name);
+	}
+}
+
+static void fill_output(struct bb_state *state, pseudo_t pseudo, struct storage *out)
+{
+	int i;
+	struct storage_hash *in;
+	struct instruction *def;
+
+	/* Is that pseudo a constant value? */
+	switch (pseudo->type) {
+	case PSEUDO_VAL:
+		write_val_to_storage(state, pseudo, out);
+		return;
+	case PSEUDO_REG:
+		def = pseudo->def;
+		if (def && def->opcode == OP_SETVAL) {
+			write_val_to_storage(state, pseudo, out);
+			return;
+		}
+	default:
+		break;
+	}
+
+	/* See if we have that pseudo in a register.. */
+	for (i = 0; i < REGNO; i++) {
+		struct hardreg *reg = hardregs + i;
+		pseudo_t p;
+
+		FOR_EACH_PTR(reg->contains, p) {
+			if (p == pseudo) {
+				write_reg_to_storage(state, reg, pseudo, out);
+				return;
+			}
+		} END_FOR_EACH_PTR(p);
+	}
+
+	/* Do we have it in another storage? */
+	in = find_storage_hash(pseudo, state->internal);
+	if (!in) {
+		in = find_storage_hash(pseudo, state->inputs);
+		/* Undefined? */
+		if (!in)
+			return;
+	}
+	switch (out->type) {
+	case REG_UDEF:
+		*out = *in->storage;
+		break;
+	case REG_REG:
+		output_insn(state, "movl %s,%s", show_memop(in->storage), hardregs[out->regno].name);
+		break;
+	default:
+		if (out == in->storage)
+			break;
+		if ((out->type == in->storage->type) && (out->regno == in->storage->regno))
+			break;
+		output_insn(state, "movl %s,%s", show_memop(in->storage), show_memop(out));
+		break;
+	}
+	return;
+}
+
+static int final_pseudo_flush(struct bb_state *state, pseudo_t pseudo, struct hardreg *reg)
+{
+	struct storage_hash *hash;
+	struct storage *out;
+	struct hardreg *dst;
+
+	/*
+	 * Since this pseudo is live at exit, we'd better have output 
+	 * storage for it..
+	 */
+	hash = find_storage_hash(pseudo, state->outputs);
+	if (!hash)
+		return 1;
+	out = hash->storage;
+
+	/* If the output is in a register, try to get it there.. */
+	if (out->type == REG_REG) {
+		dst = hardregs + out->regno;
+		/*
+		 * Two good cases: nobody is using the right register,
+		 * or we've already set it aside for output..
+		 */
+		if (!dst->contains || dst->busy > VERY_BUSY)
+			goto copy_to_dst;
+
+		/* Aiee. Try to keep it in a register.. */
+		dst = empty_reg(state);
+		if (dst)
+			goto copy_to_dst;
+
+		return 0;
+	}
+
+	/* If the output is undefined, let's see if we can put it in a register.. */
+	if (out->type == REG_UDEF) {
+		dst = empty_reg(state);
+		if (dst) {
+			out->type = REG_REG;
+			out->regno = dst - hardregs;
+			goto copy_to_dst;
+		}
+		/* Uhhuh. Not so good. No empty registers right now */
+		return 0;
+	}
+
+	/* If we know we need to flush it, just do so already .. */
+	output_insn(state, "movl %s,%s", reg->name, show_memop(out));
+	return 1;
+
+copy_to_dst:
+	if (reg == dst)
+		return 1;
+	output_insn(state, "movl %s,%s", reg->name, dst->name);
+	add_pseudo_reg(state, pseudo, dst);
+	return 1;
+}
+
+/*
+ * This tries to make sure that we put all the pseudos that are
+ * live on exit into the proper storage
+ */
+static void generate_output_storage(struct bb_state *state)
+{
+	struct storage_hash *entry;
+
+	/* Go through the fixed outputs, making sure we have those regs free */
+	FOR_EACH_PTR(state->outputs, entry) {
+		struct storage *out = entry->storage;
+		if (out->type == REG_REG) {
+			struct hardreg *reg = hardregs + out->regno;
+			pseudo_t p;
+			int flushme = 0;
+
+			reg->busy = REG_FIXED;
+			FOR_EACH_PTR(reg->contains, p) {
+				if (p == entry->pseudo) {
+					flushme = -100;
+					continue;
+				}
+				if (CURRENT_TAG(p) & TAG_DEAD)
+					continue;
+
+				/* Try to write back the pseudo to where it should go ... */
+				if (final_pseudo_flush(state, p, reg)) {
+					DELETE_CURRENT_PTR(p);
+					continue;
+				}
+				flushme++;
+			} END_FOR_EACH_PTR(p);
+			PACK_PTR_LIST(&reg->contains);
+			if (flushme > 0)
+				flush_reg(state, reg);
+		}
+	} END_FOR_EACH_PTR(entry);
+
+	FOR_EACH_PTR(state->outputs, entry) {
+		fill_output(state, entry->pseudo, entry->storage);
+	} END_FOR_EACH_PTR(entry);
+}
+
+static void generate(struct basic_block *bb, struct bb_state *state)
+{
+	int i;
+	struct storage_hash *entry;
+	struct instruction *insn;
+
+	for (i = 0; i < REGNO; i++) {
+		free_ptr_list(&hardregs[i].contains);
+		hardregs[i].busy = 0;
+		hardregs[i].dead = 0;
+		hardregs[i].used = 0;
+	}
+
+	FOR_EACH_PTR(state->inputs, entry) {
+		struct storage *storage = entry->storage;
+		const char *name = show_storage(storage);
+		output_comment(state, "incoming %s in %s", show_pseudo(entry->pseudo), name);
+		if (storage->type == REG_REG) {
+			int regno = storage->regno;
+			add_pseudo_reg(state, entry->pseudo, hardregs + regno);
+			name = hardregs[regno].name;
+		}
+	} END_FOR_EACH_PTR(entry);
+
+	output_label(state, ".L%p", bb);
+	FOR_EACH_PTR(bb->insns, insn) {
+		if (!insn->bb)
+			continue;
+		generate_one_insn(insn, state);
+	} END_FOR_EACH_PTR(insn);
+
+	if (verbose) {
+		output_comment(state, "--- in ---");
+		FOR_EACH_PTR(state->inputs, entry) {
+			output_comment(state, "%s <- %s", show_pseudo(entry->pseudo), show_storage(entry->storage));
+		} END_FOR_EACH_PTR(entry);
+		output_comment(state, "--- spill ---");
+		FOR_EACH_PTR(state->internal, entry) {
+			output_comment(state, "%s <-> %s", show_pseudo(entry->pseudo), show_storage(entry->storage));
+		} END_FOR_EACH_PTR(entry);
+		output_comment(state, "--- out ---");
+		FOR_EACH_PTR(state->outputs, entry) {
+			output_comment(state, "%s -> %s", show_pseudo(entry->pseudo), show_storage(entry->storage));
+		} END_FOR_EACH_PTR(entry);
+	}
+	printf("\n");
+}
+
+static void generate_list(struct basic_block_list *list, unsigned long generation)
+{
+	struct basic_block *bb;
+	FOR_EACH_PTR(list, bb) {
+		if (bb->generation == generation)
+			continue;
+		output_bb(bb, generation);
+	} END_FOR_EACH_PTR(bb);
+}
+
+/*
+ * Mark all the output registers of all the parents
+ * as being "used" - this does not mean that we cannot
+ * re-use them, but it means that we cannot ask the
+ * parents to pass in another pseudo in one of those
+ * registers that it already uses for another child.
+ */
+static void mark_used_registers(struct basic_block *bb, struct bb_state *state)
+{
+	struct basic_block *parent;
+
+	FOR_EACH_PTR(bb->parents, parent) {
+		struct storage_hash_list *outputs = gather_storage(parent, STOR_OUT);
+		struct storage_hash *entry;
+
+		FOR_EACH_PTR(outputs, entry) {
+			struct storage *s = entry->storage;
+			if (s->type == REG_REG) {
+				struct hardreg *reg = hardregs + s->regno;
+				reg->used = 1;
+			}
+		} END_FOR_EACH_PTR(entry);
+	} END_FOR_EACH_PTR(parent);
+}
+
+static void output_bb(struct basic_block *bb, unsigned long generation)
+{
+	struct bb_state state;
+
+	bb->generation = generation;
+
+	/* Make sure all parents have been generated first */
+	generate_list(bb->parents, generation);
+
+	state.pos = bb->pos;
+	state.inputs = gather_storage(bb, STOR_IN);
+	state.outputs = gather_storage(bb, STOR_OUT);
+	state.internal = NULL;
+	state.cc_opcode = 0;
+	state.cc_target = NULL;
+
+	/* Mark incoming registers used */
+	mark_used_registers(bb, &state);
+
+	generate(bb, &state);
+
+	free_ptr_list(&state.inputs);
+	free_ptr_list(&state.outputs);
+
+	/* Generate all children... */
+	generate_list(bb->children, generation);
+}
+
+/*
+ * We should set up argument sources here..
+ *
+ * Things like "first three arguments in registers" etc
+ * are all for this place.
+ *
+ * On x86, we default to stack, unless it's a static
+ * function that doesn't have its address taken.
+ *
+ * I should implement the -mregparm=X cmd line option.
+ */
+static void set_up_arch_entry(struct entrypoint *ep, struct instruction *entry)
+{
+	pseudo_t arg;
+	struct symbol *sym, *argtype;
+	int i, offset, regparm;
+
+	sym = ep->name;
+	regparm = 0;
+	if (!(sym->ctype.modifiers & MOD_ADDRESSABLE))
+		regparm = 3;
+	sym = sym->ctype.base_type;
+	i = 0;
+	offset = 0;
+	PREPARE_PTR_LIST(sym->arguments, argtype);
+	FOR_EACH_PTR(entry->arg_list, arg) {
+		struct storage *in = lookup_storage(entry->bb, arg, STOR_IN);
+		if (!in) {
+			in = alloc_storage();
+			add_storage(in, entry->bb, arg, STOR_IN);
+		}
+		if (i < regparm) {
+			in->type = REG_REG;
+			in->regno = i;
+		} else {
+			int bits = argtype ? argtype->bit_size : 0;
+
+			if (bits < bits_in_int)
+				bits = bits_in_int;
+
+			in->type = REG_FRAME;
+			in->offset = offset;
+			
+			offset += bits_to_bytes(bits);
+		}
+		i++;
+		NEXT_PTR_LIST(argtype);
+	} END_FOR_EACH_PTR(arg);
+	FINISH_PTR_LIST(argtype);
+}
+
+/*
+ * Set up storage information for "return"
+ *
+ * Not strictly necessary, since the code generator will
+ * certainly move the return value to the right register,
+ * but it can help register allocation if the allocator
+ * sees that the target register is going to return in %eax.
+ */
+static void set_up_arch_exit(struct basic_block *bb, struct instruction *ret)
+{
+	pseudo_t pseudo = ret->src;
+
+	if (pseudo && pseudo != VOID) {
+		struct storage *out = lookup_storage(bb, pseudo, STOR_OUT);
+		if (!out) {
+			out = alloc_storage();
+			add_storage(out, bb, pseudo, STOR_OUT);
+		}
+		out->type = REG_REG;
+		out->regno = 0;
+	}
+}
+
+/*
+ * Set up dummy/silly output storage information for a switch
+ * instruction. We need to make sure that a register is available
+ * when we generate code for switch, so force that by creating
+ * a dummy output rule.
+ */
+static void set_up_arch_switch(struct basic_block *bb, struct instruction *insn)
+{
+	pseudo_t pseudo = insn->cond;
+	struct storage *out = lookup_storage(bb, pseudo, STOR_OUT);
+	if (!out) {
+		out = alloc_storage();
+		add_storage(out, bb, pseudo, STOR_OUT);
+	}
+	out->type = REG_REG;
+	out->regno = SWITCH_REG;
+}
+
+static void arch_set_up_storage(struct entrypoint *ep)
+{
+	struct basic_block *bb;
+
+	/* Argument storage etc.. */
+	set_up_arch_entry(ep, ep->entry);
+
+	FOR_EACH_PTR(ep->bbs, bb) {
+		struct instruction *insn = last_instruction(bb->insns);
+		if (!insn)
+			continue;
+		switch (insn->opcode) {
+		case OP_RET:
+			set_up_arch_exit(bb, insn);
+			break;
+		case OP_SWITCH:
+			set_up_arch_switch(bb, insn);
+			break;
+		default:
+			/* nothing */;
+		}
+	} END_FOR_EACH_PTR(bb);
+}
+
+static void output(struct entrypoint *ep)
+{
+	unsigned long generation = ++bb_generation;
+
+	last_reg = -1;
+	stack_offset = 0;
+
+	/* Get rid of SSA form (phinodes etc) */
+	unssa(ep);
+
+	/* Set up initial inter-bb storage links */
+	set_up_storage(ep);
+
+	/* Architecture-specific storage rules.. */
+	arch_set_up_storage(ep);
+
+	/* Show the results ... */
+	output_bb(ep->entry->bb, generation);
+
+	/* Clear the storage hashes for the next function.. */
+	free_storage();
+}
+
+static int compile(struct symbol_list *list)
+{
+	struct symbol *sym;
+	FOR_EACH_PTR(list, sym) {
+		struct entrypoint *ep;
+		expand_symbol(sym);
+		ep = linearize_symbol(sym);
+		if (ep)
+			output(ep);
+	} END_FOR_EACH_PTR(sym);
+	
+	return 0;
+}
+
+int main(int argc, char **argv)
+{
+	struct string_list *filelist = NULL;
+	char *file;
+
+	compile(sparse_initialize(argc, argv, &filelist));
+	dbg_dead = 1;
+	FOR_EACH_PTR_NOTAG(filelist, file) {
+		compile(sparse(file));
+	} END_FOR_EACH_PTR_NOTAG(file);
+	return 0;
+}
+
--- /dev/null	Fri Dec 21 15:00:12 2018
+++ new/usr/src/tools/smatch/src/expand.c	Fri Dec 21 15:00:12 2018
@@ -0,0 +1,1321 @@
+/*
+ * sparse/expand.c
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003-2004 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * expand constant expressions.
+ */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <limits.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "parse.h"
+#include "token.h"
+#include "symbol.h"
+#include "target.h"
+#include "expression.h"
+#include "expand.h"
+
+
+static int expand_expression(struct expression *);
+static int expand_statement(struct statement *);
+static int conservative;
+
+static int expand_symbol_expression(struct expression *expr)
+{
+	struct symbol *sym = expr->symbol;
+
+	if (sym == &zero_int) {
+		if (Wundef)
+			warning(expr->pos, "undefined preprocessor identifier '%s'", show_ident(expr->symbol_name));
+		expr->type = EXPR_VALUE;
+		expr->value = 0;
+		expr->taint = 0;
+		return 0;
+	}
+	/* The cost of a symbol expression is lower for on-stack symbols */
+	return (sym->ctype.modifiers & (MOD_STATIC | MOD_EXTERN)) ? 2 : 1;
+}
+
+static long long get_longlong(struct expression *expr)
+{
+	int no_expand = expr->ctype->ctype.modifiers & MOD_UNSIGNED;
+	long long mask = 1ULL << (expr->ctype->bit_size - 1);
+	long long value = expr->value;
+	long long ormask, andmask;
+
+	if (!(value & mask))
+		no_expand = 1;
+	andmask = mask | (mask-1);
+	ormask = ~andmask;
+	if (no_expand)
+		ormask = 0;
+	return (value & andmask) | ormask;
+}
+
+void cast_value(struct expression *expr, struct symbol *newtype,
+		struct expression *old, struct symbol *oldtype)
+{
+	int old_size = oldtype->bit_size;
+	int new_size = newtype->bit_size;
+	long long value, mask, signmask;
+	long long oldmask, oldsignmask, dropped;
+
+	if (is_float_type(newtype) || is_float_type(oldtype))
+		goto Float;
+
+	// For pointers and integers, we can just move the value around
+	expr->type = EXPR_VALUE;
+	expr->taint = old->taint;
+	if (old_size == new_size) {
+		expr->value = old->value;
+		return;
+	}
+
+	// expand it to the full "long long" value
+	value = get_longlong(old);
+
+Int:
+	// _Bool requires a zero test rather than truncation.
+	if (is_bool_type(newtype)) {
+		expr->value = !!value;
+		if (!conservative && value != 0 && value != 1)
+			warning(old->pos, "odd constant _Bool cast (%llx becomes 1)", value);
+		return;
+	}
+
+	// Truncate it to the new size
+	signmask = 1ULL << (new_size-1);
+	mask = signmask | (signmask-1);
+	expr->value = value & mask;
+
+	// Stop here unless checking for truncation
+	if (!Wcast_truncate || conservative)
+		return;
+	
+	// Check if we dropped any bits..
+	oldsignmask = 1ULL << (old_size-1);
+	oldmask = oldsignmask | (oldsignmask-1);
+	dropped = oldmask & ~mask;
+
+	// OK if the bits were (and still are) purely sign bits
+	if (value & dropped) {
+		if (!(value & oldsignmask) || !(value & signmask) || (value & dropped) != dropped)
+			warning(old->pos, "cast truncates bits from constant value (%llx becomes %llx)",
+				value & oldmask,
+				value & mask);
+	}
+	return;
+
+Float:
+	if (!is_float_type(newtype)) {
+		value = (long long)old->fvalue;
+		expr->type = EXPR_VALUE;
+		expr->taint = 0;
+		goto Int;
+	}
+
+	if (!is_float_type(oldtype))
+		expr->fvalue = (long double)get_longlong(old);
+	else
+		expr->fvalue = old->fvalue;
+
+	if (!(newtype->ctype.modifiers & MOD_LONGLONG) && \
+	    !(newtype->ctype.modifiers & MOD_LONGLONGLONG)) {
+		if ((newtype->ctype.modifiers & MOD_LONG))
+			expr->fvalue = (double)expr->fvalue;
+		else
+			expr->fvalue = (float)expr->fvalue;
+	}
+	expr->type = EXPR_FVALUE;
+}
+
+static int check_shift_count(struct expression *expr, struct symbol *ctype, unsigned int count)
+{
+	warning(expr->pos, "shift too big (%u) for type %s", count, show_typename(ctype));
+	count &= ctype->bit_size-1;
+	return count;
+}
+
+/*
+ * CAREFUL! We need to get the size and sign of the
+ * result right!
+ */
+#define CONVERT(op,s)	(((op)<<1)+(s))
+#define SIGNED(op)	CONVERT(op, 1)
+#define UNSIGNED(op)	CONVERT(op, 0)
+static int simplify_int_binop(struct expression *expr, struct symbol *ctype)
+{
+	struct expression *left = expr->left, *right = expr->right;
+	unsigned long long v, l, r, mask;
+	signed long long sl, sr;
+	int is_signed;
+
+	if (right->type != EXPR_VALUE)
+		return 0;
+	r = right->value;
+	if (expr->op == SPECIAL_LEFTSHIFT || expr->op == SPECIAL_RIGHTSHIFT) {
+		if (r >= ctype->bit_size) {
+			if (conservative)
+				return 0;
+			r = check_shift_count(expr, ctype, r);
+			right->value = r;
+		}
+	}
+	if (left->type != EXPR_VALUE)
+		return 0;
+	l = left->value; r = right->value;
+	is_signed = !(ctype->ctype.modifiers & MOD_UNSIGNED);
+	mask = 1ULL << (ctype->bit_size-1);
+	sl = l; sr = r;
+	if (is_signed && (sl & mask))
+		sl |= ~(mask-1);
+	if (is_signed && (sr & mask))
+		sr |= ~(mask-1);
+	
+	switch (CONVERT(expr->op,is_signed)) {
+	case SIGNED('+'):
+	case UNSIGNED('+'):
+		v = l + r;
+		break;
+
+	case SIGNED('-'):
+	case UNSIGNED('-'):
+		v = l - r;
+		break;
+
+	case SIGNED('&'):
+	case UNSIGNED('&'):
+		v = l & r;
+		break;
+
+	case SIGNED('|'):
+	case UNSIGNED('|'):
+		v = l | r;
+		break;
+
+	case SIGNED('^'):
+	case UNSIGNED('^'):
+		v = l ^ r;
+		break;
+
+	case SIGNED('*'):
+		v = sl * sr;
+		break;
+
+	case UNSIGNED('*'):
+		v = l * r;
+		break;
+
+	case SIGNED('/'):
+		if (!r)
+			goto Div;
+		if (l == mask && sr == -1)
+			goto Overflow;
+		v = sl / sr;
+		break;
+
+	case UNSIGNED('/'):
+		if (!r) goto Div;
+		v = l / r; 
+		break;
+
+	case SIGNED('%'):
+		if (!r)
+			goto Div;
+		if (l == mask && sr == -1)
+			goto Overflow;
+		v = sl % sr;
+		break;
+
+	case UNSIGNED('%'):
+		if (!r) goto Div;
+		v = l % r;
+		break;
+
+	case SIGNED(SPECIAL_LEFTSHIFT):
+	case UNSIGNED(SPECIAL_LEFTSHIFT):
+		v = l << r;
+		break; 
+
+	case SIGNED(SPECIAL_RIGHTSHIFT):
+		v = sl >> r;
+		break;
+
+	case UNSIGNED(SPECIAL_RIGHTSHIFT):
+		v = l >> r;
+		break;
+
+	default:
+		return 0;
+	}
+	mask = mask | (mask-1);
+	expr->value = v & mask;
+	expr->type = EXPR_VALUE;
+	expr->taint = left->taint | right->taint;
+	return 1;
+Div:
+	if (!conservative)
+		warning(expr->pos, "division by zero");
+	return 0;
+Overflow:
+	if (!conservative)
+		warning(expr->pos, "constant integer operation overflow");
+	return 0;
+}
+
+static int simplify_cmp_binop(struct expression *expr, struct symbol *ctype)
+{
+	struct expression *left = expr->left, *right = expr->right;
+	unsigned long long l, r, mask;
+	signed long long sl, sr;
+
+	if (left->type != EXPR_VALUE || right->type != EXPR_VALUE)
+		return 0;
+	l = left->value; r = right->value;
+	mask = 1ULL << (ctype->bit_size-1);
+	sl = l; sr = r;
+	if (sl & mask)
+		sl |= ~(mask-1);
+	if (sr & mask)
+		sr |= ~(mask-1);
+	switch (expr->op) {
+	case '<':		expr->value = sl < sr; break;
+	case '>':		expr->value = sl > sr; break;
+	case SPECIAL_LTE:	expr->value = sl <= sr; break;
+	case SPECIAL_GTE:	expr->value = sl >= sr; break;
+	case SPECIAL_EQUAL:	expr->value = l == r; break;
+	case SPECIAL_NOTEQUAL:	expr->value = l != r; break;
+	case SPECIAL_UNSIGNED_LT:expr->value = l < r; break;
+	case SPECIAL_UNSIGNED_GT:expr->value = l > r; break;
+	case SPECIAL_UNSIGNED_LTE:expr->value = l <= r; break;
+	case SPECIAL_UNSIGNED_GTE:expr->value = l >= r; break;
+	}
+	expr->type = EXPR_VALUE;
+	expr->taint = left->taint | right->taint;
+	return 1;
+}
+
+static int simplify_float_binop(struct expression *expr)
+{
+	struct expression *left = expr->left, *right = expr->right;
+	unsigned long mod = expr->ctype->ctype.modifiers;
+	long double l, r, res;
+
+	if (left->type != EXPR_FVALUE || right->type != EXPR_FVALUE)
+		return 0;
+
+	l = left->fvalue;
+	r = right->fvalue;
+
+	if (mod & MOD_LONGLONG) {
+		switch (expr->op) {
+		case '+':	res = l + r; break;
+		case '-':	res = l - r; break;
+		case '*':	res = l * r; break;
+		case '/':	if (!r) goto Div;
+				res = l / r; break;
+		default: return 0;
+		}
+	} else if (mod & MOD_LONG) {
+		switch (expr->op) {
+		case '+':	res = (double) l + (double) r; break;
+		case '-':	res = (double) l - (double) r; break;
+		case '*':	res = (double) l * (double) r; break;
+		case '/':	if (!r) goto Div;
+				res = (double) l / (double) r; break;
+		default: return 0;
+		}
+	} else {
+		switch (expr->op) {
+		case '+':	res = (float)l + (float)r; break;
+		case '-':	res = (float)l - (float)r; break;
+		case '*':	res = (float)l * (float)r; break;
+		case '/':	if (!r) goto Div;
+				res = (float)l / (float)r; break;
+		default: return 0;
+		}
+	}
+	expr->type = EXPR_FVALUE;
+	expr->fvalue = res;
+	return 1;
+Div:
+	if (!conservative)
+		warning(expr->pos, "division by zero");
+	return 0;
+}
+
+static int simplify_float_cmp(struct expression *expr, struct symbol *ctype)
+{
+	struct expression *left = expr->left, *right = expr->right;
+	long double l, r;
+
+	if (left->type != EXPR_FVALUE || right->type != EXPR_FVALUE)
+		return 0;
+
+	l = left->fvalue;
+	r = right->fvalue;
+	switch (expr->op) {
+	case '<':		expr->value = l < r; break;
+	case '>':		expr->value = l > r; break;
+	case SPECIAL_LTE:	expr->value = l <= r; break;
+	case SPECIAL_GTE:	expr->value = l >= r; break;
+	case SPECIAL_EQUAL:	expr->value = l == r; break;
+	case SPECIAL_NOTEQUAL:	expr->value = l != r; break;
+	}
+	expr->type = EXPR_VALUE;
+	expr->taint = 0;
+	return 1;
+}
+
+static int expand_binop(struct expression *expr)
+{
+	int cost;
+
+	cost = expand_expression(expr->left);
+	cost += expand_expression(expr->right);
+	if (simplify_int_binop(expr, expr->ctype))
+		return 0;
+	if (simplify_float_binop(expr))
+		return 0;
+	return cost + 1;
+}
+
+static int expand_logical(struct expression *expr)
+{
+	struct expression *left = expr->left;
+	struct expression *right;
+	int cost, rcost;
+
+	/* Do immediate short-circuiting ... */
+	cost = expand_expression(left);
+	if (left->type == EXPR_VALUE) {
+		if (expr->op == SPECIAL_LOGICAL_AND) {
+			if (!left->value) {
+				expr->type = EXPR_VALUE;
+				expr->value = 0;
+				expr->taint = left->taint;
+				return 0;
+			}
+		} else {
+			if (left->value) {
+				expr->type = EXPR_VALUE;
+				expr->value = 1;
+				expr->taint = left->taint;
+				return 0;
+			}
+		}
+	}
+
+	right = expr->right;
+	rcost = expand_expression(right);
+	if (left->type == EXPR_VALUE && right->type == EXPR_VALUE) {
+		/*
+		 * We know the left value doesn't matter, since
+		 * otherwise we would have short-circuited it..
+		 */
+		expr->type = EXPR_VALUE;
+		expr->value = right->value != 0;
+		expr->taint = left->taint | right->taint;
+		return 0;
+	}
+
+	/*
+	 * If the right side is safe and cheaper than a branch,
+	 * just avoid the branch and turn it into a regular binop
+	 * style SAFELOGICAL.
+	 */
+	if (rcost < BRANCH_COST) {
+		expr->type = EXPR_BINOP;
+		rcost -= BRANCH_COST - 1;
+	}
+
+	return cost + BRANCH_COST + rcost;
+}
+
+static int expand_comma(struct expression *expr)
+{
+	int cost;
+
+	cost = expand_expression(expr->left);
+	cost += expand_expression(expr->right);
+	if (expr->left->type == EXPR_VALUE || expr->left->type == EXPR_FVALUE) {
+		unsigned flags = expr->flags;
+		unsigned taint;
+		taint = expr->left->type == EXPR_VALUE ? expr->left->taint : 0;
+		*expr = *expr->right;
+		expr->flags = flags;
+		if (expr->type == EXPR_VALUE)
+			expr->taint |= Taint_comma | taint;
+	}
+	return cost;
+}
+
+#define MOD_IGN (MOD_VOLATILE | MOD_CONST)
+
+static int compare_types(int op, struct symbol *left, struct symbol *right)
+{
+	struct ctype c1 = {.base_type = left};
+	struct ctype c2 = {.base_type = right};
+	switch (op) {
+	case SPECIAL_EQUAL:
+		return !type_difference(&c1, &c2, MOD_IGN, MOD_IGN);
+	case SPECIAL_NOTEQUAL:
+		return type_difference(&c1, &c2, MOD_IGN, MOD_IGN) != NULL;
+	case '<':
+		return left->bit_size < right->bit_size;
+	case '>':
+		return left->bit_size > right->bit_size;
+	case SPECIAL_LTE:
+		return left->bit_size <= right->bit_size;
+	case SPECIAL_GTE:
+		return left->bit_size >= right->bit_size;
+	}
+	return 0;
+}
+
+static int expand_compare(struct expression *expr)
+{
+	struct expression *left = expr->left, *right = expr->right;
+	int cost;
+
+	cost = expand_expression(left);
+	cost += expand_expression(right);
+
+	if (left && right) {
+		/* Type comparison? */
+		if (left->type == EXPR_TYPE && right->type == EXPR_TYPE) {
+			int op = expr->op;
+			expr->type = EXPR_VALUE;
+			expr->value = compare_types(op, left->symbol, right->symbol);
+			expr->taint = 0;
+			return 0;
+		}
+		if (simplify_cmp_binop(expr, left->ctype))
+			return 0;
+		if (simplify_float_cmp(expr, left->ctype))
+			return 0;
+	}
+	return cost + 1;
+}
+
+static int expand_conditional(struct expression *expr)
+{
+	struct expression *cond = expr->conditional;
+	struct expression *true = expr->cond_true;
+	struct expression *false = expr->cond_false;
+	int cost, cond_cost;
+
+	cond_cost = expand_expression(cond);
+	if (cond->type == EXPR_VALUE) {
+		unsigned flags = expr->flags;
+		if (!cond->value)
+			true = false;
+		if (!true)
+			true = cond;
+		cost = expand_expression(true);
+		*expr = *true;
+		expr->flags = flags;
+		if (expr->type == EXPR_VALUE)
+			expr->taint |= cond->taint;
+		return cost;
+	}
+
+	cost = expand_expression(true);
+	cost += expand_expression(false);
+
+	if (cost < SELECT_COST) {
+		expr->type = EXPR_SELECT;
+		cost -= BRANCH_COST - 1;
+	}
+
+	return cost + cond_cost + BRANCH_COST;
+}
+		
+static int expand_assignment(struct expression *expr)
+{
+	expand_expression(expr->left);
+	expand_expression(expr->right);
+	return SIDE_EFFECTS;
+}
+
+static int expand_addressof(struct expression *expr)
+{
+	return expand_expression(expr->unop);
+}
+
+/*
+ * Look up a trustable initializer value at the requested offset.
+ *
+ * Return NULL if no such value can be found or statically trusted.
+ *
+ * FIXME!! We should check that the size is right!
+ */
+static struct expression *constant_symbol_value(struct symbol *sym, int offset)
+{
+	struct expression *value;
+
+	if (sym->ctype.modifiers & (MOD_ASSIGNED | MOD_ADDRESSABLE))
+		return NULL;
+	value = sym->initializer;
+	if (!value)
+		return NULL;
+	if (value->type == EXPR_INITIALIZER) {
+		struct expression *entry;
+		FOR_EACH_PTR(value->expr_list, entry) {
+			if (entry->type != EXPR_POS) {
+				if (offset)
+					continue;
+				return entry;
+			}
+			if (entry->init_offset < offset)
+				continue;
+			if (entry->init_offset > offset)
+				return NULL;
+			return entry->init_expr;
+		} END_FOR_EACH_PTR(entry);
+		return NULL;
+	}
+	return value;
+}
+
+static int expand_dereference(struct expression *expr)
+{
+	struct expression *unop = expr->unop;
+	unsigned int offset;
+
+	expand_expression(unop);
+
+	/*
+	 * NOTE! We get a bogus warning right now for some special
+	 * cases: apparently I've screwed up the optimization of
+	 * a zero-offset dereference, and the ctype is wrong.
+	 *
+	 * Leave the warning in anyway, since this is also a good
+	 * test for me to get the type evaluation right..
+	 */
+	if (expr->ctype->ctype.modifiers & MOD_NODEREF)
+		warning(unop->pos, "dereference of noderef expression");
+
+	/*
+	 * Is it "symbol" or "symbol + offset"?
+	 */
+	offset = 0;
+	if (unop->type == EXPR_BINOP && unop->op == '+') {
+		struct expression *right = unop->right;
+		if (right->type == EXPR_VALUE) {
+			offset = right->value;
+			unop = unop->left;
+		}
+	}
+
+	if (unop->type == EXPR_SYMBOL) {
+		struct symbol *sym = unop->symbol;
+		struct expression *value = constant_symbol_value(sym, offset);
+
+		/* Const symbol with a constant initializer? */
+		if (value) {
+			/* FIXME! We should check that the size is right! */
+			if (value->type == EXPR_VALUE) {
+				expr->type = EXPR_VALUE;
+				expr->value = value->value;
+				expr->taint = 0;
+				return 0;
+			} else if (value->type == EXPR_FVALUE) {
+				expr->type = EXPR_FVALUE;
+				expr->fvalue = value->fvalue;
+				return 0;
+			}
+		}
+
+		/* Direct symbol dereference? Cheap and safe */
+		return (sym->ctype.modifiers & (MOD_STATIC | MOD_EXTERN)) ? 2 : 1;
+	}
+
+	return UNSAFE;
+}
+
+static int simplify_preop(struct expression *expr)
+{
+	struct expression *op = expr->unop;
+	unsigned long long v, mask;
+
+	if (op->type != EXPR_VALUE)
+		return 0;
+
+	mask = 1ULL << (expr->ctype->bit_size-1);
+	v = op->value;
+	switch (expr->op) {
+	case '+': break;
+	case '-':
+		if (v == mask && !(expr->ctype->ctype.modifiers & MOD_UNSIGNED))
+			goto Overflow;
+		v = -v;
+		break;
+	case '!': v = !v; break;
+	case '~': v = ~v; break;
+	default: return 0;
+	}
+	mask = mask | (mask-1);
+	expr->value = v & mask;
+	expr->type = EXPR_VALUE;
+	expr->taint = op->taint;
+	return 1;
+
+Overflow:
+	if (!conservative)
+		warning(expr->pos, "constant integer operation overflow");
+	return 0;
+}
+
+static int simplify_float_preop(struct expression *expr)
+{
+	struct expression *op = expr->unop;
+	long double v;
+
+	if (op->type != EXPR_FVALUE)
+		return 0;
+	v = op->fvalue;
+	switch (expr->op) {
+	case '+': break;
+	case '-': v = -v; break;
+	default: return 0;
+	}
+	expr->fvalue = v;
+	expr->type = EXPR_FVALUE;
+	return 1;
+}
+
+/*
+ * Unary post-ops: x++ and x--
+ */
+static int expand_postop(struct expression *expr)
+{
+	expand_expression(expr->unop);
+	return SIDE_EFFECTS;
+}
+
+static int expand_preop(struct expression *expr)
+{
+	int cost;
+
+	switch (expr->op) {
+	case '*':
+		return expand_dereference(expr);
+
+	case '&':
+		return expand_addressof(expr);
+
+	case SPECIAL_INCREMENT:
+	case SPECIAL_DECREMENT:
+		/*
+		 * From a type evaluation standpoint the preops are
+		 * the same as the postops
+		 */
+		return expand_postop(expr);
+
+	default:
+		break;
+	}
+	cost = expand_expression(expr->unop);
+
+	if (simplify_preop(expr))
+		return 0;
+	if (simplify_float_preop(expr))
+		return 0;
+	return cost + 1;
+}
+
+static int expand_arguments(struct expression_list *head)
+{
+	int cost = 0;
+	struct expression *expr;
+
+	FOR_EACH_PTR (head, expr) {
+		cost += expand_expression(expr);
+	} END_FOR_EACH_PTR(expr);
+	return cost;
+}
+
+static int expand_cast(struct expression *expr)
+{
+	int cost;
+	struct expression *target = expr->cast_expression;
+
+	cost = expand_expression(target);
+
+	/* Simplify normal integer casts.. */
+	if (target->type == EXPR_VALUE || target->type == EXPR_FVALUE) {
+		cast_value(expr, expr->ctype, target, target->ctype);
+		return 0;
+	}
+	return cost + 1;
+}
+
+/*
+ * expand a call expression with a symbol. This
+ * should expand builtins.
+ */
+static int expand_symbol_call(struct expression *expr, int cost)
+{
+	struct expression *fn = expr->fn;
+	struct symbol *ctype = fn->ctype;
+
+	if (fn->type != EXPR_PREOP)
+		return SIDE_EFFECTS;
+
+	if (ctype->op && ctype->op->expand)
+		return ctype->op->expand(expr, cost);
+
+	if (ctype->ctype.modifiers & MOD_PURE)
+		return cost + 1;
+
+	return SIDE_EFFECTS;
+}
+
+static int expand_call(struct expression *expr)
+{
+	int cost;
+	struct symbol *sym;
+	struct expression *fn = expr->fn;
+
+	cost = expand_arguments(expr->args);
+	sym = fn->ctype;
+	if (!sym) {
+		expression_error(expr, "function has no type");
+		return SIDE_EFFECTS;
+	}
+	if (sym->type == SYM_NODE)
+		return expand_symbol_call(expr, cost);
+
+	return SIDE_EFFECTS;
+}
+
+static int expand_expression_list(struct expression_list *list)
+{
+	int cost = 0;
+	struct expression *expr;
+
+	FOR_EACH_PTR(list, expr) {
+		cost += expand_expression(expr);
+	} END_FOR_EACH_PTR(expr);
+	return cost;
+}
+
+/* 
+ * We can simplify nested position expressions if
+ * this is a simple (single) positional expression.
+ */
+static int expand_pos_expression(struct expression *expr)
+{
+	struct expression *nested = expr->init_expr;
+	unsigned long offset = expr->init_offset;
+	int nr = expr->init_nr;
+
+	if (nr == 1) {
+		switch (nested->type) {
+		case EXPR_POS:
+			offset += nested->init_offset;
+			*expr = *nested;
+			expr->init_offset = offset;
+			nested = expr;
+			break;
+
+		case EXPR_INITIALIZER: {
+			struct expression *reuse = nested, *entry;
+			*expr = *nested;
+			FOR_EACH_PTR(expr->expr_list, entry) {
+				if (entry->type == EXPR_POS) {
+					entry->init_offset += offset;
+				} else {
+					if (!reuse) {
+						/*
+						 * This happens rarely, but it can happen
+						 * with bitfields that are all at offset
+						 * zero..
+						 */
+						reuse = alloc_expression(entry->pos, EXPR_POS);
+					}
+					reuse->type = EXPR_POS;
+					reuse->ctype = entry->ctype;
+					reuse->init_offset = offset;
+					reuse->init_nr = 1;
+					reuse->init_expr = entry;
+					REPLACE_CURRENT_PTR(entry, reuse);
+					reuse = NULL;
+				}
+			} END_FOR_EACH_PTR(entry);
+			nested = expr;
+			break;
+		}
+
+		default:
+			break;
+		}
+	}
+	return expand_expression(nested);
+}
+
+static unsigned long bit_offset(const struct expression *expr)
+{
+	unsigned long offset = 0;
+	while (expr->type == EXPR_POS) {
+		offset += bytes_to_bits(expr->init_offset);
+		expr = expr->init_expr;
+	}
+	if (expr && expr->ctype)
+		offset += expr->ctype->bit_offset;
+	return offset;
+}
+
+static unsigned long bit_range(const struct expression *expr)
+{
+	unsigned long range = 0;
+	unsigned long size = 0;
+	while (expr->type == EXPR_POS) {
+		unsigned long nr = expr->init_nr;
+		size = expr->ctype->bit_size;
+		range += (nr - 1) * size;
+		expr = expr->init_expr;
+	}
+	range += size;
+	return range;
+}
+
+static int compare_expressions(const void *_a, const void *_b)
+{
+	const struct expression *a = _a;
+	const struct expression *b = _b;
+	unsigned long a_pos = bit_offset(a);
+	unsigned long b_pos = bit_offset(b);
+
+	return (a_pos < b_pos) ? -1 : (a_pos == b_pos) ? 0 : 1;
+}
+
+static void sort_expression_list(struct expression_list **list)
+{
+	sort_list((struct ptr_list **)list, compare_expressions);
+}
+
+static void verify_nonoverlapping(struct expression_list **list, struct expression *expr)
+{
+	struct expression *a = NULL;
+	unsigned long max = 0;
+	unsigned long whole = expr->ctype->bit_size;
+	struct expression *b;
+
+	if (!Woverride_init)
+		return;
+
+	FOR_EACH_PTR(*list, b) {
+		unsigned long off, end;
+		if (!b->ctype || !b->ctype->bit_size)
+			continue;
+		off = bit_offset(b);
+		if (a && off < max) {
+			warning(a->pos, "Initializer entry defined twice");
+			info(b->pos, "  also defined here");
+			if (!Woverride_init_all)
+				return;
+		}
+		end = off + bit_range(b);
+		if (!a && !Woverride_init_whole_range) {
+			// If first entry is the whole range, do not let
+			// any warning about it (this allow to initialize
+			// an array with some default value and then override
+			// some specific entries).
+			if (off == 0 && end == whole)
+				continue;
+		}
+		if (end > max) {
+			max = end;
+			a = b;
+		}
+	} END_FOR_EACH_PTR(b);
+}
+
+static int expand_expression(struct expression *expr)
+{
+	if (!expr)
+		return 0;
+	if (!expr->ctype || expr->ctype == &bad_ctype)
+		return UNSAFE;
+
+	switch (expr->type) {
+	case EXPR_VALUE:
+	case EXPR_FVALUE:
+	case EXPR_STRING:
+		return 0;
+	case EXPR_TYPE:
+	case EXPR_SYMBOL:
+		return expand_symbol_expression(expr);
+	case EXPR_BINOP:
+		return expand_binop(expr);
+
+	case EXPR_LOGICAL:
+		return expand_logical(expr);
+
+	case EXPR_COMMA:
+		return expand_comma(expr);
+
+	case EXPR_COMPARE:
+		return expand_compare(expr);
+
+	case EXPR_ASSIGNMENT:
+		return expand_assignment(expr);
+
+	case EXPR_PREOP:
+		return expand_preop(expr);
+
+	case EXPR_POSTOP:
+		return expand_postop(expr);
+
+	case EXPR_CAST:
+	case EXPR_FORCE_CAST:
+	case EXPR_IMPLIED_CAST:
+		return expand_cast(expr);
+
+	case EXPR_CALL:
+		return expand_call(expr);
+
+	case EXPR_DEREF:
+		warning(expr->pos, "we should not have an EXPR_DEREF left at expansion time");
+		return UNSAFE;
+
+	case EXPR_SELECT:
+	case EXPR_CONDITIONAL:
+		return expand_conditional(expr);
+
+	case EXPR_STATEMENT: {
+		struct statement *stmt = expr->statement;
+		int cost = expand_statement(stmt);
+
+		if (stmt->type == STMT_EXPRESSION && stmt->expression)
+			*expr = *stmt->expression;
+		return cost;
+	}
+
+	case EXPR_LABEL:
+		return 0;
+
+	case EXPR_INITIALIZER:
+		sort_expression_list(&expr->expr_list);
+		verify_nonoverlapping(&expr->expr_list, expr);
+		return expand_expression_list(expr->expr_list);
+
+	case EXPR_IDENTIFIER:
+		return UNSAFE;
+
+	case EXPR_INDEX:
+		return UNSAFE;
+
+	case EXPR_SLICE:
+		return expand_expression(expr->base) + 1;
+
+	case EXPR_POS:
+		return expand_pos_expression(expr);
+
+	case EXPR_SIZEOF:
+	case EXPR_PTRSIZEOF:
+	case EXPR_ALIGNOF:
+	case EXPR_OFFSETOF:
+		expression_error(expr, "internal front-end error: sizeof in expansion?");
+		return UNSAFE;
+	}
+	return SIDE_EFFECTS;
+}
+
+static void expand_const_expression(struct expression *expr, const char *where)
+{
+	if (expr) {
+		expand_expression(expr);
+		if (expr->type != EXPR_VALUE)
+			expression_error(expr, "Expected constant expression in %s", where);
+	}
+}
+
+int expand_symbol(struct symbol *sym)
+{
+	int retval;
+	struct symbol *base_type;
+
+	if (!sym)
+		return 0;
+	base_type = sym->ctype.base_type;
+	if (!base_type)
+		return 0;
+
+	retval = expand_expression(sym->initializer);
+	/* expand the body of the symbol */
+	if (base_type->type == SYM_FN) {
+		if (base_type->stmt)
+			expand_statement(base_type->stmt);
+	}
+	return retval;
+}
+
+static void expand_return_expression(struct statement *stmt)
+{
+	expand_expression(stmt->expression);
+}
+
+static int expand_if_statement(struct statement *stmt)
+{
+	struct expression *expr = stmt->if_conditional;
+
+	if (!expr || !expr->ctype || expr->ctype == &bad_ctype)
+		return UNSAFE;
+
+	expand_expression(expr);
+
+/* This is only valid if nobody jumps into the "dead" side */
+#if 0
+	/* Simplify constant conditionals without even evaluating the false side */
+	if (expr->type == EXPR_VALUE) {
+		struct statement *simple;
+		simple = expr->value ? stmt->if_true : stmt->if_false;
+
+		/* Nothing? */
+		if (!simple) {
+			stmt->type = STMT_NONE;
+			return 0;
+		}
+		expand_statement(simple);
+		*stmt = *simple;
+		return SIDE_EFFECTS;
+	}
+#endif
+	expand_statement(stmt->if_true);
+	expand_statement(stmt->if_false);
+	return SIDE_EFFECTS;
+}
+
+/*
+ * Expanding a compound statement is really just
+ * about adding up the costs of each individual
+ * statement.
+ *
+ * We also collapse a simple compound statement:
+ * this would trigger for simple inline functions,
+ * except we would have to check the "return"
+ * symbol usage. Next time.
+ */
+static int expand_compound(struct statement *stmt)
+{
+	struct statement *s, *last;
+	int cost, statements;
+
+	if (stmt->ret)
+		expand_symbol(stmt->ret);
+
+	last = stmt->args;
+	cost = expand_statement(last);
+	statements = last != NULL;
+	FOR_EACH_PTR(stmt->stmts, s) {
+		statements++;
+		last = s;
+		cost += expand_statement(s);
+	} END_FOR_EACH_PTR(s);
+
+	if (statements == 1 && !stmt->ret)
+		*stmt = *last;
+
+	return cost;
+}
+
+static int expand_statement(struct statement *stmt)
+{
+	if (!stmt)
+		return 0;
+
+	switch (stmt->type) {
+	case STMT_DECLARATION: {
+		struct symbol *sym;
+		FOR_EACH_PTR(stmt->declaration, sym) {
+			expand_symbol(sym);
+		} END_FOR_EACH_PTR(sym);
+		return SIDE_EFFECTS;
+	}
+
+	case STMT_RETURN:
+		expand_return_expression(stmt);
+		return SIDE_EFFECTS;
+
+	case STMT_EXPRESSION:
+		return expand_expression(stmt->expression);
+
+	case STMT_COMPOUND:
+		return expand_compound(stmt);
+
+	case STMT_IF:
+		return expand_if_statement(stmt);
+
+	case STMT_ITERATOR:
+		expand_expression(stmt->iterator_pre_condition);
+		expand_expression(stmt->iterator_post_condition);
+		expand_statement(stmt->iterator_pre_statement);
+		expand_statement(stmt->iterator_statement);
+		expand_statement(stmt->iterator_post_statement);
+		return SIDE_EFFECTS;
+
+	case STMT_SWITCH:
+		expand_expression(stmt->switch_expression);
+		expand_statement(stmt->switch_statement);
+		return SIDE_EFFECTS;
+
+	case STMT_CASE:
+		expand_const_expression(stmt->case_expression, "case statement");
+		expand_const_expression(stmt->case_to, "case statement");
+		expand_statement(stmt->case_statement);
+		return SIDE_EFFECTS;
+
+	case STMT_LABEL:
+		expand_statement(stmt->label_statement);
+		return SIDE_EFFECTS;
+
+	case STMT_GOTO:
+		expand_expression(stmt->goto_expression);
+		return SIDE_EFFECTS;
+
+	case STMT_NONE:
+		break;
+	case STMT_ASM:
+		/* FIXME! Do the asm parameter evaluation! */
+		break;
+	case STMT_CONTEXT:
+		expand_expression(stmt->expression);
+		break;
+	case STMT_RANGE:
+		expand_expression(stmt->range_expression);
+		expand_expression(stmt->range_low);
+		expand_expression(stmt->range_high);
+		break;
+	}
+	return SIDE_EFFECTS;
+}
+
+static inline int bad_integer_constant_expression(struct expression *expr)
+{
+	if (!(expr->flags & CEF_ICE))
+		return 1;
+	if (expr->taint & Taint_comma)
+		return 1;
+	return 0;
+}
+
+static long long __get_expression_value(struct expression *expr, int strict)
+{
+	long long value, mask;
+	struct symbol *ctype;
+
+	if (!expr)
+		return 0;
+	ctype = evaluate_expression(expr);
+	if (!ctype) {
+		expression_error(expr, "bad constant expression type");
+		return 0;
+	}
+	expand_expression(expr);
+	if (expr->type != EXPR_VALUE) {
+		if (strict != 2)
+			expression_error(expr, "bad constant expression");
+		return 0;
+	}
+	if ((strict == 1) && bad_integer_constant_expression(expr)) {
+		expression_error(expr, "bad integer constant expression");
+		return 0;
+	}
+
+	value = expr->value;
+	mask = 1ULL << (ctype->bit_size-1);
+
+	if (value & mask) {
+		while (ctype->type != SYM_BASETYPE)
+			ctype = ctype->ctype.base_type;
+		if (!(ctype->ctype.modifiers & MOD_UNSIGNED))
+			value = value | mask | ~(mask-1);
+	}
+	return value;
+}
+
+long long get_expression_value(struct expression *expr)
+{
+	return __get_expression_value(expr, 0);
+}
+
+long long const_expression_value(struct expression *expr)
+{
+	return __get_expression_value(expr, 1);
+}
+
+long long get_expression_value_silent(struct expression *expr)
+{
+
+	return __get_expression_value(expr, 2);
+}
+
+int expr_truth_value(struct expression *expr)
+{
+	const int saved = conservative;
+	struct symbol *ctype;
+
+	if (!expr)
+		return 0;
+
+	ctype = evaluate_expression(expr);
+	if (!ctype)
+		return -1;
+
+	conservative = 1;
+	expand_expression(expr);
+	conservative = saved;
+
+redo:
+	switch (expr->type) {
+	case EXPR_COMMA:
+		expr = expr->right;
+		goto redo;
+	case EXPR_VALUE:
+		return expr->value != 0;
+	case EXPR_FVALUE:
+		return expr->fvalue != 0;
+	default:
+		return -1;
+	}
+}
+
+int is_zero_constant(struct expression *expr)
+{
+	const int saved = conservative;
+	conservative = 1;
+	expand_expression(expr);
+	conservative = saved;
+	return expr->type == EXPR_VALUE && !expr->value;
+}
--- /dev/null	Fri Dec 21 15:00:12 2018
+++ new/usr/src/tools/smatch/src/expand.h	Fri Dec 21 15:00:12 2018
@@ -0,0 +1,34 @@
+#ifndef EXPAND_H
+#define EXPAND_H
+/*
+ * sparse/expand.h
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+/* Random cost numbers */
+#define SIDE_EFFECTS 10000	/* The expression has side effects */
+#define UNSAFE 100		/* The expression may be "infinitely costly" due to exceptions */
+#define SELECT_COST 20		/* Cut-off for turning a conditional into a select */
+#define BRANCH_COST 10		/* Cost of a conditional branch */
+
+#endif
--- /dev/null	Fri Dec 21 15:00:12 2018
+++ new/usr/src/tools/smatch/src/expression.c	Fri Dec 21 15:00:12 2018
@@ -0,0 +1,906 @@
+/*
+ * sparse/expression.c
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003-2004 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * This is the expression parsing part of parsing C.
+ */
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <limits.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "token.h"
+#include "parse.h"
+#include "symbol.h"
+#include "scope.h"
+#include "expression.h"
+#include "target.h"
+#include "char.h"
+
+static int match_oplist(int op, ...)
+{
+	va_list args;
+	int nextop;
+
+	va_start(args, op);
+	do {
+		nextop = va_arg(args, int);
+	} while (nextop != 0 && nextop != op);
+	va_end(args);
+
+	return nextop != 0;
+}
+
+static struct token *comma_expression(struct token *, struct expression **);
+
+struct token *parens_expression(struct token *token, struct expression **expr, const char *where)
+{
+	token = expect(token, '(', where);
+	if (match_op(token, '{')) {
+		struct expression *e = alloc_expression(token->pos, EXPR_STATEMENT);
+		struct statement *stmt = alloc_statement(token->pos, STMT_COMPOUND);
+		*expr = e;
+		e->statement = stmt;
+		start_symbol_scope(e->pos);
+		token = compound_statement(token->next, stmt);
+		end_symbol_scope();
+		token = expect(token, '}', "at end of statement expression");
+	} else
+		token = parse_expression(token, expr);
+	return expect(token, ')', where);
+}
+
+/*
+ * Handle __func__, __FUNCTION__ and __PRETTY_FUNCTION__ token
+ * conversion
+ */
+static struct symbol *handle_func(struct token *token)
+{
+	struct ident *ident = token->ident;
+	struct symbol *decl, *array;
+	struct string *string;
+	int len;
+
+	if (ident != &__func___ident &&
+	    ident != &__FUNCTION___ident &&
+	    ident != &__PRETTY_FUNCTION___ident)
+		return NULL;
+
+	if (!current_fn || !current_fn->ident)
+		return NULL;
+
+	/* OK, it's one of ours */
+	array = alloc_symbol(token->pos, SYM_ARRAY);
+	array->ctype.base_type = &char_ctype;
+	array->ctype.alignment = 1;
+	array->endpos = token->pos;
+	decl = alloc_symbol(token->pos, SYM_NODE);
+	decl->ctype.base_type = array;
+	decl->ctype.alignment = 1;
+	decl->ctype.modifiers = MOD_STATIC;
+	decl->endpos = token->pos;
+
+	/* function-scope, but in NS_SYMBOL */
+	bind_symbol(decl, ident, NS_LABEL);
+	decl->namespace = NS_SYMBOL;
+
+	len = current_fn->ident->len;
+	string = __alloc_string(len + 1);
+	memcpy(string->data, current_fn->ident->name, len);
+	string->data[len] = 0;
+	string->length = len + 1;
+
+	decl->initializer = alloc_expression(token->pos, EXPR_STRING);
+	decl->initializer->string = string;
+	decl->initializer->ctype = decl;
+	decl->array_size = alloc_const_expression(token->pos, len + 1);
+	array->array_size = decl->array_size;
+	decl->bit_size = array->bit_size = bytes_to_bits(len + 1);
+
+	return decl;
+}
+
+static struct token *parse_type(struct token *token, struct expression **tree)
+{
+	struct symbol *sym;
+	*tree = alloc_expression(token->pos, EXPR_TYPE);
+	token = typename(token, &sym, NULL);
+	if (sym->ident)
+		sparse_error(token->pos,
+			     "type expression should not include identifier "
+			     "\"%s\"", sym->ident->name);
+	(*tree)->symbol = sym;
+	return token;
+}
+
+static struct token *builtin_types_compatible_p_expr(struct token *token,
+						     struct expression **tree)
+{
+	struct expression *expr = alloc_expression(
+		token->pos, EXPR_COMPARE);
+	expr->op = SPECIAL_EQUAL;
+	token = token->next;
+	if (!match_op(token, '('))
+		return expect(token, '(',
+			      "after __builtin_types_compatible_p");
+	token = token->next;
+	token = parse_type(token, &expr->left);
+	if (!match_op(token, ','))
+		return expect(token, ',',
+			      "in __builtin_types_compatible_p");
+	token = token->next;
+	token = parse_type(token, &expr->right);
+	if (!match_op(token, ')'))
+		return expect(token, ')',
+			      "at end of __builtin_types_compatible_p");
+	token = token->next;
+	
+	*tree = expr;
+	return token;
+}
+
+static struct token *builtin_offsetof_expr(struct token *token,
+					   struct expression **tree)
+{
+	struct expression *expr = NULL;
+	struct expression **p = &expr;
+	struct symbol *sym;
+	int op = '.';
+
+	token = token->next;
+	if (!match_op(token, '('))
+		return expect(token, '(', "after __builtin_offset");
+
+	token = token->next;
+	token = typename(token, &sym, NULL);
+	if (sym->ident)
+		sparse_error(token->pos,
+			     "type expression should not include identifier "
+			     "\"%s\"", sym->ident->name);
+
+	if (!match_op(token, ','))
+		return expect(token, ',', "in __builtin_offset");
+
+	while (1) {
+		struct expression *e;
+		switch (op) {
+		case ')':
+			expr->in = sym;
+			*tree = expr;
+		default:
+			return expect(token, ')', "at end of __builtin_offset");
+		case SPECIAL_DEREFERENCE:
+			e = alloc_expression(token->pos, EXPR_OFFSETOF);
+			e->op = '[';
+			*p = e;
+			p = &e->down;
+			/* fall through */
+		case '.':
+			token = token->next;
+			e = alloc_expression(token->pos, EXPR_OFFSETOF);
+			e->op = '.';
+			if (token_type(token) != TOKEN_IDENT) {
+				sparse_error(token->pos, "Expected member name");
+				return token;
+			}
+			e->ident = token->ident;
+			token = token->next;
+			break;
+		case '[':
+			token = token->next;
+			e = alloc_expression(token->pos, EXPR_OFFSETOF);
+			e->op = '[';
+			token = parse_expression(token, &e->index);
+			token = expect(token, ']',
+					"at end of array dereference");
+			if (!e->index)
+				return token;
+		}
+		*p = e;
+		p = &e->down;
+		op = token_type(token) == TOKEN_SPECIAL ? token->special : 0;
+	}
+}
+
+#ifndef ULLONG_MAX
+#define ULLONG_MAX (~0ULL)
+#endif
+
+static unsigned long long parse_num(const char *nptr, char **end)
+{
+	if (nptr[0] == '0' && tolower((unsigned char)nptr[1]) == 'b')
+		return strtoull(&nptr[2], end, 2);
+	return strtoull(nptr, end, 0);
+}
+
+static void get_number_value(struct expression *expr, struct token *token)
+{
+	const char *str = token->number;
+	unsigned long long value;
+	char *end;
+	int size = 0, want_unsigned = 0;
+	int overflow = 0, do_warn = 0;
+	int try_unsigned = 1;
+	int bits;
+
+	errno = 0;
+	value = parse_num(str, &end);
+	if (end == str)
+		goto Float;
+	if (value == ULLONG_MAX && errno == ERANGE)
+		overflow = 1;
+	while (1) {
+		char c = *end++;
+		if (!c) {
+			break;
+		} else if (c == 'u' || c == 'U') {
+			if (want_unsigned)
+				goto Enoint;
+			want_unsigned = 1;
+		} else if (c == 'l' || c == 'L') {
+			if (size)
+				goto Enoint;
+			size = 1;
+			if (*end == c) {
+				size = 2;
+				end++;
+			}
+		} else
+			goto Float;
+	}
+	if (overflow)
+		goto Eoverflow;
+	/* OK, it's a valid integer */
+	/* decimals can be unsigned only if directly specified as such */
+	if (str[0] != '0' && !want_unsigned)
+		try_unsigned = 0;
+	if (!size) {
+		bits = bits_in_int - 1;
+		if (!(value & (~1ULL << bits))) {
+			if (!(value & (1ULL << bits))) {
+				goto got_it;
+			} else if (try_unsigned) {
+				want_unsigned = 1;
+				goto got_it;
+			}
+		}
+		size = 1;
+		do_warn = 1;
+	}
+	if (size < 2) {
+		bits = bits_in_long - 1;
+		if (!(value & (~1ULL << bits))) {
+			if (!(value & (1ULL << bits))) {
+				goto got_it;
+			} else if (try_unsigned) {
+				want_unsigned = 1;
+				goto got_it;
+			}
+			do_warn |= 2;
+		}
+		size = 2;
+		do_warn |= 1;
+	}
+	bits = bits_in_longlong - 1;
+	if (value & (~1ULL << bits))
+		goto Eoverflow;
+	if (!(value & (1ULL << bits)))
+		goto got_it;
+	if (!try_unsigned)
+		warning(expr->pos, "decimal constant %s is too big for long long",
+			show_token(token));
+	want_unsigned = 1;
+got_it:
+	if (do_warn && Wconstant_suffix)
+		warning(expr->pos, "constant %s is so big it is%s%s%s",
+			show_token(token),
+			want_unsigned ? " unsigned":"",
+			size > 0 ? " long":"",
+			size > 1 ? " long":"");
+	if (do_warn & 2)
+		warning(expr->pos,
+			"decimal constant %s is between LONG_MAX and ULONG_MAX."
+			" For C99 that means long long, C90 compilers are very "
+			"likely to produce unsigned long (and a warning) here",
+			show_token(token));
+        expr->type = EXPR_VALUE;
+	expr->flags = CEF_SET_INT;
+        expr->ctype = ctype_integer(size, want_unsigned);
+        expr->value = value;
+	return;
+Eoverflow:
+	error_die(expr->pos, "constant %s is too big even for unsigned long long",
+			show_token(token));
+	return;
+Float:
+	expr->fvalue = string_to_ld(str, &end);
+	if (str == end)
+		goto Enoint;
+
+	if (*end && end[1])
+		goto Enoint;
+
+	if (*end == 'f' || *end == 'F')
+		expr->ctype = &float_ctype;
+	else if (*end == 'l' || *end == 'L')
+		expr->ctype = &ldouble_ctype;
+	else if (!*end)
+		expr->ctype = &double_ctype;
+	else
+		goto Enoint;
+
+	expr->flags = CEF_SET_FLOAT;
+	expr->type = EXPR_FVALUE;
+	return;
+
+Enoint:
+	error_die(expr->pos, "constant %s is not a valid number", show_token(token));
+}
+
+struct token *primary_expression(struct token *token, struct expression **tree)
+{
+	struct expression *expr = NULL;
+
+	switch (token_type(token)) {
+	case TOKEN_CHAR ... TOKEN_WIDE_CHAR_EMBEDDED_3:
+		expr = alloc_expression(token->pos, EXPR_VALUE);
+		expr->flags = CEF_SET_CHAR;
+		expr->ctype = token_type(token) < TOKEN_WIDE_CHAR ? &int_ctype : &long_ctype;
+		get_char_constant(token, &expr->value);
+		token = token->next;
+		break;
+
+	case TOKEN_NUMBER:
+		expr = alloc_expression(token->pos, EXPR_VALUE);
+		get_number_value(expr, token); /* will see if it's an integer */
+		token = token->next;
+		break;
+
+	case TOKEN_ZERO_IDENT: {
+		expr = alloc_expression(token->pos, EXPR_SYMBOL);
+		expr->flags = CEF_SET_INT;
+		expr->ctype = &int_ctype;
+		expr->symbol = &zero_int;
+		expr->symbol_name = token->ident;
+		token = token->next;
+		break;
+	}
+
+	case TOKEN_IDENT: {
+		struct symbol *sym = lookup_symbol(token->ident, NS_SYMBOL | NS_TYPEDEF);
+		struct token *next = token->next;
+
+		if (!sym) {
+			sym = handle_func(token);
+			if (token->ident == &__builtin_types_compatible_p_ident) {
+				token = builtin_types_compatible_p_expr(token, &expr);
+				break;
+			}
+			if (token->ident == &__builtin_offsetof_ident) {
+				token = builtin_offsetof_expr(token, &expr);
+				break;
+			}
+		} else if (sym->enum_member) {
+			expr = alloc_expression(token->pos, EXPR_VALUE);
+			*expr = *sym->initializer;
+			/* we want the right position reported, thus the copy */
+			expr->pos = token->pos;
+			expr->flags = CEF_SET_ENUM;
+			token = next;
+			break;
+		}
+
+		expr = alloc_expression(token->pos, EXPR_SYMBOL);
+
+		/*
+		 * We support types as real first-class citizens, with type
+		 * comparisons etc:
+		 *
+		 *	if (typeof(a) == int) ..
+		 */
+		if (sym && sym->namespace == NS_TYPEDEF) {
+			sparse_error(token->pos, "typename in expression");
+			sym = NULL;
+		}
+		expr->symbol_name = token->ident;
+		expr->symbol = sym;
+
+		/*
+		 * A pointer to an lvalue designating a static storage
+		 * duration object is an address constant [6.6(9)].
+		 */
+		if (sym && (sym->ctype.modifiers & (MOD_TOPLEVEL | MOD_STATIC)))
+			expr->flags = CEF_ADDR;
+
+		token = next;
+		break;
+	}
+
+	case TOKEN_STRING:
+	case TOKEN_WIDE_STRING:
+		expr = alloc_expression(token->pos, EXPR_STRING);
+		token = get_string_constant(token, expr);
+		break;
+
+	case TOKEN_SPECIAL:
+		if (token->special == '(') {
+			expr = alloc_expression(token->pos, EXPR_PREOP);
+			expr->op = '(';
+			token = parens_expression(token, &expr->unop, "in expression");
+			break;
+		}
+		if (token->special == '[' && lookup_type(token->next)) {
+			expr = alloc_expression(token->pos, EXPR_TYPE);
+			token = typename(token->next, &expr->symbol, NULL);
+			token = expect(token, ']', "in type expression");
+			break;
+		}
+			
+	default:
+		;
+	}
+	*tree = expr;
+	return token;
+}
+
+static struct token *expression_list(struct token *token, struct expression_list **list)
+{
+	while (!match_op(token, ')')) {
+		struct expression *expr = NULL;
+		token = assignment_expression(token, &expr);
+		if (!expr)
+			break;
+		add_expression(list, expr);
+		if (!match_op(token, ','))
+			break;
+		token = token->next;
+	}
+	return token;
+}
+
+/*
+ * extend to deal with the ambiguous C grammar for parsing
+ * a cast expressions followed by an initializer.
+ */
+static struct token *postfix_expression(struct token *token, struct expression **tree, struct expression *cast_init_expr)
+{
+	struct expression *expr = cast_init_expr;
+
+	if (!expr)
+		token = primary_expression(token, &expr);
+
+	while (expr && token_type(token) == TOKEN_SPECIAL) {
+		switch (token->special) {
+		case '[': {			/* Array dereference */
+			struct expression *deref = alloc_expression(token->pos, EXPR_PREOP);
+			struct expression *add = alloc_expression(token->pos, EXPR_BINOP);
+
+			deref->op = '*';
+			deref->unop = add;
+
+			add->op = '+';
+			add->left = expr;
+			token = parse_expression(token->next, &add->right);
+			token = expect(token, ']', "at end of array dereference");
+			expr = deref;
+			continue;
+		}
+		case SPECIAL_INCREMENT:		/* Post-increment */
+		case SPECIAL_DECREMENT:	{	/* Post-decrement */
+			struct expression *post = alloc_expression(token->pos, EXPR_POSTOP);
+			post->op = token->special;
+			post->unop = expr;
+			expr = post;
+			token = token->next;
+			continue;
+		}
+		case SPECIAL_DEREFERENCE: {	/* Structure pointer member dereference */
+			/* "x->y" is just shorthand for "(*x).y" */
+			struct expression *inner = alloc_expression(token->pos, EXPR_PREOP);
+			inner->op = '*';
+			inner->unop = expr;
+			expr = inner;
+		}
+		/* Fall through!! */
+		case '.': {			/* Structure member dereference */
+			struct expression *deref = alloc_expression(token->pos, EXPR_DEREF);
+			deref->op = '.';
+			deref->deref = expr;
+			token = token->next;
+			if (token_type(token) != TOKEN_IDENT) {
+				sparse_error(token->pos, "Expected member name");
+				break;
+			}
+			deref->member = token->ident;
+			deref->member_offset = -1;
+			token = token->next;
+			expr = deref;
+			continue;
+		}
+
+		case '(': {			/* Function call */
+			struct expression *call = alloc_expression(token->pos, EXPR_CALL);
+			call->op = '(';
+			call->fn = expr;
+			token = expression_list(token->next, &call->args);
+			token = expect(token, ')', "in function call");
+			expr = call;
+			continue;
+		}
+
+		default:
+			break;
+		}
+		break;
+	}
+	*tree = expr;
+	return token;
+}
+
+static struct token *cast_expression(struct token *token, struct expression **tree);
+static struct token *unary_expression(struct token *token, struct expression **tree);
+
+static struct token *type_info_expression(struct token *token,
+	struct expression **tree, int type)
+{
+	struct expression *expr = alloc_expression(token->pos, type);
+	struct token *p;
+
+	*tree = expr;
+	expr->flags = CEF_SET_ICE; /* XXX: VLA support will need that changed */
+	token = token->next;
+	if (!match_op(token, '(') || !lookup_type(token->next))
+		return unary_expression(token, &expr->cast_expression);
+	p = token;
+	token = typename(token->next, &expr->cast_type, NULL);
+
+	if (!match_op(token, ')')) {
+		static const char * error[] = {
+			[EXPR_SIZEOF] = "at end of sizeof",
+			[EXPR_ALIGNOF] = "at end of __alignof__",
+			[EXPR_PTRSIZEOF] = "at end of __sizeof_ptr__"
+		};
+		return expect(token, ')', error[type]);
+	}
+
+	token = token->next;
+	/*
+	 * C99 ambiguity: the typename might have been the beginning
+	 * of a typed initializer expression..
+	 */
+	if (match_op(token, '{')) {
+		struct expression *cast = alloc_expression(p->pos, EXPR_CAST);
+		cast->cast_type = expr->cast_type;
+		expr->cast_type = NULL;
+		expr->cast_expression = cast;
+		token = initializer(&cast->cast_expression, token);
+		token = postfix_expression(token, &expr->cast_expression, cast);
+	}
+	return token;
+}
+
+static struct token *unary_expression(struct token *token, struct expression **tree)
+{
+	if (token_type(token) == TOKEN_IDENT) {
+		struct ident *ident = token->ident;
+		if (ident->reserved) {
+			static const struct {
+				struct ident *id;
+				int type;
+			} type_information[] = {
+				{ &sizeof_ident, EXPR_SIZEOF },
+				{ &__alignof___ident, EXPR_ALIGNOF },
+				{ &__alignof_ident, EXPR_ALIGNOF },
+				{ &_Alignof_ident, EXPR_ALIGNOF },
+				{ &__sizeof_ptr___ident, EXPR_PTRSIZEOF },
+			};
+			int i;
+			for (i = 0; i < ARRAY_SIZE(type_information); i++) {
+				if (ident == type_information[i].id)
+					return type_info_expression(token, tree, type_information[i].type);
+			}
+		}
+	}
+
+	if (token_type(token) == TOKEN_SPECIAL) {
+		if (match_oplist(token->special,
+		    SPECIAL_INCREMENT, SPECIAL_DECREMENT,
+		    '&', '*', 0)) {
+		    	struct expression *unop;
+			struct expression *unary;
+			struct token *next;
+
+			next = cast_expression(token->next, &unop);
+			if (!unop) {
+				sparse_error(token->pos, "Syntax error in unary expression");
+				*tree = NULL;
+				return next;
+			}
+			unary = alloc_expression(token->pos, EXPR_PREOP);
+			unary->op = token->special;
+			unary->unop = unop;
+			*tree = unary;
+			return next;
+		}
+		/* possibly constant ones */
+		if (match_oplist(token->special, '+', '-', '~', '!', 0)) {
+		    	struct expression *unop;
+			struct expression *unary;
+			struct token *next;
+
+			next = cast_expression(token->next, &unop);
+			if (!unop) {
+				sparse_error(token->pos, "Syntax error in unary expression");
+				*tree = NULL;
+				return next;
+			}
+			unary = alloc_expression(token->pos, EXPR_PREOP);
+			unary->op = token->special;
+			unary->unop = unop;
+			*tree = unary;
+			return next;
+		}
+		/* Gcc extension: &&label gives the address of a label */
+		if (match_op(token, SPECIAL_LOGICAL_AND) &&
+		    token_type(token->next) == TOKEN_IDENT) {
+			struct expression *label = alloc_expression(token->pos, EXPR_LABEL);
+			struct symbol *sym = label_symbol(token->next);
+			if (!(sym->ctype.modifiers & MOD_ADDRESSABLE)) {
+				sym->ctype.modifiers |= MOD_ADDRESSABLE;
+				add_symbol(&function_computed_target_list, sym);
+			}
+			label->flags = CEF_ADDR;
+			label->label_symbol = sym;
+			*tree = label;
+			return token->next->next;
+		}
+						
+	}
+			
+	return postfix_expression(token, tree, NULL);
+}
+
+/*
+ * Ambiguity: a '(' can be either a cast-expression or
+ * a primary-expression depending on whether it is followed
+ * by a type or not. 
+ *
+ * additional ambiguity: a "cast expression" followed by
+ * an initializer is really a postfix-expression.
+ */
+static struct token *cast_expression(struct token *token, struct expression **tree)
+{
+	if (match_op(token, '(')) {
+		struct token *next = token->next;
+		if (lookup_type(next)) {
+			struct expression *cast = alloc_expression(next->pos, EXPR_CAST);
+			struct expression *v;
+			struct symbol *sym;
+			int is_force;
+
+			token = typename(next, &sym, &is_force);
+			cast->cast_type = sym;
+			token = expect(token, ')', "at end of cast operator");
+			if (match_op(token, '{')) {
+				if (toplevel(block_scope))
+					sym->ctype.modifiers |= MOD_TOPLEVEL;
+				if (is_force)
+					warning(sym->pos,
+						"[force] in compound literal");
+				token = initializer(&cast->cast_expression, token);
+				return postfix_expression(token, tree, cast);
+			}
+			*tree = cast;
+			if (is_force)
+				cast->type = EXPR_FORCE_CAST;
+			token = cast_expression(token, &v);
+			if (!v)
+				return token;
+			cast->cast_expression = v;
+			return token;
+		}
+	}
+	return unary_expression(token, tree);
+}
+
+/*
+ * Generic left-to-right binop parsing
+ *
+ * This _really_ needs to be inlined, because that makes the inner
+ * function call statically deterministic rather than a totally
+ * unpredictable indirect call. But gcc-3 is so "clever" that it
+ * doesn't do so by default even when you tell it to inline it.
+ *
+ * Making it a macro avoids the inlining problem, and also means
+ * that we can pass in the op-comparison as an expression rather
+ * than create a data structure for it.
+ */
+
+#define LR_BINOP_EXPRESSION(__token, tree, type, inner, compare)	\
+	struct expression *left = NULL;					\
+	struct token * next = inner(__token, &left);			\
+									\
+	if (left) {							\
+		while (token_type(next) == TOKEN_SPECIAL) {		\
+			struct expression *top, *right = NULL;		\
+			int op = next->special;				\
+									\
+			if (!(compare))					\
+				goto out;				\
+			top = alloc_expression(next->pos, type);	\
+			next = inner(next->next, &right);		\
+			if (!right) {					\
+				sparse_error(next->pos, "No right hand side of '%s'-expression", show_special(op));	\
+				break;					\
+			}						\
+			top->op = op;					\
+			top->left = left;				\
+			top->right = right;				\
+			left = top;					\
+		}							\
+	}								\
+out:									\
+	*tree = left;							\
+	return next;							\
+
+static struct token *multiplicative_expression(struct token *token, struct expression **tree)
+{
+	LR_BINOP_EXPRESSION(
+		token, tree, EXPR_BINOP, cast_expression,
+		(op == '*') || (op == '/') || (op == '%')
+	);
+}
+
+static struct token *additive_expression(struct token *token, struct expression **tree)
+{
+	LR_BINOP_EXPRESSION(
+		token, tree, EXPR_BINOP, multiplicative_expression,
+		(op == '+') || (op == '-')
+	);
+}
+
+static struct token *shift_expression(struct token *token, struct expression **tree)
+{
+	LR_BINOP_EXPRESSION(
+		token, tree, EXPR_BINOP, additive_expression,
+		(op == SPECIAL_LEFTSHIFT) || (op == SPECIAL_RIGHTSHIFT)
+	);
+}
+
+static struct token *relational_expression(struct token *token, struct expression **tree)
+{
+	LR_BINOP_EXPRESSION(
+		token, tree, EXPR_COMPARE, shift_expression,
+		(op == '<') || (op == '>') ||
+		(op == SPECIAL_LTE) || (op == SPECIAL_GTE)
+	);
+}
+
+static struct token *equality_expression(struct token *token, struct expression **tree)
+{
+	LR_BINOP_EXPRESSION(
+		token, tree, EXPR_COMPARE, relational_expression,
+		(op == SPECIAL_EQUAL) || (op == SPECIAL_NOTEQUAL)
+	);
+}
+
+static struct token *bitwise_and_expression(struct token *token, struct expression **tree)
+{
+	LR_BINOP_EXPRESSION(
+		token, tree, EXPR_BINOP, equality_expression,
+		(op == '&')
+	);
+}
+
+static struct token *bitwise_xor_expression(struct token *token, struct expression **tree)
+{
+	LR_BINOP_EXPRESSION(
+		token, tree, EXPR_BINOP, bitwise_and_expression,
+		(op == '^')
+	);
+}
+
+static struct token *bitwise_or_expression(struct token *token, struct expression **tree)
+{
+	LR_BINOP_EXPRESSION(
+		token, tree, EXPR_BINOP, bitwise_xor_expression,
+		(op == '|')
+	);
+}
+
+static struct token *logical_and_expression(struct token *token, struct expression **tree)
+{
+	LR_BINOP_EXPRESSION(
+		token, tree, EXPR_LOGICAL, bitwise_or_expression,
+		(op == SPECIAL_LOGICAL_AND)
+	);
+}
+
+static struct token *logical_or_expression(struct token *token, struct expression **tree)
+{
+	LR_BINOP_EXPRESSION(
+		token, tree, EXPR_LOGICAL, logical_and_expression,
+		(op == SPECIAL_LOGICAL_OR)
+	);
+}
+
+struct token *conditional_expression(struct token *token, struct expression **tree)
+{
+	token = logical_or_expression(token, tree);
+	if (*tree && match_op(token, '?')) {
+		struct expression *expr = alloc_expression(token->pos, EXPR_CONDITIONAL);
+		expr->op = token->special;
+		expr->left = *tree;
+		*tree = expr;
+		token = parse_expression(token->next, &expr->cond_true);
+		token = expect(token, ':', "in conditional expression");
+		token = conditional_expression(token, &expr->cond_false);
+	}
+	return token;
+}
+
+struct token *assignment_expression(struct token *token, struct expression **tree)
+{
+	token = conditional_expression(token, tree);
+	if (*tree && token_type(token) == TOKEN_SPECIAL) {
+		static const int assignments[] = {
+			'=',
+			SPECIAL_ADD_ASSIGN, SPECIAL_SUB_ASSIGN,
+			SPECIAL_MUL_ASSIGN, SPECIAL_DIV_ASSIGN,
+			SPECIAL_MOD_ASSIGN, SPECIAL_SHL_ASSIGN,
+			SPECIAL_SHR_ASSIGN, SPECIAL_AND_ASSIGN,
+			SPECIAL_OR_ASSIGN,  SPECIAL_XOR_ASSIGN };
+		int i, op = token->special;
+		for (i = 0; i < ARRAY_SIZE(assignments); i++)
+			if (assignments[i] == op) {
+				struct expression * expr = alloc_expression(token->pos, EXPR_ASSIGNMENT);
+				expr->left = *tree;
+				expr->op = op;
+				*tree = expr;
+				return assignment_expression(token->next, &expr->right);
+			}
+	}
+	return token;
+}
+
+static struct token *comma_expression(struct token *token, struct expression **tree)
+{
+	LR_BINOP_EXPRESSION(
+		token, tree, EXPR_COMMA, assignment_expression,
+		(op == ',')
+	);
+}
+
+struct token *parse_expression(struct token *token, struct expression **tree)
+{
+	return comma_expression(token,tree);
+}
+
+
--- /dev/null	Fri Dec 21 15:00:12 2018
+++ new/usr/src/tools/smatch/src/expression.h	Fri Dec 21 15:00:12 2018
@@ -0,0 +1,311 @@
+#ifndef EXPRESSION_H
+#define EXPRESSION_H
+/*
+ * sparse/expression.h
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * Declarations and helper functions for expression parsing.
+ */
+
+#include "allocate.h"
+#include "lib.h"
+#include "symbol.h"
+
+struct expression_list;
+
+enum expression_type {
+	EXPR_VALUE = 1,
+	EXPR_STRING,
+	EXPR_SYMBOL,
+	EXPR_TYPE,
+	EXPR_BINOP,
+	EXPR_ASSIGNMENT,
+	EXPR_LOGICAL,
+	EXPR_DEREF,
+	EXPR_PREOP,
+	EXPR_POSTOP,
+	EXPR_CAST,
+	EXPR_FORCE_CAST,
+	EXPR_IMPLIED_CAST,
+	EXPR_SIZEOF,
+	EXPR_ALIGNOF,
+	EXPR_PTRSIZEOF,
+	EXPR_CONDITIONAL,
+	EXPR_SELECT,		// a "safe" conditional expression
+	EXPR_STATEMENT,
+	EXPR_CALL,
+	EXPR_COMMA,
+	EXPR_COMPARE,
+	EXPR_LABEL,
+	EXPR_INITIALIZER,	// initializer list
+	EXPR_IDENTIFIER,	// identifier in initializer
+	EXPR_INDEX,		// index in initializer
+	EXPR_POS,		// position in initializer
+	EXPR_FVALUE,
+	EXPR_SLICE,
+	EXPR_OFFSETOF,
+};
+
+
+/*
+ * Flags for tracking the promotion of constness related attributes
+ * from subexpressions to their parents.
+ *
+ * The flags are not independent as one might imply another.
+ * The implications are as follows:
+ * - CEF_INT, CEF_ENUM and
+ *   CEF_CHAR imply CEF_ICE.
+ *
+ * Use the CEF_*_SET_MASK and CEF_*_CLEAR_MASK
+ * helper macros defined below to set or clear one of these flags.
+ */
+enum constexpr_flag {
+	CEF_NONE = 0,
+	/*
+	 * A constant in the sense of [6.4.4]:
+	 * - Integer constant [6.4.4.1]
+	 * - Floating point constant [6.4.4.2]
+	 * - Enumeration constant [6.4.4.3]
+	 * - Character constant [6.4.4.4]
+	 */
+	CEF_INT = (1 << 0),
+	CEF_FLOAT = (1 << 1),
+	CEF_ENUM = (1 << 2),
+	CEF_CHAR = (1 << 3),
+
+	/*
+	 * A constant expression in the sense of [6.6]:
+	 * - integer constant expression [6.6(6)]
+	 * - arithmetic constant expression [6.6(8)]
+	 * - address constant [6.6(9)]
+	 */
+	CEF_ICE = (1 << 4),
+	CEF_ACE = (1 << 5),
+	CEF_ADDR = (1 << 6),
+
+	/* integer constant expression => arithmetic constant expression */
+	CEF_SET_ICE = (CEF_ICE | CEF_ACE),
+
+	/* integer constant => integer constant expression */
+	CEF_SET_INT = (CEF_INT | CEF_SET_ICE),
+
+	/* floating point constant => arithmetic constant expression */
+	CEF_SET_FLOAT = (CEF_FLOAT | CEF_ACE),
+
+	/* enumeration constant => integer constant expression */
+	CEF_SET_ENUM = (CEF_ENUM | CEF_SET_ICE),
+
+	/* character constant => integer constant expression */
+	CEF_SET_CHAR = (CEF_CHAR | CEF_SET_ICE),
+
+	/*
+	 * Remove any "Constant" [6.4.4] flag, but retain the "constant
+	 * expression" [6.6] flags.
+	 */
+	CEF_CONST_MASK = (CEF_INT | CEF_FLOAT | CEF_CHAR),
+
+	/*
+	 * not an integer constant expression => neither of integer,
+	 * enumeration and character constant
+	 */
+	CEF_CLR_ICE = (CEF_ICE | CEF_INT | CEF_ENUM | CEF_CHAR),
+};
+
+enum {
+	Handled = 1 << 0,
+	Fake	= 1 << 1,
+}; /* for expr->flags */
+
+enum {
+	Taint_comma = 1,
+}; /* for expr->taint */
+
+struct expression {
+	enum expression_type type:8;
+	unsigned flags:8;
+	unsigned smatch_flags:16;
+	int op;
+	struct position pos;
+	struct symbol *ctype;
+	unsigned long parent;
+	union {
+		// EXPR_VALUE
+		struct {
+			unsigned long long value;
+			unsigned taint;
+		};
+
+		// EXPR_FVALUE
+		long double fvalue;
+
+		// EXPR_STRING
+		struct {
+			int wide;
+			struct string *string;
+		};
+
+		// EXPR_UNOP, EXPR_PREOP and EXPR_POSTOP
+		struct /* unop */ {
+			struct expression *unop;
+			unsigned long op_value;
+		};
+
+		// EXPR_SYMBOL, EXPR_TYPE
+		struct /* symbol_arg */ {
+			struct symbol *symbol;
+			struct ident *symbol_name;
+		};
+
+		// EXPR_STATEMENT
+		struct statement *statement;
+
+		// EXPR_BINOP, EXPR_COMMA, EXPR_COMPARE, EXPR_LOGICAL and EXPR_ASSIGNMENT
+		struct /* binop_arg */ {
+			struct expression *left, *right;
+		};
+		// EXPR_DEREF
+		struct /* deref_arg */ {
+			struct expression *deref;
+			struct ident *member;
+			int member_offset;
+		};
+		// EXPR_SLICE
+		struct /* slice */ {
+			struct expression *base;
+			unsigned r_bitpos, r_nrbits;
+		};
+		// EXPR_CAST and EXPR_SIZEOF
+		struct /* cast_arg */ {
+			struct symbol *cast_type;
+			struct expression *cast_expression;
+		};
+		// EXPR_CONDITIONAL
+		// EXPR_SELECT
+		struct /* conditional_expr */ {
+			struct expression *conditional, *cond_true, *cond_false;
+		};
+		// EXPR_CALL
+		struct /* call_expr */ {
+			struct expression *fn;
+			struct expression_list *args;
+		};
+		// EXPR_LABEL
+		struct /* label_expr */ {
+			struct symbol *label_symbol;
+		};
+		// EXPR_INITIALIZER
+		struct expression_list *expr_list;
+		// EXPR_IDENTIFIER
+		struct /* ident_expr */ {
+			int offset;
+			struct ident *expr_ident;
+			struct symbol *field;
+			struct expression *ident_expression;
+		};
+		// EXPR_INDEX
+		struct /* index_expr */ {
+			unsigned int idx_from, idx_to;
+			struct expression *idx_expression;
+		};
+		// EXPR_POS
+		struct /* initpos_expr */ {
+			unsigned int init_offset, init_nr;
+			struct expression *init_expr;
+		};
+		// EXPR_OFFSETOF
+		struct {
+			struct symbol *in;
+			struct expression *down;
+			union {
+				struct ident *ident;
+				struct expression *index;
+			};
+		};
+	};
+};
+
+/* Constant expression values */
+int is_zero_constant(struct expression *);
+int expr_truth_value(struct expression *expr);
+long long get_expression_value(struct expression *);
+long long const_expression_value(struct expression *);
+long long get_expression_value_silent(struct expression *expr);
+
+/* Expression parsing */
+struct token *parse_expression(struct token *token, struct expression **tree);
+struct token *conditional_expression(struct token *token, struct expression **tree);
+struct token *primary_expression(struct token *token, struct expression **tree);
+struct token *parens_expression(struct token *token, struct expression **expr, const char *where);
+struct token *assignment_expression(struct token *token, struct expression **tree);
+
+extern void evaluate_symbol_list(struct symbol_list *list);
+extern struct symbol *evaluate_statement(struct statement *stmt);
+extern struct symbol *evaluate_expression(struct expression *);
+
+extern int expand_symbol(struct symbol *);
+
+static inline struct expression *alloc_expression(struct position pos, int type)
+{
+	struct expression *expr = __alloc_expression(0);
+	expr->type = type;
+	expr->pos = pos;
+	expr->flags = CEF_NONE;
+	return expr;
+}
+
+static inline struct expression *alloc_const_expression(struct position pos, int value)
+{
+	struct expression *expr = __alloc_expression(0);
+	expr->type = EXPR_VALUE;
+	expr->pos = pos;
+	expr->value = value;
+	expr->ctype = &int_ctype;
+	expr->flags = CEF_SET_INT;
+	return expr;
+}
+
+/* Type name parsing */
+struct token *typename(struct token *, struct symbol **, int *);
+
+static inline int lookup_type(struct token *token)
+{
+	if (token->pos.type == TOKEN_IDENT) {
+		struct symbol *sym = lookup_symbol(token->ident, NS_SYMBOL | NS_TYPEDEF);
+		return sym && (sym->namespace & NS_TYPEDEF);
+	}
+	return 0;
+}
+
+/* Statement parsing */
+struct statement *alloc_statement(struct position pos, int type);
+struct token *initializer(struct expression **tree, struct token *token);
+struct token *compound_statement(struct token *, struct statement *);
+
+/* The preprocessor calls this 'constant_expression()' */
+#define constant_expression(token,tree) conditional_expression(token, tree)
+
+/* Cast folding of constant values.. */
+void cast_value(struct expression *expr, struct symbol *newtype,
+	struct expression *old, struct symbol *oldtype);
+
+#endif
--- /dev/null	Fri Dec 21 15:00:12 2018
+++ new/usr/src/tools/smatch/src/flow.c	Fri Dec 21 15:00:12 2018
@@ -0,0 +1,1030 @@
+/*
+ * Flow - walk the linearized flowgraph, simplifying it as we
+ * go along.
+ *
+ * Copyright (C) 2004 Linus Torvalds
+ */
+
+#include <string.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <stddef.h>
+#include <assert.h>
+
+#include "parse.h"
+#include "expression.h"
+#include "linearize.h"
+#include "flow.h"
+#include "target.h"
+
+unsigned long bb_generation;
+
+/*
+ * Dammit, if we have a phi-node followed by a conditional
+ * branch on that phi-node, we should damn well be able to
+ * do something about the source. Maybe.
+ */
+static int rewrite_branch(struct basic_block *bb,
+	struct basic_block **ptr,
+	struct basic_block *old,
+	struct basic_block *new)
+{
+	if (*ptr != old || new == old || !bb->ep)
+		return 0;
+
+	/* We might find new if-conversions or non-dominating CSEs */
+	/* we may also create new dead cycles */
+	repeat_phase |= REPEAT_CSE | REPEAT_CFG_CLEANUP;
+	*ptr = new;
+	replace_bb_in_list(&bb->children, old, new, 1);
+	remove_bb_from_list(&old->parents, bb, 1);
+	add_bb(&new->parents, bb);
+	return 1;
+}
+
+/*
+ * Return the known truth value of a pseudo, or -1 if
+ * it's not known.
+ */
+static int pseudo_truth_value(pseudo_t pseudo)
+{
+	switch (pseudo->type) {
+	case PSEUDO_VAL:
+		return !!pseudo->value;
+
+	case PSEUDO_REG: {
+		struct instruction *insn = pseudo->def;
+
+		/* A symbol address is always considered true.. */
+		if (insn->opcode == OP_SYMADDR && insn->target == pseudo)
+			return 1;
+	}
+		/* Fall through */
+	default:
+		return -1;
+	}
+}
+
+/*
+ * Does a basic block depend on the pseudos that "src" defines?
+ */
+static int bb_depends_on(struct basic_block *target, struct basic_block *src)
+{
+	pseudo_t pseudo;
+
+	FOR_EACH_PTR(src->defines, pseudo) {
+		if (pseudo_in_list(target->needs, pseudo))
+			return 1;
+	} END_FOR_EACH_PTR(pseudo);
+	return 0;
+}
+
+/*
+ * This really should be handled by bb_depends_on()
+ * which efficiently check the dependence using the
+ * defines - needs liveness info. Problem is that
+ * there is no liveness done on OP_PHI & OP_PHISRC.
+ *
+ * This function add the missing dependency checks.
+ */
+static int bb_depends_on_phi(struct basic_block *target, struct basic_block *src)
+{
+	struct instruction *insn;
+	FOR_EACH_PTR(src->insns, insn) {
+		if (!insn->bb)
+			continue;
+		if (insn->opcode != OP_PHI)
+			continue;
+		if (pseudo_in_list(target->needs, insn->target))
+			return 1;
+	} END_FOR_EACH_PTR(insn);
+	return 0;
+}
+
+/*
+ * When we reach here, we have:
+ *  - a basic block that ends in a conditional branch and
+ *    that has no side effects apart from the pseudos it
+ *    may change.
+ *  - the phi-node that the conditional branch depends on
+ *  - full pseudo liveness information
+ *
+ * We need to check if any of the _sources_ of the phi-node
+ * may be constant, and not actually need this block at all.
+ */
+static int try_to_simplify_bb(struct basic_block *bb, struct instruction *first, struct instruction *second)
+{
+	int changed = 0;
+	pseudo_t phi;
+	int bogus;
+
+	/*
+	 * This a due to improper dominance tracking during
+	 * simplify_symbol_usage()/conversion to SSA form.
+	 * No sane simplification can be done when we have this.
+	 */
+	bogus = bb_list_size(bb->parents) != pseudo_list_size(first->phi_list);
+
+	FOR_EACH_PTR(first->phi_list, phi) {
+		struct instruction *def = phi->def;
+		struct basic_block *source, *target;
+		pseudo_t pseudo;
+		struct instruction *br;
+		int true;
+
+		if (!def)
+			continue;
+		source = def->bb;
+		pseudo = def->src1;
+		if (!pseudo || !source)
+			continue;
+		br = last_instruction(source->insns);
+		if (!br)
+			continue;
+		if (br->opcode != OP_CBR && br->opcode != OP_BR)
+			continue;
+		true = pseudo_truth_value(pseudo);
+		if (true < 0)
+			continue;
+		target = true ? second->bb_true : second->bb_false;
+		if (bb_depends_on(target, bb))
+			continue;
+		if (bb_depends_on_phi(target, bb))
+			continue;
+		changed |= rewrite_branch(source, &br->bb_true, bb, target);
+		changed |= rewrite_branch(source, &br->bb_false, bb, target);
+		if (changed && !bogus)
+			kill_use(THIS_ADDRESS(phi));
+	} END_FOR_EACH_PTR(phi);
+	return changed;
+}
+
+static int bb_has_side_effects(struct basic_block *bb)
+{
+	struct instruction *insn;
+	FOR_EACH_PTR(bb->insns, insn) {
+		switch (insn->opcode) {
+		case OP_CALL:
+			/* FIXME! This should take "const" etc into account */
+			return 1;
+
+		case OP_STORE:
+		case OP_CONTEXT:
+			return 1;
+
+		case OP_ASM:
+			/* FIXME! This should take "volatile" etc into account */
+			return 1;
+
+		default:
+			continue;
+		}
+	} END_FOR_EACH_PTR(insn);
+	return 0;
+}
+
+static int simplify_phi_branch(struct basic_block *bb, struct instruction *br)
+{
+	pseudo_t cond = br->cond;
+	struct instruction *def;
+
+	if (cond->type != PSEUDO_REG)
+		return 0;
+	def = cond->def;
+	if (def->bb != bb || def->opcode != OP_PHI)
+		return 0;
+	if (bb_has_side_effects(bb))
+		return 0;
+	return try_to_simplify_bb(bb, def, br);
+}
+
+static int simplify_branch_branch(struct basic_block *bb, struct instruction *br,
+	struct basic_block **target_p, int true)
+{
+	struct basic_block *target = *target_p, *final;
+	struct instruction *insn;
+	int retval;
+
+	if (target == bb)
+		return 0;
+	insn = last_instruction(target->insns);
+	if (!insn || insn->opcode != OP_CBR || insn->cond != br->cond)
+		return 0;
+	/*
+	 * Ahhah! We've found a branch to a branch on the same conditional!
+	 * Now we just need to see if we can rewrite the branch..
+	 */
+	retval = 0;
+	final = true ? insn->bb_true : insn->bb_false;
+	if (bb_has_side_effects(target))
+		goto try_to_rewrite_target;
+	if (bb_depends_on(final, target))
+		goto try_to_rewrite_target;
+	if (bb_depends_on_phi(final, target))
+		return 0;
+	return rewrite_branch(bb, target_p, target, final);
+
+try_to_rewrite_target:
+	/*
+	 * If we're the only parent, at least we can rewrite the
+	 * now-known second branch.
+	 */
+	if (bb_list_size(target->parents) != 1)
+		return retval;
+	insert_branch(target, insn, final);
+	return 1;
+}
+
+static int simplify_one_branch(struct basic_block *bb, struct instruction *br)
+{
+	if (simplify_phi_branch(bb, br))
+		return 1;
+	return simplify_branch_branch(bb, br, &br->bb_true, 1) |
+	       simplify_branch_branch(bb, br, &br->bb_false, 0);
+}
+
+static int simplify_branch_nodes(struct entrypoint *ep)
+{
+	int changed = 0;
+	struct basic_block *bb;
+
+	FOR_EACH_PTR(ep->bbs, bb) {
+		struct instruction *br = last_instruction(bb->insns);
+
+		if (!br || br->opcode != OP_CBR)
+			continue;
+		changed |= simplify_one_branch(bb, br);
+	} END_FOR_EACH_PTR(bb);
+	return changed;
+}
+
+/*
+ * This is called late - when we have intra-bb liveness information..
+ */
+int simplify_flow(struct entrypoint *ep)
+{
+	return simplify_branch_nodes(ep);
+}
+
+static inline void concat_user_list(struct pseudo_user_list *src, struct pseudo_user_list **dst)
+{
+	concat_ptr_list((struct ptr_list *)src, (struct ptr_list **)dst);
+}
+
+void convert_instruction_target(struct instruction *insn, pseudo_t src)
+{
+	pseudo_t target;
+	struct pseudo_user *pu;
+	/*
+	 * Go through the "insn->users" list and replace them all..
+	 */
+	target = insn->target;
+	if (target == src)
+		return;
+	FOR_EACH_PTR(target->users, pu) {
+		if (*pu->userp != VOID) {
+			assert(*pu->userp == target);
+			*pu->userp = src;
+		}
+	} END_FOR_EACH_PTR(pu);
+	if (has_use_list(src))
+		concat_user_list(target->users, &src->users);
+	target->users = NULL;
+}
+
+void convert_load_instruction(struct instruction *insn, pseudo_t src)
+{
+	convert_instruction_target(insn, src);
+	/* Turn the load into a no-op */
+	insn->opcode = OP_LNOP;
+	insn->bb = NULL;
+}
+
+static int overlapping_memop(struct instruction *a, struct instruction *b)
+{
+	unsigned int a_start = bytes_to_bits(a->offset);
+	unsigned int b_start = bytes_to_bits(b->offset);
+	unsigned int a_size = a->size;
+	unsigned int b_size = b->size;
+
+	if (a_size + a_start <= b_start)
+		return 0;
+	if (b_size + b_start <= a_start)
+		return 0;
+	return 1;
+}
+
+static inline int same_memop(struct instruction *a, struct instruction *b)
+{
+	return	a->offset == b->offset && a->size == b->size;
+}
+
+static inline int distinct_symbols(pseudo_t a, pseudo_t b)
+{
+	if (a->type != PSEUDO_SYM)
+		return 0;
+	if (b->type != PSEUDO_SYM)
+		return 0;
+	return a->sym != b->sym;
+}
+
+/*
+ * Return 1 if "dom" dominates the access to "pseudo"
+ * in "insn".
+ *
+ * Return 0 if it doesn't, and -1 if you don't know.
+ */
+int dominates(pseudo_t pseudo, struct instruction *insn, struct instruction *dom, int local)
+{
+	int opcode = dom->opcode;
+
+	if (opcode == OP_CALL || opcode == OP_ENTRY)
+		return local ? 0 : -1;
+	if (opcode != OP_LOAD && opcode != OP_STORE)
+		return 0;
+	if (dom->src != pseudo) {
+		if (local)
+			return 0;
+		/* We don't think two explicitly different symbols ever alias */
+		if (distinct_symbols(insn->src, dom->src))
+			return 0;
+		/* We could try to do some alias analysis here */
+		return -1;
+	}
+	if (!same_memop(insn, dom)) {
+		if (dom->opcode == OP_LOAD)
+			return 0;
+		if (!overlapping_memop(insn, dom))
+			return 0;
+		return -1;
+	}
+	return 1;
+}
+
+static int phisrc_in_bb(struct pseudo_list *list, struct basic_block *bb)
+{
+	pseudo_t p;
+	FOR_EACH_PTR(list, p) {
+		if (p->def->bb == bb)
+			return 1;
+	} END_FOR_EACH_PTR(p);
+
+	return 0;
+}
+
+static int find_dominating_parents(pseudo_t pseudo, struct instruction *insn,
+	struct basic_block *bb, unsigned long generation, struct pseudo_list **dominators,
+	int local)
+{
+	struct basic_block *parent;
+
+	if (!bb->parents)
+		return !!local;
+
+	FOR_EACH_PTR(bb->parents, parent) {
+		struct instruction *one;
+		struct instruction *br;
+		pseudo_t phi;
+
+		FOR_EACH_PTR_REVERSE(parent->insns, one) {
+			int dominance;
+			if (one == insn)
+				goto no_dominance;
+			dominance = dominates(pseudo, insn, one, local);
+			if (dominance < 0) {
+				if (one->opcode == OP_LOAD)
+					continue;
+				return 0;
+			}
+			if (!dominance)
+				continue;
+			goto found_dominator;
+		} END_FOR_EACH_PTR_REVERSE(one);
+no_dominance:
+		if (parent->generation == generation)
+			continue;
+		parent->generation = generation;
+
+		if (!find_dominating_parents(pseudo, insn, parent, generation, dominators, local))
+			return 0;
+		continue;
+
+found_dominator:
+		if (dominators && phisrc_in_bb(*dominators, parent))
+			continue;
+		br = delete_last_instruction(&parent->insns);
+		phi = alloc_phi(parent, one->target, one->size);
+		phi->ident = phi->ident ? : pseudo->ident;
+		add_instruction(&parent->insns, br);
+		use_pseudo(insn, phi, add_pseudo(dominators, phi));
+	} END_FOR_EACH_PTR(parent);
+	return 1;
+}		
+
+/*
+ * We should probably sort the phi list just to make it easier to compare
+ * later for equality. 
+ */
+void rewrite_load_instruction(struct instruction *insn, struct pseudo_list *dominators)
+{
+	pseudo_t new, phi;
+
+	/*
+	 * Check for somewhat common case of duplicate
+	 * phi nodes.
+	 */
+	new = first_pseudo(dominators)->def->src1;
+	FOR_EACH_PTR(dominators, phi) {
+		if (new != phi->def->src1)
+			goto complex_phi;
+		new->ident = new->ident ? : phi->ident;
+	} END_FOR_EACH_PTR(phi);
+
+	/*
+	 * All the same pseudo - mark the phi-nodes unused
+	 * and convert the load into a LNOP and replace the
+	 * pseudo.
+	 */
+	FOR_EACH_PTR(dominators, phi) {
+		kill_instruction(phi->def);
+	} END_FOR_EACH_PTR(phi);
+	convert_load_instruction(insn, new);
+	return;
+
+complex_phi:
+	/* We leave symbol pseudos with a bogus usage list here */
+	if (insn->src->type != PSEUDO_SYM)
+		kill_use(&insn->src);
+	insn->opcode = OP_PHI;
+	insn->phi_list = dominators;
+}
+
+static int find_dominating_stores(pseudo_t pseudo, struct instruction *insn,
+	unsigned long generation, int local)
+{
+	struct basic_block *bb = insn->bb;
+	struct instruction *one, *dom = NULL;
+	struct pseudo_list *dominators;
+	int partial;
+
+	/* Unreachable load? Undo it */
+	if (!bb) {
+		insn->opcode = OP_LNOP;
+		return 1;
+	}
+
+	partial = 0;
+	FOR_EACH_PTR(bb->insns, one) {
+		int dominance;
+		if (one == insn)
+			goto found;
+		dominance = dominates(pseudo, insn, one, local);
+		if (dominance < 0) {
+			/* Ignore partial load dominators */
+			if (one->opcode == OP_LOAD)
+				continue;
+			dom = NULL;
+			partial = 1;
+			continue;
+		}
+		if (!dominance)
+			continue;
+		dom = one;
+		partial = 0;
+	} END_FOR_EACH_PTR(one);
+	/* Whaa? */
+	warning(pseudo->sym->pos, "unable to find symbol read");
+	return 0;
+found:
+	if (partial)
+		return 0;
+
+	if (dom) {
+		convert_load_instruction(insn, dom->target);
+		return 1;
+	}
+
+	/* OK, go find the parents */
+	bb->generation = generation;
+
+	dominators = NULL;
+	if (!find_dominating_parents(pseudo, insn, bb, generation, &dominators, local))
+		return 0;
+
+	/* This happens with initial assignments to structures etc.. */
+	if (!dominators) {
+		if (!local)
+			return 0;
+		check_access(insn);
+		convert_load_instruction(insn, value_pseudo(insn->type, 0));
+		return 1;
+	}
+
+	/*
+	 * If we find just one dominating instruction, we
+	 * can turn it into a direct thing. Otherwise we'll
+	 * have to turn the load into a phi-node of the
+	 * dominators.
+	 */
+	rewrite_load_instruction(insn, dominators);
+	return 1;
+}
+
+static void kill_store(struct instruction *insn)
+{
+	if (insn) {
+		insn->bb = NULL;
+		insn->opcode = OP_SNOP;
+		kill_use(&insn->target);
+	}
+}
+
+/* Kill a pseudo that is dead on exit from the bb */
+static void kill_dead_stores(pseudo_t pseudo, unsigned long generation, struct basic_block *bb, int local)
+{
+	struct instruction *insn;
+	struct basic_block *parent;
+
+	if (bb->generation == generation)
+		return;
+	bb->generation = generation;
+	FOR_EACH_PTR_REVERSE(bb->insns, insn) {
+		int opcode = insn->opcode;
+
+		if (opcode != OP_LOAD && opcode != OP_STORE) {
+			if (local)
+				continue;
+			if (opcode == OP_CALL)
+				return;
+			continue;
+		}
+		if (insn->src == pseudo) {
+			if (opcode == OP_LOAD)
+				return;
+			kill_store(insn);
+			continue;
+		}
+		if (local)
+			continue;
+		if (insn->src->type != PSEUDO_SYM)
+			return;
+	} END_FOR_EACH_PTR_REVERSE(insn);
+
+	FOR_EACH_PTR(bb->parents, parent) {
+		struct basic_block *child;
+		FOR_EACH_PTR(parent->children, child) {
+			if (child && child != bb)
+				return;
+		} END_FOR_EACH_PTR(child);
+		kill_dead_stores(pseudo, generation, parent, local);
+	} END_FOR_EACH_PTR(parent);
+}
+
+/*
+ * This should see if the "insn" trivially dominates some previous store, and kill the
+ * store if unnecessary.
+ */
+static void kill_dominated_stores(pseudo_t pseudo, struct instruction *insn, 
+	unsigned long generation, struct basic_block *bb, int local, int found)
+{
+	struct instruction *one;
+	struct basic_block *parent;
+
+	/* Unreachable store? Undo it */
+	if (!bb) {
+		kill_store(insn);
+		return;
+	}
+	if (bb->generation == generation)
+		return;
+	bb->generation = generation;
+	FOR_EACH_PTR_REVERSE(bb->insns, one) {
+		int dominance;
+		if (!found) {
+			if (one != insn)
+				continue;
+			found = 1;
+			continue;
+		}
+		dominance = dominates(pseudo, insn, one, local);
+		if (!dominance)
+			continue;
+		if (dominance < 0)
+			return;
+		if (one->opcode == OP_LOAD)
+			return;
+		kill_store(one);
+	} END_FOR_EACH_PTR_REVERSE(one);
+
+	if (!found) {
+		warning(bb->pos, "Unable to find instruction");
+		return;
+	}
+
+	FOR_EACH_PTR(bb->parents, parent) {
+		struct basic_block *child;
+		FOR_EACH_PTR(parent->children, child) {
+			if (child && child != bb)
+				return;
+		} END_FOR_EACH_PTR(child);
+		kill_dominated_stores(pseudo, insn, generation, parent, local, found);
+	} END_FOR_EACH_PTR(parent);
+}
+
+void check_access(struct instruction *insn)
+{
+	pseudo_t pseudo = insn->src;
+
+	if (insn->bb && pseudo->type == PSEUDO_SYM) {
+		int offset = insn->offset, bit = bytes_to_bits(offset) + insn->size;
+		struct symbol *sym = pseudo->sym;
+
+		if (sym->bit_size > 0 && (offset < 0 || bit > sym->bit_size))
+			warning(insn->pos, "invalid access %s '%s' (%d %d)",
+				offset < 0 ? "below" : "past the end of",
+				show_ident(sym->ident), offset,
+				bits_to_bytes(sym->bit_size));
+	}
+}
+
+static void simplify_one_symbol(struct entrypoint *ep, struct symbol *sym)
+{
+	pseudo_t pseudo;
+	struct pseudo_user *pu;
+	unsigned long mod;
+	int all;
+
+	/* Never used as a symbol? */
+	pseudo = sym->pseudo;
+	if (!pseudo)
+		return;
+
+	/* We don't do coverage analysis of volatiles.. */
+	if (sym->ctype.modifiers & MOD_VOLATILE)
+		return;
+
+	/* ..and symbols with external visibility need more care */
+	mod = sym->ctype.modifiers & (MOD_NONLOCAL | MOD_STATIC | MOD_ADDRESSABLE);
+	if (mod)
+		goto external_visibility;
+
+	FOR_EACH_PTR(pseudo->users, pu) {
+		/* We know that the symbol-pseudo use is the "src" in the instruction */
+		struct instruction *insn = pu->insn;
+
+		switch (insn->opcode) {
+		case OP_STORE:
+			break;
+		case OP_LOAD:
+			break;
+		case OP_SYMADDR:
+			if (!insn->bb)
+				continue;
+			mod |= MOD_ADDRESSABLE;
+			goto external_visibility;
+		case OP_NOP:
+		case OP_SNOP:
+		case OP_LNOP:
+		case OP_PHI:
+			continue;
+		default:
+			warning(sym->pos, "symbol '%s' pseudo used in unexpected way", show_ident(sym->ident));
+		}
+	} END_FOR_EACH_PTR(pu);
+
+external_visibility:
+	all = 1;
+	FOR_EACH_PTR_REVERSE(pseudo->users, pu) {
+		struct instruction *insn = pu->insn;
+		if (insn->opcode == OP_LOAD)
+			all &= find_dominating_stores(pseudo, insn, ++bb_generation, !mod);
+	} END_FOR_EACH_PTR_REVERSE(pu);
+
+	/* If we converted all the loads, remove the stores. They are dead */
+	if (all && !mod) {
+		FOR_EACH_PTR(pseudo->users, pu) {
+			struct instruction *insn = pu->insn;
+			if (insn->opcode == OP_STORE)
+				kill_store(insn);
+		} END_FOR_EACH_PTR(pu);
+	} else {
+		/*
+		 * If we couldn't take the shortcut, see if we can at least kill some
+		 * of them..
+		 */
+		FOR_EACH_PTR(pseudo->users, pu) {
+			struct instruction *insn = pu->insn;
+			if (insn->opcode == OP_STORE)
+				kill_dominated_stores(pseudo, insn, ++bb_generation, insn->bb, !mod, 0);
+		} END_FOR_EACH_PTR(pu);
+
+		if (!(mod & (MOD_NONLOCAL | MOD_STATIC))) {
+			struct basic_block *bb;
+			FOR_EACH_PTR(ep->bbs, bb) {
+				if (!bb->children)
+					kill_dead_stores(pseudo, ++bb_generation, bb, !mod);
+			} END_FOR_EACH_PTR(bb);
+		}
+	}
+			
+	return;
+}
+
+void simplify_symbol_usage(struct entrypoint *ep)
+{
+	pseudo_t pseudo;
+
+	FOR_EACH_PTR(ep->accesses, pseudo) {
+		simplify_one_symbol(ep, pseudo->sym);
+	} END_FOR_EACH_PTR(pseudo);
+}
+
+static void mark_bb_reachable(struct basic_block *bb, unsigned long generation)
+{
+	struct basic_block *child;
+
+	if (bb->generation == generation)
+		return;
+	bb->generation = generation;
+	FOR_EACH_PTR(bb->children, child) {
+		mark_bb_reachable(child, generation);
+	} END_FOR_EACH_PTR(child);
+}
+
+static void kill_defs(struct instruction *insn)
+{
+	pseudo_t target = insn->target;
+
+	if (!has_use_list(target))
+		return;
+	if (target->def != insn)
+		return;
+
+	convert_instruction_target(insn, VOID);
+}
+
+void kill_bb(struct basic_block *bb)
+{
+	struct instruction *insn;
+	struct basic_block *child, *parent;
+
+	FOR_EACH_PTR(bb->insns, insn) {
+		kill_instruction_force(insn);
+		kill_defs(insn);
+		/*
+		 * We kill unreachable instructions even if they
+		 * otherwise aren't "killable" (e.g. volatile loads)
+		 */
+	} END_FOR_EACH_PTR(insn);
+	bb->insns = NULL;
+
+	FOR_EACH_PTR(bb->children, child) {
+		remove_bb_from_list(&child->parents, bb, 0);
+	} END_FOR_EACH_PTR(child);
+	bb->children = NULL;
+
+	FOR_EACH_PTR(bb->parents, parent) {
+		remove_bb_from_list(&parent->children, bb, 0);
+	} END_FOR_EACH_PTR(parent);
+	bb->parents = NULL;
+}
+
+void kill_unreachable_bbs(struct entrypoint *ep)
+{
+	struct basic_block *bb;
+	unsigned long generation = ++bb_generation;
+
+	mark_bb_reachable(ep->entry->bb, generation);
+	FOR_EACH_PTR(ep->bbs, bb) {
+		if (bb->generation == generation)
+			continue;
+		/* Mark it as being dead */
+		kill_bb(bb);
+		bb->ep = NULL;
+		DELETE_CURRENT_PTR(bb);
+	} END_FOR_EACH_PTR(bb);
+	PACK_PTR_LIST(&ep->bbs);
+}
+
+static int rewrite_parent_branch(struct basic_block *bb, struct basic_block *old, struct basic_block *new)
+{
+	int changed = 0;
+	struct instruction *insn = last_instruction(bb->insns);
+
+	if (!insn)
+		return 0;
+
+	/* Infinite loops: let's not "optimize" them.. */
+	if (old == new)
+		return 0;
+
+	switch (insn->opcode) {
+	case OP_CBR:
+		changed |= rewrite_branch(bb, &insn->bb_false, old, new);
+		/* fall through */
+	case OP_BR:
+		changed |= rewrite_branch(bb, &insn->bb_true, old, new);
+		assert(changed);
+		return changed;
+	case OP_SWITCH: {
+		struct multijmp *jmp;
+		FOR_EACH_PTR(insn->multijmp_list, jmp) {
+			changed |= rewrite_branch(bb, &jmp->target, old, new);
+		} END_FOR_EACH_PTR(jmp);
+		assert(changed);
+		return changed;
+	}
+	default:
+		return 0;
+	}
+}
+
+static struct basic_block * rewrite_branch_bb(struct basic_block *bb, struct instruction *br)
+{
+	struct basic_block *parent;
+	struct basic_block *target = br->bb_true;
+	struct basic_block *false = br->bb_false;
+
+	if (br->opcode == OP_CBR) {
+		pseudo_t cond = br->cond;
+		if (cond->type != PSEUDO_VAL)
+			return NULL;
+		target = cond->value ? target : false;
+	}
+
+	/*
+	 * We can't do FOR_EACH_PTR() here, because the parent list
+	 * may change when we rewrite the parent.
+	 */
+	while ((parent = first_basic_block(bb->parents)) != NULL) {
+		if (!rewrite_parent_branch(parent, bb, target))
+			return NULL;
+	}
+	return target;
+}
+
+static void vrfy_bb_in_list(struct basic_block *bb, struct basic_block_list *list)
+{
+	if (bb) {
+		struct basic_block *tmp;
+		int no_bb_in_list = 0;
+
+		FOR_EACH_PTR(list, tmp) {
+			if (bb == tmp)
+				return;
+		} END_FOR_EACH_PTR(tmp);
+		assert(no_bb_in_list);
+	}
+}
+
+static void vrfy_parents(struct basic_block *bb)
+{
+	struct basic_block *tmp;
+	FOR_EACH_PTR(bb->parents, tmp) {
+		vrfy_bb_in_list(bb, tmp->children);
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void vrfy_children(struct basic_block *bb)
+{
+	struct basic_block *tmp;
+	struct instruction *br = last_instruction(bb->insns);
+
+	if (!br) {
+		assert(!bb->children);
+		return;
+	}
+	switch (br->opcode) {
+		struct multijmp *jmp;
+	case OP_CBR:
+		vrfy_bb_in_list(br->bb_false, bb->children);
+		/* fall through */
+	case OP_BR:
+		vrfy_bb_in_list(br->bb_true, bb->children);
+		break;
+	case OP_SWITCH:
+	case OP_COMPUTEDGOTO:
+		FOR_EACH_PTR(br->multijmp_list, jmp) {
+			vrfy_bb_in_list(jmp->target, bb->children);
+		} END_FOR_EACH_PTR(jmp);
+		break;
+	default:
+		break;
+	}
+		
+	FOR_EACH_PTR(bb->children, tmp) {
+		vrfy_bb_in_list(bb, tmp->parents);
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void vrfy_bb_flow(struct basic_block *bb)
+{
+	vrfy_children(bb);
+	vrfy_parents(bb);
+}
+
+void vrfy_flow(struct entrypoint *ep)
+{
+	struct basic_block *bb;
+	struct basic_block *entry = ep->entry->bb;
+
+	FOR_EACH_PTR(ep->bbs, bb) {
+		if (bb == entry)
+			entry = NULL;
+		vrfy_bb_flow(bb);
+	} END_FOR_EACH_PTR(bb);
+	assert(!entry);
+}
+
+void pack_basic_blocks(struct entrypoint *ep)
+{
+	struct basic_block *bb;
+
+	/* See if we can merge a bb into another one.. */
+	FOR_EACH_PTR(ep->bbs, bb) {
+		struct instruction *first, *insn;
+		struct basic_block *parent, *child, *last;
+
+		if (!bb_reachable(bb))
+			continue;
+
+		/*
+		 * Just a branch?
+		 */
+		FOR_EACH_PTR(bb->insns, first) {
+			if (!first->bb)
+				continue;
+			switch (first->opcode) {
+			case OP_NOP: case OP_LNOP: case OP_SNOP:
+				continue;
+			case OP_CBR:
+			case OP_BR: {
+				struct basic_block *replace;
+				replace = rewrite_branch_bb(bb, first);
+				if (replace) {
+					kill_bb(bb);
+					goto no_merge;
+				}
+			}
+			/* fallthrough */
+			default:
+				goto out;
+			}
+		} END_FOR_EACH_PTR(first);
+
+out:
+		/*
+		 * See if we only have one parent..
+		 */
+		last = NULL;
+		FOR_EACH_PTR(bb->parents, parent) {
+			if (last) {
+				if (last != parent)
+					goto no_merge;
+				continue;
+			}
+			last = parent;
+		} END_FOR_EACH_PTR(parent);
+
+		parent = last;
+		if (!parent || parent == bb)
+			continue;
+
+		/*
+		 * Goodie. See if the parent can merge..
+		 */
+		FOR_EACH_PTR(parent->children, child) {
+			if (child != bb)
+				goto no_merge;
+		} END_FOR_EACH_PTR(child);
+
+		/*
+		 * Merge the two.
+		 */
+		repeat_phase |= REPEAT_CSE;
+
+		parent->children = bb->children;
+		bb->children = NULL;
+		bb->parents = NULL;
+
+		FOR_EACH_PTR(parent->children, child) {
+			replace_bb_in_list(&child->parents, bb, parent, 0);
+		} END_FOR_EACH_PTR(child);
+
+		kill_instruction(delete_last_instruction(&parent->insns));
+		FOR_EACH_PTR(bb->insns, insn) {
+			if (insn->bb) {
+				assert(insn->bb == bb);
+				insn->bb = parent;
+			}
+			add_instruction(&parent->insns, insn);
+		} END_FOR_EACH_PTR(insn);
+		bb->insns = NULL;
+
+	no_merge:
+		/* nothing to do */;
+	} END_FOR_EACH_PTR(bb);
+}
+
+
--- /dev/null	Fri Dec 21 15:00:12 2018
+++ new/usr/src/tools/smatch/src/flow.h	Fri Dec 21 15:00:12 2018
@@ -0,0 +1,52 @@
+#ifndef FLOW_H
+#define FLOW_H
+
+#include "lib.h"
+
+extern unsigned long bb_generation;
+
+#define REPEAT_CSE		1
+#define REPEAT_SYMBOL_CLEANUP	2
+#define REPEAT_CFG_CLEANUP	3
+
+struct entrypoint;
+struct instruction;
+
+extern int simplify_flow(struct entrypoint *ep);
+
+extern void simplify_symbol_usage(struct entrypoint *ep);
+extern void simplify_memops(struct entrypoint *ep);
+extern void pack_basic_blocks(struct entrypoint *ep);
+
+extern void convert_instruction_target(struct instruction *insn, pseudo_t src);
+extern void cleanup_and_cse(struct entrypoint *ep);
+extern int simplify_instruction(struct instruction *);
+
+extern void kill_bb(struct basic_block *);
+extern void kill_use(pseudo_t *);
+extern void kill_unreachable_bbs(struct entrypoint *ep);
+
+extern void kill_insn(struct instruction *, int force);
+static inline void kill_instruction(struct instruction *insn)
+{
+	kill_insn(insn, 0);
+}
+static inline void kill_instruction_force(struct instruction *insn)
+{
+	kill_insn(insn, 1);
+}
+
+void check_access(struct instruction *insn);
+void convert_load_instruction(struct instruction *, pseudo_t);
+void rewrite_load_instruction(struct instruction *, struct pseudo_list *);
+int dominates(pseudo_t pseudo, struct instruction *insn, struct instruction *dom, int local);
+
+extern void clear_liveness(struct entrypoint *ep);
+extern void track_pseudo_liveness(struct entrypoint *ep);
+extern void track_pseudo_death(struct entrypoint *ep);
+extern void track_phi_uses(struct instruction *insn);
+
+extern void vrfy_flow(struct entrypoint *ep);
+extern int pseudo_in_list(struct pseudo_list *list, pseudo_t pseudo);
+
+#endif
--- /dev/null	Fri Dec 21 15:00:13 2018
+++ new/usr/src/tools/smatch/src/gcc-attr-list.h	Fri Dec 21 15:00:13 2018
@@ -0,0 +1,221 @@
+GCC_ATTR(BELOW100)
+GCC_ATTR(OS_Task)
+GCC_ATTR(OS_main)
+GCC_ATTR(OS_task)
+GCC_ATTR(abi_tag)
+GCC_ATTR(absdata)
+GCC_ATTR(address)
+GCC_ATTR(alias)
+GCC_ATTR(aligned)
+GCC_ATTR(alloc_align)
+GCC_ATTR(alloc_size)
+GCC_ATTR(altivec)
+GCC_ATTR(always_inline)
+GCC_ATTR(artificial)
+GCC_ATTR(assume_aligned)
+GCC_ATTR(aux)
+GCC_ATTR(bank_switch)
+GCC_ATTR(based)
+GCC_ATTR(below100)
+GCC_ATTR(bnd_instrument)
+GCC_ATTR(bnd_legacy)
+GCC_ATTR(bnd_variable_size)
+GCC_ATTR(break_handler)
+GCC_ATTR(brk_interrupt)
+GCC_ATTR(callee_pop_aggregate_return)
+GCC_ATTR(cb)
+GCC_ATTR(cdecl)
+GCC_ATTR(cleanup)
+GCC_ATTR(cmse_nonsecure_call)
+GCC_ATTR(cmse_nonsecure_entry)
+GCC_ATTR(cold)
+GCC_ATTR(common)
+GCC_ATTR(common_object)
+GCC_ATTR(const)
+GCC_ATTR(constructor)
+GCC_ATTR(critical)
+GCC_ATTR(default)
+GCC_ATTR(deprecated)
+GCC_ATTR(designated_init)
+GCC_ATTR(destructor)
+GCC_ATTR(disinterrupt)
+GCC_ATTR(dllexport)
+GCC_ATTR(dllimport)
+GCC_ATTR(eightbit_data)
+GCC_ATTR(either)
+GCC_ATTR(error)
+GCC_ATTR(exception)
+GCC_ATTR(exception_handler)
+GCC_ATTR(externally_visible)
+GCC_ATTR(fallthrough)
+GCC_ATTR(far)
+GCC_ATTR(fast_interrupt)
+GCC_ATTR(fastcall)
+GCC_ATTR(flatten)
+GCC_ATTR(force_align_arg_pointer)
+GCC_ATTR(format)
+GCC_ATTR(format_arg)
+GCC_ATTR(forwarder_section)
+GCC_ATTR(function_return)
+GCC_ATTR(function_return_mem)
+GCC_ATTR(function_return_reg)
+GCC_ATTR(function_vector)
+GCC_ATTR(gcc_struct)
+GCC_ATTR(gnu_inline)
+GCC_ATTR(hidden)
+GCC_ATTR(hot)
+GCC_ATTR(hotpatch)
+GCC_ATTR(ifunc)
+GCC_ATTR(indirect_branch)
+GCC_ATTR(indirect_branch_call)
+GCC_ATTR(indirect_branch_jump)
+GCC_ATTR(init_priority)
+GCC_ATTR(interfacearm)
+GCC_ATTR(internal)
+GCC_ATTR(interrupt)
+GCC_ATTR(interrupt_handler)
+GCC_ATTR(interrupt_thread)
+GCC_ATTR(io)
+GCC_ATTR(io_low)
+GCC_ATTR(isr)
+GCC_ATTR(jli_always)
+GCC_ATTR(jli_fixed)
+GCC_ATTR(keep_interrupts_masked)
+GCC_ATTR(kernel)
+GCC_ATTR(kspisusp)
+GCC_ATTR(l1_data)
+GCC_ATTR(l1_data_A)
+GCC_ATTR(l1_data_B)
+GCC_ATTR(l1_text)
+GCC_ATTR(l2)
+GCC_ATTR(leaf)
+GCC_ATTR(long_call)
+GCC_ATTR(longcall)
+GCC_ATTR(lower)
+GCC_ATTR(malloc)
+GCC_ATTR(may_alias)
+GCC_ATTR(maybe_unused)
+GCC_ATTR(medium_call)
+GCC_ATTR(micromips)
+GCC_ATTR(mips16)
+GCC_ATTR(mode)
+GCC_ATTR(model)
+GCC_ATTR(monitor)
+GCC_ATTR(ms_abi)
+GCC_ATTR(ms_hook_prologue)
+GCC_ATTR(ms_struct)
+GCC_ATTR(naked)
+GCC_ATTR(near)
+GCC_ATTR(nested)
+GCC_ATTR(nested_ready)
+GCC_ATTR(nesting)
+GCC_ATTR(nmi)
+GCC_ATTR(nmi_handler)
+GCC_ATTR(no_address_safety_analysis)
+GCC_ATTR(no_caller_saved_registers)
+GCC_ATTR(no_gccisr)
+GCC_ATTR(no_icf)
+GCC_ATTR(no_instrument_function)
+GCC_ATTR(no_profile_instrument_function)
+GCC_ATTR(no_reorder)
+GCC_ATTR(no_sanitize)
+GCC_ATTR(no_sanitize_address)
+GCC_ATTR(no_sanitize_thread)
+GCC_ATTR(no_sanitize_undefined)
+GCC_ATTR(no_split_stack)
+GCC_ATTR(no_stack_limit)
+GCC_ATTR(nocf_check)
+GCC_ATTR(noclone)
+GCC_ATTR(nocommon)
+GCC_ATTR(nocompression)
+GCC_ATTR(nodiscard)
+GCC_ATTR(noinit)
+GCC_ATTR(noinline)
+GCC_ATTR(noipa)
+GCC_ATTR(nomicromips)
+GCC_ATTR(nomips16)
+GCC_ATTR(nonnull)
+GCC_ATTR(nonstring)
+GCC_ATTR(noplt)
+GCC_ATTR(noreturn)
+GCC_ATTR(nosave_low_regs)
+GCC_ATTR(not_nested)
+GCC_ATTR(nothrow)
+GCC_ATTR(notshared)
+GCC_ATTR(optimize)
+GCC_ATTR(packed)
+GCC_ATTR(partial_save)
+GCC_ATTR(patchable_function_entry)
+GCC_ATTR(pcs)
+GCC_ATTR(persistent)
+GCC_ATTR(progmem)
+GCC_ATTR(protected)
+GCC_ATTR(pure)
+GCC_ATTR(reentrant)
+GCC_ATTR(regparm)
+GCC_ATTR(renesas)
+GCC_ATTR(resbank)
+GCC_ATTR(reset)
+GCC_ATTR(returns_nonnull)
+GCC_ATTR(returns_twice)
+GCC_ATTR(s390_vector_bool)
+GCC_ATTR(saddr)
+GCC_ATTR(save_all)
+GCC_ATTR(save_volatiles)
+GCC_ATTR(saveall)
+GCC_ATTR(scalar_storage_order)
+GCC_ATTR(sda)
+GCC_ATTR(section)
+GCC_ATTR(secure_call)
+GCC_ATTR(selectany)
+GCC_ATTR(sentinel)
+GCC_ATTR(shared)
+GCC_ATTR(short_call)
+GCC_ATTR(shortcall)
+GCC_ATTR(signal)
+GCC_ATTR(simd)
+GCC_ATTR(sp_switch)
+GCC_ATTR(spu_vector)
+GCC_ATTR(sseregparm)
+GCC_ATTR(stack_protect)
+GCC_ATTR(stdcall)
+GCC_ATTR(syscall_linkage)
+GCC_ATTR(sysv_abi)
+GCC_ATTR(target)
+GCC_ATTR(target_clones)
+GCC_ATTR(tda)
+GCC_ATTR(thiscall)
+GCC_ATTR(tiny)
+GCC_ATTR(tiny_data)
+GCC_ATTR(tls_model)
+GCC_ATTR(transaction_callable)
+GCC_ATTR(transaction_may_cancel_outer)
+GCC_ATTR(transaction_pure)
+GCC_ATTR(transaction_safe)
+GCC_ATTR(transaction_safe_dynamic)
+GCC_ATTR(transaction_unsafe)
+GCC_ATTR(transaction_wrap)
+GCC_ATTR(transparent_union)
+GCC_ATTR(trap_exit)
+GCC_ATTR(trapa_handler)
+GCC_ATTR(uncached)
+GCC_ATTR(unused)
+GCC_ATTR(upper)
+GCC_ATTR(use_debug_exception_return)
+GCC_ATTR(use_shadow_register_set)
+GCC_ATTR(used)
+GCC_ATTR(vector)
+GCC_ATTR(vector_size)
+GCC_ATTR(version_id)
+GCC_ATTR(visibility)
+GCC_ATTR(vliw)
+GCC_ATTR(volatile)
+GCC_ATTR(wakeup)
+GCC_ATTR(warm)
+GCC_ATTR(warn_if_not_aligned)
+GCC_ATTR(warn_unused)
+GCC_ATTR(warn_unused_result)
+GCC_ATTR(warning)
+GCC_ATTR(weak)
+GCC_ATTR(weakref)
+GCC_ATTR(zda)
--- /dev/null	Fri Dec 21 15:00:13 2018
+++ new/usr/src/tools/smatch/src/gdbhelpers	Fri Dec 21 15:00:13 2018
@@ -0,0 +1,307 @@
+
+# Don't forget to rebuild sparse with uncommented debug options
+# in the Makefile. Also, gcc 3 is known to screw up with the
+# cpp macros in the debugging info.
+
+
+# If a gdb_show_* function is running at a non-zero recursion
+# level, only a short summary is shown, preventing further
+# recursion. Also note that gdb has only one, global, scope
+# for variables, so we need to be careful with recursions.
+
+
+set $showing_token = 0
+set $showing_ident = 0
+set $showing_symbol = 0
+
+set $ntabs = 0
+
+define gdb_tabs
+	set $tmp = $ntabs
+	while ($tmp--)
+		printf "\t"
+	end
+end
+
+
+# Ptr list handling
+define ptr_entry
+	set $ptr = $arg0
+	set $index = $arg1
+	set $entry = &($arg2)
+
+	set *($entry) = (void *) (~3UL & (unsigned long)$ptr->list[$index])
+end
+
+
+# Ptr list looping skeleton
+define gdb_ptr_list_for_each
+
+	set $my_head = (struct ptr_list *) $arg0
+	set $my_list = $my_head
+
+
+	if ($my_head)
+		while (1)
+			set $my_nr = 0
+			while ($my_nr < $my_list->nr)
+
+				# Put your iterator code here
+				set $my_nr++
+			end
+
+			if (($my_list = $my_list->next) == $my_head)
+				loop_break
+			end
+		end
+	end
+end
+
+# Show symbols in a symbol_list. Non-recursive
+define gdb_ptr_list_for_each_show_symbol
+
+	set $my_head = (struct ptr_list *) $arg0
+	set $my_list = $my_head
+
+
+	if ($my_head)
+		while (1)
+			set $my_nr = 0
+			while ($my_nr < ($my_list)->nr)
+				set $my_symbol = (struct symbol *) ((~3UL) & (unsigned long)($my_list)->list[$my_nr])
+				gdb_show_symbol($my_symbol)
+
+				set $my_nr++
+			end
+
+			set $my_list = ($my_list)->next
+			if ($my_list == $my_head)
+				loop_break
+			end
+		end
+	end
+end
+
+
+#define gdb_show_statement
+
+
+# Recursive
+define gdb_show_ctype
+	printf "modifiers: "
+	if ($arg0->modifiers & MOD_AUTO)
+		printf "MOD_AUTO "
+	end
+	if ($arg0->modifiers & MOD_REGISTER)
+		printf "MOD_REGISTER "
+	end
+	if ($arg0->modifiers & MOD_STATIC)
+		printf "MOD_STATIC "
+	end
+	if ($arg0->modifiers & MOD_EXTERN)
+		printf "MOD_EXTERN "
+	end
+	if ($arg0->modifiers & MOD_CONST)
+		printf "MOD_CONST "
+	end
+	if ($arg0->modifiers & MOD_VOLATILE)
+		printf "MOD_VOLATILE "
+	end
+	if ($arg0->modifiers & MOD_SIGNED)
+		printf "MOD_SIGNED "
+	end
+	if ($arg0->modifiers & MOD_UNSIGNED)
+		printf "MOD_UNSIGNED "
+	end
+	if ($arg0->modifiers & MOD_CHAR)
+		printf "MOD_CHAR "
+	end
+	if ($arg0->modifiers & MOD_SHORT)
+		printf "MOD_SHORT "
+	end
+	if ($arg0->modifiers & MOD_LONG)
+		printf "MOD_LONG "
+	end
+	if ($arg0->modifiers & MOD_LONGLONG)
+		printf "MOD_LONGLONG "
+	end
+	if ($arg0->modifiers & MOD_LONGLONGLONG)
+		printf "MOD_LONGLONGLONG "
+	end
+	if ($arg0->modifiers & MOD_TYPEDEF)
+		printf "MOD_TYPEDEF "
+	end
+	if ($arg0->modifiers & MOD_INLINE)
+		printf "MOD_INLINE "
+	end
+	if ($arg0->modifiers & MOD_ADDRESSABLE)
+		printf "MOD_ADDRESSABLE "
+	end
+	if ($arg0->modifiers & MOD_NOCAST)
+		printf "MOD_NOCAST "
+	end
+	if ($arg0->modifiers & MOD_NODEREF)
+		printf "MOD_NODEREF "
+	end
+	if ($arg0->modifiers & MOD_ACCESSED)
+		printf "MOD_ACCESSED "
+	end
+	if ($arg0->modifiers & MOD_TOPLEVEL)
+		printf "MOD_TOPLEVEL "
+	end
+	if ($arg0->modifiers & MOD_ASSIGNED)
+		printf "MOD_ASSIGNED "
+	end
+	if ($arg0->modifiers & MOD_TYPE)
+		printf "MOD_TYPE "
+	end
+	if ($arg0->modifiers & MOD_SAFE)
+		printf "MOD_SAFE "
+	end
+	if ($arg0->modifiers & MOD_USERTYPE)
+		printf "MOD_USERTYPE "
+	end
+	if ($arg0->modifiers & MOD_EXPLICITLY_SIGNED)
+		printf "MOD_EXPLICITLY_SIGNED"
+	end
+	if ($arg0->modifiers & MOD_BITWISE)
+		printf "MOD_BITWISE "
+	end
+	if (!$arg0->modifiers)
+		printf "0"
+	end
+
+	printf ", alignment = %d", $arg0->alignment
+	if ($arg0->as)
+		printf ", address_space = %d", $arg0->as
+	end
+	printf "\n"
+
+
+	set $ntabs++
+	if ($arg0->base_type)
+		gdb_tabs
+		printf "base_type = "
+		gdb_show_symbol($arg0->base_type)
+	end
+
+	set $ntabs--
+
+
+end
+
+define gdb_show_symbol
+	printf "(%x) type = ", $arg0
+	output $arg0->type
+	printf ", namespace = "
+	output $arg0->namespace
+	if ($arg0->ident)
+		printf ", ident = %s\n", show_ident($arg0->ident)
+	else
+		printf ", ident = NULL\n"
+	end
+
+#	print "zz"
+
+	gdb_tabs
+	printf "dump:\n"
+	call show_symbol($arg0)
+
+	set $ntabs++
+	if ($arg0->namespace == NS_SYMBOL)
+		gdb_tabs
+		printf "ctype = "
+		gdb_show_ctype(&($arg0->ctype))
+	end
+	set $ntabs--
+end
+
+
+# non-recursive
+define gdb_show_symbols_next_id
+	set $sym = $arg0
+	printf "{\n"
+	set $ntabs++
+	while ($sym)
+		gdb_tabs
+		printf "symbol = "
+		gdb_show_symbol($sym)
+		set $sym = $sym->next_id
+	end
+	set $ntabs--
+	gdb_tabs
+	printf "}\n"
+end
+
+define gdb_show_ident
+	if ($arg0)
+		printf "(%p) '%s'\n", $arg0, show_ident($arg0)
+	else
+		printf "NULL\n"
+	end
+
+	if (! $showing_ident)
+		set $showing_ident = 1
+		set $ntabs++
+
+		set $ident = $arg0
+
+		if ($ident->symbols)
+			gdb_tabs
+			printf "symbols = "
+			gdb_show_symbols_next_id($ident->symbols)
+		end
+
+		set $ntabs--
+		set $showing_ident = 0
+	end
+end
+
+define gdb_show_token
+	printf "%p: '%s', type = ", $arg0, show_token($arg0)
+	output (enum token_type) ($arg0)->pos.type
+	printf "\n"
+
+	if (! $showing_token)
+		set $showing_token = 1
+		set $ntabs++
+
+		set $token = $arg0
+
+		if ($token->pos.type == TOKEN_IDENT)
+			gdb_tabs
+			printf "ident = "
+			gdb_show_ident $token.ident
+		end
+
+		if ($token->pos.type == TOKEN_MACRO_ARGUMENT)
+			gdb_tabs
+			printf "argnum = %d\n", $token->argnum
+		end
+
+		if ($token->pos.type == TOKEN_SPECIAL)
+			gdb_tabs
+			printf "special = \"%s\"\n", show_special($token.special)
+		end
+
+		set $ntabs--
+		set $showing_token = 0
+	end
+end
+
+# non-recursive
+define gdb_show_tokens
+	set $t = $arg0
+	printf "{\n"
+	set $ntabs++
+	while ($t != &eof_token_entry)
+		gdb_tabs
+		printf "token = "
+		gdb_show_token($t)
+		set $t = ($t)->next
+	end
+	set $ntabs--
+	gdb_tabs
+	printf "}\n"
+end
+
--- /dev/null	Fri Dec 21 15:00:13 2018
+++ new/usr/src/tools/smatch/src/graph.c	Fri Dec 21 15:00:13 2018
@@ -0,0 +1,202 @@
+/* Copyright © International Business Machines Corp., 2006
+ *              Adelard LLP, 2007
+ *
+ * Author: Josh Triplett <josh@freedesktop.org>
+ *         Dan Sheridan <djs@adelard.com>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "token.h"
+#include "parse.h"
+#include "symbol.h"
+#include "expression.h"
+#include "linearize.h"
+
+
+/* Draw the subgraph for a given entrypoint. Includes details of loads
+ * and stores for globals, and marks return bbs */
+static void graph_ep(struct entrypoint *ep)
+{
+	struct basic_block *bb;
+	struct instruction *insn;
+
+	const char *fname, *sname;
+
+	fname = show_ident(ep->name->ident);
+	sname = stream_name(ep->entry->bb->pos.stream);
+
+	printf("subgraph cluster%p {\n"
+	       "    color=blue;\n"
+	       "    label=<<TABLE BORDER=\"0\" CELLBORDER=\"0\">\n"
+	       "             <TR><TD>%s</TD></TR>\n"
+	       "             <TR><TD><FONT POINT-SIZE=\"21\">%s()</FONT></TD></TR>\n"
+	       "           </TABLE>>;\n"
+	       "    file=\"%s\";\n"
+	       "    fun=\"%s\";\n"
+	       "    ep=bb%p;\n",
+	       ep, sname, fname, sname, fname, ep->entry->bb);
+
+	FOR_EACH_PTR(ep->bbs, bb) {
+		struct basic_block *child;
+		int ret = 0;
+		const char * s = ", ls=\"[";
+
+		/* Node for the bb */
+		printf("    bb%p [shape=ellipse,label=%d,line=%d,col=%d",
+		       bb, bb->pos.line, bb->pos.line, bb->pos.pos);
+
+
+		/* List loads and stores */
+		FOR_EACH_PTR(bb->insns, insn) {
+			switch(insn->opcode) {
+			case OP_STORE:
+				if (insn->symbol->type == PSEUDO_SYM) {
+				  printf("%s store(%s)", s, show_ident(insn->symbol->sym->ident));
+				  s = ",";
+				}
+				break;
+
+			case OP_LOAD:
+				if (insn->symbol->type == PSEUDO_SYM) {
+				  printf("%s load(%s)", s, show_ident(insn->symbol->sym->ident));
+				  s = ",";
+				}
+				break;
+
+			case OP_RET:
+				ret = 1;
+				break;
+
+			}
+		} END_FOR_EACH_PTR(insn);
+		if (s[1] == 0)
+			printf("]\"");
+		if (ret)
+			printf(",op=ret");
+		printf("];\n");
+
+		/* Edges between bbs; lower weight for upward edges */
+		FOR_EACH_PTR(bb->children, child) {
+			printf("    bb%p -> bb%p [op=br, %s];\n", bb, child,
+			       (bb->pos.line > child->pos.line) ? "weight=5" : "weight=10");
+		} END_FOR_EACH_PTR(child);
+	} END_FOR_EACH_PTR(bb);
+
+	printf("}\n");
+}
+
+
+/* Insert edges for intra- or inter-file calls, depending on the value
+ * of internal. Bold edges are used for calls with destinations;
+ * dashed for calls to external functions */
+static void graph_calls(struct entrypoint *ep, int internal)
+{
+	struct basic_block *bb;
+	struct instruction *insn;
+
+	show_ident(ep->name->ident);
+	stream_name(ep->entry->bb->pos.stream);
+
+	FOR_EACH_PTR(ep->bbs, bb) {
+		if (!bb)
+			continue;
+		if (!bb->parents && !bb->children && !bb->insns && verbose < 2)
+			continue;
+
+		FOR_EACH_PTR(bb->insns, insn) {
+			if (insn->opcode == OP_CALL &&
+			    internal == !(insn->func->sym->ctype.modifiers & MOD_EXTERN)) {
+
+				/* Find the symbol for the callee's definition */
+				struct symbol * sym;
+				if (insn->func->type == PSEUDO_SYM) {
+					for (sym = insn->func->sym->ident->symbols;
+					     sym; sym = sym->next_id) {
+						if (sym->namespace & NS_SYMBOL && sym->ep)
+							break;
+					}
+
+					if (sym)
+						printf("bb%p -> bb%p"
+						       "[label=%d,line=%d,col=%d,op=call,style=bold,weight=30];\n",
+						       bb, sym->ep->entry->bb,
+						       insn->pos.line, insn->pos.line, insn->pos.pos);
+					else
+						printf("bb%p -> \"%s\" "
+						       "[label=%d,line=%d,col=%d,op=extern,style=dashed];\n",
+						       bb, show_pseudo(insn->func),
+						       insn->pos.line, insn->pos.line, insn->pos.pos);
+				}
+			}
+		} END_FOR_EACH_PTR(insn);
+	} END_FOR_EACH_PTR(bb);
+}
+
+int main(int argc, char **argv)
+{
+	struct string_list *filelist = NULL;
+	char *file;
+	struct symbol *sym;
+
+	struct symbol_list *fsyms, *all_syms=NULL;
+
+	printf("digraph call_graph {\n");
+	fsyms = sparse_initialize(argc, argv, &filelist);
+	concat_symbol_list(fsyms, &all_syms);
+
+	/* Linearize all symbols, graph internal basic block
+	 * structures and intra-file calls */
+	FOR_EACH_PTR_NOTAG(filelist, file) {
+
+		fsyms = sparse(file);
+		concat_symbol_list(fsyms, &all_syms);
+
+		FOR_EACH_PTR(fsyms, sym) {
+			expand_symbol(sym);
+			linearize_symbol(sym);
+		} END_FOR_EACH_PTR(sym);
+
+		FOR_EACH_PTR(fsyms, sym) {
+			if (sym->ep) {
+				graph_ep(sym->ep);
+				graph_calls(sym->ep, 1);
+			}
+		} END_FOR_EACH_PTR_NOTAG(sym);
+
+	} END_FOR_EACH_PTR_NOTAG(file);
+
+	/* Graph inter-file calls */
+	FOR_EACH_PTR(all_syms, sym) {
+		if (sym->ep)
+			graph_calls(sym->ep, 0);
+	} END_FOR_EACH_PTR_NOTAG(sym);
+
+	printf("}\n");
+	return 0;
+}
--- /dev/null	Fri Dec 21 15:00:13 2018
+++ new/usr/src/tools/smatch/src/gvpr/return-paths	Fri Dec 21 15:00:13 2018
@@ -0,0 +1,107 @@
+#!/usr/bin/gvpr -f
+// Split call sites into call site and return site nodes and add
+// return edges
+//
+// Run with graph ... | return-paths
+
+BEGIN {
+	// Find the immediate parent subgraph of this object
+	graph_t find_owner(obj_t o, graph_t g)
+	{
+		graph_t g1;
+		for (g1 = fstsubg(g); g1; g1 = nxtsubg(g1))
+			if(isIn(g1,o)) return g1;
+		return NULL;
+	}
+}
+
+BEG_G {
+	node_t calls[]; // Crude hash table for tracking who calls what
+	graph_t g,g2;
+	edge_t e,e2;
+	string idx;
+	node_t n, n2;
+	int i;
+
+	$tvtype = TV_en;
+}
+
+// Each call edge which hasn't already been seen
+E [op == "call" && tail.split != 1] {
+	int offset=0;
+
+	// Clear the label of this call
+	label = "";
+	g = find_owner(tail, $G);
+
+	// Consider each outgoing call. Split the node accordingly
+	n = tail;
+	for (e = fstout(tail); e; e = nxtout(e)) {
+		if (e.op == "call") {
+
+			// Split node
+			n2 = node(g, sprintf("%s%s%d", tail.name, "x", offset++));
+			copyA(tail, n2);
+			n2.line = e.line;
+			n2.label = e.line;
+			n2.col = e.col;
+			n2.split = 1;
+			n2.op = "target";
+
+			// Record this call
+			g2 = find_owner(e.head, $G);
+			i = 0;
+			while(calls[sprintf("%s%d", g2.name, ++i)]) {
+			}
+			calls[sprintf("%s%d", g2.name, i)] = n2;
+
+			// Connect original to split
+			e2 = edge(n, n2, "call");
+			e2.style = "dotted";
+			e2.weight = 50;
+
+			// Replace this outedge
+			if (n != tail) {
+				e2 = edge(n, e.head, "transformed-call");
+				copyA(e,e2);
+				e2.label = "";
+				delete($G,e);
+			}
+
+			// Record where we were
+			n = n2;
+		}
+	}
+
+	// Consider the outgoing control flow: move down to the bottom of
+	// the call sequence nodes
+	for (e = fstout(tail); e; e = nxtout(e)) {
+		if (e.op == "br") {
+			// Replace this outedge
+			e2 = edge(n,e.head,"transformed");
+			copyA(e,e2);
+			delete($G,e);
+		}
+	}
+}
+
+// Each return node: add edges back to the caller
+N [op == "ret"] {
+	for (g = fstsubg($G); g; g = nxtsubg(g)) {
+		if(isIn(g,$)) {
+			i = 0;
+			while(calls[sprintf("%s%d", g.name, ++i)]) {
+				e = edge($, calls[sprintf("%s%d", g.name, i)], "return");
+				e.style = "dotted";
+				e.op = "ret";
+				e.line = e.tail.line;
+				e.weight = 5;
+			}
+		}
+	}
+}
+
+
+END_G {
+	write($);
+}
--- /dev/null	Fri Dec 21 15:00:13 2018
+++ new/usr/src/tools/smatch/src/gvpr/subg-fwd	Fri Dec 21 15:00:13 2018
@@ -0,0 +1,79 @@
+#!/usr/bin/gvpr -f
+// Compute the forward partition of the chosen function
+//
+// Run with graph ... | return-paths | subg-fwd -a functionname
+//       or graph ... | subg-fwd
+
+
+BEGIN {
+	// Find the immediate parent subgraph of this object
+	graph_t find_owner(obj_t o, graph_t g)
+	{
+		graph_t g1;
+		for (g1 = fstsubg(g); g1; g1 = nxtsubg(g1))
+			if(isIn(g1,o)) return g1;
+		return NULL;
+	}
+}
+
+BEG_G {
+	graph_t sg = subg ($, sprintf("incoming-%s", ARGV[0]));
+	graph_t returns = graph("return-edges", ""); // Temporary graph to hold return edges
+	graph_t target, g, g2;
+	node_t n;
+	edge_t e;
+	int i;
+
+	$tvtype = TV_fwd;
+
+	// find the ep corresponding to ARG[0]
+	for (g = fstsubg($G); g; g = nxtsubg(g)) {
+		if(g.fun == ARGV[0]) {
+			n = node($,g.ep);
+			$tvroot = n;
+			n.style = "filled";
+			target = g;
+			break;
+		}
+	}
+	if(!target) {
+		printf(2, "Function %s not found\n", ARGV[0]);
+		exit(1);
+	}
+}
+
+// Preserve external functions
+E [op == "extern"] {
+	subnode (sg, head);
+}
+
+// Move unused return edges into a separate graph so they don't get followed
+N [op == "ret"] {
+	for (e = fstout($); e; e = nxtout(e))
+		if (e.op == "ret" && !isIn(sg, e.head)) {
+			clone(returns, e);
+			delete($G, e);
+		}
+}
+
+// Recover elided return edge for this target node
+N [op == "target" && indegree == 1] {
+	n = copy(returns, $);
+	e = fstin(n); // each target node can only have one return edge
+	e = edge(copy(sg, e.tail), $, "recovered"); // clone should work here, but doesn't
+	copyA(fstin(n), e);
+}
+
+// Copy relevant nodes
+N {
+	$tvroot = NULL;
+
+	g = find_owner($, $G);
+	if(g && g != sg)
+		subnode (copy(sg, g), $);
+}
+
+END_G {
+	induce(sg);
+	write(sg);
+}
--- /dev/null	Fri Dec 21 15:00:13 2018
+++ new/usr/src/tools/smatch/src/gvpr/subg-rev	Fri Dec 21 15:00:13 2018
@@ -0,0 +1,101 @@
+#!/usr/bin/gvpr -f
+// Compute the reverse partition of the chosen function
+//
+// Run with graph ... | return-paths | subg-rev -a functionname
+
+
+BEGIN {
+	// Find the immediate parent subgraph of this object
+	graph_t find_owner(obj_t o, graph_t g)
+	{
+		graph_t g1;
+		for (g1 = fstsubg(g); g1; g1 = nxtsubg(g1))
+			if(isIn(g1,o)) return g1;
+		return NULL;
+	}
+}
+
+BEG_G {
+	graph_t calls[]; // Crude hash table for tracking who calls what
+	graph_t sg = subg ($, "reachable");
+	graph_t target, g, g2;
+	edge_t e;
+	int i;
+
+	$tvtype = TV_rev;
+
+	// find the ep corresponding to ARG[0]
+	for (g = fstsubg($G); g; g = nxtsubg(g)) {
+		if(g.fun == ARGV[0]) {
+			node_t n;
+			n = node($,g.ep);
+			$tvroot = n;
+			n.style = "filled";
+			target = g;
+			break;
+		}
+	}
+	if(!target) {
+		printf(2, "Function %s not found\n", ARGV[0]);
+		exit(1);
+	}
+
+	// Add the incoming call edges to the allowed call list
+	i = 0;
+	for(e = fstin(n); e; e = nxtin(e)) {
+		if (e.op = "call") {
+			g2 = find_owner(e.tail, $G);
+			calls[sprintf("%s%d", g2.name, ++i)] = g;
+		}
+	}
+}
+
+
+E [op == "ret"] {
+
+	// This is a return edge. Allow the corresponding call
+	g = find_owner(head, $G);
+	i = 0;
+	while(calls[sprintf("%s%d", g.name, ++i)]) {
+	}
+	calls[sprintf("%s%d", g.name, i)] = find_owner(tail, $G);
+	g2 = find_owner(tail, $G);
+}
+
+
+N [split == 1] {
+
+	// Ignore returns back to the target function
+	for (e = fstin($); e; e = nxtin(e))
+		if (e.op == "ret" && isIn(target,e.tail))
+			delete($G,e);
+}
+
+N {
+	$tvroot = NULL;
+
+	for (e = fstin($); e; e = nxtin(e)) {
+		if (e.op == "call") {
+			int found = 0;
+			g = find_owner(e.tail, $G);
+			i = 0;
+			while(calls[sprintf("%s%d", g.name, ++i)]) {
+				if (isIn(calls[sprintf("%s%d", g.name, i)],e.head))
+					found = 1;
+			}
+			g2 = find_owner(e.head, $G);
+			if (!found) delete($G, e);
+		}
+	}
+
+	for (g = fstsubg($G); g; g = nxtsubg(g)) {
+		if(isIn(g,$) && g != sg) {
+			subnode (copy(sg, g), $);
+		}
+	}
+}
+
+END_G {
+	induce(sg);
+	write(sg);
+}
--- /dev/null	Fri Dec 21 15:00:13 2018
+++ new/usr/src/tools/smatch/src/ident-list.h	Fri Dec 21 15:00:13 2018
@@ -0,0 +1,85 @@
+
+#define IDENT(n) __IDENT(n## _ident, #n, 0)
+#define IDENT_RESERVED(n) __IDENT(n## _ident, #n, 1)
+
+/* Basic C reserved words.. */
+IDENT_RESERVED(sizeof);
+IDENT_RESERVED(if);
+IDENT_RESERVED(else);
+IDENT_RESERVED(return);
+IDENT_RESERVED(switch);
+IDENT_RESERVED(case);
+IDENT_RESERVED(default);
+IDENT_RESERVED(break);
+IDENT_RESERVED(continue);
+IDENT_RESERVED(for);
+IDENT_RESERVED(while);
+IDENT_RESERVED(do);
+IDENT_RESERVED(goto);
+
+/* C typenames. They get marked as reserved when initialized */
+IDENT(struct);
+IDENT(union);
+IDENT(enum);
+IDENT(__attribute); IDENT(__attribute__);
+IDENT(volatile); IDENT(__volatile); IDENT(__volatile__);
+IDENT(double);
+
+/* C storage classes. They get marked as reserved when initialized */
+IDENT(static);
+
+/* C99 keywords */
+IDENT(restrict); IDENT(__restrict); IDENT(__restrict__);
+IDENT(_Bool);
+IDENT(_Complex);
+IDENT_RESERVED(_Imaginary);
+
+/* C11 keywords */
+IDENT(_Alignas);
+IDENT_RESERVED(_Alignof);
+IDENT_RESERVED(_Atomic);
+IDENT_RESERVED(_Generic);
+IDENT(_Noreturn);
+IDENT_RESERVED(_Static_assert);
+IDENT(_Thread_local);
+
+/* Special case for L'\t' */
+IDENT(L);
+
+/* Extended gcc identifiers */
+IDENT(asm); IDENT_RESERVED(__asm); IDENT_RESERVED(__asm__);
+IDENT(alignof); IDENT_RESERVED(__alignof); IDENT_RESERVED(__alignof__); 
+IDENT_RESERVED(__sizeof_ptr__);
+IDENT_RESERVED(__builtin_types_compatible_p);
+IDENT_RESERVED(__builtin_offsetof);
+IDENT_RESERVED(__label__);
+
+/* Preprocessor idents.  Direct use of __IDENT avoids mentioning the keyword
+ * itself by name, preventing these tokens from expanding when compiling
+ * sparse. */
+IDENT(defined);
+IDENT(once);
+__IDENT(pragma_ident, "__pragma__", 0);
+__IDENT(_Pragma_ident, "_Pragma", 0);
+__IDENT(__VA_ARGS___ident, "__VA_ARGS__", 0);
+__IDENT(__LINE___ident, "__LINE__", 0);
+__IDENT(__FILE___ident, "__FILE__", 0);
+__IDENT(__DATE___ident, "__DATE__", 0);
+__IDENT(__TIME___ident, "__TIME__", 0);
+__IDENT(__func___ident, "__func__", 0);
+__IDENT(__FUNCTION___ident, "__FUNCTION__", 0);
+__IDENT(__PRETTY_FUNCTION___ident, "__PRETTY_FUNCTION__", 0);
+__IDENT(__COUNTER___ident, "__COUNTER__", 0);
+
+/* Sparse commands */
+IDENT_RESERVED(__context__);
+IDENT_RESERVED(__range__);
+
+/* Magic function names we recognize */
+IDENT(memset); IDENT(memcpy);
+IDENT(copy_to_user); IDENT(copy_from_user);
+IDENT(main);
+
+#undef __IDENT
+#undef IDENT
+#undef IDENT_RESERVED
--- /dev/null	Fri Dec 21 15:00:13 2018
+++ new/usr/src/tools/smatch/src/inline.c	Fri Dec 21 15:00:13 2018
@@ -0,0 +1,585 @@
+/*
+ * Sparse - a semantic source parser.
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003-2004 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "token.h"
+#include "parse.h"
+#include "symbol.h"
+#include "expression.h"
+
+static struct expression * dup_expression(struct expression *expr)
+{
+	struct expression *dup = alloc_expression(expr->pos, expr->type);
+	*dup = *expr;
+	return dup;
+}
+
+static struct statement * dup_statement(struct statement *stmt)
+{
+	struct statement *dup = alloc_statement(stmt->pos, stmt->type);
+	*dup = *stmt;
+	return dup;
+}
+
+static struct symbol *copy_symbol(struct position pos, struct symbol *sym)
+{
+	if (!sym)
+		return sym;
+	if (sym->ctype.modifiers & (MOD_STATIC | MOD_EXTERN | MOD_TOPLEVEL | MOD_INLINE))
+		return sym;
+	if (!sym->replace) {
+		warning(pos, "unreplaced symbol '%s'", show_ident(sym->ident));
+		return sym;
+	}
+	return sym->replace;
+}
+
+static struct symbol_list *copy_symbol_list(struct symbol_list *src)
+{
+	struct symbol_list *dst = NULL;
+	struct symbol *sym;
+
+	FOR_EACH_PTR(src, sym) {
+		struct symbol *newsym = copy_symbol(sym->pos, sym);
+		add_symbol(&dst, newsym);
+	} END_FOR_EACH_PTR(sym);
+	return dst;
+}
+
+static struct expression * copy_expression(struct expression *expr)
+{
+	if (!expr)
+		return NULL;
+
+	switch (expr->type) {
+	/*
+	 * EXPR_SYMBOL is the interesting case, we may need to replace the
+	 * symbol to the new copy.
+	 */
+	case EXPR_SYMBOL: {
+		struct symbol *sym = copy_symbol(expr->pos, expr->symbol);
+		if (sym == expr->symbol)
+			break;
+		expr = dup_expression(expr);
+		expr->symbol = sym;
+		break;
+	}
+
+	/* Atomics, never change, just return the expression directly */
+	case EXPR_VALUE:
+	case EXPR_STRING:
+	case EXPR_FVALUE:
+	case EXPR_TYPE:
+		break;
+
+	/* Unops: check if the subexpression is unique */
+	case EXPR_PREOP:
+	case EXPR_POSTOP: {
+		struct expression *unop = copy_expression(expr->unop);
+		if (expr->unop == unop)
+			break;
+		expr = dup_expression(expr);
+		expr->unop = unop;
+		break;
+	}
+
+	case EXPR_SLICE: {
+		struct expression *base = copy_expression(expr->base);
+		expr = dup_expression(expr);
+		expr->base = base;
+		break;
+	}
+
+	/* Binops: copy left/right expressions */
+	case EXPR_BINOP:
+	case EXPR_COMMA:
+	case EXPR_COMPARE:
+	case EXPR_LOGICAL: {
+		struct expression *left = copy_expression(expr->left);
+		struct expression *right = copy_expression(expr->right);
+		if (left == expr->left && right == expr->right)
+			break;
+		expr = dup_expression(expr);
+		expr->left = left;
+		expr->right = right;
+		break;
+	}
+
+	case EXPR_ASSIGNMENT: {
+		struct expression *left = copy_expression(expr->left);
+		struct expression *right = copy_expression(expr->right);
+		if (expr->op == '=' && left == expr->left && right == expr->right)
+			break;
+		expr = dup_expression(expr);
+		expr->left = left;
+		expr->right = right;
+		break;
+	}
+
+	/* Dereference */
+	case EXPR_DEREF: {
+		struct expression *deref = copy_expression(expr->deref);
+		expr = dup_expression(expr);
+		expr->deref = deref;
+		break;
+	}
+
+	/* Cast/sizeof/__alignof__ */
+	case EXPR_CAST:
+		if (expr->cast_expression->type == EXPR_INITIALIZER) {
+			struct expression *cast = expr->cast_expression;
+			struct symbol *sym = expr->cast_type;
+			expr = dup_expression(expr);
+			expr->cast_expression = copy_expression(cast);
+			expr->cast_type = alloc_symbol(sym->pos, sym->type);
+			*expr->cast_type = *sym;
+			break;
+		}
+	case EXPR_FORCE_CAST:
+	case EXPR_IMPLIED_CAST:
+	case EXPR_SIZEOF: 
+	case EXPR_PTRSIZEOF:
+	case EXPR_ALIGNOF: {
+		struct expression *cast = copy_expression(expr->cast_expression);
+		if (cast == expr->cast_expression)
+			break;
+		expr = dup_expression(expr);
+		expr->cast_expression = cast;
+		break;
+	}
+
+	/* Conditional expression */
+	case EXPR_SELECT:
+	case EXPR_CONDITIONAL: {
+		struct expression *cond = copy_expression(expr->conditional);
+		struct expression *true = copy_expression(expr->cond_true);
+		struct expression *false = copy_expression(expr->cond_false);
+		if (cond == expr->conditional && true == expr->cond_true && false == expr->cond_false)
+			break;
+		expr = dup_expression(expr);
+		expr->conditional = cond;
+		expr->cond_true = true;
+		expr->cond_false = false;
+		break;
+	}
+
+	/* Statement expression */
+	case EXPR_STATEMENT: {
+		struct statement *stmt = alloc_statement(expr->pos, STMT_COMPOUND);
+		copy_statement(expr->statement, stmt);
+		expr = dup_expression(expr);
+		expr->statement = stmt;
+		break;
+	}
+
+	/* Call expression */
+	case EXPR_CALL: {
+		struct expression *fn = copy_expression(expr->fn);
+		struct expression_list *list = expr->args;
+		struct expression *arg;
+
+		expr = dup_expression(expr);
+		expr->fn = fn;
+		expr->args = NULL;
+		FOR_EACH_PTR(list, arg) {
+			add_expression(&expr->args, copy_expression(arg));
+		} END_FOR_EACH_PTR(arg);
+		break;
+	}
+
+	/* Initializer list statement */
+	case EXPR_INITIALIZER: {
+		struct expression_list *list = expr->expr_list;
+		struct expression *entry;
+		expr = dup_expression(expr);
+		expr->expr_list = NULL;
+		FOR_EACH_PTR(list, entry) {
+			add_expression(&expr->expr_list, copy_expression(entry));
+		} END_FOR_EACH_PTR(entry);
+		break;
+	}
+
+	/* Label in inline function - hmm. */
+	case EXPR_LABEL: {
+		struct symbol *label_symbol = copy_symbol(expr->pos, expr->label_symbol);
+		expr = dup_expression(expr);
+		expr->label_symbol = label_symbol;
+		break;
+	}
+
+	case EXPR_INDEX: {
+		struct expression *sub_expr = copy_expression(expr->idx_expression);
+		expr = dup_expression(expr);
+		expr->idx_expression = sub_expr;
+		break;
+	}
+		
+	case EXPR_IDENTIFIER: {
+		struct expression *sub_expr = copy_expression(expr->ident_expression);
+		expr = dup_expression(expr);
+		expr->ident_expression = sub_expr;
+		break;
+	}
+
+	/* Position in initializer.. */
+	case EXPR_POS: {
+		struct expression *val = copy_expression(expr->init_expr);
+		expr = dup_expression(expr);
+		expr->init_expr = val;
+		break;
+	}
+	case EXPR_OFFSETOF: {
+		struct expression *val = copy_expression(expr->down);
+		if (expr->op == '.') {
+			if (expr->down != val) {
+				expr = dup_expression(expr);
+				expr->down = val;
+			}
+		} else {
+			struct expression *idx = copy_expression(expr->index);
+			if (expr->down != val || expr->index != idx) {
+				expr = dup_expression(expr);
+				expr->down = val;
+				expr->index = idx;
+			}
+		}
+		break;
+	}
+	default:
+		warning(expr->pos, "trying to copy expression type %d", expr->type);
+	}
+	return expr;
+}
+
+static struct expression_list *copy_asm_constraints(struct expression_list *in)
+{
+	struct expression_list *out = NULL;
+	struct expression *expr;
+	int state = 0;
+
+	FOR_EACH_PTR(in, expr) {
+		switch (state) {
+		case 0: /* identifier */
+		case 1: /* constraint */
+			state++;
+			add_expression(&out, expr);
+			continue;
+		case 2: /* expression */
+			state = 0;
+			add_expression(&out, copy_expression(expr));
+			continue;
+		}
+	} END_FOR_EACH_PTR(expr);
+	return out;
+}
+
+static void set_replace(struct symbol *old, struct symbol *new)
+{
+	new->replace = old;
+	old->replace = new;
+}
+
+static void unset_replace(struct symbol *sym)
+{
+	struct symbol *r = sym->replace;
+	if (!r) {
+		warning(sym->pos, "symbol '%s' not replaced?", show_ident(sym->ident));
+		return;
+	}
+	r->replace = NULL;
+	sym->replace = NULL;
+}
+
+static void unset_replace_list(struct symbol_list *list)
+{
+	struct symbol *sym;
+	FOR_EACH_PTR(list, sym) {
+		unset_replace(sym);
+	} END_FOR_EACH_PTR(sym);
+}
+
+static struct statement *copy_one_statement(struct statement *stmt)
+{
+	if (!stmt)
+		return NULL;
+	switch(stmt->type) {
+	case STMT_NONE:
+		break;
+	case STMT_DECLARATION: {
+		struct symbol *sym;
+		struct statement *newstmt = dup_statement(stmt);
+		newstmt->declaration = NULL;
+		FOR_EACH_PTR(stmt->declaration, sym) {
+			struct symbol *newsym = copy_symbol(stmt->pos, sym);
+			if (newsym != sym)
+				newsym->initializer = copy_expression(sym->initializer);
+			add_symbol(&newstmt->declaration, newsym);
+		} END_FOR_EACH_PTR(sym);
+		stmt = newstmt;
+		break;
+	}
+	case STMT_CONTEXT:
+	case STMT_EXPRESSION: {
+		struct expression *expr = copy_expression(stmt->expression);
+		if (expr == stmt->expression)
+			break;
+		stmt = dup_statement(stmt);
+		stmt->expression = expr;
+		break;
+	}
+	case STMT_RANGE: {
+		struct expression *expr = copy_expression(stmt->range_expression);
+		if (expr == stmt->expression)
+			break;
+		stmt = dup_statement(stmt);
+		stmt->range_expression = expr;
+		break;
+	}
+	case STMT_COMPOUND: {
+		struct statement *new = alloc_statement(stmt->pos, STMT_COMPOUND);
+		copy_statement(stmt, new);
+		stmt = new;
+		break;
+	}
+	case STMT_IF: {
+		struct expression *cond = stmt->if_conditional;
+		struct statement *true = stmt->if_true;
+		struct statement *false = stmt->if_false;
+
+		cond = copy_expression(cond);
+		true = copy_one_statement(true);
+		false = copy_one_statement(false);
+		if (stmt->if_conditional == cond &&
+		    stmt->if_true == true &&
+		    stmt->if_false == false)
+			break;
+		stmt = dup_statement(stmt);
+		stmt->if_conditional = cond;
+		stmt->if_true = true;
+		stmt->if_false = false;
+		break;
+	}
+	case STMT_RETURN: {
+		struct expression *retval = copy_expression(stmt->ret_value);
+		struct symbol *sym = copy_symbol(stmt->pos, stmt->ret_target);
+
+		stmt = dup_statement(stmt);
+		stmt->ret_value = retval;
+		stmt->ret_target = sym;
+		break;
+	}
+	case STMT_CASE: {
+		stmt = dup_statement(stmt);
+		stmt->case_label = copy_symbol(stmt->pos, stmt->case_label);
+		stmt->case_label->stmt = stmt;
+		stmt->case_expression = copy_expression(stmt->case_expression);
+		stmt->case_to = copy_expression(stmt->case_to);
+		stmt->case_statement = copy_one_statement(stmt->case_statement);
+		break;
+	}
+	case STMT_SWITCH: {
+		struct symbol *switch_break = copy_symbol(stmt->pos, stmt->switch_break);
+		struct symbol *switch_case = copy_symbol(stmt->pos, stmt->switch_case);
+		struct expression *expr = copy_expression(stmt->switch_expression);
+		struct statement *switch_stmt = copy_one_statement(stmt->switch_statement);
+
+		stmt = dup_statement(stmt);
+		switch_case->symbol_list = copy_symbol_list(switch_case->symbol_list);
+		stmt->switch_break = switch_break;
+		stmt->switch_case = switch_case;
+		stmt->switch_expression = expr;
+		stmt->switch_statement = switch_stmt;
+		break;		
+	}
+	case STMT_ITERATOR: {
+		stmt = dup_statement(stmt);
+		stmt->iterator_break = copy_symbol(stmt->pos, stmt->iterator_break);
+		stmt->iterator_continue = copy_symbol(stmt->pos, stmt->iterator_continue);
+		stmt->iterator_syms = copy_symbol_list(stmt->iterator_syms);
+
+		stmt->iterator_pre_statement = copy_one_statement(stmt->iterator_pre_statement);
+		stmt->iterator_pre_condition = copy_expression(stmt->iterator_pre_condition);
+
+		stmt->iterator_statement = copy_one_statement(stmt->iterator_statement);
+
+		stmt->iterator_post_statement = copy_one_statement(stmt->iterator_post_statement);
+		stmt->iterator_post_condition = copy_expression(stmt->iterator_post_condition);
+		break;
+	}
+	case STMT_LABEL: {
+		stmt = dup_statement(stmt);
+		stmt->label_identifier = copy_symbol(stmt->pos, stmt->label_identifier);
+		stmt->label_statement = copy_one_statement(stmt->label_statement);
+		break;
+	}
+	case STMT_GOTO: {
+		stmt = dup_statement(stmt);
+		stmt->goto_label = copy_symbol(stmt->pos, stmt->goto_label);
+		stmt->goto_expression = copy_expression(stmt->goto_expression);
+		stmt->target_list = copy_symbol_list(stmt->target_list);
+		break;
+	}
+	case STMT_ASM: {
+		stmt = dup_statement(stmt);
+		stmt->asm_inputs = copy_asm_constraints(stmt->asm_inputs);
+		stmt->asm_outputs = copy_asm_constraints(stmt->asm_outputs);
+		/* no need to dup "clobbers", since they are all constant strings */
+		break;
+	}
+	default:
+		warning(stmt->pos, "trying to copy statement type %d", stmt->type);
+		break;
+	}
+	return stmt;
+}
+
+/*
+ * Copy a statement tree from 'src' to 'dst', where both
+ * source and destination are of type STMT_COMPOUND.
+ *
+ * We do this for the tree-level inliner.
+ *
+ * This doesn't do the symbol replacement right: it's not
+ * re-entrant.
+ */
+void copy_statement(struct statement *src, struct statement *dst)
+{
+	struct statement *stmt;
+
+	FOR_EACH_PTR(src->stmts, stmt) {
+		add_statement(&dst->stmts, copy_one_statement(stmt));
+	} END_FOR_EACH_PTR(stmt);
+	dst->args = copy_one_statement(src->args);
+	dst->ret = copy_symbol(src->pos, src->ret);
+	dst->inline_fn = src->inline_fn;
+}
+
+static struct symbol *create_copy_symbol(struct symbol *orig)
+{
+	struct symbol *sym = orig;
+	if (orig) {
+		sym = alloc_symbol(orig->pos, orig->type);
+		*sym = *orig;
+		sym->bb_target = NULL;
+		sym->pseudo = NULL;
+		set_replace(orig, sym);
+		orig = sym;
+	}
+	return orig;
+}
+
+static struct symbol_list *create_symbol_list(struct symbol_list *src)
+{
+	struct symbol_list *dst = NULL;
+	struct symbol *sym;
+
+	FOR_EACH_PTR(src, sym) {
+		struct symbol *newsym = create_copy_symbol(sym);
+		add_symbol(&dst, newsym);
+	} END_FOR_EACH_PTR(sym);
+	return dst;
+}
+
+int inline_function(struct expression *expr, struct symbol *sym)
+{
+	struct symbol_list * fn_symbol_list;
+	struct symbol *fn = sym->ctype.base_type;
+	struct expression_list *arg_list = expr->args;
+	struct statement *stmt = alloc_statement(expr->pos, STMT_COMPOUND);
+	struct symbol_list *name_list, *arg_decl;
+	struct symbol *name;
+	struct expression *arg;
+
+	if (!fn->inline_stmt) {
+		sparse_error(fn->pos, "marked inline, but without a definition");
+		return 0;
+	}
+	if (fn->expanding)
+		return 0;
+
+	fn->expanding = 1;
+
+	name_list = fn->arguments;
+
+	expr->type = EXPR_STATEMENT;
+	expr->statement = stmt;
+	expr->ctype = fn->ctype.base_type;
+
+	fn_symbol_list = create_symbol_list(sym->inline_symbol_list);
+
+	arg_decl = NULL;
+	PREPARE_PTR_LIST(name_list, name);
+	FOR_EACH_PTR(arg_list, arg) {
+		struct symbol *a = alloc_symbol(arg->pos, SYM_NODE);
+
+		a->ctype.base_type = arg->ctype;
+		if (name) {
+			*a = *name;
+			set_replace(name, a);
+			add_symbol(&fn_symbol_list, a);
+		}
+		a->initializer = arg;
+		add_symbol(&arg_decl, a);
+
+		NEXT_PTR_LIST(name);
+	} END_FOR_EACH_PTR(arg);
+	FINISH_PTR_LIST(name);
+
+	copy_statement(fn->inline_stmt, stmt);
+
+	if (arg_decl) {
+		struct statement *decl = alloc_statement(expr->pos, STMT_DECLARATION);
+		decl->declaration = arg_decl;
+		stmt->args = decl;
+	}
+	stmt->inline_fn = sym;
+
+	unset_replace_list(fn_symbol_list);
+
+	evaluate_statement(stmt);
+
+	fn->expanding = 0;
+	return 1;
+}
+
+void uninline(struct symbol *sym)
+{
+	struct symbol *fn = sym->ctype.base_type;
+	struct symbol_list *arg_list = fn->arguments;
+	struct symbol *p;
+
+	sym->symbol_list = create_symbol_list(sym->inline_symbol_list);
+	FOR_EACH_PTR(arg_list, p) {
+		p->replace = p;
+	} END_FOR_EACH_PTR(p);
+	fn->stmt = alloc_statement(fn->pos, STMT_COMPOUND);
+	copy_statement(fn->inline_stmt, fn->stmt);
+	unset_replace_list(sym->symbol_list);
+	unset_replace_list(arg_list);
+}
--- /dev/null	Fri Dec 21 15:00:13 2018
+++ new/usr/src/tools/smatch/src/lib.c	Fri Dec 21 15:00:13 2018
@@ -0,0 +1,1503 @@
+/*
+ * 'sparse' library helper routines.
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003-2004 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include <ctype.h>
+#include <fcntl.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <assert.h>
+
+#include <sys/types.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "token.h"
+#include "parse.h"
+#include "symbol.h"
+#include "expression.h"
+#include "scope.h"
+#include "linearize.h"
+#include "target.h"
+#include "version.h"
+
+static const char *progname;
+
+int sparse_errors = 0;
+int sparse_warnings = 0;
+
+int verbose, optimize, optimize_size, preprocessing;
+int die_if_error = 0;
+int parse_error;
+int has_error = 0;
+
+#ifndef __GNUC__
+# define __GNUC__ 2
+# define __GNUC_MINOR__ 95
+# define __GNUC_PATCHLEVEL__ 0
+#endif
+
+int gcc_major = __GNUC__;
+int gcc_minor = __GNUC_MINOR__;
+int gcc_patchlevel = __GNUC_PATCHLEVEL__;
+
+static const char *gcc_base_dir = GCC_BASE;
+static const char *multiarch_dir = MULTIARCH_TRIPLET;
+
+struct token *skip_to(struct token *token, int op)
+{
+	while (!match_op(token, op) && !eof_token(token))
+		token = token->next;
+	return token;
+}
+
+struct token *expect(struct token *token, int op, const char *where)
+{
+	if (!match_op(token, op)) {
+		static struct token bad_token;
+		if (token != &bad_token) {
+			bad_token.next = token;
+			sparse_error(token->pos, "Expected %s %s", show_special(op), where);
+			sparse_error(token->pos, "got %s", show_token(token));
+		}
+		if (op == ';')
+			return skip_to(token, op);
+		return &bad_token;
+	}
+	return token->next;
+}
+
+unsigned int hexval(unsigned int c)
+{
+	int retval = 256;
+	switch (c) {
+	case '0'...'9':
+		retval = c - '0';
+		break;
+	case 'a'...'f':
+		retval = c - 'a' + 10;
+		break;
+	case 'A'...'F':
+		retval = c - 'A' + 10;
+		break;
+	}
+	return retval;
+}
+
+static void do_warn(const char *type, struct position pos, const char * fmt, va_list args)
+{
+	static char buffer[512];
+	const char *name;
+
+	vsprintf(buffer, fmt, args);	
+	name = stream_name(pos.stream);
+		
+	fprintf(stderr, "%s: %s:%d:%d: %s%s\n",
+		progname, name, pos.line, pos.pos, type, buffer);
+}
+
+static int max_warnings = 100;
+static int show_info = 1;
+
+void info(struct position pos, const char * fmt, ...)
+{
+	va_list args;
+
+	if (!show_info)
+		return;
+	va_start(args, fmt);
+	do_warn("", pos, fmt, args);
+	va_end(args);
+}
+
+static void do_error(struct position pos, const char * fmt, va_list args)
+{
+	static int errors = 0;
+
+	parse_error = 1;
+        die_if_error = 1;
+	show_info = 1;
+	/* Shut up warnings after an error */
+	has_error |= ERROR_CURR_PHASE;
+	if (errors > 100) {
+		static int once = 0;
+		show_info = 0;
+		if (once)
+			return;
+		fmt = "too many errors";
+		once = 1;
+	}
+
+	do_warn("error: ", pos, fmt, args);
+	errors++;
+}	
+
+void warning(struct position pos, const char * fmt, ...)
+{
+	va_list args;
+
+	if (Wsparse_error) {
+		va_start(args, fmt);
+		do_error(pos, fmt, args);
+		va_end(args);
+		return;
+	}
+
+	if (!max_warnings || has_error) {
+		show_info = 0;
+		return;
+	}
+
+	if (!--max_warnings) {
+		show_info = 0;
+		fmt = "too many warnings";
+	}
+
+	va_start(args, fmt);
+	do_warn("warning: ", pos, fmt, args);
+	va_end(args);
+}
+
+void sparse_error(struct position pos, const char * fmt, ...)
+{
+	va_list args;
+	va_start(args, fmt);
+	do_error(pos, fmt, args);
+	va_end(args);
+}
+
+void expression_error(struct expression *expr, const char *fmt, ...)
+{
+	va_list args;
+	va_start(args, fmt);
+	do_error(expr->pos, fmt, args);
+	va_end(args);
+	expr->ctype = &bad_ctype;
+}
+
+NORETURN_ATTR
+void error_die(struct position pos, const char * fmt, ...)
+{
+	va_list args;
+	va_start(args, fmt);
+	do_warn("error: ", pos, fmt, args);
+	va_end(args);
+	exit(1);
+}
+
+NORETURN_ATTR
+void die(const char *fmt, ...)
+{
+	va_list args;
+	static char buffer[512];
+
+	va_start(args, fmt);
+	vsnprintf(buffer, sizeof(buffer), fmt, args);
+	va_end(args);
+
+	fprintf(stderr, "%s: %s\n", progname, buffer);
+	exit(1);
+}
+
+static struct token *pre_buffer_begin = NULL;
+static struct token *pre_buffer_end = NULL;
+
+int Waddress = 0;
+int Waddress_space = 1;
+int Wbitwise = 1;
+int Wcast_to_as = 0;
+int Wcast_truncate = 1;
+int Wconstant_suffix = 0;
+int Wconstexpr_not_const = 0;
+int Wcontext = 1;
+int Wdecl = 1;
+int Wdeclarationafterstatement = -1;
+int Wdefault_bitfield_sign = 0;
+int Wdesignated_init = 1;
+int Wdo_while = 0;
+int Wimplicit_int = 1;
+int Winit_cstring = 0;
+int Wenum_mismatch = 1;
+int Wexternal_function_has_definition = 1;
+int Wsparse_error = 0;
+int Wmemcpy_max_count = 1;
+int Wnon_pointer_null = 1;
+int Wold_initializer = 1;
+int Wold_style_definition = 1;
+int Wone_bit_signed_bitfield = 1;
+int Woverride_init = 1;
+int Woverride_init_all = 0;
+int Woverride_init_whole_range = 0;
+int Wparen_string = 0;
+int Wpointer_arith = 0;
+int Wptr_subtraction_blows = 0;
+int Wreturn_void = 0;
+int Wshadow = 0;
+int Wsizeof_bool = 0;
+int Wstrict_prototypes = 1;
+int Wtautological_compare = 0;
+int Wtransparent_union = 0;
+int Wtypesign = 0;
+int Wundef = 0;
+int Wuninitialized = 1;
+int Wunknown_attribute = 0;
+int Wvla = 1;
+
+int dump_macro_defs = 0;
+
+int dbg_entry = 0;
+int dbg_dead = 0;
+
+int fmem_report = 0;
+int fdump_linearize;
+unsigned long long fmemcpy_max_count = 100000;
+
+int preprocess_only;
+
+static enum { STANDARD_C89,
+              STANDARD_C94,
+              STANDARD_C99,
+              STANDARD_C11,
+              STANDARD_GNU11,
+              STANDARD_GNU89,
+              STANDARD_GNU99, } standard = STANDARD_GNU89;
+
+#define ARCH_LP32  0
+#define ARCH_LP64  1
+#define ARCH_LLP64 2
+
+#ifdef __x86_64__
+#define ARCH_M64_DEFAULT ARCH_LP64
+#else
+#define ARCH_M64_DEFAULT ARCH_LP32
+#endif
+
+int arch_m64 = ARCH_M64_DEFAULT;
+int arch_msize_long = 0;
+
+#ifdef __BIG_ENDIAN__
+#define ARCH_BIG_ENDIAN 1
+#else
+#define ARCH_BIG_ENDIAN 0
+#endif
+int arch_big_endian = ARCH_BIG_ENDIAN;
+
+
+#define CMDLINE_INCLUDE 20
+static int cmdline_include_nr = 0;
+static char *cmdline_include[CMDLINE_INCLUDE];
+
+
+void add_pre_buffer(const char *fmt, ...)
+{
+	va_list args;
+	unsigned int size;
+	struct token *begin, *end;
+	char buffer[4096];
+
+	va_start(args, fmt);
+	size = vsnprintf(buffer, sizeof(buffer), fmt, args);
+	va_end(args);
+	begin = tokenize_buffer(buffer, size, &end);
+	if (!pre_buffer_begin)
+		pre_buffer_begin = begin;
+	if (pre_buffer_end)
+		pre_buffer_end->next = begin;
+	pre_buffer_end = end;
+}
+
+static char **handle_switch_D(char *arg, char **next)
+{
+	const char *name = arg + 1;
+	const char *value = "1";
+
+	if (!*name) {
+		arg = *++next;
+		if (!arg)
+			die("argument to `-D' is missing");
+		name = arg;
+	}
+
+	for (;;arg++) {
+		char c;
+		c = *arg;
+		if (!c)
+			break;
+		if (c == '=') {
+			*arg = '\0';
+			value = arg + 1;
+			break;
+		}
+	}
+	add_pre_buffer("#define %s %s\n", name, value);
+	return next;
+}
+
+static char **handle_switch_E(char *arg, char **next)
+{
+	if (arg[1] == '\0')
+		preprocess_only = 1;
+	return next;
+}
+
+static char **handle_switch_I(char *arg, char **next)
+{
+	char *path = arg+1;
+
+	switch (arg[1]) {
+	case '-':
+		add_pre_buffer("#split_include\n");
+		break;
+
+	case '\0':	/* Plain "-I" */
+		path = *++next;
+		if (!path)
+			die("missing argument for -I option");
+		/* Fall through */
+	default:
+		add_pre_buffer("#add_include \"%s/\"\n", path);
+	}
+	return next;
+}
+
+static void add_cmdline_include(char *filename)
+{
+	if (cmdline_include_nr >= CMDLINE_INCLUDE)
+		die("too many include files for %s\n", filename);
+	cmdline_include[cmdline_include_nr++] = filename;
+}
+
+static char **handle_switch_i(char *arg, char **next)
+{
+	if (*next && !strcmp(arg, "include"))
+		add_cmdline_include(*++next);
+	else if (*next && !strcmp(arg, "imacros"))
+		add_cmdline_include(*++next);
+	else if (*next && !strcmp(arg, "isystem")) {
+		char *path = *++next;
+		if (!path)
+			die("missing argument for -isystem option");
+		add_pre_buffer("#add_isystem \"%s/\"\n", path);
+	} else if (*next && !strcmp(arg, "idirafter")) {
+		char *path = *++next;
+		if (!path)
+			die("missing argument for -idirafter option");
+		add_pre_buffer("#add_dirafter \"%s/\"\n", path);
+	}
+	return next;
+}
+
+static char **handle_switch_M(char *arg, char **next)
+{
+	if (!strcmp(arg, "MF") || !strcmp(arg,"MQ") || !strcmp(arg,"MT")) {
+		if (!*next)
+			die("missing argument for -%s option", arg);
+		return next + 1;
+	}
+	return next;
+}
+
+static char **handle_multiarch_dir(char *arg, char **next)
+{
+	multiarch_dir = *++next;
+	if (!multiarch_dir)
+		die("missing argument for -multiarch-dir option");
+	return next;
+}
+
+static char **handle_switch_m(char *arg, char **next)
+{
+	if (!strcmp(arg, "m64")) {
+		arch_m64 = ARCH_LP64;
+	} else if (!strcmp(arg, "m32")) {
+		arch_m64 = ARCH_LP32;
+	} else if (!strcmp(arg, "msize-llp64")) {
+		arch_m64 = ARCH_LLP64;
+	} else if (!strcmp(arg, "msize-long")) {
+		arch_msize_long = 1;
+	} else if (!strcmp(arg, "multiarch-dir")) {
+		return handle_multiarch_dir(arg, next);
+	} else if (!strcmp(arg, "mbig-endian")) {
+		arch_big_endian = 1;
+	} else if (!strcmp(arg, "mlittle-endian")) {
+		arch_big_endian = 0;
+	}
+	return next;
+}
+
+static void handle_arch_m64_finalize(void)
+{
+	switch (arch_m64) {
+	case ARCH_LP32:
+		/* default values */
+#if defined(__x86_64__) || defined (__i386)
+ 		add_pre_buffer("#weak_define __i386__ 1\n");
+ 		add_pre_buffer("#weak_define __i386 1\n");
+ 		add_pre_buffer("#weak_define i386 1\n");
+#endif
+		return;
+	case ARCH_LP64:
+		bits_in_long = 64;
+		max_int_alignment = 8;
+		size_t_ctype = &ulong_ctype;
+		ssize_t_ctype = &long_ctype;
+		add_pre_buffer("#weak_define __LP64__ 1\n");
+		add_pre_buffer("#weak_define __LP64 1\n");
+		add_pre_buffer("#weak_define _LP64 1\n");
+		goto case_64bit_common;
+	case ARCH_LLP64:
+		bits_in_long = 32;
+		max_int_alignment = 4;
+		size_t_ctype = &ullong_ctype;
+		ssize_t_ctype = &llong_ctype;
+		add_pre_buffer("#weak_define __LLP64__ 1\n");
+		goto case_64bit_common;
+	case_64bit_common:
+		bits_in_pointer = 64;
+		pointer_alignment = 8;
+#if defined(__x86_64__) || defined (__i386)
+		add_pre_buffer("#weak_define __x86_64__ 1\n");
+		add_pre_buffer("#weak_define __x86_64 1\n");
+#endif
+		break;
+	}
+}
+
+static void handle_arch_msize_long_finalize(void)
+{
+	if (arch_msize_long) {
+		size_t_ctype = &ulong_ctype;
+		ssize_t_ctype = &long_ctype;
+	}
+}
+
+static void handle_arch_finalize(void)
+{
+	handle_arch_m64_finalize();
+	handle_arch_msize_long_finalize();
+}
+
+
+static int handle_simple_switch(const char *arg, const char *name, int *flag)
+{
+	int val = 1;
+
+	// Prefixe "no-" mean to turn flag off.
+	if (strncmp(arg, "no-", 3) == 0) {
+		arg += 3;
+		val = 0;
+	}
+
+	if (strcmp(arg, name) == 0) {
+		*flag = val;
+		return 1;
+	}
+
+	// not handled
+	return 0;
+}
+
+static char **handle_switch_o(char *arg, char **next)
+{
+	if (!strcmp (arg, "o")) {       // "-o foo"
+		if (!*++next)
+			die("argument to '-o' is missing");
+	}
+	// else "-ofoo"
+
+	return next;
+}
+
+static const struct warning {
+	const char *name;
+	int *flag;
+} warnings[] = {
+	{ "address", &Waddress },
+	{ "address-space", &Waddress_space },
+	{ "bitwise", &Wbitwise },
+	{ "cast-to-as", &Wcast_to_as },
+	{ "cast-truncate", &Wcast_truncate },
+	{ "constant-suffix", &Wconstant_suffix },
+	{ "constexpr-not-const", &Wconstexpr_not_const},
+	{ "context", &Wcontext },
+	{ "decl", &Wdecl },
+	{ "declaration-after-statement", &Wdeclarationafterstatement },
+	{ "default-bitfield-sign", &Wdefault_bitfield_sign },
+	{ "designated-init", &Wdesignated_init },
+	{ "do-while", &Wdo_while },
+	{ "enum-mismatch", &Wenum_mismatch },
+	{ "external-function-has-definition", &Wexternal_function_has_definition },
+	{ "implicit-int", &Wimplicit_int },
+	{ "init-cstring", &Winit_cstring },
+	{ "memcpy-max-count", &Wmemcpy_max_count },
+	{ "non-pointer-null", &Wnon_pointer_null },
+	{ "old-initializer", &Wold_initializer },
+	{ "old-style-definition", &Wold_style_definition },
+	{ "one-bit-signed-bitfield", &Wone_bit_signed_bitfield },
+	{ "override-init", &Woverride_init },
+	{ "override-init-all", &Woverride_init_all },
+	{ "paren-string", &Wparen_string },
+	{ "ptr-subtraction-blows", &Wptr_subtraction_blows },
+	{ "return-void", &Wreturn_void },
+	{ "shadow", &Wshadow },
+	{ "sizeof-bool", &Wsizeof_bool },
+	{ "strict-prototypes", &Wstrict_prototypes },
+	{ "pointer-arith", &Wpointer_arith },
+	{ "sparse-error", &Wsparse_error },
+	{ "tautological-compare", &Wtautological_compare },
+	{ "transparent-union", &Wtransparent_union },
+	{ "typesign", &Wtypesign },
+	{ "undef", &Wundef },
+	{ "uninitialized", &Wuninitialized },
+	{ "unknown-attribute", &Wunknown_attribute },
+	{ "vla", &Wvla },
+};
+
+enum {
+	WARNING_OFF,
+	WARNING_ON,
+	WARNING_FORCE_OFF
+};
+
+
+static char **handle_onoff_switch(char *arg, char **next, const struct warning warnings[], int n)
+{
+	int flag = WARNING_ON;
+	char *p = arg + 1;
+	unsigned i;
+
+	if (!strcmp(p, "sparse-all")) {
+		for (i = 0; i < n; i++) {
+			if (*warnings[i].flag != WARNING_FORCE_OFF && warnings[i].flag != &Wsparse_error)
+				*warnings[i].flag = WARNING_ON;
+		}
+	}
+
+	// Prefixes "no" and "no-" mean to turn warning off.
+	if (p[0] == 'n' && p[1] == 'o') {
+		p += 2;
+		if (p[0] == '-')
+			p++;
+		flag = WARNING_FORCE_OFF;
+	}
+
+	for (i = 0; i < n; i++) {
+		if (!strcmp(p,warnings[i].name)) {
+			*warnings[i].flag = flag;
+			return next;
+		}
+	}
+
+	// Unknown.
+	return NULL;
+}
+
+static char **handle_switch_W(char *arg, char **next)
+{
+	char ** ret = handle_onoff_switch(arg, next, warnings, ARRAY_SIZE(warnings));
+	if (ret)
+		return ret;
+
+	// Unknown.
+	return next;
+}
+
+static struct warning debugs[] = {
+	{ "entry", &dbg_entry},
+	{ "dead", &dbg_dead},
+};
+
+
+static char **handle_switch_v(char *arg, char **next)
+{
+	char ** ret = handle_onoff_switch(arg, next, debugs, ARRAY_SIZE(debugs));
+	if (ret)
+		return ret;
+
+	// Unknown.
+	do {
+		verbose++;
+	} while (*++arg == 'v');
+	return next;
+}
+
+static struct warning dumps[] = {
+	{ "D", &dump_macro_defs},
+};
+
+static char **handle_switch_d(char *arg, char **next)
+{
+	char ** ret = handle_onoff_switch(arg, next, dumps, ARRAY_SIZE(dumps));
+	if (ret)
+		return ret;
+
+	return next;
+}
+
+
+static void handle_onoff_switch_finalize(const struct warning warnings[], int n)
+{
+	unsigned i;
+
+	for (i = 0; i < n; i++) {
+		if (*warnings[i].flag == WARNING_FORCE_OFF)
+			*warnings[i].flag = WARNING_OFF;
+	}
+}
+
+static void handle_switch_W_finalize(void)
+{
+	handle_onoff_switch_finalize(warnings, ARRAY_SIZE(warnings));
+
+	/* default Wdeclarationafterstatement based on the C dialect */
+	if (-1 == Wdeclarationafterstatement)
+	{
+		switch (standard)
+		{
+			case STANDARD_C89:
+			case STANDARD_C94:
+				Wdeclarationafterstatement = 1;
+				break;
+
+			case STANDARD_C99:
+			case STANDARD_GNU89:
+			case STANDARD_GNU99:
+			case STANDARD_C11:
+			case STANDARD_GNU11:
+				Wdeclarationafterstatement = 0;
+				break;
+
+			default:
+				assert (0);
+		}
+
+	}
+}
+
+static void handle_switch_v_finalize(void)
+{
+	handle_onoff_switch_finalize(debugs, ARRAY_SIZE(debugs));
+}
+
+static char **handle_switch_U(char *arg, char **next)
+{
+	const char *name = arg + 1;
+	if (*name == '\0')
+		name = *++next;
+	add_pre_buffer ("#undef %s\n", name);
+	return next;
+}
+
+static char **handle_switch_O(char *arg, char **next)
+{
+	int level = 1;
+	if (arg[1] >= '0' && arg[1] <= '9')
+		level = arg[1] - '0';
+	optimize = level;
+	optimize_size = arg[1] == 's';
+	return next;
+}
+
+static char **handle_switch_fmemcpy_max_count(char *arg, char **next)
+{
+	unsigned long long val;
+	char *end;
+
+	val = strtoull(arg, &end, 0);
+	if (*end != '\0' || end == arg)
+		die("error: missing argument to \"-fmemcpy-max-count=\"");
+
+	if (val == 0)
+		val = ~0ULL;
+	fmemcpy_max_count = val;
+	return next;
+}
+
+static char **handle_switch_ftabstop(char *arg, char **next)
+{
+	char *end;
+	unsigned long val;
+
+	if (*arg == '\0')
+		die("error: missing argument to \"-ftabstop=\"");
+
+	/* we silently ignore silly values */
+	val = strtoul(arg, &end, 10);
+	if (*end == '\0' && 1 <= val && val <= 100)
+		tabstop = val;
+
+	return next;
+}
+
+static int funsigned_char;
+static void handle_funsigned_char(void)
+{
+	if (funsigned_char) {
+		char_ctype.ctype.modifiers &= ~MOD_SIGNED;
+		char_ctype.ctype.modifiers |= MOD_UNSIGNED;
+	}
+}
+
+	static char **handle_switch_fdump(char *arg, char **next)
+{
+	if (!strncmp(arg, "linearize", 9)) {
+		arg += 9;
+		if (*arg == '\0')
+			fdump_linearize = 1;
+		else if (!strcmp(arg, "=only"))
+			fdump_linearize = 2;
+		else
+			goto err;
+	}
+
+	/* ignore others flags */
+	return next;
+
+err:
+	die("error: unknown flag \"-fdump-%s\"", arg);
+}
+
+static char **handle_switch_f(char *arg, char **next)
+{
+	arg++;
+
+	if (!strncmp(arg, "tabstop=", 8))
+		return handle_switch_ftabstop(arg+8, next);
+	if (!strncmp(arg, "dump-", 5))
+		return handle_switch_fdump(arg+5, next);
+	if (!strncmp(arg, "memcpy-max-count=", 17))
+		return handle_switch_fmemcpy_max_count(arg+17, next);
+
+	if (!strcmp(arg, "unsigned-char")) {
+		funsigned_char = 1;
+		return next;
+	}
+
+	/* handle switches w/ arguments above, boolean and only boolean below */
+	if (handle_simple_switch(arg, "mem-report", &fmem_report))
+		return next;
+
+	return next;
+}
+
+static char **handle_switch_G(char *arg, char **next)
+{
+	if (!strcmp (arg, "G") && *next)
+		return next + 1; // "-G 0"
+	else
+		return next;     // "-G0" or (bogus) terminal "-G"
+}
+
+static char **handle_switch_a(char *arg, char **next)
+{
+	if (!strcmp (arg, "ansi"))
+		standard = STANDARD_C89;
+
+	return next;
+}
+
+static char **handle_switch_s(char *arg, char **next)
+{
+	if (!strncmp (arg, "std=", 4))
+	{
+		arg += 4;
+
+		if (!strcmp (arg, "c89") ||
+		    !strcmp (arg, "iso9899:1990"))
+			standard = STANDARD_C89;
+
+		else if (!strcmp (arg, "iso9899:199409"))
+			standard = STANDARD_C94;
+
+		else if (!strcmp (arg, "c99") ||
+			 !strcmp (arg, "c9x") ||
+			 !strcmp (arg, "iso9899:1999") ||
+			 !strcmp (arg, "iso9899:199x"))
+			standard = STANDARD_C99;
+
+		else if (!strcmp (arg, "gnu89"))
+			standard = STANDARD_GNU89;
+
+		else if (!strcmp (arg, "gnu99") || !strcmp (arg, "gnu9x"))
+			standard = STANDARD_GNU99;
+
+		else if (!strcmp(arg, "c11") ||
+			 !strcmp(arg, "c1x") ||
+			 !strcmp(arg, "iso9899:2011"))
+			standard = STANDARD_C11;
+
+		else if (!strcmp(arg, "gnu11"))
+			standard = STANDARD_GNU11;
+
+		else
+			die ("Unsupported C dialect");
+	}
+
+	return next;
+}
+
+static char **handle_nostdinc(char *arg, char **next)
+{
+	add_pre_buffer("#nostdinc\n");
+	return next;
+}
+
+static char **handle_switch_n(char *arg, char **next)
+{
+	if (!strcmp (arg, "nostdinc"))
+		return handle_nostdinc(arg, next);
+
+	return next;
+}
+
+static char **handle_base_dir(char *arg, char **next)
+{
+	gcc_base_dir = *++next;
+	if (!gcc_base_dir)
+		die("missing argument for -gcc-base-dir option");
+	return next;
+}
+
+static char **handle_no_lineno(char *arg, char **next)
+{
+	no_lineno = 1;
+	return next;
+}
+
+static char **handle_switch_g(char *arg, char **next)
+{
+	if (!strcmp (arg, "gcc-base-dir"))
+		return handle_base_dir(arg, next);
+
+	return next;
+}
+
+static char **handle_version(char *arg, char **next)
+{
+	printf("%s\n", SPARSE_VERSION);
+	exit(0);
+}
+
+static char **handle_param(char *arg, char **next)
+{
+	char *value = NULL;
+
+	/* Ignore smatch's --param-mapper */
+	if (strcmp(arg, "-mapper") == 0)
+		return next;
+
+
+	/* For now just skip any '--param=*' or '--param *' */
+	if (*arg == '\0') {
+		value = *++next;
+	} else if (isspace((unsigned char)*arg) || *arg == '=') {
+		value = ++arg;
+	}
+
+	if (!value)
+		die("missing argument for --param option");
+
+	return next;
+}
+
+struct switches {
+	const char *name;
+	char **(*fn)(char *, char **);
+	unsigned int prefix:1;
+};
+
+static char **handle_long_options(char *arg, char **next)
+{
+	static struct switches cmd[] = {
+		{ "param", handle_param, 1 },
+		{ "version", handle_version },
+		{ "nostdinc", handle_nostdinc },
+		{ "gcc-base-dir", handle_base_dir},
+		{ "no-lineno", handle_no_lineno},
+		{ NULL, NULL }
+	};
+	struct switches *s = cmd;
+
+	while (s->name) {
+		int optlen = strlen(s->name);
+		if (!strncmp(s->name, arg, optlen + !s->prefix))
+			return s->fn(arg + optlen, next);
+		s++;
+	}
+	return next;
+}
+
+static char **handle_switch(char *arg, char **next)
+{
+	switch (*arg) {
+	case 'a': return handle_switch_a(arg, next);
+	case 'D': return handle_switch_D(arg, next);
+	case 'd': return handle_switch_d(arg, next);
+	case 'E': return handle_switch_E(arg, next);
+	case 'f': return handle_switch_f(arg, next);
+	case 'g': return handle_switch_g(arg, next);
+	case 'G': return handle_switch_G(arg, next);
+	case 'I': return handle_switch_I(arg, next);
+	case 'i': return handle_switch_i(arg, next);
+	case 'M': return handle_switch_M(arg, next);
+	case 'm': return handle_switch_m(arg, next);
+	case 'n': return handle_switch_n(arg, next);
+	case 'o': return handle_switch_o(arg, next);
+	case 'O': return handle_switch_O(arg, next);
+	case 's': return handle_switch_s(arg, next);
+	case 'U': return handle_switch_U(arg, next);
+	case 'v': return handle_switch_v(arg, next);
+	case 'W': return handle_switch_W(arg, next);
+	case '-': return handle_long_options(arg + 1, next);
+	default:
+		break;
+	}
+
+	/*
+	 * Ignore unknown command line options:
+	 * they're probably gcc switches
+	 */
+	return next;
+}
+
+static void predefined_sizeof(const char *name, unsigned bits)
+{
+	add_pre_buffer("#weak_define __SIZEOF_%s__ %d\n", name, bits/8);
+}
+
+static void predefined_max(const char *name, const char *suffix, unsigned bits)
+{
+	unsigned long long max = (1ULL << (bits - 1 )) - 1;
+
+	add_pre_buffer("#weak_define __%s_MAX__ %#llx%s\n", name, max, suffix);
+}
+
+static void predefined_type_size(const char *name, const char *suffix, unsigned bits)
+{
+	predefined_max(name, suffix, bits);
+	predefined_sizeof(name, bits);
+}
+
+static void predefined_macros(void)
+{
+	add_pre_buffer("#define __CHECKER__ 1\n");
+
+	predefined_sizeof("SHORT", bits_in_short);
+	predefined_max("SHRT", "", bits_in_short);
+	predefined_max("SCHAR", "", bits_in_char);
+	predefined_max("WCHAR", "", bits_in_wchar);
+	add_pre_buffer("#weak_define __CHAR_BIT__ %d\n", bits_in_char);
+
+	predefined_type_size("INT", "", bits_in_int);
+	predefined_type_size("LONG", "L", bits_in_long);
+	predefined_type_size("LONG_LONG", "LL", bits_in_longlong);
+
+	predefined_sizeof("INT128", 128);
+
+	predefined_sizeof("SIZE_T", bits_in_pointer);
+	predefined_sizeof("PTRDIFF_T", bits_in_pointer);
+	predefined_sizeof("POINTER", bits_in_pointer);
+
+	predefined_sizeof("FLOAT", bits_in_float);
+	predefined_sizeof("DOUBLE", bits_in_double);
+	predefined_sizeof("LONG_DOUBLE", bits_in_longdouble);
+
+	add_pre_buffer("#weak_define __%s_ENDIAN__ 1\n",
+		arch_big_endian ? "BIG" : "LITTLE");
+
+	add_pre_buffer("#weak_define __ORDER_LITTLE_ENDIAN__ 1234\n");
+	add_pre_buffer("#weak_define __ORDER_BIG_ENDIAN__ 4321\n");
+	add_pre_buffer("#weak_define __ORDER_PDP_ENDIAN__ 3412\n");
+	add_pre_buffer("#weak_define __BYTE_ORDER__ __ORDER_%s_ENDIAN__\n",
+		arch_big_endian ? "BIG" : "LITTLE");
+
+	add_pre_buffer("#weak_define __PRAGMA_REDEFINE_EXTNAME 1\n");
+
+	/*
+	 * This is far from perfect...
+	 */
+#ifdef	__sun
+	add_pre_buffer("#weak_define __unix__ 1\n");
+	add_pre_buffer("#weak_define __unix 1\n");
+	add_pre_buffer("#weak_define unix 1\n");
+	add_pre_buffer("#weak_define __sun__ 1\n");
+	add_pre_buffer("#weak_define __sun 1\n");
+	add_pre_buffer("#weak_define sun 1\n");
+	add_pre_buffer("#weak_define __svr4__ 1\n");
+#endif
+}
+
+void declare_builtin_functions(void)
+{
+	/* Gaah. gcc knows tons of builtin <string.h> functions */
+	add_pre_buffer("extern void *__builtin_memchr(const void *, int, __SIZE_TYPE__);\n");
+	add_pre_buffer("extern void *__builtin_memcpy(void *, const void *, __SIZE_TYPE__);\n");
+	add_pre_buffer("extern void *__builtin_mempcpy(void *, const void *, __SIZE_TYPE__);\n");
+	add_pre_buffer("extern void *__builtin_memmove(void *, const void *, __SIZE_TYPE__);\n");
+	add_pre_buffer("extern void *__builtin_memset(void *, int, __SIZE_TYPE__);\n");
+	add_pre_buffer("extern int __builtin_memcmp(const void *, const void *, __SIZE_TYPE__);\n");
+	add_pre_buffer("extern char *__builtin_strcat(char *, const char *);\n");
+	add_pre_buffer("extern char *__builtin_strncat(char *, const char *, __SIZE_TYPE__);\n");
+	add_pre_buffer("extern int __builtin_strcmp(const char *, const char *);\n");
+	add_pre_buffer("extern int __builtin_strncmp(const char *, const char *, __SIZE_TYPE__);\n");
+	add_pre_buffer("extern int __builtin_strcasecmp(const char *, const char *);\n");
+	add_pre_buffer("extern int __builtin_strncasecmp(const char *, const char *, __SIZE_TYPE__);\n");
+	add_pre_buffer("extern char *__builtin_strchr(const char *, int);\n");
+	add_pre_buffer("extern char *__builtin_strrchr(const char *, int);\n");
+	add_pre_buffer("extern char *__builtin_strcpy(char *, const char *);\n");
+	add_pre_buffer("extern char *__builtin_strncpy(char *, const char *, __SIZE_TYPE__);\n");
+	add_pre_buffer("extern char *__builtin_strdup(const char *);\n");
+	add_pre_buffer("extern char *__builtin_strndup(const char *, __SIZE_TYPE__);\n");
+	add_pre_buffer("extern __SIZE_TYPE__ __builtin_strspn(const char *, const char *);\n");
+	add_pre_buffer("extern __SIZE_TYPE__ __builtin_strcspn(const char *, const char *);\n");
+	add_pre_buffer("extern char * __builtin_strpbrk(const char *, const char *);\n");
+	add_pre_buffer("extern char* __builtin_stpcpy(const char *, const char*);\n");
+	add_pre_buffer("extern char* __builtin_stpncpy(const char *, const char*, __SIZE_TYPE__);\n");
+	add_pre_buffer("extern __SIZE_TYPE__ __builtin_strlen(const char *);\n");
+	add_pre_buffer("extern char *__builtin_strstr(const char *, const char *);\n");
+	add_pre_buffer("extern char *__builtin_strcasestr(const char *, const char *);\n");
+	add_pre_buffer("extern char *__builtin_strnstr(const char *, const char *, __SIZE_TYPE__);\n");
+
+	/* And even some from <strings.h> */
+	add_pre_buffer("extern int  __builtin_bcmp(const void *, const void *, __SIZE_TYPE__);\n");
+	add_pre_buffer("extern void __builtin_bcopy(const void *, void *, __SIZE_TYPE__);\n");
+	add_pre_buffer("extern void __builtin_bzero(void *, __SIZE_TYPE__);\n");
+	add_pre_buffer("extern char*__builtin_index(const char *, int);\n");
+	add_pre_buffer("extern char*__builtin_rindex(const char *, int);\n");
+
+	/* And bitwise operations.. */
+	add_pre_buffer("extern int __builtin_clrsb(int);\n");
+	add_pre_buffer("extern int __builtin_clrsbl(long);\n");
+	add_pre_buffer("extern int __builtin_clrsbll(long long);\n");
+	add_pre_buffer("extern int __builtin_clz(int);\n");
+	add_pre_buffer("extern int __builtin_clzl(long);\n");
+	add_pre_buffer("extern int __builtin_clzll(long long);\n");
+	add_pre_buffer("extern int __builtin_ctz(int);\n");
+	add_pre_buffer("extern int __builtin_ctzl(long);\n");
+	add_pre_buffer("extern int __builtin_ctzll(long long);\n");
+	add_pre_buffer("extern int __builtin_ffs(int);\n");
+	add_pre_buffer("extern int __builtin_ffsl(long);\n");
+	add_pre_buffer("extern int __builtin_ffsll(long long);\n");
+	add_pre_buffer("extern int __builtin_parity(unsigned int);\n");
+	add_pre_buffer("extern int __builtin_parityl(unsigned long);\n");
+	add_pre_buffer("extern int __builtin_parityll(unsigned long long);\n");
+	add_pre_buffer("extern int __builtin_popcount(unsigned int);\n");
+	add_pre_buffer("extern int __builtin_popcountl(unsigned long);\n");
+	add_pre_buffer("extern int __builtin_popcountll(unsigned long long);\n");
+
+	/* And byte swaps.. */
+	add_pre_buffer("extern unsigned short __builtin_bswap16(unsigned short);\n");
+	add_pre_buffer("extern unsigned int __builtin_bswap32(unsigned int);\n");
+	add_pre_buffer("extern unsigned long long __builtin_bswap64(unsigned long long);\n");
+
+	/* And atomic memory access functions.. */
+	add_pre_buffer("extern int __sync_fetch_and_add(void *, ...);\n");
+	add_pre_buffer("extern int __sync_fetch_and_sub(void *, ...);\n");
+	add_pre_buffer("extern int __sync_fetch_and_or(void *, ...);\n");
+	add_pre_buffer("extern int __sync_fetch_and_and(void *, ...);\n");
+	add_pre_buffer("extern int __sync_fetch_and_xor(void *, ...);\n");
+	add_pre_buffer("extern int __sync_fetch_and_nand(void *, ...);\n");
+	add_pre_buffer("extern int __sync_add_and_fetch(void *, ...);\n");
+	add_pre_buffer("extern int __sync_sub_and_fetch(void *, ...);\n");
+	add_pre_buffer("extern int __sync_or_and_fetch(void *, ...);\n");
+	add_pre_buffer("extern int __sync_and_and_fetch(void *, ...);\n");
+	add_pre_buffer("extern int __sync_xor_and_fetch(void *, ...);\n");
+	add_pre_buffer("extern int __sync_nand_and_fetch(void *, ...);\n");
+	add_pre_buffer("extern int __sync_bool_compare_and_swap(void *, ...);\n");
+	add_pre_buffer("extern int __sync_val_compare_and_swap(void *, ...);\n");
+	add_pre_buffer("extern void __sync_synchronize();\n");
+	add_pre_buffer("extern int __sync_lock_test_and_set(void *, ...);\n");
+	add_pre_buffer("extern void __sync_lock_release(void *, ...);\n");
+
+	/* And some random ones.. */
+	add_pre_buffer("extern void *__builtin_return_address(unsigned int);\n");
+	add_pre_buffer("extern void *__builtin_extract_return_addr(void *);\n");
+	add_pre_buffer("extern void *__builtin_frame_address(unsigned int);\n");
+	add_pre_buffer("extern void __builtin_trap(void);\n");
+	add_pre_buffer("extern void *__builtin_alloca(__SIZE_TYPE__);\n");
+	add_pre_buffer("extern void __builtin_prefetch (const void *, ...);\n");
+	add_pre_buffer("extern long __builtin_alpha_extbl(long, long);\n");
+	add_pre_buffer("extern long __builtin_alpha_extwl(long, long);\n");
+	add_pre_buffer("extern long __builtin_alpha_insbl(long, long);\n");
+	add_pre_buffer("extern long __builtin_alpha_inswl(long, long);\n");
+	add_pre_buffer("extern long __builtin_alpha_insql(long, long);\n");
+	add_pre_buffer("extern long __builtin_alpha_inslh(long, long);\n");
+	add_pre_buffer("extern long __builtin_alpha_cmpbge(long, long);\n");
+	add_pre_buffer("extern int  __builtin_abs(int);\n");
+	add_pre_buffer("extern long __builtin_labs(long);\n");
+	add_pre_buffer("extern long long __builtin_llabs(long long);\n");
+	add_pre_buffer("extern double __builtin_fabs(double);\n");
+	add_pre_buffer("extern __SIZE_TYPE__ __builtin_va_arg_pack_len(void);\n");
+
+	/* Add Blackfin-specific stuff */
+	add_pre_buffer(
+		"#ifdef __bfin__\n"
+		"extern void __builtin_bfin_csync(void);\n"
+		"extern void __builtin_bfin_ssync(void);\n"
+		"extern int __builtin_bfin_norm_fr1x32(int);\n"
+		"#endif\n"
+	);
+
+	/* And some floating point stuff.. */
+	add_pre_buffer("extern int __builtin_isgreater(float, float);\n");
+	add_pre_buffer("extern int __builtin_isgreaterequal(float, float);\n");
+	add_pre_buffer("extern int __builtin_isless(float, float);\n");
+	add_pre_buffer("extern int __builtin_islessequal(float, float);\n");
+	add_pre_buffer("extern int __builtin_islessgreater(float, float);\n");
+	add_pre_buffer("extern int __builtin_isunordered(float, float);\n");
+
+	/* And some INFINITY / NAN stuff.. */
+	add_pre_buffer("extern double __builtin_huge_val(void);\n");
+	add_pre_buffer("extern float __builtin_huge_valf(void);\n");
+	add_pre_buffer("extern long double __builtin_huge_vall(void);\n");
+	add_pre_buffer("extern double __builtin_inf(void);\n");
+	add_pre_buffer("extern float __builtin_inff(void);\n");
+	add_pre_buffer("extern long double __builtin_infl(void);\n");
+	add_pre_buffer("extern double __builtin_nan(const char *);\n");
+	add_pre_buffer("extern float __builtin_nanf(const char *);\n");
+	add_pre_buffer("extern long double __builtin_nanl(const char *);\n");
+	add_pre_buffer("extern int __builtin_isinf_sign(float);\n");
+	add_pre_buffer("extern int __builtin_isfinite(float);\n");
+	add_pre_buffer("extern int __builtin_isnan(float);\n");
+
+	/* And some __FORTIFY_SOURCE ones.. */
+	add_pre_buffer ("extern __SIZE_TYPE__ __builtin_object_size(const void *, int);\n");
+	add_pre_buffer ("extern void * __builtin___memcpy_chk(void *, const void *, __SIZE_TYPE__, __SIZE_TYPE__);\n");
+	add_pre_buffer ("extern void * __builtin___memmove_chk(void *, const void *, __SIZE_TYPE__, __SIZE_TYPE__);\n");
+	add_pre_buffer ("extern void * __builtin___mempcpy_chk(void *, const void *, __SIZE_TYPE__, __SIZE_TYPE__);\n");
+	add_pre_buffer ("extern void * __builtin___memset_chk(void *, int, __SIZE_TYPE__, __SIZE_TYPE__);\n");
+	add_pre_buffer ("extern int __builtin___sprintf_chk(char *, int, __SIZE_TYPE__, const char *, ...);\n");
+	add_pre_buffer ("extern int __builtin___snprintf_chk(char *, __SIZE_TYPE__, int , __SIZE_TYPE__, const char *, ...);\n");
+	add_pre_buffer ("extern char * __builtin___stpcpy_chk(char *, const char *, __SIZE_TYPE__);\n");
+	add_pre_buffer ("extern char * __builtin___strcat_chk(char *, const char *, __SIZE_TYPE__);\n");
+	add_pre_buffer ("extern char * __builtin___strcpy_chk(char *, const char *, __SIZE_TYPE__);\n");
+	add_pre_buffer ("extern char * __builtin___strncat_chk(char *, const char *, __SIZE_TYPE__, __SIZE_TYPE__);\n");
+	add_pre_buffer ("extern char * __builtin___strncpy_chk(char *, const char *, __SIZE_TYPE__, __SIZE_TYPE__);\n");
+	add_pre_buffer ("extern int __builtin___vsprintf_chk(char *, int, __SIZE_TYPE__, const char *, __builtin_va_list);\n");
+	add_pre_buffer ("extern int __builtin___vsnprintf_chk(char *, __SIZE_TYPE__, int, __SIZE_TYPE__, const char *, __builtin_va_list ap);\n");
+	add_pre_buffer ("extern void __builtin_unreachable(void);\n");
+
+	/* And some from <stdlib.h> */
+	add_pre_buffer("extern void __builtin_abort(void);\n");
+	add_pre_buffer("extern void *__builtin_calloc(__SIZE_TYPE__, __SIZE_TYPE__);\n");
+	add_pre_buffer("extern void __builtin_exit(int);\n");
+	add_pre_buffer("extern void *__builtin_malloc(__SIZE_TYPE__);\n");
+	add_pre_buffer("extern void *__builtin_realloc(void *, __SIZE_TYPE__);\n");
+	add_pre_buffer("extern void __builtin_free(void *);\n");
+
+	/* And some from <stdio.h> */
+	add_pre_buffer("extern int __builtin_printf(const char *, ...);\n");
+	add_pre_buffer("extern int __builtin_sprintf(char *, const char *, ...);\n");
+	add_pre_buffer("extern int __builtin_snprintf(char *, __SIZE_TYPE__, const char *, ...);\n");
+	add_pre_buffer("extern int __builtin_puts(const char *);\n");
+	add_pre_buffer("extern int __builtin_vprintf(const char *, __builtin_va_list);\n");
+	add_pre_buffer("extern int __builtin_vsprintf(char *, const char *, __builtin_va_list);\n");
+	add_pre_buffer("extern int __builtin_vsnprintf(char *, __SIZE_TYPE__, const char *, __builtin_va_list ap);\n");
+}
+
+void create_builtin_stream(void)
+{
+	add_pre_buffer("#weak_define __GNUC__ %d\n", gcc_major);
+	add_pre_buffer("#weak_define __GNUC_MINOR__ %d\n", gcc_minor);
+	add_pre_buffer("#weak_define __GNUC_PATCHLEVEL__ %d\n", gcc_patchlevel);
+
+	/* add the multiarch include directories, if any */
+	if (multiarch_dir && *multiarch_dir) {
+		add_pre_buffer("#add_system \"/usr/include/%s\"\n", multiarch_dir);
+		add_pre_buffer("#add_system \"/usr/local/include/%s\"\n", multiarch_dir);
+	}
+
+	/* We add compiler headers path here because we have to parse
+	 * the arguments to get it, falling back to default. */
+	add_pre_buffer("#add_system \"%s/include\"\n", gcc_base_dir);
+	add_pre_buffer("#add_system \"%s/include-fixed\"\n", gcc_base_dir);
+
+	add_pre_buffer("#define __extension__\n");
+	add_pre_buffer("#define __pragma__\n");
+	add_pre_buffer("#define _Pragma(x)\n");
+
+	// gcc defines __SIZE_TYPE__ to be size_t.  For linux/i86 and
+	// solaris/sparc that is really "unsigned int" and for linux/x86_64
+	// it is "long unsigned int".  In either case we can probably
+	// get away with this.  We need the #weak_define as cgcc will define
+	// the right __SIZE_TYPE__.
+	if (size_t_ctype == &ulong_ctype)
+		add_pre_buffer("#weak_define __SIZE_TYPE__ long unsigned int\n");
+	else
+		add_pre_buffer("#weak_define __SIZE_TYPE__ unsigned int\n");
+	add_pre_buffer("#weak_define __STDC__ 1\n");
+
+	switch (standard)
+	{
+		case STANDARD_C89:
+			add_pre_buffer("#weak_define __STRICT_ANSI__\n");
+			break;
+
+		case STANDARD_C94:
+			add_pre_buffer("#weak_define __STDC_VERSION__ 199409L\n");
+			add_pre_buffer("#weak_define __STRICT_ANSI__\n");
+			break;
+
+		case STANDARD_C99:
+			add_pre_buffer("#weak_define __STDC_VERSION__ 199901L\n");
+			add_pre_buffer("#weak_define __STRICT_ANSI__\n");
+			break;
+
+		case STANDARD_GNU89:
+			break;
+
+		case STANDARD_GNU99:
+			add_pre_buffer("#weak_define __STDC_VERSION__ 199901L\n");
+			break;
+
+		case STANDARD_C11:
+			add_pre_buffer("#weak_define __STRICT_ANSI__ 1\n");
+		case STANDARD_GNU11:
+			add_pre_buffer("#weak_define __STDC_NO_ATOMICS__ 1\n");
+			add_pre_buffer("#weak_define __STDC_NO_COMPLEX__ 1\n");
+			add_pre_buffer("#weak_define __STDC_NO_THREADS__ 1\n");
+			add_pre_buffer("#weak_define __STDC_VERSION__ 201112L\n");
+			break;
+
+		default:
+			assert (0);
+	}
+
+	add_pre_buffer("#define __builtin_stdarg_start(a,b) ((a) = (__builtin_va_list)(&(b)))\n");
+	add_pre_buffer("#define __builtin_va_start(a,b) ((a) = (__builtin_va_list)(&(b)))\n");
+	add_pre_buffer("#define __builtin_ms_va_start(a,b) ((a) = (__builtin_ms_va_list)(&(b)))\n");
+	add_pre_buffer("#define __builtin_va_arg(arg,type)  ({ type __va_arg_ret = *(type *)(arg); arg += sizeof(type); __va_arg_ret; })\n");
+	add_pre_buffer("#define __builtin_va_alist (*(void *)0)\n");
+	add_pre_buffer("#define __builtin_va_arg_incr(x) ((x) + 1)\n");
+	add_pre_buffer("#define __builtin_va_copy(dest, src) ({ dest = src; (void)0; })\n");
+	add_pre_buffer("#define __builtin_ms_va_copy(dest, src) ({ dest = src; (void)0; })\n");
+	add_pre_buffer("#define __builtin_va_end(arg)\n");
+	add_pre_buffer("#define __builtin_ms_va_end(arg)\n");
+	add_pre_buffer("#define __builtin_va_arg_pack()\n");
+
+	/* FIXME! We need to do these as special magic macros at expansion time! */
+	add_pre_buffer("#define __BASE_FILE__ \"base_file.c\"\n");
+
+	if (optimize)
+		add_pre_buffer("#define __OPTIMIZE__ 1\n");
+	if (optimize_size)
+		add_pre_buffer("#define __OPTIMIZE_SIZE__ 1\n");
+}
+
+static struct symbol_list *sparse_tokenstream(struct token *token)
+{
+	int builtin = token && !token->pos.stream;
+
+	// Preprocess the stream
+	token = preprocess(token);
+
+	if (dump_macro_defs && !builtin)
+		dump_macro_definitions();
+
+	if (preprocess_only) {
+		while (!eof_token(token)) {
+			int prec = 1;
+			struct token *next = token->next;
+			const char *separator = "";
+			if (next->pos.whitespace)
+				separator = " ";
+			if (next->pos.newline) {
+				separator = "\n\t\t\t\t\t";
+				prec = next->pos.pos;
+				if (prec > 4)
+					prec = 4;
+			}
+			printf("%s%.*s", show_token(token), prec, separator);
+			token = next;
+		}
+		putchar('\n');
+
+		return NULL;
+	}
+
+	// Parse the resulting C code
+	while (!eof_token(token))
+		token = external_declaration(token, &translation_unit_used_list, NULL);
+	return translation_unit_used_list;
+}
+
+static struct symbol_list *sparse_file(const char *filename)
+{
+	int fd;
+	struct token *token;
+
+	if (strcmp (filename, "-") == 0) {
+		fd = 0;
+	} else {
+		fd = open(filename, O_RDONLY);
+		if (fd < 0)
+			die("No such file: %s", filename);
+	}
+
+	// Tokenize the input stream
+	token = tokenize(filename, fd, NULL, includepath);
+	store_all_tokens(token);
+	close(fd);
+
+	return sparse_tokenstream(token);
+}
+
+static int endswith(const char *str, const char *suffix)
+{
+	const char *found = strstr(str, suffix);
+	return (found && strcmp(found, suffix) == 0);
+}
+
+/*
+ * This handles the "-include" directive etc: we're in global
+ * scope, and all types/macros etc will affect all the following
+ * files.
+ *
+ * NOTE NOTE NOTE! "#undef" of anything in this stage will
+ * affect all subsequent files too, i.e. we can have non-local
+ * behaviour between files!
+ */
+static struct symbol_list *sparse_initial(void)
+{
+	int i;
+
+	// Prepend any "include" file to the stream.
+	// We're in global scope, it will affect all files!
+	for (i = 0; i < cmdline_include_nr; i++)
+		add_pre_buffer("#argv_include \"%s\"\n", cmdline_include[i]);
+
+	return sparse_tokenstream(pre_buffer_begin);
+}
+
+struct symbol_list *sparse_initialize(int argc, char **argv, struct string_list **filelist)
+{
+	char **args;
+	struct symbol_list *list;
+
+	// Initialize symbol stream first, so that we can add defines etc
+	init_symbols();
+	init_include_path();
+
+	progname = argv[0];
+
+	args = argv;
+	for (;;) {
+		char *arg = *++args;
+		if (!arg)
+			break;
+
+		if (arg[0] == '-' && arg[1]) {
+			args = handle_switch(arg+1, args);
+			continue;
+		}
+
+		if (endswith(arg, ".a") || endswith(arg, ".so") ||
+		    endswith(arg, ".so.1") || endswith(arg, ".o"))
+			continue;
+
+		add_ptr_list_notag(filelist, arg);
+	}
+	handle_switch_W_finalize();
+	handle_switch_v_finalize();
+
+	handle_arch_finalize();
+
+	list = NULL;
+	if (!ptr_list_empty(filelist)) {
+		// Initialize type system
+		init_ctype();
+		handle_funsigned_char();
+
+		create_builtin_stream();
+		predefined_macros();
+		if (!preprocess_only)
+			declare_builtin_functions();
+
+		list = sparse_initial();
+
+		/*
+		 * Protect the initial token allocations, since
+		 * they need to survive all the others
+		 */
+		protect_token_alloc();
+	}
+	/*
+	 * Evaluate the complete symbol list
+	 * Note: This is not needed for normal cases.
+	 *	 These symbols should only be predefined defines and
+	 *	 declaratons which will be evaluated later, when needed.
+	 *	 This is also the case when a file is directly included via
+	 *	 '-include <file>' on the command line *AND* the file only
+	 *	 contains defines, declarations and inline definitions.
+	 *	 However, in the rare cases where the given file should
+	 *	 contain some definitions, these will never be evaluated
+	 *	 and thus won't be able to be linearized correctly.
+	 *	 Hence the evaluate_symbol_list() here under.
+	 */
+	evaluate_symbol_list(list);
+	return list;
+}
+
+struct symbol_list * sparse_keep_tokens(char *filename)
+{
+	struct symbol_list *res;
+
+	/* Clear previous symbol list */
+	translation_unit_used_list = NULL;
+
+	new_file_scope();
+	res = sparse_file(filename);
+
+	/* And return it */
+	return res;
+}
+
+
+struct symbol_list * __sparse(char *filename)
+{
+	struct symbol_list *res;
+
+	res = sparse_keep_tokens(filename);
+
+	/* Drop the tokens for this file after parsing */
+	clear_token_alloc();
+
+	/* And return it */
+	return res;
+}
+
+struct symbol_list * sparse(char *filename)
+{
+	struct symbol_list *res = __sparse(filename);
+
+	if (has_error & ERROR_CURR_PHASE)
+		has_error = ERROR_PREV_PHASE;
+	/* Evaluate the complete symbol list */
+	evaluate_symbol_list(res);
+
+	return res;
+}
--- /dev/null	Fri Dec 21 15:00:13 2018
+++ new/usr/src/tools/smatch/src/lib.h	Fri Dec 21 15:00:13 2018
@@ -0,0 +1,284 @@
+#ifndef LIB_H
+#define LIB_H
+
+#include <stdlib.h>
+#include <stddef.h>
+
+/*
+ * Basic helper routine descriptions for 'sparse'.
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003 Linus Torvalds
+ *               2004 Christopher Li
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "compat.h"
+#include "ptrlist.h"
+
+#define DO_STRINGIFY(x) #x
+#define STRINGIFY(x) DO_STRINGIFY(x)
+
+#ifndef ARRAY_SIZE
+#define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0]))
+#endif
+
+extern int verbose, optimize, optimize_size, preprocessing;
+extern int die_if_error;
+extern int parse_error;
+extern int repeat_phase, merge_phi_sources;
+extern int gcc_major, gcc_minor, gcc_patchlevel;
+
+extern unsigned int hexval(unsigned int c);
+
+struct position {
+	unsigned int type:6,
+		     stream:14,
+		     newline:1,
+		     whitespace:1,
+		     pos:10;
+	unsigned int line:31,
+		     noexpand:1;
+};
+
+struct ident;
+struct token;
+struct symbol;
+struct statement;
+struct expression;
+struct basic_block;
+struct entrypoint;
+struct instruction;
+struct multijmp;
+struct pseudo;
+
+DECLARE_PTR_LIST(symbol_list, struct symbol);
+DECLARE_PTR_LIST(statement_list, struct statement);
+DECLARE_PTR_LIST(expression_list, struct expression);
+DECLARE_PTR_LIST(basic_block_list, struct basic_block);
+DECLARE_PTR_LIST(instruction_list, struct instruction);
+DECLARE_PTR_LIST(multijmp_list, struct multijmp);
+DECLARE_PTR_LIST(pseudo_list, struct pseudo);
+DECLARE_PTR_LIST(ident_list, struct ident);
+DECLARE_PTR_LIST(string_list, char);
+
+typedef struct pseudo *pseudo_t;
+
+struct token *skip_to(struct token *, int);
+struct token *expect(struct token *, int, const char *);
+#ifdef __GNUC__
+#define FORMAT_ATTR(pos) __attribute__ ((__format__ (__printf__, pos, pos+1)))
+#define NORETURN_ATTR __attribute__ ((__noreturn__))
+#define SENTINEL_ATTR __attribute__ ((__sentinel__))
+#else
+#define FORMAT_ATTR(pos)
+#define NORETURN_ATTR
+#define SENTINEL_ATTR
+#endif
+
+FORMAT_ATTR(1) NORETURN_ATTR
+extern void die(const char *, ...);
+
+FORMAT_ATTR(2) NORETURN_ATTR
+extern void error_die(struct position, const char *, ...);
+
+extern void info(struct position, const char *, ...) FORMAT_ATTR(2);
+extern void warning(struct position, const char *, ...) FORMAT_ATTR(2);
+extern void sparse_error(struct position, const char *, ...) FORMAT_ATTR(2);
+extern void expression_error(struct expression *, const char *, ...) FORMAT_ATTR(2);
+
+#define	ERROR_CURR_PHASE	(1 << 0)
+#define	ERROR_PREV_PHASE	(1 << 1)
+extern int has_error;
+
+extern void add_pre_buffer(const char *fmt, ...) FORMAT_ATTR(1);
+
+extern int preprocess_only;
+
+extern int Waddress;
+extern int Waddress_space;
+extern int Wbitwise;
+extern int Wcast_to_as;
+extern int Wcast_truncate;
+extern int Wconstant_suffix;
+extern int Wconstexpr_not_const;
+extern int Wcontext;
+extern int Wdecl;
+extern int Wdeclarationafterstatement;
+extern int Wdefault_bitfield_sign;
+extern int Wdesignated_init;
+extern int Wdo_while;
+extern int Wenum_mismatch;
+extern int Wexternal_function_has_definition;
+extern int Wsparse_error;
+extern int Wimplicit_int;
+extern int Winit_cstring;
+extern int Wmemcpy_max_count;
+extern int Wnon_pointer_null;
+extern int Wold_initializer;
+extern int Wold_style_definition;
+extern int Wone_bit_signed_bitfield;
+extern int Woverride_init;
+extern int Woverride_init_all;
+extern int Woverride_init_whole_range;
+extern int Wparen_string;
+extern int Wpointer_arith;
+extern int Wptr_subtraction_blows;
+extern int Wreturn_void;
+extern int Wshadow;
+extern int Wsizeof_bool;
+extern int Wstrict_prototypes;
+extern int Wtautological_compare;
+extern int Wtransparent_union;
+extern int Wtypesign;
+extern int Wundef;
+extern int Wuninitialized;
+extern int Wunknown_attribute;
+extern int Wvla;
+
+extern int dump_macro_defs;
+
+extern int dbg_entry;
+extern int dbg_dead;
+
+extern int fmem_report;
+extern int fdump_linearize;
+extern unsigned long long fmemcpy_max_count;
+
+extern int arch_m64;
+extern int arch_msize_long;
+extern int arch_big_endian;
+
+extern void declare_builtin_functions(void);
+extern void create_builtin_stream(void);
+extern void dump_macro_definitions(void);
+extern struct symbol_list *sparse_initialize(int argc, char **argv, struct string_list **files);
+extern struct symbol_list *__sparse(char *filename);
+extern struct symbol_list *sparse_keep_tokens(char *filename);
+extern struct symbol_list *sparse(char *filename);
+extern void report_stats(void);
+
+static inline int symbol_list_size(struct symbol_list *list)
+{
+	return ptr_list_size((struct ptr_list *)(list));
+}
+
+static inline int statement_list_size(struct statement_list *list)
+{
+	return ptr_list_size((struct ptr_list *)(list));
+}
+
+static inline int expression_list_size(struct expression_list *list)
+{
+	return ptr_list_size((struct ptr_list *)(list));
+}
+
+static inline int instruction_list_size(struct instruction_list *list)
+{
+	return ptr_list_size((struct ptr_list *)(list));
+}
+
+static inline int pseudo_list_size(struct pseudo_list *list)
+{
+	return ptr_list_size((struct ptr_list *)(list));
+}
+
+static inline int bb_list_size(struct basic_block_list *list)
+{
+	return ptr_list_size((struct ptr_list *)(list));
+}
+
+static inline void free_instruction_list(struct instruction_list **head)
+{
+	free_ptr_list((struct ptr_list **)head);
+}
+
+static inline struct instruction * delete_last_instruction(struct instruction_list **head)
+{
+	return undo_ptr_list_last((struct ptr_list **)head);
+}
+
+static inline struct basic_block * delete_last_basic_block(struct basic_block_list **head)
+{
+	return delete_ptr_list_last((struct ptr_list **)head);
+}
+
+static inline struct basic_block *first_basic_block(struct basic_block_list *head)
+{
+	return first_ptr_list((struct ptr_list *)head);
+}
+static inline struct instruction *last_instruction(struct instruction_list *head)
+{
+	return last_ptr_list((struct ptr_list *)head);
+}
+
+static inline struct instruction *first_instruction(struct instruction_list *head)
+{
+	return first_ptr_list((struct ptr_list *)head);
+}
+
+static inline struct expression *first_expression(struct expression_list *head)
+{
+	return first_ptr_list((struct ptr_list *)head);
+}
+
+static inline pseudo_t first_pseudo(struct pseudo_list *head)
+{
+	return first_ptr_list((struct ptr_list *)head);
+}
+
+static inline void concat_symbol_list(struct symbol_list *from, struct symbol_list **to)
+{
+	concat_ptr_list((struct ptr_list *)from, (struct ptr_list **)to);
+}
+
+static inline void concat_basic_block_list(struct basic_block_list *from, struct basic_block_list **to)
+{
+	concat_ptr_list((struct ptr_list *)from, (struct ptr_list **)to);
+}
+
+static inline void concat_instruction_list(struct instruction_list *from, struct instruction_list **to)
+{
+	concat_ptr_list((struct ptr_list *)from, (struct ptr_list **)to);
+}
+
+static inline void add_symbol(struct symbol_list **list, struct symbol *sym)
+{
+	add_ptr_list(list, sym);
+}
+
+static inline void add_statement(struct statement_list **list, struct statement *stmt)
+{
+	add_ptr_list(list, stmt);
+}
+
+static inline void add_expression(struct expression_list **list, struct expression *expr)
+{
+	add_ptr_list(list, expr);
+}
+
+static inline void add_ident(struct ident_list **list, struct ident *ident)
+{
+	add_ptr_list(list, ident);
+}
+
+#define hashval(x) ((unsigned long)(x))
+
+#endif
--- /dev/null	Fri Dec 21 15:00:13 2018
+++ new/usr/src/tools/smatch/src/linearize.c	Fri Dec 21 15:00:13 2018
@@ -0,0 +1,2293 @@
+/*
+ * Linearize - walk the statement tree (but _not_ the expressions)
+ * to generate a linear version of it and the basic blocks. 
+ *
+ * NOTE! We're not interested in the actual sub-expressions yet,
+ * even though they can generate conditional branches and
+ * subroutine calls. That's all "local" behaviour.
+ *
+ * Copyright (C) 2004 Linus Torvalds
+ * Copyright (C) 2004 Christopher Li
+ */
+
+#include <string.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+
+#include "parse.h"
+#include "expression.h"
+#include "linearize.h"
+#include "flow.h"
+#include "target.h"
+
+pseudo_t linearize_statement(struct entrypoint *ep, struct statement *stmt);
+pseudo_t linearize_expression(struct entrypoint *ep, struct expression *expr);
+
+static pseudo_t add_binary_op(struct entrypoint *ep, struct symbol *ctype, int op, pseudo_t left, pseudo_t right);
+static pseudo_t add_setval(struct entrypoint *ep, struct symbol *ctype, struct expression *val);
+static pseudo_t linearize_one_symbol(struct entrypoint *ep, struct symbol *sym);
+
+struct access_data;
+static pseudo_t add_load(struct entrypoint *ep, struct access_data *);
+static pseudo_t linearize_initializer(struct entrypoint *ep, struct expression *initializer, struct access_data *);
+static pseudo_t cast_pseudo(struct entrypoint *ep, pseudo_t src, struct symbol *from, struct symbol *to);
+
+struct pseudo void_pseudo = {};
+
+static struct position current_pos;
+
+ALLOCATOR(pseudo_user, "pseudo_user");
+
+static struct instruction *alloc_instruction(int opcode, int size)
+{
+	struct instruction * insn = __alloc_instruction(0);
+	insn->opcode = opcode;
+	insn->size = size;
+	insn->pos = current_pos;
+	return insn;
+}
+
+static inline int type_size(struct symbol *type)
+{
+	return type ? type->bit_size > 0 ? type->bit_size : 0 : 0;
+}
+
+static struct instruction *alloc_typed_instruction(int opcode, struct symbol *type)
+{
+	struct instruction *insn = alloc_instruction(opcode, type_size(type));
+	insn->type = type;
+	return insn;
+}
+
+static struct entrypoint *alloc_entrypoint(void)
+{
+	return __alloc_entrypoint(0);
+}
+
+static struct basic_block *alloc_basic_block(struct entrypoint *ep, struct position pos)
+{
+	static int nr;
+	struct basic_block *bb = __alloc_basic_block(0);
+	bb->context = -1;
+	bb->pos = pos;
+	bb->ep = ep;
+	bb->nr = nr++;
+	return bb;
+}
+
+static struct multijmp *alloc_multijmp(struct basic_block *target, int begin, int end)
+{
+	struct multijmp *multijmp = __alloc_multijmp(0);
+	multijmp->target = target;
+	multijmp->begin = begin;
+	multijmp->end = end;
+	return multijmp;
+}
+
+static inline int regno(pseudo_t n)
+{
+	int retval = -1;
+	if (n && n->type == PSEUDO_REG)
+		retval = n->nr;
+	return retval;
+}
+
+const char *show_pseudo(pseudo_t pseudo)
+{
+	static int n;
+	static char buffer[4][64];
+	char *buf;
+	int i;
+
+	if (!pseudo)
+		return "no pseudo";
+	if (pseudo == VOID)
+		return "VOID";
+	buf = buffer[3 & ++n];
+	switch(pseudo->type) {
+	case PSEUDO_SYM: {
+		struct symbol *sym = pseudo->sym;
+		struct expression *expr;
+
+		if (sym->bb_target) {
+			snprintf(buf, 64, ".L%u", sym->bb_target->nr);
+			break;
+		}
+		if (sym->ident) {
+			snprintf(buf, 64, "%s", show_ident(sym->ident));
+			break;
+		}
+		expr = sym->initializer;
+		snprintf(buf, 64, "<anon symbol:%p>", sym);
+		if (expr) {
+			switch (expr->type) {
+			case EXPR_VALUE:
+				snprintf(buf, 64, "<symbol value: %lld>", expr->value);
+				break;
+			case EXPR_STRING:
+				return show_string(expr->string);
+			default:
+				break;
+			}
+		}
+		break;
+	}
+	case PSEUDO_REG:
+		i = snprintf(buf, 64, "%%r%d", pseudo->nr);
+		if (pseudo->ident)
+			sprintf(buf+i, "(%s)", show_ident(pseudo->ident));
+		break;
+	case PSEUDO_VAL: {
+		long long value = pseudo->value;
+		if (value > 1000 || value < -1000)
+			snprintf(buf, 64, "$%#llx", value);
+		else
+			snprintf(buf, 64, "$%lld", value);
+		break;
+	}
+	case PSEUDO_ARG:
+		snprintf(buf, 64, "%%arg%d", pseudo->nr);
+		break;
+	case PSEUDO_PHI:
+		i = snprintf(buf, 64, "%%phi%d", pseudo->nr);
+		if (pseudo->ident)
+			sprintf(buf+i, "(%s)", show_ident(pseudo->ident));
+		break;
+	default:
+		snprintf(buf, 64, "<bad pseudo type %d>", pseudo->type);
+	}
+	return buf;
+}
+
+static const char *opcodes[] = {
+	[OP_BADOP] = "bad_op",
+
+	/* Fn entrypoint */
+	[OP_ENTRY] = "<entry-point>",
+
+	/* Terminator */
+	[OP_RET] = "ret",
+	[OP_BR] = "br",
+	[OP_CBR] = "cbr",
+	[OP_SWITCH] = "switch",
+	[OP_INVOKE] = "invoke",
+	[OP_COMPUTEDGOTO] = "jmp *",
+	[OP_UNWIND] = "unwind",
+	
+	/* Binary */
+	[OP_ADD] = "add",
+	[OP_SUB] = "sub",
+	[OP_MULU] = "mulu",
+	[OP_MULS] = "muls",
+	[OP_DIVU] = "divu",
+	[OP_DIVS] = "divs",
+	[OP_MODU] = "modu",
+	[OP_MODS] = "mods",
+	[OP_SHL] = "shl",
+	[OP_LSR] = "lsr",
+	[OP_ASR] = "asr",
+	
+	/* Logical */
+	[OP_AND] = "and",
+	[OP_OR] = "or",
+	[OP_XOR] = "xor",
+	[OP_AND_BOOL] = "and-bool",
+	[OP_OR_BOOL] = "or-bool",
+
+	/* Binary comparison */
+	[OP_SET_EQ] = "seteq",
+	[OP_SET_NE] = "setne",
+	[OP_SET_LE] = "setle",
+	[OP_SET_GE] = "setge",
+	[OP_SET_LT] = "setlt",
+	[OP_SET_GT] = "setgt",
+	[OP_SET_B] = "setb",
+	[OP_SET_A] = "seta",
+	[OP_SET_BE] = "setbe",
+	[OP_SET_AE] = "setae",
+
+	/* Uni */
+	[OP_NOT] = "not",
+	[OP_NEG] = "neg",
+
+	/* Special three-input */
+	[OP_SEL] = "select",
+	
+	/* Memory */
+	[OP_MALLOC] = "malloc",
+	[OP_FREE] = "free",
+	[OP_ALLOCA] = "alloca",
+	[OP_LOAD] = "load",
+	[OP_STORE] = "store",
+	[OP_SETVAL] = "set",
+	[OP_SYMADDR] = "symaddr",
+	[OP_GET_ELEMENT_PTR] = "getelem",
+
+	/* Other */
+	[OP_PHI] = "phi",
+	[OP_PHISOURCE] = "phisrc",
+	[OP_CAST] = "cast",
+	[OP_SCAST] = "scast",
+	[OP_FPCAST] = "fpcast",
+	[OP_PTRCAST] = "ptrcast",
+	[OP_INLINED_CALL] = "# call",
+	[OP_CALL] = "call",
+	[OP_VANEXT] = "va_next",
+	[OP_VAARG] = "va_arg",
+	[OP_SLICE] = "slice",
+	[OP_SNOP] = "snop",
+	[OP_LNOP] = "lnop",
+	[OP_NOP] = "nop",
+	[OP_DEATHNOTE] = "dead",
+	[OP_ASM] = "asm",
+
+	/* Sparse tagging (line numbers, context, whatever) */
+	[OP_CONTEXT] = "context",
+	[OP_RANGE] = "range-check",
+
+	[OP_COPY] = "copy",
+};
+
+static char *show_asm_constraints(char *buf, const char *sep, struct asm_constraint_list *list)
+{
+	struct asm_constraint *entry;
+
+	FOR_EACH_PTR(list, entry) {
+		buf += sprintf(buf, "%s\"%s\"", sep, entry->constraint);
+		if (entry->pseudo)
+			buf += sprintf(buf, " (%s)", show_pseudo(entry->pseudo));
+		if (entry->ident)
+			buf += sprintf(buf, " [%s]", show_ident(entry->ident));
+		sep = ", ";		
+	} END_FOR_EACH_PTR(entry);
+	return buf;
+}
+
+static char *show_asm(char *buf, struct instruction *insn)
+{
+	struct asm_rules *rules = insn->asm_rules;
+
+	buf += sprintf(buf, "\"%s\"", insn->string);
+	buf = show_asm_constraints(buf, "\n\t\tout: ", rules->outputs);
+	buf = show_asm_constraints(buf, "\n\t\tin: ", rules->inputs);
+	buf = show_asm_constraints(buf, "\n\t\tclobber: ", rules->clobbers);
+	return buf;
+}
+
+const char *show_instruction(struct instruction *insn)
+{
+	int opcode = insn->opcode;
+	static char buffer[4096];
+	char *buf;
+
+	buf = buffer;
+	if (!insn->bb)
+		buf += sprintf(buf, "# ");
+
+	if (opcode < ARRAY_SIZE(opcodes)) {
+		const char *op = opcodes[opcode];
+		if (!op)
+			buf += sprintf(buf, "opcode:%d", opcode);
+		else
+			buf += sprintf(buf, "%s", op);
+		if (insn->size)
+			buf += sprintf(buf, ".%d", insn->size);
+		memset(buf, ' ', 20);
+		buf++;
+	}
+
+	if (buf < buffer + 12)
+		buf = buffer + 12;
+	switch (opcode) {
+	case OP_RET:
+		if (insn->src && insn->src != VOID)
+			buf += sprintf(buf, "%s", show_pseudo(insn->src));
+		break;
+
+	case OP_CBR:
+		buf += sprintf(buf, "%s, .L%u, .L%u", show_pseudo(insn->cond), insn->bb_true->nr, insn->bb_false->nr);
+		break;
+
+	case OP_BR:
+		buf += sprintf(buf, ".L%u", insn->bb_true->nr);
+		break;
+
+	case OP_SYMADDR: {
+		struct symbol *sym = insn->symbol->sym;
+		buf += sprintf(buf, "%s <- ", show_pseudo(insn->target));
+
+		if (!insn->bb && !sym)
+			break;
+		if (sym->bb_target) {
+			buf += sprintf(buf, ".L%u", sym->bb_target->nr);
+			break;
+		}
+		if (sym->ident) {
+			buf += sprintf(buf, "%s", show_ident(sym->ident));
+			break;
+		}
+		buf += sprintf(buf, "<anon symbol:%p>", sym);
+		break;
+	}
+		
+	case OP_SETVAL: {
+		struct expression *expr = insn->val;
+		struct symbol *sym;
+		buf += sprintf(buf, "%s <- ", show_pseudo(insn->target));
+
+		if (!expr) {
+			buf += sprintf(buf, "%s", "<none>");
+			break;
+		}
+			
+		switch (expr->type) {
+		case EXPR_VALUE:
+			buf += sprintf(buf, "%lld", expr->value);
+			break;
+		case EXPR_FVALUE:
+			buf += sprintf(buf, "%Lf", expr->fvalue);
+			break;
+		case EXPR_STRING:
+			buf += sprintf(buf, "%.40s", show_string(expr->string));
+			break;
+		case EXPR_SYMBOL:
+			buf += sprintf(buf, "%s", show_ident(expr->symbol->ident));
+			break;
+		case EXPR_LABEL:
+			sym = expr->symbol;
+			if (sym->bb_target)
+				buf += sprintf(buf, ".L%u", sym->bb_target->nr);
+			break;
+		default:
+			buf += sprintf(buf, "SETVAL EXPR TYPE %d", expr->type);
+		}
+		break;
+	}
+	case OP_SWITCH: {
+		struct multijmp *jmp;
+		buf += sprintf(buf, "%s", show_pseudo(insn->cond));
+		FOR_EACH_PTR(insn->multijmp_list, jmp) {
+			if (jmp->begin == jmp->end)
+				buf += sprintf(buf, ", %d -> .L%u", jmp->begin, jmp->target->nr);
+			else if (jmp->begin < jmp->end)
+				buf += sprintf(buf, ", %d ... %d -> .L%u", jmp->begin, jmp->end, jmp->target->nr);
+			else
+				buf += sprintf(buf, ", default -> .L%u", jmp->target->nr);
+		} END_FOR_EACH_PTR(jmp);
+		break;
+	}
+	case OP_COMPUTEDGOTO: {
+		struct multijmp *jmp;
+		buf += sprintf(buf, "%s", show_pseudo(insn->target));
+		FOR_EACH_PTR(insn->multijmp_list, jmp) {
+			buf += sprintf(buf, ", .L%u", jmp->target->nr);
+		} END_FOR_EACH_PTR(jmp);
+		break;
+	}
+
+	case OP_PHISOURCE: {
+		struct instruction *phi;
+		buf += sprintf(buf, "%s <- %s    ", show_pseudo(insn->target), show_pseudo(insn->phi_src));
+		FOR_EACH_PTR(insn->phi_users, phi) {
+			buf += sprintf(buf, " (%s)", show_pseudo(phi->target));
+		} END_FOR_EACH_PTR(phi);
+		break;
+	}
+
+	case OP_PHI: {
+		pseudo_t phi;
+		const char *s = " <-";
+		buf += sprintf(buf, "%s", show_pseudo(insn->target));
+		FOR_EACH_PTR(insn->phi_list, phi) {
+			buf += sprintf(buf, "%s %s", s, show_pseudo(phi));
+			s = ",";
+		} END_FOR_EACH_PTR(phi);
+		break;
+	}	
+	case OP_LOAD: case OP_LNOP:
+		buf += sprintf(buf, "%s <- %d[%s]", show_pseudo(insn->target), insn->offset, show_pseudo(insn->src));
+		break;
+	case OP_STORE: case OP_SNOP:
+		buf += sprintf(buf, "%s -> %d[%s]", show_pseudo(insn->target), insn->offset, show_pseudo(insn->src));
+		break;
+	case OP_INLINED_CALL:
+	case OP_CALL: {
+		struct pseudo *arg;
+		if (insn->target && insn->target != VOID)
+			buf += sprintf(buf, "%s <- ", show_pseudo(insn->target));
+		buf += sprintf(buf, "%s", show_pseudo(insn->func));
+		FOR_EACH_PTR(insn->arguments, arg) {
+			buf += sprintf(buf, ", %s", show_pseudo(arg));
+		} END_FOR_EACH_PTR(arg);
+		break;
+	}
+	case OP_CAST:
+	case OP_SCAST:
+	case OP_FPCAST:
+	case OP_PTRCAST:
+		buf += sprintf(buf, "%s <- (%d) %s",
+			show_pseudo(insn->target),
+			type_size(insn->orig_type),
+			show_pseudo(insn->src));
+		break;
+	case OP_BINARY ... OP_BINARY_END:
+	case OP_BINCMP ... OP_BINCMP_END:
+		buf += sprintf(buf, "%s <- %s, %s", show_pseudo(insn->target), show_pseudo(insn->src1), show_pseudo(insn->src2));
+		break;
+
+	case OP_SEL:
+		buf += sprintf(buf, "%s <- %s, %s, %s", show_pseudo(insn->target),
+			show_pseudo(insn->src1), show_pseudo(insn->src2), show_pseudo(insn->src3));
+		break;
+
+	case OP_SLICE:
+		buf += sprintf(buf, "%s <- %s, %d, %d", show_pseudo(insn->target), show_pseudo(insn->base), insn->from, insn->len);
+		break;
+
+	case OP_NOT: case OP_NEG:
+		buf += sprintf(buf, "%s <- %s", show_pseudo(insn->target), show_pseudo(insn->src1));
+		break;
+
+	case OP_CONTEXT:
+		buf += sprintf(buf, "%s%d", insn->check ? "check: " : "", insn->increment);
+		break;
+	case OP_RANGE:
+		buf += sprintf(buf, "%s between %s..%s", show_pseudo(insn->src1), show_pseudo(insn->src2), show_pseudo(insn->src3));
+		break;
+	case OP_NOP:
+		buf += sprintf(buf, "%s <- %s", show_pseudo(insn->target), show_pseudo(insn->src1));
+		break;
+	case OP_DEATHNOTE:
+		buf += sprintf(buf, "%s", show_pseudo(insn->target));
+		break;
+	case OP_ASM:
+		buf = show_asm(buf, insn);
+		break;
+	case OP_COPY:
+		buf += sprintf(buf, "%s <- %s", show_pseudo(insn->target), show_pseudo(insn->src));
+		break;
+	default:
+		break;
+	}
+
+	if (buf >= buffer + sizeof(buffer))
+		die("instruction buffer overflowed %td\n", buf - buffer);
+	do { --buf; } while (*buf == ' ');
+	*++buf = 0;
+	return buffer;
+}
+
+void show_bb(struct basic_block *bb)
+{
+	struct instruction *insn;
+
+	printf(".L%u:\n", bb->nr);
+	if (verbose) {
+		pseudo_t needs, defines;
+		printf("%s:%d\n", stream_name(bb->pos.stream), bb->pos.line);
+
+		FOR_EACH_PTR(bb->needs, needs) {
+			struct instruction *def = needs->def;
+			if (def->opcode != OP_PHI) {
+				printf("  **uses %s (from .L%u)**\n", show_pseudo(needs), def->bb->nr);
+			} else {
+				pseudo_t phi;
+				const char *sep = " ";
+				printf("  **uses %s (from", show_pseudo(needs));
+				FOR_EACH_PTR(def->phi_list, phi) {
+					if (phi == VOID)
+						continue;
+					printf("%s(%s:.L%u)", sep, show_pseudo(phi), phi->def->bb->nr);
+					sep = ", ";
+				} END_FOR_EACH_PTR(phi);		
+				printf(")**\n");
+			}
+		} END_FOR_EACH_PTR(needs);
+
+		FOR_EACH_PTR(bb->defines, defines) {
+			printf("  **defines %s **\n", show_pseudo(defines));
+		} END_FOR_EACH_PTR(defines);
+
+		if (bb->parents) {
+			struct basic_block *from;
+			FOR_EACH_PTR(bb->parents, from) {
+				printf("  **from .L%u (%s:%d:%d)**\n", from->nr,
+					stream_name(from->pos.stream), from->pos.line, from->pos.pos);
+			} END_FOR_EACH_PTR(from);
+		}
+
+		if (bb->children) {
+			struct basic_block *to;
+			FOR_EACH_PTR(bb->children, to) {
+				printf("  **to .L%u (%s:%d:%d)**\n", to->nr,
+					stream_name(to->pos.stream), to->pos.line, to->pos.pos);
+			} END_FOR_EACH_PTR(to);
+		}
+	}
+
+	FOR_EACH_PTR(bb->insns, insn) {
+		if (!insn->bb && verbose < 2)
+			continue;
+		printf("\t%s\n", show_instruction(insn));
+	} END_FOR_EACH_PTR(insn);
+	if (!bb_terminated(bb))
+		printf("\tEND\n");
+}
+
+static void show_symbol_usage(pseudo_t pseudo)
+{
+	struct pseudo_user *pu;
+
+	if (pseudo) {
+		FOR_EACH_PTR(pseudo->users, pu) {
+			printf("\t%s\n", show_instruction(pu->insn));
+		} END_FOR_EACH_PTR(pu);
+	}
+}
+
+void show_entry(struct entrypoint *ep)
+{
+	struct symbol *sym;
+	struct basic_block *bb;
+
+	printf("%s:\n", show_ident(ep->name->ident));
+
+	if (verbose) {
+		printf("ep %p: %s\n", ep, show_ident(ep->name->ident));
+
+		FOR_EACH_PTR(ep->syms, sym) {
+			if (!sym->pseudo)
+				continue;
+			if (!sym->pseudo->users)
+				continue;
+			printf("   sym: %p %s\n", sym, show_ident(sym->ident));
+			if (sym->ctype.modifiers & (MOD_EXTERN | MOD_STATIC | MOD_ADDRESSABLE))
+				printf("\texternal visibility\n");
+			show_symbol_usage(sym->pseudo);
+		} END_FOR_EACH_PTR(sym);
+
+		printf("\n");
+	}
+
+	FOR_EACH_PTR(ep->bbs, bb) {
+		if (!bb)
+			continue;
+		if (!bb->parents && !bb->children && !bb->insns && verbose < 2)
+			continue;
+		show_bb(bb);
+		printf("\n");
+	} END_FOR_EACH_PTR(bb);
+
+	printf("\n");
+}
+
+static void bind_label(struct symbol *label, struct basic_block *bb, struct position pos)
+{
+	if (label->bb_target)
+		warning(pos, "label '%s' already bound", show_ident(label->ident));
+	label->bb_target = bb;
+}
+
+static struct basic_block * get_bound_block(struct entrypoint *ep, struct symbol *label)
+{
+	struct basic_block *bb = label->bb_target;
+
+	if (!bb) {
+		bb = alloc_basic_block(ep, label->pos);
+		label->bb_target = bb;
+	}
+	return bb;
+}
+
+static void finish_block(struct entrypoint *ep)
+{
+	struct basic_block *src = ep->active;
+	if (bb_reachable(src))
+		ep->active = NULL;
+}
+
+static void add_goto(struct entrypoint *ep, struct basic_block *dst)
+{
+	struct basic_block *src = ep->active;
+	if (bb_reachable(src)) {
+		struct instruction *br = alloc_instruction(OP_BR, 0);
+		br->bb_true = dst;
+		add_bb(&dst->parents, src);
+		add_bb(&src->children, dst);
+		br->bb = src;
+		add_instruction(&src->insns, br);
+		ep->active = NULL;
+	}
+}
+
+static void add_one_insn(struct entrypoint *ep, struct instruction *insn)
+{
+	struct basic_block *bb = ep->active;    
+
+	if (bb_reachable(bb)) {
+		insn->bb = bb;
+		add_instruction(&bb->insns, insn);
+	}
+}
+
+static void set_activeblock(struct entrypoint *ep, struct basic_block *bb)
+{
+	if (!bb_terminated(ep->active))
+		add_goto(ep, bb);
+
+	ep->active = bb;
+	if (bb_reachable(bb))
+		add_bb(&ep->bbs, bb);
+}
+
+static void remove_parent(struct basic_block *child, struct basic_block *parent)
+{
+	remove_bb_from_list(&child->parents, parent, 1);
+	if (!child->parents)
+		repeat_phase |= REPEAT_CFG_CLEANUP;
+}
+
+/* Change a "switch" or a conditional branch into a branch */
+void insert_branch(struct basic_block *bb, struct instruction *jmp, struct basic_block *target)
+{
+	struct instruction *br, *old;
+	struct basic_block *child;
+
+	/* Remove the switch */
+	old = delete_last_instruction(&bb->insns);
+	assert(old == jmp);
+	kill_instruction(old);
+
+	br = alloc_instruction(OP_BR, 0);
+	br->bb = bb;
+	br->bb_true = target;
+	add_instruction(&bb->insns, br);
+
+	FOR_EACH_PTR(bb->children, child) {
+		if (child == target) {
+			target = NULL;	/* Trigger just once */
+			continue;
+		}
+		DELETE_CURRENT_PTR(child);
+		remove_parent(child, bb);
+	} END_FOR_EACH_PTR(child);
+	PACK_PTR_LIST(&bb->children);
+}
+	
+
+void insert_select(struct basic_block *bb, struct instruction *br, struct instruction *phi_node, pseudo_t if_true, pseudo_t if_false)
+{
+	pseudo_t target;
+	struct instruction *select;
+
+	/* Remove the 'br' */
+	delete_last_instruction(&bb->insns);
+
+	select = alloc_instruction(OP_SEL, phi_node->size);
+	select->bb = bb;
+
+	assert(br->cond);
+	use_pseudo(select, br->cond, &select->src1);
+
+	target = phi_node->target;
+	assert(target->def == phi_node);
+	select->target = target;
+	target->def = select;
+
+	use_pseudo(select, if_true, &select->src2);
+	use_pseudo(select, if_false, &select->src3);
+
+	add_instruction(&bb->insns, select);
+	add_instruction(&bb->insns, br);
+}
+
+static inline int bb_empty(struct basic_block *bb)
+{
+	return !bb->insns;
+}
+
+/* Add a label to the currently active block, return new active block */
+static struct basic_block * add_label(struct entrypoint *ep, struct symbol *label)
+{
+	struct basic_block *bb = label->bb_target;
+
+	if (bb) {
+		set_activeblock(ep, bb);
+		return bb;
+	}
+	bb = ep->active;
+	if (!bb_reachable(bb) || !bb_empty(bb)) {
+		bb = alloc_basic_block(ep, label->pos);
+		set_activeblock(ep, bb);
+	}
+	label->bb_target = bb;
+	return bb;
+}
+
+static void add_branch(struct entrypoint *ep, struct expression *expr, pseudo_t cond, struct basic_block *bb_true, struct basic_block *bb_false)
+{
+	struct basic_block *bb = ep->active;
+	struct instruction *br;
+
+	if (bb_reachable(bb)) {
+		br = alloc_instruction(OP_CBR, 0);
+		use_pseudo(br, cond, &br->cond);
+		br->bb_true = bb_true;
+		br->bb_false = bb_false;
+		add_bb(&bb_true->parents, bb);
+		add_bb(&bb_false->parents, bb);
+		add_bb(&bb->children, bb_true);
+		add_bb(&bb->children, bb_false);
+		add_one_insn(ep, br);
+	}
+}
+
+/* Dummy pseudo allocator */
+pseudo_t alloc_pseudo(struct instruction *def)
+{
+	static int nr = 0;
+	struct pseudo * pseudo = __alloc_pseudo(0);
+	pseudo->type = PSEUDO_REG;
+	pseudo->nr = ++nr;
+	pseudo->def = def;
+	return pseudo;
+}
+
+static void clear_symbol_pseudos(struct entrypoint *ep)
+{
+	pseudo_t pseudo;
+
+	FOR_EACH_PTR(ep->accesses, pseudo) {
+		pseudo->sym->pseudo = NULL;
+	} END_FOR_EACH_PTR(pseudo);
+}
+
+static pseudo_t symbol_pseudo(struct entrypoint *ep, struct symbol *sym)
+{
+	pseudo_t pseudo;
+
+	if (!sym)
+		return VOID;
+
+	pseudo = sym->pseudo;
+	if (!pseudo) {
+		pseudo = __alloc_pseudo(0);
+		pseudo->nr = -1;
+		pseudo->type = PSEUDO_SYM;
+		pseudo->sym = sym;
+		pseudo->ident = sym->ident;
+		sym->pseudo = pseudo;
+		add_pseudo(&ep->accesses, pseudo);
+	}
+	/* Symbol pseudos have neither nr, usage nor def */
+	return pseudo;
+}
+
+pseudo_t value_pseudo(struct symbol *type, long long val)
+{
+#define MAX_VAL_HASH 64
+	static struct pseudo_list *prev[MAX_VAL_HASH];
+	int hash = val & (MAX_VAL_HASH-1);
+	struct pseudo_list **list = prev + hash;
+	int size = type ? type->bit_size : value_size(val);
+	pseudo_t pseudo;
+
+
+	FOR_EACH_PTR(*list, pseudo) {
+		if (pseudo->value == val && pseudo->size == size)
+			return pseudo;
+	} END_FOR_EACH_PTR(pseudo);
+
+	pseudo = __alloc_pseudo(0);
+	pseudo->type = PSEUDO_VAL;
+	pseudo->value = val;
+	pseudo->size = size;
+	add_pseudo(list, pseudo);
+
+	/* Value pseudos have neither nr, usage nor def */
+	return pseudo;
+}
+
+static pseudo_t argument_pseudo(struct entrypoint *ep, int nr)
+{
+	pseudo_t pseudo = __alloc_pseudo(0);
+	struct instruction *entry = ep->entry;
+
+	pseudo->type = PSEUDO_ARG;
+	pseudo->nr = nr;
+	pseudo->def = entry;
+	add_pseudo(&entry->arg_list, pseudo);
+
+	/* Argument pseudos have neither usage nor def */
+	return pseudo;
+}
+
+pseudo_t alloc_phi(struct basic_block *source, pseudo_t pseudo, int size)
+{
+	struct instruction *insn;
+	pseudo_t phi;
+	static int nr = 0;
+
+	if (!source)
+		return VOID;
+
+	insn = alloc_instruction(OP_PHISOURCE, size);
+	phi = __alloc_pseudo(0);
+	phi->type = PSEUDO_PHI;
+	phi->nr = ++nr;
+	phi->def = insn;
+
+	use_pseudo(insn, pseudo, &insn->phi_src);
+	insn->bb = source;
+	insn->target = phi;
+	add_instruction(&source->insns, insn);
+	return phi;
+}
+
+/*
+ * We carry the "access_data" structure around for any accesses,
+ * which simplifies things a lot. It contains all the access
+ * information in one place.
+ */
+struct access_data {
+	struct symbol *result_type;	// result ctype
+	struct symbol *source_type;	// source ctype
+	pseudo_t address;		// pseudo containing address ..
+	unsigned int offset;		// byte offset
+	struct position pos;
+};
+
+static void finish_address_gen(struct entrypoint *ep, struct access_data *ad)
+{
+}
+
+static int linearize_simple_address(struct entrypoint *ep,
+	struct expression *addr,
+	struct access_data *ad)
+{
+	if (addr->type == EXPR_SYMBOL) {
+		linearize_one_symbol(ep, addr->symbol);
+		ad->address = symbol_pseudo(ep, addr->symbol);
+		return 1;
+	}
+	if (addr->type == EXPR_BINOP) {
+		if (addr->right->type == EXPR_VALUE) {
+			if (addr->op == '+') {
+				ad->offset += get_expression_value(addr->right);
+				return linearize_simple_address(ep, addr->left, ad);
+			}
+		}
+	}
+	ad->address = linearize_expression(ep, addr);
+	return 1;
+}
+
+static struct symbol *base_type(struct symbol *sym)
+{
+	struct symbol *base = sym;
+
+	if (sym) {
+		if (sym->type == SYM_NODE)
+			base = base->ctype.base_type;
+		if (base->type == SYM_BITFIELD)
+			return base->ctype.base_type;
+	}
+	return sym;
+}
+
+static int linearize_address_gen(struct entrypoint *ep,
+	struct expression *expr,
+	struct access_data *ad)
+{
+	struct symbol *ctype = expr->ctype;
+
+	if (!ctype)
+		return 0;
+	ad->pos = expr->pos;
+	ad->result_type = ctype;
+	ad->source_type = base_type(ctype);
+	if (expr->type == EXPR_PREOP && expr->op == '*')
+		return linearize_simple_address(ep, expr->unop, ad);
+
+	warning(expr->pos, "generating address of non-lvalue (%d)", expr->type);
+	return 0;
+}
+
+static pseudo_t add_load(struct entrypoint *ep, struct access_data *ad)
+{
+	struct instruction *insn;
+	pseudo_t new;
+
+	insn = alloc_typed_instruction(OP_LOAD, ad->source_type);
+	new = alloc_pseudo(insn);
+
+	insn->target = new;
+	insn->offset = ad->offset;
+	use_pseudo(insn, ad->address, &insn->src);
+	add_one_insn(ep, insn);
+	return new;
+}
+
+static void add_store(struct entrypoint *ep, struct access_data *ad, pseudo_t value)
+{
+	struct basic_block *bb = ep->active;
+
+	if (bb_reachable(bb)) {
+		struct instruction *store = alloc_typed_instruction(OP_STORE, ad->source_type);
+		store->offset = ad->offset;
+		use_pseudo(store, value, &store->target);
+		use_pseudo(store, ad->address, &store->src);
+		add_one_insn(ep, store);
+	}
+}
+
+static pseudo_t linearize_store_gen(struct entrypoint *ep,
+		pseudo_t value,
+		struct access_data *ad)
+{
+	pseudo_t store = value;
+
+	if (type_size(ad->source_type) != type_size(ad->result_type)) {
+		struct symbol *ctype = ad->result_type;
+		unsigned int shift = ctype->bit_offset;
+		unsigned int size = ctype->bit_size;
+		pseudo_t orig = add_load(ep, ad);
+		unsigned long long mask = (1ULL << size) - 1;
+
+		if (shift) {
+			store = add_binary_op(ep, ad->source_type, OP_SHL, value, value_pseudo(ctype, shift));
+			mask <<= shift;
+		}
+		orig = add_binary_op(ep, ad->source_type, OP_AND, orig, value_pseudo(ctype, ~mask));
+		store = add_binary_op(ep, ad->source_type, OP_OR, orig, store);
+	}
+	add_store(ep, ad, store);
+	return value;
+}
+
+static pseudo_t add_binary_op(struct entrypoint *ep, struct symbol *ctype, int op, pseudo_t left, pseudo_t right)
+{
+	struct instruction *insn = alloc_typed_instruction(op, ctype);
+	pseudo_t target = alloc_pseudo(insn);
+	insn->target = target;
+	use_pseudo(insn, left, &insn->src1);
+	use_pseudo(insn, right, &insn->src2);
+	add_one_insn(ep, insn);
+	return target;
+}
+
+static pseudo_t add_setval(struct entrypoint *ep, struct symbol *ctype, struct expression *val)
+{
+	struct instruction *insn = alloc_typed_instruction(OP_SETVAL, ctype);
+	pseudo_t target = alloc_pseudo(insn);
+	insn->target = target;
+	insn->val = val;
+	add_one_insn(ep, insn);
+	return target;
+}
+
+static pseudo_t add_symbol_address(struct entrypoint *ep, struct symbol *sym)
+{
+	struct instruction *insn = alloc_instruction(OP_SYMADDR, bits_in_pointer);
+	pseudo_t target = alloc_pseudo(insn);
+
+	insn->target = target;
+	use_pseudo(insn, symbol_pseudo(ep, sym), &insn->symbol);
+	add_one_insn(ep, insn);
+	return target;
+}
+
+static pseudo_t linearize_load_gen(struct entrypoint *ep, struct access_data *ad)
+{
+	struct symbol *ctype = ad->result_type;
+	pseudo_t new = add_load(ep, ad);
+
+	if (ctype->bit_offset) {
+		pseudo_t shift = value_pseudo(ctype, ctype->bit_offset);
+		pseudo_t newval = add_binary_op(ep, ad->source_type, OP_LSR, new, shift);
+		new = newval;
+	}
+	if (ctype->bit_size != type_size(ad->source_type))
+		new = cast_pseudo(ep, new, ad->source_type, ad->result_type);
+	return new;
+}
+
+static pseudo_t linearize_access(struct entrypoint *ep, struct expression *expr)
+{
+	struct access_data ad = { NULL, };
+	pseudo_t value;
+
+	if (!linearize_address_gen(ep, expr, &ad))
+		return VOID;
+	value = linearize_load_gen(ep, &ad);
+	finish_address_gen(ep, &ad);
+	return value;
+}
+
+/* FIXME: FP */
+static pseudo_t linearize_inc_dec(struct entrypoint *ep, struct expression *expr, int postop)
+{
+	struct access_data ad = { NULL, };
+		pseudo_t old, new, one;
+	int op = expr->op == SPECIAL_INCREMENT ? OP_ADD : OP_SUB;
+
+	if (!linearize_address_gen(ep, expr->unop, &ad))
+		return VOID;
+
+	old = linearize_load_gen(ep, &ad);
+	one = value_pseudo(expr->ctype, expr->op_value);
+	new = add_binary_op(ep, expr->ctype, op, old, one);
+	linearize_store_gen(ep, new, &ad);
+	finish_address_gen(ep, &ad);
+	return postop ? old : new;
+}
+
+static pseudo_t add_uniop(struct entrypoint *ep, struct expression *expr, int op, pseudo_t src)
+{
+	struct instruction *insn = alloc_typed_instruction(op, expr->ctype);
+	pseudo_t new = alloc_pseudo(insn);
+
+	insn->target = new;
+	use_pseudo(insn, src, &insn->src1);
+	add_one_insn(ep, insn);
+	return new;
+}
+
+static pseudo_t linearize_slice(struct entrypoint *ep, struct expression *expr)
+{
+	pseudo_t pre = linearize_expression(ep, expr->base);
+	struct instruction *insn = alloc_typed_instruction(OP_SLICE, expr->ctype);
+	pseudo_t new = alloc_pseudo(insn);
+
+	insn->target = new;
+	insn->from = expr->r_bitpos;
+	insn->len = expr->r_nrbits;
+	use_pseudo(insn, pre, &insn->base);
+	add_one_insn(ep, insn);
+	return new;
+}
+
+static pseudo_t linearize_regular_preop(struct entrypoint *ep, struct expression *expr)
+{
+	pseudo_t pre = linearize_expression(ep, expr->unop);
+	switch (expr->op) {
+	case '+':
+		return pre;
+	case '!': {
+		pseudo_t zero = value_pseudo(expr->ctype, 0);
+		return add_binary_op(ep, expr->ctype, OP_SET_EQ, pre, zero);
+	}
+	case '~':
+		return add_uniop(ep, expr, OP_NOT, pre);
+	case '-':
+		return add_uniop(ep, expr, OP_NEG, pre);
+	}
+	return VOID;
+}
+
+static pseudo_t linearize_preop(struct entrypoint *ep, struct expression *expr)
+{
+	/*
+	 * '*' is an lvalue access, and is fundamentally different
+	 * from an arithmetic operation. Maybe it should have an
+	 * expression type of its own..
+	 */
+	if (expr->op == '*')
+		return linearize_access(ep, expr);
+	if (expr->op == SPECIAL_INCREMENT || expr->op == SPECIAL_DECREMENT)
+		return linearize_inc_dec(ep, expr, 0);
+	return linearize_regular_preop(ep, expr);
+}
+
+static pseudo_t linearize_postop(struct entrypoint *ep, struct expression *expr)
+{
+	return linearize_inc_dec(ep, expr, 1);
+}	
+
+/*
+ * Casts to pointers are "less safe" than other casts, since
+ * they imply type-unsafe accesses. "void *" is a special
+ * case, since you can't access through it anyway without another
+ * cast.
+ */
+static struct instruction *alloc_cast_instruction(struct symbol *src, struct symbol *ctype)
+{
+	int opcode = OP_CAST;
+	struct symbol *base = ctype;
+
+	if (src->ctype.modifiers & MOD_SIGNED)
+		opcode = OP_SCAST;
+	if (base->type == SYM_NODE)
+		base = base->ctype.base_type;
+	if (base->type == SYM_PTR) {
+		base = base->ctype.base_type;
+		if (base != &void_ctype)
+			opcode = OP_PTRCAST;
+	} else if (base->ctype.base_type == &fp_type)
+		opcode = OP_FPCAST;
+	return alloc_typed_instruction(opcode, ctype);
+}
+
+static pseudo_t cast_pseudo(struct entrypoint *ep, pseudo_t src, struct symbol *from, struct symbol *to)
+{
+	pseudo_t result;
+	struct instruction *insn;
+
+	if (src == VOID)
+		return VOID;
+	if (!from || !to)
+		return VOID;
+	if (from->bit_size < 0 || to->bit_size < 0)
+		return VOID;
+	insn = alloc_cast_instruction(from, to);
+	result = alloc_pseudo(insn);
+	insn->target = result;
+	insn->orig_type = from;
+	use_pseudo(insn, src, &insn->src);
+	add_one_insn(ep, insn);
+	return result;
+}
+
+static int opcode_sign(int opcode, struct symbol *ctype)
+{
+	if (ctype && (ctype->ctype.modifiers & MOD_SIGNED)) {
+		switch(opcode) {
+		case OP_MULU: case OP_DIVU: case OP_MODU: case OP_LSR:
+			opcode++;
+		}
+	}
+	return opcode;
+}
+
+static inline pseudo_t add_convert_to_bool(struct entrypoint *ep, pseudo_t src, struct symbol *type)
+{
+	pseudo_t zero;
+	int op;
+
+	if (is_bool_type(type))
+		return src;
+	zero = value_pseudo(type, 0);
+	op = OP_SET_NE;
+	return add_binary_op(ep, &bool_ctype, op, src, zero);
+}
+
+static pseudo_t linearize_expression_to_bool(struct entrypoint *ep, struct expression *expr)
+{
+	pseudo_t dst;
+	dst = linearize_expression(ep, expr);
+	dst = add_convert_to_bool(ep, dst, expr->ctype);
+	return dst;
+}
+
+static pseudo_t linearize_assignment(struct entrypoint *ep, struct expression *expr)
+{
+	struct access_data ad = { NULL, };
+	struct expression *target = expr->left;
+	struct expression *src = expr->right;
+	struct symbol *ctype;
+	pseudo_t value;
+
+	value = linearize_expression(ep, src);
+	if (!target || !linearize_address_gen(ep, target, &ad))
+		return value;
+	if (expr->op != '=') {
+		pseudo_t oldvalue = linearize_load_gen(ep, &ad);
+		pseudo_t dst;
+		static const int op_trans[] = {
+			[SPECIAL_ADD_ASSIGN - SPECIAL_BASE] = OP_ADD,
+			[SPECIAL_SUB_ASSIGN - SPECIAL_BASE] = OP_SUB,
+			[SPECIAL_MUL_ASSIGN - SPECIAL_BASE] = OP_MULU,
+			[SPECIAL_DIV_ASSIGN - SPECIAL_BASE] = OP_DIVU,
+			[SPECIAL_MOD_ASSIGN - SPECIAL_BASE] = OP_MODU,
+			[SPECIAL_SHL_ASSIGN - SPECIAL_BASE] = OP_SHL,
+			[SPECIAL_SHR_ASSIGN - SPECIAL_BASE] = OP_LSR,
+			[SPECIAL_AND_ASSIGN - SPECIAL_BASE] = OP_AND,
+			[SPECIAL_OR_ASSIGN  - SPECIAL_BASE] = OP_OR,
+			[SPECIAL_XOR_ASSIGN - SPECIAL_BASE] = OP_XOR
+		};
+		int opcode;
+
+		if (!src)
+			return VOID;
+
+		ctype = src->ctype;
+		oldvalue = cast_pseudo(ep, oldvalue, target->ctype, ctype);
+		opcode = opcode_sign(op_trans[expr->op - SPECIAL_BASE], ctype);
+		dst = add_binary_op(ep, ctype, opcode, oldvalue, value);
+		value = cast_pseudo(ep, dst, ctype, expr->ctype);
+	}
+	value = linearize_store_gen(ep, value, &ad);
+	finish_address_gen(ep, &ad);
+	return value;
+}
+
+static pseudo_t linearize_call_expression(struct entrypoint *ep, struct expression *expr)
+{
+	struct expression *arg, *fn;
+	struct instruction *insn = alloc_typed_instruction(OP_CALL, expr->ctype);
+	pseudo_t retval, call;
+	struct ctype *ctype = NULL;
+	struct symbol *fntype;
+	struct context *context;
+
+	if (!expr->ctype) {
+		warning(expr->pos, "call with no type!");
+		return VOID;
+	}
+
+	FOR_EACH_PTR(expr->args, arg) {
+		pseudo_t new = linearize_expression(ep, arg);
+		use_pseudo(insn, new, add_pseudo(&insn->arguments, new));
+	} END_FOR_EACH_PTR(arg);
+
+	fn = expr->fn;
+
+	if (fn->ctype)
+		ctype = &fn->ctype->ctype;
+
+	fntype = fn->ctype;
+	if (fntype) {
+		if (fntype->type == SYM_NODE)
+			fntype = fntype->ctype.base_type;
+	}
+	insn->fntype = fntype;
+
+	if (fn->type == EXPR_PREOP) {
+		if (fn->unop->type == EXPR_SYMBOL) {
+			struct symbol *sym = fn->unop->symbol;
+			if (sym->ctype.base_type->type == SYM_FN)
+				fn = fn->unop;
+		}
+	}
+	if (fn->type == EXPR_SYMBOL) {
+		call = symbol_pseudo(ep, fn->symbol);
+	} else {
+		call = linearize_expression(ep, fn);
+	}
+	use_pseudo(insn, call, &insn->func);
+	retval = VOID;
+	if (expr->ctype != &void_ctype)
+		retval = alloc_pseudo(insn);
+	insn->target = retval;
+	add_one_insn(ep, insn);
+
+	if (ctype) {
+		FOR_EACH_PTR(ctype->contexts, context) {
+			int in = context->in;
+			int out = context->out;
+			int check = 0;
+			int context_diff;
+			if (in < 0) {
+				check = 1;
+				in = 0;
+			}
+			if (out < 0) {
+				check = 0;
+				out = 0;
+			}
+			context_diff = out - in;
+			if (check || context_diff) {
+				insn = alloc_instruction(OP_CONTEXT, 0);
+				insn->increment = context_diff;
+				insn->check = check;
+				insn->context_expr = context->context;
+				add_one_insn(ep, insn);
+			}
+		} END_FOR_EACH_PTR(context);
+	}
+
+	return retval;
+}
+
+static pseudo_t linearize_binop_bool(struct entrypoint *ep, struct expression *expr)
+{
+	pseudo_t src1, src2, dst;
+	int op = (expr->op == SPECIAL_LOGICAL_OR) ? OP_OR_BOOL : OP_AND_BOOL;
+
+	src1 = linearize_expression_to_bool(ep, expr->left);
+	src2 = linearize_expression_to_bool(ep, expr->right);
+	dst = add_binary_op(ep, &bool_ctype, op, src1, src2);
+	if (expr->ctype != &bool_ctype)
+		dst = cast_pseudo(ep, dst, &bool_ctype, expr->ctype);
+	return dst;
+}
+
+static pseudo_t linearize_binop(struct entrypoint *ep, struct expression *expr)
+{
+	pseudo_t src1, src2, dst;
+	static const int opcode[] = {
+		['+'] = OP_ADD, ['-'] = OP_SUB,
+		['*'] = OP_MULU, ['/'] = OP_DIVU,
+		['%'] = OP_MODU, ['&'] = OP_AND,
+		['|'] = OP_OR,  ['^'] = OP_XOR,
+		[SPECIAL_LEFTSHIFT] = OP_SHL,
+		[SPECIAL_RIGHTSHIFT] = OP_LSR,
+	};
+	int op;
+
+	src1 = linearize_expression(ep, expr->left);
+	src2 = linearize_expression(ep, expr->right);
+	op = opcode_sign(opcode[expr->op], expr->ctype);
+	dst = add_binary_op(ep, expr->ctype, op, src1, src2);
+	return dst;
+}
+
+static pseudo_t linearize_logical_branch(struct entrypoint *ep, struct expression *expr, struct basic_block *bb_true, struct basic_block *bb_false);
+
+pseudo_t linearize_cond_branch(struct entrypoint *ep, struct expression *expr, struct basic_block *bb_true, struct basic_block *bb_false);
+
+static pseudo_t linearize_select(struct entrypoint *ep, struct expression *expr)
+{
+	pseudo_t cond, true, false, res;
+	struct instruction *insn;
+
+	true = linearize_expression(ep, expr->cond_true);
+	false = linearize_expression(ep, expr->cond_false);
+	cond = linearize_expression(ep, expr->conditional);
+
+	insn = alloc_typed_instruction(OP_SEL, expr->ctype);
+	if (!expr->cond_true)
+		true = cond;
+	use_pseudo(insn, cond, &insn->src1);
+	use_pseudo(insn, true, &insn->src2);
+	use_pseudo(insn, false, &insn->src3);
+
+	res = alloc_pseudo(insn);
+	insn->target = res;
+	add_one_insn(ep, insn);
+	return res;
+}
+
+static pseudo_t add_join_conditional(struct entrypoint *ep, struct expression *expr,
+				     pseudo_t phi1, pseudo_t phi2)
+{
+	pseudo_t target;
+	struct instruction *phi_node;
+
+	if (phi1 == VOID)
+		return phi2;
+	if (phi2 == VOID)
+		return phi1;
+
+	phi_node = alloc_typed_instruction(OP_PHI, expr->ctype);
+	use_pseudo(phi_node, phi1, add_pseudo(&phi_node->phi_list, phi1));
+	use_pseudo(phi_node, phi2, add_pseudo(&phi_node->phi_list, phi2));
+	phi_node->target = target = alloc_pseudo(phi_node);
+	add_one_insn(ep, phi_node);
+	return target;
+}	
+
+static pseudo_t linearize_short_conditional(struct entrypoint *ep, struct expression *expr,
+					    struct expression *cond,
+					    struct expression *expr_false)
+{
+	pseudo_t src1, src2;
+	struct basic_block *bb_false;
+	struct basic_block *merge = alloc_basic_block(ep, expr->pos);
+	pseudo_t phi1, phi2;
+	int size = type_size(expr->ctype);
+
+	if (!expr_false || !ep->active)
+		return VOID;
+
+	bb_false = alloc_basic_block(ep, expr_false->pos);
+	src1 = linearize_expression(ep, cond);
+	phi1 = alloc_phi(ep->active, src1, size);
+	add_branch(ep, expr, src1, merge, bb_false);
+
+	set_activeblock(ep, bb_false);
+	src2 = linearize_expression(ep, expr_false);
+	phi2 = alloc_phi(ep->active, src2, size);
+	set_activeblock(ep, merge);
+
+	return add_join_conditional(ep, expr, phi1, phi2);
+}
+
+static pseudo_t linearize_conditional(struct entrypoint *ep, struct expression *expr,
+				      struct expression *cond,
+				      struct expression *expr_true,
+				      struct expression *expr_false)
+{
+	pseudo_t src1, src2;
+	pseudo_t phi1, phi2;
+	struct basic_block *bb_true, *bb_false, *merge;
+	int size = type_size(expr->ctype);
+
+	if (!cond || !expr_true || !expr_false || !ep->active)
+		return VOID;
+	bb_true = alloc_basic_block(ep, expr_true->pos);
+	bb_false = alloc_basic_block(ep, expr_false->pos);
+	merge = alloc_basic_block(ep, expr->pos);
+
+	linearize_cond_branch(ep, cond, bb_true, bb_false);
+
+	set_activeblock(ep, bb_true);
+	src1 = linearize_expression(ep, expr_true);
+	phi1 = alloc_phi(ep->active, src1, size);
+	add_goto(ep, merge); 
+
+	set_activeblock(ep, bb_false);
+	src2 = linearize_expression(ep, expr_false);
+	phi2 = alloc_phi(ep->active, src2, size);
+	set_activeblock(ep, merge);
+
+	return add_join_conditional(ep, expr, phi1, phi2);
+}
+
+static pseudo_t linearize_logical(struct entrypoint *ep, struct expression *expr)
+{
+	struct expression *shortcut;
+
+	shortcut = alloc_const_expression(expr->pos, expr->op == SPECIAL_LOGICAL_OR);
+	shortcut->ctype = expr->ctype;
+	if (expr->op == SPECIAL_LOGICAL_OR)
+		return linearize_conditional(ep, expr, expr->left, shortcut, expr->right);
+	return linearize_conditional(ep, expr, expr->left, expr->right, shortcut);
+}
+
+static pseudo_t linearize_compare(struct entrypoint *ep, struct expression *expr)
+{
+	static const int cmpop[] = {
+		['>'] = OP_SET_GT, ['<'] = OP_SET_LT,
+		[SPECIAL_EQUAL] = OP_SET_EQ,
+		[SPECIAL_NOTEQUAL] = OP_SET_NE,
+		[SPECIAL_GTE] = OP_SET_GE,
+		[SPECIAL_LTE] = OP_SET_LE,
+		[SPECIAL_UNSIGNED_LT] = OP_SET_B,
+		[SPECIAL_UNSIGNED_GT] = OP_SET_A,
+		[SPECIAL_UNSIGNED_LTE] = OP_SET_BE,
+		[SPECIAL_UNSIGNED_GTE] = OP_SET_AE,
+	};
+
+	pseudo_t src1 = linearize_expression(ep, expr->left);
+	pseudo_t src2 = linearize_expression(ep, expr->right);
+	pseudo_t dst = add_binary_op(ep, expr->ctype, cmpop[expr->op], src1, src2);
+	return dst;
+}
+
+
+pseudo_t linearize_cond_branch(struct entrypoint *ep, struct expression *expr, struct basic_block *bb_true, struct basic_block *bb_false)
+{
+	pseudo_t cond;
+
+	if (!expr || !bb_reachable(ep->active))
+		return VOID;
+
+	switch (expr->type) {
+
+	case EXPR_STRING:
+	case EXPR_VALUE:
+		add_goto(ep, expr->value ? bb_true : bb_false);
+		return VOID;
+
+	case EXPR_FVALUE:
+		add_goto(ep, expr->fvalue ? bb_true : bb_false);
+		return VOID;
+		
+	case EXPR_LOGICAL:
+		linearize_logical_branch(ep, expr, bb_true, bb_false);
+		return VOID;
+
+	case EXPR_COMPARE:
+		cond = linearize_compare(ep, expr);
+		add_branch(ep, expr, cond, bb_true, bb_false);
+		break;
+		
+	case EXPR_PREOP:
+		if (expr->op == '!')
+			return linearize_cond_branch(ep, expr->unop, bb_false, bb_true);
+		/* fall through */
+	default: {
+		cond = linearize_expression(ep, expr);
+		add_branch(ep, expr, cond, bb_true, bb_false);
+
+		return VOID;
+	}
+	}
+	return VOID;
+}
+
+
+	
+static pseudo_t linearize_logical_branch(struct entrypoint *ep, struct expression *expr, struct basic_block *bb_true, struct basic_block *bb_false)
+{
+	struct basic_block *next = alloc_basic_block(ep, expr->pos);
+
+	if (expr->op == SPECIAL_LOGICAL_OR)
+		linearize_cond_branch(ep, expr->left, bb_true, next);
+	else
+		linearize_cond_branch(ep, expr->left, next, bb_false);
+	set_activeblock(ep, next);
+	linearize_cond_branch(ep, expr->right, bb_true, bb_false);
+	return VOID;
+}
+
+static pseudo_t linearize_cast(struct entrypoint *ep, struct expression *expr)
+{
+	pseudo_t src;
+	struct expression *orig = expr->cast_expression;
+
+	if (!orig)
+		return VOID;
+
+	src = linearize_expression(ep, orig);
+	return cast_pseudo(ep, src, orig->ctype, expr->ctype);
+}
+
+static pseudo_t linearize_position(struct entrypoint *ep, struct expression *pos, struct access_data *ad)
+{
+	struct expression *init_expr = pos->init_expr;
+
+	ad->offset = pos->init_offset;
+	ad->source_type = base_type(init_expr->ctype);
+	ad->result_type = init_expr->ctype;
+	return linearize_initializer(ep, init_expr, ad);
+}
+
+static pseudo_t linearize_initializer(struct entrypoint *ep, struct expression *initializer, struct access_data *ad)
+{
+	switch (initializer->type) {
+	case EXPR_INITIALIZER: {
+		struct expression *expr;
+		FOR_EACH_PTR(initializer->expr_list, expr) {
+			linearize_initializer(ep, expr, ad);
+		} END_FOR_EACH_PTR(expr);
+		break;
+	}
+	case EXPR_POS:
+		linearize_position(ep, initializer, ad);
+		break;
+	default: {
+		pseudo_t value = linearize_expression(ep, initializer);
+		ad->source_type = base_type(initializer->ctype);
+		ad->result_type = initializer->ctype;
+		linearize_store_gen(ep, value, ad);
+		return value;
+	}
+	}
+
+	return VOID;
+}
+
+static void linearize_argument(struct entrypoint *ep, struct symbol *arg, int nr)
+{
+	struct access_data ad = { NULL, };
+
+	ad.source_type = arg;
+	ad.result_type = arg;
+	ad.address = symbol_pseudo(ep, arg);
+	linearize_store_gen(ep, argument_pseudo(ep, nr), &ad);
+	finish_address_gen(ep, &ad);
+}
+
+pseudo_t linearize_expression(struct entrypoint *ep, struct expression *expr)
+{
+	if (!expr)
+		return VOID;
+
+	current_pos = expr->pos;
+	switch (expr->type) {
+	case EXPR_SYMBOL:
+		linearize_one_symbol(ep, expr->symbol);
+		return add_symbol_address(ep, expr->symbol);
+
+	case EXPR_VALUE:
+		return value_pseudo(expr->ctype, expr->value);
+
+	case EXPR_STRING: case EXPR_FVALUE: case EXPR_LABEL:
+		return add_setval(ep, expr->ctype, expr);
+
+	case EXPR_STATEMENT:
+		return linearize_statement(ep, expr->statement);
+
+	case EXPR_CALL:
+		return linearize_call_expression(ep, expr);
+
+	case EXPR_BINOP:
+		if (expr->op == SPECIAL_LOGICAL_AND || expr->op == SPECIAL_LOGICAL_OR)
+			return linearize_binop_bool(ep, expr);
+		return linearize_binop(ep, expr);
+
+	case EXPR_LOGICAL:
+		return linearize_logical(ep, expr);
+
+	case EXPR_COMPARE:
+		return  linearize_compare(ep, expr);
+
+	case EXPR_SELECT:
+		return	linearize_select(ep, expr);
+
+	case EXPR_CONDITIONAL:
+		if (!expr->cond_true)
+			return linearize_short_conditional(ep, expr, expr->conditional, expr->cond_false);
+
+		return  linearize_conditional(ep, expr, expr->conditional,
+					      expr->cond_true, expr->cond_false);
+
+	case EXPR_COMMA:
+		linearize_expression(ep, expr->left);
+		return linearize_expression(ep, expr->right);
+
+	case EXPR_ASSIGNMENT:
+		return linearize_assignment(ep, expr);
+
+	case EXPR_PREOP:
+		return linearize_preop(ep, expr);
+
+	case EXPR_POSTOP:
+		return linearize_postop(ep, expr);
+
+	case EXPR_CAST:
+	case EXPR_FORCE_CAST:
+	case EXPR_IMPLIED_CAST:
+		return linearize_cast(ep, expr);
+	
+	case EXPR_SLICE:
+		return linearize_slice(ep, expr);
+
+	case EXPR_INITIALIZER:
+	case EXPR_POS:
+		warning(expr->pos, "unexpected initializer expression (%d %d)", expr->type, expr->op);
+		return VOID;
+	default: 
+		warning(expr->pos, "unknown expression (%d %d)", expr->type, expr->op);
+		return VOID;
+	}
+	return VOID;
+}
+
+static pseudo_t linearize_one_symbol(struct entrypoint *ep, struct symbol *sym)
+{
+	struct access_data ad = { NULL, };
+	pseudo_t value;
+
+	if (!sym || !sym->initializer || sym->initialized)
+		return VOID;
+
+	/* We need to output these puppies some day too.. */
+	if (sym->ctype.modifiers & (MOD_STATIC | MOD_TOPLEVEL))
+		return VOID;
+
+	sym->initialized = 1;
+	ad.address = symbol_pseudo(ep, sym);
+
+	if (sym->initializer && !is_scalar_type(sym)) {
+		// default zero initialization [6.7.9.21]
+		// FIXME: this init the whole aggregate while
+		// only the existing fields need to be initialized.
+		// FIXME: this init the whole aggregate even if
+		// all fields arelater  explicitely initialized.
+		struct expression *expr = sym->initializer;
+		ad.pos = expr->pos;
+		ad.result_type = sym;
+		ad.source_type = base_type(sym);
+		ad.address = symbol_pseudo(ep, sym);
+		linearize_store_gen(ep, value_pseudo(sym, 0), &ad);
+	}
+
+	value = linearize_initializer(ep, sym->initializer, &ad);
+	finish_address_gen(ep, &ad);
+	return value;
+}
+
+static pseudo_t linearize_compound_statement(struct entrypoint *ep, struct statement *stmt)
+{
+	pseudo_t pseudo;
+	struct statement *s;
+	struct symbol *ret = stmt->ret;
+
+	pseudo = VOID;
+	FOR_EACH_PTR(stmt->stmts, s) {
+		pseudo = linearize_statement(ep, s);
+	} END_FOR_EACH_PTR(s);
+
+	if (ret) {
+		struct basic_block *bb = add_label(ep, ret);
+		struct instruction *phi_node = first_instruction(bb->insns);
+
+		if (!phi_node)
+			return pseudo;
+
+		if (pseudo_list_size(phi_node->phi_list)==1) {
+			pseudo = first_pseudo(phi_node->phi_list);
+			assert(pseudo->type == PSEUDO_PHI);
+			return pseudo->def->src1;
+		}
+		return phi_node->target;
+	}
+
+	return pseudo;
+}
+
+static pseudo_t linearize_inlined_call(struct entrypoint *ep, struct statement *stmt)
+{
+	struct instruction *insn = alloc_instruction(OP_INLINED_CALL, 0);
+	struct statement *args = stmt->args;
+	struct basic_block *bb;
+	pseudo_t pseudo;
+
+	if (args) {
+		struct symbol *sym;
+
+		concat_symbol_list(args->declaration, &ep->syms);
+		FOR_EACH_PTR(args->declaration, sym) {
+			pseudo_t value = linearize_one_symbol(ep, sym);
+			use_pseudo(insn, value, add_pseudo(&insn->arguments, value));
+		} END_FOR_EACH_PTR(sym);
+	}
+
+	insn->target = pseudo = linearize_compound_statement(ep, stmt);
+	use_pseudo(insn, symbol_pseudo(ep, stmt->inline_fn), &insn->func);
+	bb = ep->active;
+	if (bb && !bb->insns)
+		bb->pos = stmt->pos;
+	add_one_insn(ep, insn);
+	return pseudo;
+}
+
+static pseudo_t linearize_context(struct entrypoint *ep, struct statement *stmt)
+{
+	struct instruction *insn = alloc_instruction(OP_CONTEXT, 0);
+	struct expression *expr = stmt->expression;
+	int value = 0;
+
+	if (expr->type == EXPR_VALUE)
+		value = expr->value;
+
+	insn->increment = value;
+	insn->context_expr = stmt->context;
+	add_one_insn(ep, insn);
+	return VOID;
+}
+
+static pseudo_t linearize_range(struct entrypoint *ep, struct statement *stmt)
+{
+	struct instruction *insn = alloc_instruction(OP_RANGE, 0);
+
+	use_pseudo(insn, linearize_expression(ep, stmt->range_expression), &insn->src1);
+	use_pseudo(insn, linearize_expression(ep, stmt->range_low), &insn->src2);
+	use_pseudo(insn, linearize_expression(ep, stmt->range_high), &insn->src3);
+	add_one_insn(ep, insn);
+	return VOID;
+}
+
+ALLOCATOR(asm_rules, "asm rules");
+ALLOCATOR(asm_constraint, "asm constraints");
+
+static void add_asm_input(struct entrypoint *ep, struct instruction *insn, struct expression *expr,
+	const char *constraint, const struct ident *ident)
+{
+	pseudo_t pseudo = linearize_expression(ep, expr);
+	struct asm_constraint *rule = __alloc_asm_constraint(0);
+
+	rule->ident = ident;
+	rule->constraint = constraint;
+	use_pseudo(insn, pseudo, &rule->pseudo);
+	add_ptr_list(&insn->asm_rules->inputs, rule);
+}
+
+static void add_asm_output(struct entrypoint *ep, struct instruction *insn, struct expression *expr,
+	const char *constraint, const struct ident *ident)
+{
+	struct access_data ad = { NULL, };
+	pseudo_t pseudo = alloc_pseudo(insn);
+	struct asm_constraint *rule;
+
+	if (!expr || !linearize_address_gen(ep, expr, &ad))
+		return;
+	linearize_store_gen(ep, pseudo, &ad);
+	finish_address_gen(ep, &ad);
+	rule = __alloc_asm_constraint(0);
+	rule->ident = ident;
+	rule->constraint = constraint;
+	use_pseudo(insn, pseudo, &rule->pseudo);
+	add_ptr_list(&insn->asm_rules->outputs, rule);
+}
+
+static pseudo_t linearize_asm_statement(struct entrypoint *ep, struct statement *stmt)
+{
+	int state;
+	struct expression *expr;
+	struct instruction *insn;
+	struct asm_rules *rules;
+	const char *constraint;
+	struct ident *ident;
+
+	insn = alloc_instruction(OP_ASM, 0);
+	expr = stmt->asm_string;
+	if (!expr || expr->type != EXPR_STRING) {
+		warning(stmt->pos, "expected string in inline asm");
+		return VOID;
+	}
+	insn->string = expr->string->data;
+
+	rules = __alloc_asm_rules(0);
+	insn->asm_rules = rules;
+
+	/* Gather the inputs.. */
+	state = 0;
+	ident = NULL;
+	constraint = NULL;
+	FOR_EACH_PTR(stmt->asm_inputs, expr) {
+		switch (state) {
+		case 0:	/* Identifier */
+			state = 1;
+			ident = (struct ident *)expr;
+			continue;
+
+		case 1:	/* Constraint */
+			state = 2;
+			constraint = expr ? expr->string->data : "";
+			continue;
+
+		case 2:	/* Expression */
+			state = 0;
+			add_asm_input(ep, insn, expr, constraint, ident);
+		}
+	} END_FOR_EACH_PTR(expr);
+
+	add_one_insn(ep, insn);
+
+	/* Assign the outputs */
+	state = 0;
+	ident = NULL;
+	constraint = NULL;
+	FOR_EACH_PTR(stmt->asm_outputs, expr) {
+		switch (state) {
+		case 0:	/* Identifier */
+			state = 1;
+			ident = (struct ident *)expr;
+			continue;
+
+		case 1:	/* Constraint */
+			state = 2;
+			constraint = expr ? expr->string->data : "";
+			continue;
+
+		case 2:
+			state = 0;
+			add_asm_output(ep, insn, expr, constraint, ident);
+		}
+	} END_FOR_EACH_PTR(expr);
+
+	return VOID;
+}
+
+static int multijmp_cmp(const void *_a, const void *_b)
+{
+	const struct multijmp *a = _a;
+	const struct multijmp *b = _b;
+
+	// "default" case?
+	if (a->begin > a->end) {
+		if (b->begin > b->end)
+			return 0;
+		return 1;
+	}
+	if (b->begin > b->end)
+		return -1;
+	if (a->begin == b->begin) {
+		if (a->end == b->end)
+			return 0;
+		return (a->end < b->end) ? -1 : 1;
+	}
+	return a->begin < b->begin ? -1 : 1;
+}
+
+static void sort_switch_cases(struct instruction *insn)
+{
+	sort_list((struct ptr_list **)&insn->multijmp_list, multijmp_cmp);
+}
+
+static pseudo_t linearize_declaration(struct entrypoint *ep, struct statement *stmt)
+{
+	struct symbol *sym;
+
+	concat_symbol_list(stmt->declaration, &ep->syms);
+
+	FOR_EACH_PTR(stmt->declaration, sym) {
+		linearize_one_symbol(ep, sym);
+	} END_FOR_EACH_PTR(sym);
+	return VOID;
+}
+
+static pseudo_t linearize_return(struct entrypoint *ep, struct statement *stmt)
+{
+	struct expression *expr = stmt->expression;
+	struct basic_block *bb_return = get_bound_block(ep, stmt->ret_target);
+	struct basic_block *active;
+	pseudo_t src = linearize_expression(ep, expr);
+	active = ep->active;
+	if (active && src != VOID) {
+		struct instruction *phi_node = first_instruction(bb_return->insns);
+		pseudo_t phi;
+		if (!phi_node) {
+			phi_node = alloc_typed_instruction(OP_PHI, expr->ctype);
+			phi_node->target = alloc_pseudo(phi_node);
+			phi_node->bb = bb_return;
+			add_instruction(&bb_return->insns, phi_node);
+		}
+		phi = alloc_phi(active, src, type_size(expr->ctype));
+		phi->ident = &return_ident;
+		use_pseudo(phi_node, phi, add_pseudo(&phi_node->phi_list, phi));
+	}
+	add_goto(ep, bb_return);
+	return VOID;
+}
+
+static pseudo_t linearize_switch(struct entrypoint *ep, struct statement *stmt)
+{
+	struct symbol *sym;
+	struct instruction *switch_ins;
+	struct basic_block *switch_end = alloc_basic_block(ep, stmt->pos);
+	struct basic_block *active, *default_case;
+	struct multijmp *jmp;
+	pseudo_t pseudo;
+
+	pseudo = linearize_expression(ep, stmt->switch_expression);
+
+	active = ep->active;
+	if (!bb_reachable(active))
+		return VOID;
+
+	switch_ins = alloc_instruction(OP_SWITCH, 0);
+	use_pseudo(switch_ins, pseudo, &switch_ins->cond);
+	add_one_insn(ep, switch_ins);
+	finish_block(ep);
+
+	default_case = NULL;
+	FOR_EACH_PTR(stmt->switch_case->symbol_list, sym) {
+		struct statement *case_stmt = sym->stmt;
+		struct basic_block *bb_case = get_bound_block(ep, sym);
+
+		if (!case_stmt->case_expression) {
+			default_case = bb_case;
+			continue;
+		} else {
+			int begin, end;
+
+			begin = end = case_stmt->case_expression->value;
+			if (case_stmt->case_to)
+				end = case_stmt->case_to->value;
+			if (begin > end)
+				jmp = alloc_multijmp(bb_case, end, begin);
+			else
+				jmp = alloc_multijmp(bb_case, begin, end);
+
+		}
+		add_multijmp(&switch_ins->multijmp_list, jmp);
+		add_bb(&bb_case->parents, active);
+		add_bb(&active->children, bb_case);
+	} END_FOR_EACH_PTR(sym);
+
+	bind_label(stmt->switch_break, switch_end, stmt->pos);
+
+	/* And linearize the actual statement */
+	linearize_statement(ep, stmt->switch_statement);
+	set_activeblock(ep, switch_end);
+
+	if (!default_case)
+		default_case = switch_end;
+
+	jmp = alloc_multijmp(default_case, 1, 0);
+	add_multijmp(&switch_ins->multijmp_list, jmp);
+	add_bb(&default_case->parents, active);
+	add_bb(&active->children, default_case);
+	sort_switch_cases(switch_ins);
+
+	return VOID;
+}
+
+static pseudo_t linearize_iterator(struct entrypoint *ep, struct statement *stmt)
+{
+	struct statement  *pre_statement = stmt->iterator_pre_statement;
+	struct expression *pre_condition = stmt->iterator_pre_condition;
+	struct statement  *statement = stmt->iterator_statement;
+	struct statement  *post_statement = stmt->iterator_post_statement;
+	struct expression *post_condition = stmt->iterator_post_condition;
+	struct basic_block *loop_top, *loop_body, *loop_continue, *loop_end;
+	struct symbol *sym;
+
+	FOR_EACH_PTR(stmt->iterator_syms, sym) {
+		linearize_one_symbol(ep, sym);
+	} END_FOR_EACH_PTR(sym);
+	concat_symbol_list(stmt->iterator_syms, &ep->syms);
+	linearize_statement(ep, pre_statement);
+
+	loop_body = loop_top = alloc_basic_block(ep, stmt->pos);
+	loop_continue = alloc_basic_block(ep, stmt->pos);
+	loop_end = alloc_basic_block(ep, stmt->pos);
+
+	/* An empty post-condition means that it's the same as the pre-condition */
+	if (!post_condition) {
+		loop_top = alloc_basic_block(ep, stmt->pos);
+		set_activeblock(ep, loop_top);
+	}
+
+	if (pre_condition)
+			linearize_cond_branch(ep, pre_condition, loop_body, loop_end);
+
+	bind_label(stmt->iterator_continue, loop_continue, stmt->pos);
+	bind_label(stmt->iterator_break, loop_end, stmt->pos);
+
+	set_activeblock(ep, loop_body);
+	linearize_statement(ep, statement);
+	add_goto(ep, loop_continue);
+
+	set_activeblock(ep, loop_continue);
+	linearize_statement(ep, post_statement);
+	if (!post_condition)
+		add_goto(ep, loop_top);
+	else
+		linearize_cond_branch(ep, post_condition, loop_top, loop_end);
+	set_activeblock(ep, loop_end);
+
+	return VOID;
+}
+
+pseudo_t linearize_statement(struct entrypoint *ep, struct statement *stmt)
+{
+	struct basic_block *bb;
+
+	if (!stmt)
+		return VOID;
+
+	bb = ep->active;
+	if (bb && !bb->insns)
+		bb->pos = stmt->pos;
+	current_pos = stmt->pos;
+
+	switch (stmt->type) {
+	case STMT_NONE:
+		break;
+
+	case STMT_DECLARATION:
+		return linearize_declaration(ep, stmt);
+
+	case STMT_CONTEXT:
+		return linearize_context(ep, stmt);
+
+	case STMT_RANGE:
+		return linearize_range(ep, stmt);
+
+	case STMT_EXPRESSION:
+		return linearize_expression(ep, stmt->expression);
+
+	case STMT_ASM:
+		return linearize_asm_statement(ep, stmt);
+
+	case STMT_RETURN:
+		return linearize_return(ep, stmt);
+
+	case STMT_CASE: {
+		add_label(ep, stmt->case_label);
+		linearize_statement(ep, stmt->case_statement);
+		break;
+	}
+
+	case STMT_LABEL: {
+		struct symbol *label = stmt->label_identifier;
+
+		if (label->used) {
+			add_label(ep, label);
+		}
+		return linearize_statement(ep, stmt->label_statement);
+	}
+
+	case STMT_GOTO: {
+		struct symbol *sym;
+		struct expression *expr;
+		struct instruction *goto_ins;
+		struct basic_block *active;
+		pseudo_t pseudo;
+
+		active = ep->active;
+		if (!bb_reachable(active))
+			break;
+
+		if (stmt->goto_label) {
+			add_goto(ep, get_bound_block(ep, stmt->goto_label));
+			break;
+		}
+
+		expr = stmt->goto_expression;
+		if (!expr)
+			break;
+
+		/* This can happen as part of simplification */
+		if (expr->type == EXPR_LABEL) {
+			add_goto(ep, get_bound_block(ep, expr->label_symbol));
+			break;
+		}
+
+		pseudo = linearize_expression(ep, expr);
+		goto_ins = alloc_instruction(OP_COMPUTEDGOTO, 0);
+		use_pseudo(goto_ins, pseudo, &goto_ins->target);
+		add_one_insn(ep, goto_ins);
+
+		FOR_EACH_PTR(stmt->target_list, sym) {
+			struct basic_block *bb_computed = get_bound_block(ep, sym);
+			struct multijmp *jmp = alloc_multijmp(bb_computed, 1, 0);
+			add_multijmp(&goto_ins->multijmp_list, jmp);
+			add_bb(&bb_computed->parents, ep->active);
+			add_bb(&active->children, bb_computed);
+		} END_FOR_EACH_PTR(sym);
+
+		finish_block(ep);
+		break;
+	}
+
+	case STMT_COMPOUND:
+		if (stmt->inline_fn)
+			return linearize_inlined_call(ep, stmt);
+		return linearize_compound_statement(ep, stmt);
+
+	/*
+	 * This could take 'likely/unlikely' into account, and
+	 * switch the arms around appropriately..
+	 */
+	case STMT_IF: {
+		struct basic_block *bb_true, *bb_false, *endif;
+ 		struct expression *cond = stmt->if_conditional;
+
+		bb_true = alloc_basic_block(ep, stmt->pos);
+		bb_false = endif = alloc_basic_block(ep, stmt->pos);
+
+ 		linearize_cond_branch(ep, cond, bb_true, bb_false);
+
+		set_activeblock(ep, bb_true);
+ 		linearize_statement(ep, stmt->if_true);
+ 
+ 		if (stmt->if_false) {
+			endif = alloc_basic_block(ep, stmt->pos);
+			add_goto(ep, endif);
+			set_activeblock(ep, bb_false);
+ 			linearize_statement(ep, stmt->if_false);
+		}
+		set_activeblock(ep, endif);
+		break;
+	}
+
+	case STMT_SWITCH:
+		return linearize_switch(ep, stmt);
+
+	case STMT_ITERATOR:
+		return linearize_iterator(ep, stmt);
+
+	default:
+		break;
+	}
+	return VOID;
+}
+
+static struct entrypoint *linearize_fn(struct symbol *sym, struct symbol *base_type)
+{
+	struct entrypoint *ep;
+	struct basic_block *bb;
+	struct symbol *arg;
+	struct instruction *entry;
+	pseudo_t result;
+	int i;
+
+	if (!base_type->stmt)
+		return NULL;
+
+	ep = alloc_entrypoint();
+	bb = alloc_basic_block(ep, sym->pos);
+	
+	ep->name = sym;
+	sym->ep = ep;
+	set_activeblock(ep, bb);
+
+	entry = alloc_instruction(OP_ENTRY, 0);
+	add_one_insn(ep, entry);
+	ep->entry = entry;
+
+	concat_symbol_list(base_type->arguments, &ep->syms);
+
+	/* FIXME!! We should do something else about varargs.. */
+	i = 0;
+	FOR_EACH_PTR(base_type->arguments, arg) {
+		linearize_argument(ep, arg, ++i);
+	} END_FOR_EACH_PTR(arg);
+
+	result = linearize_statement(ep, base_type->stmt);
+	if (bb_reachable(ep->active) && !bb_terminated(ep->active)) {
+		struct symbol *ret_type = base_type->ctype.base_type;
+		struct instruction *insn = alloc_typed_instruction(OP_RET, ret_type);
+
+		if (type_size(ret_type) > 0)
+			use_pseudo(insn, result, &insn->src);
+		add_one_insn(ep, insn);
+	}
+
+	if (fdump_linearize) {
+		if (fdump_linearize == 2)
+			return ep;
+		show_entry(ep);
+	}
+
+	/*
+	 * Do trivial flow simplification - branches to
+	 * branches, kill dead basicblocks etc
+	 */
+	kill_unreachable_bbs(ep);
+
+	/*
+	 * Turn symbols into pseudos
+	 */
+	simplify_symbol_usage(ep);
+
+repeat:
+	/*
+	 * Remove trivial instructions, and try to CSE
+	 * the rest.
+	 */
+	do {
+		cleanup_and_cse(ep);
+		pack_basic_blocks(ep);
+	} while (repeat_phase & REPEAT_CSE);
+
+	kill_unreachable_bbs(ep);
+	vrfy_flow(ep);
+
+	/* Cleanup */
+	clear_symbol_pseudos(ep);
+
+	/* And track pseudo register usage */
+	track_pseudo_liveness(ep);
+
+	/*
+	 * Some flow optimizations can only effectively
+	 * be done when we've done liveness analysis. But
+	 * if they trigger, we need to start all over
+	 * again
+	 */
+	if (simplify_flow(ep)) {
+		clear_liveness(ep);
+		goto repeat;
+	}
+
+	/* Finally, add deathnotes to pseudos now that we have them */
+	if (dbg_dead)
+		track_pseudo_death(ep);
+
+	return ep;
+}
+
+struct entrypoint *linearize_symbol(struct symbol *sym)
+{
+	struct symbol *base_type;
+
+	if (!sym)
+		return NULL;
+	current_pos = sym->pos;
+	base_type = sym->ctype.base_type;
+	if (!base_type)
+		return NULL;
+	if (base_type->type == SYM_FN)
+		return linearize_fn(sym, base_type);
+	return NULL;
+}
--- /dev/null	Fri Dec 21 15:00:13 2018
+++ new/usr/src/tools/smatch/src/linearize.h	Fri Dec 21 15:00:13 2018
@@ -0,0 +1,348 @@
+#ifndef LINEARIZE_H
+#define LINEARIZE_H
+
+#include "lib.h"
+#include "allocate.h"
+#include "token.h"
+#include "parse.h"
+#include "symbol.h"
+
+struct instruction;
+DECLARE_PTR_LIST(pseudo_ptr_list, pseudo_t);
+
+struct pseudo_user {
+	struct instruction *insn;
+	pseudo_t *userp;
+};
+
+DECLARE_ALLOCATOR(pseudo_user);
+DECLARE_PTR_LIST(pseudo_user_list, struct pseudo_user);
+
+
+enum pseudo_type {
+	PSEUDO_VOID,
+	PSEUDO_REG,
+	PSEUDO_SYM,
+	PSEUDO_VAL,
+	PSEUDO_ARG,
+	PSEUDO_PHI,
+};
+
+struct pseudo {
+	int nr;
+	int size:16;	/* OP_SETVAL only */
+	enum pseudo_type type:8;
+	struct pseudo_user_list *users;
+	struct ident *ident;
+	union {
+		struct symbol *sym;
+		struct instruction *def;
+		long long value;
+	};
+	void *priv;
+};
+
+extern struct pseudo void_pseudo;
+
+#define VOID (&void_pseudo)
+
+struct multijmp {
+	struct basic_block *target;
+	int begin, end;
+};
+
+struct asm_constraint {
+	pseudo_t pseudo;
+	const char *constraint;
+	const struct ident *ident;
+};
+
+DECLARE_ALLOCATOR(asm_constraint);
+DECLARE_PTR_LIST(asm_constraint_list, struct asm_constraint);
+
+struct asm_rules {
+	struct asm_constraint_list *inputs;
+	struct asm_constraint_list *outputs;
+	struct asm_constraint_list *clobbers;
+};
+
+DECLARE_ALLOCATOR(asm_rules);
+
+struct instruction {
+	unsigned opcode:8,
+		 size:24;
+	struct basic_block *bb;
+	struct position pos;
+	struct symbol *type;
+	union {
+		pseudo_t target;
+		pseudo_t cond;		/* for branch and switch */
+	};
+	union {
+		struct /* entrypoint */ {
+			struct pseudo_list *arg_list;
+		};
+		struct /* branch */ {
+			struct basic_block *bb_true, *bb_false;
+		};
+		struct /* switch */ {
+			struct multijmp_list *multijmp_list;
+		};
+		struct /* phi_node */ {
+			struct pseudo_list *phi_list;
+		};
+		struct /* phi source */ {
+			pseudo_t phi_src;
+			struct instruction_list *phi_users;
+		};
+		struct /* unops */ {
+			pseudo_t src;
+			struct symbol *orig_type;	/* casts */
+			unsigned int offset;		/* memops */
+		};
+		struct /* binops and sel */ {
+			pseudo_t src1, src2, src3;
+		};
+		struct /* slice */ {
+			pseudo_t base;
+			unsigned from, len;
+		};
+		struct /* setval */ {
+			pseudo_t symbol;		/* Subtle: same offset as "src" !! */
+			struct expression *val;
+		};
+		struct /* call */ {
+			pseudo_t func;
+			struct pseudo_list *arguments;
+			struct symbol *fntype;
+		};
+		struct /* context */ {
+			int increment;
+			int check;
+			struct expression *context_expr;
+		};
+		struct /* asm */ {
+			const char *string;
+			struct asm_rules *asm_rules;
+		};
+	};
+};
+
+enum opcode {
+	OP_BADOP,
+
+	/* Entry */
+	OP_ENTRY,
+
+	/* Terminator */
+	OP_TERMINATOR,
+	OP_RET = OP_TERMINATOR,
+	OP_BR,
+	OP_CBR,
+	OP_SWITCH,
+	OP_INVOKE,
+	OP_COMPUTEDGOTO,
+	OP_UNWIND,
+	OP_TERMINATOR_END = OP_UNWIND,
+	
+	/* Binary */
+	OP_BINARY,
+	OP_ADD = OP_BINARY,
+	OP_SUB,
+	OP_MULU, OP_MULS,
+	OP_DIVU, OP_DIVS,
+	OP_MODU, OP_MODS,
+	OP_SHL,
+	OP_LSR, OP_ASR,
+	
+	/* Logical */
+	OP_AND,
+	OP_OR,
+	OP_XOR,
+	OP_AND_BOOL,
+	OP_OR_BOOL,
+	OP_BINARY_END = OP_OR_BOOL,
+
+	/* Binary comparison */
+	OP_BINCMP,
+	OP_SET_EQ = OP_BINCMP,
+	OP_SET_NE,
+	OP_SET_LE,
+	OP_SET_GE,
+	OP_SET_LT,
+	OP_SET_GT,
+	OP_SET_B,
+	OP_SET_A,
+	OP_SET_BE,
+	OP_SET_AE,
+	OP_BINCMP_END = OP_SET_AE,
+
+	/* Uni */
+	OP_NOT,
+	OP_NEG,
+
+	/* Select - three input values */
+	OP_SEL,
+	
+	/* Memory */
+	OP_MALLOC,
+	OP_FREE,
+	OP_ALLOCA,
+	OP_LOAD,
+	OP_STORE,
+	OP_SETVAL,
+	OP_SYMADDR,
+	OP_GET_ELEMENT_PTR,
+
+	/* Other */
+	OP_PHI,
+	OP_PHISOURCE,
+	OP_CAST,
+	OP_SCAST,
+	OP_FPCAST,
+	OP_PTRCAST,
+	OP_INLINED_CALL,
+	OP_CALL,
+	OP_VANEXT,
+	OP_VAARG,
+	OP_SLICE,
+	OP_SNOP,
+	OP_LNOP,
+	OP_NOP,
+	OP_DEATHNOTE,
+	OP_ASM,
+
+	/* Sparse tagging (line numbers, context, whatever) */
+	OP_CONTEXT,
+	OP_RANGE,
+
+	/* Needed to translate SSA back to normal form */
+	OP_COPY,
+};
+
+struct basic_block_list;
+struct instruction_list;
+
+struct basic_block {
+	struct position pos;
+	unsigned long generation;
+	int context;
+	struct entrypoint *ep;
+	struct basic_block_list *parents; /* sources */
+	struct basic_block_list *children; /* destinations */
+	struct instruction_list *insns;	/* Linear list of instructions */
+	struct pseudo_list *needs, *defines;
+	union {
+		unsigned int nr;	/* unique id for label's names */
+		void *priv;
+	};
+};
+
+
+static inline void add_bb(struct basic_block_list **list, struct basic_block *bb)
+{
+	add_ptr_list(list, bb);
+}
+
+static inline void add_instruction(struct instruction_list **list, struct instruction *insn)
+{
+	add_ptr_list(list, insn);
+}
+
+static inline void add_multijmp(struct multijmp_list **list, struct multijmp *multijmp)
+{
+	add_ptr_list(list, multijmp);
+}
+
+static inline pseudo_t *add_pseudo(struct pseudo_list **list, pseudo_t pseudo)
+{
+	return add_ptr_list(list, pseudo);
+}
+
+static inline int remove_pseudo(struct pseudo_list **list, pseudo_t pseudo)
+{
+	return delete_ptr_list_entry((struct ptr_list **)list, pseudo, 0) != 0;
+}
+
+static inline int bb_terminated(struct basic_block *bb)
+{
+	struct instruction *insn;
+	if (!bb)
+		return 0;
+	insn = last_instruction(bb->insns);
+	return insn && insn->opcode >= OP_TERMINATOR
+	            && insn->opcode <= OP_TERMINATOR_END;
+}
+
+static inline int bb_reachable(struct basic_block *bb)
+{
+	return bb != NULL;
+}
+
+static inline void add_pseudo_ptr(pseudo_t *ptr, struct pseudo_ptr_list **list)
+{
+	add_ptr_list(list, ptr);
+}
+
+static inline void add_pseudo_user_ptr(struct pseudo_user *user, struct pseudo_user_list **list)
+{
+	add_ptr_list(list, user);
+}
+
+static inline int has_use_list(pseudo_t p)
+{
+	return (p && p->type != PSEUDO_VOID && p->type != PSEUDO_VAL);
+}
+
+static inline struct pseudo_user *alloc_pseudo_user(struct instruction *insn, pseudo_t *pp)
+{
+	struct pseudo_user *user = __alloc_pseudo_user(0);
+	user->userp = pp;
+	user->insn = insn;
+	return user;
+}
+
+static inline void use_pseudo(struct instruction *insn, pseudo_t p, pseudo_t *pp)
+{
+	*pp = p;
+	if (has_use_list(p))
+		add_pseudo_user_ptr(alloc_pseudo_user(insn, pp), &p->users);
+}
+
+static inline void remove_bb_from_list(struct basic_block_list **list, struct basic_block *entry, int count)
+{
+	delete_ptr_list_entry((struct ptr_list **)list, entry, count);
+}
+
+static inline void replace_bb_in_list(struct basic_block_list **list,
+	struct basic_block *old, struct basic_block *new, int count)
+{
+	replace_ptr_list_entry((struct ptr_list **)list, old, new, count);
+}
+
+struct entrypoint {
+	struct symbol *name;
+	struct symbol_list *syms;
+	struct pseudo_list *accesses;
+	struct basic_block_list *bbs;
+	struct basic_block *active;
+	struct instruction *entry;
+};
+
+extern void insert_select(struct basic_block *bb, struct instruction *br, struct instruction *phi, pseudo_t if_true, pseudo_t if_false);
+extern void insert_branch(struct basic_block *bb, struct instruction *br, struct basic_block *target);
+
+pseudo_t alloc_phi(struct basic_block *source, pseudo_t pseudo, int size);
+pseudo_t alloc_pseudo(struct instruction *def);
+pseudo_t value_pseudo(struct symbol *type, long long val);
+unsigned int value_size(long long value);
+
+struct entrypoint *linearize_symbol(struct symbol *sym);
+int unssa(struct entrypoint *ep);
+void show_entry(struct entrypoint *ep);
+const char *show_pseudo(pseudo_t pseudo);
+void show_bb(struct basic_block *bb);
+const char *show_instruction(struct instruction *insn);
+
+#endif /* LINEARIZE_H */
+
--- /dev/null	Fri Dec 21 15:00:14 2018
+++ new/usr/src/tools/smatch/src/liveness.c	Fri Dec 21 15:00:14 2018
@@ -0,0 +1,359 @@
+/*
+ * Register - track pseudo usage, maybe eventually try to do register
+ * allocation.
+ *
+ * Copyright (C) 2004 Linus Torvalds
+ */
+
+#include <assert.h>
+
+#include "parse.h"
+#include "expression.h"
+#include "linearize.h"
+#include "flow.h"
+
+static void phi_defines(struct instruction * phi_node, pseudo_t target,
+	void (*defines)(struct basic_block *, pseudo_t))
+{
+	pseudo_t phi;
+	FOR_EACH_PTR(phi_node->phi_list, phi) {
+		struct instruction *def;
+		if (phi == VOID)
+			continue;
+		def = phi->def;
+		if (!def || !def->bb)
+			continue;
+		defines(def->bb, target);
+	} END_FOR_EACH_PTR(phi);
+}
+
+static void asm_liveness(struct basic_block *bb, struct instruction *insn,
+	void (*def)(struct basic_block *, pseudo_t),
+	void (*use)(struct basic_block *, pseudo_t))
+{
+	struct asm_constraint *entry;
+
+	FOR_EACH_PTR(insn->asm_rules->inputs, entry) {
+		use(bb, entry->pseudo);
+	} END_FOR_EACH_PTR(entry);
+		
+	FOR_EACH_PTR(insn->asm_rules->outputs, entry) {
+		def(bb, entry->pseudo);
+	} END_FOR_EACH_PTR(entry);
+}
+
+static void track_instruction_usage(struct basic_block *bb, struct instruction *insn,
+	void (*def)(struct basic_block *, pseudo_t),
+	void (*use)(struct basic_block *, pseudo_t))
+{
+	pseudo_t pseudo;
+
+	#define USES(x)		use(bb, insn->x)
+	#define DEFINES(x)	def(bb, insn->x)
+
+	switch (insn->opcode) {
+	case OP_RET:
+		USES(src);
+		break;
+
+	case OP_CBR:
+	case OP_SWITCH:
+		USES(cond);
+		break;
+
+	case OP_COMPUTEDGOTO:
+		USES(target);
+		break;
+	
+	/* Binary */
+	case OP_BINARY ... OP_BINARY_END:
+	case OP_BINCMP ... OP_BINCMP_END:
+		USES(src1); USES(src2); DEFINES(target);
+		break;
+
+	/* Uni */
+	case OP_NOT: case OP_NEG:
+		USES(src1); DEFINES(target);
+		break;
+
+	case OP_SEL:
+		USES(src1); USES(src2); USES(src3); DEFINES(target);
+		break;
+	
+	/* Memory */
+	case OP_LOAD:
+		USES(src); DEFINES(target);
+		break;
+
+	case OP_STORE:
+		USES(src); USES(target);
+		break;
+
+	case OP_SETVAL:
+		DEFINES(target);
+		break;
+
+	case OP_SYMADDR:
+		USES(symbol); DEFINES(target);
+		break;
+
+	/* Other */
+	case OP_PHI:
+		/* Phi-nodes are "backwards" nodes. Their def doesn't matter */
+		phi_defines(insn, insn->target, def);
+		break;
+
+	case OP_PHISOURCE:
+		/*
+		 * We don't care about the phi-source define, they get set
+		 * up and expanded by the OP_PHI
+		 */
+		USES(phi_src);
+		break;
+
+	case OP_CAST:
+	case OP_SCAST:
+	case OP_FPCAST:
+	case OP_PTRCAST:
+		USES(src); DEFINES(target);
+		break;
+
+	case OP_CALL:
+		USES(func);
+		if (insn->target != VOID)
+			DEFINES(target);
+		FOR_EACH_PTR(insn->arguments, pseudo) {
+			use(bb, pseudo);
+		} END_FOR_EACH_PTR(pseudo);
+		break;
+
+	case OP_SLICE:
+		USES(base); DEFINES(target);
+		break;
+
+	case OP_ASM:
+		asm_liveness(bb, insn, def, use);
+		break;
+
+	case OP_RANGE:
+		USES(src1); USES(src2); USES(src3);
+		break;
+
+	case OP_BADOP:
+	case OP_INVOKE:
+	case OP_UNWIND:
+	case OP_MALLOC:
+	case OP_FREE:
+	case OP_ALLOCA:
+	case OP_GET_ELEMENT_PTR:
+	case OP_VANEXT:
+	case OP_VAARG:
+	case OP_SNOP:
+	case OP_LNOP:
+	case OP_NOP:
+	case OP_CONTEXT:
+		break;
+	}
+}
+
+int pseudo_in_list(struct pseudo_list *list, pseudo_t pseudo)
+{
+	pseudo_t old;
+	FOR_EACH_PTR(list,old) {
+		if (old == pseudo)
+			return 1;
+	} END_FOR_EACH_PTR(old);   
+	return 0;
+}
+
+static int liveness_changed;
+
+static void add_pseudo_exclusive(struct pseudo_list **list, pseudo_t pseudo)
+{
+	if (!pseudo_in_list(*list, pseudo)) {
+		liveness_changed = 1;
+		add_pseudo(list, pseudo);
+	}
+}
+
+static inline int trackable_pseudo(pseudo_t pseudo)
+{
+	return pseudo && (pseudo->type == PSEUDO_REG || pseudo->type == PSEUDO_ARG);
+}
+
+static void insn_uses(struct basic_block *bb, pseudo_t pseudo)
+{
+	if (trackable_pseudo(pseudo)) {
+		struct instruction *def = pseudo->def;
+		if (pseudo->type != PSEUDO_REG || def->bb != bb || def->opcode == OP_PHI)
+			add_pseudo_exclusive(&bb->needs, pseudo);
+	}
+}
+
+static void insn_defines(struct basic_block *bb, pseudo_t pseudo)
+{
+	assert(trackable_pseudo(pseudo));
+	add_pseudo(&bb->defines, pseudo);
+}
+
+static void track_bb_liveness(struct basic_block *bb)
+{
+	pseudo_t needs;
+
+	FOR_EACH_PTR(bb->needs, needs) {
+		struct basic_block *parent;
+		FOR_EACH_PTR(bb->parents, parent) {
+			if (!pseudo_in_list(parent->defines, needs)) {
+				add_pseudo_exclusive(&parent->needs, needs);
+			}
+		} END_FOR_EACH_PTR(parent);
+	} END_FOR_EACH_PTR(needs);
+}
+
+/*
+ * We need to clear the liveness information if we 
+ * are going to re-run it.
+ */
+void clear_liveness(struct entrypoint *ep)
+{
+	struct basic_block *bb;
+
+	FOR_EACH_PTR(ep->bbs, bb) {
+		free_ptr_list(&bb->needs);
+		free_ptr_list(&bb->defines);
+	} END_FOR_EACH_PTR(bb);
+}
+
+/*
+ * Track inter-bb pseudo liveness. The intra-bb case
+ * is purely local information.
+ */
+void track_pseudo_liveness(struct entrypoint *ep)
+{
+	struct basic_block *bb;
+
+	/* Add all the bb pseudo usage */
+	FOR_EACH_PTR(ep->bbs, bb) {
+		struct instruction *insn;
+		FOR_EACH_PTR(bb->insns, insn) {
+			if (!insn->bb)
+				continue;
+			assert(insn->bb == bb);
+			track_instruction_usage(bb, insn, insn_defines, insn_uses);
+		} END_FOR_EACH_PTR(insn);
+	} END_FOR_EACH_PTR(bb);
+
+	/* Calculate liveness.. */
+	do {
+		liveness_changed = 0;
+		FOR_EACH_PTR_REVERSE(ep->bbs, bb) {
+			track_bb_liveness(bb);
+		} END_FOR_EACH_PTR_REVERSE(bb);
+	} while (liveness_changed);
+
+	/* Remove the pseudos from the "defines" list that are used internally */
+	FOR_EACH_PTR(ep->bbs, bb) {
+		pseudo_t def;
+		FOR_EACH_PTR(bb->defines, def) {
+			struct basic_block *child;
+			FOR_EACH_PTR(bb->children, child) {
+				if (pseudo_in_list(child->needs, def))
+					goto is_used;
+			} END_FOR_EACH_PTR(child);
+			DELETE_CURRENT_PTR(def);
+is_used:
+		;
+		} END_FOR_EACH_PTR(def);
+		PACK_PTR_LIST(&bb->defines);
+	} END_FOR_EACH_PTR(bb);
+}
+
+static void merge_pseudo_list(struct pseudo_list *src, struct pseudo_list **dest)
+{
+	pseudo_t pseudo;
+	FOR_EACH_PTR(src, pseudo) {
+		add_pseudo_exclusive(dest, pseudo);
+	} END_FOR_EACH_PTR(pseudo);
+}
+
+void track_phi_uses(struct instruction *insn)
+{
+	pseudo_t phi;
+	FOR_EACH_PTR(insn->phi_list, phi) {
+		struct instruction *def;
+		if (phi == VOID || !phi->def)
+			continue;
+		def = phi->def;
+		assert(def->opcode == OP_PHISOURCE);
+		add_ptr_list(&def->phi_users, insn);
+	} END_FOR_EACH_PTR(phi);
+}
+
+static void track_bb_phi_uses(struct basic_block *bb)
+{
+	struct instruction *insn;
+	FOR_EACH_PTR(bb->insns, insn) {
+		if (insn->bb && insn->opcode == OP_PHI)
+			track_phi_uses(insn);
+	} END_FOR_EACH_PTR(insn);
+}
+
+static struct pseudo_list **live_list;
+static struct pseudo_list *dead_list;
+
+static void death_def(struct basic_block *bb, pseudo_t pseudo)
+{
+}
+
+static void death_use(struct basic_block *bb, pseudo_t pseudo)
+{
+	if (trackable_pseudo(pseudo) && !pseudo_in_list(*live_list, pseudo)) {
+		add_pseudo(&dead_list, pseudo);
+		add_pseudo(live_list, pseudo);
+	}
+}
+
+static void track_pseudo_death_bb(struct basic_block *bb)
+{
+	struct pseudo_list *live = NULL;
+	struct basic_block *child;
+	struct instruction *insn;
+
+	FOR_EACH_PTR(bb->children, child) {
+		merge_pseudo_list(child->needs, &live);
+	} END_FOR_EACH_PTR(child);
+
+	live_list = &live;
+	FOR_EACH_PTR_REVERSE(bb->insns, insn) {
+		if (!insn->bb)
+			continue;
+
+		dead_list = NULL;
+		track_instruction_usage(bb, insn, death_def, death_use);
+		if (dead_list) {
+			pseudo_t dead;
+			FOR_EACH_PTR(dead_list, dead) {
+				struct instruction *deathnote = __alloc_instruction(0);
+				deathnote->bb = bb;
+				deathnote->opcode = OP_DEATHNOTE;
+				deathnote->target = dead;
+				INSERT_CURRENT(deathnote, insn);
+			} END_FOR_EACH_PTR(dead);
+			free_ptr_list(&dead_list);
+		}
+	} END_FOR_EACH_PTR_REVERSE(insn);
+	free_ptr_list(&live);
+}
+
+void track_pseudo_death(struct entrypoint *ep)
+{
+	struct basic_block *bb;
+
+	FOR_EACH_PTR(ep->bbs, bb) {
+		track_bb_phi_uses(bb);
+	} END_FOR_EACH_PTR(bb);
+
+	FOR_EACH_PTR(ep->bbs, bb) {
+		track_pseudo_death_bb(bb);
+	} END_FOR_EACH_PTR(bb);
+}
--- /dev/null	Fri Dec 21 15:00:14 2018
+++ new/usr/src/tools/smatch/src/macro_table.c	Fri Dec 21 15:00:14 2018
@@ -0,0 +1,67 @@
+/*
+ * sparse/macro_table.c
+ *
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "lib.h"
+#include "parse.h"
+#include "cwchash/hashtable.h"
+
+static struct hashtable *macro_table;
+
+static DEFINE_HASHTABLE_INSERT(do_insert_macro, struct position, char);
+static DEFINE_HASHTABLE_SEARCH(do_search_macro, struct position, char);
+
+static inline unsigned int position_hash(void *_pos)
+{
+	struct position *pos = _pos;
+
+	return pos->line | (pos->pos << 22) | (pos->stream << 18); 
+}
+
+static inline int equalkeys(void *_pos1, void *_pos2)
+{
+	struct position *pos1 = _pos1;
+	struct position *pos2 = _pos2;
+
+	return pos1->line == pos2->line && pos1->pos == pos2->pos &&
+		pos1->stream == pos2->stream;
+}
+
+void store_macro_pos(struct token *token)
+{
+	if (!macro_table)
+		macro_table = create_hashtable(5000, position_hash, equalkeys);
+
+	if (get_macro_name(token->pos))
+		return;
+
+	do_insert_macro(macro_table, &token->pos, token->ident->name);
+}
+
+char *get_macro_name(struct position pos)
+{
+	return do_search_macro(macro_table, &pos);
+}
--- /dev/null	Fri Dec 21 15:00:14 2018
+++ new/usr/src/tools/smatch/src/memops.c	Fri Dec 21 15:00:14 2018
@@ -0,0 +1,197 @@
+/*
+ * memops - try to combine memory ops.
+ *
+ * Copyright (C) 2004 Linus Torvalds
+ */
+
+#include <string.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <stddef.h>
+#include <assert.h>
+
+#include "parse.h"
+#include "expression.h"
+#include "linearize.h"
+#include "flow.h"
+
+static int find_dominating_parents(pseudo_t pseudo, struct instruction *insn,
+	struct basic_block *bb, unsigned long generation, struct pseudo_list **dominators,
+	int local)
+{
+	struct basic_block *parent;
+
+	FOR_EACH_PTR(bb->parents, parent) {
+		struct instruction *one;
+		struct instruction *br;
+		pseudo_t phi;
+
+		FOR_EACH_PTR_REVERSE(parent->insns, one) {
+			int dominance;
+			if (!one->bb)
+				continue;
+			if (one == insn)
+				goto no_dominance;
+			dominance = dominates(pseudo, insn, one, local);
+			if (dominance < 0) {
+				if (one->opcode == OP_LOAD)
+					continue;
+				return 0;
+			}
+			if (!dominance)
+				continue;
+			goto found_dominator;
+		} END_FOR_EACH_PTR_REVERSE(one);
+no_dominance:
+		if (parent->generation == generation)
+			continue;
+		parent->generation = generation;
+
+		if (!find_dominating_parents(pseudo, insn, parent, generation, dominators, local))
+			return 0;
+		continue;
+
+found_dominator:
+		br = delete_last_instruction(&parent->insns);
+		phi = alloc_phi(parent, one->target, one->size);
+		phi->ident = phi->ident ? : one->target->ident;
+		add_instruction(&parent->insns, br);
+		use_pseudo(insn, phi, add_pseudo(dominators, phi));
+	} END_FOR_EACH_PTR(parent);
+	return 1;
+}		
+
+static int address_taken(pseudo_t pseudo)
+{
+	struct pseudo_user *pu;
+	FOR_EACH_PTR(pseudo->users, pu) {
+		struct instruction *insn = pu->insn;
+		if (insn->bb && (insn->opcode != OP_LOAD && insn->opcode != OP_STORE))
+			return 1;
+	} END_FOR_EACH_PTR(pu);
+	return 0;
+}
+
+static int local_pseudo(pseudo_t pseudo)
+{
+	return pseudo->type == PSEUDO_SYM
+		&& !(pseudo->sym->ctype.modifiers & (MOD_STATIC | MOD_NONLOCAL))
+		&& !address_taken(pseudo);
+}
+
+static void simplify_loads(struct basic_block *bb)
+{
+	struct instruction *insn;
+
+	FOR_EACH_PTR_REVERSE(bb->insns, insn) {
+		if (!insn->bb)
+			continue;
+		if (insn->opcode == OP_LOAD) {
+			struct instruction *dom;
+			pseudo_t pseudo = insn->src;
+			int local = local_pseudo(pseudo);
+			struct pseudo_list *dominators;
+			unsigned long generation;
+
+			/* Check for illegal offsets.. */
+			check_access(insn);
+
+			if (insn->type->ctype.modifiers & MOD_VOLATILE)
+				continue;
+
+			RECURSE_PTR_REVERSE(insn, dom) {
+				int dominance;
+				if (!dom->bb)
+					continue;
+				dominance = dominates(pseudo, insn, dom, local);
+				if (dominance) {
+					/* possible partial dominance? */
+					if (dominance < 0)  {
+						if (dom->opcode == OP_LOAD)
+							continue;
+						goto next_load;
+					}
+					/* Yeehaa! Found one! */
+					convert_load_instruction(insn, dom->target);
+					goto next_load;
+				}
+			} END_FOR_EACH_PTR_REVERSE(dom);
+
+			/* OK, go find the parents */
+			generation = ++bb_generation;
+			bb->generation = generation;
+			dominators = NULL;
+			if (find_dominating_parents(pseudo, insn, bb, generation, &dominators, local)) {
+				/* This happens with initial assignments to structures etc.. */
+				if (!dominators) {
+					if (local) {
+						assert(pseudo->type != PSEUDO_ARG);
+						convert_load_instruction(insn, value_pseudo(insn->type, 0));
+					}
+					goto next_load;
+				}
+				rewrite_load_instruction(insn, dominators);
+			}
+		}
+next_load:
+		/* Do the next one */;
+	} END_FOR_EACH_PTR_REVERSE(insn);
+}
+
+static void kill_store(struct instruction *insn)
+{
+	if (insn) {
+		insn->bb = NULL;
+		insn->opcode = OP_SNOP;
+		kill_use(&insn->target);
+	}
+}
+
+static void kill_dominated_stores(struct basic_block *bb)
+{
+	struct instruction *insn;
+
+	FOR_EACH_PTR_REVERSE(bb->insns, insn) {
+		if (!insn->bb)
+			continue;
+		if (insn->opcode == OP_STORE) {
+			struct instruction *dom;
+			pseudo_t pseudo = insn->src;
+			int local = local_pseudo(pseudo);
+
+			RECURSE_PTR_REVERSE(insn, dom) {
+				int dominance;
+				if (!dom->bb)
+					continue;
+				dominance = dominates(pseudo, insn, dom, local);
+				if (dominance) {
+					/* possible partial dominance? */
+					if (dominance < 0)
+						goto next_store;
+					if (dom->opcode == OP_LOAD)
+						goto next_store;
+					/* Yeehaa! Found one! */
+					kill_store(dom);
+				}
+			} END_FOR_EACH_PTR_REVERSE(dom);
+
+			/* OK, we should check the parents now */
+		}
+next_store:
+		/* Do the next one */;
+	} END_FOR_EACH_PTR_REVERSE(insn);
+}
+
+void simplify_memops(struct entrypoint *ep)
+{
+	struct basic_block *bb;
+
+	FOR_EACH_PTR_REVERSE(ep->bbs, bb) {
+		simplify_loads(bb);
+	} END_FOR_EACH_PTR_REVERSE(bb);
+
+	FOR_EACH_PTR_REVERSE(ep->bbs, bb) {
+		kill_dominated_stores(bb);
+	} END_FOR_EACH_PTR_REVERSE(bb);
+}
--- /dev/null	Fri Dec 21 15:00:14 2018
+++ new/usr/src/tools/smatch/src/obfuscate.c	Fri Dec 21 15:00:14 2018
@@ -0,0 +1,76 @@
+/*
+ * Example trivial client program that uses the sparse library
+ * to tokenize, preprocess and parse a C file, and prints out
+ * the results.
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003-2004 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "token.h"
+#include "parse.h"
+#include "symbol.h"
+#include "expression.h"
+#include "linearize.h"
+
+static void emit_entrypoint(struct entrypoint *ep)
+{
+	
+}
+
+static void emit_symbol(struct symbol *sym)
+{
+	struct entrypoint *ep;
+	ep = linearize_symbol(sym);
+	if (ep)
+		emit_entrypoint(ep);
+}
+
+static void emit_symbol_list(struct symbol_list *list)
+{
+	struct symbol *sym;
+
+	FOR_EACH_PTR(list, sym) {
+		expand_symbol(sym);
+		emit_symbol(sym);
+	} END_FOR_EACH_PTR(sym);
+}
+
+int main(int argc, char **argv)
+{
+	struct string_list *filelist = NULL;
+	char *file;
+
+	emit_symbol_list(sparse_initialize(argc, argv, &filelist));
+	FOR_EACH_PTR_NOTAG(filelist, file) {
+		emit_symbol_list(sparse(file));
+	} END_FOR_EACH_PTR_NOTAG(file);
+	return 0;
+}
--- /dev/null	Fri Dec 21 15:00:14 2018
+++ new/usr/src/tools/smatch/src/parse.c	Fri Dec 21 15:00:14 2018
@@ -0,0 +1,2986 @@
+/*
+ * Stupid C parser, version 1e-6.
+ *
+ * Let's see how hard this is to do.
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003-2004 Linus Torvalds
+ * Copyright (C) 2004 Christopher Li
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <limits.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "token.h"
+#include "parse.h"
+#include "symbol.h"
+#include "scope.h"
+#include "expression.h"
+#include "target.h"
+
+static struct symbol_list **function_symbol_list;
+struct symbol_list *function_computed_target_list;
+struct statement_list *function_computed_goto_list;
+
+static struct token *statement(struct token *token, struct statement **tree);
+static struct token *handle_attributes(struct token *token, struct decl_state *ctx, unsigned int keywords);
+
+typedef struct token *declarator_t(struct token *, struct decl_state *);
+static declarator_t
+	struct_specifier, union_specifier, enum_specifier,
+	attribute_specifier, typeof_specifier, parse_asm_declarator,
+	typedef_specifier, inline_specifier, auto_specifier,
+	register_specifier, static_specifier, extern_specifier,
+	thread_specifier, const_qualifier, volatile_qualifier;
+
+static struct token *parse_if_statement(struct token *token, struct statement *stmt);
+static struct token *parse_return_statement(struct token *token, struct statement *stmt);
+static struct token *parse_loop_iterator(struct token *token, struct statement *stmt);
+static struct token *parse_default_statement(struct token *token, struct statement *stmt);
+static struct token *parse_case_statement(struct token *token, struct statement *stmt);
+static struct token *parse_switch_statement(struct token *token, struct statement *stmt);
+static struct token *parse_for_statement(struct token *token, struct statement *stmt);
+static struct token *parse_while_statement(struct token *token, struct statement *stmt);
+static struct token *parse_do_statement(struct token *token, struct statement *stmt);
+static struct token *parse_goto_statement(struct token *token, struct statement *stmt);
+static struct token *parse_context_statement(struct token *token, struct statement *stmt);
+static struct token *parse_range_statement(struct token *token, struct statement *stmt);
+static struct token *parse_asm_statement(struct token *token, struct statement *stmt);
+static struct token *toplevel_asm_declaration(struct token *token, struct symbol_list **list);
+static struct token *parse_static_assert(struct token *token, struct symbol_list **unused);
+
+typedef struct token *attr_t(struct token *, struct symbol *,
+			     struct decl_state *);
+
+static attr_t
+	attribute_packed, attribute_aligned, attribute_modifier,
+	attribute_bitwise,
+	attribute_address_space, attribute_context,
+	attribute_designated_init,
+	attribute_transparent_union, ignore_attribute,
+	attribute_mode, attribute_force;
+
+typedef struct symbol *to_mode_t(struct symbol *);
+
+static to_mode_t
+	to_QI_mode, to_HI_mode, to_SI_mode, to_DI_mode, to_TI_mode, to_word_mode;
+
+enum {
+	Set_T = 1,
+	Set_S = 2,
+	Set_Char = 4,
+	Set_Int = 8,
+	Set_Double = 16,
+	Set_Float = 32,
+	Set_Signed = 64,
+	Set_Unsigned = 128,
+	Set_Short = 256,
+	Set_Long = 512,
+	Set_Vlong = 1024,
+	Set_Int128 = 2048,
+	Set_Any = Set_T | Set_Short | Set_Long | Set_Signed | Set_Unsigned
+};
+
+enum {
+	CInt = 0, CSInt, CUInt, CReal, CChar, CSChar, CUChar,
+};
+
+enum {
+	SNone = 0, STypedef, SAuto, SRegister, SExtern, SStatic, SForced, SMax,
+};
+
+static struct symbol_op typedef_op = {
+	.type = KW_MODIFIER,
+	.declarator = typedef_specifier,
+};
+
+static struct symbol_op inline_op = {
+	.type = KW_MODIFIER,
+	.declarator = inline_specifier,
+};
+
+static declarator_t noreturn_specifier;
+static struct symbol_op noreturn_op = {
+	.type = KW_MODIFIER,
+	.declarator = noreturn_specifier,
+};
+
+static declarator_t alignas_specifier;
+static struct symbol_op alignas_op = {
+	.type = KW_MODIFIER,
+	.declarator = alignas_specifier,
+};
+
+static struct symbol_op auto_op = {
+	.type = KW_MODIFIER,
+	.declarator = auto_specifier,
+};
+
+static struct symbol_op register_op = {
+	.type = KW_MODIFIER,
+	.declarator = register_specifier,
+};
+
+static struct symbol_op static_op = {
+	.type = KW_MODIFIER,
+	.declarator = static_specifier,
+};
+
+static struct symbol_op extern_op = {
+	.type = KW_MODIFIER,
+	.declarator = extern_specifier,
+};
+
+static struct symbol_op thread_op = {
+	.type = KW_MODIFIER,
+	.declarator = thread_specifier,
+};
+
+static struct symbol_op const_op = {
+	.type = KW_QUALIFIER,
+	.declarator = const_qualifier,
+};
+
+static struct symbol_op volatile_op = {
+	.type = KW_QUALIFIER,
+	.declarator = volatile_qualifier,
+};
+
+static struct symbol_op restrict_op = {
+	.type = KW_QUALIFIER,
+};
+
+static struct symbol_op typeof_op = {
+	.type = KW_SPECIFIER,
+	.declarator = typeof_specifier,
+	.test = Set_Any,
+	.set = Set_S|Set_T,
+};
+
+static struct symbol_op attribute_op = {
+	.type = KW_ATTRIBUTE,
+	.declarator = attribute_specifier,
+};
+
+static struct symbol_op struct_op = {
+	.type = KW_SPECIFIER,
+	.declarator = struct_specifier,
+	.test = Set_Any,
+	.set = Set_S|Set_T,
+};
+
+static struct symbol_op union_op = {
+	.type = KW_SPECIFIER,
+	.declarator = union_specifier,
+	.test = Set_Any,
+	.set = Set_S|Set_T,
+};
+
+static struct symbol_op enum_op = {
+	.type = KW_SPECIFIER,
+	.declarator = enum_specifier,
+	.test = Set_Any,
+	.set = Set_S|Set_T,
+};
+
+static struct symbol_op spec_op = {
+	.type = KW_SPECIFIER | KW_EXACT,
+	.test = Set_Any,
+	.set = Set_S|Set_T,
+};
+
+static struct symbol_op char_op = {
+	.type = KW_SPECIFIER,
+	.test = Set_T|Set_Long|Set_Short,
+	.set = Set_T|Set_Char,
+	.class = CChar,
+};
+
+static struct symbol_op int_op = {
+	.type = KW_SPECIFIER,
+	.test = Set_T,
+	.set = Set_T|Set_Int,
+};
+
+static struct symbol_op double_op = {
+	.type = KW_SPECIFIER,
+	.test = Set_T|Set_Signed|Set_Unsigned|Set_Short|Set_Vlong,
+	.set = Set_T|Set_Double,
+	.class = CReal,
+};
+
+/* FIXME: this is not even slightly right. */
+static struct symbol_op complex_op = {
+	.type = KW_SPECIFIER,
+	.test = 0, //Set_T|Set_Signed|Set_Unsigned|Set_Short|Set_Vlong,
+	.set = 0, //Set_Double, //Set_T,Set_Double,
+	.class = CReal,
+};
+
+static struct symbol_op float_op = {
+	.type = KW_SPECIFIER | KW_SHORT,
+	.test = Set_T|Set_Signed|Set_Unsigned|Set_Short|Set_Long,
+	.set = Set_T|Set_Float,
+	.class = CReal,
+};
+
+static struct symbol_op short_op = {
+	.type = KW_SPECIFIER | KW_SHORT,
+	.test = Set_S|Set_Char|Set_Float|Set_Double|Set_Long|Set_Short,
+	.set = Set_Short,
+};
+
+static struct symbol_op signed_op = {
+	.type = KW_SPECIFIER,
+	.test = Set_S|Set_Float|Set_Double|Set_Signed|Set_Unsigned,
+	.set = Set_Signed,
+	.class = CSInt,
+};
+
+static struct symbol_op unsigned_op = {
+	.type = KW_SPECIFIER,
+	.test = Set_S|Set_Float|Set_Double|Set_Signed|Set_Unsigned,
+	.set = Set_Unsigned,
+	.class = CUInt,
+};
+
+static struct symbol_op long_op = {
+	.type = KW_SPECIFIER | KW_LONG,
+	.test = Set_S|Set_Char|Set_Float|Set_Short|Set_Vlong,
+	.set = Set_Long,
+};
+
+static struct symbol_op int128_op = {
+	.type = KW_SPECIFIER | KW_LONG,
+	.test = Set_S|Set_T|Set_Char|Set_Short|Set_Int|Set_Float|Set_Double|Set_Long|Set_Vlong|Set_Int128,
+	.set =  Set_T|Set_Int128,
+};
+
+static struct symbol_op if_op = {
+	.statement = parse_if_statement,
+};
+
+static struct symbol_op return_op = {
+	.statement = parse_return_statement,
+};
+
+static struct symbol_op loop_iter_op = {
+	.statement = parse_loop_iterator,
+};
+
+static struct symbol_op default_op = {
+	.statement = parse_default_statement,
+};
+
+static struct symbol_op case_op = {
+	.statement = parse_case_statement,
+};
+
+static struct symbol_op switch_op = {
+	.statement = parse_switch_statement,
+};
+
+static struct symbol_op for_op = {
+	.statement = parse_for_statement,
+};
+
+static struct symbol_op while_op = {
+	.statement = parse_while_statement,
+};
+
+static struct symbol_op do_op = {
+	.statement = parse_do_statement,
+};
+
+static struct symbol_op goto_op = {
+	.statement = parse_goto_statement,
+};
+
+static struct symbol_op __context___op = {
+	.statement = parse_context_statement,
+};
+
+static struct symbol_op range_op = {
+	.statement = parse_range_statement,
+};
+
+static struct symbol_op asm_op = {
+	.type = KW_ASM,
+	.declarator = parse_asm_declarator,
+	.statement = parse_asm_statement,
+	.toplevel = toplevel_asm_declaration,
+};
+
+static struct symbol_op static_assert_op = {
+	.toplevel = parse_static_assert,
+};
+
+static struct symbol_op packed_op = {
+	.attribute = attribute_packed,
+};
+
+static struct symbol_op aligned_op = {
+	.attribute = attribute_aligned,
+};
+
+static struct symbol_op attr_mod_op = {
+	.attribute = attribute_modifier,
+};
+
+static struct symbol_op attr_bitwise_op = {
+	.attribute = attribute_bitwise,
+};
+
+static struct symbol_op attr_force_op = {
+	.attribute = attribute_force,
+};
+
+static struct symbol_op address_space_op = {
+	.attribute = attribute_address_space,
+};
+
+static struct symbol_op mode_op = {
+	.attribute = attribute_mode,
+};
+
+static struct symbol_op context_op = {
+	.attribute = attribute_context,
+};
+
+static struct symbol_op designated_init_op = {
+	.attribute = attribute_designated_init,
+};
+
+static struct symbol_op transparent_union_op = {
+	.attribute = attribute_transparent_union,
+};
+
+static struct symbol_op ignore_attr_op = {
+	.attribute = ignore_attribute,
+};
+
+static struct symbol_op mode_QI_op = {
+	.type = KW_MODE,
+	.to_mode = to_QI_mode
+};
+
+static struct symbol_op mode_HI_op = {
+	.type = KW_MODE,
+	.to_mode = to_HI_mode
+};
+
+static struct symbol_op mode_SI_op = {
+	.type = KW_MODE,
+	.to_mode = to_SI_mode
+};
+
+static struct symbol_op mode_DI_op = {
+	.type = KW_MODE,
+	.to_mode = to_DI_mode
+};
+
+static struct symbol_op mode_TI_op = {
+	.type = KW_MODE,
+	.to_mode = to_TI_mode
+};
+
+static struct symbol_op mode_word_op = {
+	.type = KW_MODE,
+	.to_mode = to_word_mode
+};
+
+/* Using NS_TYPEDEF will also make the keyword a reserved one */
+static struct init_keyword {
+	const char *name;
+	enum namespace ns;
+	unsigned long modifiers;
+	struct symbol_op *op;
+	struct symbol *type;
+} keyword_table[] = {
+	/* Type qualifiers */
+	{ "const",	NS_TYPEDEF, .op = &const_op },
+	{ "__const",	NS_TYPEDEF, .op = &const_op },
+	{ "__const__",	NS_TYPEDEF, .op = &const_op },
+	{ "volatile",	NS_TYPEDEF, .op = &volatile_op },
+	{ "__volatile",		NS_TYPEDEF, .op = &volatile_op },
+	{ "__volatile__", 	NS_TYPEDEF, .op = &volatile_op },
+
+	/* Typedef.. */
+	{ "typedef",	NS_TYPEDEF, .op = &typedef_op },
+
+	/* Type specifiers */
+	{ "void",	NS_TYPEDEF, .type = &void_ctype, .op = &spec_op},
+	{ "char",	NS_TYPEDEF, .op = &char_op },
+	{ "short",	NS_TYPEDEF, .op = &short_op },
+	{ "int",	NS_TYPEDEF, .op = &int_op },
+	{ "long",	NS_TYPEDEF, .op = &long_op },
+	{ "float",	NS_TYPEDEF, .op = &float_op },
+	{ "double",	NS_TYPEDEF, .op = &double_op },
+	{ "signed",	NS_TYPEDEF, .op = &signed_op },
+	{ "__signed",	NS_TYPEDEF, .op = &signed_op },
+	{ "__signed__",	NS_TYPEDEF, .op = &signed_op },
+	{ "unsigned",	NS_TYPEDEF, .op = &unsigned_op },
+	{ "__int128",	NS_TYPEDEF, .op = &int128_op },
+	{ "_Bool",	NS_TYPEDEF, .type = &bool_ctype, .op = &spec_op },
+	{ "_Complex",   NS_TYPEDEF, .op = &complex_op },
+
+	/* Predeclared types */
+	{ "__builtin_va_list", NS_TYPEDEF, .type = &ptr_ctype, .op = &spec_op },
+	{ "__builtin_ms_va_list", NS_TYPEDEF, .type = &ptr_ctype, .op = &spec_op },
+	{ "__int128_t",	NS_TYPEDEF, .type = &lllong_ctype, .op = &spec_op },
+	{ "__uint128_t",NS_TYPEDEF, .type = &ulllong_ctype, .op = &spec_op },
+
+	/* Extended types */
+	{ "typeof", 	NS_TYPEDEF, .op = &typeof_op },
+	{ "__typeof", 	NS_TYPEDEF, .op = &typeof_op },
+	{ "__typeof__",	NS_TYPEDEF, .op = &typeof_op },
+
+	{ "__attribute",   NS_TYPEDEF, .op = &attribute_op },
+	{ "__attribute__", NS_TYPEDEF, .op = &attribute_op },
+
+	{ "struct",	NS_TYPEDEF, .op = &struct_op },
+	{ "union", 	NS_TYPEDEF, .op = &union_op },
+	{ "enum", 	NS_TYPEDEF, .op = &enum_op },
+
+	{ "inline",	NS_TYPEDEF, .op = &inline_op },
+	{ "__inline",	NS_TYPEDEF, .op = &inline_op },
+	{ "__inline__",	NS_TYPEDEF, .op = &inline_op },
+
+	{ "_Noreturn",	NS_TYPEDEF, .op = &noreturn_op },
+
+	{ "_Alignas",	NS_TYPEDEF, .op = &alignas_op },
+
+	/* Ignored for now.. */
+	{ "restrict",	NS_TYPEDEF, .op = &restrict_op},
+	{ "__restrict",	NS_TYPEDEF, .op = &restrict_op},
+	{ "__restrict__",	NS_TYPEDEF, .op = &restrict_op},
+
+	/* Static assertion */
+	{ "_Static_assert", NS_KEYWORD, .op = &static_assert_op },
+
+	/* Storage class */
+	{ "auto",	NS_TYPEDEF, .op = &auto_op },
+	{ "register",	NS_TYPEDEF, .op = &register_op },
+	{ "static",	NS_TYPEDEF, .op = &static_op },
+	{ "extern",	NS_TYPEDEF, .op = &extern_op },
+	{ "__thread",	NS_TYPEDEF, .op = &thread_op },
+	{ "_Thread_local",	NS_TYPEDEF, .op = &thread_op },
+
+	/* Statement */
+	{ "if",		NS_KEYWORD, .op = &if_op },
+	{ "return",	NS_KEYWORD, .op = &return_op },
+	{ "break",	NS_KEYWORD, .op = &loop_iter_op },
+	{ "continue",	NS_KEYWORD, .op = &loop_iter_op },
+	{ "default",	NS_KEYWORD, .op = &default_op },
+	{ "case",	NS_KEYWORD, .op = &case_op },
+	{ "switch",	NS_KEYWORD, .op = &switch_op },
+	{ "for",	NS_KEYWORD, .op = &for_op },
+	{ "while",	NS_KEYWORD, .op = &while_op },
+	{ "do",		NS_KEYWORD, .op = &do_op },
+	{ "goto",	NS_KEYWORD, .op = &goto_op },
+	{ "__context__",NS_KEYWORD, .op = &__context___op },
+	{ "__range__",	NS_KEYWORD, .op = &range_op },
+	{ "asm",	NS_KEYWORD, .op = &asm_op },
+	{ "__asm",	NS_KEYWORD, .op = &asm_op },
+	{ "__asm__",	NS_KEYWORD, .op = &asm_op },
+
+	/* Attribute */
+	{ "packed",	NS_KEYWORD, .op = &packed_op },
+	{ "__packed__",	NS_KEYWORD, .op = &packed_op },
+	{ "aligned",	NS_KEYWORD, .op = &aligned_op },
+	{ "__aligned__",NS_KEYWORD, .op = &aligned_op },
+	{ "nocast",	NS_KEYWORD,	MOD_NOCAST,	.op = &attr_mod_op },
+	{ "noderef",	NS_KEYWORD,	MOD_NODEREF,	.op = &attr_mod_op },
+	{ "safe",	NS_KEYWORD,	MOD_SAFE, 	.op = &attr_mod_op },
+	{ "force",	NS_KEYWORD,	.op = &attr_force_op },
+	{ "bitwise",	NS_KEYWORD,	MOD_BITWISE,	.op = &attr_bitwise_op },
+	{ "__bitwise__",NS_KEYWORD,	MOD_BITWISE,	.op = &attr_bitwise_op },
+	{ "address_space",NS_KEYWORD,	.op = &address_space_op },
+	{ "mode",	NS_KEYWORD,	.op = &mode_op },
+	{ "context",	NS_KEYWORD,	.op = &context_op },
+	{ "designated_init",	NS_KEYWORD,	.op = &designated_init_op },
+	{ "__transparent_union__",	NS_KEYWORD,	.op = &transparent_union_op },
+	{ "noreturn",	NS_KEYWORD,	MOD_NORETURN,	.op = &attr_mod_op },
+	{ "__noreturn__",	NS_KEYWORD,	MOD_NORETURN,	.op = &attr_mod_op },
+	{ "pure",	NS_KEYWORD,	MOD_PURE,	.op = &attr_mod_op },
+	{"__pure__",	NS_KEYWORD,	MOD_PURE,	.op = &attr_mod_op },
+	{"const",	NS_KEYWORD,	MOD_PURE,	.op = &attr_mod_op },
+	{"__const",	NS_KEYWORD,	MOD_PURE,	.op = &attr_mod_op },
+	{"__const__",	NS_KEYWORD,	MOD_PURE,	.op = &attr_mod_op },
+
+	{ "__mode__",	NS_KEYWORD,	.op = &mode_op },
+	{ "QI",		NS_KEYWORD,	MOD_CHAR,	.op = &mode_QI_op },
+	{ "__QI__",	NS_KEYWORD,	MOD_CHAR,	.op = &mode_QI_op },
+	{ "HI",		NS_KEYWORD,	MOD_SHORT,	.op = &mode_HI_op },
+	{ "__HI__",	NS_KEYWORD,	MOD_SHORT,	.op = &mode_HI_op },
+	{ "SI",		NS_KEYWORD,			.op = &mode_SI_op },
+	{ "__SI__",	NS_KEYWORD,			.op = &mode_SI_op },
+	{ "DI",		NS_KEYWORD,	MOD_LONGLONG,	.op = &mode_DI_op },
+	{ "__DI__",	NS_KEYWORD,	MOD_LONGLONG,	.op = &mode_DI_op },
+	{ "TI",		NS_KEYWORD,	MOD_LONGLONGLONG,	.op = &mode_TI_op },
+	{ "__TI__",	NS_KEYWORD,	MOD_LONGLONGLONG,	.op = &mode_TI_op },
+	{ "word",	NS_KEYWORD,	MOD_LONG,	.op = &mode_word_op },
+	{ "__word__",	NS_KEYWORD,	MOD_LONG,	.op = &mode_word_op },
+};
+
+
+static const char *ignored_attributes[] = {
+
+#define GCC_ATTR(x)		\
+	STRINGIFY(x), 		\
+	STRINGIFY(__##x##__),
+
+#include "gcc-attr-list.h"
+
+#undef GCC_ATTR
+
+	"bounded",
+	"__bounded__",
+	"__noclone",
+	"__nonnull",
+	"__nothrow",
+};
+
+
+void init_parser(int stream)
+{
+	int i;
+	for (i = 0; i < ARRAY_SIZE(keyword_table); i++) {
+		struct init_keyword *ptr = keyword_table + i;
+		struct symbol *sym = create_symbol(stream, ptr->name, SYM_KEYWORD, ptr->ns);
+		sym->ident->keyword = 1;
+		if (ptr->ns == NS_TYPEDEF)
+			sym->ident->reserved = 1;
+		sym->ctype.modifiers = ptr->modifiers;
+		sym->ctype.base_type = ptr->type;
+		sym->op = ptr->op;
+	}
+
+	for (i = 0; i < ARRAY_SIZE(ignored_attributes); i++) {
+		const char * name = ignored_attributes[i];
+		struct symbol *sym = create_symbol(stream, name, SYM_KEYWORD,
+						   NS_KEYWORD);
+		if (!sym->op) {
+			sym->ident->keyword = 1;
+			sym->op = &ignore_attr_op;
+		}
+	}
+}
+
+
+// Add a symbol to the list of function-local symbols
+static void fn_local_symbol(struct symbol *sym)
+{
+	if (function_symbol_list)
+		add_symbol(function_symbol_list, sym);
+}
+
+static int SENTINEL_ATTR match_idents(struct token *token, ...)
+{
+	va_list args;
+	struct ident * next;
+
+	if (token_type(token) != TOKEN_IDENT)
+		return 0;
+
+	va_start(args, token);
+	do {
+		next = va_arg(args, struct ident *);
+	} while (next && token->ident != next);
+	va_end(args);
+
+	return next && token->ident == next;
+}
+
+
+struct statement *alloc_statement(struct position pos, int type)
+{
+	struct statement *stmt = __alloc_statement(0);
+	stmt->type = type;
+	stmt->pos = pos;
+	return stmt;
+}
+
+static struct token *struct_declaration_list(struct token *token, struct symbol_list **list);
+
+static void apply_ctype(struct position pos, struct ctype *thistype, struct ctype *ctype);
+
+static void apply_modifiers(struct position pos, struct decl_state *ctx)
+{
+	struct symbol *ctype;
+	if (!ctx->mode)
+		return;
+	ctype = ctx->mode->to_mode(ctx->ctype.base_type);
+	if (!ctype)
+		sparse_error(pos, "don't know how to apply mode to %s",
+				show_typename(ctx->ctype.base_type));
+	else
+		ctx->ctype.base_type = ctype;
+	
+}
+
+static struct symbol * alloc_indirect_symbol(struct position pos, struct ctype *ctype, int type)
+{
+	struct symbol *sym = alloc_symbol(pos, type);
+
+	sym->ctype.base_type = ctype->base_type;
+	sym->ctype.modifiers = ctype->modifiers;
+
+	ctype->base_type = sym;
+	ctype->modifiers = 0;
+	return sym;
+}
+
+/*
+ * NOTE! NS_LABEL is not just a different namespace,
+ * it also ends up using function scope instead of the
+ * regular symbol scope.
+ */
+struct symbol *label_symbol(struct token *token)
+{
+	struct symbol *sym = lookup_symbol(token->ident, NS_LABEL);
+	if (!sym) {
+		sym = alloc_symbol(token->pos, SYM_LABEL);
+		bind_symbol(sym, token->ident, NS_LABEL);
+		fn_local_symbol(sym);
+	}
+	return sym;
+}
+
+static struct token *struct_union_enum_specifier(enum type type,
+	struct token *token, struct decl_state *ctx,
+	struct token *(*parse)(struct token *, struct symbol *))
+{
+	struct symbol *sym;
+	struct position *repos;
+
+	token = handle_attributes(token, ctx, KW_ATTRIBUTE);
+	if (token_type(token) == TOKEN_IDENT) {
+		sym = lookup_symbol(token->ident, NS_STRUCT);
+		if (!sym ||
+		    (is_outer_scope(sym->scope) &&
+		     (match_op(token->next,';') || match_op(token->next,'{')))) {
+			// Either a new symbol, or else an out-of-scope
+			// symbol being redefined.
+			sym = alloc_symbol(token->pos, type);
+			bind_symbol(sym, token->ident, NS_STRUCT);
+		}
+		if (sym->type != type)
+			error_die(token->pos, "invalid tag applied to %s", show_typename (sym));
+		ctx->ctype.base_type = sym;
+		repos = &token->pos;
+		token = token->next;
+		if (match_op(token, '{')) {
+			struct decl_state attr = { .ctype.base_type = sym, };
+
+			// The following test is actually wrong for empty
+			// structs, but (1) they are not C99, (2) gcc does
+			// the same thing, and (3) it's easier.
+			if (sym->symbol_list)
+				error_die(token->pos, "redefinition of %s", show_typename (sym));
+			sym->pos = *repos;
+			token = parse(token->next, sym);
+			token = expect(token, '}', "at end of struct-union-enum-specifier");
+
+			token = handle_attributes(token, &attr, KW_ATTRIBUTE);
+			apply_ctype(token->pos, &attr.ctype, &sym->ctype);
+
+			// Mark the structure as needing re-examination
+			sym->examined = 0;
+			sym->endpos = token->pos;
+		}
+		return token;
+	}
+
+	// private struct/union/enum type
+	if (!match_op(token, '{')) {
+		sparse_error(token->pos, "expected declaration");
+		ctx->ctype.base_type = &bad_ctype;
+		return token;
+	}
+
+	sym = alloc_symbol(token->pos, type);
+	token = parse(token->next, sym);
+	ctx->ctype.base_type = sym;
+	token =  expect(token, '}', "at end of specifier");
+	sym->endpos = token->pos;
+
+	return token;
+}
+
+static struct token *parse_struct_declaration(struct token *token, struct symbol *sym)
+{
+	struct symbol *field, *last = NULL;
+	struct token *res;
+	res = struct_declaration_list(token, &sym->symbol_list);
+	FOR_EACH_PTR(sym->symbol_list, field) {
+		if (!field->ident) {
+			struct symbol *base = field->ctype.base_type;
+			if (base && base->type == SYM_BITFIELD)
+				continue;
+		}
+		if (last)
+			last->next_subobject = field;
+		last = field;
+	} END_FOR_EACH_PTR(field);
+	return res;
+}
+
+static struct token *parse_union_declaration(struct token *token, struct symbol *sym)
+{
+	return struct_declaration_list(token, &sym->symbol_list);
+}
+
+static struct token *struct_specifier(struct token *token, struct decl_state *ctx)
+{
+	return struct_union_enum_specifier(SYM_STRUCT, token, ctx, parse_struct_declaration);
+}
+
+static struct token *union_specifier(struct token *token, struct decl_state *ctx)
+{
+	return struct_union_enum_specifier(SYM_UNION, token, ctx, parse_union_declaration);
+}
+
+
+typedef struct {
+	int x;
+	unsigned long long y;
+} Num;
+
+static void upper_boundary(Num *n, Num *v)
+{
+	if (n->x > v->x)
+		return;
+	if (n->x < v->x) {
+		*n = *v;
+		return;
+	}
+	if (n->y < v->y)
+		n->y = v->y;
+}
+
+static void lower_boundary(Num *n, Num *v)
+{
+	if (n->x < v->x)
+		return;
+	if (n->x > v->x) {
+		*n = *v;
+		return;
+	}
+	if (n->y > v->y)
+		n->y = v->y;
+}
+
+static int type_is_ok(struct symbol *type, Num *upper, Num *lower)
+{
+	int shift = type->bit_size;
+	int is_unsigned = type->ctype.modifiers & MOD_UNSIGNED;
+
+	if (!is_unsigned)
+		shift--;
+	if (upper->x == 0 && upper->y >> shift)
+		return 0;
+	if (lower->x == 0 || (!is_unsigned && (~lower->y >> shift) == 0))
+		return 1;
+	return 0;
+}
+
+static struct symbol *bigger_enum_type(struct symbol *s1, struct symbol *s2)
+{
+	if (s1->bit_size < s2->bit_size) {
+		s1 = s2;
+	} else if (s1->bit_size == s2->bit_size) {
+		if (s2->ctype.modifiers & MOD_UNSIGNED)
+			s1 = s2;
+	}
+	if (s1->bit_size < bits_in_int)
+		return &int_ctype;
+	return s1;
+}
+
+static void cast_enum_list(struct symbol_list *list, struct symbol *base_type)
+{
+	struct symbol *sym;
+
+	FOR_EACH_PTR(list, sym) {
+		struct expression *expr = sym->initializer;
+		struct symbol *ctype;
+		if (expr->type != EXPR_VALUE)
+			continue;
+		ctype = expr->ctype;
+		if (ctype->bit_size == base_type->bit_size)
+			continue;
+		cast_value(expr, base_type, expr, ctype);
+	} END_FOR_EACH_PTR(sym);
+}
+
+static struct token *parse_enum_declaration(struct token *token, struct symbol *parent)
+{
+	unsigned long long lastval = 0;
+	struct symbol *ctype = NULL, *base_type = NULL;
+	Num upper = {-1, 0}, lower = {1, 0};
+
+	parent->examined = 1;
+	parent->ctype.base_type = &int_ctype;
+	while (token_type(token) == TOKEN_IDENT) {
+		struct expression *expr = NULL;
+		struct token *next = token->next;
+		struct symbol *sym;
+
+		if (match_op(next, '=')) {
+			next = constant_expression(next->next, &expr);
+			lastval = get_expression_value(expr);
+			ctype = &void_ctype;
+			if (expr && expr->ctype)
+				ctype = expr->ctype;
+		} else if (!ctype) {
+			ctype = &int_ctype;
+		} else if (is_int_type(ctype)) {
+			lastval++;
+		} else {
+			error_die(token->pos, "can't increment the last enum member");
+		}
+
+		if (!expr) {
+			expr = alloc_expression(token->pos, EXPR_VALUE);
+			expr->value = lastval;
+			expr->ctype = ctype;
+		}
+
+		sym = alloc_symbol(token->pos, SYM_NODE);
+		bind_symbol(sym, token->ident, NS_SYMBOL);
+		sym->ctype.modifiers &= ~MOD_ADDRESSABLE;
+		sym->initializer = expr;
+		sym->enum_member = 1;
+		sym->ctype.base_type = parent;
+		add_ptr_list(&parent->symbol_list, sym);
+
+		if (base_type != &bad_ctype) {
+			if (ctype->type == SYM_NODE)
+				ctype = ctype->ctype.base_type;
+			if (ctype->type == SYM_ENUM) {
+				if (ctype == parent)
+					ctype = base_type;
+				else 
+					ctype = ctype->ctype.base_type;
+			}
+			/*
+			 * base_type rules:
+			 *  - if all enums are of the same type, then
+			 *    the base_type is that type (two first
+			 *    cases)
+			 *  - if enums are of different types, they
+			 *    all have to be integer types, and the
+			 *    base type is at least "int_ctype".
+			 *  - otherwise the base_type is "bad_ctype".
+			 */
+			if (!base_type) {
+				base_type = ctype;
+			} else if (ctype == base_type) {
+				/* nothing */
+			} else if (is_int_type(base_type) && is_int_type(ctype)) {
+				base_type = bigger_enum_type(base_type, ctype);
+			} else
+				base_type = &bad_ctype;
+			parent->ctype.base_type = base_type;
+		}
+		if (is_int_type(base_type)) {
+			Num v = {.y = lastval};
+			if (ctype->ctype.modifiers & MOD_UNSIGNED)
+				v.x = 0;
+			else if ((long long)lastval >= 0)
+				v.x = 0;
+			else
+				v.x = -1;
+			upper_boundary(&upper, &v);
+			lower_boundary(&lower, &v);
+		}
+		token = next;
+
+		sym->endpos = token->pos;
+
+		if (!match_op(token, ','))
+			break;
+		token = token->next;
+	}
+	if (!base_type) {
+		sparse_error(token->pos, "bad enum definition");
+		base_type = &bad_ctype;
+	}
+	else if (!is_int_type(base_type))
+		base_type = base_type;
+	else if (type_is_ok(base_type, &upper, &lower))
+		base_type = base_type;
+	else if (type_is_ok(&int_ctype, &upper, &lower))
+		base_type = &int_ctype;
+	else if (type_is_ok(&uint_ctype, &upper, &lower))
+		base_type = &uint_ctype;
+	else if (type_is_ok(&long_ctype, &upper, &lower))
+		base_type = &long_ctype;
+	else if (type_is_ok(&ulong_ctype, &upper, &lower))
+		base_type = &ulong_ctype;
+	else if (type_is_ok(&llong_ctype, &upper, &lower))
+		base_type = &llong_ctype;
+	else if (type_is_ok(&ullong_ctype, &upper, &lower))
+		base_type = &ullong_ctype;
+	else
+		base_type = &bad_ctype;
+	parent->ctype.base_type = base_type;
+	parent->ctype.modifiers |= (base_type->ctype.modifiers & MOD_UNSIGNED);
+	parent->examined = 0;
+
+	cast_enum_list(parent->symbol_list, base_type);
+
+	return token;
+}
+
+static struct token *enum_specifier(struct token *token, struct decl_state *ctx)
+{
+	struct token *ret = struct_union_enum_specifier(SYM_ENUM, token, ctx, parse_enum_declaration);
+	struct ctype *ctype = &ctx->ctype.base_type->ctype;
+
+	if (!ctype->base_type)
+		ctype->base_type = &incomplete_ctype;
+
+	return ret;
+}
+
+static struct token *typeof_specifier(struct token *token, struct decl_state *ctx)
+{
+	struct symbol *sym;
+
+	if (!match_op(token, '(')) {
+		sparse_error(token->pos, "expected '(' after typeof");
+		return token;
+	}
+	if (lookup_type(token->next)) {
+		token = typename(token->next, &sym, NULL);
+		ctx->ctype.base_type = sym->ctype.base_type;
+		apply_ctype(token->pos, &sym->ctype, &ctx->ctype);
+	} else {
+		struct symbol *typeof_sym = alloc_symbol(token->pos, SYM_TYPEOF);
+		token = parse_expression(token->next, &typeof_sym->initializer);
+
+		typeof_sym->endpos = token->pos;
+		if (!typeof_sym->initializer) {
+			sparse_error(token->pos, "expected expression after the '(' token");
+			typeof_sym = &bad_ctype;
+		}
+		ctx->ctype.base_type = typeof_sym;
+	}
+	return expect(token, ')', "after typeof");
+}
+
+static struct token *ignore_attribute(struct token *token, struct symbol *attr, struct decl_state *ctx)
+{
+	struct expression *expr = NULL;
+	if (match_op(token, '('))
+		token = parens_expression(token, &expr, "in attribute");
+	return token;
+}
+
+static struct token *attribute_packed(struct token *token, struct symbol *attr, struct decl_state *ctx)
+{
+	if (!ctx->ctype.alignment)
+		ctx->ctype.alignment = 1;
+	return token;
+}
+
+static struct token *attribute_aligned(struct token *token, struct symbol *attr, struct decl_state *ctx)
+{
+	int alignment = max_alignment;
+	struct expression *expr = NULL;
+
+	if (match_op(token, '(')) {
+		token = parens_expression(token, &expr, "in attribute");
+		if (expr)
+			alignment = const_expression_value(expr);
+	}
+	if (alignment & (alignment-1)) {
+		warning(token->pos, "I don't like non-power-of-2 alignments");
+		return token;
+	} else if (alignment > ctx->ctype.alignment)
+		ctx->ctype.alignment = alignment;
+	return token;
+}
+
+static void apply_qualifier(struct position *pos, struct ctype *ctx, unsigned long qual)
+{
+	if (ctx->modifiers & qual)
+		warning(*pos, "duplicate %s", modifier_string(qual));
+	ctx->modifiers |= qual;
+}
+
+static struct token *attribute_modifier(struct token *token, struct symbol *attr, struct decl_state *ctx)
+{
+	apply_qualifier(&token->pos, &ctx->ctype, attr->ctype.modifiers);
+	return token;
+}
+
+static struct token *attribute_bitwise(struct token *token, struct symbol *attr, struct decl_state *ctx)
+{
+	if (Wbitwise)
+		attribute_modifier(token, attr, ctx);
+	return token;
+}
+
+static struct token *attribute_address_space(struct token *token, struct symbol *attr, struct decl_state *ctx)
+{
+	struct expression *expr = NULL;
+	int as;
+	token = expect(token, '(', "after address_space attribute");
+	token = conditional_expression(token, &expr);
+	if (expr) {
+		as = const_expression_value(expr);
+		if (Waddress_space && as)
+			ctx->ctype.as = as;
+	}
+	token = expect(token, ')', "after address_space attribute");
+	return token;
+}
+
+static struct symbol *to_QI_mode(struct symbol *ctype)
+{
+	if (ctype->ctype.base_type != &int_type)
+		return NULL;
+	if (ctype == &char_ctype)
+		return ctype;
+	return ctype->ctype.modifiers & MOD_UNSIGNED ? &uchar_ctype
+						     : &schar_ctype;
+}
+
+static struct symbol *to_HI_mode(struct symbol *ctype)
+{
+	if (ctype->ctype.base_type != &int_type)
+		return NULL;
+	return ctype->ctype.modifiers & MOD_UNSIGNED ? &ushort_ctype
+						     : &sshort_ctype;
+}
+
+static struct symbol *to_SI_mode(struct symbol *ctype)
+{
+	if (ctype->ctype.base_type != &int_type)
+		return NULL;
+	return ctype->ctype.modifiers & MOD_UNSIGNED ? &uint_ctype
+						     : &sint_ctype;
+}
+
+static struct symbol *to_DI_mode(struct symbol *ctype)
+{
+	if (ctype->ctype.base_type != &int_type)
+		return NULL;
+	return ctype->ctype.modifiers & MOD_UNSIGNED ? &ullong_ctype
+						     : &sllong_ctype;
+}
+
+static struct symbol *to_TI_mode(struct symbol *ctype)
+{
+	if (ctype->ctype.base_type != &int_type)
+		return NULL;
+	return ctype->ctype.modifiers & MOD_UNSIGNED ? &ulllong_ctype
+						     : &slllong_ctype;
+}
+
+static struct symbol *to_word_mode(struct symbol *ctype)
+{
+	if (ctype->ctype.base_type != &int_type)
+		return NULL;
+	return ctype->ctype.modifiers & MOD_UNSIGNED ? &ulong_ctype
+						     : &slong_ctype;
+}
+
+static struct token *attribute_mode(struct token *token, struct symbol *attr, struct decl_state *ctx)
+{
+	token = expect(token, '(', "after mode attribute");
+	if (token_type(token) == TOKEN_IDENT) {
+		struct symbol *mode = lookup_keyword(token->ident, NS_KEYWORD);
+		if (mode && mode->op->type == KW_MODE)
+			ctx->mode = mode->op;
+		else
+			sparse_error(token->pos, "unknown mode attribute %s\n", show_ident(token->ident));
+		token = token->next;
+	} else
+		sparse_error(token->pos, "expect attribute mode symbol\n");
+	token = expect(token, ')', "after mode attribute");
+	return token;
+}
+
+static struct token *attribute_context(struct token *token, struct symbol *attr, struct decl_state *ctx)
+{
+	struct context *context = alloc_context();
+	struct expression *args[3];
+	int argc = 0;
+
+	token = expect(token, '(', "after context attribute");
+	while (!match_op(token, ')')) {
+		struct expression *expr = NULL;
+		token = conditional_expression(token, &expr);
+		if (!expr)
+			break;
+		if (argc < 3)
+			args[argc++] = expr;
+		if (!match_op(token, ','))
+			break;
+		token = token->next;
+	}
+
+	switch(argc) {
+	case 0:
+		sparse_error(token->pos, "expected context input/output values");
+		break;
+	case 1:
+		context->in = get_expression_value(args[0]);
+		break;
+	case 2:
+		context->in = get_expression_value(args[0]);
+		context->out = get_expression_value(args[1]);
+		break;
+	case 3:
+		context->context = args[0];
+		context->in = get_expression_value(args[1]);
+		context->out = get_expression_value(args[2]);
+		break;
+	}
+
+	if (argc)
+		add_ptr_list(&ctx->ctype.contexts, context);
+
+	token = expect(token, ')', "after context attribute");
+	return token;
+}
+
+static struct token *attribute_designated_init(struct token *token, struct symbol *attr, struct decl_state *ctx)
+{
+	if (ctx->ctype.base_type && ctx->ctype.base_type->type == SYM_STRUCT)
+		ctx->ctype.base_type->designated_init = 1;
+	else
+		warning(token->pos, "attribute designated_init applied to non-structure type");
+	return token;
+}
+
+static struct token *attribute_transparent_union(struct token *token, struct symbol *attr, struct decl_state *ctx)
+{
+	if (Wtransparent_union)
+		warning(token->pos, "attribute __transparent_union__");
+
+	if (ctx->ctype.base_type && ctx->ctype.base_type->type == SYM_UNION)
+		ctx->ctype.base_type->transparent_union = 1;
+	else
+		warning(token->pos, "attribute __transparent_union__ applied to non-union type");
+	return token;
+}
+
+static struct token *recover_unknown_attribute(struct token *token)
+{
+	struct expression *expr = NULL;
+
+	if (Wunknown_attribute)
+		warning(token->pos, "attribute '%s': unknown attribute", show_ident(token->ident));
+	token = token->next;
+	if (match_op(token, '('))
+		token = parens_expression(token, &expr, "in attribute");
+	return token;
+}
+
+static struct token *attribute_specifier(struct token *token, struct decl_state *ctx)
+{
+	token = expect(token, '(', "after attribute");
+	token = expect(token, '(', "after attribute");
+
+	for (;;) {
+		struct ident *attribute_name;
+		struct symbol *attr;
+
+		if (eof_token(token))
+			break;
+		if (match_op(token, ';'))
+			break;
+		if (token_type(token) != TOKEN_IDENT)
+			break;
+		attribute_name = token->ident;
+		attr = lookup_keyword(attribute_name, NS_KEYWORD);
+		if (attr && attr->op->attribute)
+			token = attr->op->attribute(token->next, attr, ctx);
+		else
+			token = recover_unknown_attribute(token);
+
+		if (!match_op(token, ','))
+			break;
+		token = token->next;
+	}
+
+	token = expect(token, ')', "after attribute");
+	token = expect(token, ')', "after attribute");
+	return token;
+}
+
+static const char *storage_class[] = 
+{
+	[STypedef] = "typedef",
+	[SAuto] = "auto",
+	[SExtern] = "extern",
+	[SStatic] = "static",
+	[SRegister] = "register",
+	[SForced] = "[force]"
+};
+
+static unsigned long storage_modifiers(struct decl_state *ctx)
+{
+	static unsigned long mod[SMax] =
+	{
+		[SAuto] = MOD_AUTO,
+		[SExtern] = MOD_EXTERN,
+		[SStatic] = MOD_STATIC,
+		[SRegister] = MOD_REGISTER
+	};
+	return mod[ctx->storage_class] | (ctx->is_inline ? MOD_INLINE : 0)
+		| (ctx->is_tls ? MOD_TLS : 0);
+}
+
+static void set_storage_class(struct position *pos, struct decl_state *ctx, int class)
+{
+	/* __thread can be used alone, or with extern or static */
+	if (ctx->is_tls && (class != SStatic && class != SExtern)) {
+		sparse_error(*pos, "__thread can only be used alone, or with "
+				"extern or static");
+		return;
+	}
+
+	if (!ctx->storage_class) {
+		ctx->storage_class = class;
+		return;
+	}
+	if (ctx->storage_class == class)
+		sparse_error(*pos, "duplicate %s", storage_class[class]);
+	else
+		sparse_error(*pos, "multiple storage classes");
+}
+
+static struct token *typedef_specifier(struct token *next, struct decl_state *ctx)
+{
+	set_storage_class(&next->pos, ctx, STypedef);
+	return next;
+}
+
+static struct token *auto_specifier(struct token *next, struct decl_state *ctx)
+{
+	set_storage_class(&next->pos, ctx, SAuto);
+	return next;
+}
+
+static struct token *register_specifier(struct token *next, struct decl_state *ctx)
+{
+	set_storage_class(&next->pos, ctx, SRegister);
+	return next;
+}
+
+static struct token *static_specifier(struct token *next, struct decl_state *ctx)
+{
+	set_storage_class(&next->pos, ctx, SStatic);
+	return next;
+}
+
+static struct token *extern_specifier(struct token *next, struct decl_state *ctx)
+{
+	set_storage_class(&next->pos, ctx, SExtern);
+	return next;
+}
+
+static struct token *thread_specifier(struct token *next, struct decl_state *ctx)
+{
+	/* This GCC extension can be used alone, or with extern or static */
+	if (!ctx->storage_class || ctx->storage_class == SStatic
+			|| ctx->storage_class == SExtern) {
+		ctx->is_tls = 1;
+	} else {
+		sparse_error(next->pos, "__thread can only be used alone, or "
+				"with extern or static");
+	}
+
+	return next;
+}
+
+static struct token *attribute_force(struct token *token, struct symbol *attr, struct decl_state *ctx)
+{
+	set_storage_class(&token->pos, ctx, SForced);
+	return token;
+}
+
+static struct token *inline_specifier(struct token *next, struct decl_state *ctx)
+{
+	ctx->is_inline = 1;
+	return next;
+}
+
+static struct token *noreturn_specifier(struct token *next, struct decl_state *ctx)
+{
+	apply_qualifier(&next->pos, &ctx->ctype, MOD_NORETURN);
+	return next;
+}
+
+static struct token *alignas_specifier(struct token *token, struct decl_state *ctx)
+{
+	int alignment = 0;
+
+	if (!match_op(token, '(')) {
+		sparse_error(token->pos, "expected '(' after _Alignas");
+		return token;
+	}
+	if (lookup_type(token->next)) {
+		struct symbol *sym = NULL;
+		token = typename(token->next, &sym, NULL);
+		sym = examine_symbol_type(sym);
+		alignment = sym->ctype.alignment;
+		token = expect(token, ')', "after _Alignas(...");
+	} else {
+		struct expression *expr = NULL;
+		token = parens_expression(token, &expr, "after _Alignas");
+		if (!expr)
+			return token;
+		alignment = const_expression_value(expr);
+	}
+
+	if (alignment < 0) {
+		warning(token->pos, "non-positive alignment");
+		return token;
+	}
+	if (alignment & (alignment-1)) {
+		warning(token->pos, "non-power-of-2 alignment");
+		return token;
+	}
+	if (alignment > ctx->ctype.alignment)
+		ctx->ctype.alignment = alignment;
+	return token;
+}
+
+static struct token *const_qualifier(struct token *next, struct decl_state *ctx)
+{
+	apply_qualifier(&next->pos, &ctx->ctype, MOD_CONST);
+	return next;
+}
+
+static struct token *volatile_qualifier(struct token *next, struct decl_state *ctx)
+{
+	apply_qualifier(&next->pos, &ctx->ctype, MOD_VOLATILE);
+	return next;
+}
+
+static void apply_ctype(struct position pos, struct ctype *thistype, struct ctype *ctype)
+{
+	unsigned long mod = thistype->modifiers;
+
+	if (mod)
+		apply_qualifier(&pos, ctype, mod);
+
+	/* Context */
+	concat_ptr_list((struct ptr_list *)thistype->contexts,
+	                (struct ptr_list **)&ctype->contexts);
+
+	/* Alignment */
+	if (thistype->alignment > ctype->alignment)
+		ctype->alignment = thistype->alignment;
+
+	/* Address space */
+	if (thistype->as)
+		ctype->as = thistype->as;
+}
+
+static void specifier_conflict(struct position pos, int what, struct ident *new)
+{
+	const char *old;
+	if (what & (Set_S | Set_T))
+		goto Catch_all;
+	if (what & Set_Char)
+		old = "char";
+	else if (what & Set_Double)
+		old = "double";
+	else if (what & Set_Float)
+		old = "float";
+	else if (what & Set_Signed)
+		old = "signed";
+	else if (what & Set_Unsigned)
+		old = "unsigned";
+	else if (what & Set_Short)
+		old = "short";
+	else if (what & Set_Long)
+		old = "long";
+	else
+		old = "long long";
+	sparse_error(pos, "impossible combination of type specifiers: %s %s",
+			old, show_ident(new));
+	return;
+
+Catch_all:
+	sparse_error(pos, "two or more data types in declaration specifiers");
+}
+
+static struct symbol * const int_types[] =
+	{&short_ctype, &int_ctype, &long_ctype, &llong_ctype, &lllong_ctype};
+static struct symbol * const signed_types[] =
+	{&sshort_ctype, &sint_ctype, &slong_ctype, &sllong_ctype,
+	 &slllong_ctype};
+static struct symbol * const unsigned_types[] =
+	{&ushort_ctype, &uint_ctype, &ulong_ctype, &ullong_ctype,
+	 &ulllong_ctype};
+static struct symbol * const real_types[] =
+	{&float_ctype, &double_ctype, &ldouble_ctype};
+static struct symbol * const char_types[] =
+	{&char_ctype, &schar_ctype, &uchar_ctype};
+static struct symbol * const * const types[] = {
+	int_types + 1, signed_types + 1, unsigned_types + 1,
+	real_types + 1, char_types, char_types + 1, char_types + 2
+};
+
+struct symbol *ctype_integer(int size, int want_unsigned)
+{
+	return types[want_unsigned ? CUInt : CInt][size];
+}
+
+static struct token *handle_qualifiers(struct token *t, struct decl_state *ctx)
+{
+	while (token_type(t) == TOKEN_IDENT) {
+		struct symbol *s = lookup_symbol(t->ident, NS_TYPEDEF);
+		if (!s)
+			break;
+		if (s->type != SYM_KEYWORD)
+			break;
+		if (!(s->op->type & (KW_ATTRIBUTE | KW_QUALIFIER)))
+			break;
+		t = t->next;
+		if (s->op->declarator)
+			t = s->op->declarator(t, ctx);
+	}
+	return t;
+}
+
+static struct token *declaration_specifiers(struct token *token, struct decl_state *ctx)
+{
+	int seen = 0;
+	int class = CInt;
+	int size = 0;
+
+	while (token_type(token) == TOKEN_IDENT) {
+		struct symbol *s = lookup_symbol(token->ident,
+						 NS_TYPEDEF | NS_SYMBOL);
+		if (!s || !(s->namespace & NS_TYPEDEF))
+			break;
+		if (s->type != SYM_KEYWORD) {
+			if (seen & Set_Any)
+				break;
+			seen |= Set_S | Set_T;
+			ctx->ctype.base_type = s->ctype.base_type;
+			apply_ctype(token->pos, &s->ctype, &ctx->ctype);
+			token = token->next;
+			continue;
+		}
+		if (s->op->type & KW_SPECIFIER) {
+			if (seen & s->op->test) {
+				specifier_conflict(token->pos,
+						   seen & s->op->test,
+						   token->ident);
+				break;
+			}
+			seen |= s->op->set;
+			class += s->op->class;
+			if (s->op->set & Set_Int128)
+				size = 2;
+			if (s->op->type & KW_SHORT) {
+				size = -1;
+			} else if (s->op->type & KW_LONG && size++) {
+				if (class == CReal) {
+					specifier_conflict(token->pos,
+							   Set_Vlong,
+							   &double_ident);
+					break;
+				}
+				seen |= Set_Vlong;
+			}
+		}
+		token = token->next;
+		if (s->op->declarator)
+			token = s->op->declarator(token, ctx);
+		if (s->op->type & KW_EXACT) {
+			ctx->ctype.base_type = s->ctype.base_type;
+			ctx->ctype.modifiers |= s->ctype.modifiers;
+		}
+	}
+
+	if (!(seen & Set_S)) {	/* not set explicitly? */
+		struct symbol *base = &incomplete_ctype;
+		if (seen & Set_Any)
+			base = types[class][size];
+		ctx->ctype.base_type = base;
+	}
+
+	if (ctx->ctype.modifiers & MOD_BITWISE) {
+		struct symbol *type;
+		ctx->ctype.modifiers &= ~MOD_BITWISE;
+		if (!is_int_type(ctx->ctype.base_type)) {
+			sparse_error(token->pos, "invalid modifier");
+			return token;
+		}
+		type = alloc_symbol(token->pos, SYM_BASETYPE);
+		*type = *ctx->ctype.base_type;
+		type->ctype.modifiers &= ~MOD_SPECIFIER;
+		type->ctype.base_type = ctx->ctype.base_type;
+		type->type = SYM_RESTRICT;
+		ctx->ctype.base_type = type;
+		create_fouled(type);
+	}
+	return token;
+}
+
+static struct token *abstract_array_static_declarator(struct token *token, int *has_static)
+{
+	while (token->ident == &static_ident) {
+		if (*has_static)
+			sparse_error(token->pos, "duplicate array static declarator");
+
+		*has_static = 1;
+		token = token->next;
+	}
+	return token;
+
+}
+
+static struct token *abstract_array_declarator(struct token *token, struct symbol *sym)
+{
+	struct expression *expr = NULL;
+	int has_static = 0;
+
+	token = abstract_array_static_declarator(token, &has_static);
+
+	if (match_idents(token, &restrict_ident, &__restrict_ident, &__restrict___ident, NULL))
+		token = abstract_array_static_declarator(token->next, &has_static);
+	token = parse_expression(token, &expr);
+	sym->array_size = expr;
+	return token;
+}
+
+static struct token *parameter_type_list(struct token *, struct symbol *);
+static struct token *identifier_list(struct token *, struct symbol *);
+static struct token *declarator(struct token *token, struct decl_state *ctx);
+
+static struct token *skip_attribute(struct token *token)
+{
+	token = token->next;
+	if (match_op(token, '(')) {
+		int depth = 1;
+		token = token->next;
+		while (depth && !eof_token(token)) {
+			if (token_type(token) == TOKEN_SPECIAL) {
+				if (token->special == '(')
+					depth++;
+				else if (token->special == ')')
+					depth--;
+			}
+			token = token->next;
+		}
+	}
+	return token;
+}
+
+static struct token *skip_attributes(struct token *token)
+{
+	struct symbol *keyword;
+	for (;;) {
+		if (token_type(token) != TOKEN_IDENT)
+			break;
+		keyword = lookup_keyword(token->ident, NS_KEYWORD | NS_TYPEDEF);
+		if (!keyword || keyword->type != SYM_KEYWORD)
+			break;
+		if (!(keyword->op->type & KW_ATTRIBUTE))
+			break;
+		token = expect(token->next, '(', "after attribute");
+		token = expect(token, '(', "after attribute");
+		for (;;) {
+			if (eof_token(token))
+				break;
+			if (match_op(token, ';'))
+				break;
+			if (token_type(token) != TOKEN_IDENT)
+				break;
+			token = skip_attribute(token);
+			if (!match_op(token, ','))
+				break;
+			token = token->next;
+		}
+		token = expect(token, ')', "after attribute");
+		token = expect(token, ')', "after attribute");
+	}
+	return token;
+}
+
+static struct token *handle_attributes(struct token *token, struct decl_state *ctx, unsigned int keywords)
+{
+	struct symbol *keyword;
+	for (;;) {
+		if (token_type(token) != TOKEN_IDENT)
+			break;
+		keyword = lookup_keyword(token->ident, NS_KEYWORD | NS_TYPEDEF);
+		if (!keyword || keyword->type != SYM_KEYWORD)
+			break;
+		if (!(keyword->op->type & keywords))
+			break;
+		token = keyword->op->declarator(token->next, ctx);
+		keywords &= KW_ATTRIBUTE;
+	}
+	return token;
+}
+
+static int is_nested(struct token *token, struct token **p,
+		    int prefer_abstract)
+{
+	/*
+	 * This can be either a parameter list or a grouping.
+	 * For the direct (non-abstract) case, we know if must be
+	 * a parameter list if we already saw the identifier.
+	 * For the abstract case, we know if must be a parameter
+	 * list if it is empty or starts with a type.
+	 */
+	struct token *next = token->next;
+
+	*p = next = skip_attributes(next);
+
+	if (token_type(next) == TOKEN_IDENT) {
+		if (lookup_type(next))
+			return !prefer_abstract;
+		return 1;
+	}
+
+	if (match_op(next, ')') || match_op(next, SPECIAL_ELLIPSIS))
+		return 0;
+
+	return 1;
+}
+
+enum kind {
+	Empty, K_R, Proto, Bad_Func,
+};
+
+static enum kind which_func(struct token *token,
+			    struct ident **n,
+			    int prefer_abstract)
+{
+	struct token *next = token->next;
+
+	if (token_type(next) == TOKEN_IDENT) {
+		if (lookup_type(next))
+			return Proto;
+		/* identifier list not in definition; complain */
+		if (prefer_abstract)
+			warning(token->pos,
+				"identifier list not in definition");
+		return K_R;
+	}
+
+	if (token_type(next) != TOKEN_SPECIAL)
+		return Bad_Func;
+
+	if (next->special == ')') {
+		/* don't complain about those */
+		if (!n || match_op(next->next, ';'))
+		if (!n || match_op(next->next, ';') || match_op(next->next, ','))
+			return Empty;
+		if (Wstrict_prototypes)
+			warning(next->pos,
+				"non-ANSI function declaration of function '%s'",
+				show_ident(*n));
+		return Empty;
+	}
+
+	if (next->special == SPECIAL_ELLIPSIS) {
+		warning(next->pos,
+			"variadic functions must have one named argument");
+		return Proto;
+	}
+
+	return Bad_Func;
+}
+
+static struct token *direct_declarator(struct token *token, struct decl_state *ctx)
+{
+	struct ctype *ctype = &ctx->ctype;
+	struct token *next;
+	struct ident **p = ctx->ident;
+
+	if (ctx->ident && token_type(token) == TOKEN_IDENT) {
+		*ctx->ident = token->ident;
+		token = token->next;
+	} else if (match_op(token, '(') &&
+	    is_nested(token, &next, ctx->prefer_abstract)) {
+		struct symbol *base_type = ctype->base_type;
+		if (token->next != next)
+			next = handle_attributes(token->next, ctx,
+						  KW_ATTRIBUTE);
+		token = declarator(next, ctx);
+		token = expect(token, ')', "in nested declarator");
+		while (ctype->base_type != base_type)
+			ctype = &ctype->base_type->ctype;
+		p = NULL;
+	}
+
+	if (match_op(token, '(')) {
+		enum kind kind = which_func(token, p, ctx->prefer_abstract);
+		struct symbol *fn;
+		fn = alloc_indirect_symbol(token->pos, ctype, SYM_FN);
+		token = token->next;
+		if (kind == K_R)
+			token = identifier_list(token, fn);
+		else if (kind == Proto)
+			token = parameter_type_list(token, fn);
+		token = expect(token, ')', "in function declarator");
+		fn->endpos = token->pos;
+		return token;
+	}
+
+	while (match_op(token, '[')) {
+		struct symbol *array;
+		array = alloc_indirect_symbol(token->pos, ctype, SYM_ARRAY);
+		token = abstract_array_declarator(token->next, array);
+		token = expect(token, ']', "in abstract_array_declarator");
+		array->endpos = token->pos;
+		ctype = &array->ctype;
+	}
+	return token;
+}
+
+static struct token *pointer(struct token *token, struct decl_state *ctx)
+{
+	while (match_op(token,'*')) {
+		struct symbol *ptr = alloc_symbol(token->pos, SYM_PTR);
+		ptr->ctype.modifiers = ctx->ctype.modifiers;
+		ptr->ctype.base_type = ctx->ctype.base_type;
+		ptr->ctype.as = ctx->ctype.as;
+		ptr->ctype.contexts = ctx->ctype.contexts;
+		ctx->ctype.modifiers = 0;
+		ctx->ctype.base_type = ptr;
+		ctx->ctype.as = 0;
+		ctx->ctype.contexts = NULL;
+		ctx->ctype.alignment = 0;
+
+		token = handle_qualifiers(token->next, ctx);
+		ctx->ctype.base_type->endpos = token->pos;
+	}
+	return token;
+}
+
+static struct token *declarator(struct token *token, struct decl_state *ctx)
+{
+	token = pointer(token, ctx);
+	return direct_declarator(token, ctx);
+}
+
+static struct token *handle_bitfield(struct token *token, struct decl_state *ctx)
+{
+	struct ctype *ctype = &ctx->ctype;
+	struct expression *expr;
+	struct symbol *bitfield;
+	long long width;
+
+	if (ctype->base_type != &int_type && !is_int_type(ctype->base_type)) {
+		sparse_error(token->pos, "invalid bitfield specifier for type %s.",
+			show_typename(ctype->base_type));
+		// Parse this to recover gracefully.
+		return conditional_expression(token->next, &expr);
+	}
+
+	bitfield = alloc_indirect_symbol(token->pos, ctype, SYM_BITFIELD);
+	token = conditional_expression(token->next, &expr);
+	width = const_expression_value(expr);
+	bitfield->bit_size = width;
+
+	if (width < 0 || width > INT_MAX) {
+		sparse_error(token->pos, "invalid bitfield width, %lld.", width);
+		width = -1;
+	} else if (*ctx->ident && width == 0) {
+		sparse_error(token->pos, "invalid named zero-width bitfield `%s'",
+		     show_ident(*ctx->ident));
+		width = -1;
+	} else if (*ctx->ident) {
+		struct symbol *base_type = bitfield->ctype.base_type;
+		struct symbol *bitfield_type = base_type == &int_type ? bitfield : base_type;
+		int is_signed = !(bitfield_type->ctype.modifiers & MOD_UNSIGNED);
+		if (Wone_bit_signed_bitfield && width == 1 && is_signed) {
+			// Valid values are either {-1;0} or {0}, depending on integer
+			// representation.  The latter makes for very efficient code...
+			sparse_error(token->pos, "dubious one-bit signed bitfield");
+		}
+		if (Wdefault_bitfield_sign &&
+		    bitfield_type->type != SYM_ENUM &&
+		    !(bitfield_type->ctype.modifiers & MOD_EXPLICITLY_SIGNED) &&
+		    is_signed) {
+			// The sign of bitfields is unspecified by default.
+			warning(token->pos, "dubious bitfield without explicit `signed' or `unsigned'");
+		}
+	}
+	bitfield->bit_size = width;
+	bitfield->endpos = token->pos;
+	return token;
+}
+
+static struct token *declaration_list(struct token *token, struct symbol_list **list)
+{
+	struct decl_state ctx = {.prefer_abstract = 0};
+	struct ctype saved;
+	unsigned long mod;
+
+	token = declaration_specifiers(token, &ctx);
+	mod = storage_modifiers(&ctx);
+	saved = ctx.ctype;
+	for (;;) {
+		struct symbol *decl = alloc_symbol(token->pos, SYM_NODE);
+		ctx.ident = &decl->ident;
+
+		token = declarator(token, &ctx);
+		if (match_op(token, ':'))
+			token = handle_bitfield(token, &ctx);
+
+		token = handle_attributes(token, &ctx, KW_ATTRIBUTE);
+		apply_modifiers(token->pos, &ctx);
+
+		decl->ctype = ctx.ctype;
+		decl->ctype.modifiers |= mod;
+		decl->endpos = token->pos;
+		add_symbol(list, decl);
+		if (!match_op(token, ','))
+			break;
+		token = token->next;
+		ctx.ctype = saved;
+	}
+	return token;
+}
+
+static struct token *struct_declaration_list(struct token *token, struct symbol_list **list)
+{
+	while (!match_op(token, '}')) {
+		if (match_ident(token, &_Static_assert_ident)) {
+			token = parse_static_assert(token, NULL);
+			continue;
+		}
+		if (!match_op(token, ';'))
+			token = declaration_list(token, list);
+		if (!match_op(token, ';')) {
+			sparse_error(token->pos, "expected ; at end of declaration");
+			break;
+		}
+		token = token->next;
+	}
+	return token;
+}
+
+static struct token *parameter_declaration(struct token *token, struct symbol *sym)
+{
+	struct decl_state ctx = {.prefer_abstract = 1};
+
+	token = declaration_specifiers(token, &ctx);
+	ctx.ident = &sym->ident;
+	token = declarator(token, &ctx);
+	token = handle_attributes(token, &ctx, KW_ATTRIBUTE);
+	apply_modifiers(token->pos, &ctx);
+	sym->ctype = ctx.ctype;
+	sym->ctype.modifiers |= storage_modifiers(&ctx);
+	sym->endpos = token->pos;
+	sym->forced_arg = ctx.storage_class == SForced;
+	return token;
+}
+
+struct token *typename(struct token *token, struct symbol **p, int *forced)
+{
+	struct decl_state ctx = {.prefer_abstract = 1};
+	int class;
+	struct symbol *sym = alloc_symbol(token->pos, SYM_NODE);
+	*p = sym;
+	token = declaration_specifiers(token, &ctx);
+	token = declarator(token, &ctx);
+	apply_modifiers(token->pos, &ctx);
+	sym->ctype = ctx.ctype;
+	sym->endpos = token->pos;
+	class = ctx.storage_class;
+	if (forced) {
+		*forced = 0;
+		if (class == SForced) {
+			*forced = 1;
+			class = 0;
+		}
+	}
+	if (class)
+		warning(sym->pos, "storage class in typename (%s %s)",
+			storage_class[class], show_typename(sym));
+	return token;
+}
+
+static struct token *parse_underscore_Pragma(struct token *token)
+{
+	struct token *next;
+
+	next = token->next;
+	if (!match_op(next, '('))
+		return next;
+	next = next->next;
+	if (next->pos.type != TOKEN_STRING)
+		return next;
+	next = next->next;
+	if (!match_op(next, ')'))
+		return next;
+	return next->next;
+}
+
+static struct token *expression_statement(struct token *token, struct expression **tree)
+{
+	if (match_ident(token, &_Pragma_ident))
+		return parse_underscore_Pragma(token);
+
+	token = parse_expression(token, tree);
+	return expect(token, ';', "at end of statement");
+}
+
+static struct token *parse_asm_operands(struct token *token, struct statement *stmt,
+	struct expression_list **inout)
+{
+	struct expression *expr;
+
+	/* Allow empty operands */
+	if (match_op(token->next, ':') || match_op(token->next, ')'))
+		return token->next;
+	do {
+		struct ident *ident = NULL;
+		if (match_op(token->next, '[') &&
+		    token_type(token->next->next) == TOKEN_IDENT &&
+		    match_op(token->next->next->next, ']')) {
+			ident = token->next->next->ident;
+			token = token->next->next->next;
+		}
+		add_expression(inout, (struct expression *)ident); /* UGGLEE!!! */
+		token = primary_expression(token->next, &expr);
+		add_expression(inout, expr);
+		token = parens_expression(token, &expr, "in asm parameter");
+		add_expression(inout, expr);
+	} while (match_op(token, ','));
+	return token;
+}
+
+static struct token *parse_asm_clobbers(struct token *token, struct statement *stmt,
+	struct expression_list **clobbers)
+{
+	struct expression *expr;
+
+	do {
+		token = primary_expression(token->next, &expr);
+		if (expr)
+			add_expression(clobbers, expr);
+	} while (match_op(token, ','));
+	return token;
+}
+
+static struct token *parse_asm_labels(struct token *token, struct statement *stmt,
+		        struct symbol_list **labels)
+{
+	struct symbol *label;
+
+	do {
+		token = token->next; /* skip ':' and ',' */
+		if (token_type(token) != TOKEN_IDENT)
+			return token;
+		label = label_symbol(token);
+		add_symbol(labels, label);
+		token = token->next;
+	} while (match_op(token, ','));
+	return token;
+}
+
+static struct token *parse_asm_statement(struct token *token, struct statement *stmt)
+{
+	int is_goto = 0;
+
+	token = token->next;
+	stmt->type = STMT_ASM;
+	if (match_idents(token, &__volatile___ident, &__volatile_ident, &volatile_ident, NULL)) {
+		token = token->next;
+	}
+	if (token_type(token) == TOKEN_IDENT && token->ident == &goto_ident) {
+		is_goto = 1;
+		token = token->next;
+	}
+	token = expect(token, '(', "after asm");
+	token = parse_expression(token, &stmt->asm_string);
+	if (match_op(token, ':'))
+		token = parse_asm_operands(token, stmt, &stmt->asm_outputs);
+	if (match_op(token, ':'))
+		token = parse_asm_operands(token, stmt, &stmt->asm_inputs);
+	if (match_op(token, ':'))
+		token = parse_asm_clobbers(token, stmt, &stmt->asm_clobbers);
+	if (is_goto && match_op(token, ':'))
+		token = parse_asm_labels(token, stmt, &stmt->asm_labels);
+	token = expect(token, ')', "after asm");
+	return expect(token, ';', "at end of asm-statement");
+}
+
+static struct token *parse_asm_declarator(struct token *token, struct decl_state *ctx)
+{
+	struct expression *expr;
+	token = expect(token, '(', "after asm");
+	token = parse_expression(token->next, &expr);
+	token = expect(token, ')', "after asm");
+	return token;
+}
+
+static struct token *parse_static_assert(struct token *token, struct symbol_list **unused)
+{
+	struct expression *cond = NULL, *message = NULL;
+
+	token = expect(token->next, '(', "after _Static_assert");
+	token = constant_expression(token, &cond);
+	if (!cond)
+		sparse_error(token->pos, "Expected constant expression");
+	token = expect(token, ',', "after conditional expression in _Static_assert");
+	token = parse_expression(token, &message);
+	if (!message || message->type != EXPR_STRING) {
+		struct position pos;
+
+		pos = message ? message->pos : token->pos;
+		sparse_error(pos, "bad or missing string literal");
+		cond = NULL;
+	}
+	token = expect(token, ')', "after diagnostic message in _Static_assert");
+
+	token = expect(token, ';', "after _Static_assert()");
+
+	if (cond && !const_expression_value(cond) && cond->type == EXPR_VALUE)
+		sparse_error(cond->pos, "static assertion failed: %s",
+			     show_string(message->string));
+	return token;
+}
+
+/* Make a statement out of an expression */
+static struct statement *make_statement(struct expression *expr)
+{
+	struct statement *stmt;
+
+	if (!expr)
+		return NULL;
+	stmt = alloc_statement(expr->pos, STMT_EXPRESSION);
+	stmt->expression = expr;
+	return stmt;
+}
+
+/*
+ * All iterators have two symbols associated with them:
+ * the "continue" and "break" symbols, which are targets
+ * for continue and break statements respectively.
+ *
+ * They are in a special name-space, but they follow
+ * all the normal visibility rules, so nested iterators
+ * automatically work right.
+ */
+static void start_iterator(struct statement *stmt)
+{
+	struct symbol *cont, *brk;
+
+	start_symbol_scope(stmt->pos);
+	cont = alloc_symbol(stmt->pos, SYM_NODE);
+	bind_symbol(cont, &continue_ident, NS_ITERATOR);
+	brk = alloc_symbol(stmt->pos, SYM_NODE);
+	bind_symbol(brk, &break_ident, NS_ITERATOR);
+
+	stmt->type = STMT_ITERATOR;
+	stmt->iterator_break = brk;
+	stmt->iterator_continue = cont;
+	fn_local_symbol(brk);
+	fn_local_symbol(cont);
+}
+
+static void end_iterator(struct statement *stmt)
+{
+	end_symbol_scope();
+}
+
+static struct statement *start_function(struct symbol *sym)
+{
+	struct symbol *ret;
+	struct statement *stmt = alloc_statement(sym->pos, STMT_COMPOUND);
+
+	start_function_scope(sym->pos);
+	ret = alloc_symbol(sym->pos, SYM_NODE);
+	ret->ctype = sym->ctype.base_type->ctype;
+	ret->ctype.modifiers &= ~(MOD_STORAGE | MOD_CONST | MOD_VOLATILE | MOD_TLS | MOD_INLINE | MOD_ADDRESSABLE | MOD_NOCAST | MOD_NODEREF | MOD_ACCESSED | MOD_TOPLEVEL);
+	ret->ctype.modifiers |= (MOD_AUTO | MOD_REGISTER);
+	bind_symbol(ret, &return_ident, NS_ITERATOR);
+	stmt->ret = ret;
+	fn_local_symbol(ret);
+
+	// Currently parsed symbol for __func__/__FUNCTION__/__PRETTY_FUNCTION__
+	current_fn = sym;
+
+	return stmt;
+}
+
+static void end_function(struct symbol *sym)
+{
+	current_fn = NULL;
+	end_function_scope();
+}
+
+/*
+ * A "switch()" statement, like an iterator, has a
+ * the "break" symbol associated with it. It works
+ * exactly like the iterator break - it's the target
+ * for any break-statements in scope, and means that
+ * "break" handling doesn't even need to know whether
+ * it's breaking out of an iterator or a switch.
+ *
+ * In addition, the "case" symbol is a marker for the
+ * case/default statements to find the switch statement
+ * that they are associated with.
+ */
+static void start_switch(struct statement *stmt)
+{
+	struct symbol *brk, *switch_case;
+
+	start_symbol_scope(stmt->pos);
+	brk = alloc_symbol(stmt->pos, SYM_NODE);
+	bind_symbol(brk, &break_ident, NS_ITERATOR);
+
+	switch_case = alloc_symbol(stmt->pos, SYM_NODE);
+	bind_symbol(switch_case, &case_ident, NS_ITERATOR);
+	switch_case->stmt = stmt;
+
+	stmt->type = STMT_SWITCH;
+	stmt->switch_break = brk;
+	stmt->switch_case = switch_case;
+
+	fn_local_symbol(brk);
+	fn_local_symbol(switch_case);
+}
+
+static void end_switch(struct statement *stmt)
+{
+	if (!stmt->switch_case->symbol_list)
+		warning(stmt->pos, "switch with no cases");
+	end_symbol_scope();
+}
+
+static void add_case_statement(struct statement *stmt)
+{
+	struct symbol *target = lookup_symbol(&case_ident, NS_ITERATOR);
+	struct symbol *sym;
+
+	if (!target) {
+		sparse_error(stmt->pos, "not in switch scope");
+		stmt->type = STMT_NONE;
+		return;
+	}
+	sym = alloc_symbol(stmt->pos, SYM_NODE);
+	add_symbol(&target->symbol_list, sym);
+	sym->stmt = stmt;
+	stmt->case_label = sym;
+	fn_local_symbol(sym);
+}
+
+static struct token *parse_return_statement(struct token *token, struct statement *stmt)
+{
+	struct symbol *target = lookup_symbol(&return_ident, NS_ITERATOR);
+
+	if (!target)
+		error_die(token->pos, "internal error: return without a function target");
+	stmt->type = STMT_RETURN;
+	stmt->ret_target = target;
+	return expression_statement(token->next, &stmt->ret_value);
+}
+
+static void validate_for_loop_decl(struct symbol *sym)
+{
+	unsigned long storage = sym->ctype.modifiers & MOD_STORAGE;
+
+	if (storage & ~(MOD_AUTO | MOD_REGISTER)) {
+		const char *name = show_ident(sym->ident);
+		sparse_error(sym->pos, "non-local var '%s' in for-loop initializer", name);
+		sym->ctype.modifiers &= ~MOD_STORAGE;
+	}
+}
+
+static struct token *parse_for_statement(struct token *token, struct statement *stmt)
+{
+	struct symbol_list *syms;
+	struct expression *e1, *e2, *e3;
+	struct statement *iterator;
+
+	start_iterator(stmt);
+	token = expect(token->next, '(', "after 'for'");
+
+	syms = NULL;
+	e1 = NULL;
+	/* C99 variable declaration? */
+	if (lookup_type(token)) {
+		token = external_declaration(token, &syms, validate_for_loop_decl);
+	} else {
+		token = parse_expression(token, &e1);
+		token = expect(token, ';', "in 'for'");
+	}
+	token = parse_expression(token, &e2);
+	token = expect(token, ';', "in 'for'");
+	token = parse_expression(token, &e3);
+	token = expect(token, ')', "in 'for'");
+	token = statement(token, &iterator);
+
+	stmt->iterator_syms = syms;
+	stmt->iterator_pre_statement = make_statement(e1);
+	stmt->iterator_pre_condition = e2;
+	stmt->iterator_post_statement = make_statement(e3);
+	stmt->iterator_post_condition = NULL;
+	stmt->iterator_statement = iterator;
+	end_iterator(stmt);
+
+	return token;
+}
+
+static struct token *parse_while_statement(struct token *token, struct statement *stmt)
+{
+	struct expression *expr;
+	struct statement *iterator;
+
+	start_iterator(stmt);
+	token = parens_expression(token->next, &expr, "after 'while'");
+	token = statement(token, &iterator);
+
+	stmt->iterator_pre_condition = expr;
+	stmt->iterator_post_condition = NULL;
+	stmt->iterator_statement = iterator;
+	end_iterator(stmt);
+
+	return token;
+}
+
+static struct token *parse_do_statement(struct token *token, struct statement *stmt)
+{
+	struct expression *expr;
+	struct statement *iterator;
+
+	start_iterator(stmt);
+	token = statement(token->next, &iterator);
+	if (token_type(token) == TOKEN_IDENT && token->ident == &while_ident)
+		token = token->next;
+	else
+		sparse_error(token->pos, "expected 'while' after 'do'");
+	token = parens_expression(token, &expr, "after 'do-while'");
+
+	stmt->iterator_post_condition = expr;
+	stmt->iterator_statement = iterator;
+	end_iterator(stmt);
+
+	if (iterator && iterator->type != STMT_COMPOUND && Wdo_while)
+		warning(iterator->pos, "do-while statement is not a compound statement");
+
+	return expect(token, ';', "after statement");
+}
+
+static struct token *parse_if_statement(struct token *token, struct statement *stmt)
+{
+	stmt->type = STMT_IF;
+	token = parens_expression(token->next, &stmt->if_conditional, "after if");
+	token = statement(token, &stmt->if_true);
+	if (token_type(token) != TOKEN_IDENT)
+		return token;
+	if (token->ident != &else_ident)
+		return token;
+	return statement(token->next, &stmt->if_false);
+}
+
+static inline struct token *case_statement(struct token *token, struct statement *stmt)
+{
+	stmt->type = STMT_CASE;
+	token = expect(token, ':', "after default/case");
+	add_case_statement(stmt);
+	return statement(token, &stmt->case_statement);
+}
+
+static struct token *parse_case_statement(struct token *token, struct statement *stmt)
+{
+	token = parse_expression(token->next, &stmt->case_expression);
+	if (match_op(token, SPECIAL_ELLIPSIS))
+		token = parse_expression(token->next, &stmt->case_to);
+	return case_statement(token, stmt);
+}
+
+static struct token *parse_default_statement(struct token *token, struct statement *stmt)
+{
+	return case_statement(token->next, stmt);
+}
+
+static struct token *parse_loop_iterator(struct token *token, struct statement *stmt)
+{
+	struct symbol *target = lookup_symbol(token->ident, NS_ITERATOR);
+	stmt->type = STMT_GOTO;
+	stmt->goto_label = target;
+	if (!target)
+		sparse_error(stmt->pos, "break/continue not in iterator scope");
+	return expect(token->next, ';', "at end of statement");
+}
+
+static struct token *parse_switch_statement(struct token *token, struct statement *stmt)
+{
+	stmt->type = STMT_SWITCH;
+	start_switch(stmt);
+	token = parens_expression(token->next, &stmt->switch_expression, "after 'switch'");
+	token = statement(token, &stmt->switch_statement);
+	end_switch(stmt);
+	return token;
+}
+
+static struct token *parse_goto_statement(struct token *token, struct statement *stmt)
+{
+	stmt->type = STMT_GOTO;
+	token = token->next;
+	if (match_op(token, '*')) {
+		token = parse_expression(token->next, &stmt->goto_expression);
+		add_statement(&function_computed_goto_list, stmt);
+	} else if (token_type(token) == TOKEN_IDENT) {
+		stmt->goto_label = label_symbol(token);
+		token = token->next;
+	} else {
+		sparse_error(token->pos, "Expected identifier or goto expression");
+	}
+	return expect(token, ';', "at end of statement");
+}
+
+static struct token *parse_context_statement(struct token *token, struct statement *stmt)
+{
+	stmt->type = STMT_CONTEXT;
+	token = parse_expression(token->next, &stmt->expression);
+	if (stmt->expression->type == EXPR_PREOP
+	    && stmt->expression->op == '('
+	    && stmt->expression->unop->type == EXPR_COMMA) {
+		struct expression *expr;
+		expr = stmt->expression->unop;
+		stmt->context = expr->left;
+		stmt->expression = expr->right;
+	}
+	return expect(token, ';', "at end of statement");
+}
+
+static struct token *parse_range_statement(struct token *token, struct statement *stmt)
+{
+	stmt->type = STMT_RANGE;
+	token = assignment_expression(token->next, &stmt->range_expression);
+	token = expect(token, ',', "after range expression");
+	token = assignment_expression(token, &stmt->range_low);
+	token = expect(token, ',', "after low range");
+	token = assignment_expression(token, &stmt->range_high);
+	return expect(token, ';', "after range statement");
+}
+
+static struct token *statement(struct token *token, struct statement **tree)
+{
+	struct statement *stmt = alloc_statement(token->pos, STMT_NONE);
+
+	*tree = stmt;
+	if (token_type(token) == TOKEN_IDENT) {
+		struct symbol *s = lookup_keyword(token->ident, NS_KEYWORD);
+		if (s && s->op->statement)
+			return s->op->statement(token, stmt);
+
+		if (match_op(token->next, ':')) {
+			struct symbol *s = label_symbol(token);
+			stmt->type = STMT_LABEL;
+			stmt->label_identifier = s;
+			if (s->stmt)
+				sparse_error(stmt->pos, "label '%s' redefined", show_ident(token->ident));
+			s->stmt = stmt;
+			token = skip_attributes(token->next->next);
+			return statement(token, &stmt->label_statement);
+		}
+	}
+
+	if (match_op(token, '{')) {
+		stmt->type = STMT_COMPOUND;
+		start_symbol_scope(stmt->pos);
+		token = compound_statement(token->next, stmt);
+		end_symbol_scope();
+		
+		return expect(token, '}', "at end of compound statement");
+	}
+			
+	stmt->type = STMT_EXPRESSION;
+	return expression_statement(token, &stmt->expression);
+}
+
+/* gcc extension - __label__ ident-list; in the beginning of compound stmt */
+static struct token *label_statement(struct token *token)
+{
+	while (token_type(token) == TOKEN_IDENT) {
+		struct symbol *sym = alloc_symbol(token->pos, SYM_LABEL);
+		/* it's block-scope, but we want label namespace */
+		bind_symbol(sym, token->ident, NS_SYMBOL);
+		sym->namespace = NS_LABEL;
+		fn_local_symbol(sym);
+		token = token->next;
+		if (!match_op(token, ','))
+			break;
+		token = token->next;
+	}
+	return expect(token, ';', "at end of label declaration");
+}
+
+static struct token * statement_list(struct token *token, struct statement_list **list)
+{
+	int seen_statement = 0;
+	while (token_type(token) == TOKEN_IDENT &&
+	       token->ident == &__label___ident)
+		token = label_statement(token->next);
+	for (;;) {
+		struct statement * stmt;
+		if (eof_token(token))
+			break;
+		if (match_op(token, '}'))
+			break;
+		if (match_ident(token, &_Static_assert_ident)) {
+			token = parse_static_assert(token, NULL);
+			continue;
+		}
+		if (lookup_type(token)) {
+			if (seen_statement) {
+				warning(token->pos, "mixing declarations and code");
+				seen_statement = 0;
+			}
+			stmt = alloc_statement(token->pos, STMT_DECLARATION);
+			token = external_declaration(token, &stmt->declaration, NULL);
+		} else {
+			seen_statement = Wdeclarationafterstatement;
+			token = statement(token, &stmt);
+		}
+		add_statement(list, stmt);
+	}
+	return token;
+}
+
+static struct token *identifier_list(struct token *token, struct symbol *fn)
+{
+	struct symbol_list **list = &fn->arguments;
+	for (;;) {
+		struct symbol *sym = alloc_symbol(token->pos, SYM_NODE);
+		sym->ident = token->ident;
+		token = token->next;
+		sym->endpos = token->pos;
+		sym->ctype.base_type = &incomplete_ctype;
+		add_symbol(list, sym);
+		if (!match_op(token, ',') ||
+		    token_type(token->next) != TOKEN_IDENT ||
+		    lookup_type(token->next))
+			break;
+		token = token->next;
+	}
+	return token;
+}
+
+static struct token *parameter_type_list(struct token *token, struct symbol *fn)
+{
+	struct symbol_list **list = &fn->arguments;
+
+	for (;;) {
+		struct symbol *sym;
+
+		if (match_op(token, SPECIAL_ELLIPSIS)) {
+			fn->variadic = 1;
+			token = token->next;
+			break;
+		}
+
+		sym = alloc_symbol(token->pos, SYM_NODE);
+		token = parameter_declaration(token, sym);
+		if (sym->ctype.base_type == &void_ctype) {
+			/* Special case: (void) */
+			if (!*list && !sym->ident)
+				break;
+			warning(token->pos, "void parameter");
+		}
+		add_symbol(list, sym);
+		if (!match_op(token, ','))
+			break;
+		token = token->next;
+	}
+	return token;
+}
+
+struct token *compound_statement(struct token *token, struct statement *stmt)
+{
+	token = statement_list(token, &stmt->stmts);
+	return token;
+}
+
+static struct expression *identifier_expression(struct token *token)
+{
+	struct expression *expr = alloc_expression(token->pos, EXPR_IDENTIFIER);
+	expr->expr_ident = token->ident;
+	return expr;
+}
+
+static struct expression *index_expression(struct expression *from, struct expression *to)
+{
+	int idx_from, idx_to;
+	struct expression *expr = alloc_expression(from->pos, EXPR_INDEX);
+
+	idx_from = const_expression_value(from);
+	idx_to = idx_from;
+	if (to) {
+		idx_to = const_expression_value(to);
+		if (idx_to < idx_from || idx_from < 0)
+			warning(from->pos, "nonsense array initializer index range");
+	}
+	expr->idx_from = idx_from;
+	expr->idx_to = idx_to;
+	return expr;
+}
+
+static struct token *single_initializer(struct expression **ep, struct token *token)
+{
+	int expect_equal = 0;
+	struct token *next = token->next;
+	struct expression **tail = ep;
+	int nested;
+
+	*ep = NULL; 
+
+	if ((token_type(token) == TOKEN_IDENT) && match_op(next, ':')) {
+		struct expression *expr = identifier_expression(token);
+		if (Wold_initializer)
+			warning(token->pos, "obsolete struct initializer, use C99 syntax");
+		token = initializer(&expr->ident_expression, next->next);
+		if (expr->ident_expression)
+			*ep = expr;
+		return token;
+	}
+
+	for (tail = ep, nested = 0; ; nested++, next = token->next) {
+		if (match_op(token, '.') && (token_type(next) == TOKEN_IDENT)) {
+			struct expression *expr = identifier_expression(next);
+			*tail = expr;
+			tail = &expr->ident_expression;
+			expect_equal = 1;
+			token = next->next;
+		} else if (match_op(token, '[')) {
+			struct expression *from = NULL, *to = NULL, *expr;
+			token = constant_expression(token->next, &from);
+			if (!from) {
+				sparse_error(token->pos, "Expected constant expression");
+				break;
+			}
+			if (match_op(token, SPECIAL_ELLIPSIS))
+				token = constant_expression(token->next, &to);
+			expr = index_expression(from, to);
+			*tail = expr;
+			tail = &expr->idx_expression;
+			token = expect(token, ']', "at end of initializer index");
+			if (nested)
+				expect_equal = 1;
+		} else {
+			break;
+		}
+	}
+	if (nested && !expect_equal) {
+		if (!match_op(token, '='))
+			warning(token->pos, "obsolete array initializer, use C99 syntax");
+		else
+			expect_equal = 1;
+	}
+	if (expect_equal)
+		token = expect(token, '=', "at end of initializer index");
+
+	token = initializer(tail, token);
+	if (!*tail)
+		*ep = NULL;
+	return token;
+}
+
+static struct token *initializer_list(struct expression_list **list, struct token *token)
+{
+	struct expression *expr;
+
+	for (;;) {
+		token = single_initializer(&expr, token);
+		if (!expr)
+			break;
+		add_expression(list, expr);
+		if (!match_op(token, ','))
+			break;
+		token = token->next;
+	}
+	return token;
+}
+
+struct token *initializer(struct expression **tree, struct token *token)
+{
+	if (match_op(token, '{')) {
+		struct expression *expr = alloc_expression(token->pos, EXPR_INITIALIZER);
+		*tree = expr;
+		token = initializer_list(&expr->expr_list, token->next);
+		return expect(token, '}', "at end of initializer");
+	}
+	return assignment_expression(token, tree);
+}
+
+static void declare_argument(struct symbol *sym, struct symbol *fn)
+{
+	if (!sym->ident) {
+		sparse_error(sym->pos, "no identifier for function argument");
+		return;
+	}
+	bind_symbol(sym, sym->ident, NS_SYMBOL);
+}
+
+static int is_syscall(struct symbol *sym)
+{
+	char *macro;
+	char *name;
+	int is_syscall = 0;
+
+	macro = get_macro_name(sym->pos);
+	if (macro &&
+	    (strncmp("SYSCALL_DEFINE", macro, strlen("SYSCALL_DEFINE")) == 0 ||
+	     strncmp("COMPAT_SYSCALL_DEFINE", macro, strlen("COMPAT_SYSCALL_DEFINE")) == 0))
+		is_syscall = 1;
+
+	name = sym->ident->name;
+
+	if (name && strncmp(name, "sys_", 4) ==0)
+		is_syscall = 1;
+	
+	if (name && strncmp(name, "compat_sys_", 11) == 0)
+		is_syscall = 1;
+
+	return is_syscall;
+}
+    
+
+static struct token *parse_function_body(struct token *token, struct symbol *decl,
+	struct symbol_list **list)
+{
+	struct symbol_list **old_symbol_list;
+	struct symbol *base_type = decl->ctype.base_type;
+	struct statement *stmt, **p;
+	struct symbol *prev;
+	struct symbol *arg;
+
+	old_symbol_list = function_symbol_list;
+	if (decl->ctype.modifiers & MOD_INLINE) {
+		function_symbol_list = &decl->inline_symbol_list;
+		p = &base_type->inline_stmt;
+	} else {
+		function_symbol_list = &decl->symbol_list;
+		p = &base_type->stmt;
+	}
+	function_computed_target_list = NULL;
+	function_computed_goto_list = NULL;
+
+	if (decl->ctype.modifiers & MOD_EXTERN &&
+		!(decl->ctype.modifiers & MOD_INLINE) &&
+		Wexternal_function_has_definition)
+		warning(decl->pos, "function '%s' with external linkage has definition", show_ident(decl->ident));
+
+	if (!(decl->ctype.modifiers & MOD_STATIC))
+		decl->ctype.modifiers |= MOD_EXTERN;
+
+	stmt = start_function(decl);
+
+	*p = stmt;
+	FOR_EACH_PTR (base_type->arguments, arg) {
+		declare_argument(arg, base_type);
+	} END_FOR_EACH_PTR(arg);
+
+	token = compound_statement(token->next, stmt);
+
+	end_function(decl); 
+	if (!(decl->ctype.modifiers & MOD_INLINE))
+		add_symbol(list, decl);
+	else if (is_syscall(decl)) {
+	    add_symbol(list, decl);
+	    /*
+	    printf("parse.c decl: %s\n", decl->ident->name);
+	    char *macro = get_macro_name(decl->pos);
+	    printf("decl macro: %s\n", macro);
+	    */
+	}
+	check_declaration(decl);
+	decl->definition = decl;
+	prev = decl->same_symbol;
+	if (prev && prev->definition) {
+		warning(decl->pos, "multiple definitions for function '%s'",
+			show_ident(decl->ident));
+		info(prev->definition->pos, " the previous one is here");
+	} else {
+		while (prev) {
+			rebind_scope(prev, decl->scope);
+			prev->definition = decl;
+			prev = prev->same_symbol;
+		}
+	}
+	function_symbol_list = old_symbol_list;
+	if (function_computed_goto_list) {
+		if (!function_computed_target_list)
+			warning(decl->pos, "function '%s' has computed goto but no targets?", show_ident(decl->ident));
+		else {
+			FOR_EACH_PTR(function_computed_goto_list, stmt) {
+				stmt->target_list = function_computed_target_list;
+			} END_FOR_EACH_PTR(stmt);
+		}
+	}
+	return expect(token, '}', "at end of function");
+}
+
+static void promote_k_r_types(struct symbol *arg)
+{
+	struct symbol *base = arg->ctype.base_type;
+	if (base && base->ctype.base_type == &int_type && (base->ctype.modifiers & (MOD_CHAR | MOD_SHORT))) {
+		arg->ctype.base_type = &int_ctype;
+	}
+}
+
+static void apply_k_r_types(struct symbol_list *argtypes, struct symbol *fn)
+{
+	struct symbol_list *real_args = fn->ctype.base_type->arguments;
+	struct symbol *arg;
+
+	FOR_EACH_PTR(real_args, arg) {
+		struct symbol *type;
+
+		/* This is quadratic in the number of arguments. We _really_ don't care */
+		FOR_EACH_PTR(argtypes, type) {
+			if (type->ident == arg->ident)
+				goto match;
+		} END_FOR_EACH_PTR(type);
+		if (Wimplicit_int) {
+			sparse_error(arg->pos, "missing type declaration for parameter '%s'",
+				show_ident(arg->ident));
+		}
+		continue;
+match:
+		type->used = 1;
+		/* "char" and "short" promote to "int" */
+		promote_k_r_types(type);
+
+		arg->ctype = type->ctype;
+	} END_FOR_EACH_PTR(arg);
+
+	FOR_EACH_PTR(argtypes, arg) {
+		if (!arg->used)
+			warning(arg->pos, "nonsensical parameter declaration '%s'", show_ident(arg->ident));
+	} END_FOR_EACH_PTR(arg);
+
+}
+
+static struct token *parse_k_r_arguments(struct token *token, struct symbol *decl,
+	struct symbol_list **list)
+{
+	struct symbol_list *args = NULL;
+
+	if (Wold_style_definition)
+		warning(token->pos, "non-ANSI definition of function '%s'", show_ident(decl->ident));
+
+	do {
+		token = declaration_list(token, &args);
+		if (!match_op(token, ';')) {
+			sparse_error(token->pos, "expected ';' at end of parameter declaration");
+			break;
+		}
+		token = token->next;
+	} while (lookup_type(token));
+
+	apply_k_r_types(args, decl);
+
+	if (!match_op(token, '{')) {
+		sparse_error(token->pos, "expected function body");
+		return token;
+	}
+	return parse_function_body(token, decl, list);
+}
+
+static struct token *toplevel_asm_declaration(struct token *token, struct symbol_list **list)
+{
+	struct symbol *anon = alloc_symbol(token->pos, SYM_NODE);
+	struct symbol *fn = alloc_symbol(token->pos, SYM_FN);
+	struct statement *stmt;
+
+	anon->ctype.base_type = fn;
+	stmt = alloc_statement(token->pos, STMT_NONE);
+	fn->stmt = stmt;
+
+	token = parse_asm_statement(token, stmt);
+
+	add_symbol(list, anon);
+	return token;
+}
+
+struct token *external_declaration(struct token *token, struct symbol_list **list,
+		validate_decl_t validate_decl)
+{
+	struct ident *ident = NULL;
+	struct symbol *decl;
+	struct decl_state ctx = { .ident = &ident };
+	struct ctype saved;
+	struct symbol *base_type;
+	unsigned long mod;
+	int is_typedef;
+
+	if (match_ident(token, &_Pragma_ident))
+		return parse_underscore_Pragma(token);
+
+	/* Top-level inline asm or static assertion? */
+	if (token_type(token) == TOKEN_IDENT) {
+		struct symbol *s = lookup_keyword(token->ident, NS_KEYWORD);
+		if (s && s->op->toplevel)
+			return s->op->toplevel(token, list);
+	}
+
+	/* Parse declaration-specifiers, if any */
+	token = declaration_specifiers(token, &ctx);
+	mod = storage_modifiers(&ctx);
+	decl = alloc_symbol(token->pos, SYM_NODE);
+	/* Just a type declaration? */
+	if (match_op(token, ';')) {
+		apply_modifiers(token->pos, &ctx);
+		return token->next;
+	}
+
+	saved = ctx.ctype;
+	token = declarator(token, &ctx);
+	token = handle_attributes(token, &ctx, KW_ATTRIBUTE | KW_ASM);
+	apply_modifiers(token->pos, &ctx);
+
+	decl->ctype = ctx.ctype;
+	decl->ctype.modifiers |= mod;
+	decl->endpos = token->pos;
+
+	/* Just a type declaration? */
+	if (!ident) {
+		warning(token->pos, "missing identifier in declaration");
+		return expect(token, ';', "at the end of type declaration");
+	}
+
+	/* type define declaration? */
+	is_typedef = ctx.storage_class == STypedef;
+
+	/* Typedefs don't have meaningful storage */
+	if (is_typedef)
+		decl->ctype.modifiers |= MOD_USERTYPE;
+
+	bind_symbol(decl, ident, is_typedef ? NS_TYPEDEF: NS_SYMBOL);
+
+	base_type = decl->ctype.base_type;
+
+	if (is_typedef) {
+		if (base_type && !base_type->ident) {
+			switch (base_type->type) {
+			case SYM_STRUCT:
+			case SYM_UNION:
+			case SYM_ENUM:
+			case SYM_RESTRICT:
+				base_type->ident = ident;
+				break;
+			default:
+				break;
+			}
+		}
+	} else if (base_type && base_type->type == SYM_FN) {
+		if (base_type->ctype.base_type == &incomplete_ctype) {
+			warning(decl->pos, "'%s()' has implicit return type",
+				show_ident(decl->ident));
+			base_type->ctype.base_type = &int_ctype;
+		}
+		/* K&R argument declaration? */
+		if (lookup_type(token))
+			return parse_k_r_arguments(token, decl, list);
+		if (match_op(token, '{'))
+			return parse_function_body(token, decl, list);
+
+		if (!(decl->ctype.modifiers & MOD_STATIC))
+			decl->ctype.modifiers |= MOD_EXTERN;
+	} else if (base_type == &void_ctype && !(decl->ctype.modifiers & MOD_EXTERN)) {
+		sparse_error(token->pos, "void declaration");
+	}
+	if (base_type == &incomplete_ctype) {
+		warning(decl->pos, "'%s' has implicit type", show_ident(decl->ident));
+		decl->ctype.base_type = &int_ctype;;
+	}
+
+	for (;;) {
+		if (!is_typedef && match_op(token, '=')) {
+			token = initializer(&decl->initializer, token->next);
+		}
+		if (!is_typedef) {
+			if (validate_decl)
+				validate_decl(decl);
+
+			if (decl->initializer && decl->ctype.modifiers & MOD_EXTERN) {
+				warning(decl->pos, "symbol with external linkage has initializer");
+				decl->ctype.modifiers &= ~MOD_EXTERN;
+			}
+
+			if (!(decl->ctype.modifiers & (MOD_EXTERN | MOD_INLINE))) {
+				add_symbol(list, decl);
+				fn_local_symbol(decl);
+			}
+		}
+		check_declaration(decl);
+		if (decl->same_symbol) {
+			decl->definition = decl->same_symbol->definition;
+			decl->op = decl->same_symbol->op;
+		}
+
+		if (!match_op(token, ','))
+			break;
+
+		token = token->next;
+		ident = NULL;
+		decl = alloc_symbol(token->pos, SYM_NODE);
+		ctx.ctype = saved;
+		token = handle_attributes(token, &ctx, KW_ATTRIBUTE);
+		token = declarator(token, &ctx);
+		token = handle_attributes(token, &ctx, KW_ATTRIBUTE | KW_ASM);
+		apply_modifiers(token->pos, &ctx);
+		decl->ctype = ctx.ctype;
+		decl->ctype.modifiers |= mod;
+		decl->endpos = token->pos;
+		if (!ident) {
+			sparse_error(token->pos, "expected identifier name in type definition");
+			return token;
+		}
+
+		if (is_typedef)
+			decl->ctype.modifiers |= MOD_USERTYPE;
+
+		bind_symbol(decl, ident, is_typedef ? NS_TYPEDEF: NS_SYMBOL);
+
+		/* Function declarations are automatically extern unless specifically static */
+		base_type = decl->ctype.base_type;
+		if (!is_typedef && base_type && base_type->type == SYM_FN) {
+			if (!(decl->ctype.modifiers & MOD_STATIC))
+				decl->ctype.modifiers |= MOD_EXTERN;
+		}
+	}
+	return expect(token, ';', "at end of declaration");
+}
--- /dev/null	Fri Dec 21 15:00:14 2018
+++ new/usr/src/tools/smatch/src/parse.dtd	Fri Dec 21 15:00:14 2018
@@ -0,0 +1,51 @@
+<!ELEMENT parse (symbol+) >
+
+<!ELEMENT symbol (symbol*) >
+
+<!ATTLIST symbol type (uninitialized|preprocessor|basetype|node|pointer|function|array|struct|union|enum|typedef|typeof|member|bitfield|label|restrict|fouled|keyword|bad) #REQUIRED
+                 id ID #REQUIRED
+		 file CDATA #REQUIRED
+		 start-line CDATA #REQUIRED
+		 start-col CDATA #REQUIRED
+		 end-line CDATA #IMPLIED
+		 end-col CDATA #IMPLIED
+		 end-file CDATA #IMPLIED
+
+		 ident CDATA #IMPLIED
+		 base-type IDREF #IMPLIED
+		 base-type-builtin (char|signed char|unsigned char|short|signed short|unsigned short|int|signed int|unsigned int|signed long|long|unsigned long|long long|signed long long|unsigned long long|void|bool|string|float|double|long double|incomplete type|abstract int|abstract fp|label type|bad type) #IMPLIED
+
+		 array-size CDATA #IMPLIED
+
+		 bit-size CDATA #IMPLIED
+		 alignment CDATA #IMPLIED
+		 offset CDATA #IMPLIED
+		 bit-offset CDATA #IMPLIED
+
+		 auto (0|1) #IMPLIED
+		 register (0|1) #IMPLIED
+		 static (0|1) #IMPLIED
+		 extern (0|1) #IMPLIED
+		 const (0|1) #IMPLIED
+		 volatile (0|1) #IMPLIED
+		 signed (0|1) #IMPLIED
+		 unsigned (0|1) #IMPLIED
+		 char (0|1) #IMPLIED
+		 short (0|1) #IMPLIED
+		 long (0|1) #IMPLIED
+		 long-long (0|1) #IMPLIED
+		 typedef (0|1) #IMPLIED
+		 inline (0|1) #IMPLIED
+		 addressable (0|1) #IMPLIED
+		 nocast (0|1) #IMPLIED
+		 noderef (0|1) #IMPLIED
+		 accessed (0|1) #IMPLIED
+		 toplevel (0|1) #IMPLIED
+		 label (0|1) #IMPLIED
+		 assigned (0|1) #IMPLIED
+		 type-type (0|1) #IMPLIED
+		 safe (0|1) #IMPLIED
+		 usertype (0|1) #IMPLIED
+		 force (0|1) #IMPLIED
+		 explicitly-signed (0|1) #IMPLIED
+		 bitwise (0|1) #IMPLIED >
--- /dev/null	Fri Dec 21 15:00:14 2018
+++ new/usr/src/tools/smatch/src/parse.h	Fri Dec 21 15:00:14 2018
@@ -0,0 +1,155 @@
+#ifndef PARSE_H
+#define PARSE_H
+/*
+ * Basic parsing data structures. Statements and symbols.
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "symbol.h"
+
+enum statement_type {
+	STMT_NONE,
+	STMT_DECLARATION,
+	STMT_EXPRESSION,
+	STMT_COMPOUND,
+	STMT_IF,
+	STMT_RETURN,
+	STMT_CASE,
+	STMT_SWITCH,
+	STMT_ITERATOR,
+	STMT_LABEL,
+	STMT_GOTO,
+	STMT_ASM,
+	STMT_CONTEXT,
+	STMT_RANGE,
+};
+
+struct statement {
+	enum statement_type type;
+	struct position pos;
+	struct statement *parent;
+	union {
+		struct /* declaration */ {
+			struct symbol_list *declaration;
+		};
+		struct /* context */ {
+			struct expression *expression;
+			struct expression *context;
+		};
+		struct /* return_statement */ {
+			struct expression *ret_value;
+			struct symbol *ret_target;
+		};
+		struct /* if_statement */ {
+			struct expression *if_conditional;
+			struct statement *if_true;
+			struct statement *if_false;
+		};
+		struct /* compound_struct */ {
+			struct statement_list *stmts;
+			struct symbol *ret;
+			struct symbol *inline_fn;
+			struct statement *args;
+		};
+		struct /* labeled_struct */ {
+			struct symbol *label_identifier;
+			struct statement *label_statement;
+		};
+		struct /* case_struct */ {
+			struct expression *case_expression;
+			struct expression *case_to;
+			struct statement *case_statement;
+			struct symbol *case_label;
+		};
+		struct /* switch_struct */ {
+			struct expression *switch_expression;
+			struct statement *switch_statement;
+			struct symbol *switch_break, *switch_case;
+		};
+		struct /* iterator_struct */ {
+			struct symbol *iterator_break;
+			struct symbol *iterator_continue;
+			struct symbol_list *iterator_syms;
+			struct statement  *iterator_pre_statement;
+			struct expression *iterator_pre_condition;
+
+			struct statement  *iterator_statement;
+
+			struct statement  *iterator_post_statement;
+			struct expression *iterator_post_condition;
+		};
+		struct /* goto_struct */ {
+			struct symbol *goto_label;
+
+			/* computed gotos have these: */
+			struct expression *goto_expression;
+			struct symbol_list *target_list;
+		};
+		struct /* asm */ {
+			struct expression *asm_string;
+			struct expression_list *asm_outputs;
+			struct expression_list *asm_inputs;
+			struct expression_list *asm_clobbers;
+			struct symbol_list *asm_labels;
+		};
+		struct /* range */ {
+			struct expression *range_expression;
+			struct expression *range_low;
+			struct expression *range_high;
+		};
+	};
+};
+
+extern struct symbol_list *function_computed_target_list;
+extern struct statement_list *function_computed_goto_list;
+
+extern struct token *parse_expression(struct token *, struct expression **);
+extern struct symbol *label_symbol(struct token *token);
+
+extern int show_statement(struct statement *);
+extern void show_statement_list(struct statement_list *, const char *);
+extern int show_expression(struct expression *);
+
+typedef void (*validate_decl_t)(struct symbol *decl);
+extern struct token *external_declaration(struct token *, struct symbol_list **, validate_decl_t);
+
+extern struct symbol *ctype_integer(int size, int want_unsigned);
+
+extern void copy_statement(struct statement *src, struct statement *dst);
+extern int inline_function(struct expression *expr, struct symbol *sym);
+extern void uninline(struct symbol *sym);
+extern void init_parser(int);
+
+static inline void stmt_set_parent_stmt(struct statement *stmt, struct statement *parent)
+{
+	if (!stmt)
+		return;
+	stmt->parent = parent;
+}
+
+static inline struct statement *stmt_get_parent_stmt(struct statement *stmt)
+{
+	return stmt->parent;
+}
+
+#endif /* PARSE_H */
--- /dev/null	Fri Dec 21 15:00:14 2018
+++ new/usr/src/tools/smatch/src/pre-process.c	Fri Dec 21 15:00:14 2018
@@ -0,0 +1,2233 @@
+/*
+ * Do C preprocessing, based on a token list gathered by
+ * the tokenizer.
+ *
+ * This may not be the smartest preprocessor on the planet.
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003-2004 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <time.h>
+#include <dirent.h>
+#include <sys/stat.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "parse.h"
+#include "token.h"
+#include "symbol.h"
+#include "expression.h"
+#include "scope.h"
+
+static struct ident_list *macros;	// only needed for -dD
+static int false_nesting = 0;
+static int counter_macro = 0;		// __COUNTER__ expansion
+
+#define INCLUDEPATHS 300
+const char *includepath[INCLUDEPATHS+1] = {
+	"",
+	"/usr/include",
+	"/usr/local/include",
+	NULL
+};
+
+static const char **quote_includepath = includepath;
+static const char **angle_includepath = includepath + 1;
+static const char **isys_includepath   = includepath + 1;
+static const char **sys_includepath   = includepath + 1;
+static const char **dirafter_includepath = includepath + 3;
+
+#define dirty_stream(stream)				\
+	do {						\
+		if (!stream->dirty) {			\
+			stream->dirty = 1;		\
+			if (!stream->ifndef)		\
+				stream->protect = NULL;	\
+		}					\
+	} while(0)
+
+#define end_group(stream)					\
+	do {							\
+		if (stream->ifndef == stream->top_if) {		\
+			stream->ifndef = NULL;			\
+			if (!stream->dirty)			\
+				stream->protect = NULL;		\
+			else if (stream->protect)		\
+				stream->dirty = 0;		\
+		}						\
+	} while(0)
+
+#define nesting_error(stream)		\
+	do {				\
+		stream->dirty = 1;	\
+		stream->ifndef = NULL;	\
+		stream->protect = NULL;	\
+	} while(0)
+
+static struct token *alloc_token(struct position *pos)
+{
+	struct token *token = __alloc_token(0);
+
+	token->pos.stream = pos->stream;
+	token->pos.line = pos->line;
+	token->pos.pos = pos->pos;
+	token->pos.whitespace = 1;
+	return token;
+}
+
+/* Expand symbol 'sym' at '*list' */
+static int expand(struct token **, struct symbol *);
+
+static void replace_with_string(struct token *token, const char *str)
+{
+	int size = strlen(str) + 1;
+	struct string *s = __alloc_string(size);
+
+	s->length = size;
+	memcpy(s->data, str, size);
+	token_type(token) = TOKEN_STRING;
+	token->string = s;
+}
+
+static void replace_with_integer(struct token *token, unsigned int val)
+{
+	char *buf = __alloc_bytes(11);
+	sprintf(buf, "%u", val);
+	token_type(token) = TOKEN_NUMBER;
+	token->number = buf;
+}
+
+static struct symbol *lookup_macro(struct ident *ident)
+{
+	struct symbol *sym = lookup_symbol(ident, NS_MACRO | NS_UNDEF);
+	if (sym && sym->namespace != NS_MACRO)
+		sym = NULL;
+	return sym;
+}
+
+static int token_defined(struct token *token)
+{
+	if (token_type(token) == TOKEN_IDENT) {
+		struct symbol *sym = lookup_macro(token->ident);
+		if (sym) {
+			sym->used_in = file_scope;
+			return 1;
+		}
+		return 0;
+	}
+
+	sparse_error(token->pos, "expected preprocessor identifier");
+	return 0;
+}
+
+static void replace_with_defined(struct token *token)
+{
+	static const char *string[] = { "0", "1" };
+	int defined = token_defined(token);
+
+	token_type(token) = TOKEN_NUMBER;
+	token->number = string[defined];
+}
+
+static int expand_one_symbol(struct token **list)
+{
+	struct token *token = *list;
+	struct symbol *sym;
+	static char buffer[12]; /* __DATE__: 3 + ' ' + 2 + ' ' + 4 + '\0' */
+	static time_t t = 0;
+
+	if (token->pos.noexpand)
+		return 1;
+
+	sym = lookup_macro(token->ident);
+	if (sym) {
+		store_macro_pos(token);
+		sym->used_in = file_scope;
+		return expand(list, sym);
+	}
+	if (token->ident == &__LINE___ident) {
+		replace_with_integer(token, token->pos.line);
+	} else if (token->ident == &__FILE___ident) {
+		replace_with_string(token, stream_name(token->pos.stream));
+	} else if (token->ident == &__DATE___ident) {
+		if (!t)
+			time(&t);
+		strftime(buffer, 12, "%b %e %Y", localtime(&t));
+		replace_with_string(token, buffer);
+	} else if (token->ident == &__TIME___ident) {
+		if (!t)
+			time(&t);
+		strftime(buffer, 9, "%T", localtime(&t));
+		replace_with_string(token, buffer);
+	} else if (token->ident == &__COUNTER___ident) {
+		replace_with_integer(token, counter_macro++);
+	}
+	return 1;
+}
+
+static inline struct token *scan_next(struct token **where)
+{
+	struct token *token = *where;
+	if (token_type(token) != TOKEN_UNTAINT)
+		return token;
+	do {
+		token->ident->tainted = 0;
+		token = token->next;
+	} while (token_type(token) == TOKEN_UNTAINT);
+	*where = token;
+	return token;
+}
+
+static void expand_list(struct token **list)
+{
+	struct token *next;
+	while (!eof_token(next = scan_next(list))) {
+		if (token_type(next) != TOKEN_IDENT || expand_one_symbol(list))
+			list = &next->next;
+	}
+}
+
+static void preprocessor_line(struct stream *stream, struct token **line);
+
+static struct token *collect_arg(struct token *prev, int vararg, struct position *pos, int count)
+{
+	struct stream *stream = input_streams + prev->pos.stream;
+	struct token **p = &prev->next;
+	struct token *next;
+	int nesting = 0;
+
+	while (!eof_token(next = scan_next(p))) {
+		if (next->pos.newline && match_op(next, '#')) {
+			if (!next->pos.noexpand) {
+				sparse_error(next->pos,
+					     "directive in argument list");
+				preprocessor_line(stream, p);
+				__free_token(next);	/* Free the '#' token */
+				continue;
+			}
+		}
+		switch (token_type(next)) {
+		case TOKEN_STREAMEND:
+		case TOKEN_STREAMBEGIN:
+			*p = &eof_token_entry;
+			return next;
+		case TOKEN_STRING:
+		case TOKEN_WIDE_STRING:
+			if (count > 1)
+				next->string->immutable = 1;
+			break;
+		}
+		if (false_nesting) {
+			*p = next->next;
+			__free_token(next);
+			continue;
+		}
+		if (match_op(next, '(')) {
+			nesting++;
+		} else if (match_op(next, ')')) {
+			if (!nesting--)
+				break;
+		} else if (match_op(next, ',') && !nesting && !vararg) {
+			break;
+		}
+		next->pos.stream = pos->stream;
+		next->pos.line = pos->line;
+		next->pos.pos = pos->pos;
+		p = &next->next;
+	}
+	*p = &eof_token_entry;
+	return next;
+}
+
+/*
+ * We store arglist as <counter> [arg1] <number of uses for arg1> ... eof
+ */
+
+struct arg {
+	struct token *arg;
+	struct token *expanded;
+	struct token *str;
+	int n_normal;
+	int n_quoted;
+	int n_str;
+};
+
+static int collect_arguments(struct token *start, struct token *arglist, struct arg *args, struct token *what)
+{
+	int wanted = arglist->count.normal;
+	struct token *next = NULL;
+	int count = 0;
+
+	arglist = arglist->next;	/* skip counter */
+
+	if (!wanted) {
+		next = collect_arg(start, 0, &what->pos, 0);
+		if (eof_token(next))
+			goto Eclosing;
+		if (!eof_token(start->next) || !match_op(next, ')')) {
+			count++;
+			goto Emany;
+		}
+	} else {
+		for (count = 0; count < wanted; count++) {
+			struct argcount *p = &arglist->next->count;
+			next = collect_arg(start, p->vararg, &what->pos, p->normal);
+			if (eof_token(next))
+				goto Eclosing;
+			if (p->vararg && wanted == 1 && eof_token(start->next))
+				break;
+			arglist = arglist->next->next;
+			args[count].arg = start->next;
+			args[count].n_normal = p->normal;
+			args[count].n_quoted = p->quoted;
+			args[count].n_str = p->str;
+			if (match_op(next, ')')) {
+				count++;
+				break;
+			}
+			start = next;
+		}
+		if (count == wanted && !match_op(next, ')'))
+			goto Emany;
+		if (count == wanted - 1) {
+			struct argcount *p = &arglist->next->count;
+			if (!p->vararg)
+				goto Efew;
+			args[count].arg = NULL;
+			args[count].n_normal = p->normal;
+			args[count].n_quoted = p->quoted;
+			args[count].n_str = p->str;
+		}
+		if (count < wanted - 1)
+			goto Efew;
+	}
+	what->next = next->next;
+	return 1;
+
+Efew:
+	sparse_error(what->pos, "macro \"%s\" requires %d arguments, but only %d given",
+		show_token(what), wanted, count);
+	goto out;
+Emany:
+	while (match_op(next, ',')) {
+		next = collect_arg(next, 0, &what->pos, 0);
+		count++;
+	}
+	if (eof_token(next))
+		goto Eclosing;
+	sparse_error(what->pos, "macro \"%s\" passed %d arguments, but takes just %d",
+		show_token(what), count, wanted);
+	goto out;
+Eclosing:
+	sparse_error(what->pos, "unterminated argument list invoking macro \"%s\"",
+		show_token(what));
+out:
+	what->next = next->next;
+	return 0;
+}
+
+static struct token *dup_list(struct token *list)
+{
+	struct token *res = NULL;
+	struct token **p = &res;
+
+	while (!eof_token(list)) {
+		struct token *newtok = __alloc_token(0);
+		*newtok = *list;
+		*p = newtok;
+		p = &newtok->next;
+		list = list->next;
+	}
+	return res;
+}
+
+static const char *show_token_sequence(struct token *token, int quote)
+{
+	static char buffer[MAX_STRING];
+	char *ptr = buffer;
+	int whitespace = 0;
+
+	if (!token && !quote)
+		return "<none>";
+	while (!eof_token(token)) {
+		const char *val = quote ? quote_token(token) : show_token(token);
+		int len = strlen(val);
+
+		if (ptr + whitespace + len >= buffer + sizeof(buffer)) {
+			sparse_error(token->pos, "too long token expansion");
+			break;
+		}
+
+		if (whitespace)
+			*ptr++ = ' ';
+		memcpy(ptr, val, len);
+		ptr += len;
+		token = token->next;
+		whitespace = token->pos.whitespace;
+	}
+	*ptr = 0;
+	return buffer;
+}
+
+static struct token *stringify(struct token *arg)
+{
+	const char *s = show_token_sequence(arg, 1);
+	int size = strlen(s)+1;
+	struct token *token = __alloc_token(0);
+	struct string *string = __alloc_string(size);
+
+	memcpy(string->data, s, size);
+	string->length = size;
+	token->pos = arg->pos;
+	token_type(token) = TOKEN_STRING;
+	token->string = string;
+	token->next = &eof_token_entry;
+	return token;
+}
+
+static void expand_arguments(int count, struct arg *args)
+{
+	int i;
+	for (i = 0; i < count; i++) {
+		struct token *arg = args[i].arg;
+		if (!arg)
+			arg = &eof_token_entry;
+		if (args[i].n_str)
+			args[i].str = stringify(arg);
+		if (args[i].n_normal) {
+			if (!args[i].n_quoted) {
+				args[i].expanded = arg;
+				args[i].arg = NULL;
+			} else if (eof_token(arg)) {
+				args[i].expanded = arg;
+			} else {
+				args[i].expanded = dup_list(arg);
+			}
+			expand_list(&args[i].expanded);
+		}
+	}
+}
+
+/*
+ * Possibly valid combinations:
+ *  - ident + ident -> ident
+ *  - ident + number -> ident unless number contains '.', '+' or '-'.
+ *  - 'L' + char constant -> wide char constant
+ *  - 'L' + string literal -> wide string literal
+ *  - number + number -> number
+ *  - number + ident -> number
+ *  - number + '.' -> number
+ *  - number + '+' or '-' -> number, if number used to end on [eEpP].
+ *  - '.' + number -> number, if number used to start with a digit.
+ *  - special + special -> either special or an error.
+ */
+static enum token_type combine(struct token *left, struct token *right, char *p)
+{
+	int len;
+	enum token_type t1 = token_type(left), t2 = token_type(right);
+
+	if (t1 != TOKEN_IDENT && t1 != TOKEN_NUMBER && t1 != TOKEN_SPECIAL)
+		return TOKEN_ERROR;
+
+	if (t1 == TOKEN_IDENT && left->ident == &L_ident) {
+		if (t2 >= TOKEN_CHAR && t2 < TOKEN_WIDE_CHAR)
+			return t2 + TOKEN_WIDE_CHAR - TOKEN_CHAR;
+		if (t2 == TOKEN_STRING)
+			return TOKEN_WIDE_STRING;
+	}
+
+	if (t2 != TOKEN_IDENT && t2 != TOKEN_NUMBER && t2 != TOKEN_SPECIAL)
+		return TOKEN_ERROR;
+
+	strcpy(p, show_token(left));
+	strcat(p, show_token(right));
+	len = strlen(p);
+
+	if (len >= 256)
+		return TOKEN_ERROR;
+
+	if (t1 == TOKEN_IDENT) {
+		if (t2 == TOKEN_SPECIAL)
+			return TOKEN_ERROR;
+		if (t2 == TOKEN_NUMBER && strpbrk(p, "+-."))
+			return TOKEN_ERROR;
+		return TOKEN_IDENT;
+	}
+
+	if (t1 == TOKEN_NUMBER) {
+		if (t2 == TOKEN_SPECIAL) {
+			switch (right->special) {
+			case '.':
+				break;
+			case '+': case '-':
+				if (strchr("eEpP", p[len - 2]))
+					break;
+			default:
+				return TOKEN_ERROR;
+			}
+		}
+		return TOKEN_NUMBER;
+	}
+
+	if (p[0] == '.' && isdigit((unsigned char)p[1]))
+		return TOKEN_NUMBER;
+
+	return TOKEN_SPECIAL;
+}
+
+static int merge(struct token *left, struct token *right)
+{
+	static char buffer[512];
+	enum token_type res = combine(left, right, buffer);
+	int n;
+
+	switch (res) {
+	case TOKEN_IDENT:
+		left->ident = built_in_ident(buffer);
+		left->pos.noexpand = 0;
+		return 1;
+
+	case TOKEN_NUMBER: {
+		char *number = __alloc_bytes(strlen(buffer) + 1);
+		memcpy(number, buffer, strlen(buffer) + 1);
+		token_type(left) = TOKEN_NUMBER;	/* could be . + num */
+		left->number = number;
+		return 1;
+	}
+
+	case TOKEN_SPECIAL:
+		if (buffer[2] && buffer[3])
+			break;
+		for (n = SPECIAL_BASE; n < SPECIAL_ARG_SEPARATOR; n++) {
+			if (!memcmp(buffer, combinations[n-SPECIAL_BASE], 3)) {
+				left->special = n;
+				return 1;
+			}
+		}
+		break;
+
+	case TOKEN_WIDE_CHAR:
+	case TOKEN_WIDE_STRING:
+		token_type(left) = res;
+		left->pos.noexpand = 0;
+		left->string = right->string;
+		return 1;
+
+	case TOKEN_WIDE_CHAR_EMBEDDED_0 ... TOKEN_WIDE_CHAR_EMBEDDED_3:
+		token_type(left) = res;
+		left->pos.noexpand = 0;
+		memcpy(left->embedded, right->embedded, 4);
+		return 1;
+
+	default:
+		;
+	}
+	sparse_error(left->pos, "'##' failed: concatenation is not a valid token");
+	return 0;
+}
+
+static struct token *dup_token(struct token *token, struct position *streampos)
+{
+	struct token *alloc = alloc_token(streampos);
+	token_type(alloc) = token_type(token);
+	alloc->pos.newline = token->pos.newline;
+	alloc->pos.whitespace = token->pos.whitespace;
+	alloc->number = token->number;
+	alloc->pos.noexpand = token->pos.noexpand;
+	return alloc;	
+}
+
+static struct token **copy(struct token **where, struct token *list, int *count)
+{
+	int need_copy = --*count;
+	while (!eof_token(list)) {
+		struct token *token;
+		if (need_copy)
+			token = dup_token(list, &list->pos);
+		else
+			token = list;
+		if (token_type(token) == TOKEN_IDENT && token->ident->tainted)
+			token->pos.noexpand = 1;
+		*where = token;
+		where = &token->next;
+		list = list->next;
+	}
+	*where = &eof_token_entry;
+	return where;
+}
+
+static int handle_kludge(struct token **p, struct arg *args)
+{
+	struct token *t = (*p)->next->next;
+	while (1) {
+		struct arg *v = &args[t->argnum];
+		if (token_type(t->next) != TOKEN_CONCAT) {
+			if (v->arg) {
+				/* ignore the first ## */
+				*p = (*p)->next;
+				return 0;
+			}
+			/* skip the entire thing */
+			*p = t;
+			return 1;
+		}
+		if (v->arg && !eof_token(v->arg))
+			return 0; /* no magic */
+		t = t->next->next;
+	}
+}
+
+static struct token **substitute(struct token **list, struct token *body, struct arg *args)
+{
+	struct position *base_pos = &(*list)->pos;
+	int *count;
+	enum {Normal, Placeholder, Concat} state = Normal;
+
+	for (; !eof_token(body); body = body->next) {
+		struct token *added, *arg;
+		struct token **tail;
+		struct token *t;
+
+		switch (token_type(body)) {
+		case TOKEN_GNU_KLUDGE:
+			/*
+			 * GNU kludge: if we had <comma>##<vararg>, behaviour
+			 * depends on whether we had enough arguments to have
+			 * a vararg.  If we did, ## is just ignored.  Otherwise
+			 * both , and ## are ignored.  Worse, there can be
+			 * an arbitrary number of ##<arg> in between; if all of
+			 * those are empty, we act as if they hadn't been there,
+			 * otherwise we act as if the kludge didn't exist.
+			 */
+			t = body;
+			if (handle_kludge(&body, args)) {
+				if (state == Concat)
+					state = Normal;
+				else
+					state = Placeholder;
+				continue;
+			}
+			added = dup_token(t, base_pos);
+			token_type(added) = TOKEN_SPECIAL;
+			tail = &added->next;
+			break;
+
+		case TOKEN_STR_ARGUMENT:
+			arg = args[body->argnum].str;
+			count = &args[body->argnum].n_str;
+			goto copy_arg;
+
+		case TOKEN_QUOTED_ARGUMENT:
+			arg = args[body->argnum].arg;
+			count = &args[body->argnum].n_quoted;
+			if (!arg || eof_token(arg)) {
+				if (state == Concat)
+					state = Normal;
+				else
+					state = Placeholder;
+				continue;
+			}
+			goto copy_arg;
+
+		case TOKEN_MACRO_ARGUMENT:
+			arg = args[body->argnum].expanded;
+			count = &args[body->argnum].n_normal;
+			if (eof_token(arg)) {
+				state = Normal;
+				continue;
+			}
+		copy_arg:
+			tail = copy(&added, arg, count);
+			added->pos.newline = body->pos.newline;
+			added->pos.whitespace = body->pos.whitespace;
+			break;
+
+		case TOKEN_CONCAT:
+			if (state == Placeholder)
+				state = Normal;
+			else
+				state = Concat;
+			continue;
+
+		case TOKEN_IDENT:
+			added = dup_token(body, base_pos);
+			if (added->ident->tainted)
+				added->pos.noexpand = 1;
+			tail = &added->next;
+			break;
+
+		default:
+			added = dup_token(body, base_pos);
+			tail = &added->next;
+			break;
+		}
+
+		/*
+		 * if we got to doing real concatenation, we already have
+		 * added something into the list, so containing_token() is OK.
+		 */
+		if (state == Concat && merge(containing_token(list), added)) {
+			*list = added->next;
+			if (tail != &added->next)
+				list = tail;
+		} else {
+			*list = added;
+			list = tail;
+		}
+		state = Normal;
+	}
+	*list = &eof_token_entry;
+	return list;
+}
+
+static int expand(struct token **list, struct symbol *sym)
+{
+	struct token *last;
+	struct token *token = *list;
+	struct ident *expanding = token->ident;
+	struct token **tail;
+	int nargs = sym->arglist ? sym->arglist->count.normal : 0;
+	struct arg args[nargs];
+
+	if (expanding->tainted) {
+		token->pos.noexpand = 1;
+		return 1;
+	}
+
+	if (sym->arglist) {
+		if (!match_op(scan_next(&token->next), '('))
+			return 1;
+		if (!collect_arguments(token->next, sym->arglist, args, token))
+			return 1;
+		expand_arguments(nargs, args);
+	}
+
+	expanding->tainted = 1;
+
+	last = token->next;
+	tail = substitute(list, sym->expansion, args);
+	/*
+	 * Note that it won't be eof - at least TOKEN_UNTAINT will be there.
+	 * We still can lose the newline flag if the sucker expands to nothing,
+	 * but the price of dealing with that is probably too high (we'd need
+	 * to collect the flags during scan_next())
+	 */
+	(*list)->pos.newline = token->pos.newline;
+	(*list)->pos.whitespace = token->pos.whitespace;
+	*tail = last;
+
+	return 0;
+}
+
+static const char *token_name_sequence(struct token *token, int endop, struct token *start)
+{
+	static char buffer[256];
+	char *ptr = buffer;
+
+	while (!eof_token(token) && !match_op(token, endop)) {
+		int len;
+		const char *val = token->string->data;
+		if (token_type(token) != TOKEN_STRING)
+			val = show_token(token);
+		len = strlen(val);
+		memcpy(ptr, val, len);
+		ptr += len;
+		token = token->next;
+	}
+	*ptr = 0;
+	if (endop && !match_op(token, endop))
+		sparse_error(start->pos, "expected '>' at end of filename");
+	return buffer;
+}
+
+static int already_tokenized(const char *path)
+{
+	int stream, next;
+
+	for (stream = *hash_stream(path); stream >= 0 ; stream = next) {
+		struct stream *s = input_streams + stream;
+
+		next = s->next_stream;
+		if (s->once) {
+			if (strcmp(path, s->name))
+				continue;
+			return 1;
+		}
+		if (s->constant != CONSTANT_FILE_YES)
+			continue;
+		if (strcmp(path, s->name))
+			continue;
+		if (s->protect && !lookup_macro(s->protect))
+			continue;
+		return 1;
+	}
+	return 0;
+}
+
+/* Handle include of header files.
+ * The relevant options are made compatible with gcc. The only options that
+ * are not supported is -withprefix and friends.
+ *
+ * Three set of include paths are known:
+ * quote_includepath:	Path to search when using #include "file.h"
+ * angle_includepath:	Paths to search when using #include <file.h>
+ * isys_includepath:	Paths specified with -isystem, come before the
+ *			built-in system include paths. Gcc would suppress
+ *			warnings from system headers. Here we separate
+ *			them from the angle_ ones to keep search ordering.
+ *
+ * sys_includepath:	Built-in include paths.
+ * dirafter_includepath Paths added with -dirafter.
+ *
+ * The above is implemented as one array with pointers
+ *                         +--------------+
+ * quote_includepath --->  |              |
+ *                         +--------------+
+ *                         |              |
+ *                         +--------------+
+ * angle_includepath --->  |              |
+ *                         +--------------+
+ * isys_includepath  --->  |              |
+ *                         +--------------+
+ * sys_includepath   --->  |              |
+ *                         +--------------+
+ * dirafter_includepath -> |              |
+ *                         +--------------+
+ *
+ * -I dir insert dir just before isys_includepath and move the rest
+ * -I- makes all dirs specified with -I before to quote dirs only and
+ *   angle_includepath is set equal to isys_includepath.
+ * -nostdinc removes all sys dirs by storing NULL in entry pointed
+ *   to by * sys_includepath. Note that this will reset all dirs built-in
+ *   and added before -nostdinc by -isystem and -idirafter.
+ * -isystem dir adds dir where isys_includepath points adding this dir as
+ *   first systemdir
+ * -idirafter dir adds dir to the end of the list
+ */
+
+static void set_stream_include_path(struct stream *stream)
+{
+	const char *path = stream->path;
+	if (!path) {
+		const char *p = strrchr(stream->name, '/');
+		path = "";
+		if (p) {
+			int len = p - stream->name + 1;
+			char *m = malloc(len+1);
+			/* This includes the final "/" */
+			memcpy(m, stream->name, len);
+			m[len] = 0;
+			path = m;
+		}
+		stream->path = path;
+	}
+	includepath[0] = path;
+}
+
+static int try_include(const char *path, const char *filename, int flen, struct token **where, const char **next_path)
+{
+	int fd;
+	int plen = strlen(path);
+	static char fullname[PATH_MAX];
+
+	memcpy(fullname, path, plen);
+	if (plen && path[plen-1] != '/') {
+		fullname[plen] = '/';
+		plen++;
+	}
+	memcpy(fullname+plen, filename, flen);
+	if (already_tokenized(fullname))
+		return 1;
+	fd = open(fullname, O_RDONLY);
+	if (fd >= 0) {
+		char * streamname = __alloc_bytes(plen + flen);
+		memcpy(streamname, fullname, plen + flen);
+		*where = tokenize(streamname, fd, *where, next_path);
+		close(fd);
+		return 1;
+	}
+	return 0;
+}
+
+static int do_include_path(const char **pptr, struct token **list, struct token *token, const char *filename, int flen)
+{
+	const char *path;
+
+	while ((path = *pptr++) != NULL) {
+		if (!try_include(path, filename, flen, list, pptr))
+			continue;
+		return 1;
+	}
+	return 0;
+}
+
+static int free_preprocessor_line(struct token *token)
+{
+	while (token_type(token) != TOKEN_EOF) {
+		struct token *free = token;
+		token = token->next;
+		__free_token(free);
+	};
+	return 1;
+}
+
+const char *find_include(const char *skip, const char *look_for)
+{
+	DIR *dp;
+	struct dirent *entry;
+	struct stat statbuf;
+	const char *ret;
+	char cwd[PATH_MAX];
+	static char buf[PATH_MAX + 1];
+
+	dp = opendir(".");
+	if (!dp)
+		return NULL;
+
+	if (!getcwd(cwd, sizeof(cwd)))
+		return NULL;
+
+	while ((entry = readdir(dp))) {
+		lstat(entry->d_name, &statbuf);
+
+		if (strcmp(entry->d_name, look_for) == 0) {
+			snprintf(buf, sizeof(buf), "%s/%s", cwd, entry->d_name);
+			return buf;
+		}
+
+		if (S_ISDIR(statbuf.st_mode)) {
+			/* Found a directory, but ignore . and .. */
+			if (strcmp(".", entry->d_name) == 0 ||
+			    strcmp("..", entry->d_name) == 0 ||
+			    strcmp(skip, entry->d_name) == 0)
+				continue;
+
+			chdir(entry->d_name);
+			ret = find_include("", look_for);
+			chdir("..");
+			if (ret)
+				return ret;
+		}
+	}
+	closedir(dp);
+
+	return NULL;
+}
+
+const char *search_dir(const char *stop, const char *look_for)
+{
+	char cwd[PATH_MAX];
+	int len;
+	const char *ret;
+	int cnt = 0;
+
+	if (!getcwd(cwd, sizeof(cwd)))
+		return NULL;
+
+	len = strlen(cwd);
+	while (len >= 0) {
+		ret = find_include(cnt++ ? cwd + len + 1 : "", look_for);
+		if (ret)
+			return ret;
+
+		if (strcmp(cwd, stop) == 0 ||
+		    strcmp(cwd, "/usr/include") == 0 ||
+		    strcmp(cwd, "/usr/local/include") == 0 ||
+		    strlen(cwd) <= 10 ||  /* heck...  don't search /usr/lib/ */
+		    strcmp(cwd, "/") == 0)
+			return NULL;
+
+		while (--len >= 0) {
+			if (cwd[len] == '/') {
+				cwd[len] = '\0';
+				break;
+			}
+		}
+
+		chdir("..");
+	}
+	return NULL;
+}
+
+static void use_best_guess_header_file(struct token *token, const char *filename, struct token **list)
+{
+	char cwd[PATH_MAX];
+	char dir_part[PATH_MAX];
+	const char *file_part;
+	const char *include_name;
+	int len;
+
+	if (!filename || filename[0] == '\0')
+		return;
+
+	file_part = filename;
+	while ((filename = strchr(filename, '/'))) {
+		++filename;
+		if (filename[0])
+			file_part = filename;
+	}
+
+	snprintf(dir_part, sizeof(dir_part), "%s", stream_name(token->pos.stream));
+	len = strlen(dir_part);
+	while (--len >= 0) {
+		if (dir_part[len] == '/') {
+			dir_part[len] = '\0';
+			break;
+		}
+	}
+	if (len < 0)
+		sprintf(dir_part, ".");
+
+	if (!getcwd(cwd, sizeof(cwd)))
+		return;
+
+	chdir(dir_part);
+	include_name = search_dir(cwd, file_part);
+	chdir(cwd);
+	if (!include_name)
+		return;
+	sparse_error(token->pos, "using '%s'", include_name);
+
+	try_include("", include_name, strlen(include_name), list, includepath);
+}
+
+static int handle_include_path(struct stream *stream, struct token **list, struct token *token, int how)
+{
+	const char *filename;
+	struct token *next;
+	const char **path;
+	int expect;
+	int flen;
+
+	next = token->next;
+	expect = '>';
+	if (!match_op(next, '<')) {
+		expand_list(&token->next);
+		expect = 0;
+		next = token;
+		if (match_op(token->next, '<')) {
+			next = token->next;
+			expect = '>';
+		}
+	}
+
+	token = next->next;
+	filename = token_name_sequence(token, expect, token);
+	flen = strlen(filename) + 1;
+
+	/* Absolute path? */
+	if (filename[0] == '/') {
+		if (try_include("", filename, flen, list, includepath))
+			return 0;
+		goto out;
+	}
+
+	switch (how) {
+	case 1:
+		path = stream->next_path;
+		break;
+	case 2:
+		includepath[0] = "";
+		path = includepath;
+		break;
+	default:
+		/* Dir of input file is first dir to search for quoted includes */
+		set_stream_include_path(stream);
+		path = expect ? angle_includepath : quote_includepath;
+		break;
+	}
+	/* Check the standard include paths.. */
+	if (do_include_path(path, list, token, filename, flen))
+		return 0;
+out:
+	sparse_error(token->pos, "unable to open '%s'", filename);
+	use_best_guess_header_file(token, filename, list);
+	return 0;
+}
+
+static int handle_include(struct stream *stream, struct token **list, struct token *token)
+{
+	return handle_include_path(stream, list, token, 0);
+}
+
+static int handle_include_next(struct stream *stream, struct token **list, struct token *token)
+{
+	return handle_include_path(stream, list, token, 1);
+}
+
+static int handle_argv_include(struct stream *stream, struct token **list, struct token *token)
+{
+	return handle_include_path(stream, list, token, 2);
+}
+
+static int token_different(struct token *t1, struct token *t2)
+{
+	int different;
+
+	if (token_type(t1) != token_type(t2))
+		return 1;
+
+	switch (token_type(t1)) {
+	case TOKEN_IDENT:
+		different = t1->ident != t2->ident;
+		break;
+	case TOKEN_ARG_COUNT:
+	case TOKEN_UNTAINT:
+	case TOKEN_CONCAT:
+	case TOKEN_GNU_KLUDGE:
+		different = 0;
+		break;
+	case TOKEN_NUMBER:
+		different = strcmp(t1->number, t2->number);
+		break;
+	case TOKEN_SPECIAL:
+		different = t1->special != t2->special;
+		break;
+	case TOKEN_MACRO_ARGUMENT:
+	case TOKEN_QUOTED_ARGUMENT:
+	case TOKEN_STR_ARGUMENT:
+		different = t1->argnum != t2->argnum;
+		break;
+	case TOKEN_CHAR_EMBEDDED_0 ... TOKEN_CHAR_EMBEDDED_3:
+	case TOKEN_WIDE_CHAR_EMBEDDED_0 ... TOKEN_WIDE_CHAR_EMBEDDED_3:
+		different = memcmp(t1->embedded, t2->embedded, 4);
+		break;
+	case TOKEN_CHAR:
+	case TOKEN_WIDE_CHAR:
+	case TOKEN_STRING:
+	case TOKEN_WIDE_STRING: {
+		struct string *s1, *s2;
+
+		s1 = t1->string;
+		s2 = t2->string;
+		different = 1;
+		if (s1->length != s2->length)
+			break;
+		different = memcmp(s1->data, s2->data, s1->length);
+		break;
+	}
+	default:
+		different = 1;
+		break;
+	}
+	return different;
+}
+
+static int token_list_different(struct token *list1, struct token *list2)
+{
+	for (;;) {
+		if (list1 == list2)
+			return 0;
+		if (!list1 || !list2)
+			return 1;
+		if (token_different(list1, list2))
+			return 1;
+		list1 = list1->next;
+		list2 = list2->next;
+	}
+}
+
+static inline void set_arg_count(struct token *token)
+{
+	token_type(token) = TOKEN_ARG_COUNT;
+	token->count.normal = token->count.quoted =
+	token->count.str = token->count.vararg = 0;
+}
+
+static struct token *parse_arguments(struct token *list)
+{
+	struct token *arg = list->next, *next = list;
+	struct argcount *count = &list->count;
+
+	set_arg_count(list);
+
+	if (match_op(arg, ')')) {
+		next = arg->next;
+		list->next = &eof_token_entry;
+		return next;
+	}
+
+	while (token_type(arg) == TOKEN_IDENT) {
+		if (arg->ident == &__VA_ARGS___ident)
+			goto Eva_args;
+		if (!++count->normal)
+			goto Eargs;
+		next = arg->next;
+
+		if (match_op(next, ',')) {
+			set_arg_count(next);
+			arg = next->next;
+			continue;
+		}
+
+		if (match_op(next, ')')) {
+			set_arg_count(next);
+			next = next->next;
+			arg->next->next = &eof_token_entry;
+			return next;
+		}
+
+		/* normal cases are finished here */
+
+		if (match_op(next, SPECIAL_ELLIPSIS)) {
+			if (match_op(next->next, ')')) {
+				set_arg_count(next);
+				next->count.vararg = 1;
+				next = next->next;
+				arg->next->next = &eof_token_entry;
+				return next->next;
+			}
+
+			arg = next;
+			goto Enotclosed;
+		}
+
+		if (eof_token(next)) {
+			goto Enotclosed;
+		} else {
+			arg = next;
+			goto Ebadstuff;
+		}
+	}
+
+	if (match_op(arg, SPECIAL_ELLIPSIS)) {
+		next = arg->next;
+		token_type(arg) = TOKEN_IDENT;
+		arg->ident = &__VA_ARGS___ident;
+		if (!match_op(next, ')'))
+			goto Enotclosed;
+		if (!++count->normal)
+			goto Eargs;
+		set_arg_count(next);
+		next->count.vararg = 1;
+		next = next->next;
+		arg->next->next = &eof_token_entry;
+		return next;
+	}
+
+	if (eof_token(arg)) {
+		arg = next;
+		goto Enotclosed;
+	}
+	if (match_op(arg, ','))
+		goto Emissing;
+	else
+		goto Ebadstuff;
+
+
+Emissing:
+	sparse_error(arg->pos, "parameter name missing");
+	return NULL;
+Ebadstuff:
+	sparse_error(arg->pos, "\"%s\" may not appear in macro parameter list",
+		show_token(arg));
+	return NULL;
+Enotclosed:
+	sparse_error(arg->pos, "missing ')' in macro parameter list");
+	return NULL;
+Eva_args:
+	sparse_error(arg->pos, "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro");
+	return NULL;
+Eargs:
+	sparse_error(arg->pos, "too many arguments in macro definition");
+	return NULL;
+}
+
+static int try_arg(struct token *token, enum token_type type, struct token *arglist)
+{
+	struct ident *ident = token->ident;
+	int nr;
+
+	if (!arglist || token_type(token) != TOKEN_IDENT)
+		return 0;
+
+	arglist = arglist->next;
+
+	for (nr = 0; !eof_token(arglist); nr++, arglist = arglist->next->next) {
+		if (arglist->ident == ident) {
+			struct argcount *count = &arglist->next->count;
+			int n;
+
+			token->argnum = nr;
+			token_type(token) = type;
+			switch (type) {
+			case TOKEN_MACRO_ARGUMENT:
+				n = ++count->normal;
+				break;
+			case TOKEN_QUOTED_ARGUMENT:
+				n = ++count->quoted;
+				break;
+			default:
+				n = ++count->str;
+			}
+			if (n)
+				return count->vararg ? 2 : 1;
+			/*
+			 * XXX - need saner handling of that
+			 * (>= 1024 instances of argument)
+			 */
+			token_type(token) = TOKEN_ERROR;
+			return -1;
+		}
+	}
+	return 0;
+}
+
+static struct token *handle_hash(struct token **p, struct token *arglist)
+{
+	struct token *token = *p;
+	if (arglist) {
+		struct token *next = token->next;
+		if (!try_arg(next, TOKEN_STR_ARGUMENT, arglist))
+			goto Equote;
+		next->pos.whitespace = token->pos.whitespace;
+		__free_token(token);
+		token = *p = next;
+	} else {
+		token->pos.noexpand = 1;
+	}
+	return token;
+
+Equote:
+	sparse_error(token->pos, "'#' is not followed by a macro parameter");
+	return NULL;
+}
+
+/* token->next is ## */
+static struct token *handle_hashhash(struct token *token, struct token *arglist)
+{
+	struct token *last = token;
+	struct token *concat;
+	int state = match_op(token, ',');
+	
+	try_arg(token, TOKEN_QUOTED_ARGUMENT, arglist);
+
+	while (1) {
+		struct token *t;
+		int is_arg;
+
+		/* eat duplicate ## */
+		concat = token->next;
+		while (match_op(t = concat->next, SPECIAL_HASHHASH)) {
+			token->next = t;
+			__free_token(concat);
+			concat = t;
+		}
+		token_type(concat) = TOKEN_CONCAT;
+
+		if (eof_token(t))
+			goto Econcat;
+
+		if (match_op(t, '#')) {
+			t = handle_hash(&concat->next, arglist);
+			if (!t)
+				return NULL;
+		}
+
+		is_arg = try_arg(t, TOKEN_QUOTED_ARGUMENT, arglist);
+
+		if (state == 1 && is_arg) {
+			state = is_arg;
+		} else {
+			last = t;
+			state = match_op(t, ',');
+		}
+
+		token = t;
+		if (!match_op(token->next, SPECIAL_HASHHASH))
+			break;
+	}
+	/* handle GNU ,##__VA_ARGS__ kludge, in all its weirdness */
+	if (state == 2)
+		token_type(last) = TOKEN_GNU_KLUDGE;
+	return token;
+
+Econcat:
+	sparse_error(concat->pos, "'##' cannot appear at the ends of macro expansion");
+	return NULL;
+}
+
+static struct token *parse_expansion(struct token *expansion, struct token *arglist, struct ident *name)
+{
+	struct token *token = expansion;
+	struct token **p;
+
+	if (match_op(token, SPECIAL_HASHHASH))
+		goto Econcat;
+
+	for (p = &expansion; !eof_token(token); p = &token->next, token = *p) {
+		if (match_op(token, '#')) {
+			token = handle_hash(p, arglist);
+			if (!token)
+				return NULL;
+		}
+		if (match_op(token->next, SPECIAL_HASHHASH)) {
+			token = handle_hashhash(token, arglist);
+			if (!token)
+				return NULL;
+		} else {
+			try_arg(token, TOKEN_MACRO_ARGUMENT, arglist);
+		}
+		switch (token_type(token)) {
+		case TOKEN_ERROR:
+			goto Earg;
+
+		case TOKEN_STRING:
+		case TOKEN_WIDE_STRING:
+			token->string->immutable = 1;
+			break;
+		}
+	}
+	token = alloc_token(&expansion->pos);
+	token_type(token) = TOKEN_UNTAINT;
+	token->ident = name;
+	token->next = *p;
+	*p = token;
+	return expansion;
+
+Econcat:
+	sparse_error(token->pos, "'##' cannot appear at the ends of macro expansion");
+	return NULL;
+Earg:
+	sparse_error(token->pos, "too many instances of argument in body");
+	return NULL;
+}
+
+static int do_handle_define(struct stream *stream, struct token **line, struct token *token, int attr)
+{
+	struct token *arglist, *expansion;
+	struct token *left = token->next;
+	struct symbol *sym;
+	struct ident *name;
+	int ret;
+
+	if (token_type(left) != TOKEN_IDENT) {
+		sparse_error(token->pos, "expected identifier to 'define'");
+		return 1;
+	}
+
+	name = left->ident;
+
+	arglist = NULL;
+	expansion = left->next;
+	if (!expansion->pos.whitespace) {
+		if (match_op(expansion, '(')) {
+			arglist = expansion;
+			expansion = parse_arguments(expansion);
+			if (!expansion)
+				return 1;
+		} else if (!eof_token(expansion)) {
+			warning(expansion->pos,
+				"no whitespace before object-like macro body");
+		}
+	}
+
+	expansion = parse_expansion(expansion, arglist, name);
+	if (!expansion)
+		return 1;
+
+	ret = 1;
+	sym = lookup_symbol(name, NS_MACRO | NS_UNDEF);
+	if (sym) {
+		int clean;
+
+		if (attr < sym->attr)
+			goto out;
+
+		clean = (attr == sym->attr && sym->namespace == NS_MACRO);
+
+		if (token_list_different(sym->expansion, expansion) ||
+		    token_list_different(sym->arglist, arglist)) {
+			ret = 0;
+			if ((clean && attr == SYM_ATTR_NORMAL)
+					|| sym->used_in == file_scope) {
+				warning(left->pos, "preprocessor token %.*s redefined",
+						name->len, name->name);
+				info(sym->pos, "this was the original definition");
+			}
+		} else if (clean)
+			goto out;
+	}
+
+	if (!sym || sym->scope != file_scope) {
+		sym = alloc_symbol(left->pos, SYM_NODE);
+		bind_symbol(sym, name, NS_MACRO);
+		add_ident(&macros, name);
+		ret = 0;
+	}
+
+	if (!ret) {
+		sym->expansion = expansion;
+		sym->arglist = arglist;
+		__free_token(token);	/* Free the "define" token, but not the rest of the line */
+	}
+
+	sym->namespace = NS_MACRO;
+	sym->used_in = NULL;
+	sym->attr = attr;
+out:
+	return ret;
+}
+
+static int handle_define(struct stream *stream, struct token **line, struct token *token)
+{
+	return do_handle_define(stream, line, token, SYM_ATTR_NORMAL);
+}
+
+static int handle_weak_define(struct stream *stream, struct token **line, struct token *token)
+{
+	return do_handle_define(stream, line, token, SYM_ATTR_WEAK);
+}
+
+static int handle_strong_define(struct stream *stream, struct token **line, struct token *token)
+{
+	return do_handle_define(stream, line, token, SYM_ATTR_STRONG);
+}
+
+static int do_handle_undef(struct stream *stream, struct token **line, struct token *token, int attr)
+{
+	struct token *left = token->next;
+	struct symbol *sym;
+
+	if (token_type(left) != TOKEN_IDENT) {
+		sparse_error(token->pos, "expected identifier to 'undef'");
+		return 1;
+	}
+
+	sym = lookup_symbol(left->ident, NS_MACRO | NS_UNDEF);
+	if (sym) {
+		if (attr < sym->attr)
+			return 1;
+		if (attr == sym->attr && sym->namespace == NS_UNDEF)
+			return 1;
+	} else if (attr <= SYM_ATTR_NORMAL)
+		return 1;
+
+	if (!sym || sym->scope != file_scope) {
+		sym = alloc_symbol(left->pos, SYM_NODE);
+		bind_symbol(sym, left->ident, NS_MACRO);
+	}
+
+	sym->namespace = NS_UNDEF;
+	sym->used_in = NULL;
+	sym->attr = attr;
+
+	return 1;
+}
+
+static int handle_undef(struct stream *stream, struct token **line, struct token *token)
+{
+	return do_handle_undef(stream, line, token, SYM_ATTR_NORMAL);
+}
+
+static int handle_strong_undef(struct stream *stream, struct token **line, struct token *token)
+{
+	return do_handle_undef(stream, line, token, SYM_ATTR_STRONG);
+}
+
+static int preprocessor_if(struct stream *stream, struct token *token, int true)
+{
+	token_type(token) = false_nesting ? TOKEN_SKIP_GROUPS : TOKEN_IF;
+	free_preprocessor_line(token->next);
+	token->next = stream->top_if;
+	stream->top_if = token;
+	if (false_nesting || true != 1)
+		false_nesting++;
+	return 0;
+}
+
+static int handle_ifdef(struct stream *stream, struct token **line, struct token *token)
+{
+	struct token *next = token->next;
+	int arg;
+	if (token_type(next) == TOKEN_IDENT) {
+		arg = token_defined(next);
+	} else {
+		dirty_stream(stream);
+		if (!false_nesting)
+			sparse_error(token->pos, "expected preprocessor identifier");
+		arg = -1;
+	}
+	return preprocessor_if(stream, token, arg);
+}
+
+static int handle_ifndef(struct stream *stream, struct token **line, struct token *token)
+{
+	struct token *next = token->next;
+	int arg;
+	if (token_type(next) == TOKEN_IDENT) {
+		if (!stream->dirty && !stream->ifndef) {
+			if (!stream->protect) {
+				stream->ifndef = token;
+				stream->protect = next->ident;
+			} else if (stream->protect == next->ident) {
+				stream->ifndef = token;
+				stream->dirty = 1;
+			}
+		}
+		arg = !token_defined(next);
+	} else {
+		dirty_stream(stream);
+		if (!false_nesting)
+			sparse_error(token->pos, "expected preprocessor identifier");
+		arg = -1;
+	}
+
+	return preprocessor_if(stream, token, arg);
+}
+
+static const char *show_token_sequence(struct token *token, int quote);
+
+/*
+ * Expression handling for #if and #elif; it differs from normal expansion
+ * due to special treatment of "defined".
+ */
+static int expression_value(struct token **where)
+{
+	struct expression *expr;
+	struct token *p;
+	struct token **list = where, **beginning = NULL;
+	long long value;
+	int state = 0;
+
+	while (!eof_token(p = scan_next(list))) {
+		switch (state) {
+		case 0:
+			if (token_type(p) != TOKEN_IDENT)
+				break;
+			if (p->ident == &defined_ident) {
+				state = 1;
+				beginning = list;
+				break;
+			}
+			if (!expand_one_symbol(list))
+				continue;
+			if (token_type(p) != TOKEN_IDENT)
+				break;
+			token_type(p) = TOKEN_ZERO_IDENT;
+			break;
+		case 1:
+			if (match_op(p, '(')) {
+				state = 2;
+			} else {
+				state = 0;
+				replace_with_defined(p);
+				*beginning = p;
+			}
+			break;
+		case 2:
+			if (token_type(p) == TOKEN_IDENT)
+				state = 3;
+			else
+				state = 0;
+			replace_with_defined(p);
+			*beginning = p;
+			break;
+		case 3:
+			state = 0;
+			if (!match_op(p, ')'))
+				sparse_error(p->pos, "missing ')' after \"defined\"");
+			*list = p->next;
+			continue;
+		}
+		list = &p->next;
+	}
+
+	p = constant_expression(*where, &expr);
+	if (!eof_token(p))
+		sparse_error(p->pos, "garbage at end: %s", show_token_sequence(p, 0));
+	value = get_expression_value(expr);
+	return value != 0;
+}
+
+static int handle_if(struct stream *stream, struct token **line, struct token *token)
+{
+	int value = 0;
+	if (!false_nesting)
+		value = expression_value(&token->next);
+
+	dirty_stream(stream);
+	return preprocessor_if(stream, token, value);
+}
+
+static int handle_elif(struct stream * stream, struct token **line, struct token *token)
+{
+	struct token *top_if = stream->top_if;
+	end_group(stream);
+
+	if (!top_if) {
+		nesting_error(stream);
+		sparse_error(token->pos, "unmatched #elif within stream");
+		return 1;
+	}
+
+	if (token_type(top_if) == TOKEN_ELSE) {
+		nesting_error(stream);
+		sparse_error(token->pos, "#elif after #else");
+		if (!false_nesting)
+			false_nesting = 1;
+		return 1;
+	}
+
+	dirty_stream(stream);
+	if (token_type(top_if) != TOKEN_IF)
+		return 1;
+	if (false_nesting) {
+		false_nesting = 0;
+		if (!expression_value(&token->next))
+			false_nesting = 1;
+	} else {
+		false_nesting = 1;
+		token_type(top_if) = TOKEN_SKIP_GROUPS;
+	}
+	return 1;
+}
+
+static int handle_else(struct stream *stream, struct token **line, struct token *token)
+{
+	struct token *top_if = stream->top_if;
+	end_group(stream);
+
+	if (!top_if) {
+		nesting_error(stream);
+		sparse_error(token->pos, "unmatched #else within stream");
+		return 1;
+	}
+
+	if (token_type(top_if) == TOKEN_ELSE) {
+		nesting_error(stream);
+		sparse_error(token->pos, "#else after #else");
+	}
+	if (false_nesting) {
+		if (token_type(top_if) == TOKEN_IF)
+			false_nesting = 0;
+	} else {
+		false_nesting = 1;
+	}
+	token_type(top_if) = TOKEN_ELSE;
+	return 1;
+}
+
+static int handle_endif(struct stream *stream, struct token **line, struct token *token)
+{
+	struct token *top_if = stream->top_if;
+	end_group(stream);
+	if (!top_if) {
+		nesting_error(stream);
+		sparse_error(token->pos, "unmatched #endif in stream");
+		return 1;
+	}
+	if (false_nesting)
+		false_nesting--;
+	stream->top_if = top_if->next;
+	__free_token(top_if);
+	return 1;
+}
+
+static int handle_warning(struct stream *stream, struct token **line, struct token *token)
+{
+	warning(token->pos, "%s", show_token_sequence(token->next, 0));
+	return 1;
+}
+
+static int handle_error(struct stream *stream, struct token **line, struct token *token)
+{
+	sparse_error(token->pos, "%s", show_token_sequence(token->next, 0));
+	return 1;
+}
+
+static int handle_nostdinc(struct stream *stream, struct token **line, struct token *token)
+{
+	/*
+	 * Do we have any non-system includes?
+	 * Clear them out if so..
+	 */
+	*sys_includepath = NULL;
+	return 1;
+}
+
+static inline void update_inc_ptrs(const char ***where)
+{
+
+	if (*where <= dirafter_includepath) {
+		dirafter_includepath++;
+		/* If this was the entry that we prepend, don't
+		 * rise the lower entries, even if they are at
+		 * the same level. */
+		if (where == &dirafter_includepath)
+			return;
+	}
+	if (*where <= sys_includepath) {
+		sys_includepath++;
+		if (where == &sys_includepath)
+			return;
+	}
+	if (*where <= isys_includepath) {
+		isys_includepath++;
+		if (where == &isys_includepath)
+			return;
+	}
+
+	/* angle_includepath is actually never updated, since we
+	 * don't suppport -iquote rught now. May change some day. */
+	if (*where <= angle_includepath) {
+		angle_includepath++;
+		if (where == &angle_includepath)
+			return;
+	}
+}
+
+/* Add a path before 'where' and update the pointers associated with the
+ * includepath array */
+static void add_path_entry(struct token *token, const char *path,
+	const char ***where)
+{
+	const char **dst;
+	const char *next;
+
+	/* Need one free entry.. */
+	if (includepath[INCLUDEPATHS-2])
+		error_die(token->pos, "too many include path entries");
+
+	/* check that this is not a duplicate */
+	dst = includepath;
+	while (*dst) {
+		if (strcmp(*dst, path) == 0)
+			return;
+		dst++;
+	}
+	next = path;
+	dst = *where;
+
+	update_inc_ptrs(where);
+
+	/*
+	 * Move them all up starting at dst,
+	 * insert the new entry..
+	 */
+	do {
+		const char *tmp = *dst;
+		*dst = next;
+		next = tmp;
+		dst++;
+	} while (next);
+}
+
+static int handle_add_include(struct stream *stream, struct token **line, struct token *token)
+{
+	for (;;) {
+		token = token->next;
+		if (eof_token(token))
+			return 1;
+		if (token_type(token) != TOKEN_STRING) {
+			warning(token->pos, "expected path string");
+			return 1;
+		}
+		add_path_entry(token, token->string->data, &isys_includepath);
+	}
+}
+
+static int handle_add_isystem(struct stream *stream, struct token **line, struct token *token)
+{
+	for (;;) {
+		token = token->next;
+		if (eof_token(token))
+			return 1;
+		if (token_type(token) != TOKEN_STRING) {
+			sparse_error(token->pos, "expected path string");
+			return 1;
+		}
+		add_path_entry(token, token->string->data, &sys_includepath);
+	}
+}
+
+static int handle_add_system(struct stream *stream, struct token **line, struct token *token)
+{
+	for (;;) {
+		token = token->next;
+		if (eof_token(token))
+			return 1;
+		if (token_type(token) != TOKEN_STRING) {
+			sparse_error(token->pos, "expected path string");
+			return 1;
+		}
+		add_path_entry(token, token->string->data, &dirafter_includepath);
+	}
+}
+
+/* Add to end on includepath list - no pointer updates */
+static void add_dirafter_entry(struct token *token, const char *path)
+{
+	const char **dst = includepath;
+
+	/* Need one free entry.. */
+	if (includepath[INCLUDEPATHS-2])
+		error_die(token->pos, "too many include path entries");
+
+	/* Add to the end */
+	while (*dst)
+		dst++;
+	*dst = path;
+	dst++;
+	*dst = NULL;
+}
+
+static int handle_add_dirafter(struct stream *stream, struct token **line, struct token *token)
+{
+	for (;;) {
+		token = token->next;
+		if (eof_token(token))
+			return 1;
+		if (token_type(token) != TOKEN_STRING) {
+			sparse_error(token->pos, "expected path string");
+			return 1;
+		}
+		add_dirafter_entry(token, token->string->data);
+	}
+}
+
+static int handle_split_include(struct stream *stream, struct token **line, struct token *token)
+{
+	/*
+	 * -I-
+	 *  From info gcc:
+	 *  Split the include path.  Any directories specified with `-I'
+	 *  options before `-I-' are searched only for headers requested with
+	 *  `#include "FILE"'; they are not searched for `#include <FILE>'.
+	 *  If additional directories are specified with `-I' options after
+	 *  the `-I-', those directories are searched for all `#include'
+	 *  directives.
+	 *  In addition, `-I-' inhibits the use of the directory of the current
+	 *  file directory as the first search directory for `#include "FILE"'.
+	 */
+	quote_includepath = includepath+1;
+	angle_includepath = sys_includepath;
+	return 1;
+}
+
+/*
+ * We replace "#pragma xxx" with "__pragma__" in the token
+ * stream. Just as an example.
+ *
+ * We'll just #define that away for now, but the theory here
+ * is that we can use this to insert arbitrary token sequences
+ * to turn the pragmas into internal front-end sequences for
+ * when we actually start caring about them.
+ *
+ * So eventually this will turn into some kind of extended
+ * __attribute__() like thing, except called __pragma__(xxx).
+ */
+static int handle_pragma(struct stream *stream, struct token **line, struct token *token)
+{
+	struct token *next = *line;
+
+	if (match_ident(token->next, &once_ident) && eof_token(token->next->next)) {
+		stream->once = 1;
+		return 1;
+	}
+	token->ident = &pragma_ident;
+	token->pos.newline = 1;
+	token->pos.whitespace = 1;
+	token->pos.pos = 1;
+	*line = token;
+	token->next = next;
+	return 0;
+}
+
+/*
+ * We ignore #line for now.
+ */
+static int handle_line(struct stream *stream, struct token **line, struct token *token)
+{
+	return 1;
+}
+
+/*
+ * Ignore "#ident".
+ */
+static int handle_ident(struct stream *stream, struct token **line, struct token *token)
+{
+	return 1;
+}
+
+static int handle_nondirective(struct stream *stream, struct token **line, struct token *token)
+{
+	sparse_error(token->pos, "unrecognized preprocessor line '%s'", show_token_sequence(token, 0));
+	return 1;
+}
+
+
+static void init_preprocessor(void)
+{
+	int i;
+	int stream = init_stream("preprocessor", -1, includepath);
+	static struct {
+		const char *name;
+		int (*handler)(struct stream *, struct token **, struct token *);
+	} normal[] = {
+		{ "define",		handle_define },
+		{ "weak_define",	handle_weak_define },
+		{ "strong_define",	handle_strong_define },
+		{ "undef",		handle_undef },
+		{ "strong_undef",	handle_strong_undef },
+		{ "warning",		handle_warning },
+		{ "error",		handle_error },
+		{ "include",		handle_include },
+		{ "include_next",	handle_include_next },
+		{ "pragma",		handle_pragma },
+		{ "line",		handle_line },
+		{ "ident",		handle_ident },
+
+		// our internal preprocessor tokens
+		{ "nostdinc",	   handle_nostdinc },
+		{ "add_include",   handle_add_include },
+		{ "add_isystem",   handle_add_isystem },
+		{ "add_system",    handle_add_system },
+		{ "add_dirafter",  handle_add_dirafter },
+		{ "split_include", handle_split_include },
+		{ "argv_include",  handle_argv_include },
+	}, special[] = {
+		{ "ifdef",	handle_ifdef },
+		{ "ifndef",	handle_ifndef },
+		{ "else",	handle_else },
+		{ "endif",	handle_endif },
+		{ "if",		handle_if },
+		{ "elif",	handle_elif },
+	};
+
+	for (i = 0; i < ARRAY_SIZE(normal); i++) {
+		struct symbol *sym;
+		sym = create_symbol(stream, normal[i].name, SYM_PREPROCESSOR, NS_PREPROCESSOR);
+		sym->handler = normal[i].handler;
+		sym->normal = 1;
+	}
+	for (i = 0; i < ARRAY_SIZE(special); i++) {
+		struct symbol *sym;
+		sym = create_symbol(stream, special[i].name, SYM_PREPROCESSOR, NS_PREPROCESSOR);
+		sym->handler = special[i].handler;
+		sym->normal = 0;
+	}
+
+	counter_macro = 0;
+}
+
+static void handle_preprocessor_line(struct stream *stream, struct token **line, struct token *start)
+{
+	int (*handler)(struct stream *, struct token **, struct token *);
+	struct token *token = start->next;
+	int is_normal = 1;
+
+	if (eof_token(token))
+		return;
+
+	if (token_type(token) == TOKEN_IDENT) {
+		struct symbol *sym = lookup_symbol(token->ident, NS_PREPROCESSOR);
+		if (sym) {
+			handler = sym->handler;
+			is_normal = sym->normal;
+		} else {
+			handler = handle_nondirective;
+		}
+	} else if (token_type(token) == TOKEN_NUMBER) {
+		handler = handle_line;
+	} else {
+		handler = handle_nondirective;
+	}
+
+	if (is_normal) {
+		dirty_stream(stream);
+		if (false_nesting)
+			goto out;
+	}
+	if (!handler(stream, line, token))	/* all set */
+		return;
+
+out:
+	free_preprocessor_line(token);
+}
+
+static void preprocessor_line(struct stream *stream, struct token **line)
+{
+	struct token *start = *line, *next;
+	struct token **tp = &start->next;
+
+	for (;;) {
+		next = *tp;
+		if (next->pos.newline)
+			break;
+		tp = &next->next;
+	}
+	*line = next;
+	*tp = &eof_token_entry;
+	handle_preprocessor_line(stream, line, start);
+}
+
+static void do_preprocess(struct token **list)
+{
+	struct token *next;
+
+	while (!eof_token(next = scan_next(list))) {
+		struct stream *stream = input_streams + next->pos.stream;
+
+		if (next->pos.newline && match_op(next, '#')) {
+			if (!next->pos.noexpand) {
+				preprocessor_line(stream, list);
+				__free_token(next);	/* Free the '#' token */
+				continue;
+			}
+		}
+
+		switch (token_type(next)) {
+		case TOKEN_STREAMEND:
+			if (stream->top_if) {
+				nesting_error(stream);
+				sparse_error(stream->top_if->pos, "unterminated preprocessor conditional");
+				stream->top_if = NULL;
+				false_nesting = 0;
+			}
+			if (!stream->dirty)
+				stream->constant = CONSTANT_FILE_YES;
+			*list = next->next;
+			continue;
+		case TOKEN_STREAMBEGIN:
+			*list = next->next;
+			continue;
+
+		default:
+			dirty_stream(stream);
+			if (false_nesting) {
+				*list = next->next;
+				__free_token(next);
+				continue;
+			}
+
+			if (token_type(next) != TOKEN_IDENT ||
+			    expand_one_symbol(list))
+				list = &next->next;
+		}
+	}
+}
+
+void init_include_path(void)
+{
+	FILE *fp;
+	char path[256];
+	char arch[32];
+	char os[32];
+
+	fp = popen("/bin/uname -m", "r");
+	if (!fp)
+		return;
+	if (!fgets(arch, sizeof(arch) - 1, fp))
+		return;
+	pclose(fp);
+	if (arch[strlen(arch) - 1] == '\n')
+		arch[strlen(arch) - 1] = '\0';
+
+	fp = popen("/bin/uname -o", "r");
+	if (!fp)
+		return;
+	fgets(os, sizeof(os) - 1, fp);
+	pclose(fp);
+
+	if (strcmp(os, "GNU/Linux\n") != 0)
+		return;
+	strcpy(os, "linux-gnu");
+
+	snprintf(path, sizeof(path), "/usr/include/%s-%s/", arch, os);
+	add_pre_buffer("#add_system \"%s/\"\n", path);
+}
+
+struct token * preprocess(struct token *token)
+{
+	preprocessing = 1;
+	init_preprocessor();
+	do_preprocess(&token);
+
+	// Drop all expressions from preprocessing, they're not used any more.
+	// This is not true when we have multiple files, though ;/
+	// clear_expression_alloc();
+	preprocessing = 0;
+
+	return token;
+}
+
+static void dump_macro(struct symbol *sym)
+{
+	int nargs = sym->arglist ? sym->arglist->count.normal : 0;
+	struct token *args[nargs];
+	struct token *token;
+
+	printf("#define %s", show_ident(sym->ident));
+	token = sym->arglist;
+	if (token) {
+		const char *sep = "";
+		int narg = 0;
+		putchar('(');
+		for (; !eof_token(token); token = token->next) {
+			if (token_type(token) == TOKEN_ARG_COUNT)
+				continue;
+			printf("%s%s", sep, show_token(token));
+			args[narg++] = token;
+			sep = ", ";
+		}
+		putchar(')');
+	}
+	putchar(' ');
+
+	token = sym->expansion;
+	while (!eof_token(token)) {
+		struct token *next = token->next;
+		switch (token_type(token)) {
+		case TOKEN_UNTAINT:
+			break;
+		case TOKEN_MACRO_ARGUMENT:
+			token = args[token->argnum];
+			/* fall-through */
+		default:
+			printf("%s", show_token(token));
+			if (next->pos.whitespace)
+				putchar(' ');
+		}
+		token = next;
+	}
+	putchar('\n');
+}
+
+void dump_macro_definitions(void)
+{
+	struct ident *name;
+
+	FOR_EACH_PTR(macros, name) {
+		struct symbol *sym = lookup_macro(name);
+		if (sym)
+			dump_macro(sym);
+	} END_FOR_EACH_PTR(name);
+}
--- /dev/null	Fri Dec 21 15:00:14 2018
+++ new/usr/src/tools/smatch/src/ptrlist.c	Fri Dec 21 15:00:14 2018
@@ -0,0 +1,255 @@
+/*
+ * ptrlist.c
+ *
+ * Pointer list manipulation
+ *
+ * (C) Copyright Linus Torvalds 2003-2005
+ */
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include "ptrlist.h"
+#include "allocate.h"
+#include "compat.h"
+
+__DECLARE_ALLOCATOR(struct ptr_list, ptrlist);
+__ALLOCATOR(struct ptr_list, "ptr list", ptrlist);
+__ALLOCATOR(struct ptr_list, "rl ptr list", rl_ptrlist);
+
+int ptr_list_size(struct ptr_list *head)
+{
+	int nr = 0;
+
+	if (head) {
+		struct ptr_list *list = head;
+		do {
+			nr += list->nr - list->rm;
+		} while ((list = list->next) != head);
+	}
+	return nr;
+}
+
+/*
+ * Linearize the entries of a list up to a total of 'max',
+ * and return the nr of entries linearized.
+ *
+ * The array to linearize into (second argument) should really
+ * be "void *x[]", but we want to let people fill in any kind
+ * of pointer array, so let's just call it "void **".
+ */
+int linearize_ptr_list(struct ptr_list *head, void **arr, int max)
+{
+	int nr = 0;
+	if (head && max > 0) {
+		struct ptr_list *list = head;
+
+		do {
+			int i = list->nr;
+			if (i > max) 
+				i = max;
+			memcpy(arr, list->list, i*sizeof(void *));
+			arr += i;
+			nr += i;
+			max -= i;
+			if (!max)
+				break;
+		} while ((list = list->next) != head);
+	}
+	return nr;
+}
+
+/*
+ * When we've walked the list and deleted entries,
+ * we may need to re-pack it so that we don't have
+ * any empty blocks left (empty blocks upset the
+ * walking code
+ */
+void pack_ptr_list(struct ptr_list **listp)
+{
+	struct ptr_list *head = *listp;
+
+	if (head) {
+		struct ptr_list *entry = head;
+		do {
+			struct ptr_list *next;
+restart:
+			next = entry->next;
+			if (!entry->nr) {
+				struct ptr_list *prev;
+				if (next == entry) {
+					__free_ptrlist(entry);
+					*listp = NULL;
+					return;
+				}
+				prev = entry->prev;
+				prev->next = next;
+				next->prev = prev;
+				__free_ptrlist(entry);
+				if (entry == head) {
+					*listp = next;
+					head = next;
+					entry = next;
+					goto restart;
+				}
+			}
+			entry = next;
+		} while (entry != head);
+	}
+}		
+
+void split_ptr_list_head(struct ptr_list *head)
+{
+	int old = head->nr, nr = old / 2;
+	struct ptr_list *newlist = __alloc_ptrlist(0);
+	struct ptr_list *next = head->next;
+
+	old -= nr;
+	head->nr = old;
+	newlist->next = next;
+	next->prev = newlist;
+	newlist->prev = head;
+	head->next = newlist;
+	newlist->nr = nr;
+	memcpy(newlist->list, head->list + old, nr * sizeof(void *));
+	memset(head->list + old, 0xf0, nr * sizeof(void *));
+}
+
+int rl_ptrlist_hack;
+void **__add_ptr_list(struct ptr_list **listp, void *ptr, unsigned long tag)
+{
+	struct ptr_list *list = *listp;
+	struct ptr_list *last = NULL; /* gcc complains needlessly */
+	void **ret;
+	int nr;
+
+	/* The low two bits are reserved for tags */
+	assert((3 & (unsigned long)ptr) == 0);
+	assert((~3 & tag) == 0);
+	ptr = (void *)(tag | (unsigned long)ptr);
+
+	if (!list || (nr = (last = list->prev)->nr) >= LIST_NODE_NR) {
+		struct ptr_list *newlist;
+
+		if (rl_ptrlist_hack)
+			newlist = __alloc_rl_ptrlist(0);
+		else
+			newlist = __alloc_ptrlist(0);
+		if (!list) {
+			newlist->next = newlist;
+			newlist->prev = newlist;
+			*listp = newlist;
+		} else {
+			newlist->prev = last;
+			newlist->next = list;
+			list->prev = newlist;
+			last->next = newlist;
+		}
+		last = newlist;
+		nr = 0;
+	}
+	ret = last->list + nr;
+	*ret = ptr;
+	nr++;
+	last->nr = nr;
+	return ret;
+}
+
+int delete_ptr_list_entry(struct ptr_list **list, void *entry, int count)
+{
+	void *ptr;
+
+	FOR_EACH_PTR(*list, ptr) {
+		if (ptr == entry) {
+			DELETE_CURRENT_PTR(ptr);
+			if (!--count)
+				goto out;
+		}
+	} END_FOR_EACH_PTR(ptr);
+	assert(count <= 0);
+out:
+	pack_ptr_list(list);
+	return count;
+}
+
+int replace_ptr_list_entry(struct ptr_list **list, void *old_ptr, void *new_ptr, int count)
+{
+	void *ptr;
+
+	FOR_EACH_PTR(*list, ptr) {
+		if (ptr==old_ptr) {
+			REPLACE_CURRENT_PTR(ptr, new_ptr);
+			if (!--count)
+				goto out;
+		}
+	}END_FOR_EACH_PTR(ptr);
+	assert(count <= 0);
+out:
+	return count;
+}
+
+/* This removes the last entry, but doesn't pack the ptr list */
+void * undo_ptr_list_last(struct ptr_list **head)
+{
+	struct ptr_list *last, *first = *head;
+
+	if (!first)
+		return NULL;
+	last = first;
+	do {
+		last = last->prev;
+		if (last->nr) {
+			void *ptr;
+			int nr = --last->nr;
+			ptr = last->list[nr];
+			last->list[nr] = (void *)0xf1f1f1f1;
+			return ptr;
+		}
+	} while (last != first);
+	return NULL;
+}
+
+void * delete_ptr_list_last(struct ptr_list **head)
+{
+	void *ptr = NULL;
+	struct ptr_list *last, *first = *head;
+
+	if (!first)
+		return NULL;
+	last = first->prev;
+	if (last->nr)
+		ptr = last->list[--last->nr];
+	if (last->nr <=0) {
+		first->prev = last->prev;
+		last->prev->next = first;
+		if (last == first)
+			*head = NULL;
+		__free_ptrlist(last);
+	}
+	return ptr;
+}
+
+void concat_ptr_list(struct ptr_list *a, struct ptr_list **b)
+{
+	void *entry;
+	FOR_EACH_PTR(a, entry) {
+		add_ptr_list(b, entry);
+	} END_FOR_EACH_PTR(entry);
+}
+
+void __free_ptr_list(struct ptr_list **listp)
+{
+	struct ptr_list *tmp, *list = *listp;
+
+	if (!list)
+		return;
+
+	list->prev->next = NULL;
+	while (list) {
+		tmp = list;
+		list = list->next;
+		__free_ptrlist(tmp);
+	}
+
+	*listp = NULL;
+}
--- /dev/null	Fri Dec 21 15:00:14 2018
+++ new/usr/src/tools/smatch/src/ptrlist.h	Fri Dec 21 15:00:14 2018
@@ -0,0 +1,320 @@
+#ifndef PTR_LIST_H
+#define PTR_LIST_H
+
+#include <stdlib.h>
+
+/*
+ * Generic pointer list manipulation code. 
+ *
+ * (C) Copyright Linus Torvalds 2003-2005
+ */
+
+/* Silly type-safety check ;) */
+#define DECLARE_PTR_LIST(listname,type)	struct listname { type *list[1]; }
+#define CHECK_TYPE(head,ptr)		(void)(&(ptr) == &(head)->list[0])
+#define TYPEOF(head)			__typeof__(&(head)->list[0])
+#define VRFY_PTR_LIST(head)		(void)(sizeof((head)->list[0]))
+
+/*
+ * The "unnecessary" statement expression is there to shut up a totally 
+ * bogus gcc warning about unused expressions, brought on by the fact
+ * that we cast the result to the proper type.
+ */
+#define MKTYPE(head,expr)		({ (TYPEOF(head))(expr); })
+
+#define LIST_NODE_NR (29)
+
+struct ptr_list {
+	int nr:8;
+	int rm:8;
+	struct ptr_list *prev;
+	struct ptr_list *next;
+	void *list[LIST_NODE_NR];
+};
+
+#define ptr_list_empty(x) ((x) == NULL)
+
+void * undo_ptr_list_last(struct ptr_list **head);
+void * delete_ptr_list_last(struct ptr_list **head);
+int delete_ptr_list_entry(struct ptr_list **, void *, int);
+int replace_ptr_list_entry(struct ptr_list **, void *old, void *new, int);
+extern void sort_list(struct ptr_list **, int (*)(const void *, const void *));
+
+extern void **__add_ptr_list(struct ptr_list **, void *, unsigned long);
+extern void concat_ptr_list(struct ptr_list *a, struct ptr_list **b);
+extern void __free_ptr_list(struct ptr_list **);
+extern int ptr_list_size(struct ptr_list *);
+extern int linearize_ptr_list(struct ptr_list *, void **, int);
+
+/*
+ * Hey, who said that you can't do overloading in C?
+ *
+ * You just have to be creative, and use some gcc
+ * extensions..
+ */
+#define add_ptr_list_tag(list,entry,tag) \
+	MKTYPE(*(list), (CHECK_TYPE(*(list),(entry)),__add_ptr_list((struct ptr_list **)(list), (entry), (tag))))
+#define add_ptr_list_notag(list,entry)										\
+	MKTYPE(*(list), (CHECK_TYPE(*(list),(entry)),__add_ptr_list((struct ptr_list **)(list),			\
+								    (void *)((unsigned long)(entry) & ~3UL), 	\
+								    (unsigned long)(entry) & 3)))
+#define add_ptr_list(list,entry) \
+	add_ptr_list_tag(list,entry,0)
+#define free_ptr_list(list) \
+	do { VRFY_PTR_LIST(*(list)); __free_ptr_list((struct ptr_list **)(list)); } while (0)
+
+#define PTR_ENTRY_NOTAG(h,i)	((h)->list[i])
+#define PTR_ENTRY(h,i)	(void *)(~3UL & (unsigned long)PTR_ENTRY_NOTAG(h,i))
+
+static inline void *first_ptr_list(struct ptr_list *list)
+{
+	struct ptr_list *head = list;
+
+	if (!list)
+		return NULL;
+
+	while (list->nr == 0) {
+		list = list->next;
+		if (list == head)
+			return NULL;
+	}
+	return PTR_ENTRY(list, 0);
+}
+
+static inline void *last_ptr_list(struct ptr_list *list)
+{
+	struct ptr_list *head = list;
+
+	if (!list)
+		return NULL;
+	list = list->prev;
+	while (list->nr == 0) {
+		if (list == head)
+			return NULL;
+		list = list->prev;
+	}
+	return PTR_ENTRY(list, list->nr-1);
+}
+
+#define PTR_DEREF(__head, idx, PTR_ENTRY) ({						\
+	struct ptr_list *__list = __head;						\
+	while (__list && __list->nr == 0) {						\
+		__list = __list->next;							\
+		if (__list == __head)							\
+			__list = NULL;							\
+	}										\
+	__list ? PTR_ENTRY(__list, idx) : NULL;						\
+})
+
+#define DO_PREPARE(head, ptr, __head, __list, __nr, PTR_ENTRY)				\
+	do {										\
+		struct ptr_list *__head = (struct ptr_list *) (head);			\
+		struct ptr_list *__list = __head;					\
+		int __nr = 0;								\
+		CHECK_TYPE(head,ptr);							\
+		ptr = PTR_DEREF(__head, 0, PTR_ENTRY);					\
+
+#define DO_NEXT(ptr, __head, __list, __nr, PTR_ENTRY)					\
+		if (ptr) {								\
+			if (++__nr < __list->nr) {					\
+				ptr = PTR_ENTRY(__list,__nr);				\
+			} else {							\
+				__list = __list->next;					\
+				ptr = NULL;						\
+				while (__list->nr == 0 && __list != __head)		\
+					__list = __list->next;				\
+				if (__list != __head) {					\
+					__nr = 0;					\
+					ptr = PTR_ENTRY(__list,0);			\
+				}							\
+			}								\
+		}
+
+#define DO_RESET(ptr, __head, __list, __nr, PTR_ENTRY)					\
+	do {										\
+		__nr = 0;								\
+		__list = __head;							\
+		if (__head) ptr = PTR_DEREF(__head, 0, PTR_ENTRY);			\
+	} while (0)
+
+#define DO_FINISH(ptr, __head, __list, __nr)						\
+		(void)(__nr); /* Sanity-check nesting */				\
+	} while (0)
+
+#define PREPARE_PTR_LIST(head, ptr) \
+	DO_PREPARE(head, ptr, __head##ptr, __list##ptr, __nr##ptr, PTR_ENTRY)
+
+#define NEXT_PTR_LIST(ptr) \
+	DO_NEXT(ptr, __head##ptr, __list##ptr, __nr##ptr, PTR_ENTRY)
+
+#define RESET_PTR_LIST(ptr) \
+	DO_RESET(ptr, __head##ptr, __list##ptr, __nr##ptr, PTR_ENTRY)
+
+#define FINISH_PTR_LIST(ptr) \
+	DO_FINISH(ptr, __head##ptr, __list##ptr, __nr##ptr)
+
+#define DO_FOR_EACH(head, ptr, __head, __list, __nr, PTR_ENTRY) do {			\
+	struct ptr_list *__head = (struct ptr_list *) (head);				\
+	struct ptr_list *__list = __head;						\
+	CHECK_TYPE(head,ptr);								\
+	if (__head) {									\
+		do { int __nr;								\
+			for (__nr = 0; __nr < __list->nr; __nr++) {			\
+				do {							\
+					ptr = PTR_ENTRY(__list,__nr);			\
+					if (__list->rm && !ptr)				\
+						continue;				\
+					do {
+
+#define DO_END_FOR_EACH(ptr, __head, __list, __nr)					\
+					} while (0);					\
+				} while (0);						\
+			}								\
+		} while ((__list = __list->next) != __head);				\
+	}										\
+} while (0)
+
+#define DO_FOR_EACH_REVERSE(head, ptr, __head, __list, __nr, PTR_ENTRY) do {		\
+	struct ptr_list *__head = (struct ptr_list *) (head);				\
+	struct ptr_list *__list = __head;						\
+	CHECK_TYPE(head,ptr);								\
+	if (__head) {									\
+		do { int __nr;								\
+			__list = __list->prev;						\
+			__nr = __list->nr;						\
+			while (--__nr >= 0) {						\
+				do {							\
+					ptr = PTR_ENTRY(__list,__nr);			\
+					if (__list->rm && !ptr)				\
+						continue;				\
+					do {
+
+
+#define DO_END_FOR_EACH_REVERSE(ptr, __head, __list, __nr)				\
+					} while (0);					\
+				} while (0);						\
+			}								\
+		} while (__list != __head);						\
+	}										\
+} while (0)
+
+#define DO_REVERSE(ptr, __head, __list, __nr, new, __newhead,				\
+		   __newlist, __newnr, PTR_ENTRY) do { 					\
+	struct ptr_list *__newhead = __head;						\
+	struct ptr_list *__newlist = __list;						\
+	int __newnr = __nr;								\
+	new = ptr;									\
+	goto __inside##new;								\
+	if (1) {									\
+		do {									\
+			__newlist = __newlist->prev;					\
+			__newnr = __newlist->nr;					\
+	__inside##new:									\
+			while (--__newnr >= 0) {					\
+				do {							\
+					new = PTR_ENTRY(__newlist,__newnr);		\
+					do {
+
+#define RECURSE_PTR_REVERSE(ptr, new)							\
+	DO_REVERSE(ptr, __head##ptr, __list##ptr, __nr##ptr,				\
+		   new, __head##new, __list##new, __nr##new, PTR_ENTRY)
+
+#define DO_THIS_ADDRESS(ptr, __head, __list, __nr)					\
+	((__typeof__(&(ptr))) (__list->list + __nr))
+
+#define FOR_EACH_PTR(head, ptr) \
+	DO_FOR_EACH(head, ptr, __head##ptr, __list##ptr, __nr##ptr, PTR_ENTRY)
+
+#define END_FOR_EACH_PTR(ptr) \
+	DO_END_FOR_EACH(ptr, __head##ptr, __list##ptr, __nr##ptr)
+
+#define FOR_EACH_PTR_NOTAG(head, ptr) \
+	DO_FOR_EACH(head, ptr, __head##ptr, __list##ptr, __nr##ptr, PTR_ENTRY_NOTAG)
+
+#define END_FOR_EACH_PTR_NOTAG(ptr) END_FOR_EACH_PTR(ptr)
+
+#define FOR_EACH_PTR_REVERSE(head, ptr) \
+	DO_FOR_EACH_REVERSE(head, ptr, __head##ptr, __list##ptr, __nr##ptr, PTR_ENTRY)
+
+#define END_FOR_EACH_PTR_REVERSE(ptr) \
+	DO_END_FOR_EACH_REVERSE(ptr, __head##ptr, __list##ptr, __nr##ptr)
+
+#define FOR_EACH_PTR_REVERSE_NOTAG(head, ptr) \
+	DO_FOR_EACH_REVERSE(head, ptr, __head##ptr, __list##ptr, __nr##ptr, PTR_ENTRY_NOTAG)
+
+#define END_FOR_EACH_PTR_REVERSE_NOTAG(ptr) END_FOR_EACH_PTR_REVERSE(ptr)
+
+#define THIS_ADDRESS(ptr) \
+	DO_THIS_ADDRESS(ptr, __head##ptr, __list##ptr, __nr##ptr)
+
+extern void split_ptr_list_head(struct ptr_list *);
+
+#define DO_SPLIT(ptr, __head, __list, __nr) do {					\
+	split_ptr_list_head(__list);							\
+	if (__nr >= __list->nr) {							\
+		__nr -= __list->nr;							\
+		__list = __list->next;							\
+	};										\
+} while (0)
+
+#define DO_INSERT_CURRENT(new, ptr, __head, __list, __nr) do {				\
+	void **__this, **__last;							\
+	if (__list->nr == LIST_NODE_NR)							\
+		DO_SPLIT(ptr, __head, __list, __nr);					\
+	__this = __list->list + __nr;							\
+	__last = __list->list + __list->nr - 1;						\
+	while (__last >= __this) {							\
+		__last[1] = __last[0];							\
+		__last--;								\
+	}										\
+	*__this = (new);								\
+	__list->nr++;									\
+} while (0)
+
+#define INSERT_CURRENT(new, ptr) \
+	DO_INSERT_CURRENT(new, ptr, __head##ptr, __list##ptr, __nr##ptr)
+
+#define DO_DELETE_CURRENT(ptr, __head, __list, __nr) do {				\
+	void **__this = __list->list + __nr;						\
+	void **__last = __list->list + __list->nr - 1;					\
+	while (__this < __last) {							\
+		__this[0] = __this[1];							\
+		__this++;								\
+	}										\
+	*__this = (void *)0xf0f0f0f0;							\
+	__list->nr--; __nr--;								\
+} while (0)
+
+#define DELETE_CURRENT_PTR(ptr) \
+	DO_DELETE_CURRENT(ptr, __head##ptr, __list##ptr, __nr##ptr)
+
+#define REPLACE_CURRENT_PTR(ptr, new_ptr)						\
+	do { *THIS_ADDRESS(ptr) = (new_ptr); } while (0)
+
+#define DO_MARK_CURRENT_DELETED(ptr, __list) do {	\
+		REPLACE_CURRENT_PTR(ptr, NULL);		\
+		__list->rm++;				\
+	} while (0)
+
+#define MARK_CURRENT_DELETED(ptr) \
+	DO_MARK_CURRENT_DELETED(ptr, __list##ptr)
+
+extern void pack_ptr_list(struct ptr_list **);
+
+#define PACK_PTR_LIST(x) pack_ptr_list((struct ptr_list **)(x))
+
+static inline void update_tag(void *p, unsigned long tag)
+{
+	unsigned long *ptr = p;
+	*ptr = tag | (~3UL & *ptr);
+}
+
+static inline void *tag_ptr(void *ptr, unsigned long tag)
+{
+	return (void *)(tag | (unsigned long)ptr);
+}
+
+#define CURRENT_TAG(ptr) (3 & (unsigned long)*THIS_ADDRESS(ptr))
+#define TAG_CURRENT(ptr,val)	update_tag(THIS_ADDRESS(ptr),val)
+
+#endif /* PTR_LIST_H */
--- /dev/null	Fri Dec 21 15:00:14 2018
+++ new/usr/src/tools/smatch/src/scope.c	Fri Dec 21 15:00:14 2018
@@ -0,0 +1,149 @@
+/*
+ * Symbol scoping.
+ *
+ * This is pretty trivial.
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003-2004 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "symbol.h"
+#include "scope.h"
+
+static struct scope builtin_scope = { .next = &builtin_scope };
+
+struct scope	*block_scope = &builtin_scope,		// regular automatic variables etc
+		*function_scope = &builtin_scope,	// labels, arguments etc
+		*file_scope = &builtin_scope,		// static
+		*global_scope = &builtin_scope;		// externally visible
+
+void bind_scope(struct symbol *sym, struct scope *scope)
+{
+	sym->scope = scope;
+	add_symbol(&scope->symbols, sym);
+}
+
+void rebind_scope(struct symbol *sym, struct scope *new)
+{
+	struct scope *old = sym->scope;
+
+	if (old == new)
+		return;
+
+	if (old)
+		delete_ptr_list_entry((struct ptr_list**) &old->symbols, sym, 1);
+
+	bind_scope(sym, new);
+}
+
+static void start_scope(struct scope **s, struct position pos)
+{
+	struct scope *scope = __alloc_scope(0);
+	memset(scope, 0, sizeof(*scope));
+	scope->token = __alloc_token(0);
+	scope->token->pos = pos;
+	scope->next = *s;
+	*s = scope;
+}
+
+void start_file_scope(void)
+{
+	struct scope *scope = __alloc_scope(0);
+
+	memset(scope, 0, sizeof(*scope));
+	scope->next = &builtin_scope;
+	file_scope = scope;
+
+	/* top-level stuff defaults to file scope, "extern" etc will choose global scope */
+	function_scope = scope;
+	block_scope = scope;
+}
+
+void start_symbol_scope(struct position pos)
+{
+	start_scope(&block_scope, pos);
+}
+
+void start_function_scope(struct position pos)
+{
+	start_scope(&function_scope, pos);
+	start_scope(&block_scope, pos);
+}
+
+static void remove_symbol_scope(struct symbol *sym)
+{
+	struct symbol **ptr = &sym->ident->symbols;
+
+	while (*ptr != sym)
+		ptr = &(*ptr)->next_id;
+	*ptr = sym->next_id;
+}
+
+static void end_scope(struct scope **s)
+{
+	struct scope *scope = *s;
+	struct symbol_list *symbols = scope->symbols;
+	struct symbol *sym;
+
+	*s = scope->next;
+	scope->symbols = NULL;
+	FOR_EACH_PTR(symbols, sym) {
+		remove_symbol_scope(sym);
+	} END_FOR_EACH_PTR(sym);
+}
+
+void end_file_scope(void)
+{
+	end_scope(&file_scope);
+}
+
+void new_file_scope(void)
+{
+	if (file_scope != &builtin_scope)
+		end_file_scope();
+	start_file_scope();
+}
+
+void end_symbol_scope(void)
+{
+	end_scope(&block_scope);
+}
+
+void end_function_scope(void)
+{
+	end_scope(&block_scope);
+	end_scope(&function_scope);
+}
+
+int is_outer_scope(struct scope *scope)
+{
+	if (scope == block_scope)
+		return 0;
+	if (scope == &builtin_scope && block_scope->next == &builtin_scope)
+		return 0;
+	return 1;
+}
+
--- /dev/null	Fri Dec 21 15:00:14 2018
+++ new/usr/src/tools/smatch/src/scope.h	Fri Dec 21 15:00:14 2018
@@ -0,0 +1,62 @@
+#ifndef SCOPE_H
+#define SCOPE_H
+/*
+ * Symbol scoping is pretty simple.
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+struct symbol;
+struct position;
+
+struct scope {
+	struct token *token;		/* Scope start information */
+	struct symbol_list *symbols;	/* List of symbols in this scope */
+	struct scope *next;
+};
+
+extern struct scope
+		*block_scope,
+		*function_scope,
+		*file_scope,
+		*global_scope;
+
+static inline int toplevel(struct scope *scope)
+{
+	return scope == file_scope || scope == global_scope;
+}
+
+extern void start_file_scope(void);
+extern void end_file_scope(void);
+extern void new_file_scope(void);
+
+extern void start_symbol_scope(struct position pos);
+extern void end_symbol_scope(void);
+
+extern void start_function_scope(struct position pos);
+extern void end_function_scope(void);
+
+extern void bind_scope(struct symbol *, struct scope *);
+extern void rebind_scope(struct symbol *, struct scope *);
+
+extern int is_outer_scope(struct scope *);
+#endif
--- /dev/null	Fri Dec 21 15:00:15 2018
+++ new/usr/src/tools/smatch/src/show-parse.c	Fri Dec 21 15:00:15 2018
@@ -0,0 +1,1174 @@
+/*
+ * sparse/show-parse.c
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003-2004 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * Print out results of parsing for debugging and testing.
+ */
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "token.h"
+#include "parse.h"
+#include "symbol.h"
+#include "scope.h"
+#include "expression.h"
+#include "target.h"
+
+static int show_symbol_expr(struct symbol *sym);
+static int show_string_expr(struct expression *expr);
+
+static void do_debug_symbol(struct symbol *sym, int indent)
+{
+	static const char indent_string[] = "                                  ";
+	static const char *typestr[] = {
+		[SYM_UNINITIALIZED] = "none",
+		[SYM_PREPROCESSOR] = "cpp.",
+		[SYM_BASETYPE] = "base",
+		[SYM_NODE] = "node",
+		[SYM_PTR] = "ptr.",
+		[SYM_FN] = "fn..",
+		[SYM_ARRAY] = "arry",
+		[SYM_STRUCT] = "strt",
+		[SYM_UNION] = "unin",
+		[SYM_ENUM] = "enum",
+		[SYM_TYPEDEF] = "tdef",
+		[SYM_TYPEOF] = "tpof",
+		[SYM_MEMBER] = "memb",
+		[SYM_BITFIELD] = "bitf",
+		[SYM_LABEL] = "labl",
+		[SYM_RESTRICT] = "rstr",
+		[SYM_FOULED] = "foul",
+		[SYM_BAD] = "bad.",
+	};
+	struct context *context;
+	int i;
+
+	if (!sym)
+		return;
+	fprintf(stderr, "%.*s%s%3d:%lu %s %s (as: %d) %p (%s:%d:%d) %s\n",
+		indent, indent_string, typestr[sym->type],
+		sym->bit_size, sym->ctype.alignment,
+		modifier_string(sym->ctype.modifiers), show_ident(sym->ident), sym->ctype.as,
+		sym, stream_name(sym->pos.stream), sym->pos.line, sym->pos.pos,
+		builtin_typename(sym) ?: "");
+	i = 0;
+	FOR_EACH_PTR(sym->ctype.contexts, context) {
+		/* FIXME: should print context expression */
+		fprintf(stderr, "< context%d: in=%d, out=%d\n",
+			i, context->in, context->out);
+		fprintf(stderr, "  end context%d >\n", i);
+		i++;
+	} END_FOR_EACH_PTR(context);
+	if (sym->type == SYM_FN) {
+		struct symbol *arg;
+		i = 0;
+		FOR_EACH_PTR(sym->arguments, arg) {
+			fprintf(stderr, "< arg%d:\n", i);
+			do_debug_symbol(arg, 0);
+			fprintf(stderr, "  end arg%d >\n", i);
+			i++;
+		} END_FOR_EACH_PTR(arg);
+	}
+	do_debug_symbol(sym->ctype.base_type, indent+2);
+}
+
+void debug_symbol(struct symbol *sym)
+{
+	do_debug_symbol(sym, 0);
+}
+
+/*
+ * Symbol type printout. The type system is by far the most
+ * complicated part of C - everything else is trivial.
+ */
+const char *modifier_string(unsigned long mod)
+{
+	static char buffer[100];
+	int len = 0;
+	int i;
+	struct mod_name {
+		unsigned long mod;
+		const char *name;
+	} *m;
+
+	static struct mod_name mod_names[] = {
+		{MOD_AUTO,		"auto"},
+		{MOD_REGISTER,		"register"},
+		{MOD_STATIC,		"static"},
+		{MOD_EXTERN,		"extern"},
+		{MOD_CONST,		"const"},
+		{MOD_VOLATILE,		"volatile"},
+		{MOD_SIGNED,		"[signed]"},
+		{MOD_UNSIGNED,		"[unsigned]"},
+		{MOD_CHAR,		"[char]"},
+		{MOD_SHORT,		"[short]"},
+		{MOD_LONG,		"[long]"},
+		{MOD_LONGLONG,		"[long long]"},
+		{MOD_LONGLONGLONG,	"[long long long]"},
+		{MOD_TYPEDEF,		"[typedef]"},
+		{MOD_TLS,		"[tls]"},
+		{MOD_INLINE,		"inline"},
+		{MOD_ADDRESSABLE,	"[addressable]"},
+		{MOD_NOCAST,		"[nocast]"},
+		{MOD_NODEREF,		"[noderef]"},
+		{MOD_ACCESSED,		"[accessed]"},
+		{MOD_TOPLEVEL,		"[toplevel]"},
+		{MOD_ASSIGNED,		"[assigned]"},
+		{MOD_TYPE,		"[type]"},
+		{MOD_SAFE,		"[safe]"},
+		{MOD_USERTYPE,		"[usertype]"},
+		{MOD_NORETURN,		"[noreturn]"},
+		{MOD_EXPLICITLY_SIGNED,	"[explicitly-signed]"},
+		{MOD_BITWISE,		"[bitwise]"},
+		{MOD_PURE,		"[pure]"},
+	};
+
+	for (i = 0; i < ARRAY_SIZE(mod_names); i++) {
+		m = mod_names + i;
+		if (mod & m->mod) {
+			char c;
+			const char *name = m->name;
+			while ((c = *name++) != '\0' && len + 2 < sizeof buffer)
+				buffer[len++] = c;
+			buffer[len++] = ' ';
+		}
+	}
+	buffer[len] = 0;
+	return buffer;
+}
+
+static void show_struct_member(struct symbol *sym)
+{
+	printf("\t%s:%d:%ld at offset %ld.%d", show_ident(sym->ident), sym->bit_size, sym->ctype.alignment, sym->offset, sym->bit_offset);
+	printf("\n");
+}
+
+void show_symbol_list(struct symbol_list *list, const char *sep)
+{
+	struct symbol *sym;
+	const char *prepend = "";
+
+	FOR_EACH_PTR(list, sym) {
+		puts(prepend);
+		prepend = ", ";
+		show_symbol(sym);
+	} END_FOR_EACH_PTR(sym);
+}
+
+struct type_name {
+	char *start;
+	char *end;
+};
+
+static void FORMAT_ATTR(2) prepend(struct type_name *name, const char *fmt, ...)
+{
+	static char buffer[512];
+	int n;
+
+	va_list args;
+	va_start(args, fmt);
+	n = vsprintf(buffer, fmt, args);
+	va_end(args);
+
+	name->start -= n;
+	memcpy(name->start, buffer, n);
+}
+
+static void FORMAT_ATTR(2) append(struct type_name *name, const char *fmt, ...)
+{
+	static char buffer[512];
+	int n;
+
+	va_list args;
+	va_start(args, fmt);
+	n = vsprintf(buffer, fmt, args);
+	va_end(args);
+
+	memcpy(name->end, buffer, n);
+	name->end += n;
+}
+
+static struct ctype_name {
+	struct symbol *sym;
+	const char *name;
+} typenames[] = {
+	{ & char_ctype,  "char" },
+	{ &schar_ctype,  "signed char" },
+	{ &uchar_ctype,  "unsigned char" },
+	{ & short_ctype, "short" },
+	{ &sshort_ctype, "signed short" },
+	{ &ushort_ctype, "unsigned short" },
+	{ & int_ctype,   "int" },
+	{ &sint_ctype,   "signed int" },
+	{ &uint_ctype,   "unsigned int" },
+	{ &slong_ctype,  "signed long" },
+	{ & long_ctype,  "long" },
+	{ &ulong_ctype,  "unsigned long" },
+	{ & llong_ctype, "long long" },
+	{ &sllong_ctype, "signed long long" },
+	{ &ullong_ctype, "unsigned long long" },
+	{ & lllong_ctype, "long long long" },
+	{ &slllong_ctype, "signed long long long" },
+	{ &ulllong_ctype, "unsigned long long long" },
+
+	{ &void_ctype,   "void" },
+	{ &bool_ctype,   "bool" },
+	{ &string_ctype, "string" },
+
+	{ &float_ctype,  "float" },
+	{ &double_ctype, "double" },
+	{ &ldouble_ctype,"long double" },
+	{ &incomplete_ctype, "incomplete type" },
+	{ &int_type, "abstract int" },
+	{ &fp_type, "abstract fp" },
+	{ &label_ctype, "label type" },
+	{ &bad_ctype, "bad type" },
+};
+
+const char *builtin_typename(struct symbol *sym)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(typenames); i++)
+		if (typenames[i].sym == sym)
+			return typenames[i].name;
+	return NULL;
+}
+
+const char *builtin_ctypename(struct ctype *ctype)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(typenames); i++)
+		if (&typenames[i].sym->ctype == ctype)
+			return typenames[i].name;
+	return NULL;
+}
+
+static void do_show_type(struct symbol *sym, struct type_name *name)
+{
+	const char *typename;
+	unsigned long mod = 0;
+	int as = 0;
+	int was_ptr = 0;
+	int restr = 0;
+	int fouled = 0;
+
+deeper:
+	if (!sym || (sym->type != SYM_NODE && sym->type != SYM_ARRAY &&
+		     sym->type != SYM_BITFIELD)) {
+		const char *s;
+		size_t len;
+
+		if (as)
+			prepend(name, "<asn:%d>", as);
+
+		s = modifier_string(mod);
+		len = strlen(s);
+		name->start -= len;    
+		memcpy(name->start, s, len);  
+		mod = 0;
+		as = 0;
+	}
+
+	if (!sym)
+		goto out;
+
+	if ((typename = builtin_typename(sym))) {
+		int len = strlen(typename);
+		if (name->start != name->end)
+			*--name->start = ' ';
+		name->start -= len;
+		memcpy(name->start, typename, len);
+		goto out;
+	}
+
+	/* Prepend */
+	switch (sym->type) {
+	case SYM_PTR:
+		prepend(name, "*");
+		mod = sym->ctype.modifiers;
+		as = sym->ctype.as;
+		was_ptr = 1;
+		break;
+
+	case SYM_FN:
+		if (was_ptr) {
+			prepend(name, "( ");
+			append(name, " )");
+			was_ptr = 0;
+		}
+		append(name, "( ... )");
+		break;
+
+	case SYM_STRUCT:
+		if (name->start != name->end)
+			*--name->start = ' ';
+		prepend(name, "struct %s", show_ident(sym->ident));
+		goto out;
+
+	case SYM_UNION:
+		if (name->start != name->end)
+			*--name->start = ' ';
+		prepend(name, "union %s", show_ident(sym->ident));
+		goto out;
+
+	case SYM_ENUM:
+		prepend(name, "enum %s ", show_ident(sym->ident));
+		break;
+
+	case SYM_NODE:
+		append(name, "%s", show_ident(sym->ident));
+		mod |= sym->ctype.modifiers;
+		as |= sym->ctype.as;
+		break;
+
+	case SYM_BITFIELD:
+		mod |= sym->ctype.modifiers;
+		as |= sym->ctype.as;
+		append(name, ":%d", sym->bit_size);
+		break;
+
+	case SYM_LABEL:
+		append(name, "label(%s:%p)", show_ident(sym->ident), sym);
+		return;
+
+	case SYM_ARRAY:
+		mod |= sym->ctype.modifiers;
+		as |= sym->ctype.as;
+		if (was_ptr) {
+			prepend(name, "( ");
+			append(name, " )");
+			was_ptr = 0;
+		}
+		append(name, "[%lld]", get_expression_value(sym->array_size));
+		break;
+
+	case SYM_RESTRICT:
+		if (!sym->ident) {
+			restr = 1;
+			break;
+		}
+		if (name->start != name->end)
+			*--name->start = ' ';
+		prepend(name, "restricted %s", show_ident(sym->ident));
+		goto out;
+
+	case SYM_FOULED:
+		fouled = 1;
+		break;
+
+	default:
+		if (name->start != name->end)
+			*--name->start = ' ';
+		prepend(name, "unknown type %d", sym->type);
+		goto out;
+	}
+
+	sym = sym->ctype.base_type;
+	goto deeper;
+
+out:
+	if (restr)
+		prepend(name, "restricted ");
+	if (fouled)
+		prepend(name, "fouled ");
+}
+
+void show_type(struct symbol *sym)
+{
+	char array[200];
+	struct type_name name;
+
+	name.start = name.end = array+100;
+	do_show_type(sym, &name);
+	*name.end = 0;
+	printf("%s", name.start);
+}
+
+const char *show_typename(struct symbol *sym)
+{
+	static char array[200];
+	struct type_name name;
+
+	name.start = name.end = array+100;
+	do_show_type(sym, &name);
+	*name.end = 0;
+	return name.start;
+}
+
+void show_symbol(struct symbol *sym)
+{
+	struct symbol *type;
+
+	if (!sym)
+		return;
+
+	if (sym->ctype.alignment)
+		printf(".align %ld\n", sym->ctype.alignment);
+
+	show_type(sym);
+	type = sym->ctype.base_type;
+	if (!type) {
+		printf("\n");
+		return;
+	}
+
+	/*
+	 * Show actual implementation information
+	 */
+	switch (type->type) {
+		struct symbol *member;
+
+	case SYM_STRUCT:
+	case SYM_UNION:
+		printf(" {\n");
+		FOR_EACH_PTR(type->symbol_list, member) {
+			show_struct_member(member);
+		} END_FOR_EACH_PTR(member);
+		printf("}\n");
+		break;
+
+	case SYM_FN: {
+		struct statement *stmt = type->stmt;
+		printf("\n");
+		if (stmt) {
+			int val;
+			val = show_statement(stmt);
+			if (val)
+				printf("\tmov.%d\t\tretval,%d\n", stmt->ret->bit_size, val);
+			printf("\tret\n");
+		}
+		break;
+	}
+
+	default:
+		printf("\n");
+		break;
+	}
+
+	if (sym->initializer) {
+		printf(" = \n");
+		show_expression(sym->initializer);
+	}
+}
+
+static int show_symbol_init(struct symbol *sym);
+
+static int new_pseudo(void)
+{
+	static int nr = 0;
+	return ++nr;
+}
+
+static int new_label(void)
+{
+	static int label = 0;
+	return ++label;
+}
+
+static void show_switch_statement(struct statement *stmt)
+{
+	int val = show_expression(stmt->switch_expression);
+	struct symbol *sym;
+	printf("\tswitch v%d\n", val);
+
+	/*
+	 * Debugging only: Check that the case list is correct
+	 * by printing it out.
+	 *
+	 * This is where a _real_ back-end would go through the
+	 * cases to decide whether to use a lookup table or a
+	 * series of comparisons etc
+	 */
+	printf("# case table:\n");
+	FOR_EACH_PTR(stmt->switch_case->symbol_list, sym) {
+		struct statement *case_stmt = sym->stmt;
+		struct expression *expr = case_stmt->case_expression;
+		struct expression *to = case_stmt->case_to;
+
+		if (!expr) {
+			printf("    default");
+		} else {
+			if (expr->type == EXPR_VALUE) {
+				printf("    case %lld", expr->value);
+				if (to) {
+					if (to->type == EXPR_VALUE) {
+						printf(" .. %lld", to->value);
+					} else {
+						printf(" .. what?");
+					}
+				}
+			} else
+				printf("    what?");
+		}
+		printf(": .L%p\n", sym);
+	} END_FOR_EACH_PTR(sym);
+	printf("# end case table\n");
+
+	show_statement(stmt->switch_statement);
+
+	if (stmt->switch_break->used)
+		printf(".L%p:\n", stmt->switch_break);
+}
+
+static void show_symbol_decl(struct symbol_list *syms)
+{
+	struct symbol *sym;
+	FOR_EACH_PTR(syms, sym) {
+		show_symbol_init(sym);
+	} END_FOR_EACH_PTR(sym);
+}
+
+static int show_return_stmt(struct statement *stmt);
+
+/*
+ * Print out a statement
+ */
+int show_statement(struct statement *stmt)
+{
+	if (!stmt)
+		return 0;
+	switch (stmt->type) {
+	case STMT_DECLARATION:
+		show_symbol_decl(stmt->declaration);
+		return 0;
+	case STMT_RETURN:
+		return show_return_stmt(stmt);
+	case STMT_COMPOUND: {
+		struct statement *s;
+		int last = 0;
+
+		if (stmt->inline_fn) {
+			show_statement(stmt->args);
+			printf("\tbegin_inline \t%s\n", show_ident(stmt->inline_fn->ident));
+		}
+		FOR_EACH_PTR(stmt->stmts, s) {
+			last = show_statement(s);
+		} END_FOR_EACH_PTR(s);
+		if (stmt->ret) {
+			int addr, bits;
+			printf(".L%p:\n", stmt->ret);
+			addr = show_symbol_expr(stmt->ret);
+			bits = stmt->ret->bit_size;
+			last = new_pseudo();
+			printf("\tld.%d\t\tv%d,[v%d]\n", bits, last, addr);
+		}
+		if (stmt->inline_fn)
+			printf("\tend_inlined\t%s\n", show_ident(stmt->inline_fn->ident));
+		return last;
+	}
+
+	case STMT_EXPRESSION:
+		return show_expression(stmt->expression);
+	case STMT_IF: {
+		int val, target;
+		struct expression *cond = stmt->if_conditional;
+
+/* This is only valid if nobody can jump into the "dead" statement */
+#if 0
+		if (cond->type == EXPR_VALUE) {
+			struct statement *s = stmt->if_true;
+			if (!cond->value)
+				s = stmt->if_false;
+			show_statement(s);
+			break;
+		}
+#endif
+		val = show_expression(cond);
+		target = new_label();
+		printf("\tje\t\tv%d,.L%d\n", val, target);
+		show_statement(stmt->if_true);
+		if (stmt->if_false) {
+			int last = new_label();
+			printf("\tjmp\t\t.L%d\n", last);
+			printf(".L%d:\n", target);
+			target = last;
+			show_statement(stmt->if_false);
+		}
+		printf(".L%d:\n", target);
+		break;
+	}
+	case STMT_SWITCH:
+		show_switch_statement(stmt);
+		break;
+
+	case STMT_CASE:
+		printf(".L%p:\n", stmt->case_label);
+		show_statement(stmt->case_statement);
+		break;
+
+	case STMT_ITERATOR: {
+		struct statement  *pre_statement = stmt->iterator_pre_statement;
+		struct expression *pre_condition = stmt->iterator_pre_condition;
+		struct statement  *statement = stmt->iterator_statement;
+		struct statement  *post_statement = stmt->iterator_post_statement;
+		struct expression *post_condition = stmt->iterator_post_condition;
+		int val, loop_top = 0, loop_bottom = 0;
+
+		show_symbol_decl(stmt->iterator_syms);
+		show_statement(pre_statement);
+		if (pre_condition) {
+			if (pre_condition->type == EXPR_VALUE) {
+				if (!pre_condition->value) {
+					loop_bottom = new_label();   
+					printf("\tjmp\t\t.L%d\n", loop_bottom);
+				}
+			} else {
+				loop_bottom = new_label();
+				val = show_expression(pre_condition);
+				printf("\tje\t\tv%d, .L%d\n", val, loop_bottom);
+			}
+		}
+		if (!post_condition || post_condition->type != EXPR_VALUE || post_condition->value) {
+			loop_top = new_label();
+			printf(".L%d:\n", loop_top);
+		}
+		show_statement(statement);
+		if (stmt->iterator_continue->used)
+			printf(".L%p:\n", stmt->iterator_continue);
+		show_statement(post_statement);
+		if (!post_condition) {
+			printf("\tjmp\t\t.L%d\n", loop_top);
+		} else if (post_condition->type == EXPR_VALUE) {
+			if (post_condition->value)
+				printf("\tjmp\t\t.L%d\n", loop_top);
+		} else {
+			val = show_expression(post_condition);
+			printf("\tjne\t\tv%d, .L%d\n", val, loop_top);
+		}
+		if (stmt->iterator_break->used)
+			printf(".L%p:\n", stmt->iterator_break);
+		if (loop_bottom)
+			printf(".L%d:\n", loop_bottom);
+		break;
+	}
+	case STMT_NONE:
+		break;
+	
+	case STMT_LABEL:
+		printf(".L%p:\n", stmt->label_identifier);
+		show_statement(stmt->label_statement);
+		break;
+
+	case STMT_GOTO:
+		if (stmt->goto_expression) {
+			int val = show_expression(stmt->goto_expression);
+			printf("\tgoto\t\t*v%d\n", val);
+		} else {
+			printf("\tgoto\t\t.L%p\n", stmt->goto_label);
+		}
+		break;
+	case STMT_ASM:
+		printf("\tasm( .... )\n");
+		break;
+	case STMT_CONTEXT: {
+		int val = show_expression(stmt->expression);
+		printf("\tcontext( %d )\n", val);
+		break;
+	}
+	case STMT_RANGE: {
+		int val = show_expression(stmt->range_expression);
+		int low = show_expression(stmt->range_low);
+		int high = show_expression(stmt->range_high);
+		printf("\trange( %d %d-%d)\n", val, low, high); 
+		break;
+	}	
+	}
+	return 0;
+}
+
+static int show_call_expression(struct expression *expr)
+{
+	struct symbol *direct;
+	struct expression *arg, *fn;
+	int fncall, retval;
+	int framesize;
+
+	if (!expr->ctype) {
+		warning(expr->pos, "\tcall with no type!");
+		return 0;
+	}
+
+	framesize = 0;
+	FOR_EACH_PTR_REVERSE(expr->args, arg) {
+		int new = show_expression(arg);
+		int size = arg->ctype->bit_size;
+		printf("\tpush.%d\t\tv%d\n", size, new);
+		framesize += bits_to_bytes(size);
+	} END_FOR_EACH_PTR_REVERSE(arg);
+
+	fn = expr->fn;
+
+	/* Remove dereference, if any */
+	direct = NULL;
+	if (fn->type == EXPR_PREOP) {
+		if (fn->unop->type == EXPR_SYMBOL) {
+			struct symbol *sym = fn->unop->symbol;
+			if (sym->ctype.base_type->type == SYM_FN)
+				direct = sym;
+		}
+	}
+	if (direct) {
+		printf("\tcall\t\t%s\n", show_ident(direct->ident));
+	} else {
+		fncall = show_expression(fn);
+		printf("\tcall\t\t*v%d\n", fncall);
+	}
+	if (framesize)
+		printf("\tadd.%d\t\tvSP,vSP,$%d\n", bits_in_pointer, framesize);
+
+	retval = new_pseudo();
+	printf("\tmov.%d\t\tv%d,retval\n", expr->ctype->bit_size, retval);
+	return retval;
+}
+
+static int show_comma(struct expression *expr)
+{
+	show_expression(expr->left);
+	return show_expression(expr->right);
+}
+
+static int show_binop(struct expression *expr)
+{
+	int left = show_expression(expr->left);
+	int right = show_expression(expr->right);
+	int new = new_pseudo();
+	const char *opname;
+	static const char *name[] = {
+		['+'] = "add", ['-'] = "sub",
+		['*'] = "mul", ['/'] = "div",
+		['%'] = "mod", ['&'] = "and",
+		['|'] = "lor", ['^'] = "xor"
+	};
+	unsigned int op = expr->op;
+
+	opname = show_special(op);
+	if (op < ARRAY_SIZE(name))
+		opname = name[op];
+	printf("\t%s.%d\t\tv%d,v%d,v%d\n", opname,
+		expr->ctype->bit_size,
+		new, left, right);
+	return new;
+}
+
+static int show_slice(struct expression *expr)
+{
+	int target = show_expression(expr->base);
+	int new = new_pseudo();
+	printf("\tslice.%d\t\tv%d,v%d,%d\n", expr->r_nrbits, target, new, expr->r_bitpos);
+	return new;
+}
+
+static int show_regular_preop(struct expression *expr)
+{
+	int target = show_expression(expr->unop);
+	int new = new_pseudo();
+	static const char *name[] = {
+		['!'] = "nonzero", ['-'] = "neg",
+		['~'] = "not",
+	};
+	unsigned int op = expr->op;
+	const char *opname;
+
+	opname = show_special(op);
+	if (op < ARRAY_SIZE(name))
+		opname = name[op];
+	printf("\t%s.%d\t\tv%d,v%d\n", opname, expr->ctype->bit_size, new, target);
+	return new;
+}
+
+/*
+ * FIXME! Not all accesses are memory loads. We should
+ * check what kind of symbol is behind the dereference.
+ */
+static int show_address_gen(struct expression *expr)
+{
+	return show_expression(expr->unop);
+}
+
+static int show_load_gen(int bits, struct expression *expr, int addr)
+{
+	int new = new_pseudo();
+
+	printf("\tld.%d\t\tv%d,[v%d]\n", bits, new, addr);
+	return new;
+}
+
+static void show_store_gen(int bits, int value, struct expression *expr, int addr)
+{
+	/* FIXME!!! Bitfield store! */
+	printf("\tst.%d\t\tv%d,[v%d]\n", bits, value, addr);
+}
+
+static int show_assignment(struct expression *expr)
+{
+	struct expression *target = expr->left;
+	int val, addr, bits;
+
+	if (!expr->ctype)
+		return 0;
+
+	bits = expr->ctype->bit_size;
+	val = show_expression(expr->right);
+	addr = show_address_gen(target);
+	show_store_gen(bits, val, target, addr);
+	return val;
+}
+
+static int show_return_stmt(struct statement *stmt)
+{
+	struct expression *expr = stmt->ret_value;
+	struct symbol *target = stmt->ret_target;
+
+	if (expr && expr->ctype) {
+		int val = show_expression(expr);
+		int bits = expr->ctype->bit_size;
+		int addr = show_symbol_expr(target);
+		show_store_gen(bits, val, NULL, addr);
+	}
+	printf("\tret\t\t(%p)\n", target);
+	return 0;
+}
+
+static int show_initialization(struct symbol *sym, struct expression *expr)
+{
+	int val, addr, bits;
+
+	if (!expr->ctype)
+		return 0;
+
+	bits = expr->ctype->bit_size;
+	val = show_expression(expr);
+	addr = show_symbol_expr(sym);
+	// FIXME! The "target" expression is for bitfield store information.
+	// Leave it NULL, which works fine.
+	show_store_gen(bits, val, NULL, addr);
+	return 0;
+}
+
+static int show_access(struct expression *expr)
+{
+	int addr = show_address_gen(expr);
+	return show_load_gen(expr->ctype->bit_size, expr, addr);
+}
+
+static int show_inc_dec(struct expression *expr, int postop)
+{
+	int addr = show_address_gen(expr->unop);
+	int retval, new;
+	const char *opname = expr->op == SPECIAL_INCREMENT ? "add" : "sub";
+	int bits = expr->ctype->bit_size;
+
+	retval = show_load_gen(bits, expr->unop, addr);
+	new = retval;
+	if (postop)
+		new = new_pseudo();
+	printf("\t%s.%d\t\tv%d,v%d,$1\n", opname, bits, new, retval);
+	show_store_gen(bits, new, expr->unop, addr);
+	return retval;
+}	
+
+static int show_preop(struct expression *expr)
+{
+	/*
+	 * '*' is an lvalue access, and is fundamentally different
+	 * from an arithmetic operation. Maybe it should have an
+	 * expression type of its own..
+	 */
+	if (expr->op == '*')
+		return show_access(expr);
+	if (expr->op == SPECIAL_INCREMENT || expr->op == SPECIAL_DECREMENT)
+		return show_inc_dec(expr, 0);
+	return show_regular_preop(expr);
+}
+
+static int show_postop(struct expression *expr)
+{
+	return show_inc_dec(expr, 1);
+}	
+
+static int show_symbol_expr(struct symbol *sym)
+{
+	int new = new_pseudo();
+
+	if (sym->initializer && sym->initializer->type == EXPR_STRING)
+		return show_string_expr(sym->initializer);
+
+	if (sym->ctype.modifiers & (MOD_TOPLEVEL | MOD_EXTERN | MOD_STATIC)) {
+		printf("\tmovi.%d\t\tv%d,$%s\n", bits_in_pointer, new, show_ident(sym->ident));
+		return new;
+	}
+	if (sym->ctype.modifiers & MOD_ADDRESSABLE) {
+		printf("\taddi.%d\t\tv%d,vFP,$%lld\n", bits_in_pointer, new, sym->value);
+		return new;
+	}
+	printf("\taddi.%d\t\tv%d,vFP,$offsetof(%s:%p)\n", bits_in_pointer, new, show_ident(sym->ident), sym);
+	return new;
+}
+
+static int show_symbol_init(struct symbol *sym)
+{
+	struct expression *expr = sym->initializer;
+
+	if (expr) {
+		int val, addr, bits;
+
+		bits = expr->ctype->bit_size;
+		val = show_expression(expr);
+		addr = show_symbol_expr(sym);
+		show_store_gen(bits, val, NULL, addr);
+	}
+	return 0;
+}
+
+static int type_is_signed(struct symbol *sym)
+{
+	if (sym->type == SYM_NODE)
+		sym = sym->ctype.base_type;
+	if (sym->type == SYM_PTR)
+		return 0;
+	return !(sym->ctype.modifiers & MOD_UNSIGNED);
+}
+
+static int show_cast_expr(struct expression *expr)
+{
+	struct symbol *old_type, *new_type;
+	int op = show_expression(expr->cast_expression);
+	int oldbits, newbits;
+	int new, is_signed;
+
+	old_type = expr->cast_expression->ctype;
+	new_type = expr->cast_type;
+	
+	oldbits = old_type->bit_size;
+	newbits = new_type->bit_size;
+	if (oldbits >= newbits)
+		return op;
+	new = new_pseudo();
+	is_signed = type_is_signed(old_type);
+	if (is_signed) {
+		printf("\tsext%d.%d\tv%d,v%d\n", oldbits, newbits, new, op);
+	} else {
+		printf("\tandl.%d\t\tv%d,v%d,$%lu\n", newbits, new, op, (1UL << oldbits)-1);
+	}
+	return new;
+}
+
+static int show_value(struct expression *expr)
+{
+	int new = new_pseudo();
+	unsigned long long value = expr->value;
+
+	printf("\tmovi.%d\t\tv%d,$%llu\n", expr->ctype->bit_size, new, value);
+	return new;
+}
+
+static int show_fvalue(struct expression *expr)
+{
+	int new = new_pseudo();
+	long double value = expr->fvalue;
+
+	printf("\tmovf.%d\t\tv%d,$%Lf\n", expr->ctype->bit_size, new, value);
+	return new;
+}
+
+static int show_string_expr(struct expression *expr)
+{
+	int new = new_pseudo();
+
+	printf("\tmovi.%d\t\tv%d,&%s\n", bits_in_pointer, new, show_string(expr->string));
+	return new;
+}
+
+static int show_label_expr(struct expression *expr)
+{
+	int new = new_pseudo();
+	printf("\tmovi.%d\t\tv%d,.L%p\n",bits_in_pointer, new, expr->label_symbol);
+	return new;
+}
+
+static int show_conditional_expr(struct expression *expr)
+{
+	int cond = show_expression(expr->conditional);
+	int true = show_expression(expr->cond_true);
+	int false = show_expression(expr->cond_false);
+	int new = new_pseudo();
+
+	printf("[v%d]\tcmov.%d\t\tv%d,v%d,v%d\n", cond, expr->ctype->bit_size, new, true, false);
+	return new;
+}
+
+static int show_statement_expr(struct expression *expr)
+{
+	return show_statement(expr->statement);
+}
+
+static int show_position_expr(struct expression *expr, struct symbol *base)
+{
+	int new = show_expression(expr->init_expr);
+	struct symbol *ctype = expr->init_expr->ctype;
+	int bit_offset;
+
+	bit_offset = ctype ? ctype->bit_offset : -1;
+
+	printf("\tinsert v%d at [%d:%d] of %s\n", new,
+		expr->init_offset, bit_offset,
+		show_ident(base->ident));
+	return 0;
+}
+
+static int show_initializer_expr(struct expression *expr, struct symbol *ctype)
+{
+	struct expression *entry;
+
+	FOR_EACH_PTR(expr->expr_list, entry) {
+
+again:
+		// Nested initializers have their positions already
+		// recursively calculated - just output them too
+		if (entry->type == EXPR_INITIALIZER) {
+			show_initializer_expr(entry, ctype);
+			continue;
+		}
+
+		// Initializer indexes and identifiers should
+		// have been evaluated to EXPR_POS
+		if (entry->type == EXPR_IDENTIFIER) {
+			printf(" AT '%s':\n", show_ident(entry->expr_ident));
+			entry = entry->ident_expression;
+			goto again;
+		}
+			
+		if (entry->type == EXPR_INDEX) {
+			printf(" AT '%d..%d:\n", entry->idx_from, entry->idx_to);
+			entry = entry->idx_expression;
+			goto again;
+		}
+		if (entry->type == EXPR_POS) {
+			show_position_expr(entry, ctype);
+			continue;
+		}
+		show_initialization(ctype, entry);
+	} END_FOR_EACH_PTR(entry);
+	return 0;
+}
+
+int show_symbol_expr_init(struct symbol *sym)
+{
+	struct expression *expr = sym->initializer;
+
+	if (expr)
+		show_expression(expr);
+	return show_symbol_expr(sym);
+}
+
+/*
+ * Print out an expression. Return the pseudo that contains the
+ * variable.
+ */
+int show_expression(struct expression *expr)
+{
+	if (!expr)
+		return 0;
+
+	if (!expr->ctype) {
+		struct position *pos = &expr->pos;
+		printf("\tno type at %s:%d:%d\n",
+			stream_name(pos->stream),
+			pos->line, pos->pos);
+		return 0;
+	}
+		
+	switch (expr->type) {
+	case EXPR_CALL:
+		return show_call_expression(expr);
+		
+	case EXPR_ASSIGNMENT:
+		return show_assignment(expr);
+
+	case EXPR_COMMA:
+		return show_comma(expr);
+	case EXPR_BINOP:
+	case EXPR_COMPARE:
+	case EXPR_LOGICAL:
+		return show_binop(expr);
+	case EXPR_PREOP:
+		return show_preop(expr);
+	case EXPR_POSTOP:
+		return show_postop(expr);
+	case EXPR_SYMBOL:
+		return show_symbol_expr(expr->symbol);
+	case EXPR_DEREF:
+	case EXPR_SIZEOF:
+	case EXPR_PTRSIZEOF:
+	case EXPR_ALIGNOF:
+	case EXPR_OFFSETOF:
+		warning(expr->pos, "invalid expression after evaluation");
+		return 0;
+	case EXPR_CAST:
+	case EXPR_FORCE_CAST:
+	case EXPR_IMPLIED_CAST:
+		return show_cast_expr(expr);
+	case EXPR_VALUE:
+		return show_value(expr);
+	case EXPR_FVALUE:
+		return show_fvalue(expr);
+	case EXPR_STRING:
+		return show_string_expr(expr);
+	case EXPR_INITIALIZER:
+		return show_initializer_expr(expr, expr->ctype);
+	case EXPR_SELECT:
+	case EXPR_CONDITIONAL:
+		return show_conditional_expr(expr);
+	case EXPR_STATEMENT:
+		return show_statement_expr(expr);
+	case EXPR_LABEL:
+		return show_label_expr(expr);
+	case EXPR_SLICE:
+		return show_slice(expr);
+
+	// None of these should exist as direct expressions: they are only
+	// valid as sub-expressions of initializers.
+	case EXPR_POS:
+		warning(expr->pos, "unable to show plain initializer position expression");
+		return 0;
+	case EXPR_IDENTIFIER:
+		warning(expr->pos, "unable to show identifier expression");
+		return 0;
+	case EXPR_INDEX:
+		warning(expr->pos, "unable to show index expression");
+		return 0;
+	case EXPR_TYPE:
+		warning(expr->pos, "unable to show type expression");
+		return 0;
+	}
+	return 0;
+}
--- /dev/null	Fri Dec 21 15:00:15 2018
+++ new/usr/src/tools/smatch/src/simplify.c	Fri Dec 21 15:00:15 2018
@@ -0,0 +1,1227 @@
+/*
+ * Simplify - do instruction simplification before CSE
+ *
+ * Copyright (C) 2004 Linus Torvalds
+ */
+
+#include <assert.h>
+
+#include "parse.h"
+#include "expression.h"
+#include "linearize.h"
+#include "flow.h"
+#include "symbol.h"
+
+/* Find the trivial parent for a phi-source */
+static struct basic_block *phi_parent(struct basic_block *source, pseudo_t pseudo)
+{
+	/* Can't go upwards if the pseudo is defined in the bb it came from.. */
+	if (pseudo->type == PSEUDO_REG) {
+		struct instruction *def = pseudo->def;
+		if (def->bb == source)
+			return source;
+	}
+	if (bb_list_size(source->children) != 1 || bb_list_size(source->parents) != 1)
+		return source;
+	return first_basic_block(source->parents);
+}
+
+/*
+ * Copy the phi-node's phisrcs into to given array.
+ * Returns 0 if the the list contained the expected
+ * number of element, a positive number if there was
+ * more than expected and a negative one if less.
+ *
+ * Note: we can't reuse a function like linearize_ptr_list()
+ * because any VOIDs in the phi-list must be ignored here
+ * as in this context they mean 'entry has been removed'.
+ */
+static int get_phisources(struct instruction *sources[], int nbr, struct instruction *insn)
+{
+	pseudo_t phi;
+	int i = 0;
+
+	assert(insn->opcode == OP_PHI);
+	FOR_EACH_PTR(insn->phi_list, phi) {
+		struct instruction *def;
+		if (phi == VOID)
+			continue;
+		if (i >= nbr)
+			return 1;
+		def = phi->def;
+		assert(def->opcode == OP_PHISOURCE);
+		sources[i++] = def;
+	} END_FOR_EACH_PTR(phi);
+	return i - nbr;
+}
+
+static int if_convert_phi(struct instruction *insn)
+{
+	struct instruction *array[2];
+	struct basic_block *parents[3];
+	struct basic_block *bb, *bb1, *bb2, *source;
+	struct instruction *br;
+	pseudo_t p1, p2;
+
+	bb = insn->bb;
+	if (get_phisources(array, 2, insn))
+		return 0;
+	if (linearize_ptr_list((struct ptr_list *)bb->parents, (void **)parents, 3) != 2)
+		return 0;
+	p1 = array[0]->src1;
+	bb1 = array[0]->bb;
+	p2 = array[1]->src1;
+	bb2 = array[1]->bb;
+
+	/* Only try the simple "direct parents" case */
+	if ((bb1 != parents[0] || bb2 != parents[1]) &&
+	    (bb1 != parents[1] || bb2 != parents[0]))
+		return 0;
+
+	/*
+	 * See if we can find a common source for this..
+	 */
+	source = phi_parent(bb1, p1);
+	if (source != phi_parent(bb2, p2))
+		return 0;
+
+	/*
+	 * Cool. We now know that 'source' is the exclusive
+	 * parent of both phi-nodes, so the exit at the
+	 * end of it fully determines which one it is, and
+	 * we can turn it into a select.
+	 *
+	 * HOWEVER, right now we only handle regular
+	 * conditional branches. No multijumps or computed
+	 * stuff. Verify that here.
+	 */
+	br = last_instruction(source->insns);
+	if (!br || br->opcode != OP_CBR)
+		return 0;
+
+	assert(br->cond);
+	assert(br->bb_false);
+
+	/*
+	 * We're in business. Match up true/false with p1/p2.
+	 */
+	if (br->bb_true == bb2 || br->bb_false == bb1) {
+		pseudo_t p = p1;
+		p1 = p2;
+		p2 = p;
+	}
+
+	/*
+	 * OK, we can now replace that last
+	 *
+	 *	br cond, a, b
+	 *
+	 * with the sequence
+	 *
+	 *	setcc cond
+	 *	select pseudo, p1, p2
+	 *	br cond, a, b
+	 *
+	 * and remove the phi-node. If it then
+	 * turns out that 'a' or 'b' is entirely
+	 * empty (common case), and now no longer
+	 * a phi-source, we'll be able to simplify
+	 * the conditional branch too.
+	 */
+	insert_select(source, br, insn, p1, p2);
+	kill_instruction(insn);
+	return REPEAT_CSE;
+}
+
+static int clean_up_phi(struct instruction *insn)
+{
+	pseudo_t phi;
+	struct instruction *last;
+	int same;
+
+	last = NULL;
+	same = 1;
+	FOR_EACH_PTR(insn->phi_list, phi) {
+		struct instruction *def;
+		if (phi == VOID)
+			continue;
+		def = phi->def;
+		if (def->src1 == VOID || !def->bb)
+			continue;
+		if (last) {
+			if (last->src1 != def->src1)
+				same = 0;
+			continue;
+		}
+		last = def;
+	} END_FOR_EACH_PTR(phi);
+
+	if (same) {
+		pseudo_t pseudo = last ? last->src1 : VOID;
+		convert_instruction_target(insn, pseudo);
+		kill_instruction(insn);
+		return REPEAT_CSE;
+	}
+
+	return if_convert_phi(insn);
+}
+
+static int delete_pseudo_user_list_entry(struct pseudo_user_list **list, pseudo_t *entry, int count)
+{
+	struct pseudo_user *pu;
+
+	FOR_EACH_PTR(*list, pu) {
+		if (pu->userp == entry) {
+			MARK_CURRENT_DELETED(pu);
+			if (!--count)
+				goto out;
+		}
+	} END_FOR_EACH_PTR(pu);
+	assert(count <= 0);
+out:
+	if (ptr_list_size((struct ptr_list *) *list) == 0)
+		*list = NULL;
+	return count;
+}
+
+static inline void remove_usage(pseudo_t p, pseudo_t *usep)
+{
+	if (has_use_list(p)) {
+		delete_pseudo_user_list_entry(&p->users, usep, 1);
+		if (!p->users)
+			kill_instruction(p->def);
+	}
+}
+
+void kill_use(pseudo_t *usep)
+{
+	if (usep) {
+		pseudo_t p = *usep;
+		*usep = VOID;
+		remove_usage(p, usep);
+	}
+}
+
+static void kill_use_list(struct pseudo_list *list)
+{
+	pseudo_t p;
+	FOR_EACH_PTR(list, p) {
+		if (p == VOID)
+			continue;
+		kill_use(THIS_ADDRESS(p));
+	} END_FOR_EACH_PTR(p);
+}
+
+/*
+ * kill an instruction:
+ * - remove it from its bb
+ * - remove the usage of all its operands
+ * If forse is zero, the normal case, the function only for
+ * instructions free of (possible) side-effects. Otherwise
+ * the function does that unconditionally (must only be used
+ * for unreachable instructions.
+ */
+void kill_insn(struct instruction *insn, int force)
+{
+	if (!insn || !insn->bb)
+		return;
+
+	switch (insn->opcode) {
+	case OP_SEL:
+	case OP_RANGE:
+		kill_use(&insn->src3);
+		/* fall through */
+
+	case OP_BINARY ... OP_BINCMP_END:
+		kill_use(&insn->src2);
+		/* fall through */
+
+	case OP_CAST:
+	case OP_SCAST:
+	case OP_FPCAST:
+	case OP_PTRCAST:
+	case OP_SETVAL:
+	case OP_NOT: case OP_NEG:
+	case OP_SLICE:
+		kill_use(&insn->src1);
+		break;
+
+	case OP_PHI:
+		kill_use_list(insn->phi_list);
+		break;
+	case OP_PHISOURCE:
+		kill_use(&insn->phi_src);
+		break;
+
+	case OP_SYMADDR:
+		repeat_phase |= REPEAT_SYMBOL_CLEANUP;
+		break;
+
+	case OP_CBR:
+	case OP_COMPUTEDGOTO:
+		kill_use(&insn->cond);
+		break;
+
+	case OP_CALL:
+		if (!force) {
+			/* a "pure" function can be killed too */
+			if (!(insn->func->type == PSEUDO_SYM))
+				return;
+			if (!(insn->func->sym->ctype.modifiers & MOD_PURE))
+				return;
+		}
+		kill_use_list(insn->arguments);
+		if (insn->func->type == PSEUDO_REG)
+			kill_use(&insn->func);
+		break;
+
+	case OP_LOAD:
+		if (!force && insn->type->ctype.modifiers & MOD_VOLATILE)
+			return;
+		kill_use(&insn->src);
+		break;
+
+	case OP_STORE:
+		if (!force)
+			return;
+		kill_use(&insn->src);
+		kill_use(&insn->target);
+		break;
+
+	case OP_ENTRY:
+		/* ignore */
+		return;
+
+	case OP_BR:
+	default:
+		break;
+	}
+
+	insn->bb = NULL;
+	repeat_phase |= REPEAT_CSE;
+	return;
+}
+
+/*
+ * Kill trivially dead instructions
+ */
+static int dead_insn(struct instruction *insn, pseudo_t *src1, pseudo_t *src2, pseudo_t *src3)
+{
+	struct pseudo_user *pu;
+	FOR_EACH_PTR(insn->target->users, pu) {
+		if (*pu->userp != VOID)
+			return 0;
+	} END_FOR_EACH_PTR(pu);
+
+	insn->bb = NULL;
+	kill_use(src1);
+	kill_use(src2);
+	kill_use(src3);
+	return REPEAT_CSE;
+}
+
+static inline int constant(pseudo_t pseudo)
+{
+	return pseudo->type == PSEUDO_VAL;
+}
+
+static int replace_with_pseudo(struct instruction *insn, pseudo_t pseudo)
+{
+	convert_instruction_target(insn, pseudo);
+
+	switch (insn->opcode) {
+	case OP_SEL:
+	case OP_RANGE:
+		kill_use(&insn->src3);
+	case OP_BINARY ... OP_BINCMP_END:
+		kill_use(&insn->src2);
+	case OP_NOT:
+	case OP_NEG:
+	case OP_SYMADDR:
+	case OP_CAST:
+	case OP_SCAST:
+	case OP_FPCAST:
+	case OP_PTRCAST:
+		kill_use(&insn->src1);
+		break;
+
+	default:
+		assert(0);
+	}
+	insn->bb = NULL;
+	return REPEAT_CSE;
+}
+
+unsigned int value_size(long long value)
+{
+	value >>= 8;
+	if (!value)
+		return 8;
+	value >>= 8;
+	if (!value)
+		return 16;
+	value >>= 16;
+	if (!value)
+		return 32;
+	return 64;
+}
+
+/*
+ * Try to determine the maximum size of bits in a pseudo.
+ *
+ * Right now this only follow casts and constant values, but we
+ * could look at things like logical 'and' instructions etc.
+ */
+static unsigned int operand_size(struct instruction *insn, pseudo_t pseudo)
+{
+	unsigned int size = insn->size;
+
+	if (pseudo->type == PSEUDO_REG) {
+		struct instruction *src = pseudo->def;
+		if (src && src->opcode == OP_CAST && src->orig_type) {
+			unsigned int orig_size = src->orig_type->bit_size;
+			if (orig_size < size)
+				size = orig_size;
+		}
+	}
+	if (pseudo->type == PSEUDO_VAL) {
+		unsigned int orig_size = value_size(pseudo->value);
+		if (orig_size < size)
+			size = orig_size;
+	}
+	return size;
+}
+
+static int simplify_asr(struct instruction *insn, pseudo_t pseudo, long long value)
+{
+	unsigned int size = operand_size(insn, pseudo);
+
+	if (value >= size) {
+		warning(insn->pos, "right shift by bigger than source value");
+		return replace_with_pseudo(insn, value_pseudo(insn->type, 0));
+	}
+	if (!value)
+		return replace_with_pseudo(insn, pseudo);
+	return 0;
+}
+
+static int simplify_mul_div(struct instruction *insn, long long value)
+{
+	unsigned long long sbit = 1ULL << (insn->size - 1);
+	unsigned long long bits = sbit | (sbit - 1);
+
+	if (value == 1)
+		return replace_with_pseudo(insn, insn->src1);
+
+	switch (insn->opcode) {
+	case OP_MULS:
+	case OP_MULU:
+		if (value == 0)
+			return replace_with_pseudo(insn, insn->src2);
+	/* Fall through */
+	case OP_DIVS:
+		if (!(value & sbit))	// positive
+			break;
+
+		value |= ~bits;
+		if (value == -1) {
+			insn->opcode = OP_NEG;
+			return REPEAT_CSE;
+		}
+	}
+
+	return 0;
+}
+
+static int compare_opcode(int opcode, int inverse)
+{
+	if (!inverse)
+		return opcode;
+
+	switch (opcode) {
+	case OP_SET_EQ:	return OP_SET_NE;
+	case OP_SET_NE:	return OP_SET_EQ;
+
+	case OP_SET_LT:	return OP_SET_GE;
+	case OP_SET_LE:	return OP_SET_GT;
+	case OP_SET_GT:	return OP_SET_LE;
+	case OP_SET_GE:	return OP_SET_LT;
+
+	case OP_SET_A:	return OP_SET_BE;
+	case OP_SET_AE:	return OP_SET_B;
+	case OP_SET_B:	return OP_SET_AE;
+	case OP_SET_BE:	return OP_SET_A;
+
+	default:
+		return opcode;
+	}
+}
+
+static int simplify_seteq_setne(struct instruction *insn, long long value)
+{
+	pseudo_t old = insn->src1;
+	struct instruction *def = old->def;
+	pseudo_t src1, src2;
+	int inverse;
+	int opcode;
+
+	if (value != 0 && value != 1)
+		return 0;
+
+	if (!def)
+		return 0;
+
+	inverse = (insn->opcode == OP_SET_NE) == value;
+	opcode = def->opcode;
+	switch (opcode) {
+	case OP_BINCMP ... OP_BINCMP_END:
+		// Convert:
+		//	setcc.n	%t <- %a, %b
+		//	setne.m %r <- %t, $0
+		// into:
+		//	setcc.n	%t <- %a, %b
+		//	setcc.m %r <- %a, $b
+		// and similar for setne/eq ... 0/1
+		src1 = def->src1;
+		src2 = def->src2;
+		insn->opcode = compare_opcode(opcode, inverse);
+		use_pseudo(insn, src1, &insn->src1);
+		use_pseudo(insn, src2, &insn->src2);
+		remove_usage(old, &insn->src1);
+		return REPEAT_CSE;
+
+	default:
+		return 0;
+	}
+}
+
+static int simplify_constant_rightside(struct instruction *insn)
+{
+	long long value = insn->src2->value;
+
+	switch (insn->opcode) {
+	case OP_OR_BOOL:
+		if (value == 1)
+			return replace_with_pseudo(insn, insn->src2);
+		goto case_neutral_zero;
+
+	case OP_SUB:
+		if (value) {
+			insn->opcode = OP_ADD;
+			insn->src2 = value_pseudo(insn->type, -value);
+			return REPEAT_CSE;
+		}
+	/* Fall through */
+	case OP_ADD:
+	case OP_OR: case OP_XOR:
+	case OP_SHL:
+	case OP_LSR:
+	case_neutral_zero:
+		if (!value)
+			return replace_with_pseudo(insn, insn->src1);
+		return 0;
+	case OP_ASR:
+		return simplify_asr(insn, insn->src1, value);
+
+	case OP_MODU: case OP_MODS:
+		if (value == 1)
+			return replace_with_pseudo(insn, value_pseudo(insn->type, 0));
+		return 0;
+
+	case OP_DIVU: case OP_DIVS:
+	case OP_MULU: case OP_MULS:
+		return simplify_mul_div(insn, value);
+
+	case OP_AND_BOOL:
+		if (value == 1)
+			return replace_with_pseudo(insn, insn->src1);
+	/* Fall through */
+	case OP_AND:
+		if (!value)
+			return replace_with_pseudo(insn, insn->src2);
+		return 0;
+
+	case OP_SET_NE:
+	case OP_SET_EQ:
+		return simplify_seteq_setne(insn, value);
+	}
+	return 0;
+}
+
+static int simplify_constant_leftside(struct instruction *insn)
+{
+	long long value = insn->src1->value;
+
+	switch (insn->opcode) {
+	case OP_ADD: case OP_OR: case OP_XOR:
+		if (!value)
+			return replace_with_pseudo(insn, insn->src2);
+		return 0;
+
+	case OP_SHL:
+	case OP_LSR: case OP_ASR:
+	case OP_AND:
+	case OP_MULU: case OP_MULS:
+		if (!value)
+			return replace_with_pseudo(insn, insn->src1);
+		return 0;
+	}
+	return 0;
+}
+
+static int simplify_constant_binop(struct instruction *insn)
+{
+	/* FIXME! Verify signs and sizes!! */
+	long long left = insn->src1->value;
+	long long right = insn->src2->value;
+	unsigned long long ul, ur;
+	long long res, mask, bits;
+
+	mask = 1ULL << (insn->size-1);
+	bits = mask | (mask-1);
+
+	if (left & mask)
+		left |= ~bits;
+	if (right & mask)
+		right |= ~bits;
+	ul = left & bits;
+	ur = right & bits;
+
+	switch (insn->opcode) {
+	case OP_ADD:
+		res = left + right;
+		break;
+	case OP_SUB:
+		res = left - right;
+		break;
+	case OP_MULU:
+		res = ul * ur;
+		break;
+	case OP_MULS:
+		res = left * right;
+		break;
+	case OP_DIVU:
+		if (!ur)
+			return 0;
+		res = ul / ur;
+		break;
+	case OP_DIVS:
+		if (!right)
+			return 0;
+		if (left == mask && right == -1)
+			return 0;
+		res = left / right;
+		break;
+	case OP_MODU:
+		if (!ur)
+			return 0;
+		res = ul % ur;
+		break;
+	case OP_MODS:
+		if (!right)
+			return 0;
+		if (left == mask && right == -1)
+			return 0;
+		res = left % right;
+		break;
+	case OP_SHL:
+		res = left << right;
+		break;
+	case OP_LSR:
+		res = ul >> ur;
+		break;
+	case OP_ASR:
+		res = left >> right;
+		break;
+       /* Logical */
+	case OP_AND:
+		res = left & right;
+		break;
+	case OP_OR:
+		res = left | right;
+		break;
+	case OP_XOR:
+		res = left ^ right;
+		break;
+	case OP_AND_BOOL:
+		res = left && right;
+		break;
+	case OP_OR_BOOL:
+		res = left || right;
+		break;
+			       
+	/* Binary comparison */
+	case OP_SET_EQ:
+		res = left == right;
+		break;
+	case OP_SET_NE:
+		res = left != right;
+		break;
+	case OP_SET_LE:
+		res = left <= right;
+		break;
+	case OP_SET_GE:
+		res = left >= right;
+		break;
+	case OP_SET_LT:
+		res = left < right;
+		break;
+	case OP_SET_GT:
+		res = left > right;
+		break;
+	case OP_SET_B:
+		res = ul < ur;
+		break;
+	case OP_SET_A:
+		res = ul > ur;
+		break;
+	case OP_SET_BE:
+		res = ul <= ur;
+		break;
+	case OP_SET_AE:
+		res = ul >= ur;
+		break;
+	default:
+		return 0;
+	}
+	res &= bits;
+
+	replace_with_pseudo(insn, value_pseudo(insn->type, res));
+	return REPEAT_CSE;
+}
+
+static int simplify_binop_same_args(struct instruction *insn, pseudo_t arg)
+{
+	switch (insn->opcode) {
+	case OP_SET_NE:
+	case OP_SET_LT: case OP_SET_GT:
+	case OP_SET_B:  case OP_SET_A:
+		if (Wtautological_compare)
+			warning(insn->pos, "self-comparison always evaluates to false");
+	case OP_SUB:
+	case OP_XOR:
+		return replace_with_pseudo(insn, value_pseudo(insn->type, 0));
+
+	case OP_SET_EQ:
+	case OP_SET_LE: case OP_SET_GE:
+	case OP_SET_BE: case OP_SET_AE:
+		if (Wtautological_compare)
+			warning(insn->pos, "self-comparison always evaluates to true");
+		return replace_with_pseudo(insn, value_pseudo(insn->type, 1));
+
+	case OP_AND:
+	case OP_OR:
+		return replace_with_pseudo(insn, arg);
+
+	case OP_AND_BOOL:
+	case OP_OR_BOOL:
+		remove_usage(arg, &insn->src2);
+		insn->src2 = value_pseudo(insn->type, 0);
+		insn->opcode = OP_SET_NE;
+		return REPEAT_CSE;
+
+	default:
+		break;
+	}
+
+	return 0;
+}
+
+static int simplify_binop(struct instruction *insn)
+{
+	if (dead_insn(insn, &insn->src1, &insn->src2, NULL))
+		return REPEAT_CSE;
+	if (constant(insn->src1)) {
+		if (constant(insn->src2))
+			return simplify_constant_binop(insn);
+		return simplify_constant_leftside(insn);
+	}
+	if (constant(insn->src2))
+		return simplify_constant_rightside(insn);
+	if (insn->src1 == insn->src2)
+		return simplify_binop_same_args(insn, insn->src1);
+	return 0;
+}
+
+static void switch_pseudo(struct instruction *insn1, pseudo_t *pp1, struct instruction *insn2, pseudo_t *pp2)
+{
+	pseudo_t p1 = *pp1, p2 = *pp2;
+
+	use_pseudo(insn1, p2, pp1);
+	use_pseudo(insn2, p1, pp2);
+	remove_usage(p1, pp1);
+	remove_usage(p2, pp2);
+}
+
+static int canonical_order(pseudo_t p1, pseudo_t p2)
+{
+	/* symbol/constants on the right */
+	if (p1->type == PSEUDO_VAL)
+		return p2->type == PSEUDO_VAL;
+
+	if (p1->type == PSEUDO_SYM)
+		return p2->type == PSEUDO_SYM || p2->type == PSEUDO_VAL;
+
+	return 1;
+}
+
+static int simplify_commutative_binop(struct instruction *insn)
+{
+	if (!canonical_order(insn->src1, insn->src2)) {
+		switch_pseudo(insn, &insn->src1, insn, &insn->src2);
+		return REPEAT_CSE;
+	}
+	return 0;
+}
+
+static inline int simple_pseudo(pseudo_t pseudo)
+{
+	return pseudo->type == PSEUDO_VAL || pseudo->type == PSEUDO_SYM;
+}
+
+static int simplify_associative_binop(struct instruction *insn)
+{
+	struct instruction *def;
+	pseudo_t pseudo = insn->src1;
+
+	if (!simple_pseudo(insn->src2))
+		return 0;
+	if (pseudo->type != PSEUDO_REG)
+		return 0;
+	def = pseudo->def;
+	if (def == insn)
+		return 0;
+	if (def->opcode != insn->opcode)
+		return 0;
+	if (!simple_pseudo(def->src2))
+		return 0;
+	if (ptr_list_size((struct ptr_list *)def->target->users) != 1)
+		return 0;
+	switch_pseudo(def, &def->src1, insn, &insn->src2);
+	return REPEAT_CSE;
+}
+
+static int simplify_constant_unop(struct instruction *insn)
+{
+	long long val = insn->src1->value;
+	long long res, mask;
+
+	switch (insn->opcode) {
+	case OP_NOT:
+		res = ~val;
+		break;
+	case OP_NEG:
+		res = -val;
+		break;
+	default:
+		return 0;
+	}
+	mask = 1ULL << (insn->size-1);
+	res &= mask | (mask-1);
+	
+	replace_with_pseudo(insn, value_pseudo(insn->type, res));
+	return REPEAT_CSE;
+}
+
+static int simplify_unop(struct instruction *insn)
+{
+	if (dead_insn(insn, &insn->src1, NULL, NULL))
+		return REPEAT_CSE;
+	if (constant(insn->src1))
+		return simplify_constant_unop(insn);
+
+	switch (insn->opcode) {
+		struct instruction *def;
+
+	case OP_NOT:
+		def = insn->src->def;
+		if (def && def->opcode == OP_NOT)
+			return replace_with_pseudo(insn, def->src);
+		break;
+	case OP_NEG:
+		def = insn->src->def;
+		if (def && def->opcode == OP_NEG)
+			return replace_with_pseudo(insn, def->src);
+		break;
+	default:
+		return 0;
+	}
+	return 0;
+}
+
+static int simplify_one_memop(struct instruction *insn, pseudo_t orig)
+{
+	pseudo_t addr = insn->src;
+	pseudo_t new, off;
+
+	if (addr->type == PSEUDO_REG) {
+		struct instruction *def = addr->def;
+		if (def->opcode == OP_SYMADDR && def->src) {
+			kill_use(&insn->src);
+			use_pseudo(insn, def->src, &insn->src);
+			return REPEAT_CSE | REPEAT_SYMBOL_CLEANUP;
+		}
+		if (def->opcode == OP_ADD) {
+			new = def->src1;
+			off = def->src2;
+			if (constant(off))
+				goto offset;
+			new = off;
+			off = def->src1;
+			if (constant(off))
+				goto offset;
+			return 0;
+		}
+	}
+	return 0;
+
+offset:
+	/* Invalid code */
+	if (new == orig) {
+		if (new == VOID)
+			return 0;
+		/*
+		 * If some BB have been removed it is possible that this
+		 * memop is in fact part of a dead BB. In this case
+		 * we must not warn since nothing is wrong.
+		 * If not part of a dead BB this will be redone after
+		 * the BBs have been cleaned up.
+		 */
+		if (repeat_phase & REPEAT_CFG_CLEANUP)
+			return 0;
+		new = VOID;
+		warning(insn->pos, "crazy programmer");
+	}
+	insn->offset += off->value;
+	use_pseudo(insn, new, &insn->src);
+	remove_usage(addr, &insn->src);
+	return REPEAT_CSE | REPEAT_SYMBOL_CLEANUP;
+}
+
+/*
+ * We walk the whole chain of adds/subs backwards. That's not
+ * only more efficient, but it allows us to find loops.
+ */
+static int simplify_memop(struct instruction *insn)
+{
+	int one, ret = 0;
+	pseudo_t orig = insn->src;
+
+	do {
+		one = simplify_one_memop(insn, orig);
+		ret |= one;
+	} while (one);
+	return ret;
+}
+
+static long long get_cast_value(long long val, int old_size, int new_size, int sign)
+{
+	long long mask;
+
+	if (sign && new_size > old_size) {
+		mask = 1 << (old_size-1);
+		if (val & mask)
+			val |= ~(mask | (mask-1));
+	}
+	mask = 1 << (new_size-1);
+	return val & (mask | (mask-1));
+}
+
+static int simplify_cast(struct instruction *insn)
+{
+	struct symbol *orig_type;
+	int orig_size, size;
+	pseudo_t src;
+
+	if (dead_insn(insn, &insn->src, NULL, NULL))
+		return REPEAT_CSE;
+
+	orig_type = insn->orig_type;
+	if (!orig_type)
+		return 0;
+
+	/* Keep casts with pointer on either side (not only case of OP_PTRCAST) */
+	if (is_ptr_type(orig_type) || is_ptr_type(insn->type))
+		return 0;
+
+	orig_size = orig_type->bit_size;
+	size = insn->size;
+	src = insn->src;
+
+	/* A cast of a constant? */
+	if (constant(src)) {
+		int sign = orig_type->ctype.modifiers & MOD_SIGNED;
+		long long val = get_cast_value(src->value, orig_size, size, sign);
+		src = value_pseudo(orig_type, val);
+		goto simplify;
+	}
+
+	/* A cast of a "and" might be a no-op.. */
+	if (src->type == PSEUDO_REG) {
+		struct instruction *def = src->def;
+		if (def->opcode == OP_AND && def->size >= size) {
+			pseudo_t val = def->src2;
+			if (val->type == PSEUDO_VAL) {
+				unsigned long long value = val->value;
+				if (!(value >> (size-1)))
+					goto simplify;
+			}
+		}
+	}
+
+	if (size == orig_size) {
+		int op = (orig_type->ctype.modifiers & MOD_SIGNED) ? OP_SCAST : OP_CAST;
+		if (insn->opcode == op)
+			goto simplify;
+		if (insn->opcode == OP_FPCAST && is_float_type(orig_type))
+			goto simplify;
+	}
+
+	return 0;
+
+simplify:
+	return replace_with_pseudo(insn, src);
+}
+
+static int simplify_select(struct instruction *insn)
+{
+	pseudo_t cond, src1, src2;
+
+	if (dead_insn(insn, &insn->src1, &insn->src2, &insn->src3))
+		return REPEAT_CSE;
+
+	cond = insn->src1;
+	src1 = insn->src2;
+	src2 = insn->src3;
+	if (constant(cond) || src1 == src2) {
+		pseudo_t *kill, take;
+		kill_use(&insn->src1);
+		take = cond->value ? src1 : src2;
+		kill = cond->value ? &insn->src3 : &insn->src2;
+		kill_use(kill);
+		replace_with_pseudo(insn, take);
+		return REPEAT_CSE;
+	}
+	if (constant(src1) && constant(src2)) {
+		long long val1 = src1->value;
+		long long val2 = src2->value;
+
+		/* The pair 0/1 is special - replace with SETNE/SETEQ */
+		if ((val1 | val2) == 1) {
+			int opcode = OP_SET_EQ;
+			if (val1) {
+				src1 = src2;
+				opcode = OP_SET_NE;
+			}
+			insn->opcode = opcode;
+			/* insn->src1 is already cond */
+			insn->src2 = src1; /* Zero */
+			return REPEAT_CSE;
+		}
+	}
+	return 0;
+}
+
+static int is_in_range(pseudo_t src, long long low, long long high)
+{
+	long long value;
+
+	switch (src->type) {
+	case PSEUDO_VAL:
+		value = src->value;
+		return value >= low && value <= high;
+	default:
+		return 0;
+	}
+}
+
+static int simplify_range(struct instruction *insn)
+{
+	pseudo_t src1, src2, src3;
+
+	src1 = insn->src1;
+	src2 = insn->src2;
+	src3 = insn->src3;
+	if (src2->type != PSEUDO_VAL || src3->type != PSEUDO_VAL)
+		return 0;
+	if (is_in_range(src1, src2->value, src3->value)) {
+		kill_instruction(insn);
+		return REPEAT_CSE;
+	}
+	return 0;
+}
+
+/*
+ * Simplify "set_ne/eq $0 + br"
+ */
+static int simplify_cond_branch(struct instruction *br, pseudo_t cond, struct instruction *def, pseudo_t *pp)
+{
+	use_pseudo(br, *pp, &br->cond);
+	remove_usage(cond, &br->cond);
+	if (def->opcode == OP_SET_EQ) {
+		struct basic_block *true = br->bb_true;
+		struct basic_block *false = br->bb_false;
+		br->bb_false = true;
+		br->bb_true = false;
+	}
+	return REPEAT_CSE;
+}
+
+static int simplify_branch(struct instruction *insn)
+{
+	pseudo_t cond = insn->cond;
+
+	/* Constant conditional */
+	if (constant(cond)) {
+		insert_branch(insn->bb, insn, cond->value ? insn->bb_true : insn->bb_false);
+		return REPEAT_CSE;
+	}
+
+	/* Same target? */
+	if (insn->bb_true == insn->bb_false) {
+		struct basic_block *bb = insn->bb;
+		struct basic_block *target = insn->bb_false;
+		remove_bb_from_list(&target->parents, bb, 1);
+		remove_bb_from_list(&bb->children, target, 1);
+		insn->bb_false = NULL;
+		kill_use(&insn->cond);
+		insn->cond = NULL;
+		insn->opcode = OP_BR;
+		return REPEAT_CSE;
+	}
+
+	/* Conditional on a SETNE $0 or SETEQ $0 */
+	if (cond->type == PSEUDO_REG) {
+		struct instruction *def = cond->def;
+
+		if (def->opcode == OP_SET_NE || def->opcode == OP_SET_EQ) {
+			if (constant(def->src1) && !def->src1->value)
+				return simplify_cond_branch(insn, cond, def, &def->src2);
+			if (constant(def->src2) && !def->src2->value)
+				return simplify_cond_branch(insn, cond, def, &def->src1);
+		}
+		if (def->opcode == OP_SEL) {
+			if (constant(def->src2) && constant(def->src3)) {
+				long long val1 = def->src2->value;
+				long long val2 = def->src3->value;
+				if (!val1 && !val2) {
+					insert_branch(insn->bb, insn, insn->bb_false);
+					return REPEAT_CSE;
+				}
+				if (val1 && val2) {
+					insert_branch(insn->bb, insn, insn->bb_true);
+					return REPEAT_CSE;
+				}
+				if (val2) {
+					struct basic_block *true = insn->bb_true;
+					struct basic_block *false = insn->bb_false;
+					insn->bb_false = true;
+					insn->bb_true = false;
+				}
+				use_pseudo(insn, def->src1, &insn->cond);
+				remove_usage(cond, &insn->cond);
+				return REPEAT_CSE;
+			}
+		}
+		if (def->opcode == OP_CAST || def->opcode == OP_SCAST) {
+			int orig_size = def->orig_type ? def->orig_type->bit_size : 0;
+			if (def->size > orig_size) {
+				use_pseudo(insn, def->src, &insn->cond);
+				remove_usage(cond, &insn->cond);
+				return REPEAT_CSE;
+			}
+		}
+	}
+	return 0;
+}
+
+static int simplify_switch(struct instruction *insn)
+{
+	pseudo_t cond = insn->cond;
+	long long val;
+	struct multijmp *jmp;
+
+	if (!constant(cond))
+		return 0;
+	val = insn->cond->value;
+
+	FOR_EACH_PTR(insn->multijmp_list, jmp) {
+		/* Default case */
+		if (jmp->begin > jmp->end)
+			goto found;
+		if (val >= jmp->begin && val <= jmp->end)
+			goto found;
+	} END_FOR_EACH_PTR(jmp);
+	warning(insn->pos, "Impossible case statement");
+	return 0;
+
+found:
+	insert_branch(insn->bb, insn, jmp->target);
+	return REPEAT_CSE;
+}
+
+int simplify_instruction(struct instruction *insn)
+{
+	if (!insn->bb)
+		return 0;
+	switch (insn->opcode) {
+	case OP_ADD: case OP_MULS:
+	case OP_AND: case OP_OR: case OP_XOR:
+	case OP_AND_BOOL: case OP_OR_BOOL:
+		if (simplify_binop(insn))
+			return REPEAT_CSE;
+		if (simplify_commutative_binop(insn))
+			return REPEAT_CSE;
+		return simplify_associative_binop(insn);
+
+	case OP_MULU:
+	case OP_SET_EQ: case OP_SET_NE:
+		if (simplify_binop(insn))
+			return REPEAT_CSE;
+		return simplify_commutative_binop(insn);
+
+	case OP_SUB:
+	case OP_DIVU: case OP_DIVS:
+	case OP_MODU: case OP_MODS:
+	case OP_SHL:
+	case OP_LSR: case OP_ASR:
+	case OP_SET_LE: case OP_SET_GE:
+	case OP_SET_LT: case OP_SET_GT:
+	case OP_SET_B:  case OP_SET_A:
+	case OP_SET_BE: case OP_SET_AE:
+		return simplify_binop(insn);
+
+	case OP_NOT: case OP_NEG:
+		return simplify_unop(insn);
+	case OP_LOAD: case OP_STORE:
+		return simplify_memop(insn);
+	case OP_SYMADDR:
+		if (dead_insn(insn, NULL, NULL, NULL))
+			return REPEAT_CSE | REPEAT_SYMBOL_CLEANUP;
+		return replace_with_pseudo(insn, insn->symbol);
+	case OP_CAST:
+	case OP_SCAST:
+	case OP_FPCAST:
+	case OP_PTRCAST:
+		return simplify_cast(insn);
+	case OP_PHI:
+		if (dead_insn(insn, NULL, NULL, NULL)) {
+			kill_use_list(insn->phi_list);
+			return REPEAT_CSE;
+		}
+		return clean_up_phi(insn);
+	case OP_PHISOURCE:
+		if (dead_insn(insn, &insn->phi_src, NULL, NULL))
+			return REPEAT_CSE;
+		break;
+	case OP_SEL:
+		return simplify_select(insn);
+	case OP_CBR:
+		return simplify_branch(insn);
+	case OP_SWITCH:
+		return simplify_switch(insn);
+	case OP_RANGE:
+		return simplify_range(insn);
+	}
+	return 0;
+}
--- /dev/null	Fri Dec 21 15:00:15 2018
+++ new/usr/src/tools/smatch/src/smatch.c	Fri Dec 21 15:00:15 2018
@@ -0,0 +1,359 @@
+/*
+ * Copyright (C) 2006 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <libgen.h>
+#include "smatch.h"
+#include "check_list.h"
+
+char *option_debug_check = (char *)"";
+char *option_project_str = (char *)"smatch_generic";
+static char *option_db_file = (char *)"smatch_db.sqlite";
+enum project_type option_project = PROJ_NONE;
+char *bin_dir;
+char *data_dir;
+int option_no_data = 0;
+int option_spammy = 0;
+int option_info = 0;
+int option_full_path = 0;
+int option_param_mapper = 0;
+int option_call_tree = 0;
+int option_no_db = 0;
+int option_enable = 0;
+int option_disable = 0;
+int option_debug_related;
+int option_file_output;
+int option_time;
+int option_mem;
+char *option_datadir_str;
+int option_fatal_checks;
+int option_succeed;
+
+FILE *sm_outfd;
+FILE *sql_outfd;
+FILE *caller_info_fd;
+
+int sm_nr_errors;
+int sm_nr_checks;
+
+bool __silence_warnings_for_stmt;
+
+const char *progname;
+
+typedef void (*reg_func) (int id);
+#define CK(_x) {.name = #_x, .func = &_x, .enabled = 0},
+static struct reg_func_info {
+	const char *name;
+	reg_func func;
+	int enabled;
+} reg_funcs[] = {
+	{NULL, NULL},
+#include "check_list.h"
+};
+#undef CK
+int num_checks = ARRAY_SIZE(reg_funcs) - 1;
+
+const char *check_name(unsigned short id)
+{
+	if (id >= ARRAY_SIZE(reg_funcs))
+		return "internal";
+
+	return reg_funcs[id].name;
+}
+
+int id_from_name(const char *name)
+{
+	int i;
+
+	for (i = 1; i < ARRAY_SIZE(reg_funcs); i++) {
+		if (!strcmp(name, reg_funcs[i].name))
+			return i;
+	}
+	return 0;
+}
+
+static void show_checks(void)
+{
+	int i;
+
+	for (i = 1; i < ARRAY_SIZE(reg_funcs); i++) {
+		if (!strncmp(reg_funcs[i].name, "check_", 6))
+			printf("%3d. %s\n", i, reg_funcs[i].name);
+	}
+	exit(0);
+}
+
+static void enable_disable_checks(char *s, bool enable)
+{
+	char buf[128];
+	char *next;
+	int i;
+
+	do {
+		next = strchr(s, ',');
+		if (next) {
+			*next = '\0';
+			next++;
+		}
+		if (*s == '\0')
+			return;
+		if (strncmp(s, "check_", 6) == 0)
+			snprintf(buf, sizeof(buf), "%s", s);
+		else
+			snprintf(buf, sizeof(buf), "check_%s", s);
+
+
+		for (i = 1; i < ARRAY_SIZE(reg_funcs); i++) {
+			if (strcmp(reg_funcs[i].name, buf) == 0) {
+				reg_funcs[i].enabled = (enable == true) ? 1 : -1;
+				break;
+			}
+		}
+
+		if (i == ARRAY_SIZE(reg_funcs))
+			sm_fatal("'%s' not found", s);
+
+	} while ((s = next));
+}
+
+static void help(void)
+{
+	printf("Usage:  smatch [smatch arguments][sparse arguments] file.c\n");
+	printf("--project=<name> or -p=<name>: project specific tests\n");
+	printf("--succeed: don't exit with an error\n");
+	printf("--spammy:  print superfluous crap.\n");
+	printf("--info:  print info used to fill smatch_data/.\n");
+	printf("--debug:  print lots of debug output.\n");
+	printf("--param-mapper:  enable param_mapper output.\n");
+	printf("--no-data:  do not use the /smatch_data/ directory.\n");
+	printf("--data=<dir>: overwrite path to default smatch data directory.\n");
+	printf("--full-path:  print the full pathname.\n");
+	printf("--debug-implied:  print debug output about implications.\n");
+	printf("--assume-loops:  assume loops always go through at least once.\n");
+	printf("--two-passes:  use a two pass system for each function.\n");
+	printf("--file-output:  instead of printing stdout, print to \"file.c.smatch_out\".\n");
+	printf("--fatal-checks: check output is treated as an error.\n");
+	printf("--help:  print this helpful message.\n");
+	exit(1);
+}
+
+static int match_option(const char *arg, const char *option)
+{
+	char *str;
+	char *tmp;
+	int ret = 0;
+
+	str = malloc(strlen(option) + 3);
+	snprintf(str, strlen(option) + 3, "--%s", option);
+	tmp = str;
+	while (*tmp) {
+		if (*tmp == '_')
+			*tmp = '-';
+		tmp++;
+	}
+	if (!strcmp(arg, str))
+		ret = 1;
+	free(str);
+	return ret;
+}
+
+#define OPTION(_x) do {					\
+	if (match_option((*argvp)[1], #_x)) { 		\
+		option_##_x = 1;			\
+	}                                               \
+} while (0)
+
+void parse_args(int *argcp, char ***argvp)
+{
+	int i;
+
+	for (i = 1 ; i < *argcp; i++) {
+		if (!strcmp((*argvp)[i], "--help"))
+			help();
+
+		if (!strcmp((*argvp)[i], "--show-checks"))
+			show_checks();
+
+		if (!strncmp((*argvp)[i], "--project=", 10))
+			option_project_str = (*argvp)[i] + 10;
+
+		if (!strncmp((*argvp)[i], "-p=", 3))
+			option_project_str = (*argvp)[i] + 3;
+
+		if (!strncmp((*argvp)[i], "--db-file=", 10))
+			option_db_file = (*argvp)[i] + 10;
+
+		if (!strncmp((*argvp)[i], "--data=", 7))
+			option_datadir_str = (*argvp)[i] + 7;
+
+		if (!strncmp((*argvp)[i], "--debug=", 8))
+			option_debug_check = (*argvp)[i] + 8;
+
+		if (strncmp((*argvp)[i], "--trace=", 8) == 0)
+			trace_variable = (*argvp)[i] + 8;
+
+		if (strncmp((*argvp)[i], "--enable=", 9) == 0) {
+			enable_disable_checks((*argvp)[i] + 9, 1);
+			option_enable = 1;
+		}
+
+		if (strncmp((*argvp)[i], "--disable=", 10) == 0) {
+			enable_disable_checks((*argvp)[i] + 10, 0);
+			option_enable = 1;
+			option_disable = 1;
+		}
+
+		OPTION(fatal_checks);
+		OPTION(spammy);
+		OPTION(info);
+		OPTION(debug);
+		OPTION(debug_implied);
+		OPTION(debug_related);
+		OPTION(assume_loops);
+		OPTION(no_data);
+		OPTION(two_passes);
+		OPTION(full_path);
+		OPTION(param_mapper);
+		OPTION(call_tree);
+		OPTION(file_output);
+		OPTION(time);
+		OPTION(mem);
+		OPTION(no_db);
+		OPTION(succeed);
+	}
+
+	if (strcmp(option_project_str, "smatch_generic") != 0)
+		option_project = PROJ_UNKNOWN;
+
+	if (strcmp(option_project_str, "kernel") == 0)
+		option_project = PROJ_KERNEL;
+	else if (strcmp(option_project_str, "wine") == 0)
+		option_project = PROJ_WINE;
+	else if (strcmp(option_project_str, "illumos_kernel") == 0)
+		option_project = PROJ_ILLUMOS_KERNEL;
+	else if (strcmp(option_project_str, "illumos_user") == 0)
+		option_project = PROJ_ILLUMOS_USER;
+}
+
+static char *read_bin_filename(void)
+{
+	char filename[PATH_MAX] = {};
+	char proc[PATH_MAX];
+
+	pid_t pid = getpid();
+	sprintf(proc, "/proc/%d/exe", pid);
+	if (readlink(proc, filename, PATH_MAX) < 0)
+		return NULL;
+	return alloc_string(filename);
+}
+
+static char *get_bin_dir(char *arg0)
+{
+	char *orig;
+
+	orig = read_bin_filename();
+	if (!orig)
+		orig = alloc_string(arg0);
+	return dirname(orig);
+}
+
+static char *get_data_dir(char *arg0)
+{
+	char buf[256];
+	char *dir;
+
+	if (option_no_data)
+		return NULL;
+
+	if (option_datadir_str) {
+		if (access(option_datadir_str, R_OK))
+			sm_warning("%s is not accessible -- ignored.",
+					option_datadir_str);
+		else
+			return alloc_string(option_datadir_str);
+	}
+
+	strncpy(buf, "smatch_data/", sizeof(buf));
+	dir = alloc_string(buf);
+	if (!access(dir, R_OK))
+		return dir;
+
+	strncpy(buf, bin_dir, 254);
+
+	buf[255] = '\0';
+	strncat(buf, "/smatch_data/", 254 - strlen(buf));
+	dir = alloc_string(buf);
+	if (!access(dir, R_OK))
+		return dir;
+	free_string(dir);
+	snprintf(buf, 254, "%s/smatch_data/", SMATCHDATADIR);
+	dir = alloc_string(buf);
+	if (!access(dir, R_OK))
+		return dir;
+
+	sm_warning("%s is not accessible.", dir);
+	sm_warning("Use --no-data or --data to suppress this message.");
+	return NULL;
+}
+
+int main(int argc, char **argv)
+{
+	int i;
+	reg_func func;
+
+	sm_outfd = stdout;
+	sql_outfd = stdout;
+	caller_info_fd = stdout;
+
+	progname = argv[0];
+
+	parse_args(&argc, &argv);
+
+	if (argc < 2)
+		help();
+
+	/* this gets set back to zero when we parse the first function */
+	final_pass = 1;
+
+	bin_dir = get_bin_dir(argv[0]);
+	data_dir = get_data_dir(argv[0]);
+
+	allocate_hook_memory();
+	create_function_hook_hash();
+	open_smatch_db(option_db_file);
+	for (i = 1; i < ARRAY_SIZE(reg_funcs); i++) {
+		func = reg_funcs[i].func;
+		/* The script IDs start at 1.
+		   0 is used for internal stuff. */
+		if (!option_enable || reg_funcs[i].enabled == 1 ||
+		    (option_disable && reg_funcs[i].enabled != -1) ||
+		    strncmp(reg_funcs[i].name, "register_", 9) == 0)
+			func(i);
+	}
+
+	smatch(argc, argv);
+	free_string(data_dir);
+
+	if (option_succeed)
+		return 0;
+	if (sm_nr_errors > 0)
+		return 1;
+	if (sm_nr_checks > 0 && option_fatal_checks)
+		return 1;
+	return 0;
+}
--- /dev/null	Fri Dec 21 15:00:15 2018
+++ new/usr/src/tools/smatch/src/smatch.h	Fri Dec 21 15:00:15 2018
@@ -0,0 +1,1293 @@
+/*
+ * Copyright (C) 2006 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#ifndef   	SMATCH_H_
+# define   	SMATCH_H_
+
+#include <stdio.h>
+#include <string.h>
+#include <limits.h>
+#include <sys/time.h>
+#include <sqlite3.h>
+#include "lib.h"
+#include "allocate.h"
+#include "scope.h"
+#include "parse.h"
+#include "expression.h"
+#include "avl.h"
+
+typedef struct {
+	struct symbol *type;
+	union {
+		long long value;
+		unsigned long long uvalue;
+	};
+} sval_t;
+
+typedef long long mtag_t;
+
+struct smatch_state {
+	const char *name;
+	void *data;
+};
+#define STATE(_x) static struct smatch_state _x = { .name = #_x }
+extern struct smatch_state undefined;
+extern struct smatch_state ghost;
+extern struct smatch_state merged;
+extern struct smatch_state true_state;
+extern struct smatch_state false_state;
+DECLARE_ALLOCATOR(smatch_state);
+
+static inline void *INT_PTR(int i)
+{
+	return (void *)(long)i;
+}
+
+static inline int PTR_INT(void *p)
+{
+	return (int)(long)p;
+}
+
+struct tracker {
+	char *name;
+	struct symbol *sym;
+	unsigned short owner;
+};
+DECLARE_ALLOCATOR(tracker);
+DECLARE_PTR_LIST(tracker_list, struct tracker);
+DECLARE_PTR_LIST(stree_stack, struct stree);
+
+/* The first 3 struct members must match struct tracker */
+struct sm_state {
+	const char *name;
+	struct symbol *sym;
+	unsigned short owner;
+	unsigned short merged:1;
+	unsigned short skip_implications:1;
+	unsigned int nr_children;
+	unsigned int line;
+  	struct smatch_state *state;
+	struct stree *pool;
+	struct sm_state *left;
+	struct sm_state *right;
+	struct state_list *possible;
+};
+
+struct var_sym {
+	char *var;
+	struct symbol *sym;
+};
+DECLARE_ALLOCATOR(var_sym);
+DECLARE_PTR_LIST(var_sym_list, struct var_sym);
+
+struct constraint {
+	int op;
+	int id;
+};
+DECLARE_PTR_LIST(constraint_list, struct constraint);
+
+enum hook_type {
+	EXPR_HOOK,
+	STMT_HOOK,
+	STMT_HOOK_AFTER,
+	SYM_HOOK,
+	STRING_HOOK,
+	DECLARATION_HOOK,
+	ASSIGNMENT_HOOK,
+	ASSIGNMENT_HOOK_AFTER,
+	RAW_ASSIGNMENT_HOOK,
+	GLOBAL_ASSIGNMENT_HOOK,
+	LOGIC_HOOK,
+	CONDITION_HOOK,
+	PRELOOP_HOOK,
+	SELECT_HOOK,
+	WHOLE_CONDITION_HOOK,
+	FUNCTION_CALL_HOOK_BEFORE,
+	FUNCTION_CALL_HOOK,
+	CALL_HOOK_AFTER_INLINE,
+	FUNCTION_CALL_HOOK_AFTER_DB,
+	CALL_ASSIGNMENT_HOOK,
+	MACRO_ASSIGNMENT_HOOK,
+	BINOP_HOOK,
+	OP_HOOK,
+	DEREF_HOOK,
+	CASE_HOOK,
+	ASM_HOOK,
+	CAST_HOOK,
+	SIZEOF_HOOK,
+	BASE_HOOK,
+	FUNC_DEF_HOOK,
+	AFTER_DEF_HOOK,
+	END_FUNC_HOOK,
+	AFTER_FUNC_HOOK,
+	RETURN_HOOK,
+	INLINE_FN_START,
+	INLINE_FN_END,
+	END_FILE_HOOK,
+	NUM_HOOKS,
+};
+
+#define TRUE 1
+#define FALSE 0
+
+struct range_list;
+
+void add_hook(void *func, enum hook_type type);
+typedef struct smatch_state *(merge_func_t)(struct smatch_state *s1, struct smatch_state *s2);
+typedef struct smatch_state *(unmatched_func_t)(struct sm_state *state);
+void add_merge_hook(int client_id, merge_func_t *func);
+void add_unmatched_state_hook(int client_id, unmatched_func_t *func);
+void add_pre_merge_hook(int client_id, void (*hook)(struct sm_state *sm));
+typedef void (scope_hook)(void *data);
+void add_scope_hook(scope_hook *hook, void *data);
+typedef void (func_hook)(const char *fn, struct expression *expr, void *data);
+typedef void (implication_hook)(const char *fn, struct expression *call_expr,
+				struct expression *assign_expr, void *data);
+typedef void (return_implies_hook)(struct expression *call_expr,
+				   int param, char *key, char *value);
+typedef int (implied_return_hook)(struct expression *call_expr, void *info, struct range_list **rl);
+void add_function_hook(const char *look_for, func_hook *call_back, void *data);
+
+void add_function_assign_hook(const char *look_for, func_hook *call_back,
+			      void *info);
+void add_implied_return_hook(const char *look_for,
+			     implied_return_hook *call_back,
+			     void *info);
+void add_macro_assign_hook(const char *look_for, func_hook *call_back,
+			      void *info);
+void add_macro_assign_hook_extra(const char *look_for, func_hook *call_back,
+			      void *info);
+void return_implies_state(const char *look_for, long long start, long long end,
+			 implication_hook *call_back, void *info);
+void select_return_states_hook(int type, return_implies_hook *callback);
+void select_return_states_before(void (*fn)(void));
+void select_return_states_after(void (*fn)(void));
+int get_implied_return(struct expression *expr, struct range_list **rl);
+void allocate_hook_memory(void);
+
+struct modification_data {
+	struct smatch_state *prev;
+	struct expression *cur;
+};
+
+typedef void (modification_hook)(struct sm_state *sm, struct expression *mod_expr);
+void add_modification_hook(int owner, modification_hook *call_back);
+void add_modification_hook_late(int owner, modification_hook *call_back);
+struct smatch_state *get_modification_state(struct expression *expr);
+
+int outside_of_function(void);
+const char *get_filename(void);
+const char *get_base_file(void);
+char *get_function(void);
+int get_lineno(void);
+extern int final_pass;
+extern struct symbol *cur_func_sym;
+extern int option_debug;
+extern int local_debug;
+extern int option_info;
+extern int option_spammy;
+extern char *trace_variable;
+extern struct stree *global_states;
+int is_skipped_function(void);
+int is_silenced_function(void);
+
+/* smatch_impossible.c */
+int is_impossible_path(void);
+void set_path_impossible(void);
+
+extern FILE *sm_outfd;
+extern FILE *sql_outfd;
+extern FILE *caller_info_fd;
+extern int sm_nr_checks;
+extern int sm_nr_errors;
+extern const char *progname;
+
+/*
+ * How to use these routines:
+ *
+ * sm_fatal(): an internal error of some kind that should immediately exit
+ * sm_ierror(): an internal error
+ * sm_perror(): an internal error from parsing input source
+ * sm_error(): an error from input source
+ * sm_warning(): a warning from input source
+ * sm_info(): info message (from option_info)
+ * sm_debug(): debug message
+ * sm_msg(): other message (please avoid using this)
+ */
+
+#define sm_printf(msg...) do { if (final_pass || option_debug || local_debug) fprintf(sm_outfd, msg); } while (0)
+
+static inline void sm_prefix(void)
+{
+	sm_printf("%s: %s:%d %s() ", progname, get_filename(), get_lineno(), get_function());
+}
+
+static inline void print_implied_debug_msg();
+
+extern bool __silence_warnings_for_stmt;
+
+#define sm_print_msg(type, msg...) \
+do {                                                           \
+	print_implied_debug_msg();                             \
+	if (!final_pass && !option_debug && !local_debug)      \
+		break;                                         \
+	if (__silence_warnings_for_stmt && !option_debug && !local_debug) \
+		break;					       \
+	if (!option_info && is_silenced_function())	       \
+		break;					       \
+	sm_prefix();					       \
+	if (type == 1) {				       \
+		sm_printf("warn: ");			       \
+		sm_nr_checks++;			    	       \
+	} else if (type == 2) {				       \
+		sm_printf("error: ");			       \
+		sm_nr_checks++;				       \
+	} else if (type == 3) {				       \
+		sm_printf("parse error: ");		       \
+		sm_nr_errors++;				       \
+	}						       \
+        sm_printf(msg);                                        \
+        sm_printf("\n");                                       \
+} while (0)
+
+#define sm_msg(msg...) do { sm_print_msg(0, msg); } while (0)
+
+#define local_debug(msg...)					\
+do {								\
+	if (local_debug)					\
+		sm_msg(msg);					\
+} while (0)
+
+extern char *implied_debug_msg;
+static inline void print_implied_debug_msg(void)
+{
+	static struct symbol *last_printed = NULL;
+
+	if (!implied_debug_msg)
+		return;
+	if (last_printed == cur_func_sym)
+		return;
+	last_printed = cur_func_sym;
+	sm_msg("%s", implied_debug_msg);
+}
+
+#define sm_debug(msg...) do { if (option_debug) sm_printf(msg); } while (0)
+
+#define sm_info(msg...) do {					\
+	if (option_debug || (option_info && final_pass)) {	\
+		sm_prefix();					\
+		sm_printf("info: ");				\
+		sm_printf(msg);					\
+		sm_printf("\n");				\
+	}							\
+} while(0)
+
+#define sm_warning(msg...) do { sm_print_msg(1, msg); } while (0)
+#define sm_error(msg...) do { sm_print_msg(2, msg); } while (0)
+#define sm_perror(msg...) do { sm_print_msg(3, msg); } while (0)
+
+static inline void sm_fatal(const char *fmt, ...)
+{
+	va_list args;
+
+	va_start(args, fmt);
+	vfprintf(sm_outfd, fmt, args);
+	va_end(args);
+
+	fprintf(sm_outfd, "\n");
+
+	exit(1);
+}
+
+static inline void sm_ierror(const char *fmt, ...)
+{
+	va_list args;
+
+	sm_nr_errors++;
+
+	fprintf(sm_outfd, "internal error: ");
+
+	va_start(args, fmt);
+	vfprintf(sm_outfd, fmt, args);
+	va_end(args);
+
+	fprintf(sm_outfd, "\n");
+}
+#define ALIGN(x, a) (((x) + (a) - 1) & ~((a) - 1))
+
+struct smatch_state *__get_state(int owner, const char *name, struct symbol *sym);
+struct smatch_state *get_state(int owner, const char *name, struct symbol *sym);
+struct smatch_state *get_state_expr(int owner, struct expression *expr);
+struct state_list *get_possible_states(int owner, const char *name,
+				       struct symbol *sym);
+struct state_list *get_possible_states_expr(int owner, struct expression *expr);
+struct sm_state *set_state(int owner, const char *name, struct symbol *sym,
+	       struct smatch_state *state);
+struct sm_state *set_state_expr(int owner, struct expression *expr,
+		struct smatch_state *state);
+void delete_state(int owner, const char *name, struct symbol *sym);
+void delete_state_expr(int owner, struct expression *expr);
+void __delete_all_states_sym(struct symbol *sym);
+void set_true_false_states(int owner, const char *name, struct symbol *sym,
+			   struct smatch_state *true_state,
+			   struct smatch_state *false_state);
+void set_true_false_states_expr(int owner, struct expression *expr,
+			   struct smatch_state *true_state,
+			   struct smatch_state *false_state);
+
+struct stree *get_all_states_from_stree(int owner, struct stree *source);
+struct stree *get_all_states_stree(int id);
+struct stree *__get_cur_stree(void);
+int is_reachable(void);
+void add_get_state_hook(void (*fn)(int owner, const char *name, struct symbol *sym));
+
+/* smatch_helper.c */
+DECLARE_PTR_LIST(int_stack, int);
+char *alloc_string(const char *str);
+void free_string(char *str);
+void append(char *dest, const char *data, int buff_len);
+void remove_parens(char *str);
+struct smatch_state *alloc_state_num(int num);
+struct smatch_state *alloc_state_str(const char *name);
+struct smatch_state *alloc_state_expr(struct expression *expr);
+struct expression *get_argument_from_call_expr(struct expression_list *args,
+					       int num);
+
+char *expr_to_var(struct expression *expr);
+struct symbol *expr_to_sym(struct expression *expr);
+char *expr_to_str(struct expression *expr);
+char *expr_to_str_sym(struct expression *expr,
+				     struct symbol **sym_ptr);
+char *expr_to_var_sym(struct expression *expr,
+			     struct symbol **sym_ptr);
+char *expr_to_known_chunk_sym(struct expression *expr, struct symbol **sym);
+char *expr_to_chunk_sym_vsl(struct expression *expr, struct symbol **sym, struct var_sym_list **vsl);
+int get_complication_score(struct expression *expr);
+
+int sym_name_is(const char *name, struct expression *expr);
+int get_const_value(struct expression *expr, sval_t *sval);
+int get_value(struct expression *expr, sval_t *val);
+int get_implied_value(struct expression *expr, sval_t *val);
+int get_implied_min(struct expression *expr, sval_t *sval);
+int get_implied_max(struct expression *expr, sval_t *val);
+int get_hard_max(struct expression *expr, sval_t *sval);
+int get_fuzzy_min(struct expression *expr, sval_t *min);
+int get_fuzzy_max(struct expression *expr, sval_t *max);
+int get_absolute_min(struct expression *expr, sval_t *sval);
+int get_absolute_max(struct expression *expr, sval_t *sval);
+int parse_call_math(struct expression *expr, char *math, sval_t *val);
+int parse_call_math_rl(struct expression *call, char *math, struct range_list **rl);
+char *get_value_in_terms_of_parameter_math(struct expression *expr);
+char *get_value_in_terms_of_parameter_math_var_sym(const char *var, struct symbol *sym);
+int is_zero(struct expression *expr);
+int known_condition_true(struct expression *expr);
+int known_condition_false(struct expression *expr);
+int implied_condition_true(struct expression *expr);
+int implied_condition_false(struct expression *expr);
+int can_integer_overflow(struct symbol *type, struct expression *expr);
+void clear_math_cache(void);
+
+int is_array(struct expression *expr);
+struct expression *get_array_base(struct expression *expr);
+struct expression *get_array_offset(struct expression *expr);
+const char *show_state(struct smatch_state *state);
+struct statement *get_expression_statement(struct expression *expr);
+struct expression *strip_parens(struct expression *expr);
+struct expression *strip_expr(struct expression *expr);
+struct expression *strip_expr_set_parent(struct expression *expr);
+void scoped_state(int my_id, const char *name, struct symbol *sym);
+int is_error_return(struct expression *expr);
+int getting_address(void);
+int get_struct_and_member(struct expression *expr, const char **type, const char **member);
+char *get_member_name(struct expression *expr);
+char *get_fnptr_name(struct expression *expr);
+int cmp_pos(struct position pos1, struct position pos2);
+int positions_eq(struct position pos1, struct position pos2);
+struct statement *get_current_statement(void);
+struct statement *get_prev_statement(void);
+struct expression *get_last_expr_from_expression_stmt(struct expression *expr);
+int get_param_num_from_sym(struct symbol *sym);
+int get_param_num(struct expression *expr);
+int ms_since(struct timeval *start);
+int parent_is_gone_var_sym(const char *name, struct symbol *sym);
+int parent_is_gone(struct expression *expr);
+int invert_op(int op);
+int expr_equiv(struct expression *one, struct expression *two);
+void push_int(struct int_stack **stack, int num);
+int pop_int(struct int_stack **stack);
+
+/* smatch_type.c */
+struct symbol *get_real_base_type(struct symbol *sym);
+int type_bytes(struct symbol *type);
+int array_bytes(struct symbol *type);
+struct symbol *get_pointer_type(struct expression *expr);
+struct symbol *get_type(struct expression *expr);
+struct symbol *get_final_type(struct expression *expr);
+struct symbol *get_promoted_type(struct symbol *left, struct symbol *right);
+int type_signed(struct symbol *base_type);
+int expr_unsigned(struct expression *expr);
+int expr_signed(struct expression *expr);
+int returns_unsigned(struct symbol *base_type);
+int is_pointer(struct expression *expr);
+int returns_pointer(struct symbol *base_type);
+sval_t sval_type_max(struct symbol *base_type);
+sval_t sval_type_min(struct symbol *base_type);
+int nr_bits(struct expression *expr);
+int is_void_pointer(struct expression *expr);
+int is_char_pointer(struct expression *expr);
+int is_string(struct expression *expr);
+int is_static(struct expression *expr);
+int is_local_variable(struct expression *expr);
+int types_equiv(struct symbol *one, struct symbol *two);
+int fn_static(void);
+const char *global_static();
+struct symbol *cur_func_return_type(void);
+struct symbol *get_arg_type(struct expression *fn, int arg);
+struct symbol *get_member_type_from_key(struct expression *expr, const char *key);
+struct symbol *get_arg_type_from_key(struct expression *fn, int param, struct expression *arg, const char *key);
+int is_struct(struct expression *expr);
+char *type_to_str(struct symbol *type);
+
+/* smatch_ignore.c */
+void add_ignore(int owner, const char *name, struct symbol *sym);
+int is_ignored(int owner, const char *name, struct symbol *sym);
+void add_ignore_expr(int owner, struct expression *expr);
+int is_ignored_expr(int owner, struct expression *expr);
+
+/* smatch_var_sym */
+struct var_sym *alloc_var_sym(const char *var, struct symbol *sym);
+struct var_sym_list *expr_to_vsl(struct expression *expr);
+void add_var_sym(struct var_sym_list **list, const char *var, struct symbol *sym);
+void add_var_sym_expr(struct var_sym_list **list, struct expression *expr);
+void del_var_sym(struct var_sym_list **list, const char *var, struct symbol *sym);
+int in_var_sym_list(struct var_sym_list *list, const char *var, struct symbol *sym);
+struct var_sym_list *clone_var_sym_list(struct var_sym_list *from_vsl);
+void merge_var_sym_list(struct var_sym_list **dest, struct var_sym_list *src);
+struct var_sym_list *combine_var_sym_lists(struct var_sym_list *one, struct var_sym_list *two);
+int var_sym_lists_equiv(struct var_sym_list *one, struct var_sym_list *two);
+void free_var_sym_list(struct var_sym_list **list);
+void free_var_syms_and_list(struct var_sym_list **list);
+
+/* smatch_tracker */
+struct tracker *alloc_tracker(int owner, const char *name, struct symbol *sym);
+void add_tracker(struct tracker_list **list, int owner, const char *name,
+		struct symbol *sym);
+void add_tracker_expr(struct tracker_list **list, int owner, struct expression *expr);
+void del_tracker(struct tracker_list **list, int owner, const char *name,
+		struct symbol *sym);
+int in_tracker_list(struct tracker_list *list, int owner, const char *name,
+		struct symbol *sym);
+void free_tracker_list(struct tracker_list **list);
+void free_trackers_and_list(struct tracker_list **list);
+
+/* smatch_conditions */
+int in_condition(void);
+
+/* smatch_flow.c */
+
+extern int __in_fake_assign;
+extern int __in_fake_parameter_assign;
+extern int __in_fake_struct_assign;
+extern int in_fake_env;
+void smatch (int argc, char **argv);
+int inside_loop(void);
+int definitely_inside_loop(void);
+struct expression *get_switch_expr(void);
+int in_expression_statement(void);
+void __process_post_op_stack(void);
+void __split_expr(struct expression *expr);
+void __split_label_stmt(struct statement *stmt);
+void __split_stmt(struct statement *stmt);
+extern int __in_function_def;
+extern int option_assume_loops;
+extern int option_two_passes;
+extern int option_no_db;
+extern int option_file_output;
+extern int option_time;
+extern struct expression_list *big_expression_stack;
+extern struct expression_list *big_condition_stack;
+extern struct statement_list *big_statement_stack;
+int is_assigned_call(struct expression *expr);
+int inlinable(struct expression *expr);
+extern int __inline_call;
+extern struct expression *__inline_fn;
+extern int __in_pre_condition;
+extern int __bail_on_rest_of_function;
+extern struct statement *__prev_stmt;
+extern struct statement *__cur_stmt;
+extern struct statement *__next_stmt;
+void init_fake_env(void);
+void end_fake_env(void);
+int time_parsing_function(void);
+
+/* smatch_struct_assignment.c */
+struct expression *get_faked_expression(void);
+void __fake_struct_member_assignments(struct expression *expr);
+
+/* smatch_project.c */
+int is_no_inline_function(const char *function);
+
+/* smatch_conditions */
+void __split_whole_condition(struct expression *expr);
+void __handle_logic(struct expression *expr);
+int is_condition(struct expression *expr);
+int __handle_condition_assigns(struct expression *expr);
+int __handle_select_assigns(struct expression *expr);
+int __handle_expr_statement_assigns(struct expression *expr);
+
+/* smatch_implied.c */
+extern int option_debug_implied;
+extern int option_debug_related;
+struct range_list_stack;
+void param_limit_implications(struct expression *expr, int param, char *key, char *value);
+struct stree *__implied_case_stree(struct expression *switch_expr,
+				   struct range_list *case_rl,
+				   struct range_list_stack **remaining_cases,
+				   struct stree **raw_stree);
+void overwrite_states_using_pool(struct sm_state *gate_sm, struct sm_state *pool_sm);
+int assume(struct expression *expr);
+void end_assume(void);
+int impossible_assumption(struct expression *left, int op, sval_t sval);
+
+/* smatch_extras.c */
+#define SMATCH_EXTRA 5 /* this is my_id from smatch extra set in smatch.c */
+extern int RETURN_ID;
+
+struct data_range {
+	sval_t min;
+	sval_t max;
+};
+
+#define MTAG_ALIAS_BIT (1ULL << 63)
+#define MTAG_OFFSET_MASK 0xfffULL
+
+extern long long valid_ptr_min, valid_ptr_max;
+extern sval_t valid_ptr_min_sval, valid_ptr_max_sval;
+extern struct range_list *valid_ptr_rl;
+static const sval_t array_min_sval = {
+	.type = &ptr_ctype,
+	{.value = 100000},
+};
+static const sval_t array_max_sval = {
+	.type = &ptr_ctype,
+	{.value = 199999},
+};
+static const sval_t text_seg_min = {
+	.type = &ptr_ctype,
+	{.value = 100000000},
+};
+static const sval_t text_seg_max = {
+	.type = &ptr_ctype,
+	{.value = 177777777},
+};
+static const sval_t data_seg_min = {
+	.type = &ptr_ctype,
+	{.value = 200000000},
+};
+static const sval_t data_seg_max = {
+	.type = &ptr_ctype,
+	{.value = 277777777},
+};
+static const sval_t bss_seg_min = {
+	.type = &ptr_ctype,
+	{.value = 300000000},
+};
+static const sval_t bss_seg_max = {
+	.type = &ptr_ctype,
+	{.value = 377777777},
+};
+static const sval_t stack_seg_min = {
+	.type = &ptr_ctype,
+	{.value = 400000000},
+};
+static const sval_t stack_seg_max = {
+	.type = &ptr_ctype,
+	{.value = 477777777},
+};
+static const sval_t kmalloc_seg_min = {
+	.type = &ptr_ctype,
+	{.value = 500000000},
+};
+static const sval_t kmalloc_seg_max = {
+	.type = &ptr_ctype,
+	{.value = 577777777},
+};
+static const sval_t vmalloc_seg_min = {
+	.type = &ptr_ctype,
+	{.value = 600000000},
+};
+static const sval_t vmalloc_seg_max = {
+	.type = &ptr_ctype,
+	{.value = 677777777},
+};
+static const sval_t fn_ptr_min = {
+	.type = &ptr_ctype,
+	{.value = 700000000},
+};
+static const sval_t fn_ptr_max = {
+	.type = &ptr_ctype,
+	{.value = 777777777},
+};
+
+char *get_other_name_sym(const char *name, struct symbol *sym, struct symbol **new_sym);
+char *map_call_to_other_name_sym(const char *name, struct symbol *sym, struct symbol **new_sym);
+char *map_long_to_short_name_sym(const char *name, struct symbol *sym, struct symbol **new_sym);
+char *map_long_to_short_name_sym_nostack(const char *name, struct symbol *sym, struct symbol **new_sym);
+
+#define STRLEN_MAX_RET 1010101
+
+/* smatch_absolute.c */
+int get_absolute_min_helper(struct expression *expr, sval_t *sval);
+int get_absolute_max_helper(struct expression *expr, sval_t *sval);
+
+/* smatch_local_values.c */
+int get_local_rl(struct expression *expr, struct range_list **rl);
+int get_local_max_helper(struct expression *expr, sval_t *sval);
+int get_local_min_helper(struct expression *expr, sval_t *sval);
+
+/* smatch_type_value.c */
+int get_db_type_rl(struct expression *expr, struct range_list **rl);
+/* smatch_data_val.c */
+int get_mtag_rl(struct expression *expr, struct range_list **rl);
+/* smatch_array_values.c */
+int get_array_rl(struct expression *expr, struct range_list **rl);
+
+/* smatch_states.c */
+void __swap_cur_stree(struct stree *stree);
+void __push_fake_cur_stree();
+struct stree *__pop_fake_cur_stree();
+void __free_fake_cur_stree();
+void __set_fake_cur_stree_fast(struct stree *stree);
+void __pop_fake_cur_stree_fast(void);
+void __merge_stree_into_cur(struct stree *stree);
+
+int unreachable(void);
+void __set_sm(struct sm_state *sm);
+void __set_sm_cur_stree(struct sm_state *sm);
+void __set_sm_fake_stree(struct sm_state *sm);
+void __set_true_false_sm(struct sm_state *true_state,
+			struct sm_state *false_state);
+void nullify_path(void);
+void __match_nullify_path_hook(const char *fn, struct expression *expr,
+			       void *unused);
+void __unnullify_path(void);
+int __path_is_null(void);
+void save_all_states(void);
+void restore_all_states(void);
+void free_goto_stack(void);
+void clear_all_states(void);
+
+struct sm_state *get_sm_state(int owner, const char *name,
+				struct symbol *sym);
+struct sm_state *get_sm_state_expr(int owner, struct expression *expr);
+void __push_true_states(void);
+void __use_false_states(void);
+void __discard_false_states(void);
+void __merge_false_states(void);
+void __merge_true_states(void);
+
+void __negate_cond_stacks(void);
+void __use_pre_cond_states(void);
+void __use_cond_true_states(void);
+void __use_cond_false_states(void);
+void __push_cond_stacks(void);
+void __fold_in_set_states(void);
+void __free_set_states(void);
+struct stree *__copy_cond_true_states(void);
+struct stree *__copy_cond_false_states(void);
+struct stree *__pop_cond_true_stack(void);
+struct stree *__pop_cond_false_stack(void);
+void __and_cond_states(void);
+void __or_cond_states(void);
+void __save_pre_cond_states(void);
+void __discard_pre_cond_states(void);
+struct stree *__get_true_states(void);
+struct stree *__get_false_states(void);
+void __use_cond_states(void);
+extern struct state_list *__last_base_slist;
+
+void __push_continues(void);
+void __discard_continues(void);
+void __process_continues(void);
+void __merge_continues(void);
+
+void __push_breaks(void);
+void __process_breaks(void);
+int __has_breaks(void);
+void __merge_breaks(void);
+void __use_breaks(void);
+
+void __save_switch_states(struct expression *switch_expr);
+void __discard_switches(void);
+int have_remaining_cases(void);
+void __merge_switches(struct expression *switch_expr, struct range_list *case_rl);
+void __push_default(void);
+void __set_default(void);
+int __pop_default(void);
+
+void __push_conditions(void);
+void __discard_conditions(void);
+
+void __save_gotos(const char *name, struct symbol *sym);
+void __merge_gotos(const char *name, struct symbol *sym);
+
+void __print_cur_stree(void);
+
+/* smatch_hooks.c */
+void __pass_to_client(void *data, enum hook_type type);
+void __pass_to_client_no_data(enum hook_type type);
+void __pass_case_to_client(struct expression *switch_expr,
+			   struct range_list *rl);
+int __has_merge_function(int client_id);
+struct smatch_state *__client_merge_function(int owner,
+					     struct smatch_state *s1,
+					     struct smatch_state *s2);
+struct smatch_state *__client_unmatched_state_function(struct sm_state *sm);
+void call_pre_merge_hook(struct sm_state *sm);
+void __push_scope_hooks(void);
+void __call_scope_hooks(void);
+
+/* smatch_function_hooks.c */
+void create_function_hook_hash(void);
+void __match_initializer_call(struct symbol *sym);
+
+/* smatch_db.c */
+enum info_type {
+	INTERNAL	= 0,
+	/*
+	 * Changing these numbers is a pain.  Don't do it.  If you ever use a
+	 * number it can't be re-used right away so there may be gaps.
+	 * We select these in order by type so if the order matters, then give
+	 * it a number below 100-999,9000-9999 ranges. */
+
+	PARAM_CLEARED	= 101,
+	PARAM_LIMIT	= 103,
+	PARAM_FILTER	= 104,
+
+	PARAM_VALUE	= 1001,
+	BUF_SIZE	= 1002,
+	USER_DATA	= 1003,
+	CAPPED_DATA	= 1004,
+	RETURN_VALUE	= 1005,
+	DEREFERENCE	= 1006,
+	RANGE_CAP	= 1007,
+	LOCK_HELD	= 1008,
+	LOCK_RELEASED	= 1009,
+	ABSOLUTE_LIMITS	= 1010,
+	PARAM_ADD	= 1012,
+	PARAM_FREED	= 1013,
+	DATA_SOURCE	= 1014,
+	FUZZY_MAX	= 1015,
+	STR_LEN		= 1016,
+	ARRAY_LEN	= 1017,
+	CAPABLE		= 1018,
+	NS_CAPABLE	= 1019,
+	CONTAINER	= 1020,
+	CASTED_CALL	= 1021,
+	TYPE_LINK	= 1022,
+	UNTRACKED_PARAM = 1023,
+	CULL_PATH	= 1024,
+	PARAM_SET	= 1025,
+	PARAM_USED	= 1026,
+	BYTE_UNITS      = 1027,
+	COMPARE_LIMIT	= 1028,
+	PARAM_COMPARE	= 1029,
+	CONSTRAINT	= 1031,
+	PASSES_TYPE	= 1032,
+	CONSTRAINT_REQUIRED = 1033,
+	NOSPEC		= 1035,
+	NOSPEC_WB	= 1036,
+	STMT_CNT	= 1037,
+	TERMINATED	= 1038,
+
+	/* put random temporary stuff in the 7000-7999 range for testing */
+	USER_DATA3	= 8017,
+	USER_DATA3_SET	= 9017,
+	NO_OVERFLOW	= 8018,
+	NO_OVERFLOW_SIMPLE = 8019,
+	LOCKED		= 8020,
+	UNLOCKED	= 8021,
+	SET_FS		= 8022,
+	ATOMIC_INC	= 8023,
+	ATOMIC_DEC	= 8024,
+	NO_SIDE_EFFECT  = 8025,
+	FN_ARG_LINK	= 8028,
+	DATA_VALUE	= 8029,
+	ARRAYSIZE_ARG	= 8033,
+	SIZEOF_ARG	= 8034,
+	MEMORY_TAG	= 8036,
+	MTAG_ASSIGN	= 8035,
+	STRING_VALUE	= 8041,
+};
+
+extern struct sqlite3 *smatch_db;
+extern struct sqlite3 *mem_db;
+extern struct sqlite3 *cache_db;
+
+void db_ignore_states(int id);
+void select_caller_info_hook(void (*callback)(const char *name, struct symbol *sym, char *key, char *value), int type);
+void add_member_info_callback(int owner, void (*callback)(struct expression *call, int param, char *printed_name, struct sm_state *sm));
+void add_split_return_callback(void (*fn)(int return_id, char *return_ranges, struct expression *returned_expr));
+void add_returned_member_callback(int owner, void (*callback)(int return_id, char *return_ranges, struct expression *expr, char *printed_name, struct smatch_state *state));
+void select_call_implies_hook(int type, void (*callback)(struct expression *call, struct expression *arg, char *key, char *value));
+void select_return_implies_hook(int type, void (*callback)(struct expression *call, struct expression *arg, char *key, char *value));
+struct range_list *db_return_vals(struct expression *expr);
+struct range_list *db_return_vals_from_str(const char *fn_name);
+char *return_state_to_var_sym(struct expression *expr, int param, const char *key, struct symbol **sym);
+char *get_chunk_from_key(struct expression *arg, char *key, struct symbol **sym, struct var_sym_list **vsl);
+char *get_variable_from_key(struct expression *arg, const char *key, struct symbol **sym);
+const char *state_name_to_param_name(const char *state_name, const char *param_name);
+const char *get_param_name_var_sym(const char *name, struct symbol *sym);
+const char *get_param_name(struct sm_state *sm);
+const char *get_mtag_name_var_sym(const char *state_name, struct symbol *sym);
+const char *get_mtag_name_expr(struct expression *expr);
+char *get_data_info_name(struct expression *expr);
+
+char *escape_newlines(const char *str);
+void sql_exec(struct sqlite3 *db, int (*callback)(void*, int, char**, char**), void *data, const char *sql);
+
+#define sql_helper(db, call_back, data, sql...)					\
+do {										\
+	char sql_txt[1024];							\
+										\
+	sqlite3_snprintf(sizeof(sql_txt), sql_txt, sql);			\
+	sm_debug("debug: %s\n", sql_txt);					\
+	sql_exec(db, call_back, data, sql_txt);					\
+} while (0)
+
+
+#define run_sql(call_back, data, sql...)					\
+do {										\
+	if (option_no_db)							\
+		break;								\
+	sql_helper(smatch_db, call_back, data, sql);				\
+} while (0)
+
+#define mem_sql(call_back, data, sql...)					\
+	sql_helper(mem_db, call_back, data, sql)
+
+#define cache_sql(call_back, data, sql...)					\
+	sql_helper(cache_db, call_back, data, sql)
+
+#define sql_insert_helper(table, db, ignore, late, values...)			\
+do {										\
+	struct sqlite3 *_db = db;						\
+										\
+	if (__inline_fn && !_db)						\
+		_db = mem_db;							\
+	if (_db) {								\
+		char buf[1024];							\
+		char *err, *p = buf;						\
+		int rc;								\
+										\
+		p += snprintf(p, buf + sizeof(buf) - p,				\
+			      "insert %sinto %s values (",			\
+			      ignore ? "or ignore " : "", #table);		\
+		p += snprintf(p, buf + sizeof(buf) - p, values);		\
+		p += snprintf(p, buf + sizeof(buf) - p, ");");			\
+		sm_debug("mem-db: %s\n", buf);					\
+		rc = sqlite3_exec(_db, buf, NULL, NULL, &err);			\
+		if (rc != SQLITE_OK) {						\
+			sm_ierror("SQL error #2: %s", err);			\
+			sm_ierror("SQL: '%s'", buf);				\
+			parse_error = 1;					\
+		}								\
+		break;								\
+	}									\
+	if (option_info) {							\
+		FILE *tmp_fd = sm_outfd;					\
+		sm_outfd = sql_outfd;						\
+		sm_prefix();							\
+	        sm_printf("SQL%s: insert %sinto " #table " values(",		\
+			  late ? "_late" : "", ignore ? "or ignore " : "");	\
+	        sm_printf(values);						\
+	        sm_printf(");\n");						\
+		sm_outfd = tmp_fd;						\
+	}									\
+} while (0)
+
+#define sql_insert(table, values...) sql_insert_helper(table, 0, 0, 0, values);
+#define sql_insert_or_ignore(table, values...) sql_insert_helper(table, 0, 1, 0, values);
+#define sql_insert_late(table, values...) sql_insert_helper(table, 0, 0, 1, values);
+#define sql_insert_cache(table, values...) sql_insert_helper(table, cache_db, 1, 0, values);
+
+char *get_static_filter(struct symbol *sym);
+
+void sql_insert_return_states(int return_id, const char *return_ranges,
+		int type, int param, const char *key, const char *value);
+void sql_insert_caller_info(struct expression *call, int type, int param,
+		const char *key, const char *value);
+void sql_insert_function_ptr(const char *fn, const char *struct_name);
+void sql_insert_return_values(const char *return_values);
+void sql_insert_return_implies(int type, int param, const char *key, const char *value);
+void sql_insert_function_type_size(const char *member, const char *ranges);
+void sql_insert_function_type_info(int type, const char *struct_type, const char *member, const char *value);
+void sql_insert_type_info(int type, const char *member, const char *value);
+void sql_insert_local_values(const char *name, const char *value);
+void sql_insert_function_type_value(const char *type, const char *value);
+void sql_insert_function_type(int param, const char *value);
+void sql_insert_parameter_name(int param, const char *value);
+void sql_insert_data_info(struct expression *data, int type, const char *value);
+void sql_insert_data_info_var_sym(const char *var, struct symbol *sym, int type, const char *value);
+void sql_save_constraint(const char *con);
+void sql_save_constraint_required(const char *data, int op, const char *limit);
+void sql_copy_constraint_required(const char *new_limit, const char *old_limit);
+void sql_insert_fn_ptr_data_link(const char *ptr, const char *data);
+void sql_insert_fn_data_link(struct expression *fn, int type, int param, const char *key, const char *value);
+void sql_insert_mtag_about(mtag_t tag, const char *left_name, const char *right_name);
+void insert_mtag_data(sval_t sval, struct range_list *rl);
+void sql_insert_mtag_map(mtag_t tag, int offset, mtag_t container);
+void sql_insert_mtag_alias(mtag_t orig, mtag_t alias);
+int mtag_map_select_container(mtag_t tag, int offset, mtag_t *container);
+int mtag_map_select_tag(mtag_t container, int offset, mtag_t *tag);
+
+void sql_select_return_states(const char *cols, struct expression *call,
+	int (*callback)(void*, int, char**, char**), void *info);
+void sql_select_call_implies(const char *cols, struct expression *call,
+	int (*callback)(void*, int, char**, char**));
+
+void open_smatch_db(char *db_file);
+
+/* smatch_files.c */
+int open_data_file(const char *filename);
+int open_schema_file(const char *schema);
+struct token *get_tokens_file(const char *filename);
+
+/* smatch.c */
+extern char *option_debug_check;
+extern char *option_project_str;
+extern char *bin_dir;
+extern char *data_dir;
+extern int option_no_data;
+extern int option_full_path;
+extern int option_param_mapper;
+extern int option_call_tree;
+extern int num_checks;
+
+enum project_type {
+	PROJ_NONE,
+	PROJ_KERNEL,
+	PROJ_WINE,
+	PROJ_ILLUMOS_KERNEL,
+	PROJ_ILLUMOS_USER,
+	PROJ_UNKNOWN,
+};
+extern enum project_type option_project;
+const char *check_name(unsigned short id);
+int id_from_name(const char *name);
+
+
+/* smatch_buf_size.c */
+int get_array_size(struct expression *expr);
+int get_array_size_bytes(struct expression *expr);
+int get_array_size_bytes_min(struct expression *expr);
+int get_array_size_bytes_max(struct expression *expr);
+struct range_list *get_array_size_bytes_rl(struct expression *expr);
+int get_real_array_size(struct expression *expr);
+int last_member_is_resizable(struct symbol *type);
+/* smatch_strlen.c */
+int get_implied_strlen(struct expression *expr, struct range_list **rl);
+int get_size_from_strlen(struct expression *expr);
+
+/* smatch_capped.c */
+int is_capped(struct expression *expr);
+int is_capped_var_sym(const char *name, struct symbol *sym);
+
+/* check_user_data.c */
+int is_user_macro(struct expression *expr);
+int is_user_data(struct expression *expr);
+int is_capped_user_data(struct expression *expr);
+int implied_user_data(struct expression *expr, struct range_list **rl);
+struct stree *get_user_stree(void);
+int get_user_rl(struct expression *expr, struct range_list **rl);
+int get_user_rl_spammy(struct expression *expr, struct range_list **rl);
+int is_user_rl(struct expression *expr);
+int get_user_rl_var_sym(const char *name, struct symbol *sym, struct range_list **rl);
+
+/* check_locking.c */
+void print_held_locks();
+
+/* check_assigned_expr.c */
+struct expression *get_assigned_expr(struct expression *expr);
+struct expression *get_assigned_expr_name_sym(const char *name, struct symbol *sym);
+/* smatch_return_to_param.c */
+void __add_return_to_param_mapping(struct expression *assign, const char *return_string);
+char *map_call_to_param_name_sym(struct expression *expr, struct symbol **sym);
+
+/* smatch_comparison.c */
+struct compare_data {
+	/* The ->left and ->right expression pointers might be NULL (I'm lazy) */
+	struct expression *left;
+	const char *left_var;
+	struct var_sym_list *left_vsl;
+	int comparison;
+	struct expression *right;
+	const char *right_var;
+	struct var_sym_list *right_vsl;
+};
+DECLARE_ALLOCATOR(compare_data);
+struct smatch_state *alloc_compare_state(
+		struct expression *left,
+		const char *left_var, struct var_sym_list *left_vsl,
+		int comparison,
+		struct expression *right,
+		const char *right_var, struct var_sym_list *right_vsl);
+int filter_comparison(int orig, int op);
+int merge_comparisons(int one, int two);
+int combine_comparisons(int left_compare, int right_compare);
+int state_to_comparison(struct smatch_state *state);
+struct smatch_state *merge_compare_states(struct smatch_state *s1, struct smatch_state *s2);
+int get_comparison(struct expression *left, struct expression *right);
+int get_comparison_strings(const char *one, const char *two);
+int possible_comparison(struct expression *a, int comparison, struct expression *b);
+struct state_list *get_all_comparisons(struct expression *expr);
+struct state_list *get_all_possible_equal_comparisons(struct expression *expr);
+void __add_return_comparison(struct expression *call, const char *range);
+void __add_comparison_info(struct expression *expr, struct expression *call, const char *range);
+char *get_printed_param_name(struct expression *call, const char *param_name, struct symbol *param_sym);
+char *name_sym_to_param_comparison(const char *name, struct symbol *sym);
+char *expr_equal_to_param(struct expression *expr, int ignore);
+char *expr_lte_to_param(struct expression *expr, int ignore);
+char *expr_param_comparison(struct expression *expr, int ignore);
+int flip_comparison(int op);
+int negate_comparison(int op);
+int remove_unsigned_from_comparison(int op);
+int param_compare_limit_is_impossible(struct expression *expr, int left_param, char *left_key, char *value);
+void filter_by_comparison(struct range_list **rl, int comparison, struct range_list *right);
+struct sm_state *comparison_implication_hook(struct expression *expr,
+			struct state_list **true_stack,
+			struct state_list **false_stack);
+void __compare_param_limit_hook(struct expression *left_expr, struct expression *right_expr,
+				const char *state_name,
+				struct smatch_state *true_state, struct smatch_state *false_state);
+int impossibly_high_comparison(struct expression *expr);
+
+/* smatch_sval.c */
+sval_t *sval_alloc(sval_t sval);
+sval_t *sval_alloc_permanent(sval_t sval);
+sval_t sval_blank(struct expression *expr);
+sval_t sval_type_val(struct symbol *type, long long val);
+sval_t sval_from_val(struct expression *expr, long long val);
+int sval_is_ptr(sval_t sval);
+int sval_unsigned(sval_t sval);
+int sval_signed(sval_t sval);
+int sval_bits(sval_t sval);
+int sval_bits_used(sval_t sval);
+int sval_is_negative(sval_t sval);
+int sval_is_positive(sval_t sval);
+int sval_is_min(sval_t sval);
+int sval_is_max(sval_t sval);
+int sval_is_a_min(sval_t sval);
+int sval_is_a_max(sval_t sval);
+int sval_is_negative_min(sval_t sval);
+int sval_cmp_t(struct symbol *type, sval_t one, sval_t two);
+int sval_cmp_val(sval_t one, long long val);
+sval_t sval_min(sval_t one, sval_t two);
+sval_t sval_max(sval_t one, sval_t two);
+int sval_too_low(struct symbol *type, sval_t sval);
+int sval_too_high(struct symbol *type, sval_t sval);
+int sval_fits(struct symbol *type, sval_t sval);
+sval_t sval_cast(struct symbol *type, sval_t sval);
+sval_t sval_preop(sval_t sval, int op);
+sval_t sval_binop(sval_t left, int op, sval_t right);
+int sval_binop_overflows(sval_t left, int op, sval_t right);
+int sval_binop_overflows_no_sign(sval_t left, int op, sval_t right);
+unsigned long long fls_mask(unsigned long long uvalue);
+unsigned long long sval_fls_mask(sval_t sval);
+const char *sval_to_str(sval_t sval);
+const char *sval_to_numstr(sval_t sval);
+sval_t ll_to_sval(long long val);
+
+/* smatch_string_list.c */
+int list_has_string(struct string_list *str_list, const char *str);
+void insert_string(struct string_list **str_list, const char *str);
+struct string_list *clone_str_list(struct string_list *orig);
+struct string_list *combine_string_lists(struct string_list *one, struct string_list *two);
+
+/* smatch_start_states.c */
+struct stree *get_start_states(void);
+
+/* smatch_recurse.c */
+int has_symbol(struct expression *expr, struct symbol *sym);
+int has_variable(struct expression *expr, struct expression *var);
+int has_inc_dec(struct expression *expr);
+
+/* smatch_stored_conditions.c */
+struct smatch_state *get_stored_condition(struct expression *expr);
+struct expression_list *get_conditions(struct expression *expr);
+struct sm_state *stored_condition_implication_hook(struct expression *expr,
+			struct state_list **true_stack,
+			struct state_list **false_stack);
+
+/* check_string_len.c */
+int get_formatted_string_size(struct expression *call, int arg);
+
+/* smatch_param_set.c */
+int param_was_set(struct expression *expr);
+int param_was_set_var_sym(const char *name, struct symbol *sym);
+/* smatch_param_filter.c */
+int param_has_filter_data(struct sm_state *sm);
+
+/* smatch_links.c */
+void set_up_link_functions(int id, int linkid);
+struct smatch_state *merge_link_states(struct smatch_state *s1, struct smatch_state *s2);
+void store_link(int link_id, const char *name, struct symbol *sym, const char *link_name, struct symbol *link_sym);
+
+/* smatch_auto_copy.c */
+void set_auto_copy(int owner);
+
+/* check_buf_comparison */
+struct expression *get_size_variable(struct expression *buf);
+struct expression *get_array_variable(struct expression *size);
+
+/* smatch_untracked_param.c */
+void mark_untracked(struct expression *expr, int param, const char *key, const char *value);
+void add_untracked_param_hook(void (func)(struct expression *call, int param));
+void mark_all_params_untracked(int return_id, char *return_ranges, struct expression *expr);
+
+/* smatch_strings.c */
+struct state_list *get_strings(struct expression *expr);
+struct expression *fake_string_from_mtag(mtag_t tag);
+
+/* smatch_estate.c */
+int estate_get_single_value(struct smatch_state *state, sval_t *sval);
+
+/* smatch_address.c */
+int get_address_rl(struct expression *expr, struct range_list **rl);
+int get_member_offset(struct symbol *type, const char *member_name);
+int get_member_offset_from_deref(struct expression *expr);
+
+/* for now this is in smatch_used_parameter.c */
+void __get_state_hook(int owner, const char *name, struct symbol *sym);
+
+/* smatch_buf_comparison.c */
+int db_var_is_array_limit(struct expression *array, const char *name, struct var_sym_list *vsl);
+
+struct stree *get_all_return_states(void);
+struct stree_stack *get_all_return_strees(void);
+int on_atomic_dec_path(void);
+int was_inced(const char *name, struct symbol *sym);
+
+/* smatch_constraints.c */
+char *get_constraint_str(struct expression *expr);
+struct constraint_list *get_constraints(struct expression *expr);
+char *unmet_constraint(struct expression *data, struct expression *offset);
+char *get_required_constraint(const char *data_str);
+
+/* smatch_container_of.c */
+int get_param_from_container_of(struct expression *expr);
+int get_offset_from_container_of(struct expression *expr);
+
+/* smatch_mtag.c */
+int get_string_mtag(struct expression *expr, mtag_t *tag);
+int get_toplevel_mtag(struct symbol *sym, mtag_t *tag);
+int get_mtag(struct expression *expr, mtag_t *tag);
+int get_mtag_offset(struct expression *expr, mtag_t *tag, int *offset);
+int create_mtag_alias(mtag_t tag, struct expression *expr, mtag_t *new);
+int expr_to_mtag_offset(struct expression *expr, mtag_t *tag, int *offset);
+void update_mtag_data(struct expression *expr);
+int get_mtag_sval(struct expression *expr, sval_t *sval);
+int get_mtag_addr_sval(struct expression *expr, sval_t *sval);
+
+/* Trinity fuzzer stuff */
+const char *get_syscall_arg_type(struct symbol *sym);
+
+/* smatch_mem_tracker.c */
+extern int option_mem;
+unsigned long get_max_memory(void);
+
+/* check_is_nospec.c */
+bool is_nospec(struct expression *expr);
+
+/* smatch_nul_terminator.c */
+bool is_nul_terminated(struct expression *expr);
+
+static inline int type_bits(struct symbol *type)
+{
+	if (!type)
+		return 0;
+	if (type->type == SYM_PTR)  /* Sparse doesn't set this for &pointers */
+		return bits_in_pointer;
+	if (type->type == SYM_ARRAY)
+		return bits_in_pointer;
+	if (!type->examined)
+		examine_symbol_type(type);
+	return type->bit_size;
+}
+
+static inline bool type_is_ptr(struct symbol *type)
+{
+	return type && (type->type == SYM_PTR || type->type == SYM_ARRAY);
+}
+
+static inline int type_unsigned(struct symbol *base_type)
+{
+	if (!base_type)
+		return 0;
+	if (base_type->ctype.modifiers & MOD_UNSIGNED)
+		return 1;
+	return 0;
+}
+
+static inline int type_positive_bits(struct symbol *type)
+{
+	if (!type)
+		return 0;
+	if (type->type == SYM_ARRAY)
+		return bits_in_pointer - 1;
+	if (type_unsigned(type))
+		return type_bits(type);
+	return type_bits(type) - 1;
+}
+
+static inline int sval_positive_bits(sval_t sval)
+{
+	return type_positive_bits(sval.type);
+}
+
+/*
+ * Returns -1 if one is smaller, 0 if they are the same and 1 if two is larger.
+ */
+static inline int sval_cmp(sval_t one, sval_t two)
+{
+	struct symbol *type;
+
+	type = one.type;
+	if (sval_positive_bits(two) > sval_positive_bits(one))
+		type = two.type;
+	if (type_bits(type) < 31)
+		type = &int_ctype;
+
+	one = sval_cast(type, one);
+	two = sval_cast(type, two);
+
+	if (type_unsigned(type)) {
+		if (one.uvalue < two.uvalue)
+			return -1;
+		if (one.uvalue == two.uvalue)
+			return 0;
+		return 1;
+	}
+	/* fix me handle type promotion and unsigned values */
+	if (one.value < two.value)
+		return -1;
+	if (one.value == two.value)
+		return 0;
+	return 1;
+}
+
+#endif 	    /* !SMATCH_H_ */
--- /dev/null	Fri Dec 21 15:00:15 2018
+++ new/usr/src/tools/smatch/src/smatch_about_fn_ptr_arg.c	Fri Dec 21 15:00:15 2018
@@ -0,0 +1,232 @@
+/*
+ * Copyright (C) 2017 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Say you have assign a function to a function pointer and you assign a
+ * pointer to the data argument then we want to record some information about
+ * the argument.  Right now what I mainly want to record is the type of it, I
+ * guess.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+#include <ctype.h>
+
+static int my_id;
+
+static int assigns_parameters(struct expression *fn, struct expression *arg)
+{
+	int fn_param, arg_param;
+	char buf[32];
+
+	fn_param = get_param_num(fn);
+	if (fn_param < 0)
+		return 0;
+
+	arg_param = get_param_num(arg);
+	if (arg_param < 0)
+		return 0;
+
+	snprintf(buf, sizeof(buf), "%d", arg_param);
+	sql_insert_return_implies(FN_ARG_LINK, fn_param, "$", buf);
+	return 1;
+}
+
+static void link_function_arg(struct expression *fn, int param, struct expression *arg)
+{
+	struct symbol *type;
+
+	if (!fn || !arg)
+		return;
+	if (assigns_parameters(fn, arg))
+		return;
+
+	type = get_type(arg);
+	if (!type || type->type != SYM_PTR)
+		return;
+	type = get_real_base_type(type);
+	if (!type)
+		return;
+	// FIXME: param shouldn't always be 0?
+	sql_insert_fn_data_link(fn, PASSES_TYPE, param, "$", type_to_str(type));
+}
+
+char *next_param_name;
+struct symbol *next_param_sym;
+struct expression *next_fn;
+static void match_assign_param(struct expression *expr)
+{
+	struct symbol *sym;
+	char *name;
+
+	if (!next_param_name)
+		return;
+
+	name = expr_to_var_sym(expr->left, &sym);
+	if (!name || !sym) {
+		free_string(name);
+		return;
+	}
+
+	if (sym != next_param_sym ||
+	    strcmp(name, next_param_name) != 0)
+		return;
+
+	link_function_arg(next_fn, 0, strip_expr(expr->right));
+
+	next_param_name = 0;
+	next_param_sym = NULL;
+	next_fn = NULL;
+}
+
+static int get_arg_ptr(void *_arg_ptr, int argc, char **argv, char **azColName)
+{
+	char **arg_ptr = _arg_ptr;
+
+	*arg_ptr = NULL;
+	if (argc != 1)
+		return 0;
+	*arg_ptr = alloc_string(argv[0]);
+	return 0;
+}
+
+static char *get_data_member(char *fn_member, struct expression *expr, struct symbol **sym)
+{
+	struct symbol *tmp_sym;
+	char *fn_str;
+	char *arg_ptr = NULL;
+	char *end_type;
+	int len_ptr, len_str;
+	char buf[128];
+
+	*sym = NULL;
+	run_sql(get_arg_ptr, &arg_ptr,
+		"select data from fn_ptr_data_link where fn_ptr = '%s';", fn_member);
+	if (!arg_ptr)
+		return NULL;
+	end_type = strchr(arg_ptr, '>');
+	if (!end_type)
+		return NULL;
+	end_type++;
+	fn_str = expr_to_var_sym(expr, &tmp_sym);
+	if (!fn_str || !tmp_sym)
+		return NULL;
+	len_ptr = strlen(fn_member);
+	len_str = strlen(fn_str);
+	while (len_str > 0 && len_ptr > 0) {
+		if (fn_str[len_str - 1] != fn_member[len_ptr - 1])
+			break;
+		if (fn_str[len_str - 1] == '>')
+			break;
+		len_str--;
+		len_ptr--;
+	}
+
+	strncpy(buf, fn_str, sizeof(buf));
+	snprintf(buf + len_str, sizeof(buf) - len_str, end_type);
+	*sym = tmp_sym;
+	return alloc_string(buf);
+}
+
+static void match_assign_function(struct expression *expr)
+{
+	struct expression *right, *arg;
+	struct symbol *sym;
+	char *data_member;
+	struct symbol *type;
+	char *member_name;
+
+	right = strip_expr(expr->right);
+	if (right->type == EXPR_PREOP && right->op == '&')
+		right = strip_expr(right->unop);
+
+	type = get_type(right);
+	if (type && type->type == SYM_PTR)
+		type = get_real_base_type(type);
+	if (!type || type->type != SYM_FN)
+		return;
+
+	member_name = get_member_name(expr->left);
+	if (!member_name)
+		return;
+
+	data_member = get_data_member(member_name, expr->left, &sym);
+	if (!data_member || !sym) {
+		free_string(data_member);
+		data_member = NULL;
+	}
+
+	arg = get_assigned_expr_name_sym(data_member, sym);
+	if (arg) {
+		link_function_arg(right, 0, arg);
+	} else {
+		next_param_name = data_member;
+		next_param_sym = sym;
+		next_fn = right;
+	}
+}
+
+static int is_recursive_call(struct expression *call)
+{
+	if (call->fn->type != EXPR_SYMBOL)
+		return 0;
+	if (call->fn->symbol == cur_func_sym)
+		return 1;
+	return 0;
+}
+
+static void check_passes_fn_and_data(struct expression *call, struct expression *fn, char *key, char *value)
+{
+	struct expression *arg;
+	struct symbol *type;
+	int data_nr;
+
+	if (is_recursive_call(call))
+		return;
+
+	type = get_type(fn);
+	if (!type || type->type != SYM_FN)
+		return;
+
+	if (!isdigit(value[0]))
+		return;
+	data_nr = atoi(value);
+	arg = get_argument_from_call_expr(call->args, data_nr);
+	if (!arg)
+		return;
+	link_function_arg(fn, 0, arg);
+}
+
+static void match_end_func(struct symbol *sym)
+{
+	next_param_sym = NULL;
+	next_fn = NULL;
+}
+
+void register_about_fn_ptr_arg(int id)
+{
+	my_id = id;
+
+	if (0 && !option_info)
+		return;
+	add_hook(match_assign_param, ASSIGNMENT_HOOK);
+	add_hook(match_assign_function, ASSIGNMENT_HOOK);
+	select_return_implies_hook(FN_ARG_LINK, &check_passes_fn_and_data);
+	add_hook(&match_end_func, END_FUNC_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:15 2018
+++ new/usr/src/tools/smatch/src/smatch_address.c	Fri Dec 21 15:00:15 2018
@@ -0,0 +1,251 @@
+/*
+ * Copyright (C) 2015 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static bool is_non_null_array(struct expression *expr)
+{
+	struct symbol *type;
+	struct symbol *sym;
+	struct symbol *tmp;
+	int i;
+
+	type = get_type(expr);
+	if (!type || type->type != SYM_ARRAY)
+		return 0;
+	if (expr->type == EXPR_SYMBOL)
+		return 1;
+	if (implied_not_equal(expr, 0))
+		return 1;
+
+	/* verify that it's not the first member of the struct */
+	if (expr->type != EXPR_DEREF || !expr->member)
+		return 0;
+	sym = expr_to_sym(expr);
+	if (!sym)
+		return 0;
+	type = get_real_base_type(sym);
+	if (!type || type->type != SYM_PTR)
+		return 0;
+	type = get_real_base_type(type);
+	if (type->type != SYM_STRUCT)
+		return 0;
+
+	i = 0;
+	FOR_EACH_PTR(type->symbol_list, tmp) {
+		i++;
+		if (!tmp->ident)
+			continue;
+		if (strcmp(expr->member->name, tmp->ident->name) == 0) {
+			if (i == 1)
+				return 0;
+			return 1;
+		}
+	} END_FOR_EACH_PTR(tmp);
+
+	return 0;
+}
+
+int get_member_offset(struct symbol *type, const char *member_name)
+{
+	struct symbol *tmp;
+	int offset;
+
+	if (!type || type->type != SYM_STRUCT)
+		return -1;
+
+	offset = 0;
+	FOR_EACH_PTR(type->symbol_list, tmp) {
+		offset = ALIGN(offset, tmp->ctype.alignment);
+		if (tmp->ident &&
+		    strcmp(member_name, tmp->ident->name) == 0) {
+			return offset;
+		}
+		offset += type_bytes(tmp);
+	} END_FOR_EACH_PTR(tmp);
+	return -1;
+}
+
+int get_member_offset_from_deref(struct expression *expr)
+{
+	struct symbol *type;
+	struct ident *member;
+	int offset;
+
+	if (expr->type != EXPR_DEREF)  /* hopefully, this doesn't happen */
+		return -1;
+
+	if (expr->member_offset >= 0)
+		return expr->member_offset;
+
+	member = expr->member;
+	if (!member)
+		return -1;
+
+	type = get_type(expr->deref);
+	if (!type || type->type != SYM_STRUCT)
+		return -1;
+
+	offset = get_member_offset(type, member->name);
+	if (offset >= 0)
+		expr->member_offset = offset;
+	return offset;
+}
+
+static struct range_list *filter_unknown_negatives(struct range_list *rl)
+{
+	struct data_range *first;
+	struct range_list *filter = NULL;
+
+	first = first_ptr_list((struct ptr_list *)rl);
+
+	if (sval_is_min(first->min) &&
+	    sval_is_negative(first->max) &&
+	    first->max.value == -1) {
+		add_ptr_list(&filter, first);
+		return rl_filter(rl, filter);
+	}
+
+	return rl;
+}
+
+static void add_offset_to_pointer(struct range_list **rl, int offset)
+{
+	sval_t min, max, remove, sval;
+	struct range_list *orig = *rl;
+
+	/*
+	 * Ha ha.  Treating zero as a special case means I'm correct at least a
+	 * tiny fraction of the time.  Which is better than nothing.
+	 *
+	 */
+	if (offset == 0)
+		return;
+
+	/*
+	 * This function doesn't necessarily work how you might expect...
+	 *
+	 * Say you have s64min-(-1),1-s64max and you add 8 then I guess what
+	 * we want to say is maybe something like 9-s64max.  This shows that the
+	 * min it could be is 9 which is potentially useful information.  But
+	 * if we start with (-12),5000000-57777777 and we add 8 then we'd want
+	 * the result to be (-4),5000008-57777777 but (-4),5000000-57777777 is
+	 * also probably acceptable.  If you start with s64min-s64max then the
+	 * result should be 8-s64max.
+	 *
+	 */
+
+	/* We do the math on void pointer type, because this isn't "&v + 16" it
+	 * is &v->sixteenth_byte.
+	 */
+	orig = cast_rl(&ptr_ctype, orig);
+	min = sval_type_min(&ptr_ctype);
+	min.value = offset;
+	max = sval_type_max(&ptr_ctype);
+
+	if (!orig || is_whole_rl(orig)) {
+		*rl = alloc_rl(min, max);
+		return;
+	}
+
+	orig = filter_unknown_negatives(orig);
+	/*
+	 * FIXME:  This is not really accurate but we're a bit screwed anyway
+	 * when we start doing pointer math with error pointers so it's probably
+	 * not important.
+	 *
+	 */
+	if (sval_is_negative(rl_min(orig)))
+		return;
+
+	/* no wrap around */
+	max.uvalue = rl_max(orig).uvalue;
+	if (max.uvalue > sval_type_max(&ptr_ctype).uvalue - offset) {
+		remove = sval_type_max(&ptr_ctype);
+		remove.uvalue -= offset;
+		orig = remove_range(orig, remove, max);
+	}
+
+	sval.type = &int_ctype;
+	sval.value = offset;
+
+	*rl = rl_binop(orig, '+', alloc_rl(sval, sval));
+}
+
+static struct range_list *where_allocated_rl(struct symbol *sym)
+{
+	if (!sym)
+		return NULL;
+
+	if (sym->ctype.modifiers & (MOD_TOPLEVEL | MOD_STATIC)) {
+		if (sym->initializer)
+			return alloc_rl(data_seg_min, data_seg_max);
+		else
+			return alloc_rl(bss_seg_min, bss_seg_max);
+	}
+	return alloc_rl(stack_seg_min, stack_seg_max);
+}
+
+int get_address_rl(struct expression *expr, struct range_list **rl)
+{
+	expr = strip_expr(expr);
+	if (!expr)
+		return 0;
+
+	if (expr->type == EXPR_STRING) {
+		*rl = alloc_rl(text_seg_min, text_seg_max);
+		return 1;
+	}
+
+	if (expr->type == EXPR_PREOP && expr->op == '&') {
+		struct expression *unop;
+
+		unop = strip_expr(expr->unop);
+		if (unop->type == EXPR_SYMBOL) {
+			*rl = where_allocated_rl(unop->symbol);
+			return 1;
+		}
+
+		if (unop->type == EXPR_DEREF) {
+			int offset = get_member_offset_from_deref(unop);
+
+			unop = strip_expr(unop->unop);
+			if (unop->type == EXPR_SYMBOL) {
+				*rl = where_allocated_rl(unop->symbol);
+			} else if (unop->type == EXPR_PREOP && unop->op == '*') {
+				unop = strip_expr(unop->unop);
+				get_absolute_rl(unop, rl);
+			} else {
+				return 0;
+			}
+
+			add_offset_to_pointer(rl, offset);
+			return 1;
+		}
+
+		return 0;
+	}
+
+	if (is_non_null_array(expr)) {
+		*rl = alloc_rl(array_min_sval, array_max_sval);
+		return 1;
+	}
+
+	return 0;
+}
--- /dev/null	Fri Dec 21 15:00:15 2018
+++ new/usr/src/tools/smatch/src/smatch_annotate.c	Fri Dec 21 15:00:15 2018
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2013 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * A place to add function annotations for common functions.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+
+static int param_caps_return(struct expression *call, void *_arg, struct range_list **res)
+{
+	int arg = PTR_INT(_arg);
+	struct expression *expr;
+	struct range_list *rl;
+
+	expr = get_argument_from_call_expr(call->args, arg);
+	if (get_implied_rl(expr, &rl) && rl_max(rl).value != 0)
+		*res = alloc_rl(sval_type_val(rl_type(rl), 0), rl_max(rl));
+	return 1;
+}
+
+void register_annotate(int id)
+{
+	/*
+	 * Technically snprintf() returns the number of bytes which *would* have
+	 * been printed.  I do try caclulating that in check_snprintf().  But
+	 * it probably works better to assume the limitter is accurate.
+	 */
+	add_implied_return_hook("snprintf", &param_caps_return, INT_PTR(1));
+
+}
--- /dev/null	Fri Dec 21 15:00:15 2018
+++ new/usr/src/tools/smatch/src/smatch_array_values.c	Fri Dec 21 15:00:15 2018
@@ -0,0 +1,196 @@
+/*
+ * Copyright (C) 2018 Oracle.  All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+struct db_info {
+	int count;
+	struct symbol *type;
+	struct range_list *rl;
+};
+
+static int get_vals(void *_db_info, int argc, char **argv, char **azColName)
+{
+	struct db_info *db_info = _db_info;
+	struct range_list *rl;
+
+	str_to_rl(db_info->type, argv[0], &rl);
+	db_info->rl = rl_union(db_info->rl, rl);
+
+	return 0;
+}
+
+static int is_file_local(struct expression *array)
+{
+	struct symbol *sym = NULL;
+	char *name;
+
+	name = expr_to_str_sym(array, &sym);
+	free_string(name);
+	if (!sym)
+		return 0;
+
+	if ((sym->ctype.modifiers & MOD_TOPLEVEL) &&
+	    (sym->ctype.modifiers & MOD_STATIC))
+		return 1;
+	return 0;
+}
+
+static char *get_toplevel_name(struct expression *array)
+{
+	char *name;
+	char buf[128];
+
+	if (is_array(array))
+		array = get_array_base(array);
+
+	if (!array || array->type != EXPR_SYMBOL)
+		return NULL;
+	if (!is_file_local(array))
+		return NULL;
+
+	name = expr_to_str(array);
+	snprintf(buf, sizeof(buf), "%s[]", name);
+	free_string(name);
+
+	return alloc_sname(buf);
+}
+
+static char *get_member_array(struct expression *array)
+{
+	char *name;
+	char buf[128];
+
+	name = get_member_name(array);
+	if (!name)
+		return NULL;
+	snprintf(buf, sizeof(buf), "%s[]", name);
+	free_string(name);
+	return alloc_sname(buf);
+}
+
+static char *get_array_name(struct expression *array)
+{
+	struct symbol *type;
+	char *name;
+
+	type = get_type(array);
+	if (!type || type->type != SYM_ARRAY)
+		return NULL;
+
+	name = get_toplevel_name(array);
+	if (name)
+		return name;
+	name = get_member_array(array);
+	if (name)
+		return name;
+
+	return NULL;
+}
+
+int get_array_rl(struct expression *expr, struct range_list **rl)
+{
+	struct expression *array;
+	struct symbol *type;
+	struct db_info db_info = {};
+	char *name;
+
+	type = get_type(expr);
+	if (!type || type->type != SYM_BASETYPE)
+		return 0;
+	db_info.type = type;
+
+	array = get_array_base(expr);
+	name = get_array_name(array);
+	if (!name)
+		return 0;
+
+	if (is_file_local(array)) {
+		run_sql(&get_vals, &db_info,
+			"select value from sink_info where file = '%s' and static = 1 and sink_name = '%s' and type = %d;",
+			get_filename(), name, DATA_VALUE);
+	} else {
+		run_sql(&get_vals, &db_info,
+			"select value from sink_info where sink_name = '%s' and type = %d limit 10;",
+			name, DATA_VALUE);
+	}
+	if (!db_info.rl || db_info.count >= 10)
+		return 0;
+
+	*rl = db_info.rl;
+	return 1;
+}
+
+static struct range_list *get_saved_rl(struct symbol *type, char *name)
+{
+	struct db_info db_info = {.type = type};
+
+	cache_sql(&get_vals, &db_info, "select value from sink_info where sink_name = '%s' and type = %d;",
+		  name, DATA_VALUE);
+	return db_info.rl;
+}
+
+static void update_cache(char *name, int is_static, struct range_list *rl)
+{
+	cache_sql(NULL, NULL, "delete from sink_info where sink_name = '%s' and type = %d;",
+		  name, DATA_VALUE);
+	cache_sql(NULL, NULL, "insert into sink_info values ('%s', %d, '%s', %d, '', '%s');",
+		  get_filename(), is_static, name, DATA_VALUE, show_rl(rl));
+}
+
+static void match_assign(struct expression *expr)
+{
+	struct expression *left, *array;
+	struct range_list *orig_rl, *rl;
+	struct symbol *type;
+	char *name;
+
+	type = get_type(expr->right);
+	if (!type || type->type != SYM_BASETYPE)
+		return;
+
+	left = strip_expr(expr->left);
+	if (!is_array(left))
+		return;
+	array = get_array_base(left);
+	name = get_array_name(array);
+	if (!name)
+		return;
+
+	if (expr->op != '=') {
+		rl = alloc_whole_rl(type);
+	} else {
+		get_absolute_rl(expr->right, &rl);
+		rl = cast_rl(type, rl);
+		orig_rl = get_saved_rl(type, name);
+		rl = rl_union(orig_rl, rl);
+	}
+
+	update_cache(name, is_file_local(array), rl);
+}
+
+void register_array_values(int id)
+{
+	my_id = id;
+
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+	add_hook(&match_assign, GLOBAL_ASSIGNMENT_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:15 2018
+++ new/usr/src/tools/smatch/src/smatch_assigned_expr.c	Fri Dec 21 15:00:15 2018
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This is not a check.  It just saves an struct expression pointer 
+ * whenever something is assigned.  This can be used later on by other scripts.
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+int check_assigned_expr_id;
+static int my_id;
+static int link_id;
+
+static void undef(struct sm_state *sm, struct expression *mod_expr)
+{
+	set_state(my_id, sm->name, sm->sym, &undefined);
+}
+
+struct expression *get_assigned_expr(struct expression *expr)
+{
+	struct smatch_state *state;
+
+	state = get_state_expr(my_id, expr);
+	if (!state)
+		return NULL;
+	return (struct expression *)state->data;
+}
+
+struct expression *get_assigned_expr_name_sym(const char *name, struct symbol *sym)
+{
+	struct smatch_state *state;
+
+	state = get_state(my_id, name, sym);
+	if (!state)
+		return NULL;
+	return (struct expression *)state->data;
+}
+
+static void match_assignment(struct expression *expr)
+{
+	struct symbol *left_sym, *right_sym;
+	char *left_name = NULL;
+	char *right_name = NULL;
+
+	if (expr->op != '=')
+		return;
+	if (is_fake_call(expr->right))
+		return;
+	if (__in_fake_struct_assign) {
+		struct range_list *rl;
+
+		if (!get_implied_rl(expr->right, &rl))
+			return;
+		if (is_whole_rl(rl))
+			return;
+	}
+
+	left_name = expr_to_var_sym(expr->left, &left_sym);
+	if (!left_name || !left_sym)
+		goto free;
+	set_state(my_id, left_name, left_sym, alloc_state_expr(strip_expr(expr->right)));
+
+	right_name = expr_to_var_sym(expr->right, &right_sym);
+	if (!right_name || !right_sym)
+		goto free;
+
+	store_link(link_id, right_name, right_sym, left_name, left_sym);
+
+free:
+	free_string(left_name);
+	free_string(right_name);
+}
+
+static void record_param_assignment(struct expression *expr, int param, char *key, char *value)
+{
+	struct expression *arg, *right;
+	struct symbol *sym;
+	char *name;
+	char *p;
+	int right_param;
+
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+	if (!expr || expr->type != EXPR_CALL)
+		return;
+
+	p = strstr(value, "[$");
+	if (!p)
+		return;
+
+	p += 2;
+	right_param = strtol(p, &p, 10);
+	if (*p != ']')
+		return;
+
+	arg = get_argument_from_call_expr(expr->args, param);
+	right = get_argument_from_call_expr(expr->args, right_param);
+	if (!right || !arg)
+		return;
+	name = get_variable_from_key(arg, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	set_state(my_id, name, sym, alloc_state_expr(right));
+free:
+	free_string(name);
+}
+
+void register_assigned_expr(int id)
+{
+	my_id = check_assigned_expr_id = id;
+	add_hook(&match_assignment, ASSIGNMENT_HOOK_AFTER);
+	add_modification_hook(my_id, &undef);
+	select_return_states_hook(PARAM_SET, &record_param_assignment);
+}
+
+void register_assigned_expr_links(int id)
+{
+	link_id = id;
+	db_ignore_states(link_id);
+	set_up_link_functions(my_id, link_id);
+}
+
--- /dev/null	Fri Dec 21 15:00:15 2018
+++ new/usr/src/tools/smatch/src/smatch_auto_copy.c	Fri Dec 21 15:00:15 2018
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+static int *auto_copy;
+
+void set_auto_copy(int owner)
+{
+	if (owner <= 1 || owner > num_checks) {
+		sm_ierror("bogus set_auto_copy()");
+		return;
+	}
+	auto_copy[owner] = 1;
+}
+
+static void match_assign(struct expression *expr)
+{
+	char *left_name = NULL;
+	char *right_name = NULL;
+	struct symbol *left_sym, *right_sym;
+	struct state_list *slist = NULL;
+	struct sm_state *sm;
+
+	left_name = expr_to_var_sym(expr->left, &left_sym);
+	if (!left_name || !left_sym)
+		goto free;
+	right_name = expr_to_var_sym(expr->right, &right_sym);
+	if (!right_name || !right_sym)
+		goto free;
+
+	FOR_EACH_SM(__get_cur_stree(), sm) {
+		if (sm->owner <= 1 || sm->owner > num_checks)
+			continue;
+		if (!auto_copy[sm->owner])
+			continue;
+		if (right_sym != sm->sym)
+			continue;
+		if (strcmp(right_name, sm->name) != 0)
+			continue;
+		add_ptr_list(&slist, sm);
+	} END_FOR_EACH_SM(sm);
+
+
+	FOR_EACH_PTR(slist, sm) {
+		set_state(sm->owner, left_name, left_sym, sm->state);
+	} END_FOR_EACH_PTR(sm);
+
+free:
+	free_slist(&slist);
+	free_string(left_name);
+	free_string(right_name);
+}
+
+void register_auto_copy(int id)
+{
+	my_id = id;
+	auto_copy = malloc((num_checks + 1) * sizeof(*auto_copy));
+	memset(auto_copy, 0, (num_checks + 1) * sizeof(*auto_copy));
+
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:15 2018
+++ new/usr/src/tools/smatch/src/smatch_buf_comparison.c	Fri Dec 21 15:00:15 2018
@@ -0,0 +1,605 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * The point here is to store that a buffer has x bytes even if we don't know
+ * the value of x.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+static int size_id;
+static int link_id;
+
+/*
+ * We need this for code which does:
+ *
+ *     if (size)
+ *         foo = malloc(size);
+ *
+ * We want to record that the size of "foo" is "size" even after the merge.
+ *
+ */
+static struct smatch_state *unmatched_state(struct sm_state *sm)
+{
+	struct expression *size_expr;
+	sval_t sval;
+
+	if (!sm->state->data)
+		return &undefined;
+	size_expr = sm->state->data;
+	if (!get_implied_value(size_expr, &sval) || sval.value != 0)
+		return &undefined;
+	return sm->state;
+}
+
+static struct smatch_state *merge_links(struct smatch_state *s1, struct smatch_state *s2)
+{
+	struct expression *expr1, *expr2;
+
+	expr1 = s1->data;
+	expr2 = s2->data;
+
+	if (expr1 && expr2 && expr_equiv(expr1, expr2))
+		return s1;
+	return &merged;
+}
+
+static void match_link_modify(struct sm_state *sm, struct expression *mod_expr)
+{
+	struct expression *expr;
+	struct sm_state *tmp;
+
+	expr = sm->state->data;
+	if (expr) {
+		set_state_expr(size_id, expr, &undefined);
+		set_state(link_id, sm->name, sm->sym, &undefined);
+		return;
+	}
+
+	FOR_EACH_PTR(sm->possible, tmp) {
+		expr = tmp->state->data;
+		if (expr)
+			set_state_expr(size_id, expr, &undefined);
+	} END_FOR_EACH_PTR(tmp);
+	set_state(link_id, sm->name, sm->sym, &undefined);
+}
+
+static struct smatch_state *alloc_expr_state(struct expression *expr)
+{
+	struct smatch_state *state;
+	char *name;
+
+	state = __alloc_smatch_state(0);
+	expr = strip_expr(expr);
+	name = expr_to_str(expr);
+	state->name = alloc_sname(name);
+	free_string(name);
+	state->data = expr;
+	return state;
+}
+
+static int bytes_per_element(struct expression *expr)
+{
+	struct symbol *type;
+
+	type = get_type(expr);
+	if (!type)
+		return 0;
+
+	if (type->type != SYM_PTR && type->type != SYM_ARRAY)
+		return 0;
+
+	type = get_base_type(type);
+	return type_bytes(type);
+}
+
+static void db_save_type_links(struct expression *array, struct expression *size)
+{
+	const char *array_name;
+
+	array_name = get_data_info_name(array);
+	if (!array_name)
+		array_name = "";
+	sql_insert_data_info(size, ARRAY_LEN, array_name);
+}
+
+static void match_alloc_helper(struct expression *pointer, struct expression *size)
+{
+	struct expression *tmp;
+	struct sm_state *sm;
+	sval_t sval;
+	int cnt = 0;
+
+	pointer = strip_expr(pointer);
+	size = strip_expr(size);
+	if (!size || !pointer)
+		return;
+
+	while ((tmp = get_assigned_expr(size))) {
+		size = strip_expr(tmp);
+		if (cnt++ > 5)
+			break;
+	}
+
+	if (size->type == EXPR_BINOP && size->op == '*') {
+		struct expression *mult_left, *mult_right;
+
+		mult_left = strip_expr(size->left);
+		mult_right = strip_expr(size->right);
+
+		if (get_implied_value(mult_left, &sval) &&
+		    sval.value == bytes_per_element(pointer))
+			size = mult_right;
+		else if (get_implied_value(mult_right, &sval) &&
+		    sval.value == bytes_per_element(pointer))
+			size = mult_left;
+		else
+			return;
+	}
+
+	/* Only save links to variables, not fixed sizes */
+	if (get_value(size, &sval))
+		return;
+
+	db_save_type_links(pointer, size);
+	sm = set_state_expr(size_id, pointer, alloc_expr_state(size));
+	if (!sm)
+		return;
+	set_state_expr(link_id, size, alloc_expr_state(pointer));
+}
+
+static void match_alloc(const char *fn, struct expression *expr, void *_size_arg)
+{
+	int size_arg = PTR_INT(_size_arg);
+	struct expression *pointer, *call, *arg;
+
+	pointer = strip_expr(expr->left);
+	call = strip_expr(expr->right);
+	arg = get_argument_from_call_expr(call->args, size_arg);
+	match_alloc_helper(pointer, arg);
+}
+
+static void match_calloc(const char *fn, struct expression *expr, void *_start_arg)
+{
+	int start_arg = PTR_INT(_start_arg);
+	struct expression *pointer, *call, *arg;
+	struct sm_state *tmp;
+	sval_t sval;
+
+	pointer = strip_expr(expr->left);
+	call = strip_expr(expr->right);
+	arg = get_argument_from_call_expr(call->args, start_arg);
+	if (get_implied_value(arg, &sval) &&
+	    sval.value == bytes_per_element(pointer))
+		arg = get_argument_from_call_expr(call->args, start_arg + 1);
+
+	db_save_type_links(pointer, arg);
+	tmp = set_state_expr(size_id, pointer, alloc_expr_state(arg));
+	if (!tmp)
+		return;
+	set_state_expr(link_id, arg, alloc_expr_state(pointer));
+}
+
+struct expression *get_size_variable(struct expression *buf)
+{
+	struct smatch_state *state;
+
+	state = get_state_expr(size_id, buf);
+	if (state)
+		return state->data;
+	return NULL;
+}
+
+struct expression *get_array_variable(struct expression *size)
+{
+	struct smatch_state *state;
+
+	state = get_state_expr(link_id, size);
+	if (state)
+		return state->data;
+	return NULL;
+}
+
+static void array_check(struct expression *expr)
+{
+	struct expression *array;
+	struct expression *size;
+	struct expression *offset;
+	char *array_str, *offset_str;
+
+	expr = strip_expr(expr);
+	if (!is_array(expr))
+		return;
+
+	array = get_array_base(expr);
+	size = get_size_variable(array);
+	if (!size)
+		return;
+	offset = get_array_offset(expr);
+	if (!possible_comparison(size, SPECIAL_EQUAL, offset))
+		return;
+
+	array_str = expr_to_str(array);
+	offset_str = expr_to_str(offset);
+	sm_warning("potentially one past the end of array '%s[%s]'", array_str, offset_str);
+	free_string(array_str);
+	free_string(offset_str);
+}
+
+struct db_info {
+	char *name;
+	int ret;
+};
+
+static int db_limitter_callback(void *_info, int argc, char **argv, char **azColName)
+{
+	struct db_info *info = _info;
+
+	/*
+	 * If possible the limitters are tied to the struct they limit.  If we
+	 * aren't sure which struct they limit then we use them as limitters for
+	 * everything.
+	 */
+	if (!info->name || argv[0][0] == '\0' || strcmp(info->name, argv[0]) == 0)
+		info->ret = 1;
+	return 0;
+}
+
+static char *vsl_to_data_info_name(const char *name, struct var_sym_list *vsl)
+{
+	struct var_sym *vs;
+	struct symbol *type;
+	static char buf[80];
+	const char *p;
+
+	if (ptr_list_size((struct ptr_list *)vsl) != 1)
+		return NULL;
+	vs = first_ptr_list((struct ptr_list *)vsl);
+
+	type = get_real_base_type(vs->sym);
+	if (!type || type->type != SYM_PTR)
+		goto top_level_name;
+	type = get_real_base_type(type);
+	if (!type || type->type != SYM_STRUCT)
+		goto top_level_name;
+	if (!type->ident)
+		goto top_level_name;
+
+	p = name;
+	while ((name = strstr(p, "->")))
+		p = name + 2;
+
+	snprintf(buf, sizeof(buf),"(struct %s)->%s", type->ident->name, p);
+	return alloc_sname(buf);
+
+top_level_name:
+	if (!(vs->sym->ctype.modifiers & MOD_TOPLEVEL))
+		return NULL;
+	if (vs->sym->ctype.modifiers & MOD_STATIC)
+		snprintf(buf, sizeof(buf),"static %s", name);
+	else
+		snprintf(buf, sizeof(buf),"global %s", name);
+	return alloc_sname(buf);
+}
+
+int db_var_is_array_limit(struct expression *array, const char *name, struct var_sym_list *vsl)
+{
+	char *size_name;
+	char *array_name = get_data_info_name(array);
+	struct db_info db_info = {.name = array_name,};
+
+	size_name = vsl_to_data_info_name(name, vsl);
+	if (!size_name)
+		return 0;
+
+	run_sql(db_limitter_callback, &db_info,
+		"select value from data_info where type = %d and data = '%s';",
+		ARRAY_LEN, size_name);
+
+	return db_info.ret;
+}
+
+static int known_access_ok_comparison(struct expression *expr)
+{
+	struct expression *array;
+	struct expression *size;
+	struct expression *offset;
+	int comparison;
+
+	array = get_array_base(expr);
+	size = get_size_variable(array);
+	if (!size)
+		return 0;
+	offset = get_array_offset(expr);
+	comparison = get_comparison(size, offset);
+	if (comparison == '>' || comparison == SPECIAL_UNSIGNED_GT)
+		return 1;
+
+	return 0;
+}
+
+static int known_access_ok_numbers(struct expression *expr)
+{
+	struct expression *array;
+	struct expression *offset;
+	sval_t max;
+	int size;
+
+	array = get_array_base(expr);
+	offset = get_array_offset(expr);
+
+	size = get_array_size(array);
+	if (size <= 0)
+		return 0;
+
+	get_absolute_max(offset, &max);
+	if (max.uvalue < size)
+		return 1;
+	return 0;
+}
+
+static void array_check_data_info(struct expression *expr)
+{
+	struct expression *array;
+	struct expression *offset;
+	struct state_list *slist;
+	struct sm_state *sm;
+	struct compare_data *comp;
+	char *offset_name;
+	const char *equal_name = NULL;
+
+	expr = strip_expr(expr);
+	if (!is_array(expr))
+		return;
+
+	if (known_access_ok_numbers(expr))
+		return;
+	if (known_access_ok_comparison(expr))
+		return;
+
+	array = get_array_base(expr);
+	offset = get_array_offset(expr);
+	offset_name = expr_to_var(offset);
+	if (!offset_name)
+		return;
+	slist = get_all_possible_equal_comparisons(offset);
+	if (!slist)
+		goto free;
+
+	FOR_EACH_PTR(slist, sm) {
+		comp = sm->state->data;
+		if (strcmp(comp->left_var, offset_name) == 0) {
+			if (db_var_is_array_limit(array, comp->right_var, comp->right_vsl)) {
+				equal_name = comp->right_var;
+				break;
+			}
+		} else if (strcmp(comp->right_var, offset_name) == 0) {
+			if (db_var_is_array_limit(array, comp->left_var, comp->left_vsl)) {
+				equal_name = comp->left_var;
+				break;
+			}
+		}
+	} END_FOR_EACH_PTR(sm);
+
+	if (equal_name) {
+		char *array_name = expr_to_str(array);
+
+		sm_warning("potential off by one '%s[]' limit '%s'", array_name, equal_name);
+		free_string(array_name);
+	}
+
+free:
+	free_slist(&slist);
+	free_string(offset_name);
+}
+
+static void add_allocation_function(const char *func, void *call_back, int param)
+{
+	add_function_assign_hook(func, call_back, INT_PTR(param));
+}
+
+static char *buf_size_param_comparison(struct expression *array, struct expression_list *args)
+{
+	struct expression *arg;
+	struct expression *size;
+	static char buf[32];
+	int i;
+
+	size = get_size_variable(array);
+	if (!size)
+		return NULL;
+
+	i = -1;
+	FOR_EACH_PTR(args, arg) {
+		i++;
+		if (arg == array)
+			continue;
+		if (!expr_equiv(arg, size))
+			continue;
+		snprintf(buf, sizeof(buf), "==$%d", i);
+		return buf;
+	} END_FOR_EACH_PTR(arg);
+
+	return NULL;
+}
+
+static void match_call(struct expression *call)
+{
+	struct expression *arg;
+	char *compare;
+	int param;
+
+	param = -1;
+	FOR_EACH_PTR(call->args, arg) {
+		param++;
+		if (!is_pointer(arg))
+			continue;
+		compare = buf_size_param_comparison(arg, call->args);
+		if (!compare)
+			continue;
+		sql_insert_caller_info(call, ARRAY_LEN, param, "$", compare);
+	} END_FOR_EACH_PTR(arg);
+}
+
+static int get_param(int param, char **name, struct symbol **sym)
+{
+	struct symbol *arg;
+	int i;
+
+	i = 0;
+	FOR_EACH_PTR(cur_func_sym->ctype.base_type->arguments, arg) {
+		/*
+		 * this is a temporary hack to work around a bug (I think in sparse?)
+		 * 2.6.37-rc1:fs/reiserfs/journal.o
+		 * If there is a function definition without parameter name found
+		 * after a function implementation then it causes a crash.
+		 * int foo() {}
+		 * int bar(char *);
+		 */
+		if (arg->ident->name < (char *)100)
+			continue;
+		if (i == param) {
+			*name = arg->ident->name;
+			*sym = arg;
+			return TRUE;
+		}
+		i++;
+	} END_FOR_EACH_PTR(arg);
+
+	return FALSE;
+}
+
+static void set_param_compare(const char *array_name, struct symbol *array_sym, char *key, char *value)
+{
+	struct expression *array_expr;
+	struct expression *size_expr;
+	struct symbol *size_sym;
+	char *size_name;
+	long param;
+	struct sm_state *tmp;
+
+	if (strncmp(value, "==$", 3) != 0)
+		return;
+	param = strtol(value + 3, NULL, 10);
+	if (!get_param(param, &size_name, &size_sym))
+		return;
+	array_expr = symbol_expression(array_sym);
+	size_expr = symbol_expression(size_sym);
+
+	tmp = set_state_expr(size_id, array_expr, alloc_expr_state(size_expr));
+	if (!tmp)
+		return;
+	set_state_expr(link_id, size_expr, alloc_expr_state(array_expr));
+}
+
+static void set_arraysize_arg(const char *array_name, struct symbol *array_sym, char *key, char *value)
+{
+	struct expression *array_expr;
+	struct expression *size_expr;
+	struct symbol *size_sym;
+	char *size_name;
+	long param;
+	struct sm_state *tmp;
+
+	param = strtol(key, NULL, 10);
+	if (!get_param(param, &size_name, &size_sym))
+		return;
+	array_expr = symbol_expression(array_sym);
+	size_expr = symbol_expression(size_sym);
+
+	tmp = set_state_expr(size_id, array_expr, alloc_expr_state(size_expr));
+	if (!tmp)
+		return;
+	set_state_expr(link_id, size_expr, alloc_expr_state(array_expr));
+}
+
+static void munge_start_states(struct statement *stmt)
+{
+	struct state_list *slist = NULL;
+	struct sm_state *sm;
+	struct sm_state *poss;
+
+	FOR_EACH_MY_SM(size_id, __get_cur_stree(), sm) {
+		if (sm->state != &merged)
+			continue;
+		/*
+		 * screw it.  let's just assume that if one caller passes the
+		 * size then they all do.
+		 */
+		FOR_EACH_PTR(sm->possible, poss) {
+			if (poss->state != &merged &&
+			    poss->state != &undefined) {
+				add_ptr_list(&slist, poss);
+				break;
+			}
+		} END_FOR_EACH_PTR(poss);
+	} END_FOR_EACH_SM(sm);
+
+	FOR_EACH_PTR(slist, sm) {
+		set_state(size_id, sm->name, sm->sym, sm->state);
+	} END_FOR_EACH_PTR(sm);
+
+	free_slist(&slist);
+}
+
+void register_buf_comparison(int id)
+{
+	size_id = id;
+
+	add_unmatched_state_hook(size_id, &unmatched_state);
+
+	add_allocation_function("malloc", &match_alloc, 0);
+	add_allocation_function("memdup", &match_alloc, 1);
+	add_allocation_function("realloc", &match_alloc, 1);
+	if (option_project == PROJ_KERNEL) {
+		add_allocation_function("kmalloc", &match_alloc, 0);
+		add_allocation_function("kzalloc", &match_alloc, 0);
+		add_allocation_function("vmalloc", &match_alloc, 0);
+		add_allocation_function("__vmalloc", &match_alloc, 0);
+		add_allocation_function("sock_kmalloc", &match_alloc, 1);
+		add_allocation_function("kmemdup", &match_alloc, 1);
+		add_allocation_function("kmemdup_user", &match_alloc, 1);
+		add_allocation_function("dma_alloc_attrs", &match_alloc, 1);
+		add_allocation_function("pci_alloc_consistent", &match_alloc, 1);
+		add_allocation_function("pci_alloc_coherent", &match_alloc, 1);
+		add_allocation_function("devm_kmalloc", &match_alloc, 1);
+		add_allocation_function("devm_kzalloc", &match_alloc, 1);
+		add_allocation_function("kcalloc", &match_calloc, 0);
+		add_allocation_function("devm_kcalloc", &match_calloc, 1);
+		add_allocation_function("kmalloc_array", &match_calloc, 0);
+		add_allocation_function("krealloc", &match_alloc, 1);
+	}
+
+	add_hook(&array_check, OP_HOOK);
+	add_hook(&array_check_data_info, OP_HOOK);
+
+	add_hook(&match_call, FUNCTION_CALL_HOOK);
+	select_caller_info_hook(set_param_compare, ARRAY_LEN);
+	select_caller_info_hook(set_arraysize_arg, ARRAYSIZE_ARG);
+	add_hook(&munge_start_states, AFTER_DEF_HOOK);
+}
+
+void register_buf_comparison_links(int id)
+{
+	link_id = id;
+	add_merge_hook(link_id, &merge_links);
+	add_modification_hook(link_id, &match_link_modify);
+}
--- /dev/null	Fri Dec 21 15:00:16 2018
+++ new/usr/src/tools/smatch/src/smatch_buf_size.c	Fri Dec 21 15:00:16 2018
@@ -0,0 +1,935 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include <stdlib.h>
+#include <errno.h>
+#include "parse.h"
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+#include "smatch_function_hashtable.h"
+
+#define UNKNOWN_SIZE (-1)
+
+static int my_size_id;
+
+static DEFINE_HASHTABLE_INSERT(insert_func, char, int);
+static DEFINE_HASHTABLE_SEARCH(search_func, char, int);
+static struct hashtable *allocation_funcs;
+
+static char *get_fn_name(struct expression *expr)
+{
+	if (expr->type != EXPR_CALL)
+		return NULL;
+	if (expr->fn->type != EXPR_SYMBOL)
+		return NULL;
+	return expr_to_var(expr->fn);
+}
+
+static int is_allocation_function(struct expression *expr)
+{
+	char *func;
+	int ret = 0;
+
+	func = get_fn_name(expr);
+	if (!func)
+		return 0;
+	if (search_func(allocation_funcs, func))
+		ret = 1;
+	free_string(func);
+	return ret;
+}
+
+static void add_allocation_function(const char *func, void *call_back, int param)
+{
+	insert_func(allocation_funcs, (char *)func, (int *)1);
+	add_function_assign_hook(func, call_back, INT_PTR(param));
+}
+
+static int estate_to_size(struct smatch_state *state)
+{
+	sval_t sval;
+
+	if (!state || !estate_rl(state))
+		return 0;
+	sval = estate_max(state);
+	return sval.value;
+}
+
+static struct smatch_state *size_to_estate(int size)
+{
+	sval_t sval;
+
+	sval.type = &int_ctype;
+	sval.value = size;
+
+	return alloc_estate_sval(sval);
+}
+
+static struct range_list *size_to_rl(int size)
+{
+	sval_t sval;
+
+	sval.type = &int_ctype;
+	sval.value = size;
+
+	return alloc_rl(sval, sval);
+}
+
+static struct smatch_state *unmatched_size_state(struct sm_state *sm)
+{
+	return size_to_estate(UNKNOWN_SIZE);
+}
+
+static void set_size_undefined(struct sm_state *sm, struct expression *mod_expr)
+{
+	set_state(sm->owner, sm->name, sm->sym, size_to_estate(UNKNOWN_SIZE));
+}
+
+static struct smatch_state *merge_size_func(struct smatch_state *s1, struct smatch_state *s2)
+{
+	return merge_estates(s1, s2);
+}
+
+void set_param_buf_size(const char *name, struct symbol *sym, char *key, char *value)
+{
+	struct range_list *rl = NULL;
+	struct smatch_state *state;
+	char fullname[256];
+
+	if (strncmp(key, "$", 1) != 0)
+		return;
+
+	snprintf(fullname, 256, "%s%s", name, key + 1);
+
+	str_to_rl(&int_ctype, value, &rl);
+	if (!rl || is_whole_rl(rl))
+		return;
+	state = alloc_estate_rl(rl);
+	set_state(my_size_id, fullname, sym, state);
+}
+
+static int bytes_per_element(struct expression *expr)
+{
+	struct symbol *type;
+
+	if (!expr)
+		return 0;
+	if (expr->type == EXPR_STRING)
+		return 1;
+	if (expr->type == EXPR_PREOP && expr->op == '&') {
+		type = get_type(expr->unop);
+		if (type && type->type == SYM_ARRAY)
+			expr = expr->unop;
+	}
+	type = get_type(expr);
+	if (!type)
+		return 0;
+
+	if (type->type != SYM_PTR && type->type != SYM_ARRAY)
+		return 0;
+
+	type = get_base_type(type);
+	return type_bytes(type);
+}
+
+static int bytes_to_elements(struct expression *expr, int bytes)
+{
+	int bpe;
+
+	bpe = bytes_per_element(expr);
+	if (bpe == 0)
+		return 0;
+	return bytes / bpe;
+}
+
+static int elements_to_bytes(struct expression *expr, int elements)
+{
+	int bpe;
+
+	bpe = bytes_per_element(expr);
+	return elements * bpe;
+}
+
+static int get_initializer_size(struct expression *expr)
+{
+	switch (expr->type) {
+	case EXPR_STRING:
+		return expr->string->length;
+	case EXPR_INITIALIZER: {
+		struct expression *tmp;
+		int i = 0;
+
+		FOR_EACH_PTR(expr->expr_list, tmp) {
+			if (tmp->type == EXPR_INDEX) {
+				if (tmp->idx_to >= i)
+					i = tmp->idx_to;
+				else
+					continue;
+			}
+
+			i++;
+		} END_FOR_EACH_PTR(tmp);
+		return i;
+	}
+	case EXPR_SYMBOL:
+		return get_array_size(expr);
+	}
+	return 0;
+}
+
+static struct range_list *db_size_rl;
+static int db_size_callback(void *unused, int argc, char **argv, char **azColName)
+{
+	struct range_list *tmp = NULL;
+
+	if (!db_size_rl) {
+		str_to_rl(&int_ctype, argv[0], &db_size_rl);
+	} else {
+		str_to_rl(&int_ctype, argv[0], &tmp);
+		db_size_rl = rl_union(db_size_rl, tmp);
+	}
+	return 0;
+}
+
+static struct range_list *size_from_db_type(struct expression *expr)
+{
+	int this_file_only = 0;
+	char *name;
+
+	name = get_member_name(expr);
+	if (!name && is_static(expr)) {
+		name = expr_to_var(expr);
+		this_file_only = 1;
+	}
+	if (!name)
+		return NULL;
+
+	if (this_file_only) {
+		db_size_rl = NULL;
+		run_sql(db_size_callback, NULL,
+			"select size from function_type_size where type = '%s' and file = '%s';",
+			name, get_filename());
+		if (db_size_rl)
+			return db_size_rl;
+		return NULL;
+	}
+
+	db_size_rl = NULL;
+	run_sql(db_size_callback, NULL,
+		"select size from type_size where type = '%s';",
+		name);
+	return db_size_rl;
+}
+
+static struct range_list *size_from_db_symbol(struct expression *expr)
+{
+	struct symbol *sym;
+
+	if (expr->type != EXPR_SYMBOL)
+		return NULL;
+	sym = expr->symbol;
+	if (!sym || !sym->ident ||
+	    !(sym->ctype.modifiers & MOD_TOPLEVEL) ||
+	    sym->ctype.modifiers & MOD_STATIC)
+		return NULL;
+
+	db_size_rl = NULL;
+	run_sql(db_size_callback, NULL,
+		"select value from data_info where file = 'extern' and data = '%s' and type = %d;",
+		sym->ident->name, BUF_SIZE);
+	return db_size_rl;
+}
+
+static struct range_list *size_from_db(struct expression *expr)
+{
+	struct range_list *rl;
+
+	rl = size_from_db_symbol(expr);
+	if (rl)
+		return rl;
+	return size_from_db_type(expr);
+}
+
+static void db_returns_buf_size(struct expression *expr, int param, char *unused, char *math)
+{
+	struct expression *call;
+	struct range_list *rl;
+
+	if (expr->type != EXPR_ASSIGNMENT)
+		return;
+	call = strip_expr(expr->right);
+
+	if (!parse_call_math_rl(call, math, &rl))
+		return;
+	rl = cast_rl(&int_ctype, rl);
+	set_state_expr(my_size_id, expr->left, alloc_estate_rl(rl));
+}
+
+static int get_real_array_size_from_type(struct symbol *type)
+{
+	sval_t sval;
+
+	if (!type)
+		return 0;
+	if (!type || type->type != SYM_ARRAY)
+		return 0;
+
+	if (!get_implied_value(type->array_size, &sval))
+		return 0;
+
+	return sval.value;
+}
+
+int get_real_array_size(struct expression *expr)
+{
+	if (!expr)
+		return 0;
+	if (expr->type == EXPR_PREOP && expr->op == '&')
+		expr = expr->unop;
+	if (expr->type == EXPR_BINOP) /* array elements foo[5] */
+		return 0;
+	return get_real_array_size_from_type(get_type(expr));
+}
+
+static int get_size_from_initializer(struct expression *expr)
+{
+	if (expr->type != EXPR_SYMBOL || !expr->symbol || !expr->symbol->initializer)
+		return 0;
+	if (expr->symbol->initializer == expr) /* int a = a; */
+		return 0;
+	return get_initializer_size(expr->symbol->initializer);
+}
+
+static struct range_list *get_stored_size_bytes(struct expression *expr)
+{
+	struct smatch_state *state;
+
+	state = get_state_expr(my_size_id, expr);
+	if (!state)
+		return NULL;
+	return estate_rl(state);
+}
+
+static int get_bytes_from_address(struct expression *expr)
+{
+	struct symbol *type;
+	int ret;
+
+	if (!option_spammy)
+		return 0;
+	if (expr->type != EXPR_PREOP || expr->op != '&')
+		return 0;
+	type = get_type(expr);
+	if (!type)
+		return 0;
+
+	if (type->type == SYM_PTR)
+		type = get_base_type(type);
+
+	ret = type_bytes(type);
+	if (ret == 1)
+		return 0;  /* ignore char pointers */
+
+	return ret;
+}
+
+static struct expression *remove_addr_fluff(struct expression *expr)
+{
+	struct expression *tmp;
+	sval_t sval;
+
+	expr = strip_expr(expr);
+
+	/* remove '&' and '*' operations that cancel */
+	while (expr && expr->type == EXPR_PREOP && expr->op == '&') {
+		tmp = strip_expr(expr->unop);
+		if (tmp->type != EXPR_PREOP)
+			break;
+		if (tmp->op != '*')
+			break;
+		expr = strip_expr(tmp->unop);
+	}
+
+	if (!expr)
+		return NULL;
+
+	/* "foo + 0" is just "foo" */
+	if (expr->type == EXPR_BINOP && expr->op == '+' &&
+	    get_value(expr->right, &sval) && sval.value == 0)
+		return expr->left;
+
+	return expr;
+}
+
+static int is_last_member_of_struct(struct symbol *sym, struct ident *member)
+{
+	struct symbol *tmp;
+	int i;
+
+	i = 0;
+	FOR_EACH_PTR_REVERSE(sym->symbol_list, tmp) {
+		if (i++ || !tmp->ident)
+			return 0;
+		if (tmp->ident == member)
+			return 1;
+		return 0;
+	} END_FOR_EACH_PTR_REVERSE(tmp);
+
+	return 0;
+}
+
+int last_member_is_resizable(struct symbol *sym)
+{
+	struct symbol *last_member;
+	struct symbol *type;
+	sval_t sval;
+
+	if (!sym || sym->type != SYM_STRUCT)
+		return 0;
+
+	last_member = last_ptr_list((struct ptr_list *)sym->symbol_list);
+	if (!last_member || !last_member->ident)
+		return 0;
+
+	type = get_real_base_type(last_member);
+	if (type->type == SYM_STRUCT)
+		return last_member_is_resizable(type);
+	if (type->type != SYM_ARRAY)
+		return 0;
+
+	if (!get_implied_value(type->array_size, &sval))
+		return 0;
+
+	if (sval.value != 0 && sval.value != 1)
+		return 0;
+
+	return 1;
+}
+
+static int get_stored_size_end_struct_bytes(struct expression *expr)
+{
+	struct symbol *sym;
+	struct symbol *base_sym;
+	struct smatch_state *state;
+
+	if (expr->type == EXPR_BINOP) /* array elements foo[5] */
+		return 0;
+
+	if (expr->type == EXPR_PREOP && expr->op == '&')
+		expr = strip_parens(expr->unop);
+
+	sym = expr_to_sym(expr);
+	if (!sym || !sym->ident)
+		return 0;
+	if (!type_bytes(sym))
+		return 0;
+	if (sym->type != SYM_NODE)
+		return 0;
+
+	base_sym = get_real_base_type(sym);
+	if (!base_sym || base_sym->type != SYM_PTR)
+		return 0;
+	base_sym = get_real_base_type(base_sym);
+	if (!base_sym || base_sym->type != SYM_STRUCT)
+		return 0;
+
+	if (!is_last_member_of_struct(base_sym, expr->member))
+		return 0;
+	if (!last_member_is_resizable(base_sym))
+		return 0;
+
+	state = get_state(my_size_id, sym->ident->name, sym);
+	if (!estate_to_size(state))
+		return 0;
+
+	return estate_to_size(state) - type_bytes(base_sym) + type_bytes(get_type(expr));
+}
+
+static struct range_list *alloc_int_rl(int value)
+{
+	sval_t sval = {
+		.type = &int_ctype,
+		{.value = value},
+	};
+
+	return alloc_rl(sval, sval);
+}
+
+struct range_list *get_array_size_bytes_rl(struct expression *expr)
+{
+	struct range_list *ret = NULL;
+	int size;
+
+	expr = remove_addr_fluff(expr);
+	if (!expr)
+		return NULL;
+
+	/* "BAR" */
+	if (expr->type == EXPR_STRING)
+		return alloc_int_rl(expr->string->length);
+
+	if (expr->type == EXPR_BINOP && expr->op == '+') {
+		sval_t offset;
+		struct symbol *type;
+		int bytes;
+
+		if (!get_implied_value(expr->right, &offset))
+			return NULL;
+		type = get_type(expr->left);
+		if (!type)
+			return NULL;
+		if (type->type != SYM_ARRAY && type->type != SYM_PTR)
+			return NULL;
+		type = get_real_base_type(type);
+		bytes = type_bytes(type);
+		if (bytes == 0)
+			return NULL;
+		offset.value *= bytes;
+		size = get_array_size_bytes(expr->left);
+		if (size <= 0)
+			return NULL;
+		return alloc_int_rl(size - offset.value);
+	}
+
+	/* buf[4] */
+	size = get_real_array_size(expr);
+	if (size)
+		return alloc_int_rl(elements_to_bytes(expr, size));
+
+	/* buf = malloc(1024); */
+	ret = get_stored_size_bytes(expr);
+	if (ret)
+		return ret;
+
+	size = get_stored_size_end_struct_bytes(expr);
+	if (size)
+		return alloc_int_rl(size);
+
+	/* char *foo = "BAR" */
+	size = get_size_from_initializer(expr);
+	if (size)
+		return alloc_int_rl(elements_to_bytes(expr, size));
+
+	size = get_bytes_from_address(expr);
+	if (size)
+		return alloc_int_rl(size);
+
+	ret = size_from_db(expr);
+	if (ret)
+		return ret;
+
+	return NULL;
+}
+
+int get_array_size_bytes(struct expression *expr)
+{
+	struct range_list *rl;
+	sval_t sval;
+
+	rl = get_array_size_bytes_rl(expr);
+	if (!rl_to_sval(rl, &sval))
+		return 0;
+	if (sval.uvalue >= INT_MAX)
+		return 0;
+	return sval.value;
+}
+
+int get_array_size_bytes_max(struct expression *expr)
+{
+	struct range_list *rl;
+	sval_t bytes;
+
+	rl = get_array_size_bytes_rl(expr);
+	if (!rl)
+		return 0;
+	bytes = rl_min(rl);
+	if (bytes.value < 0)
+		return 0;
+	bytes = rl_max(rl);
+	if (bytes.uvalue >= INT_MAX)
+		return 0;
+	return bytes.value;
+}
+
+int get_array_size_bytes_min(struct expression *expr)
+{
+	struct range_list *rl;
+	struct data_range *range;
+
+	rl = get_array_size_bytes_rl(expr);
+	if (!rl)
+		return 0;
+
+	FOR_EACH_PTR(rl, range) {
+		if (range->min.value <= 0)
+			return 0;
+		if (range->max.value <= 0)
+			return 0;
+		if (range->min.uvalue >= INT_MAX)
+			return 0;
+		return range->min.value;
+	} END_FOR_EACH_PTR(range);
+
+	return 0;
+}
+
+int get_array_size(struct expression *expr)
+{
+	if (!expr)
+		return 0;
+	return bytes_to_elements(expr, get_array_size_bytes_max(expr));
+}
+
+static struct expression *strip_ampersands(struct expression *expr)
+{
+	struct symbol *type;
+
+	if (expr->type != EXPR_PREOP)
+		return expr;
+	if (expr->op != '&')
+		return expr;
+	type = get_type(expr->unop);
+	if (!type || type->type != SYM_ARRAY)
+		return expr;
+	return expr->unop;
+}
+
+static void info_record_alloction(struct expression *buffer, struct range_list *rl)
+{
+	char *name;
+
+	if (!option_info)
+		return;
+
+	name = get_member_name(buffer);
+	if (!name && is_static(buffer))
+		name = expr_to_var(buffer);
+	if (!name)
+		return;
+	if (rl && !is_whole_rl(rl))
+		sql_insert_function_type_size(name, show_rl(rl));
+	else
+		sql_insert_function_type_size(name, "(-1)");
+
+	free_string(name);
+}
+
+static void store_alloc(struct expression *expr, struct range_list *rl)
+{
+	struct symbol *type;
+
+	rl = clone_rl(rl); // FIXME!!!
+	set_state_expr(my_size_id, expr, alloc_estate_rl(rl));
+
+	type = get_type(expr);
+	if (!type)
+		return;
+	if (type->type != SYM_PTR)
+		return;
+	type = get_real_base_type(type);
+	if (!type)
+		return;
+	if (type == &void_ctype)
+		return;
+	if (type->type != SYM_BASETYPE && type->type != SYM_PTR)
+		return;
+
+	info_record_alloction(expr, rl);
+}
+
+static void match_array_assignment(struct expression *expr)
+{
+	struct expression *left;
+	struct expression *right;
+	char *left_member, *right_member;
+	struct range_list *rl;
+	sval_t sval;
+
+	if (expr->op != '=')
+		return;
+	left = strip_expr(expr->left);
+	right = strip_expr(expr->right);
+	right = strip_ampersands(right);
+
+	if (!is_pointer(left))
+		return;
+	if (is_allocation_function(right))
+		return;
+
+	left_member = get_member_name(left);
+	right_member = get_member_name(right);
+	if (left_member && right_member && strcmp(left_member, right_member) == 0) {
+		free_string(left_member);
+		free_string(right_member);
+		return;
+	}
+	free_string(left_member);
+	free_string(right_member);
+
+	if (get_implied_value(right, &sval) && sval.value == 0) {
+		rl = alloc_int_rl(0);
+		goto store;
+	}
+
+	rl = get_array_size_bytes_rl(right);
+	if (!rl && __in_fake_assign)
+		return;
+
+store:
+	store_alloc(left, rl);
+}
+
+static void match_alloc(const char *fn, struct expression *expr, void *_size_arg)
+{
+	int size_arg = PTR_INT(_size_arg);
+	struct expression *right;
+	struct expression *arg;
+	struct range_list *rl;
+
+	right = strip_expr(expr->right);
+	arg = get_argument_from_call_expr(right->args, size_arg);
+	get_absolute_rl(arg, &rl);
+	rl = cast_rl(&int_ctype, rl);
+	store_alloc(expr->left, rl);
+}
+
+static void match_calloc(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *right;
+	struct expression *arg;
+	sval_t elements;
+	sval_t size;
+
+	right = strip_expr(expr->right);
+	arg = get_argument_from_call_expr(right->args, 0);
+	if (!get_implied_value(arg, &elements))
+		return; // FIXME!!!
+	arg = get_argument_from_call_expr(right->args, 1);
+	if (get_implied_value(arg, &size))
+		store_alloc(expr->left, size_to_rl(elements.value * size.value));
+	else
+		store_alloc(expr->left, size_to_rl(-1));
+}
+
+static void match_page(const char *fn, struct expression *expr, void *_unused)
+{
+	sval_t page_size = {
+		.type = &int_ctype,
+		{.value = 4096},
+	};
+
+	store_alloc(expr->left, alloc_rl(page_size, page_size));
+}
+
+static void match_strndup(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *fn_expr;
+	struct expression *size_expr;
+	sval_t size;
+
+	fn_expr = strip_expr(expr->right);
+	size_expr = get_argument_from_call_expr(fn_expr->args, 1);
+	if (get_implied_max(size_expr, &size)) {
+		size.value++;
+		store_alloc(expr->left, size_to_rl(size.value));
+	} else {
+		store_alloc(expr->left, size_to_rl(-1));
+	}
+
+}
+
+static void match_alloc_pages(const char *fn, struct expression *expr, void *_order_arg)
+{
+	int order_arg = PTR_INT(_order_arg);
+	struct expression *right;
+	struct expression *arg;
+	sval_t sval;
+
+	right = strip_expr(expr->right);
+	arg = get_argument_from_call_expr(right->args, order_arg);
+	if (!get_implied_value(arg, &sval))
+		return;
+	if (sval.value < 0 || sval.value > 10)
+		return;
+
+	sval.type = &int_ctype;
+	sval.value = 1 << sval.value;
+	sval.value *= 4096;
+
+	store_alloc(expr->left, alloc_rl(sval, sval));
+}
+
+static int is_type_bytes(struct range_list *rl, struct expression *arg)
+{
+	struct symbol *type;
+	sval_t sval;
+
+	if (!rl_to_sval(rl, &sval))
+		return 0;
+
+	type = get_type(arg);
+	if (!type)
+		return 0;
+	if (type->type != SYM_PTR)
+		return 0;
+	type = get_real_base_type(type);
+	if (type->type != SYM_STRUCT &&
+	    type->type != SYM_UNION)
+		return 0;
+	if (sval.value != type_bytes(type))
+		return 0;
+	return 1;
+}
+
+static void match_call(struct expression *expr)
+{
+	struct expression *arg;
+	struct symbol *type;
+	struct range_list *rl;
+	int i;
+
+	i = -1;
+	FOR_EACH_PTR(expr->args, arg) {
+		i++;
+		type = get_type(arg);
+		if (!type || (type->type != SYM_PTR && type->type != SYM_ARRAY))
+			continue;
+		rl = get_array_size_bytes_rl(arg);
+		if (!rl)
+			continue;
+		if (is_whole_rl(rl))
+			continue;
+		if (is_type_bytes(rl, arg))
+			continue;
+		sql_insert_caller_info(expr, BUF_SIZE, i, "$", show_rl(rl));
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void struct_member_callback(struct expression *call, int param, char *printed_name, struct sm_state *sm)
+{
+	if (sm->state == &merged ||
+	    strcmp(sm->state->name, "(-1)") == 0 ||
+	    strcmp(sm->state->name, "empty") == 0 ||
+	    strcmp(sm->state->name, "0") == 0)
+		return;
+	sql_insert_caller_info(call, BUF_SIZE, param, printed_name, sm->state->name);
+}
+
+/*
+ * This is slightly (very) weird because half of this stuff is handled in
+ * smatch_parse_call_math.c which is poorly named.  But anyway, add some buf
+ * sizes here.
+ *
+ */
+static void print_returned_allocations(int return_id, char *return_ranges, struct expression *expr)
+{
+	char buf[16];
+	int size;
+
+	size = get_array_size_bytes(expr);
+	if (!size)
+		return;
+
+	snprintf(buf, sizeof(buf), "%d", size);
+	sql_insert_return_states(return_id, return_ranges, BUF_SIZE, -1, "", buf);
+}
+
+static void record_global_size(struct symbol *sym)
+{
+	int bytes;
+	char buf[16];
+
+	if (!sym->ident)
+		return;
+
+	if (!(sym->ctype.modifiers & MOD_TOPLEVEL) ||
+	    sym->ctype.modifiers & MOD_STATIC)
+		return;
+
+	bytes = get_array_size_bytes(symbol_expression(sym));
+	if (bytes <= 1)
+		return;
+
+	snprintf(buf, sizeof(buf), "%d", bytes);
+	sql_insert_data_info_var_sym(sym->ident->name, sym, BUF_SIZE, buf);
+}
+
+void register_buf_size(int id)
+{
+	my_size_id = id;
+
+	add_unmatched_state_hook(my_size_id, &unmatched_size_state);
+
+	select_caller_info_hook(set_param_buf_size, BUF_SIZE);
+	select_return_states_hook(BUF_SIZE, &db_returns_buf_size);
+	add_split_return_callback(print_returned_allocations);
+
+	allocation_funcs = create_function_hashtable(100);
+	add_allocation_function("malloc", &match_alloc, 0);
+	add_allocation_function("calloc", &match_calloc, 0);
+	add_allocation_function("memdup", &match_alloc, 1);
+	add_allocation_function("realloc", &match_alloc, 1);
+	if (option_project == PROJ_KERNEL) {
+		add_allocation_function("kmalloc", &match_alloc, 0);
+		add_allocation_function("kmalloc_node", &match_alloc, 0);
+		add_allocation_function("kzalloc", &match_alloc, 0);
+		add_allocation_function("kzalloc_node", &match_alloc, 0);
+		add_allocation_function("vmalloc", &match_alloc, 0);
+		add_allocation_function("__vmalloc", &match_alloc, 0);
+		add_allocation_function("kcalloc", &match_calloc, 0);
+		add_allocation_function("kmalloc_array", &match_calloc, 0);
+		add_allocation_function("drm_malloc_ab", &match_calloc, 0);
+		add_allocation_function("drm_calloc_large", &match_calloc, 0);
+		add_allocation_function("sock_kmalloc", &match_alloc, 1);
+		add_allocation_function("kmemdup", &match_alloc, 1);
+		add_allocation_function("kmemdup_user", &match_alloc, 1);
+		add_allocation_function("dma_alloc_attrs", &match_alloc, 1);
+		add_allocation_function("pci_alloc_consistent", &match_alloc, 1);
+		add_allocation_function("pci_alloc_coherent", &match_alloc, 1);
+		add_allocation_function("devm_kmalloc", &match_alloc, 1);
+		add_allocation_function("devm_kzalloc", &match_alloc, 1);
+		add_allocation_function("krealloc", &match_alloc, 1);
+		add_allocation_function("__alloc_bootmem", &match_alloc, 0);
+		add_allocation_function("alloc_bootmem", &match_alloc, 0);
+		add_allocation_function("kmap", &match_page, 0);
+		add_allocation_function("get_zeroed_page", &match_page, 0);
+		add_allocation_function("alloc_pages", &match_alloc_pages, 1);
+		add_allocation_function("alloc_pages_current", &match_alloc_pages, 1);
+		add_allocation_function("__get_free_pages", &match_alloc_pages, 1);
+	}
+
+	add_allocation_function("strndup", match_strndup, 0);
+	if (option_project == PROJ_KERNEL)
+		add_allocation_function("kstrndup", match_strndup, 0);
+
+	add_modification_hook(my_size_id, &set_size_undefined);
+
+	add_merge_hook(my_size_id, &merge_size_func);
+
+	if (option_info)
+		add_hook(record_global_size, BASE_HOOK);
+}
+
+void register_buf_size_late(int id)
+{
+	/* has to happen after match_alloc() */
+	add_hook(&match_array_assignment, ASSIGNMENT_HOOK);
+
+	add_hook(&match_call, FUNCTION_CALL_HOOK);
+	add_member_info_callback(my_size_id, struct_member_callback);
+}
--- /dev/null	Fri Dec 21 15:00:16 2018
+++ new/usr/src/tools/smatch/src/smatch_capped.c	Fri Dec 21 15:00:16 2018
@@ -0,0 +1,310 @@
+/*
+ * Copyright (C) 2011 Oracle.  All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This is trying to make a list of the variables which
+ * have capped values.  Sometimes we don't know what the
+ * cap is, for example if we are comparing variables but
+ * we don't know the values of the variables.  In that
+ * case we only know that our variable is capped and we
+ * sort that information here.
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+STATE(capped);
+STATE(uncapped);
+
+static void set_uncapped(struct sm_state *sm, struct expression *mod_expr)
+{
+	set_state(my_id, sm->name, sm->sym, &uncapped);
+}
+
+static struct smatch_state *unmatched_state(struct sm_state *sm)
+{
+	struct smatch_state *state;
+
+	state = get_state(SMATCH_EXTRA, sm->name, sm->sym);
+	if (state && !estate_is_whole(state))
+		return &capped;
+	return &uncapped;
+}
+
+static int is_capped_macro(struct expression *expr)
+{
+	char *name;
+
+	name = get_macro_name(expr->pos);
+	if (!name)
+		return 0;
+
+	if (strcmp(name, "min") == 0)
+		return 1;
+	if (strcmp(name, "MIN") == 0)
+		return 1;
+	if (strcmp(name, "min_t") == 0)
+		return 1;
+
+	return 0;
+}
+
+int is_capped(struct expression *expr)
+{
+	sval_t dummy;
+
+	expr = strip_expr(expr);
+	while (expr && expr->type == EXPR_POSTOP) {
+		expr = strip_expr(expr->unop);
+	}
+	if (!expr)
+		return 0;
+
+	if (get_hard_max(expr, &dummy))
+		return 1;
+
+	if (is_capped_macro(expr))
+		return 1;
+
+	if (expr->type == EXPR_BINOP) {
+		struct range_list *left_rl, *right_rl;
+
+		if (expr->op == '&')
+			return 1;
+		if (expr->op == SPECIAL_RIGHTSHIFT)
+			return 1;
+		if (expr->op == '%')
+			return is_capped(expr->right);
+		if (!is_capped(expr->left))
+			return 0;
+		if (expr->op == '/')
+			return 1;
+		if (!is_capped(expr->right))
+			return 0;
+		if (expr->op == '*') {
+			get_absolute_rl(expr->left, &left_rl);
+			get_absolute_rl(expr->right, &right_rl);
+			if (sval_is_negative(rl_min(left_rl)) ||
+			    sval_is_negative(rl_min(right_rl)))
+				return 0;
+		}
+		return 1;
+	}
+	if (get_state_expr(my_id, expr) == &capped)
+		return 1;
+	return 0;
+}
+
+int is_capped_var_sym(const char *name, struct symbol *sym)
+{
+	if (get_state(my_id, name, sym) == &capped)
+		return 1;
+	return 0;
+}
+
+void set_param_capped_data(const char *name, struct symbol *sym, char *key, char *value)
+{
+	char fullname[256];
+
+	if (strncmp(key, "$", 1))
+		return;
+	snprintf(fullname, 256, "%s%s", name, key + 1);
+	set_state(my_id, fullname, sym, &capped);
+}
+
+static void match_condition(struct expression *expr)
+{
+	struct smatch_state *left_true = NULL;
+	struct smatch_state *left_false = NULL;
+	struct smatch_state *right_true = NULL;
+	struct smatch_state *right_false = NULL;
+
+
+	if (expr->type != EXPR_COMPARE)
+		return;
+
+	switch (expr->op) {
+	case '<':
+	case SPECIAL_LTE:
+	case SPECIAL_UNSIGNED_LT:
+	case SPECIAL_UNSIGNED_LTE:
+		left_true = &capped;
+		right_false = &capped;
+		break;
+	case '>':
+	case SPECIAL_GTE:
+	case SPECIAL_UNSIGNED_GT:
+	case SPECIAL_UNSIGNED_GTE:
+		left_false = &capped;
+		right_true = &capped;
+		break;
+	case SPECIAL_EQUAL:
+		left_true = &capped;
+		right_true = &capped;
+		break;
+	case SPECIAL_NOTEQUAL:
+		left_false = &capped;
+		right_false = &capped;
+		break;
+
+	default:
+		return;
+	}
+
+	set_true_false_states_expr(my_id, expr->left, left_true, left_false);
+	set_true_false_states_expr(my_id, expr->right, right_true, right_false);
+}
+
+static void match_assign(struct expression *expr)
+{
+	if (is_capped(expr->right)) {
+		set_state_expr(my_id, expr->left, &capped);
+	} else {
+		if (get_state_expr(my_id, expr->left))
+			set_state_expr(my_id, expr->left, &uncapped);
+	}
+}
+
+static void match_caller_info(struct expression *expr)
+{
+	struct expression *tmp;
+	sval_t sval;
+	int i;
+
+	i = -1;
+	FOR_EACH_PTR(expr->args, tmp) {
+		i++;
+		if (get_implied_value(tmp, &sval))
+			continue;
+		if (!is_capped(tmp))
+			continue;
+		sql_insert_caller_info(expr, CAPPED_DATA, i, "$", "1");
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void struct_member_callback(struct expression *call, int param, char *printed_name, struct sm_state *sm)
+{
+	struct smatch_state *estate;
+	sval_t sval;
+
+	if (sm->state != &capped)
+		return;
+	estate = get_state(SMATCH_EXTRA, sm->name, sm->sym);
+	if (estate_get_single_value(estate, &sval))
+		return;
+	sql_insert_caller_info(call, CAPPED_DATA, param, printed_name, "1");
+}
+
+static void print_return_implies_capped(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct smatch_state *orig, *estate;
+	struct sm_state *sm;
+	struct symbol *ret_sym;
+	const char *param_name;
+	char *return_str;
+	int param;
+	sval_t sval;
+	bool return_found = false;
+
+	expr = strip_expr(expr);
+	return_str = expr_to_str(expr);
+	ret_sym = expr_to_sym(expr);
+
+	FOR_EACH_MY_SM(my_id, __get_cur_stree(), sm) {
+		if (sm->state != &capped)
+			continue;
+
+		param = get_param_num_from_sym(sm->sym);
+		if (param < 0)
+			continue;
+
+		estate = get_state(SMATCH_EXTRA, sm->name, sm->sym);
+		if (estate_get_single_value(estate, &sval))
+			continue;
+
+		orig = get_state_stree(get_start_states(), my_id, sm->name, sm->sym);
+		if (orig == &capped)
+			continue;
+
+		param_name = get_param_name(sm);
+		if (!param_name)
+			continue;
+
+		sql_insert_return_states(return_id, return_ranges, CAPPED_DATA,
+					 param, param_name, "1");
+	} END_FOR_EACH_SM(sm);
+
+	FOR_EACH_MY_SM(my_id, __get_cur_stree(), sm) {
+		if (!ret_sym)
+			break;
+		if (ret_sym != sm->sym)
+			continue;
+
+		param_name = state_name_to_param_name(sm->name, return_str);
+		if (!param_name)
+			continue;
+		if (strcmp(param_name, "$") == 0)
+			return_found = true;
+		sql_insert_return_states(return_id, return_ranges, CAPPED_DATA,
+					 -1, param_name, "1");
+	} END_FOR_EACH_SM(sm);
+
+	if (return_found)
+		goto free_string;
+
+	if (option_project == PROJ_KERNEL && get_function() &&
+	    strstr(get_function(), "nla_get_"))
+		sql_insert_return_states(return_id, return_ranges, CAPPED_DATA,
+					 -1, "$", "1");
+
+free_string:
+	free_string(return_str);
+}
+
+static void db_return_states_capped(struct expression *expr, int param, char *key, char *value)
+{
+	char *name;
+	struct symbol *sym;
+
+	name = return_state_to_var_sym(expr, param, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	set_state(my_id, name, sym, &capped);
+free:
+	free_string(name);
+}
+
+void register_capped(int id)
+{
+	my_id = id;
+
+	add_unmatched_state_hook(my_id, &unmatched_state);
+	select_caller_info_hook(set_param_capped_data, CAPPED_DATA);
+	add_hook(&match_condition, CONDITION_HOOK);
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+	add_modification_hook(my_id, &set_uncapped);
+
+	add_hook(&match_caller_info, FUNCTION_CALL_HOOK);
+	add_member_info_callback(my_id, struct_member_callback);
+
+	add_split_return_callback(print_return_implies_capped);
+	select_return_states_hook(CAPPED_DATA, &db_return_states_capped);
+}
--- /dev/null	Fri Dec 21 15:00:16 2018
+++ new/usr/src/tools/smatch/src/smatch_common_functions.c	Fri Dec 21 15:00:16 2018
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2013 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "scope.h"
+#include "smatch.h"
+#include "smatch_extra.h"
+
+static int match_strlen(struct expression *call, void *unused, struct range_list **rl)
+{
+	struct expression *str;
+	unsigned long max;
+
+	str = get_argument_from_call_expr(call->args, 0);
+	if (get_implied_strlen(str, rl) && sval_is_positive(rl_min(*rl))) {
+		*rl = cast_rl(&ulong_ctype, *rl);
+		return 1;
+	}
+	/* smatch_strlen.c is not very complete */
+	max = get_array_size_bytes_max(str);
+	if (max == 0) {
+		*rl = alloc_rl(sval_type_val(&ulong_ctype, 0),
+			       sval_type_val(&ulong_ctype, STRLEN_MAX_RET));
+	} else {
+		max--;
+		*rl = alloc_rl(sval_type_val(&ulong_ctype, 0),
+			       sval_type_val(&ulong_ctype, max));
+	}
+	return 1;
+}
+
+static int match_strnlen(struct expression *call, void *unused, struct range_list **rl)
+{
+	struct expression *limit;
+	sval_t fixed;
+	sval_t bound;
+	sval_t ulong_max = sval_type_val(&ulong_ctype, ULONG_MAX);
+
+	match_strlen(call, NULL, rl);
+	limit = get_argument_from_call_expr(call->args, 1);
+	if (!get_implied_max(limit, &bound))
+		return 1;
+	if (sval_cmp(bound, ulong_max) == 0)
+		return 1;
+	if (rl_to_sval(*rl, &fixed) && sval_cmp(fixed, bound) >= 0) {
+		*rl = alloc_rl(bound, bound);
+		return 1;
+	}
+
+	bound.value++;
+	*rl = remove_range(*rl, bound, ulong_max);
+
+	return 1;
+}
+
+static int match_sprintf(struct expression *call, void *_arg, struct range_list **rl)
+{
+	int str_arg = PTR_INT(_arg);
+	int size;
+
+	size = get_formatted_string_size(call, str_arg);
+	if (size <= 0) {
+		*rl = alloc_whole_rl(&ulong_ctype);
+	} else {
+		/* FIXME:  This is bogus.  get_formatted_string_size() should be
+		   returning a range_list.  Also it should not add the NUL. */
+		size--;
+		*rl = alloc_rl(ll_to_sval(0), ll_to_sval(size));
+	}
+	return 1;
+}
+
+void register_common_functions(int id)
+{
+	/*
+	 * When you add a new function here, then don't forget to delete it from
+	 * the database and smatch_data/.
+	 */
+	add_implied_return_hook("strlen", &match_strlen, NULL);
+	add_implied_return_hook("strnlen", &match_strnlen, NULL);
+	add_implied_return_hook("sprintf", &match_sprintf, INT_PTR(1));
+	add_implied_return_hook("snprintf", &match_sprintf, INT_PTR(2));
+}
--- /dev/null	Fri Dec 21 15:00:16 2018
+++ new/usr/src/tools/smatch/src/smatch_comparison.c	Fri Dec 21 15:00:16 2018
@@ -0,0 +1,2620 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * The point here is to store the relationships between two variables.
+ * Ie:  y > x.
+ * To do that we create a state with the two variables in alphabetical order:
+ * ->name = "x vs y" and the state would be "<".  On the false path the state
+ * would be ">=".
+ *
+ * Part of the trick of it is that if x or y is modified then we need to reset
+ * the state.  We need to keep a list of all the states which depend on x and
+ * all the states which depend on y.  The link_id code handles this.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+static int compare_id;
+static int link_id;
+static int inc_dec_id;
+static int inc_dec_link_id;
+
+static void add_comparison(struct expression *left, int comparison, struct expression *right);
+
+/* for handling for loops */
+STATE(start);
+STATE(incremented);
+
+ALLOCATOR(compare_data, "compare data");
+
+static struct symbol *vsl_to_sym(struct var_sym_list *vsl)
+{
+	struct var_sym *vs;
+
+	if (!vsl)
+		return NULL;
+	if (ptr_list_size((struct ptr_list *)vsl) != 1)
+		return NULL;
+	vs = first_ptr_list((struct ptr_list *)vsl);
+	return vs->sym;
+}
+
+struct smatch_state *alloc_compare_state(
+		struct expression *left,
+		const char *left_var, struct var_sym_list *left_vsl,
+		int comparison,
+		struct expression *right,
+		const char *right_var, struct var_sym_list *right_vsl)
+{
+	struct smatch_state *state;
+	struct compare_data *data;
+
+	state = __alloc_smatch_state(0);
+	state->name = alloc_sname(show_special(comparison));
+	data = __alloc_compare_data(0);
+	data->left = left;
+	data->left_var = alloc_sname(left_var);
+	data->left_vsl = clone_var_sym_list(left_vsl);
+	data->comparison = comparison;
+	data->right = right;
+	data->right_var = alloc_sname(right_var);
+	data->right_vsl = clone_var_sym_list(right_vsl);
+	state->data = data;
+	return state;
+}
+
+int state_to_comparison(struct smatch_state *state)
+{
+	if (!state || !state->data)
+		return 0;
+	return ((struct compare_data *)state->data)->comparison;
+}
+
+/*
+ * flip_comparison() reverses the op left and right.  So "x >= y" becomes "y <= x".
+ */
+int flip_comparison(int op)
+{
+	switch (op) {
+	case 0:
+		return 0;
+	case '<':
+		return '>';
+	case SPECIAL_UNSIGNED_LT:
+		return SPECIAL_UNSIGNED_GT;
+	case SPECIAL_LTE:
+		return SPECIAL_GTE;
+	case SPECIAL_UNSIGNED_LTE:
+		return SPECIAL_UNSIGNED_GTE;
+	case SPECIAL_EQUAL:
+		return SPECIAL_EQUAL;
+	case SPECIAL_NOTEQUAL:
+		return SPECIAL_NOTEQUAL;
+	case SPECIAL_GTE:
+		return SPECIAL_LTE;
+	case SPECIAL_UNSIGNED_GTE:
+		return SPECIAL_UNSIGNED_LTE;
+	case '>':
+		return '<';
+	case SPECIAL_UNSIGNED_GT:
+		return SPECIAL_UNSIGNED_LT;
+	default:
+		sm_perror("unhandled comparison %d", op);
+		return op;
+	}
+}
+
+int negate_comparison(int op)
+{
+	switch (op) {
+	case 0:
+		return 0;
+	case '<':
+		return SPECIAL_GTE;
+	case SPECIAL_UNSIGNED_LT:
+		return SPECIAL_UNSIGNED_GTE;
+	case SPECIAL_LTE:
+		return '>';
+	case SPECIAL_UNSIGNED_LTE:
+		return SPECIAL_UNSIGNED_GT;
+	case SPECIAL_EQUAL:
+		return SPECIAL_NOTEQUAL;
+	case SPECIAL_NOTEQUAL:
+		return SPECIAL_EQUAL;
+	case SPECIAL_GTE:
+		return '<';
+	case SPECIAL_UNSIGNED_GTE:
+		return SPECIAL_UNSIGNED_LT;
+	case '>':
+		return SPECIAL_LTE;
+	case SPECIAL_UNSIGNED_GT:
+		return SPECIAL_UNSIGNED_LTE;
+	default:
+		sm_perror("unhandled comparison %d", op);
+		return op;
+	}
+}
+
+static int rl_comparison(struct range_list *left_rl, struct range_list *right_rl)
+{
+	sval_t left_min, left_max, right_min, right_max;
+	struct symbol *type = &int_ctype;
+
+	if (!left_rl || !right_rl)
+		return 0;
+
+	if (type_positive_bits(rl_type(left_rl)) > type_positive_bits(type))
+		type = rl_type(left_rl);
+	if (type_positive_bits(rl_type(right_rl)) > type_positive_bits(type))
+		type = rl_type(right_rl);
+
+	left_rl = cast_rl(type, left_rl);
+	right_rl = cast_rl(type, right_rl);
+
+	left_min = rl_min(left_rl);
+	left_max = rl_max(left_rl);
+	right_min = rl_min(right_rl);
+	right_max = rl_max(right_rl);
+
+	if (left_min.value == left_max.value &&
+	    right_min.value == right_max.value &&
+	    left_min.value == right_min.value)
+		return SPECIAL_EQUAL;
+
+	if (sval_cmp(left_max, right_min) < 0)
+		return '<';
+	if (sval_cmp(left_max, right_min) == 0)
+		return SPECIAL_LTE;
+	if (sval_cmp(left_min, right_max) > 0)
+		return '>';
+	if (sval_cmp(left_min, right_max) == 0)
+		return SPECIAL_GTE;
+
+	return 0;
+}
+
+static int comparison_from_extra(struct expression *a, struct expression *b)
+{
+	struct range_list *left, *right;
+
+	if (!get_implied_rl(a, &left))
+		return 0;
+	if (!get_implied_rl(b, &right))
+		return 0;
+
+	return rl_comparison(left, right);
+}
+
+static struct range_list *get_orig_rl(struct var_sym_list *vsl)
+{
+	struct symbol *sym;
+	struct smatch_state *state;
+
+	if (!vsl)
+		return NULL;
+	sym = vsl_to_sym(vsl);
+	if (!sym || !sym->ident)
+		return NULL;
+	state = get_orig_estate(sym->ident->name, sym);
+	return estate_rl(state);
+}
+
+static struct smatch_state *unmatched_comparison(struct sm_state *sm)
+{
+	struct compare_data *data = sm->state->data;
+	struct range_list *left_rl, *right_rl;
+	int op;
+
+	if (!data)
+		return &undefined;
+
+	if (strstr(data->left_var, " orig"))
+		left_rl = get_orig_rl(data->left_vsl);
+	else if (!get_implied_rl_var_sym(data->left_var, vsl_to_sym(data->left_vsl), &left_rl))
+		return &undefined;
+
+	if (strstr(data->right_var, " orig"))
+		right_rl = get_orig_rl(data->right_vsl);
+	else if (!get_implied_rl_var_sym(data->right_var, vsl_to_sym(data->right_vsl), &right_rl))
+		return &undefined;
+
+	op = rl_comparison(left_rl, right_rl);
+	if (op)
+		return alloc_compare_state(
+				data->left, data->left_var, data->left_vsl,
+				op,
+				data->right, data->right_var, data->right_vsl);
+
+	return &undefined;
+}
+
+/* remove_unsigned_from_comparison() is obviously a hack. */
+int remove_unsigned_from_comparison(int op)
+{
+	switch (op) {
+	case SPECIAL_UNSIGNED_LT:
+		return '<';
+	case SPECIAL_UNSIGNED_LTE:
+		return SPECIAL_LTE;
+	case SPECIAL_UNSIGNED_GTE:
+		return SPECIAL_GTE;
+	case SPECIAL_UNSIGNED_GT:
+		return '>';
+	default:
+		return op;
+	}
+}
+
+/*
+ * This is for when you merge states "a < b" and "a == b", the result is that
+ * we can say for sure, "a <= b" after the merge.
+ */
+int merge_comparisons(int one, int two)
+{
+	int LT, EQ, GT;
+
+	if (!one || !two)
+		return 0;
+
+	one = remove_unsigned_from_comparison(one);
+	two = remove_unsigned_from_comparison(two);
+
+	if (one == two)
+		return one;
+
+	LT = EQ = GT = 0;
+
+	switch (one) {
+	case '<':
+		LT = 1;
+		break;
+	case SPECIAL_LTE:
+		LT = 1;
+		EQ = 1;
+		break;
+	case SPECIAL_EQUAL:
+		EQ = 1;
+		break;
+	case SPECIAL_GTE:
+		GT = 1;
+		EQ = 1;
+		break;
+	case '>':
+		GT = 1;
+	}
+
+	switch (two) {
+	case '<':
+		LT = 1;
+		break;
+	case SPECIAL_LTE:
+		LT = 1;
+		EQ = 1;
+		break;
+	case SPECIAL_EQUAL:
+		EQ = 1;
+		break;
+	case SPECIAL_GTE:
+		GT = 1;
+		EQ = 1;
+		break;
+	case '>':
+		GT = 1;
+	}
+
+	if (LT && EQ && GT)
+		return 0;
+	if (LT && EQ)
+		return SPECIAL_LTE;
+	if (LT && GT)
+		return SPECIAL_NOTEQUAL;
+	if (LT)
+		return '<';
+	if (EQ && GT)
+		return SPECIAL_GTE;
+	if (GT)
+		return '>';
+	return 0;
+}
+
+/*
+ * This is for if you have "a < b" and "b <= c".  Or in other words,
+ * "a < b <= c".  You would call this like get_combined_comparison('<', '<=').
+ * The return comparison would be '<'.
+ *
+ * This function is different from merge_comparisons(), for example:
+ * merge_comparison('<', '==') returns '<='
+ * get_combined_comparison('<', '==') returns '<'
+ */
+int combine_comparisons(int left_compare, int right_compare)
+{
+	int LT, EQ, GT;
+
+	left_compare = remove_unsigned_from_comparison(left_compare);
+	right_compare = remove_unsigned_from_comparison(right_compare);
+
+	LT = EQ = GT = 0;
+
+	switch (left_compare) {
+	case '<':
+		LT++;
+		break;
+	case SPECIAL_LTE:
+		LT++;
+		EQ++;
+		break;
+	case SPECIAL_EQUAL:
+		return right_compare;
+	case SPECIAL_GTE:
+		GT++;
+		EQ++;
+		break;
+	case '>':
+		GT++;
+	}
+
+	switch (right_compare) {
+	case '<':
+		LT++;
+		break;
+	case SPECIAL_LTE:
+		LT++;
+		EQ++;
+		break;
+	case SPECIAL_EQUAL:
+		return left_compare;
+	case SPECIAL_GTE:
+		GT++;
+		EQ++;
+		break;
+	case '>':
+		GT++;
+	}
+
+	if (LT == 2) {
+		if (EQ == 2)
+			return SPECIAL_LTE;
+		return '<';
+	}
+
+	if (GT == 2) {
+		if (EQ == 2)
+			return SPECIAL_GTE;
+		return '>';
+	}
+	return 0;
+}
+
+int filter_comparison(int orig, int op)
+{
+	if (orig == op)
+		return orig;
+
+	orig = remove_unsigned_from_comparison(orig);
+	op = remove_unsigned_from_comparison(op);
+
+	switch (orig) {
+	case 0:
+		return op;
+	case '<':
+		switch (op) {
+		case '<':
+		case SPECIAL_LTE:
+		case SPECIAL_NOTEQUAL:
+			return '<';
+		}
+		return 0;
+	case SPECIAL_LTE:
+		switch (op) {
+		case '<':
+		case SPECIAL_LTE:
+		case SPECIAL_EQUAL:
+			return op;
+		case SPECIAL_NOTEQUAL:
+			return '<';
+		}
+		return 0;
+	case SPECIAL_EQUAL:
+		switch (op) {
+		case SPECIAL_LTE:
+		case SPECIAL_EQUAL:
+		case SPECIAL_GTE:
+		case SPECIAL_UNSIGNED_LTE:
+		case SPECIAL_UNSIGNED_GTE:
+			return SPECIAL_EQUAL;
+		}
+		return 0;
+	case SPECIAL_NOTEQUAL:
+		switch (op) {
+		case '<':
+		case SPECIAL_LTE:
+			return '<';
+		case SPECIAL_UNSIGNED_LT:
+		case SPECIAL_UNSIGNED_LTE:
+			return SPECIAL_UNSIGNED_LT;
+		case SPECIAL_NOTEQUAL:
+			return op;
+		case '>':
+		case SPECIAL_GTE:
+			return '>';
+		case SPECIAL_UNSIGNED_GT:
+		case SPECIAL_UNSIGNED_GTE:
+			return SPECIAL_UNSIGNED_GT;
+		}
+		return 0;
+	case SPECIAL_GTE:
+		switch (op) {
+		case SPECIAL_LTE:
+			return SPECIAL_EQUAL;
+		case '>':
+		case SPECIAL_GTE:
+		case SPECIAL_EQUAL:
+			return op;
+		case SPECIAL_NOTEQUAL:
+			return '>';
+		}
+		return 0;
+	case '>':
+		switch (op) {
+		case '>':
+		case SPECIAL_GTE:
+		case SPECIAL_NOTEQUAL:
+			return '>';
+		}
+		return 0;
+	case SPECIAL_UNSIGNED_LT:
+		switch (op) {
+		case SPECIAL_UNSIGNED_LT:
+		case SPECIAL_UNSIGNED_LTE:
+		case SPECIAL_NOTEQUAL:
+			return SPECIAL_UNSIGNED_LT;
+		}
+		return 0;
+	case SPECIAL_UNSIGNED_LTE:
+		switch (op) {
+		case SPECIAL_UNSIGNED_LT:
+		case SPECIAL_UNSIGNED_LTE:
+		case SPECIAL_EQUAL:
+			return op;
+		case SPECIAL_NOTEQUAL:
+			return SPECIAL_UNSIGNED_LT;
+		case SPECIAL_UNSIGNED_GTE:
+			return SPECIAL_EQUAL;
+		}
+		return 0;
+	case SPECIAL_UNSIGNED_GTE:
+		switch (op) {
+		case SPECIAL_UNSIGNED_LTE:
+			return SPECIAL_EQUAL;
+		case SPECIAL_NOTEQUAL:
+			return SPECIAL_UNSIGNED_GT;
+		case SPECIAL_EQUAL:
+		case SPECIAL_UNSIGNED_GTE:
+		case SPECIAL_UNSIGNED_GT:
+			return op;
+		}
+		return 0;
+	case SPECIAL_UNSIGNED_GT:
+		switch (op) {
+		case SPECIAL_UNSIGNED_GT:
+		case SPECIAL_UNSIGNED_GTE:
+		case SPECIAL_NOTEQUAL:
+			return SPECIAL_UNSIGNED_GT;
+		}
+		return 0;
+	}
+	return 0;
+}
+
+static void pre_merge_hook(struct sm_state *sm)
+{
+	struct compare_data *data = sm->state->data;
+	int other;
+
+	if (!data)
+		return;
+	other = get_comparison(data->left, data->right);
+	if (!other)
+		return;
+
+	set_state(compare_id, sm->name, NULL,
+		  alloc_compare_state(data->left, data->left_var, data->left_vsl,
+				      other,
+				      data->right, data->right_var, data->right_vsl));
+}
+
+struct smatch_state *merge_compare_states(struct smatch_state *s1, struct smatch_state *s2)
+{
+	struct compare_data *data = s1->data;
+	int op;
+
+	op = merge_comparisons(state_to_comparison(s1), state_to_comparison(s2));
+	if (op)
+		return alloc_compare_state(
+				data->left, data->left_var, data->left_vsl,
+				op,
+				data->right, data->right_var, data->right_vsl);
+	return &undefined;
+}
+
+static struct smatch_state *alloc_link_state(struct string_list *links)
+{
+	struct smatch_state *state;
+	static char buf[256];
+	char *tmp;
+	int i;
+
+	state = __alloc_smatch_state(0);
+
+	i = 0;
+	FOR_EACH_PTR(links, tmp) {
+		if (!i++) {
+			snprintf(buf, sizeof(buf), "%s", tmp);
+		} else {
+			append(buf, ", ", sizeof(buf));
+			append(buf, tmp, sizeof(buf));
+		}
+	} END_FOR_EACH_PTR(tmp);
+
+	state->name = alloc_sname(buf);
+	state->data = links;
+	return state;
+}
+
+static void save_start_states(struct statement *stmt)
+{
+	struct symbol *param;
+	char orig[64];
+	char state_name[128];
+	struct smatch_state *state;
+	struct string_list *links;
+	char *link;
+
+	FOR_EACH_PTR(cur_func_sym->ctype.base_type->arguments, param) {
+		struct var_sym_list *left_vsl = NULL;
+		struct var_sym_list *right_vsl = NULL;
+
+		if (!param->ident)
+			continue;
+		snprintf(orig, sizeof(orig), "%s orig", param->ident->name);
+		snprintf(state_name, sizeof(state_name), "%s vs %s", param->ident->name, orig);
+		add_var_sym(&left_vsl, param->ident->name, param);
+		add_var_sym(&right_vsl, orig, param);
+		state = alloc_compare_state(
+				NULL, param->ident->name, left_vsl,
+				SPECIAL_EQUAL,
+				NULL, alloc_sname(orig), right_vsl);
+		set_state(compare_id, state_name, NULL, state);
+
+		link = alloc_sname(state_name);
+		links = NULL;
+		insert_string(&links, link);
+		state = alloc_link_state(links);
+		set_state(link_id, param->ident->name, param, state);
+	} END_FOR_EACH_PTR(param);
+}
+
+static struct smatch_state *merge_links(struct smatch_state *s1, struct smatch_state *s2)
+{
+	struct smatch_state *ret;
+	struct string_list *links;
+
+	links = combine_string_lists(s1->data, s2->data);
+	ret = alloc_link_state(links);
+	return ret;
+}
+
+static void save_link_var_sym(const char *var, struct symbol *sym, const char *link)
+{
+	struct smatch_state *old_state, *new_state;
+	struct string_list *links;
+	char *new;
+
+	old_state = get_state(link_id, var, sym);
+	if (old_state)
+		links = clone_str_list(old_state->data);
+	else
+		links = NULL;
+
+	new = alloc_sname(link);
+	insert_string(&links, new);
+
+	new_state = alloc_link_state(links);
+	set_state(link_id, var, sym, new_state);
+}
+
+static void match_inc(struct sm_state *sm)
+{
+	struct string_list *links;
+	struct smatch_state *state, *new;
+	struct compare_data *data;
+	char *tmp;
+	int flip;
+	int op;
+
+	links = sm->state->data;
+
+	FOR_EACH_PTR(links, tmp) {
+		state = get_state(compare_id, tmp, NULL);
+		if (!state)
+			continue;
+		data = state->data;
+		if (!data)
+			continue;
+
+		flip = 0;
+		if (strncmp(sm->name, tmp, strlen(sm->name)) != 0 ||
+		    tmp[strlen(sm->name)] != ' ')
+			flip = 1;
+
+		op = state_to_comparison(state);
+
+		switch (flip ? flip_comparison(op) : op) {
+		case SPECIAL_EQUAL:
+		case SPECIAL_GTE:
+		case SPECIAL_UNSIGNED_GTE:
+		case '>':
+		case SPECIAL_UNSIGNED_GT:
+			new = alloc_compare_state(
+					data->left, data->left_var, data->left_vsl,
+					flip ? '<' : '>',
+					data->right, data->right_var, data->right_vsl);
+			set_state(compare_id, tmp, NULL, new);
+			break;
+		case '<':
+		case SPECIAL_UNSIGNED_LT:
+			new = alloc_compare_state(
+					data->left, data->left_var, data->left_vsl,
+					flip ? SPECIAL_GTE : SPECIAL_LTE,
+					data->right, data->right_var, data->right_vsl);
+			set_state(compare_id, tmp, NULL, new);
+			break;
+		default:
+			set_state(compare_id, tmp, NULL, &undefined);
+		}
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void match_dec(struct sm_state *sm)
+{
+	struct string_list *links;
+	struct smatch_state *state;
+	char *tmp;
+
+	links = sm->state->data;
+
+	FOR_EACH_PTR(links, tmp) {
+		state = get_state(compare_id, tmp, NULL);
+
+		switch (state_to_comparison(state)) {
+		case SPECIAL_EQUAL:
+		case SPECIAL_LTE:
+		case SPECIAL_UNSIGNED_LTE:
+		case '<':
+		case SPECIAL_UNSIGNED_LT: {
+			struct compare_data *data = state->data;
+			struct smatch_state *new;
+
+			new = alloc_compare_state(
+					data->left, data->left_var, data->left_vsl,
+					'<',
+					data->right, data->right_var, data->right_vsl);
+			set_state(compare_id, tmp, NULL, new);
+			break;
+			}
+		default:
+			set_state(compare_id, tmp, NULL, &undefined);
+		}
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void match_inc_dec(struct sm_state *sm, struct expression *mod_expr)
+{
+	/*
+	 * if (foo > bar) then ++foo is also > bar.
+	 */
+	if (!mod_expr)
+		return;
+	if (mod_expr->type != EXPR_PREOP && mod_expr->type != EXPR_POSTOP)
+		return;
+
+	if (mod_expr->op == SPECIAL_INCREMENT)
+		match_inc(sm);
+	else if (mod_expr->op == SPECIAL_DECREMENT)
+		match_dec(sm);
+}
+
+static int is_self_assign(struct expression *expr)
+{
+	if (!expr || expr->type != EXPR_ASSIGNMENT || expr->op != '=')
+		return 0;
+	return expr_equiv(expr->left, expr->right);
+}
+
+static void match_modify(struct sm_state *sm, struct expression *mod_expr)
+{
+	struct string_list *links;
+	char *tmp;
+
+	if (mod_expr && is_self_assign(mod_expr))
+		return;
+
+	/* handled by match_inc_dec() */
+	if (mod_expr &&
+	    ((mod_expr->type == EXPR_PREOP || mod_expr->type == EXPR_POSTOP) &&
+	     (mod_expr->op == SPECIAL_INCREMENT || mod_expr->op == SPECIAL_DECREMENT)))
+		return;
+
+	links = sm->state->data;
+
+	FOR_EACH_PTR(links, tmp) {
+		set_state(compare_id, tmp, NULL, &undefined);
+	} END_FOR_EACH_PTR(tmp);
+	set_state(link_id, sm->name, sm->sym, &undefined);
+}
+
+static void match_preop(struct expression *expr)
+{
+	struct expression *parent;
+	struct range_list *left, *right;
+	int op;
+
+	/*
+	 * This is an important special case.  Say you have:
+	 *
+	 * 	if (++j == limit)
+	 *
+	 * Assume that we know the range of limit is higher than the start
+	 * value for "j".  Then the first thing that we process is the ++j.  We
+	 * have not comparison states set up so it doesn't get caught by the
+	 * modification hook.  But it does get caught by smatch_extra which sets
+	 * j to unknown then we parse the "j == limit" and sets false to != but
+	 * really we want false to be <.
+	 *
+	 * So what we do is we set j < limit here, then the match_modify catches
+	 * it and we do a match_inc_dec().
+	 *
+	 */
+
+	if (expr->type != EXPR_PREOP ||
+	    (expr->op != SPECIAL_INCREMENT && expr->op != SPECIAL_DECREMENT))
+		return;
+
+	parent = expr_get_parent_expr(expr);
+	if (!parent)
+		return;
+	if (parent->type != EXPR_COMPARE || parent->op != SPECIAL_EQUAL)
+		return;
+	if (parent->left != expr)
+		return;
+
+	if (!get_implied_rl(expr->unop, &left) ||
+	   !get_implied_rl(parent->right, &right))
+		return;
+
+	op = rl_comparison(left, right);
+	if (!op)
+		return;
+
+	add_comparison(expr->unop, op, parent->right);
+}
+
+static char *chunk_to_var_sym(struct expression *expr, struct symbol **sym)
+{
+	expr = strip_expr(expr);
+	if (!expr)
+		return NULL;
+	if (sym)
+		*sym = NULL;
+
+	if (expr->type == EXPR_PREOP &&
+	    (expr->op == SPECIAL_INCREMENT ||
+	     expr->op == SPECIAL_DECREMENT))
+		expr = strip_expr(expr->unop);
+
+	if (expr->type == EXPR_CALL) {
+		char buf[64];
+
+		snprintf(buf, sizeof(buf), "return %p", expr);
+		return alloc_string(buf);
+	}
+
+	return expr_to_chunk_sym_vsl(expr, sym, NULL);
+}
+
+static char *chunk_to_var(struct expression *expr)
+{
+	return chunk_to_var_sym(expr, NULL);
+}
+
+static struct smatch_state *get_state_chunk(int owner, struct expression *expr)
+{
+	char *name;
+	struct symbol *sym;
+	struct smatch_state *ret;
+
+	name = chunk_to_var_sym(expr, &sym);
+	if (!name)
+		return NULL;
+
+	ret = get_state(owner, name, sym);
+	free_string(name);
+	return ret;
+}
+
+static void save_link(struct expression *expr, char *link)
+{
+	char *var;
+	struct symbol *sym;
+
+	expr = strip_expr(expr);
+	if (expr->type == EXPR_BINOP) {
+		char *chunk;
+
+		chunk = chunk_to_var(expr);
+		if (!chunk)
+			return;
+
+		save_link(expr->left, link);
+		save_link(expr->right, link);
+		save_link_var_sym(chunk, NULL, link);
+		return;
+	}
+
+	var = chunk_to_var_sym(expr, &sym);
+	if (!var)
+		return;
+
+	save_link_var_sym(var, sym, link);
+	free_string(var);
+}
+
+static int get_orig_comparison(struct stree *pre_stree, const char *left, const char *right)
+{
+	struct smatch_state *state;
+	struct compare_data *data;
+	int flip = 0;
+	char state_name[256];
+
+	if (strcmp(left, right) > 0) {
+		const char *tmp = right;
+
+		flip = 1;
+		right = left;
+		left = tmp;
+	}
+
+	snprintf(state_name, sizeof(state_name), "%s vs %s", left, right);
+	state = get_state_stree(pre_stree, compare_id, state_name, NULL);
+	if (!state || !state->data)
+		return 0;
+	data = state->data;
+	if (flip)
+		return flip_comparison(data->comparison);
+	return data->comparison;
+
+}
+
+static int have_common_var_sym(struct var_sym_list *left_vsl, struct var_sym_list *right_vsl)
+{
+	struct var_sym *tmp;
+
+	FOR_EACH_PTR(left_vsl, tmp) {
+		if (in_var_sym_list(right_vsl, tmp->var, tmp->sym))
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+
+	return 0;
+}
+
+/*
+ * The idea here is that we take a comparison "a < b" and then we look at all
+ * the things which "b" is compared against "b < c" and we say that that implies
+ * a relationship "a < c".
+ *
+ * The names here about because the comparisons are organized like this
+ * "a < b < c".
+ *
+ */
+static void update_tf_links(struct stree *pre_stree,
+			    struct expression *left_expr,
+			    const char *left_var, struct var_sym_list *left_vsl,
+			    int left_comparison, int left_false_comparison,
+			    const char *mid_var, struct var_sym_list *mid_vsl,
+			    struct string_list *links)
+{
+	struct smatch_state *state;
+	struct smatch_state *true_state, *false_state;
+	struct compare_data *data;
+	struct expression *right_expr;
+	const char *right_var;
+	struct var_sym_list *right_vsl;
+	int orig_comparison;
+	int right_comparison;
+	int true_comparison;
+	int false_comparison;
+	char *tmp;
+	char state_name[256];
+	struct var_sym *vs;
+
+	FOR_EACH_PTR(links, tmp) {
+		state = get_state_stree(pre_stree, compare_id, tmp, NULL);
+		if (!state || !state->data)
+			continue;
+		data = state->data;
+		right_comparison = data->comparison;
+		right_expr = data->right;
+		right_var = data->right_var;
+		right_vsl = data->right_vsl;
+		if (strcmp(mid_var, right_var) == 0) {
+			right_expr = data->left;
+			right_var = data->left_var;
+			right_vsl = data->left_vsl;
+			right_comparison = flip_comparison(right_comparison);
+		}
+		if (have_common_var_sym(left_vsl, right_vsl))
+			continue;
+
+		orig_comparison = get_orig_comparison(pre_stree, left_var, right_var);
+
+		true_comparison = combine_comparisons(left_comparison, right_comparison);
+		false_comparison = combine_comparisons(left_false_comparison, right_comparison);
+
+		true_comparison = filter_comparison(orig_comparison, true_comparison);
+		false_comparison = filter_comparison(orig_comparison, false_comparison);
+
+		if (strcmp(left_var, right_var) > 0) {
+		  	struct expression *tmp_expr = left_expr;
+			const char *tmp_var = left_var;
+			struct var_sym_list *tmp_vsl = left_vsl;
+
+			left_expr = right_expr;
+			left_var = right_var;
+			left_vsl = right_vsl;
+			right_expr = tmp_expr;
+			right_var = tmp_var;
+			right_vsl = tmp_vsl;
+			true_comparison = flip_comparison(true_comparison);
+			false_comparison = flip_comparison(false_comparison);
+		}
+
+		if (!true_comparison && !false_comparison)
+			continue;
+
+		if (true_comparison)
+			true_state = alloc_compare_state(
+					left_expr, left_var, left_vsl,
+					true_comparison,
+					right_expr, right_var, right_vsl);
+		else
+			true_state = NULL;
+		if (false_comparison)
+			false_state = alloc_compare_state(
+					left_expr, left_var, left_vsl,
+					false_comparison,
+					right_expr, right_var, right_vsl);
+		else
+			false_state = NULL;
+
+		snprintf(state_name, sizeof(state_name), "%s vs %s", left_var, right_var);
+		set_true_false_states(compare_id, state_name, NULL, true_state, false_state);
+		FOR_EACH_PTR(left_vsl, vs) {
+			save_link_var_sym(vs->var, vs->sym, state_name);
+		} END_FOR_EACH_PTR(vs);
+		FOR_EACH_PTR(right_vsl, vs) {
+			save_link_var_sym(vs->var, vs->sym, state_name);
+		} END_FOR_EACH_PTR(vs);
+		if (!vsl_to_sym(left_vsl))
+			save_link_var_sym(left_var, NULL, state_name);
+		if (!vsl_to_sym(right_vsl))
+			save_link_var_sym(right_var, NULL, state_name);
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void update_tf_data(struct stree *pre_stree,
+		struct expression *left_expr,
+		const char *left_name, struct var_sym_list *left_vsl,
+		struct expression *right_expr,
+		const char *right_name, struct var_sym_list *right_vsl,
+		int true_comparison, int false_comparison)
+{
+	struct smatch_state *state;
+
+	state = get_state_stree(pre_stree, link_id, right_name, vsl_to_sym(right_vsl));
+	if (state)
+		update_tf_links(pre_stree, left_expr, left_name, left_vsl, true_comparison, false_comparison, right_name, right_vsl, state->data);
+
+	state = get_state_stree(pre_stree, link_id, left_name, vsl_to_sym(left_vsl));
+	if (state)
+		update_tf_links(pre_stree, right_expr, right_name, right_vsl, flip_comparison(true_comparison), flip_comparison(false_comparison), left_name, left_vsl, state->data);
+}
+
+static void iter_modify(struct sm_state *sm, struct expression *mod_expr)
+{
+	if (sm->state != &start ||
+	    !mod_expr ||
+	    (mod_expr->type != EXPR_PREOP && mod_expr->type != EXPR_POSTOP) ||
+	    mod_expr->op != SPECIAL_INCREMENT)
+		set_state(inc_dec_id, sm->name, sm->sym, &undefined);
+	else
+		set_state(inc_dec_id, sm->name, sm->sym, &incremented);
+}
+
+static void handle_for_loops(struct expression *expr, char *state_name, struct smatch_state *false_state)
+{
+	sval_t sval;
+	char *iter_name, *cap_name;
+	struct symbol *iter_sym, *cap_sym;
+	struct compare_data *data;
+
+	if (expr->op != '<' && expr->op != SPECIAL_UNSIGNED_LT)
+		return;
+
+	if (!__cur_stmt || !__prev_stmt)
+		return;
+	if (__cur_stmt->type != STMT_ITERATOR)
+		return;
+	if (__cur_stmt->iterator_pre_condition != expr)
+		return;
+
+	/* literals are handled in smatch_extra.c */
+	if (get_value(expr->right, &sval))
+		return;
+
+	/* First time checking the condition */
+	if (__prev_stmt == __cur_stmt->iterator_pre_statement) {
+		if (!get_implied_value(expr->left, &sval) ||
+		    sval.value != 0)
+			return;
+
+		iter_name = expr_to_var_sym(expr->left, &iter_sym);
+		cap_name = expr_to_var_sym(expr->right, &cap_sym);
+		if (!iter_name || !cap_name || !iter_sym || !cap_sym) {
+			free_string(iter_name);
+			free_string(cap_name);
+			return;
+		}
+
+		set_state(inc_dec_id, iter_name, iter_sym, &start);
+		store_link(inc_dec_link_id, cap_name, cap_sym, iter_name, iter_sym);
+
+		free_string(iter_name);
+		free_string(cap_name);
+		return;
+	}
+
+	/* Second time checking the condtion */
+	if (__prev_stmt != __cur_stmt->iterator_post_statement)
+		return;
+
+	if (get_state_chunk(inc_dec_id, expr->left) != &incremented)
+		return;
+
+	data = false_state->data;
+	false_state = alloc_compare_state(
+			data->left, data->left_var, data->left_vsl,
+			SPECIAL_EQUAL,
+			data->right, data->right_var, data->right_vsl);
+
+	set_true_false_states(compare_id, state_name, NULL, NULL, false_state);
+}
+
+static int is_plus_one(struct expression *expr)
+{
+	sval_t sval;
+
+	if (expr->type != EXPR_BINOP || expr->op != '+')
+		return 0;
+	if (!get_implied_value(expr->right, &sval) || sval.value != 1)
+		return 0;
+	return 1;
+}
+
+static int is_minus_one(struct expression *expr)
+{
+	sval_t sval;
+
+	if (expr->type != EXPR_BINOP || expr->op != '-')
+		return 0;
+	if (!get_implied_value(expr->right, &sval) || sval.value != 1)
+		return 0;
+	return 1;
+}
+
+static void move_plus_to_minus_helper(struct expression **left_p, struct expression **right_p)
+{
+	struct expression *left = *left_p;
+	struct expression *right = *right_p;
+
+	/*
+	 * These two are basically equivalent: "foo + 1 != bar" and
+	 * "foo != bar - 1".  There are issues with signedness and integer
+	 * overflows.  There are also issues with type as well.  But let's
+	 * pretend we can ignore all that stuff for now.
+	 *
+	 */
+
+	if (!is_plus_one(left))
+		return;
+
+	*left_p = left->left;
+	*right_p = binop_expression(right, '-', left->right);
+}
+
+static void move_plus_to_minus(struct expression **left_p, struct expression **right_p)
+{
+	if (is_plus_one(*left_p) && is_plus_one(*right_p))
+		return;
+
+	move_plus_to_minus_helper(left_p, right_p);
+	move_plus_to_minus_helper(right_p, left_p);
+}
+
+static void handle_comparison(struct expression *left_expr, int op, struct expression *right_expr, char **_state_name, struct smatch_state **_false_state)
+{
+	char *left = NULL;
+	char *right = NULL;
+	struct symbol *left_sym, *right_sym;
+	struct var_sym_list *left_vsl = NULL;
+	struct var_sym_list *right_vsl = NULL;
+	int false_op;
+	int orig_comparison;
+	struct smatch_state *true_state, *false_state;
+	static char state_name[256];
+	struct stree *pre_stree;
+	sval_t sval;
+
+	if (!left_expr || !right_expr)
+		return;
+
+	left_expr = strip_parens(left_expr);
+	right_expr = strip_parens(right_expr);
+
+	while (left_expr->type == EXPR_ASSIGNMENT)
+		left_expr = strip_parens(left_expr->left);
+	while (right_expr->type == EXPR_ASSIGNMENT)
+		right_expr = strip_parens(right_expr->left);
+
+	false_op = negate_comparison(op);
+
+	move_plus_to_minus(&left_expr, &right_expr);
+
+	if (op == SPECIAL_UNSIGNED_LT &&
+	    get_implied_value(left_expr, &sval) &&
+	    sval.value == 0)
+		false_op = SPECIAL_EQUAL;
+
+	if (op == SPECIAL_UNSIGNED_GT &&
+	    get_implied_value(right_expr, &sval) &&
+	    sval.value == 0)
+		false_op = SPECIAL_EQUAL;
+
+	left = chunk_to_var_sym(left_expr, &left_sym);
+	if (!left)
+		goto free;
+	if (left_sym)
+		add_var_sym(&left_vsl, left, left_sym);
+	else
+		left_vsl = expr_to_vsl(left_expr);
+	right = chunk_to_var_sym(right_expr, &right_sym);
+	if (!right)
+		goto free;
+	if (right_sym)
+		add_var_sym(&right_vsl, right, right_sym);
+	else
+		right_vsl = expr_to_vsl(right_expr);
+
+	if (strcmp(left, right) > 0) {
+		char *tmp_name = left;
+		struct var_sym_list *tmp_vsl = left_vsl;
+		struct expression *tmp_expr = left_expr;
+
+		left = right;
+		left_vsl = right_vsl;
+		left_expr = right_expr;
+		right = tmp_name;
+		right_vsl = tmp_vsl;
+		right_expr = tmp_expr;
+		op = flip_comparison(op);
+		false_op = flip_comparison(false_op);
+	}
+
+	orig_comparison = get_comparison(left_expr, right_expr);
+	op = filter_comparison(orig_comparison, op);
+	false_op = filter_comparison(orig_comparison, false_op);
+
+	snprintf(state_name, sizeof(state_name), "%s vs %s", left, right);
+	true_state = alloc_compare_state(
+			left_expr, left, left_vsl,
+			op,
+			right_expr, right, right_vsl);
+	false_state = alloc_compare_state(
+			left_expr, left, left_vsl,
+			false_op,
+			right_expr, right, right_vsl);
+
+	pre_stree = clone_stree(__get_cur_stree());
+	update_tf_data(pre_stree, left_expr, left, left_vsl, right_expr, right, right_vsl, op, false_op);
+	free_stree(&pre_stree);
+
+	set_true_false_states(compare_id, state_name, NULL, true_state, false_state);
+	__compare_param_limit_hook(left_expr, right_expr, state_name, true_state, false_state);
+	save_link(left_expr, state_name);
+	save_link(right_expr, state_name);
+
+	if (_false_state)
+		*_false_state = false_state;
+	if (_state_name)
+		*_state_name = state_name;
+free:
+	free_string(left);
+	free_string(right);
+}
+
+void __comparison_match_condition(struct expression *expr)
+{
+	struct expression *left, *right, *new_left, *new_right, *tmp;
+	struct smatch_state *false_state = NULL;
+	char *state_name = NULL;
+	int redo, count;
+
+	if (expr->type != EXPR_COMPARE)
+		return;
+
+	handle_comparison(expr->left, expr->op, expr->right, &state_name, &false_state);
+	if (false_state && state_name)
+		handle_for_loops(expr, state_name, false_state);
+
+	left = strip_parens(expr->left);
+	right = strip_parens(expr->right);
+
+	if (left->type == EXPR_BINOP && left->op == '+') {
+		new_left = left->left;
+		new_right = binop_expression(right, '-', left->right);
+		handle_comparison(new_left, expr->op, new_right, NULL, NULL);
+
+		new_left = left->right;
+		new_right = binop_expression(right, '-', left->left);
+		handle_comparison(new_left, expr->op, new_right, NULL, NULL);
+	}
+
+
+	redo = 0;
+	left = strip_parens(expr->left);
+	right = strip_parens(expr->right);
+	if (get_last_expr_from_expression_stmt(expr->left)) {
+		left = get_last_expr_from_expression_stmt(expr->left);
+		redo = 1;
+	}
+	if (get_last_expr_from_expression_stmt(expr->right)) {
+		right = get_last_expr_from_expression_stmt(expr->right);
+		redo = 1;
+	}
+
+	if (!redo)
+		return;
+
+	count = 0;
+	while ((tmp = get_assigned_expr(left))) {
+		if (count++ > 3)
+			break;
+		left = strip_expr(tmp);
+	}
+	count = 0;
+	while ((tmp = get_assigned_expr(right))) {
+		if (count++ > 3)
+			break;
+		right = strip_expr(tmp);
+	}
+
+	handle_comparison(left, expr->op, right, NULL, NULL);
+}
+
+static void add_comparison_var_sym(
+		struct expression *left_expr,
+		const char *left_name, struct var_sym_list *left_vsl,
+		int comparison,
+		struct expression *right_expr,
+		const char *right_name, struct var_sym_list *right_vsl)
+{
+	struct smatch_state *state;
+	struct var_sym *vs;
+	char state_name[256];
+
+	if (strcmp(left_name, right_name) > 0) {
+		struct expression *tmp_expr = left_expr;
+		const char *tmp_name = left_name;
+		struct var_sym_list *tmp_vsl = left_vsl;
+
+		left_expr = right_expr;
+		left_name = right_name;
+		left_vsl = right_vsl;
+		right_expr = tmp_expr;
+		right_name = tmp_name;
+		right_vsl = tmp_vsl;
+		comparison = flip_comparison(comparison);
+	}
+	snprintf(state_name, sizeof(state_name), "%s vs %s", left_name, right_name);
+	state = alloc_compare_state(
+			left_expr, left_name, left_vsl,
+			comparison,
+			right_expr, right_name, right_vsl);
+
+	set_state(compare_id, state_name, NULL, state);
+
+	FOR_EACH_PTR(left_vsl, vs) {
+		save_link_var_sym(vs->var, vs->sym, state_name);
+	} END_FOR_EACH_PTR(vs);
+	FOR_EACH_PTR(right_vsl, vs) {
+		save_link_var_sym(vs->var, vs->sym, state_name);
+	} END_FOR_EACH_PTR(vs);
+}
+
+static void add_comparison(struct expression *left, int comparison, struct expression *right)
+{
+	char *left_name = NULL;
+	char *right_name = NULL;
+	struct symbol *left_sym, *right_sym;
+	struct var_sym_list *left_vsl, *right_vsl;
+	struct smatch_state *state;
+	char state_name[256];
+
+	left_name = chunk_to_var_sym(left, &left_sym);
+	if (!left_name)
+		goto free;
+	left_vsl = expr_to_vsl(left);
+	right_name = chunk_to_var_sym(right, &right_sym);
+	if (!right_name)
+		goto free;
+	right_vsl = expr_to_vsl(right);
+
+	if (strcmp(left_name, right_name) > 0) {
+		struct expression *tmp_expr = left;
+		struct symbol *tmp_sym = left_sym;
+		char *tmp_name = left_name;
+		struct var_sym_list *tmp_vsl = left_vsl;
+
+		left = right;
+		left_name = right_name;
+		left_sym = right_sym;
+		left_vsl = right_vsl;
+		right = tmp_expr;
+		right_name = tmp_name;
+		right_sym = tmp_sym;
+		right_vsl = tmp_vsl;
+		comparison = flip_comparison(comparison);
+	}
+	snprintf(state_name, sizeof(state_name), "%s vs %s", left_name, right_name);
+	state = alloc_compare_state(
+			left, left_name, left_vsl,
+			comparison,
+			right, right_name, right_vsl);
+
+	set_state(compare_id, state_name, NULL, state);
+	save_link(left, state_name);
+	save_link(right, state_name);
+
+free:
+	free_string(left_name);
+	free_string(right_name);
+}
+
+static void match_assign_add(struct expression *expr)
+{
+	struct expression *right;
+	struct expression *r_left, *r_right;
+	sval_t left_tmp, right_tmp;
+
+	right = strip_expr(expr->right);
+	r_left = strip_expr(right->left);
+	r_right = strip_expr(right->right);
+
+	get_absolute_min(r_left, &left_tmp);
+	get_absolute_min(r_right, &right_tmp);
+
+	if (left_tmp.value > 0)
+		add_comparison(expr->left, '>', r_right);
+	else if (left_tmp.value == 0)
+		add_comparison(expr->left, SPECIAL_GTE, r_right);
+
+	if (right_tmp.value > 0)
+		add_comparison(expr->left, '>', r_left);
+	else if (right_tmp.value == 0)
+		add_comparison(expr->left, SPECIAL_GTE, r_left);
+}
+
+static void match_assign_sub(struct expression *expr)
+{
+	struct expression *right;
+	struct expression *r_left, *r_right;
+	int comparison;
+	sval_t min;
+
+	right = strip_expr(expr->right);
+	r_left = strip_expr(right->left);
+	r_right = strip_expr(right->right);
+
+	if (get_absolute_min(r_right, &min) && sval_is_negative(min))
+		return;
+
+	comparison = get_comparison(r_left, r_right);
+
+	switch (comparison) {
+	case '>':
+	case SPECIAL_GTE:
+		if (implied_not_equal(r_right, 0))
+			add_comparison(expr->left, '>', r_left);
+		else
+			add_comparison(expr->left, SPECIAL_GTE, r_left);
+		return;
+	}
+}
+
+static void match_assign_divide(struct expression *expr)
+{
+	struct expression *right;
+	struct expression *r_left, *r_right;
+	sval_t min;
+
+	right = strip_expr(expr->right);
+	r_left = strip_expr(right->left);
+	r_right = strip_expr(right->right);
+	if (!get_implied_min(r_right, &min) || min.value <= 1)
+		return;
+
+	add_comparison(expr->left, '<', r_left);
+}
+
+static void match_binop_assign(struct expression *expr)
+{
+	struct expression *right;
+
+	right = strip_expr(expr->right);
+	if (right->op == '+')
+		match_assign_add(expr);
+	if (right->op == '-')
+		match_assign_sub(expr);
+	if (right->op == '/')
+		match_assign_divide(expr);
+}
+
+static void copy_comparisons(struct expression *left, struct expression *right)
+{
+	struct string_list *links;
+	struct smatch_state *state;
+	struct compare_data *data;
+	struct symbol *left_sym, *right_sym;
+	char *left_var = NULL;
+	char *right_var = NULL;
+	struct var_sym_list *left_vsl;
+	struct expression *expr;
+	const char *var;
+	struct var_sym_list *vsl;
+	int comparison;
+	char *tmp;
+
+	left_var = chunk_to_var_sym(left, &left_sym);
+	if (!left_var)
+		goto done;
+	left_vsl = expr_to_vsl(left);
+	right_var = chunk_to_var_sym(right, &right_sym);
+	if (!right_var)
+		goto done;
+
+	state = get_state(link_id, right_var, right_sym);
+	if (!state)
+		return;
+	links = state->data;
+
+	FOR_EACH_PTR(links, tmp) {
+		state = get_state(compare_id, tmp, NULL);
+		if (!state || !state->data)
+			continue;
+		data = state->data;
+		comparison = data->comparison;
+		expr = data->right;
+		var = data->right_var;
+		vsl = data->right_vsl;
+		if (strcmp(var, right_var) == 0) {
+			expr = data->left;
+			var = data->left_var;
+			vsl = data->left_vsl;
+			comparison = flip_comparison(comparison);
+		}
+		/* n = copy_from_user(dest, src, n); leads to n <= n which is nonsense */
+		if (strcmp(left_var, var) == 0)
+			continue;
+		add_comparison_var_sym(left, left_var, left_vsl, comparison, expr, var, vsl);
+	} END_FOR_EACH_PTR(tmp);
+
+done:
+	free_string(right_var);
+}
+
+static void match_assign(struct expression *expr)
+{
+	struct expression *right;
+
+	if (expr->op != '=')
+		return;
+	if (__in_fake_assign || outside_of_function())
+		return;
+
+	if (is_struct(expr->left))
+		return;
+
+	if (is_self_assign(expr))
+		return;
+
+	copy_comparisons(expr->left, expr->right);
+	add_comparison(expr->left, SPECIAL_EQUAL, expr->right);
+
+	right = strip_expr(expr->right);
+	if (right->type == EXPR_BINOP)
+		match_binop_assign(expr);
+}
+
+int get_comparison_strings(const char *one, const char *two)
+{
+	char buf[256];
+	struct smatch_state *state;
+	int invert = 0;
+	int ret = 0;
+
+	if (!one || !two)
+		return 0;
+
+	if (strcmp(one, two) == 0)
+		return SPECIAL_EQUAL;
+
+	if (strcmp(one, two) > 0) {
+		const char *tmp = one;
+
+		one = two;
+		two = tmp;
+		invert = 1;
+	}
+
+	snprintf(buf, sizeof(buf), "%s vs %s", one, two);
+	state = get_state(compare_id, buf, NULL);
+	if (state)
+		ret = state_to_comparison(state);
+
+	if (invert)
+		ret = flip_comparison(ret);
+
+	return ret;
+}
+
+int get_comparison(struct expression *a, struct expression *b)
+{
+	char *one = NULL;
+	char *two = NULL;
+	int ret = 0;
+
+	if (!a || !b)
+		return 0;
+
+	a = strip_parens(a);
+	b = strip_parens(b);
+
+	move_plus_to_minus(&a, &b);
+
+	one = chunk_to_var(a);
+	if (!one)
+		goto free;
+	two = chunk_to_var(b);
+	if (!two)
+		goto free;
+
+	ret = get_comparison_strings(one, two);
+	if (ret)
+		goto free;
+
+	if (is_plus_one(a) || is_minus_one(a)) {
+		free_string(one);
+		one = chunk_to_var(a->left);
+		ret = get_comparison_strings(one, two);
+	} else if (is_plus_one(b) || is_minus_one(b)) {
+		free_string(two);
+		two = chunk_to_var(b->left);
+		ret = get_comparison_strings(one, two);
+	}
+
+	if (!ret)
+		goto free;
+
+	if ((is_plus_one(a) || is_minus_one(b)) && ret == '<')
+		ret = SPECIAL_LTE;
+	else if ((is_minus_one(a) || is_plus_one(b)) && ret == '>')
+		ret = SPECIAL_GTE;
+	else
+		ret = 0;
+
+free:
+	free_string(one);
+	free_string(two);
+
+	if (!ret)
+		return comparison_from_extra(a, b);
+	return ret;
+}
+
+int possible_comparison(struct expression *a, int comparison, struct expression *b)
+{
+	char *one = NULL;
+	char *two = NULL;
+	int ret = 0;
+	char buf[256];
+	struct sm_state *sm;
+	int saved;
+
+	one = chunk_to_var(a);
+	if (!one)
+		goto free;
+	two = chunk_to_var(b);
+	if (!two)
+		goto free;
+
+
+	if (strcmp(one, two) == 0 && comparison == SPECIAL_EQUAL) {
+		ret = 1;
+		goto free;
+	}
+
+	if (strcmp(one, two) > 0) {
+		char *tmp = one;
+
+		one = two;
+		two = tmp;
+		comparison = flip_comparison(comparison);
+	}
+
+	snprintf(buf, sizeof(buf), "%s vs %s", one, two);
+	sm = get_sm_state(compare_id, buf, NULL);
+	if (!sm)
+		goto free;
+
+	FOR_EACH_PTR(sm->possible, sm) {
+		if (!sm->state->data)
+			continue;
+		saved = ((struct compare_data *)sm->state->data)->comparison;
+		if (saved == comparison)
+			ret = 1;
+		if (comparison == SPECIAL_EQUAL &&
+		    (saved == SPECIAL_LTE ||
+		     saved == SPECIAL_GTE ||
+		     saved == SPECIAL_UNSIGNED_LTE ||
+		     saved == SPECIAL_UNSIGNED_GTE))
+			ret = 1;
+		if (ret == 1)
+			goto free;
+	} END_FOR_EACH_PTR(sm);
+
+	return ret;
+free:
+	free_string(one);
+	free_string(two);
+	return ret;
+}
+
+struct state_list *get_all_comparisons(struct expression *expr)
+{
+	struct smatch_state *state;
+	struct string_list *links;
+	struct state_list *ret = NULL;
+	struct sm_state *sm;
+	char *tmp;
+
+	state = get_state_chunk(link_id, expr);
+	if (!state)
+		return NULL;
+	links = state->data;
+
+	FOR_EACH_PTR(links, tmp) {
+		sm = get_sm_state(compare_id, tmp, NULL);
+		if (!sm)
+			continue;
+		// FIXME have to compare name with vsl
+		add_ptr_list(&ret, sm);
+	} END_FOR_EACH_PTR(tmp);
+
+	return ret;
+}
+
+struct state_list *get_all_possible_equal_comparisons(struct expression *expr)
+{
+	struct smatch_state *state;
+	struct string_list *links;
+	struct state_list *ret = NULL;
+	struct sm_state *sm;
+	char *tmp;
+
+	state = get_state_chunk(link_id, expr);
+	if (!state)
+		return NULL;
+	links = state->data;
+
+	FOR_EACH_PTR(links, tmp) {
+		sm = get_sm_state(compare_id, tmp, NULL);
+		if (!sm)
+			continue;
+		if (!strchr(sm->state->name, '='))
+			continue;
+		if (strcmp(sm->state->name, "!=") == 0)
+			continue;
+		add_ptr_list(&ret, sm);
+	} END_FOR_EACH_PTR(tmp);
+
+	return ret;
+}
+
+struct state_list *get_all_possible_not_equal_comparisons(struct expression *expr)
+{
+	struct smatch_state *state;
+	struct string_list *links;
+	struct state_list *ret = NULL;
+	struct sm_state *sm;
+	struct sm_state *possible;
+	char *link;
+
+	return NULL;
+
+	state = get_state_chunk(link_id, expr);
+	if (!state)
+		return NULL;
+	links = state->data;
+
+	FOR_EACH_PTR(links, link) {
+		sm = get_sm_state(compare_id, link, NULL);
+		if (!sm)
+			continue;
+		FOR_EACH_PTR(sm->possible, possible) {
+			if (strcmp(possible->state->name, "!=") != 0)
+				continue;
+			add_ptr_list(&ret, sm);
+			break;
+		} END_FOR_EACH_PTR(link);
+	} END_FOR_EACH_PTR(link);
+
+	return ret;
+}
+
+static void update_links_from_call(struct expression *left,
+				   int left_compare,
+				   struct expression *right)
+{
+	struct string_list *links;
+	struct smatch_state *state;
+	struct compare_data *data;
+	struct symbol *left_sym, *right_sym;
+	char *left_var = NULL;
+	char *right_var = NULL;
+	struct var_sym_list *left_vsl;
+	struct expression *expr;
+	const char *var;
+	struct var_sym_list *vsl;
+	int comparison;
+	char *tmp;
+
+	left_var = chunk_to_var_sym(left, &left_sym);
+	if (!left_var)
+		goto done;
+	left_vsl = expr_to_vsl(left);
+	right_var = chunk_to_var_sym(right, &right_sym);
+	if (!right_var)
+		goto done;
+
+	state = get_state(link_id, right_var, right_sym);
+	if (!state)
+		return;
+	links = state->data;
+
+	FOR_EACH_PTR(links, tmp) {
+		state = get_state(compare_id, tmp, NULL);
+		if (!state || !state->data)
+			continue;
+		data = state->data;
+		comparison = data->comparison;
+		expr = data->right;
+		var = data->right_var;
+		vsl = data->right_vsl;
+		if (strcmp(var, right_var) == 0) {
+			expr = data->left;
+			var = data->left_var;
+			vsl = data->left_vsl;
+			comparison = flip_comparison(comparison);
+		}
+		comparison = combine_comparisons(left_compare, comparison);
+		if (!comparison)
+			continue;
+		add_comparison_var_sym(left, left_var, left_vsl, comparison, expr, var, vsl);
+	} END_FOR_EACH_PTR(tmp);
+
+done:
+	free_string(right_var);
+}
+
+void __add_return_comparison(struct expression *call, const char *range)
+{
+	struct expression *arg;
+	int comparison;
+	char buf[4];
+
+	if (!str_to_comparison_arg(range, call, &comparison, &arg))
+		return;
+	snprintf(buf, sizeof(buf), "%s", show_special(comparison));
+	update_links_from_call(call, comparison, arg);
+	add_comparison(call, comparison, arg);
+}
+
+void __add_comparison_info(struct expression *expr, struct expression *call, const char *range)
+{
+	copy_comparisons(expr, call);
+}
+
+static char *get_mask_comparison(struct expression *expr, int ignore)
+{
+	struct expression *tmp, *right;
+	int count, param;
+	char buf[256];
+
+	/* The return value for "return foo & param;" is <= param */
+
+	count = 0;
+	while ((tmp = get_assigned_expr(expr))) {
+		expr = strip_expr(tmp);
+		if (count++ > 4)
+			break;
+	}
+
+	if (expr->type != EXPR_BINOP || expr->op != '&')
+		return NULL;
+
+	right = strip_expr(expr->right);
+	param = get_param_num(right);
+	if (param < 0 || param == ignore)
+		return NULL;
+
+	snprintf(buf, sizeof(buf), "[<=$%d]", param);
+	return alloc_sname(buf);
+}
+
+static char *range_comparison_to_param_helper(struct expression *expr, char starts_with, int ignore)
+{
+	struct symbol *param;
+	char *var = NULL;
+	char buf[256];
+	char *ret_str = NULL;
+	int compare;
+	int i;
+
+	if (!expr)
+		return NULL;
+
+	var = chunk_to_var(expr);
+	if (!var)
+		goto try_mask;
+
+	i = -1;
+	FOR_EACH_PTR(cur_func_sym->ctype.base_type->arguments, param) {
+		i++;
+		if (i == ignore)
+			continue;
+		if (!param->ident)
+			continue;
+		snprintf(buf, sizeof(buf), "%s orig", param->ident->name);
+		compare = get_comparison_strings(var, buf);
+		if (!compare)
+			continue;
+		if (show_special(compare)[0] != starts_with)
+			continue;
+		snprintf(buf, sizeof(buf), "[%s$%d]", show_special(compare), i);
+		ret_str = alloc_sname(buf);
+		break;
+	} END_FOR_EACH_PTR(param);
+
+	free_string(var);
+	if (!ret_str)
+		goto try_mask;
+
+	return ret_str;
+
+try_mask:
+	if (starts_with == '<')
+		ret_str = get_mask_comparison(expr, ignore);
+	return ret_str;
+}
+
+char *name_sym_to_param_comparison(const char *name, struct symbol *sym)
+{
+	struct symbol *param;
+	char buf[256];
+	int compare;
+	int i;
+
+	i = -1;
+	FOR_EACH_PTR(cur_func_sym->ctype.base_type->arguments, param) {
+		i++;
+		if (!param->ident)
+			continue;
+		snprintf(buf, sizeof(buf), "%s orig", param->ident->name);
+		compare = get_comparison_strings(name, buf);
+		if (!compare)
+			continue;
+		snprintf(buf, sizeof(buf), "[%s$%d]", show_special(compare), i);
+		return alloc_sname(buf);
+	} END_FOR_EACH_PTR(param);
+
+	return NULL;
+}
+
+char *expr_equal_to_param(struct expression *expr, int ignore)
+{
+	return range_comparison_to_param_helper(expr, '=', ignore);
+}
+
+char *expr_lte_to_param(struct expression *expr, int ignore)
+{
+	return range_comparison_to_param_helper(expr, '<', ignore);
+}
+
+char *expr_param_comparison(struct expression *expr, int ignore)
+{
+	struct symbol *param;
+	char *var = NULL;
+	char buf[256];
+	char *ret_str = NULL;
+	int compare;
+	int i;
+
+	var = chunk_to_var(expr);
+	if (!var)
+		goto free;
+
+	i = -1;
+	FOR_EACH_PTR(cur_func_sym->ctype.base_type->arguments, param) {
+		i++;
+		if (i == ignore)
+			continue;
+		if (!param->ident)
+			continue;
+		snprintf(buf, sizeof(buf), "%s orig", param->ident->name);
+		compare = get_comparison_strings(var, buf);
+		if (!compare)
+			continue;
+		snprintf(buf, sizeof(buf), "[%s$%d]", show_special(compare), i);
+		ret_str = alloc_sname(buf);
+		break;
+	} END_FOR_EACH_PTR(param);
+
+free:
+	free_string(var);
+	return ret_str;
+}
+
+char *get_printed_param_name(struct expression *call, const char *param_name, struct symbol *param_sym)
+{
+	struct expression *arg;
+	char *name;
+	struct symbol *sym;
+	static char buf[256];
+	int len;
+	int i;
+
+	i = -1;
+	FOR_EACH_PTR(call->args, arg) {
+		i++;
+
+		name = expr_to_var_sym(arg, &sym);
+		if (!name || !sym)
+			continue;
+		if (sym != param_sym)
+			continue;
+
+		len = strlen(name);
+		if (strncmp(name, param_name, len) != 0)
+			continue;
+		if (param_name[len] == '\0') {
+			snprintf(buf, sizeof(buf), "$%d", i);
+			return buf;
+		}
+		if (param_name[len] != '-')
+			continue;
+		snprintf(buf, sizeof(buf), "$%d%s", i, param_name + len);
+		return buf;
+	} END_FOR_EACH_PTR(arg);
+
+	return NULL;
+}
+
+static void match_call_info(struct expression *expr)
+{
+	struct expression *arg;
+	struct smatch_state *state;
+	struct sm_state *sm;
+	struct compare_data *data;
+	int comparison;
+	struct string_list *links;
+	char *arg_name;
+	const char *right_name;
+	char *link;
+	char info_buf[256];
+	int i;
+
+	i = -1;
+	FOR_EACH_PTR(expr->args, arg) {
+		i++;
+
+		state = get_state_chunk(link_id, arg);
+		if (!state)
+			continue;
+
+		links = state->data;
+		FOR_EACH_PTR(links, link) {
+			struct var_sym_list *right_vsl;
+			struct var_sym *right_vs;
+
+
+			if (strstr(link, " orig"))
+				continue;
+			sm = get_sm_state(compare_id, link, NULL);
+			if (!sm)
+				continue;
+			data = sm->state->data;
+			if (!data || !data->comparison)
+				continue;
+			arg_name = expr_to_var(arg);
+			if (!arg_name)
+				continue;
+
+			right_vsl = NULL;
+			if (strcmp(data->left_var, arg_name) == 0) {
+				comparison = data->comparison;
+				right_name = data->right_var;
+				right_vsl = data->right_vsl;
+			} else if (strcmp(data->right_var, arg_name) == 0) {
+				comparison = flip_comparison(data->comparison);
+				right_name = data->left_var;
+				right_vsl = data->left_vsl;
+			}
+			if (!right_vsl || ptr_list_size((struct ptr_list *)right_vsl) != 1)
+				goto free;
+
+			right_vs = first_ptr_list((struct ptr_list *)right_vsl);
+			if (strcmp(right_vs->var, right_name) != 0)
+				goto free;
+			right_name = get_printed_param_name(expr, right_vs->var, right_vs->sym);
+			if (!right_name)
+				goto free;
+			snprintf(info_buf, sizeof(info_buf), "%s %s", show_special(comparison), right_name);
+			sql_insert_caller_info(expr, PARAM_COMPARE, i, "$", info_buf);
+
+free:
+			free_string(arg_name);
+		} END_FOR_EACH_PTR(link);
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void struct_member_callback(struct expression *call, int param, char *printed_name, struct sm_state *link_sm)
+{
+	struct sm_state *compare_sm;
+	struct string_list *links;
+	char *link;
+	struct compare_data *data;
+	struct var_sym *left, *right;
+	static char info_buf[256];
+	const char *right_name;
+
+	if (strstr(printed_name, " orig"))
+		return;
+
+	links = link_sm->state->data;
+	FOR_EACH_PTR(links, link) {
+		compare_sm = get_sm_state(compare_id, link, NULL);
+		if (!compare_sm)
+			continue;
+		data = compare_sm->state->data;
+		if (!data || !data->comparison)
+			continue;
+
+		if (ptr_list_size((struct ptr_list *)data->left_vsl) != 1 ||
+		    ptr_list_size((struct ptr_list *)data->right_vsl) != 1)
+			continue;
+		left = first_ptr_list((struct ptr_list *)data->left_vsl);
+		right = first_ptr_list((struct ptr_list *)data->right_vsl);
+		if (left->sym == right->sym &&
+		    strcmp(left->var, right->var) == 0)
+			continue;
+		/*
+		 * Both parameters link to this comparison so only
+		 * record the first one.
+		 */
+		if (left->sym != link_sm->sym ||
+		    strcmp(left->var, link_sm->name) != 0)
+			continue;
+
+		right_name = get_printed_param_name(call, right->var, right->sym);
+		if (!right_name)
+			continue;
+		snprintf(info_buf, sizeof(info_buf), "%s %s", show_special(data->comparison), right_name);
+		sql_insert_caller_info(call, PARAM_COMPARE, param, printed_name, info_buf);
+	} END_FOR_EACH_PTR(link);
+}
+
+static void print_return_value_comparison(int return_id, char *return_ranges, struct expression *expr)
+{
+	char *name;
+	const char *tmp_name;
+	struct symbol *sym;
+	int param;
+	char info_buf[256];
+
+	/*
+	 * TODO: This only prints == comparisons. That's probably the most
+	 * useful comparison because == max has lots of implications.  But it
+	 * would be good to capture the rest as well.
+	 *
+	 * This information is already in the DB but it's in the parameter math
+	 * bits and it's awkward to use it.  This is is the simpler, possibly
+	 * cleaner way, but not necessarily the best, I don't know.
+	 */
+
+	if (!expr)
+		return;
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+
+	param = get_param_num_from_sym(sym);
+	if (param < 0)
+		goto free;
+	if (param_was_set_var_sym(name, sym))
+		goto free;
+
+	tmp_name = get_param_name_var_sym(name, sym);
+	if (!tmp_name)
+		goto free;
+
+	snprintf(info_buf, sizeof(info_buf), "== $%d%s", param, tmp_name + 1);
+	sql_insert_return_states(return_id, return_ranges,
+				PARAM_COMPARE, -1, "$", info_buf);
+free:
+	free_string(name);
+}
+
+static void print_return_comparison(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct sm_state *tmp;
+	struct string_list *links;
+	char *link;
+	struct sm_state *sm;
+	struct compare_data *data;
+	struct var_sym *left, *right;
+	int left_param, right_param;
+	char left_buf[256];
+	char right_buf[256];
+	char info_buf[258];
+	const char *tmp_name;
+
+	print_return_value_comparison(return_id, return_ranges, expr);
+
+	FOR_EACH_MY_SM(link_id, __get_cur_stree(), tmp) {
+		if (get_param_num_from_sym(tmp->sym) < 0)
+			continue;
+		links = tmp->state->data;
+		FOR_EACH_PTR(links, link) {
+			sm = get_sm_state(compare_id, link, NULL);
+			if (!sm)
+				continue;
+			data = sm->state->data;
+			if (!data || !data->comparison)
+				continue;
+			if (ptr_list_size((struct ptr_list *)data->left_vsl) != 1 ||
+			    ptr_list_size((struct ptr_list *)data->right_vsl) != 1)
+				continue;
+			left = first_ptr_list((struct ptr_list *)data->left_vsl);
+			right = first_ptr_list((struct ptr_list *)data->right_vsl);
+			if (left->sym == right->sym &&
+			    strcmp(left->var, right->var) == 0)
+				continue;
+			/*
+			 * Both parameters link to this comparison so only
+			 * record the first one.
+			 */
+			if (left->sym != tmp->sym ||
+			    strcmp(left->var, tmp->name) != 0)
+				continue;
+
+			if (strstr(right->var, " orig"))
+				continue;
+
+			left_param = get_param_num_from_sym(left->sym);
+			right_param = get_param_num_from_sym(right->sym);
+			if (left_param < 0 || right_param < 0)
+				continue;
+
+			tmp_name = get_param_name_var_sym(left->var, left->sym);
+			if (!tmp_name)
+				continue;
+			snprintf(left_buf, sizeof(left_buf), "%s", tmp_name);
+
+			tmp_name = get_param_name_var_sym(right->var, right->sym);
+			if (!tmp_name || tmp_name[0] != '$')
+				continue;
+			snprintf(right_buf, sizeof(right_buf), "$%d%s", right_param, tmp_name + 1);
+
+			/*
+			 * FIXME: this should reject $ type variables (as
+			 * opposed to $->foo type).  Those should come from
+			 * smatch_param_compare_limit.c.
+			 */
+
+			snprintf(info_buf, sizeof(info_buf), "%s %s", show_special(data->comparison), right_buf);
+			sql_insert_return_states(return_id, return_ranges,
+					PARAM_COMPARE, left_param, left_buf, info_buf);
+		} END_FOR_EACH_PTR(link);
+
+	} END_FOR_EACH_SM(tmp);
+}
+
+static int parse_comparison(char **value, int *op)
+{
+
+	*op = **value;
+
+	switch (*op) {
+	case '<':
+		(*value)++;
+		if (**value == '=') {
+			(*value)++;
+			*op = SPECIAL_LTE;
+		}
+		break;
+	case '=':
+		(*value)++;
+		(*value)++;
+		*op = SPECIAL_EQUAL;
+		break;
+	case '!':
+		(*value)++;
+		(*value)++;
+		*op = SPECIAL_NOTEQUAL;
+		break;
+	case '>':
+		(*value)++;
+		if (**value == '=') {
+			(*value)++;
+			*op = SPECIAL_GTE;
+		}
+		break;
+	default:
+		return 0;
+	}
+
+	if (**value != ' ') {
+		sm_perror("parsing comparison.  %s", *value);
+		return 0;
+	}
+
+	(*value)++;
+	return 1;
+}
+
+static int split_op_param_key(char *value, int *op, int *param, char **key)
+{
+	static char buf[256];
+	char *p;
+
+	if (!parse_comparison(&value, op))
+		return 0;
+
+	snprintf(buf, sizeof(buf), value);
+
+	p = buf;
+	if (*p++ != '$')
+		return 0;
+
+	*param = atoi(p);
+	if (*param < 0 || *param > 99)
+		return 0;
+	p++;
+	if (*param > 9)
+		p++;
+	p--;
+	*p = '$';
+	*key = p;
+
+	return 1;
+}
+
+static void db_return_comparison(struct expression *expr, int left_param, char *key, char *value)
+{
+	struct expression *left_arg, *right_arg;
+	char *left_name = NULL;
+	struct symbol *left_sym;
+	char *right_name = NULL;
+	struct symbol *right_sym;
+	int op;
+	int right_param;
+	char *right_key;
+	struct var_sym_list *left_vsl = NULL, *right_vsl = NULL;
+
+	if (left_param == -1) {
+		if (expr->type != EXPR_ASSIGNMENT)
+			return;
+		left_arg = strip_expr(expr->left);
+
+		while (expr->type == EXPR_ASSIGNMENT)
+			expr = strip_expr(expr->right);
+		if (expr->type != EXPR_CALL)
+			return;
+	} else {
+		while (expr->type == EXPR_ASSIGNMENT)
+			expr = strip_expr(expr->right);
+		if (expr->type != EXPR_CALL)
+			return;
+
+		left_arg = get_argument_from_call_expr(expr->args, left_param);
+		if (!left_arg)
+			return;
+	}
+
+	if (!split_op_param_key(value, &op, &right_param, &right_key))
+		return;
+
+	right_arg = get_argument_from_call_expr(expr->args, right_param);
+	if (!right_arg)
+		return;
+
+	left_name = get_variable_from_key(left_arg, key, &left_sym);
+	if (!left_name || !left_sym)
+		goto free;
+
+	right_name = get_variable_from_key(right_arg, right_key, &right_sym);
+	if (!right_name || !right_sym)
+		goto free;
+
+	add_var_sym(&left_vsl, left_name, left_sym);
+	add_var_sym(&right_vsl, right_name, right_sym);
+
+	add_comparison_var_sym(NULL, left_name, left_vsl, op, NULL, right_name, right_vsl);
+
+free:
+	free_string(left_name);
+	free_string(right_name);
+}
+
+int param_compare_limit_is_impossible(struct expression *expr, int left_param, char *left_key, char *value)
+{
+	struct smatch_state *state;
+	char *left_name = NULL;
+	char *right_name = NULL;
+	struct symbol *left_sym, *right_sym;
+	struct expression *left_arg, *right_arg;
+	int op, state_op;
+	int right_param;
+	char *right_key;
+	int ret = 0;
+	char buf[256];
+
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+	if (expr->type != EXPR_CALL)
+		return 0;
+
+	if (!split_op_param_key(value, &op, &right_param, &right_key))
+		return 0;
+
+	left_arg = get_argument_from_call_expr(expr->args, left_param);
+	if (!left_arg)
+		return 0;
+
+	right_arg = get_argument_from_call_expr(expr->args, right_param);
+	if (!right_arg)
+		return 0;
+
+	left_name = get_variable_from_key(left_arg, left_key, &left_sym);
+	right_name = get_variable_from_key(right_arg, right_key, &right_sym);
+	if (!left_name || !right_name)
+		goto free;
+
+	snprintf(buf, sizeof(buf), "%s vs %s", left_name, right_name);
+	state = get_state(compare_id, buf, NULL);
+	if (!state)
+		goto free;
+	state_op = state_to_comparison(state);
+	if (!state_op)
+		goto free;
+
+	if (!filter_comparison(remove_unsigned_from_comparison(state_op), op))
+		ret = 1;
+free:
+	free_string(left_name);
+	free_string(right_name);
+	return ret;
+}
+
+int impossibly_high_comparison(struct expression *expr)
+{
+	struct smatch_state *link_state;
+	struct sm_state *sm;
+	struct string_list *links;
+	char *link;
+	struct compare_data *data;
+
+	link_state = get_state_expr(link_id, expr);
+	if (!link_state) {
+		if (expr->type == EXPR_BINOP &&
+		    (impossibly_high_comparison(expr->left) ||
+		     impossibly_high_comparison(expr->right)))
+			return 1;
+		return 0;
+	}
+
+	links = link_state->data;
+	FOR_EACH_PTR(links, link) {
+		sm = get_sm_state(compare_id, link, NULL);
+		if (!sm)
+			continue;
+		data = sm->state->data;
+		if (!data)
+			continue;
+		if (!possibly_true(data->left, data->comparison, data->right))
+			return 1;
+	} END_FOR_EACH_PTR(link);
+
+	return 0;
+}
+
+static void free_data(struct symbol *sym)
+{
+	if (__inline_fn)
+		return;
+	clear_compare_data_alloc();
+}
+
+void register_comparison(int id)
+{
+	compare_id = id;
+	add_hook(&save_start_states, AFTER_DEF_HOOK);
+	add_unmatched_state_hook(compare_id, unmatched_comparison);
+	add_pre_merge_hook(compare_id, &pre_merge_hook);
+	add_merge_hook(compare_id, &merge_compare_states);
+	add_hook(&free_data, AFTER_FUNC_HOOK);
+	add_hook(&match_call_info, FUNCTION_CALL_HOOK);
+	add_split_return_callback(&print_return_comparison);
+
+	select_return_states_hook(PARAM_COMPARE, &db_return_comparison);
+	add_hook(&match_preop, OP_HOOK);
+}
+
+void register_comparison_late(int id)
+{
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+}
+
+void register_comparison_links(int id)
+{
+	link_id = id;
+	add_merge_hook(link_id, &merge_links);
+	add_modification_hook(link_id, &match_modify);
+	add_modification_hook_late(link_id, match_inc_dec);
+
+	add_member_info_callback(link_id, struct_member_callback);
+}
+
+void register_comparison_inc_dec(int id)
+{
+	inc_dec_id = id;
+	add_modification_hook_late(inc_dec_id, &iter_modify);
+}
+
+void register_comparison_inc_dec_links(int id)
+{
+	inc_dec_link_id = id;
+	set_up_link_functions(inc_dec_id, inc_dec_link_id);
+}
+
+static void filter_by_sm(struct sm_state *sm, int op,
+		       struct state_list **true_stack,
+		       struct state_list **false_stack)
+{
+	struct compare_data *data;
+	int istrue = 0;
+	int isfalse = 0;
+
+	if (!sm)
+		return;
+	data = sm->state->data;
+	if (!data) {
+		if (sm->merged) {
+			filter_by_sm(sm->left, op, true_stack, false_stack);
+			filter_by_sm(sm->right, op, true_stack, false_stack);
+		}
+		return;
+	}
+
+	if (data->comparison &&
+	    data->comparison == filter_comparison(data->comparison, op))
+		istrue = 1;
+
+	if (data->comparison &&
+	    data->comparison == filter_comparison(data->comparison, negate_comparison(op)))
+		isfalse = 1;
+
+	if (istrue)
+		add_ptr_list(true_stack, sm);
+	if (isfalse)
+		add_ptr_list(false_stack, sm);
+
+	if (sm->merged) {
+		filter_by_sm(sm->left, op, true_stack, false_stack);
+		filter_by_sm(sm->right, op, true_stack, false_stack);
+	}
+}
+
+struct sm_state *comparison_implication_hook(struct expression *expr,
+				struct state_list **true_stack,
+				struct state_list **false_stack)
+{
+	struct sm_state *sm;
+	char *left, *right;
+	int op;
+	static char buf[256];
+
+	if (expr->type != EXPR_COMPARE)
+		return NULL;
+
+	op = expr->op;
+
+	left = expr_to_var(expr->left);
+	right = expr_to_var(expr->right);
+	if (!left || !right) {
+		free_string(left);
+		free_string(right);
+		return NULL;
+	}
+
+	if (strcmp(left, right) > 0) {
+		char *tmp = left;
+
+		left = right;
+		right = tmp;
+		op = flip_comparison(op);
+	}
+
+	snprintf(buf, sizeof(buf), "%s vs %s", left, right);
+	sm = get_sm_state(compare_id, buf, NULL);
+	if (!sm)
+		return NULL;
+	if (!sm->merged)
+		return NULL;
+
+	filter_by_sm(sm, op, true_stack, false_stack);
+	if (!*true_stack && !*false_stack)
+		return NULL;
+
+	if (option_debug)
+		sm_msg("implications from comparison: (%s)", show_sm(sm));
+
+	return sm;
+}
--- /dev/null	Fri Dec 21 15:00:16 2018
+++ new/usr/src/tools/smatch/src/smatch_conditions.c	Fri Dec 21 15:00:16 2018
@@ -0,0 +1,752 @@
+/*
+ * Copyright (C) 2006,2008 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * The simplest type of condition is
+ * if (a) { ...
+ *
+ * The next simplest kind of conditions is
+ * if (a && b) { c;
+ * In that case 'a' is true when we get to 'b' and both are true
+ * when we get to c.
+ *
+ * Or's are a little more complicated.
+ * if (a || b) { c;
+ * We know 'a' is not true when we get to 'b' but it may be true
+ * when we get to c.
+ *
+ * If we mix and's and or's that's even more complicated.
+ * if (a && b && c || a && d) { d ;
+ * 'a' is true when we evaluate 'b', and 'd'.
+ * 'b' is true when we evaluate 'c' but otherwise we don't.
+ *
+ * The other thing that complicates matters is if we negate
+ * some if conditions.
+ * if (!a) { ...
+ * Smatch has passes the un-negated version to the client and flip
+ * the true and false values internally.  This makes it easier
+ * to write checks.
+ *
+ * And negations can be part of a compound.
+ * if (a && !(b || c)) { d;
+ * In that situation we multiply the negative through to simplify
+ * stuff so that we can remove the parens like this:
+ * if (a && !b && !c) { d;
+ *
+ * One other thing is that:
+ * if ((a) != 0){ ...
+ * that's basically the same as testing for just 'a' and we simplify
+ * comparisons with zero before passing it to the script.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+#include "smatch_expression_stacks.h"
+
+extern int __expr_stmt_count;
+
+struct expression_list *big_condition_stack;
+
+static void split_conditions(struct expression *expr);
+
+static int is_logical_and(struct expression *expr)
+{
+	if (expr->op == SPECIAL_LOGICAL_AND)
+		return 1;
+	return 0;
+}
+
+static int handle_zero_comparisons(struct expression *expr)
+{
+	struct expression *tmp = NULL;
+	struct expression *zero;
+
+	// if left is zero or right is zero
+	if (is_zero(expr->left)) {
+		zero = strip_expr(expr->left);
+		if (zero->type != EXPR_VALUE)
+			__split_expr(expr->left);
+		tmp = expr->right;
+	} else if (is_zero(expr->right)) {
+		zero = strip_expr(expr->left);
+		if (zero->type != EXPR_VALUE)
+			__split_expr(expr->right);
+		tmp = expr->left;
+	} else {
+		return 0;
+	}
+
+	// "if (foo != 0)" is the same as "if (foo)"
+	if (expr->op == SPECIAL_NOTEQUAL) {
+		split_conditions(tmp);
+		return 1;
+	}
+
+	// "if (foo == 0)" is the same as "if (!foo)"
+	if (expr->op == SPECIAL_EQUAL) {
+		split_conditions(tmp);
+		__negate_cond_stacks();
+		return 1;
+	}
+
+	return 0;
+}
+
+/*
+ * This function is for handling calls to likely/unlikely
+ */
+
+static int ignore_builtin_expect(struct expression *expr)
+{
+	if (sym_name_is("__builtin_expect", expr->fn)) {
+		split_conditions(first_ptr_list((struct ptr_list *) expr->args));
+		return 1;
+	}
+	return 0;
+}
+
+/*
+ * handle_compound_stmt() is for: foo = ({blah; blah; blah; 1})
+ */
+
+static void handle_compound_stmt(struct statement *stmt)
+{
+	struct expression *expr = NULL;
+	struct statement *last;
+	struct statement *s;
+
+	last = last_ptr_list((struct ptr_list *)stmt->stmts);
+	if (last->type == STMT_LABEL) {
+		if (last->label_statement &&
+		    last->label_statement->type == STMT_EXPRESSION)
+			expr = last->label_statement->expression;
+		else
+			last = NULL;
+	} else if (last->type != STMT_EXPRESSION) {
+		last = NULL;
+	} else {
+		expr = last->expression;
+	}
+
+	FOR_EACH_PTR(stmt->stmts, s) {
+		if (s != last)
+			__split_stmt(s);
+	} END_FOR_EACH_PTR(s);
+	if (last && last->type == STMT_LABEL)
+		__split_label_stmt(last);
+	split_conditions(expr);
+}
+
+static int handle_preop(struct expression *expr)
+{
+	struct statement *stmt;
+
+	if (expr->op == '!') {
+		split_conditions(expr->unop);
+		__negate_cond_stacks();
+		return 1;
+	}
+	stmt = get_expression_statement(expr);
+	if (stmt) {
+		handle_compound_stmt(stmt);
+		return 1;
+	}
+	return 0;
+}
+
+static void handle_logical(struct expression *expr)
+{
+	/*
+	 * If we come to an "and" expr then:
+	 * We split the left side.
+	 * We keep all the current states.
+	 * We split the right side.
+	 * We keep all the states from both true sides.
+	 *
+	 * If it's an "or" expr then:
+	 * We save the current slist.
+	 * We split the left side.
+	 * We use the false states for the right side.
+	 * We split the right side.
+	 * We save all the states that are the same on both sides.
+	 */
+
+	split_conditions(expr->left);
+
+	if (is_logical_and(expr))
+		__use_cond_true_states();
+	else
+		__use_cond_false_states();
+
+	__push_cond_stacks();
+
+	__save_pre_cond_states();
+	split_conditions(expr->right);
+	__discard_pre_cond_states();
+
+	if (is_logical_and(expr))
+		__and_cond_states();
+	else
+		__or_cond_states();
+
+	__use_cond_true_states();
+}
+
+static struct stree *combine_strees(struct stree *orig, struct stree *fake, struct stree *new)
+{
+	struct stree *ret = NULL;
+
+	overwrite_stree(orig, &ret);
+	overwrite_stree(fake, &ret);
+	overwrite_stree(new, &ret);
+	free_stree(&new);
+
+	return ret;
+}
+
+/*
+ * handle_select()
+ * if ((aaa()?bbb():ccc())) { ...
+ *
+ * This is almost the same as:
+ * if ((aaa() && bbb()) || (!aaa() && ccc())) { ...
+ *
+ * It's a bit complicated because we shouldn't pass aaa()
+ * to the clients more than once.
+ */
+
+static void handle_select(struct expression *expr)
+{
+	struct stree *a_T = NULL;
+	struct stree *a_F = NULL;
+	struct stree *a_T_b_T = NULL;
+	struct stree *a_T_b_F = NULL;
+	struct stree *a_T_b_fake = NULL;
+	struct stree *a_F_c_T = NULL;
+	struct stree *a_F_c_F = NULL;
+	struct stree *a_F_c_fake = NULL;
+	struct stree *tmp;
+	struct sm_state *sm;
+
+	/*
+	 * Imagine we have this:  if (a ? b : c) { ...
+	 *
+	 * The condition is true if "a" is true and "b" is true or
+	 * "a" is false and "c" is true.  It's false if "a" is true
+	 * and "b" is false or "a" is false and "c" is false.
+	 *
+	 * The variable name "a_T_b_T" stands for "a true b true" etc.
+	 *
+	 * But if we know "b" is true then we can simpilify things.
+	 * The condition is true if "a" is true or if "a" is false and
+	 * "c" is true.  The only way the condition can be false is if
+	 * "a" is false and "c" is false.
+	 *
+	 * The remaining thing is the "a_T_b_fake".  When we simplify
+	 * the equations we have to take into consideration that other
+	 * states may have changed that don't play into the true false
+	 * equation.  Take the following example:
+	 * if ({
+	 *         (flags) = __raw_local_irq_save();
+	 *         _spin_trylock(lock) ? 1 :
+	 *                 ({ raw_local_irq_restore(flags);  0; });
+	 *    })
+	 * Smatch has to record that the irq flags were restored on the
+	 * false path.
+	 *
+	 */
+
+	__save_pre_cond_states();
+
+	split_conditions(expr->conditional);
+
+	a_T = __copy_cond_true_states();
+	a_F = __copy_cond_false_states();
+
+	__use_cond_true_states();
+
+	__push_cond_stacks();
+	__push_fake_cur_stree();
+	split_conditions(expr->cond_true);
+	__process_post_op_stack();
+	a_T_b_fake = __pop_fake_cur_stree();
+	a_T_b_T = combine_strees(a_T, a_T_b_fake, __pop_cond_true_stack());
+	a_T_b_F = combine_strees(a_T, a_T_b_fake, __pop_cond_false_stack());
+
+	__use_cond_false_states();
+
+	__push_cond_stacks();
+	__push_fake_cur_stree();
+	split_conditions(expr->cond_false);
+	a_F_c_fake = __pop_fake_cur_stree();
+	a_F_c_T = combine_strees(a_F, a_F_c_fake, __pop_cond_true_stack());
+	a_F_c_F = combine_strees(a_F, a_F_c_fake, __pop_cond_false_stack());
+
+	/* We have to restore the pre condition states so that
+	   implied_condition_true() will use the right cur_stree */
+	__use_pre_cond_states();
+
+	if (implied_condition_true(expr->cond_true)) {
+		free_stree(&a_T_b_T);
+		free_stree(&a_T_b_F);
+		a_T_b_T = clone_stree(a_T);
+		overwrite_stree(a_T_b_fake, &a_T_b_T);
+	}
+	if (implied_condition_false(expr->cond_true)) {
+		free_stree(&a_T_b_T);
+		free_stree(&a_T_b_F);
+		a_T_b_F = clone_stree(a_T);
+		overwrite_stree(a_T_b_fake, &a_T_b_F);
+	}
+	if (implied_condition_true(expr->cond_false)) {
+		free_stree(&a_F_c_T);
+		free_stree(&a_F_c_F);
+		a_F_c_T = clone_stree(a_F);
+		overwrite_stree(a_F_c_fake, &a_F_c_T);
+	}
+	if (implied_condition_false(expr->cond_false)) {
+		free_stree(&a_F_c_T);
+		free_stree(&a_F_c_F);
+		a_F_c_F = clone_stree(a_F);
+		overwrite_stree(a_F_c_fake, &a_F_c_F);
+	}
+
+	merge_stree(&a_T_b_T, a_F_c_T);
+	merge_stree(&a_T_b_F, a_F_c_F);
+
+	tmp = __pop_cond_true_stack();
+	free_stree(&tmp);
+	tmp = __pop_cond_false_stack();
+	free_stree(&tmp);
+
+	__push_cond_stacks();
+	FOR_EACH_SM(a_T_b_T, sm) {
+		__set_true_false_sm(sm, NULL);
+	} END_FOR_EACH_SM(sm);
+	FOR_EACH_SM(a_T_b_F, sm) {
+		__set_true_false_sm(NULL, sm);
+	} END_FOR_EACH_SM(sm);
+	__free_set_states();
+
+	free_stree(&a_T_b_fake);
+	free_stree(&a_F_c_fake);
+	free_stree(&a_F_c_T);
+	free_stree(&a_F_c_F);
+	free_stree(&a_T_b_T);
+	free_stree(&a_T_b_F);
+	free_stree(&a_T);
+	free_stree(&a_F);
+}
+
+static void handle_comma(struct expression *expr)
+{
+	__split_expr(expr->left);
+	split_conditions(expr->right);
+}
+
+static int make_op_unsigned(int op)
+{
+	switch (op) {
+	case '<':
+		return SPECIAL_UNSIGNED_LT;
+	case SPECIAL_LTE:
+		return SPECIAL_UNSIGNED_LTE;
+	case '>':
+		return SPECIAL_UNSIGNED_GT;
+	case SPECIAL_GTE:
+		return SPECIAL_UNSIGNED_GTE;
+	}
+	return op;
+}
+
+static void hackup_unsigned_compares(struct expression *expr)
+{
+	if (expr->type != EXPR_COMPARE)
+		return;
+
+	if (type_unsigned(get_type(expr)))
+		expr->op = make_op_unsigned(expr->op);
+}
+
+static void do_condition(struct expression *expr)
+{
+	__fold_in_set_states();
+	__push_fake_cur_stree();
+	__pass_to_client(expr, CONDITION_HOOK);
+	__fold_in_set_states();
+}
+
+static void split_conditions(struct expression *expr)
+{
+	if (option_debug) {
+		char *cond = expr_to_str(expr);
+
+		sm_msg("%d in split_conditions (%s)", get_lineno(), cond);
+		free_string(cond);
+	}
+
+	expr = strip_expr_set_parent(expr);
+	if (!expr) {
+		__fold_in_set_states();
+		return;
+	}
+
+	/*
+	 * On fast paths (and also I guess some people think it's cool) people
+	 * sometimes use | instead of ||.  It works the same basically except
+	 * that || implies a memory barrier between conditions.  The easiest way
+	 * to handle it is by pretending that | also has a barrier and re-using
+	 * all the normal condition code.  This potentially hides some bugs, but
+	 * people who write code like this should just be careful or they
+	 * deserve bugs.
+	 *
+	 * We could potentially treat boolean bitwise & this way but that seems
+	 * too complicated to deal with.
+	 */
+	if (expr->type == EXPR_BINOP && expr->op == '|') {
+		handle_logical(expr);
+		return;
+	}
+
+	switch (expr->type) {
+	case EXPR_LOGICAL:
+		expr_set_parent_expr(expr->left, expr);
+		expr_set_parent_expr(expr->right, expr);
+		__pass_to_client(expr, LOGIC_HOOK);
+		handle_logical(expr);
+		return;
+	case EXPR_COMPARE:
+		expr_set_parent_expr(expr->left, expr);
+		expr_set_parent_expr(expr->right, expr);
+		hackup_unsigned_compares(expr);
+		if (handle_zero_comparisons(expr))
+			return;
+		break;
+	case EXPR_CALL:
+		if (ignore_builtin_expect(expr))
+			return;
+		break;
+	case EXPR_PREOP:
+		expr_set_parent_expr(expr->unop, expr);
+		if (handle_preop(expr))
+			return;
+		break;
+	case EXPR_CONDITIONAL:
+	case EXPR_SELECT:
+		expr_set_parent_expr(expr->conditional, expr);
+		expr_set_parent_expr(expr->cond_true, expr);
+		expr_set_parent_expr(expr->cond_false, expr);
+		handle_select(expr);
+		return;
+	case EXPR_COMMA:
+		expr_set_parent_expr(expr->left, expr);
+		expr_set_parent_expr(expr->right, expr);
+		handle_comma(expr);
+		return;
+	}
+
+	/* fixme: this should be in smatch_flow.c
+	   but because of the funny stuff we do with conditions
+	   it's awkward to put it there.  We would need to
+	   call CONDITION_HOOK in smatch_flow as well.
+	*/
+	push_expression(&big_expression_stack, expr);
+	push_expression(&big_condition_stack, expr);
+
+	if (expr->type == EXPR_COMPARE) {
+		if (expr->left->type != EXPR_POSTOP)
+			__split_expr(expr->left);
+		if (expr->right->type != EXPR_POSTOP)
+			__split_expr(expr->right);
+	} else if (expr->type != EXPR_POSTOP) {
+		__split_expr(expr);
+	}
+	do_condition(expr);
+	if (expr->type == EXPR_COMPARE) {
+		if (expr->left->type == EXPR_POSTOP)
+			__split_expr(expr->left);
+		if (expr->right->type == EXPR_POSTOP)
+			__split_expr(expr->right);
+	} else if (expr->type == EXPR_POSTOP) {
+		__split_expr(expr);
+	}
+	__push_fake_cur_stree();
+	__process_post_op_stack();
+	__fold_in_set_states();
+	pop_expression(&big_condition_stack);
+	pop_expression(&big_expression_stack);
+}
+
+static int inside_condition;
+void __split_whole_condition(struct expression *expr)
+{
+	sm_debug("%d in __split_whole_condition\n", get_lineno());
+	inside_condition++;
+	__save_pre_cond_states();
+	__push_cond_stacks();
+	/* it's a hack, but it's sometimes handy to have this stuff
+	   on the big_expression_stack.  */
+	push_expression(&big_expression_stack, expr);
+	split_conditions(expr);
+	__use_cond_states();
+	__pass_to_client(expr, WHOLE_CONDITION_HOOK);
+	pop_expression(&big_expression_stack);
+	inside_condition--;
+	sm_debug("%d done __split_whole_condition\n", get_lineno());
+}
+
+void __handle_logic(struct expression *expr)
+{
+	sm_debug("%d in __handle_logic\n", get_lineno());
+	inside_condition++;
+	__save_pre_cond_states();
+	__push_cond_stacks();
+	/* it's a hack, but it's sometimes handy to have this stuff
+	   on the big_expression_stack.  */
+	push_expression(&big_expression_stack, expr);
+	if (expr)
+		split_conditions(expr);
+	__use_cond_states();
+	__pass_to_client(expr, WHOLE_CONDITION_HOOK);
+	pop_expression(&big_expression_stack);
+	__merge_false_states();
+	inside_condition--;
+	sm_debug("%d done __handle_logic\n", get_lineno());
+}
+
+int is_condition(struct expression *expr)
+{
+
+	expr = strip_expr(expr);
+	if (!expr)
+		return 0;
+
+	switch (expr->type) {
+	case EXPR_LOGICAL:
+	case EXPR_COMPARE:
+		return 1;
+	case EXPR_PREOP:
+		if (expr->op == '!')
+			return 1;
+	}
+	return 0;
+}
+
+int __handle_condition_assigns(struct expression *expr)
+{
+	struct expression *right;
+	struct stree *true_stree, *false_stree, *fake_stree;
+	struct sm_state *sm;
+
+	if (expr->op != '=')
+		return 0;
+	right = strip_expr(expr->right);
+	if (!is_condition(expr->right))
+		return 0;
+
+	sm_debug("%d in __handle_condition_assigns\n", get_lineno());
+	inside_condition++;
+	__save_pre_cond_states();
+	__push_cond_stacks();
+	/* it's a hack, but it's sometimes handy to have this stuff
+	   on the big_expression_stack.  */
+	push_expression(&big_expression_stack, right);
+	split_conditions(right);
+	true_stree = __get_true_states();
+	false_stree = __get_false_states();
+	__use_cond_states();
+	__push_fake_cur_stree();
+	set_extra_expr_mod(expr->left, alloc_estate_sval(sval_type_val(get_type(expr->left), 1)));
+	__pass_to_client(right, WHOLE_CONDITION_HOOK);
+
+	fake_stree = __pop_fake_cur_stree();
+	FOR_EACH_SM(fake_stree, sm) {
+		overwrite_sm_state_stree(&true_stree, sm);
+	} END_FOR_EACH_SM(sm);
+	free_stree(&fake_stree);
+
+	pop_expression(&big_expression_stack);
+	inside_condition--;
+
+	__push_true_states();
+
+	__use_false_states();
+	__push_fake_cur_stree();
+	set_extra_expr_mod(expr->left, alloc_estate_sval(sval_type_val(get_type(expr->left), 0)));
+
+	fake_stree = __pop_fake_cur_stree();
+	FOR_EACH_SM(fake_stree, sm) {
+		overwrite_sm_state_stree(&false_stree, sm);
+	} END_FOR_EACH_SM(sm);
+	free_stree(&fake_stree);
+
+	__merge_true_states();
+	merge_fake_stree(&true_stree, false_stree);
+	free_stree(&false_stree);
+	FOR_EACH_SM(true_stree, sm) {
+		__set_sm(sm);
+	} END_FOR_EACH_SM(sm);
+
+	__pass_to_client(expr, ASSIGNMENT_HOOK);
+	sm_debug("%d done __handle_condition_assigns\n", get_lineno());
+	return 1;
+}
+
+static int is_select_assign(struct expression *expr)
+{
+	struct expression *right;
+
+	if (expr->op != '=')
+		return 0;
+	right = strip_expr(expr->right);
+	if (right->type == EXPR_CONDITIONAL)
+		return 1;
+	if (right->type == EXPR_SELECT)
+		return 1;
+	return 0;
+}
+
+int __handle_select_assigns(struct expression *expr)
+{
+	struct expression *right;
+	struct stree *final_states = NULL;
+	struct sm_state *sm;
+	int is_true;
+	int is_false;
+
+	if (!is_select_assign(expr))
+		return 0;
+	sm_debug("%d in __handle_ternary_assigns\n", get_lineno());
+	right = strip_expr(expr->right);
+	__pass_to_client(right, SELECT_HOOK);
+
+	is_true = implied_condition_true(right->conditional);
+	is_false = implied_condition_false(right->conditional);
+
+	/* hah hah.  the ultra fake out */
+	__save_pre_cond_states();
+	__split_whole_condition(right->conditional);
+
+	if (!is_false) {
+		struct expression *fake_expr;
+
+		if (right->cond_true)
+			fake_expr = assign_expression(expr->left, expr->op, right->cond_true);
+		else
+			fake_expr = assign_expression(expr->left, expr->op, right->conditional);
+		__split_expr(fake_expr);
+		final_states = clone_stree(__get_cur_stree());
+	}
+
+	__use_false_states();
+	if (!is_true) {
+		struct expression *fake_expr;
+
+		fake_expr = assign_expression(expr->left, expr->op, right->cond_false);
+		__split_expr(fake_expr);
+		merge_stree(&final_states, __get_cur_stree());
+	}
+
+	__use_pre_cond_states();
+
+	FOR_EACH_SM(final_states, sm) {
+		__set_sm(sm);
+	} END_FOR_EACH_SM(sm);
+
+	free_stree(&final_states);
+
+	sm_debug("%d done __handle_ternary_assigns\n", get_lineno());
+
+	return 1;
+}
+
+static struct statement *split_then_return_last(struct statement *stmt)
+{
+	struct statement *tmp;
+	struct statement *last_stmt;
+
+	last_stmt = last_ptr_list((struct ptr_list *)stmt->stmts);
+	if (!last_stmt)
+		return NULL;
+
+	__push_scope_hooks();
+	FOR_EACH_PTR(stmt->stmts, tmp) {
+		if (tmp == last_stmt) {
+			if (tmp->type == STMT_LABEL) {
+				__split_label_stmt(tmp);
+				return tmp->label_statement;
+			}
+			return last_stmt;
+		}
+		__split_stmt(tmp);
+	} END_FOR_EACH_PTR(tmp);
+	return NULL;
+}
+
+int __handle_expr_statement_assigns(struct expression *expr)
+{
+	struct expression *right;
+	struct statement *stmt;
+
+	right = expr->right;
+	if (right->type == EXPR_PREOP && right->op == '(')
+		right = right->unop;
+	if (right->type != EXPR_STATEMENT)
+		return 0;
+
+	__expr_stmt_count++;
+	stmt = right->statement;
+	if (stmt->type == STMT_COMPOUND) {
+		struct statement *last_stmt;
+		struct expression *fake_assign;
+		struct expression fake_expr_stmt = { .smatch_flags = Fake, };
+
+		last_stmt = split_then_return_last(stmt);
+		if (!last_stmt) {
+			__expr_stmt_count--;
+			return 0;
+		}
+
+		fake_expr_stmt.pos = last_stmt->pos;
+		fake_expr_stmt.type = EXPR_STATEMENT;
+		fake_expr_stmt.op = 0;
+		fake_expr_stmt.statement = last_stmt;
+
+		fake_assign = assign_expression(expr->left, expr->op, &fake_expr_stmt);
+		__split_expr(fake_assign);
+
+		__pass_to_client(stmt, STMT_HOOK_AFTER);
+		__call_scope_hooks();
+	} else if (stmt->type == STMT_EXPRESSION) {
+		struct expression *fake_assign;
+
+		fake_assign = assign_expression(expr->left, expr->op, stmt->expression);
+		__split_expr(fake_assign);
+
+	} else {
+		__split_stmt(stmt);
+	}
+	__expr_stmt_count--;
+	return 1;
+}
+
+int in_condition(void)
+{
+	return inside_condition;
+}
--- /dev/null	Fri Dec 21 15:00:16 2018
+++ new/usr/src/tools/smatch/src/smatch_constraints.c	Fri Dec 21 15:00:16 2018
@@ -0,0 +1,541 @@
+/*
+ * Copyright (C) 2017 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Basically I see constraints as a way of saying "x <= some_limit".  The
+ * problem is that smatch_capped is not granullar enough.
+ *
+ * This is mostly for finding out of bounds errors.  So there are different
+ * types of constraints.  Quite often we have "foo->xxx[i] = 42;" and we want
+ * to verify that "i" is less than foo->size.
+ *
+ * My idea was that we could automatically figure out these constraints.  And we
+ * could load them in the DB so that they are the same every time.  As in a
+ * constraint could be "< (struct whatever)->size" and give that in ID that
+ * would be constant until you completely wiped the DB.  So when you do a normal
+ * DB rebuild then the first thing it will do is preserve all the constraints.
+ * I guess the reason to do it this way is to save space...  I sometimes suspect
+ * that worrying about saving space is premature optimization.
+ *
+ * The other thing that I want to do a little bit different here is how I merge
+ * constraints.  If a constraint is true on both sides, then that's normal.  If
+ * we merge constraint 23 and 67 then we get constraint 23|67.  If we merge 23
+ * with &undefined then we get &undefined.  We can also have two constraints
+ * that are both true so we could have (45&23)|12 which means either both 45 and
+ * 23 are true or 12 is true.
+ *
+ */
+
+
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+ALLOCATOR(constraint, "constraints");
+
+static void add_constraint(struct constraint_list **list, int op, int constraint)
+{
+	struct constraint *tmp, *new;
+
+	FOR_EACH_PTR(*list, tmp) {
+		if (tmp->id < constraint)
+			continue;
+		if (tmp->id == constraint) {
+			if (tmp->op == '<')
+				return;
+			if (op == SPECIAL_LTE)
+				return;
+
+			new = __alloc_constraint(0);
+			new->op = op;
+			new->id = constraint;
+			REPLACE_CURRENT_PTR(tmp, new);
+			return;
+		}
+
+		new = __alloc_constraint(0);
+		new->op = op;
+		new->id = constraint;
+		INSERT_CURRENT(new, tmp);
+		return;
+	} END_FOR_EACH_PTR(tmp);
+
+	new = __alloc_constraint(0);
+	new->op = op;
+	new->id = constraint;
+	add_ptr_list(list, new);
+}
+
+static struct constraint_list *merge_constraint_lists(struct constraint_list *one, struct constraint_list *two)
+{
+	struct constraint_list *ret = NULL;
+	struct constraint *tmp;
+
+	// FIXME: not || but &&
+	FOR_EACH_PTR(one, tmp) {
+		add_constraint(&ret, tmp->op, tmp->id);
+	} END_FOR_EACH_PTR(tmp);
+
+	FOR_EACH_PTR(two, tmp) {
+		add_constraint(&ret, tmp->op, tmp->id);
+	} END_FOR_EACH_PTR(tmp);
+
+	return ret;
+}
+
+static struct constraint_list *clone_constraint_list(struct constraint_list *list)
+{
+	struct constraint_list *ret = NULL;
+	struct constraint *tmp;
+
+	FOR_EACH_PTR(list, tmp) {
+		add_constraint(&ret, tmp->op, tmp->id);
+	} END_FOR_EACH_PTR(tmp);
+
+	return ret;
+}
+
+static struct smatch_state *alloc_constraint_state(struct constraint_list *list)
+{
+	struct smatch_state *state;
+	struct constraint *con;
+	static char buf[256];
+	int cnt = 0;
+
+	FOR_EACH_PTR(list, con) {
+		if (cnt != 0)
+			cnt += snprintf(buf + cnt, sizeof(buf) - cnt, ", ");
+		cnt += snprintf(buf + cnt, sizeof(buf) - cnt, "%s%d",
+				show_special(con->op), con->id);
+	} END_FOR_EACH_PTR(con);
+
+	state = __alloc_smatch_state(0);
+	state->name = alloc_string(buf);
+	state->data = list;
+	return state;
+}
+
+static struct smatch_state *merge_func(struct smatch_state *s1, struct smatch_state *s2)
+{
+	struct constraint_list *list;
+
+	// FIXME:  use the dead code below instead
+	if (strcmp(s1->name, s2->name) == 0)
+		return s1;
+	return &merged;
+
+	list = merge_constraint_lists(s1->data, s2->data);
+	return alloc_constraint_state(list);
+}
+
+static int negate_gt(int op)
+{
+	switch (op) {
+	case '>':
+	case SPECIAL_UNSIGNED_GT:
+	case SPECIAL_GTE:
+	case SPECIAL_UNSIGNED_GTE:
+		return negate_comparison(op);
+	}
+	return op;
+}
+
+static char *get_func_constraint(struct expression *expr)
+{
+	char buf[256];
+	char *name;
+
+	if (is_fake_call(expr))
+		return NULL;
+	name = expr_to_str(expr->fn);
+	if (!name)
+		return NULL;
+	snprintf(buf, sizeof(buf), "%s()", name);
+	free_string(name);
+	return alloc_string(buf);
+}
+
+static char *get_toplevel_name(struct expression *expr)
+{
+	struct symbol *sym;
+	char buf[256];
+
+	expr = strip_expr(expr);
+	if (expr->type != EXPR_SYMBOL || !expr->symbol || !expr->symbol->ident)
+		return NULL;
+
+	sym = expr->symbol;
+	if (!(sym->ctype.modifiers & MOD_TOPLEVEL))
+		return NULL;
+
+	if (sym->ctype.modifiers & MOD_STATIC)
+		snprintf(buf, sizeof(buf), "%s %s", get_base_file(), sym->ident->name);
+	else
+		snprintf(buf, sizeof(buf), "extern %s", sym->ident->name);
+
+	return alloc_string(buf);
+}
+
+char *get_constraint_str(struct expression *expr)
+{
+	char *name;
+
+	if (!expr)
+		return NULL;
+	if (expr->type == EXPR_CALL)
+		return get_func_constraint(expr);
+	if (expr->type == EXPR_BINOP)
+		return expr_to_str(expr);
+	name = get_toplevel_name(expr);
+	if (name)
+		return name;
+	return get_member_name(expr);
+}
+
+static int save_int_callback(void *_p, int argc, char **argv, char **azColName)
+{
+	int *p = _p;
+
+	*p = atoi(argv[0]);
+	return 0;
+}
+
+static int constraint_str_to_id(const char *str)
+{
+	int id = -1;
+
+	run_sql(save_int_callback, &id,
+		"select id from constraints where str = '%q'", str);
+
+	return id;
+}
+
+static int save_constraint_str(void *_str, int argc, char **argv, char **azColName)
+{
+	char **str = _str;
+
+	*str = alloc_string(argv[0]);
+	return 0;
+}
+
+static char *constraint_id_to_str(int id)
+{
+	char *str = NULL;
+
+	run_sql(save_constraint_str, &str,
+		"select str from constraints where id = '%d'", id);
+
+	return str;
+}
+
+static int save_op_callback(void *_p, int argc, char **argv, char **azColName)
+{
+	int *p = _p;
+
+	if (argv[0][0] == '<' && argv[0][1] == '=')
+		*p = SPECIAL_LTE;
+	else
+		*p = '<';
+	return 0;
+}
+
+static int save_str_callback(void *_p, int argc, char **argv, char **azColName)
+{
+	char **p = _p;
+
+	if (!*p) {
+		*p = alloc_string(argv[0]);
+	} else {
+		char buf[256];
+
+		snprintf(buf, sizeof(buf), "%s, %s", *p, argv[0]);
+		*p = alloc_string(buf);
+	}
+	return 0;
+}
+
+char *get_required_constraint(const char *data_str)
+{
+	char *required = NULL;
+
+	run_sql(save_str_callback, &required,
+		"select bound from constraints_required where data = '%q'", data_str);
+
+	return required;
+}
+
+static int get_required_op(char *data_str, char *con_str)
+{
+	int op = 0;
+
+	run_sql(save_op_callback, &op,
+		"select op from constraints_required where data = '%q' and bound = '%q'", data_str, con_str);
+
+	return op;
+}
+
+char *unmet_constraint(struct expression *data, struct expression *offset)
+{
+	struct smatch_state *state;
+	struct constraint_list *list;
+	struct constraint *con;
+	char *data_str;
+	char *required;
+	int req_op;
+
+	data_str = get_constraint_str(data);
+	if (!data_str)
+		return NULL;
+
+	required = get_required_constraint(data_str);
+	if (!required)
+		goto free_data;
+
+	state = get_state_expr(my_id, offset);
+	if (!state)
+		goto free_data;
+	list = state->data;
+
+	/* check the list of bounds on our index against the list that work */
+	FOR_EACH_PTR(list, con) {
+		char *con_str;
+
+		con_str = constraint_id_to_str(con->id);
+		if (!con_str) {
+			sm_msg("constraint %d not found", con->id);
+			continue;
+		}
+
+		req_op = get_required_op(data_str, con_str);
+		free_string(con_str);
+		if (!req_op)
+			continue;
+		if (con->op == '<' || con->op == req_op) {
+			free_string(required);
+			required = NULL;
+			goto free_data;
+		}
+	} END_FOR_EACH_PTR(con);
+
+free_data:
+	free_string(data_str);
+	return required;
+}
+
+struct string_list *saved_constraints;
+static void save_new_constraint(const char *con)
+{
+	if (list_has_string(saved_constraints, con))
+		return;
+	insert_string(&saved_constraints, con);
+	sql_save_constraint(con);
+}
+
+static void handle_comparison(struct expression *left, int op, struct expression *right)
+{
+	struct constraint_list *constraints;
+	struct smatch_state *state;
+	char *constraint;
+	int constraint_id;
+	int orig_op = op;
+	sval_t sval;
+
+	/* known values are handled in smatch extra */
+	if (get_value(left, &sval) || get_value(right, &sval))
+		return;
+
+	if (local_debug)
+		sm_msg("COMPARE: %s %s %s", expr_to_str(left), show_special(op), expr_to_str(right));
+
+	constraint = get_constraint_str(right);
+	if (!constraint)
+		return;
+	if (local_debug)
+		sm_msg("EXPR: %s CONSTRAINT %s", expr_to_str(right), constraint);
+	constraint_id = constraint_str_to_id(constraint);
+	if (local_debug)
+		sm_msg("CONSTRAINT ID %d", constraint_id);
+	if (constraint_id < 0)
+		save_new_constraint(constraint);
+	free_string(constraint);
+	if (constraint_id < 0)
+		return;
+
+	constraints = get_constraints(left);
+	constraints = clone_constraint_list(constraints);
+	op = negate_gt(orig_op);
+	add_constraint(&constraints, remove_unsigned_from_comparison(op), constraint_id);
+	state = alloc_constraint_state(constraints);
+
+	if (op == orig_op) {
+		if (local_debug)
+			sm_msg("SETTING %s true %s", expr_to_str(left), state->name);
+		set_true_false_states_expr(my_id, left,	state, NULL);
+	} else {
+		if (local_debug)
+			sm_msg("SETTING %s false %s", expr_to_str(left), state->name);
+
+		set_true_false_states_expr(my_id, left, NULL, state);
+	}
+}
+
+static void match_condition(struct expression *expr)
+{
+	if (expr->type != EXPR_COMPARE)
+		return;
+
+	if (expr->op == SPECIAL_EQUAL ||
+	    expr->op == SPECIAL_NOTEQUAL)
+		return;
+
+	handle_comparison(expr->left, expr->op, expr->right);
+	handle_comparison(expr->right, flip_comparison(expr->op), expr->left);
+}
+
+struct constraint_list *get_constraints(struct expression *expr)
+{
+	struct smatch_state *state;
+
+	state = get_state_expr(my_id, expr);
+	if (!state)
+		return NULL;
+	return state->data;
+}
+
+static void match_caller_info(struct expression *expr)
+{
+	struct expression *tmp;
+	struct smatch_state *state;
+	int i;
+
+	i = -1;
+	FOR_EACH_PTR(expr->args, tmp) {
+		i++;
+		state = get_state_expr(my_id, tmp);
+		if (!state || state == &merged || state == &undefined)
+			continue;
+		sql_insert_caller_info(expr, CONSTRAINT, i, "$", state->name);
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void struct_member_callback(struct expression *call, int param, char *printed_name, struct sm_state *sm)
+{
+	if (sm->state == &merged || sm->state == &undefined)
+		return;
+	sql_insert_caller_info(call, CONSTRAINT, param, printed_name, sm->state->name);
+}
+
+static struct smatch_state *constraint_str_to_state(char *value)
+{
+	struct constraint_list *list = NULL;
+	char *p = value;
+	int op;
+	long long id;
+
+	while (true) {
+		op = '<';
+		if (*p != '<')
+			return &undefined;
+		p++;
+		if (*p == '=') {
+			op = SPECIAL_LTE;
+			p++;
+		}
+		id = strtoll(p, &p, 10);
+		add_constraint(&list, op, id);
+		if (*p != ',')
+			break;
+		p++;
+		if (*p != ' ')
+			return &undefined;
+	}
+
+	return alloc_constraint_state(list);
+}
+
+static void set_param_constrained(const char *name, struct symbol *sym, char *key, char *value)
+{
+	char fullname[256];
+
+	if (strcmp(key, "*$") == 0)
+		snprintf(fullname, sizeof(fullname), "*%s", name);
+	else if (strncmp(key, "$", 1) == 0)
+		snprintf(fullname, 256, "%s%s", name, key + 1);
+	else
+		return;
+
+	set_state(my_id, name, sym, constraint_str_to_state(value));
+}
+
+static void print_return_implies_constrained(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct smatch_state *orig;
+	struct sm_state *sm;
+	const char *param_name;
+	int param;
+
+	FOR_EACH_MY_SM(my_id, __get_cur_stree(), sm) {
+		if (sm->state == &merged || sm->state == &undefined)
+			continue;
+
+		param = get_param_num_from_sym(sm->sym);
+		if (param < 0)
+			continue;
+
+		orig = get_state_stree(get_start_states(), my_id, sm->name, sm->sym);
+		if (orig && strcmp(sm->state->name, orig->name) == 0)
+			continue;
+
+		param_name = get_param_name(sm);
+		if (!param_name)
+			continue;
+
+		sql_insert_return_states(return_id, return_ranges, CONSTRAINT,
+					 param, param_name, sm->state->name);
+	} END_FOR_EACH_SM(sm);
+}
+
+static void db_returns_constrained(struct expression *expr, int param, char *key, char *value)
+{
+	char *name;
+	struct symbol *sym;
+
+	name = return_state_to_var_sym(expr, param, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	set_state(my_id, name, sym, constraint_str_to_state(value));
+free:
+	free_string(name);
+}
+
+void register_constraints(int id)
+{
+	my_id = id;
+
+	add_merge_hook(my_id, &merge_func);
+	add_hook(&match_condition, CONDITION_HOOK);
+
+	add_hook(&match_caller_info, FUNCTION_CALL_HOOK);
+	add_member_info_callback(my_id, struct_member_callback);
+	select_caller_info_hook(&set_param_constrained, CONSTRAINT);
+
+	add_split_return_callback(print_return_implies_constrained);
+	select_return_states_hook(CONSTRAINT, &db_returns_constrained);
+}
--- /dev/null	Fri Dec 21 15:00:16 2018
+++ new/usr/src/tools/smatch/src/smatch_constraints_required.c	Fri Dec 21 15:00:16 2018
@@ -0,0 +1,490 @@
+/*
+ * Copyright (C) 2017 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+struct allocator {
+	const char *func;
+	int param;
+	int param2;
+};
+
+static struct allocator generic_allocator_table[] = {
+	{"malloc", 0},
+	{"memdup", 1},
+	{"realloc", 1},
+};
+
+static struct allocator kernel_allocator_table[] = {
+	{"kmalloc", 0},
+	{"kzalloc", 0},
+	{"vmalloc", 0},
+	{"__vmalloc", 0},
+	{"vzalloc", 0},
+	{"sock_kmalloc", 1},
+	{"kmemdup", 1},
+	{"kmemdup_user", 1},
+	{"dma_alloc_attrs", 1},
+	{"pci_alloc_consistent", 1},
+	{"pci_alloc_coherent", 1},
+	{"devm_kmalloc", 1},
+	{"devm_kzalloc", 1},
+	{"krealloc", 1},
+};
+
+static struct allocator calloc_table[] = {
+	{"calloc", 0, 1},
+	{"kcalloc", 0, 1},
+	{"kmalloc_array", 0, 1},
+	{"devm_kcalloc", 1, 2},
+};
+
+static int bytes_per_element(struct expression *expr)
+{
+	struct symbol *type;
+
+	type = get_type(expr);
+	if (!type)
+		return 0;
+
+	if (type->type != SYM_PTR && type->type != SYM_ARRAY)
+		return 0;
+
+	type = get_base_type(type);
+	return type_bytes(type);
+}
+
+static void save_constraint_required(struct expression *pointer, int op, struct expression *constraint)
+{
+	char *data, *limit;
+
+	data = get_constraint_str(pointer);
+	if (!data)
+		return;
+
+	limit = get_constraint_str(constraint);
+	if (!limit) {
+		// FIXME deal with <= also
+		if (op == '<')
+			set_state_expr(my_id, constraint, alloc_state_expr(pointer));
+		goto free_data;
+	}
+
+	sql_save_constraint_required(data, op, limit);
+
+	free_string(limit);
+free_data:
+	free_string(data);
+}
+
+static int handle_zero_size_arrays(struct expression *pointer, struct expression *size)
+{
+	struct expression *left, *right;
+	struct symbol *type, *array, *array_type;
+	sval_t struct_size;
+	char *limit;
+	char data[128];
+
+	if (size->type != EXPR_BINOP || size->op != '+')
+		return 0;
+
+	type = get_type(pointer);
+	if (!type || type->type != SYM_PTR)
+		return 0;
+	type = get_real_base_type(type);
+	if (!type || !type->ident || type->type != SYM_STRUCT)
+		return 0;
+	if (!last_member_is_resizable(type))
+		return 0;
+	array = last_ptr_list((struct ptr_list *)type->symbol_list);
+	if (!array || !array->ident)
+		return 0;
+	array_type = get_real_base_type(array);
+	if (!array_type || array_type->type != SYM_ARRAY)
+		return 0;
+	array_type = get_real_base_type(array_type);
+
+	left = strip_expr(size->left);
+	right = strip_expr(size->right);
+
+	if (!get_implied_value(left, &struct_size))
+		return 0;
+	if (struct_size.value != type_bytes(type))
+		return 0;
+
+	if (right->type == EXPR_BINOP && right->op == '*') {
+		struct expression *mult_left, *mult_right;
+		sval_t sval;
+
+		mult_left = strip_expr(right->left);
+		mult_right = strip_expr(right->right);
+
+		if (get_implied_value(mult_left, &sval) &&
+		    sval.value == type_bytes(array_type))
+			size = mult_right;
+		else if (get_implied_value(mult_right, &sval) &&
+		    sval.value == type_bytes(array_type))
+			size = mult_left;
+		else
+			return 0;
+	}
+
+	snprintf(data, sizeof(data), "(struct %s)->%s", type->ident->name, array->ident->name);
+	limit = get_constraint_str(size);
+	if (!limit) {
+		set_state_expr(my_id, size, alloc_state_expr(
+			       member_expression(deref_expression(pointer), '*', array->ident)));
+		return 1;
+	}
+
+	sql_save_constraint_required(data, '<', limit);
+
+	free_string(limit);
+	return 1;
+}
+
+static void match_alloc_helper(struct expression *pointer, struct expression *size, int recurse)
+{
+	struct expression *size_orig, *tmp;
+	sval_t sval;
+	int cnt = 0;
+
+	pointer = strip_expr(pointer);
+	size = strip_expr(size);
+	if (!size || !pointer)
+		return;
+
+	size_orig = size;
+	if (recurse) {
+		while ((tmp = get_assigned_expr(size))) {
+			size = strip_expr(tmp);
+			if (cnt++ > 5)
+				break;
+		}
+		if (size != size_orig) {
+			match_alloc_helper(pointer, size, 0);
+			size = size_orig;
+		}
+	}
+
+	if (handle_zero_size_arrays(pointer, size))
+		return;
+
+	if (size->type == EXPR_BINOP && size->op == '*') {
+		struct expression *mult_left, *mult_right;
+
+		mult_left = strip_expr(size->left);
+		mult_right = strip_expr(size->right);
+
+		if (get_implied_value(mult_left, &sval) &&
+		    sval.value == bytes_per_element(pointer))
+			size = mult_right;
+		else if (get_implied_value(mult_right, &sval) &&
+		    sval.value == bytes_per_element(pointer))
+			size = mult_left;
+		else
+			return;
+	}
+
+	if (size->type == EXPR_BINOP && size->op == '+' &&
+	    get_implied_value(size->right, &sval) &&
+	    sval.value == 1)
+		save_constraint_required(pointer, SPECIAL_LTE, size->left);
+	else
+		save_constraint_required(pointer, '<', size);
+}
+
+static void match_alloc(const char *fn, struct expression *expr, void *_size_arg)
+{
+	int size_arg = PTR_INT(_size_arg);
+	struct expression *call, *arg;
+
+	call = strip_expr(expr->right);
+	arg = get_argument_from_call_expr(call->args, size_arg);
+
+	match_alloc_helper(expr->left, arg, 1);
+}
+
+static void match_calloc(const char *fn, struct expression *expr, void *_start_arg)
+{
+	struct expression *pointer, *call, *size;
+	struct expression *count = NULL;
+	int start_arg = PTR_INT(_start_arg);
+	sval_t sval;
+
+	pointer = strip_expr(expr->left);
+	call = strip_expr(expr->right);
+
+	size = get_argument_from_call_expr(call->args, start_arg);
+	if (get_implied_value(size, &sval) &&
+	    sval.value == bytes_per_element(pointer))
+		count = get_argument_from_call_expr(call->args, start_arg + 1);
+	else {
+		size = get_argument_from_call_expr(call->args, start_arg + 1);
+		if (get_implied_value(size, &sval) &&
+		    sval.value == bytes_per_element(pointer))
+			count = get_argument_from_call_expr(call->args, start_arg);
+	}
+
+	if (!count)
+		return;
+
+	save_constraint_required(pointer, '<', count);
+}
+
+static void add_allocation_function(const char *func, void *call_back, int param)
+{
+	add_function_assign_hook(func, call_back, INT_PTR(param));
+}
+
+static void match_assign_size(struct expression *expr)
+{
+	struct smatch_state *state;
+	char *data, *limit;
+
+	state = get_state_expr(my_id, expr->right);
+	if (!state || !state->data)
+		return;
+
+	data = get_constraint_str(state->data);
+	if (!data)
+		return;
+
+	limit = get_constraint_str(expr->left);
+	if (!limit)
+		goto free_data;
+
+	sql_save_constraint_required(data, '<', limit);
+
+	free_string(limit);
+free_data:
+	free_string(data);
+}
+
+static void match_assign_has_buf_comparison(struct expression *expr)
+{
+	struct expression *size;
+
+	if (expr->op != '=')
+		return;
+	if (expr->right->type == EXPR_CALL)
+		return;
+	size = get_size_variable(expr->right);
+	if (!size)
+		return;
+	match_alloc_helper(expr->left, size, 1);
+}
+
+static void match_assign_data(struct expression *expr)
+{
+	struct expression *right, *arg, *tmp;
+	int i;
+	int size_arg;
+	int size_arg2 = -1;
+
+	if (expr->op != '=')
+		return;
+
+	/* Direct calls are handled else where (for now at least) */
+	tmp = get_assigned_expr(expr->right);
+	if (!tmp)
+		return;
+
+	right = strip_expr(tmp);
+	if (right->type != EXPR_CALL)
+		return;
+
+	if (right->fn->type != EXPR_SYMBOL ||
+	    !right->fn->symbol ||
+	    !right->fn->symbol->ident)
+		return;
+
+	for (i = 0; i < ARRAY_SIZE(generic_allocator_table); i++) {
+		if (strcmp(right->fn->symbol->ident->name,
+			   generic_allocator_table[i].func) == 0) {
+			size_arg = generic_allocator_table[i].param;
+			goto found;
+		}
+	}
+
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	for (i = 0; i < ARRAY_SIZE(kernel_allocator_table); i++) {
+		if (strcmp(right->fn->symbol->ident->name,
+			   kernel_allocator_table[i].func) == 0) {
+			size_arg = kernel_allocator_table[i].param;
+			goto found;
+		}
+	}
+
+	for (i = 0; i < ARRAY_SIZE(calloc_table); i++) {
+		if (strcmp(right->fn->symbol->ident->name,
+			   calloc_table[i].func) == 0) {
+			size_arg = calloc_table[i].param;
+			size_arg2 = calloc_table[i].param2;
+			goto found;
+		}
+	}
+
+	return;
+
+found:
+	arg = get_argument_from_call_expr(right->args, size_arg);
+	match_alloc_helper(expr->left, arg, 1);
+	if (size_arg2 == -1)
+		return;
+	arg = get_argument_from_call_expr(right->args, size_arg2);
+	match_alloc_helper(expr->left, arg, 1);
+}
+
+static void match_assign_ARRAY_SIZE(struct expression *expr)
+{
+	struct expression *array;
+	char *data, *limit;
+	const char *macro;
+
+	macro = get_macro_name(expr->right->pos);
+	if (!macro || strcmp(macro, "ARRAY_SIZE") != 0)
+		return;
+	array = strip_expr(expr->right);
+	if (array->type != EXPR_BINOP || array->op != '+')
+		return;
+	array = strip_expr(array->left);
+	if (array->type != EXPR_BINOP || array->op != '/')
+		return;
+	array = strip_expr(array->left);
+	if (array->type != EXPR_SIZEOF)
+		return;
+	array = strip_expr(array->cast_expression);
+	if (array->type != EXPR_PREOP || array->op != '*')
+		return;
+	array = strip_expr(array->unop);
+
+	data = get_constraint_str(array);
+	limit = get_constraint_str(expr->left);
+	if (!data || !limit)
+		goto free;
+
+	sql_save_constraint_required(data, '<', limit);
+
+free:
+	free_string(data);
+	free_string(limit);
+}
+
+static void match_assign_buf_comparison(struct expression *expr)
+{
+	struct expression *pointer;
+
+	if (expr->op != '=')
+		return;
+	pointer = get_array_variable(expr->right);
+	if (!pointer)
+		return;
+
+	match_alloc_helper(pointer, expr->right, 1);
+}
+
+static int constraint_found(void *_found, int argc, char **argv, char **azColName)
+{
+	int *found = _found;
+
+	*found = 1;
+	return 0;
+}
+
+static int has_constraint(struct expression *expr, const char *constraint)
+{
+	int found = 0;
+
+	if (get_state_expr(my_id, expr))
+		return 1;
+
+	run_sql(constraint_found, &found,
+		"select data from constraints_required where bound = '%q' limit 1",
+		escape_newlines(constraint));
+
+	return found;
+}
+
+static void match_assign_constraint(struct expression *expr)
+{
+	struct symbol *type;
+	char *left, *right;
+
+	if (expr->op != '=')
+		return;
+
+	type = get_type(expr->left);
+	if (!type || type->type != SYM_BASETYPE)
+		return;
+
+	left = get_constraint_str(expr->left);
+	if (!left)
+		return;
+	right = get_constraint_str(expr->right);
+	if (!right)
+		goto free;
+	if (!has_constraint(expr->right, right))
+		return;
+	sql_copy_constraint_required(left, right);
+free:
+	free_string(right);
+	free_string(left);
+}
+
+void register_constraints_required(int id)
+{
+	my_id = id;
+
+	add_hook(&match_assign_size, ASSIGNMENT_HOOK);
+	add_hook(&match_assign_data, ASSIGNMENT_HOOK);
+	add_hook(&match_assign_has_buf_comparison, ASSIGNMENT_HOOK);
+
+	add_hook(&match_assign_ARRAY_SIZE, ASSIGNMENT_HOOK);
+	add_hook(&match_assign_ARRAY_SIZE, GLOBAL_ASSIGNMENT_HOOK);
+	add_hook(&match_assign_buf_comparison, ASSIGNMENT_HOOK);
+	add_hook(&match_assign_constraint, ASSIGNMENT_HOOK);
+
+	add_allocation_function("malloc", &match_alloc, 0);
+	add_allocation_function("memdup", &match_alloc, 1);
+	add_allocation_function("realloc", &match_alloc, 1);
+	add_allocation_function("realloc", &match_calloc, 0);
+	if (option_project == PROJ_KERNEL) {
+		add_allocation_function("kmalloc", &match_alloc, 0);
+		add_allocation_function("kzalloc", &match_alloc, 0);
+		add_allocation_function("vmalloc", &match_alloc, 0);
+		add_allocation_function("__vmalloc", &match_alloc, 0);
+		add_allocation_function("vzalloc", &match_alloc, 0);
+		add_allocation_function("sock_kmalloc", &match_alloc, 1);
+		add_allocation_function("kmemdup", &match_alloc, 1);
+		add_allocation_function("kmemdup_user", &match_alloc, 1);
+		add_allocation_function("dma_alloc_attrs", &match_alloc, 1);
+		add_allocation_function("pci_alloc_consistent", &match_alloc, 1);
+		add_allocation_function("pci_alloc_coherent", &match_alloc, 1);
+		add_allocation_function("devm_kmalloc", &match_alloc, 1);
+		add_allocation_function("devm_kzalloc", &match_alloc, 1);
+		add_allocation_function("kcalloc", &match_calloc, 0);
+		add_allocation_function("kmalloc_array", &match_calloc, 0);
+		add_allocation_function("devm_kcalloc", &match_calloc, 1);
+		add_allocation_function("krealloc", &match_alloc, 1);
+	}
+}
--- /dev/null	Fri Dec 21 15:00:16 2018
+++ new/usr/src/tools/smatch/src/smatch_container_of.c	Fri Dec 21 15:00:16 2018
@@ -0,0 +1,654 @@
+/*
+ * Copyright (C) 2017 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+static int param_id;
+
+static struct stree *used_stree;
+static struct stree_stack *saved_stack;
+
+STATE(used);
+
+int get_param_from_container_of(struct expression *expr)
+{
+	struct expression *param_expr;
+	struct symbol *type;
+	sval_t sval;
+	int param;
+
+
+	type = get_type(expr);
+	if (!type || type->type != SYM_PTR)
+		return -1;
+
+	expr = strip_expr(expr);
+	if (expr->type != EXPR_BINOP || expr->op != '-')
+		return -1;
+
+	if (!get_value(expr->right, &sval))
+		return -1;
+	if (sval.value < 0 || sval.value > 4096)
+		return -1;
+
+	param_expr = get_assigned_expr(expr->left);
+	if (!param_expr)
+		return -1;
+	param = get_param_num(param_expr);
+	if (param < 0)
+		return -1;
+
+	return param;
+}
+
+int get_offset_from_container_of(struct expression *expr)
+{
+	struct expression *param_expr;
+	struct symbol *type;
+	sval_t sval;
+
+	type = get_type(expr);
+	if (!type || type->type != SYM_PTR)
+		return -1;
+
+	expr = strip_expr(expr);
+	if (expr->type != EXPR_BINOP || expr->op != '-')
+		return -1;
+
+	if (!get_value(expr->right, &sval))
+		return -1;
+	if (sval.value < 0 || sval.value > 4096)
+		return -1;
+
+	param_expr = get_assigned_expr(expr->left);
+	if (!param_expr)
+		return -1;
+
+	return sval.value;
+}
+
+static int get_container_arg(struct symbol *sym)
+{
+	struct expression *__mptr;
+	int param;
+
+	if (!sym || !sym->ident)
+		return -1;
+
+	__mptr = get_assigned_expr_name_sym(sym->ident->name, sym);
+	param = get_param_from_container_of(__mptr);
+
+	return param;
+}
+
+static int get_container_offset(struct symbol *sym)
+{
+	struct expression *__mptr;
+	int offset;
+
+	if (!sym || !sym->ident)
+		return -1;
+
+	__mptr = get_assigned_expr_name_sym(sym->ident->name, sym);
+	offset = get_offset_from_container_of(__mptr);
+
+	return offset;
+}
+
+static char *get_container_name(struct sm_state *sm, int offset)
+{
+	static char buf[256];
+	const char *name;
+
+	name = get_param_name(sm);
+	if (!name)
+		return NULL;
+
+	if (name[0] == '$')
+		snprintf(buf, sizeof(buf), "$(-%d)%s", offset, name + 1);
+	else if (name[0] == '*' || name[1] == '$')
+		snprintf(buf, sizeof(buf), "*$(-%d)%s", offset, name + 2);
+	else
+		return NULL;
+
+	return buf;
+}
+
+static void get_state_hook(int owner, const char *name, struct symbol *sym)
+{
+	int arg;
+
+	if (!option_info)
+		return;
+	if (__in_fake_assign)
+		return;
+
+	arg = get_container_arg(sym);
+	if (arg >= 0)
+		set_state_stree(&used_stree, my_id, name, sym, &used);
+}
+
+static void set_param_used(struct expression *call, struct expression *arg, char *key, char *unused)
+{
+	struct symbol *sym;
+	char *name;
+	int arg_nr;
+
+	name = get_variable_from_key(arg, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	arg_nr = get_container_arg(sym);
+	if (arg_nr >= 0)
+		set_state(my_id, name, sym, &used);
+free:
+	free_string(name);
+}
+
+static void process_states(void)
+{
+	struct sm_state *tmp;
+	int arg, offset;
+	const char *name;
+
+	FOR_EACH_SM(used_stree, tmp) {
+		arg = get_container_arg(tmp->sym);
+		offset = get_container_offset(tmp->sym);
+		if (arg < 0 || offset < 0)
+			continue;
+		name = get_container_name(tmp, offset);
+		if (!name)
+			continue;
+		sql_insert_return_implies(CONTAINER, arg, name, "");
+	} END_FOR_EACH_SM(tmp);
+
+	free_stree(&used_stree);
+}
+
+static void match_function_def(struct symbol *sym)
+{
+	free_stree(&used_stree);
+}
+
+static void match_save_states(struct expression *expr)
+{
+	push_stree(&saved_stack, used_stree);
+	used_stree = NULL;
+}
+
+static void match_restore_states(struct expression *expr)
+{
+	free_stree(&used_stree);
+	used_stree = pop_stree(&saved_stack);
+}
+
+static void print_returns_container_of(int return_id, char *return_ranges, struct expression *expr)
+{
+	int offset;
+	int param;
+	char key[64];
+	char value[64];
+
+	param = get_param_from_container_of(expr);
+	if (param < 0)
+		return;
+	offset = get_offset_from_container_of(expr);
+	if (offset < 0)
+		return;
+
+	snprintf(key, sizeof(key), "%d", param);
+	snprintf(value, sizeof(value), "-%d", offset);
+
+	/* no need to add it to return_implies because it's not really param_used */
+	sql_insert_return_states(return_id, return_ranges, CONTAINER, -1,
+			key, value);
+}
+
+static void returns_container_of(struct expression *expr, int param, char *key, char *value)
+{
+	struct expression *call, *arg;
+	int offset;
+	char buf[64];
+
+	if (expr->type != EXPR_ASSIGNMENT || expr->op != '=')
+		return;
+	call = strip_expr(expr->right);
+	if (call->type != EXPR_CALL)
+		return;
+	if (param != -1)
+		return;
+	param = atoi(key);
+	offset = atoi(value);
+
+	arg = get_argument_from_call_expr(call->args, param);
+	if (!arg)
+		return;
+	if (arg->type != EXPR_SYMBOL)
+		return;
+	param = get_param_num(arg);
+	if (param < 0)
+		return;
+	snprintf(buf, sizeof(buf), "$(%d)", offset);
+	sql_insert_return_implies(CONTAINER, param, buf, "");
+}
+
+static int get_shared_cnt(const char *one, const char *two)
+{
+	int i;
+	int on_end = false;
+
+	i = 0;
+	while (true) {
+		if (!one[i] || !two[i]) {
+			on_end = true;
+			break;
+		}
+		if (one[i] != two[i])
+			break;
+		i++;
+	}
+	if (i == 0)
+		return 0;
+	i--;
+	while (i > 0 && (one[i] == '>' || one[i] == '-' || one[i] == '.')) {
+		on_end = true;
+		i--;
+	}
+	if (!on_end)
+		return 0;
+
+	return i + 1;
+}
+
+static int build_offset_str(struct expression *expr, const char *name,
+			    int shared, char *buf, int size, int op)
+{
+	int chop = 0;
+	int offset;
+	int i;
+
+	i = shared;
+	while (name[i]) {
+		if (name[i] == '.' || name[i] == '-')
+			chop++;
+		i++;
+	}
+
+	// FIXME:  Handle more chops
+	if (chop > 1)
+		return 0;
+
+	if (chop == 0) {
+		offset = 0;
+	} else {
+		offset = get_member_offset_from_deref(expr);
+		if (offset < 0)
+			return 0;
+	}
+
+	snprintf(buf, size, "%c%d", (op == '+') ? '+' : '-', offset);
+	return 1;
+}
+
+static void match_call(struct expression *call)
+{
+	struct expression *fn, *arg;
+	char *fn_name, *arg_name;
+	int param, shared;
+	char minus_str[64];
+	char plus_str[64];
+	char offset_str[64];
+	bool star;
+
+	/*
+	 * We're trying to link the function with the parameter.  There are a
+	 * couple ways this can be passed:
+	 * foo->func(foo, ...);
+	 * foo->func(foo->x, ...);
+	 * foo->bar.func(&foo->bar, ...);
+	 * foo->bar->baz->func(foo, ...);
+	 *
+	 * So the method is basically to subtract the offsets until we get to
+	 * the common bit, then add the member offsets to get the parameter.
+	 *
+	 * If we're taking an address then the offset math is not stared,
+	 * otherwise it is.  Starred means dereferenced.
+	 */
+	fn = strip_expr(call->fn);
+	fn_name = expr_to_var(fn);
+	if (!fn_name)
+		return;
+
+	param = -1;
+	FOR_EACH_PTR(call->args, arg) {
+		param++;
+
+		arg = strip_expr(arg);
+		star = true;
+		if (arg->type == EXPR_PREOP && arg->op == '&') {
+			arg = strip_expr(arg->unop);
+			star = false;
+		}
+
+		arg_name = expr_to_var(arg);
+		if (!arg_name)
+			continue;
+		shared = get_shared_cnt(fn_name, arg_name);
+		if (!shared)
+			goto free_arg_name;
+		if (!build_offset_str(fn, fn_name, shared, minus_str, sizeof(minus_str), '-'))
+			goto free_arg_name;
+		if (!build_offset_str(arg, arg_name, shared, plus_str, sizeof(plus_str), '+'))
+			goto free_arg_name;
+		if (star)
+			snprintf(offset_str, sizeof(offset_str), "*(%s%s)", minus_str, plus_str);
+		else
+			snprintf(offset_str, sizeof(offset_str), "%s%s", minus_str, plus_str);
+		sql_insert_caller_info(call, CONTAINER, param, offset_str, "$(-1)");
+free_arg_name:
+		free_string(arg_name);
+	} END_FOR_EACH_PTR(arg);
+
+	free_string(fn_name);
+}
+
+static void db_passed_container(const char *name, struct symbol *sym, char *key, char *value)
+{
+	sval_t offset = {
+		.type = &int_ctype,
+	};
+	const char *arg_offset;
+	int star = 0;
+	int val;
+
+	if (key[0] == '*') {
+		star = 1;
+		key += 2;
+	}
+
+	val = atoi(key);
+	if (val < -4095 || val > 0)
+		return;
+	offset.value = -val;
+	arg_offset = strchr(key, '+');
+	if (!arg_offset)
+		return;
+	val = atoi(arg_offset + 1);
+	if (val > 4095 || val < 0)
+		return;
+	offset.value |= val << 16;
+	if (star)
+		offset.value |= 1ULL << 31;
+
+	set_state(param_id, name, sym, alloc_estate_sval(offset));
+}
+
+struct db_info {
+	struct symbol *arg;
+	int prev_offset;
+	struct range_list *rl;
+	int star;
+	struct stree *stree;
+};
+
+static struct symbol *get_member_from_offset(struct symbol *sym, int offset)
+{
+	struct symbol *type, *tmp;
+	int cur;
+
+	type = get_real_base_type(sym);
+	if (!type || type->type != SYM_PTR)
+		return NULL;
+	type = get_real_base_type(type);
+	if (!type || type->type != SYM_STRUCT)
+		return NULL;
+
+	cur = 0;
+	FOR_EACH_PTR(type->symbol_list, tmp) {
+		cur = ALIGN(cur, tmp->ctype.alignment);
+		if (offset == cur)
+			return tmp;
+		cur += type_bytes(tmp);
+	} END_FOR_EACH_PTR(tmp);
+	return NULL;
+}
+
+static struct symbol *get_member_type_from_offset(struct symbol *sym, int offset)
+{
+	struct symbol *base_type;
+	struct symbol *member;
+
+	base_type = get_real_base_type(sym);
+	if (base_type && base_type->type == SYM_PTR)
+		base_type = get_real_base_type(base_type);
+	if (offset == 0 && base_type && base_type->type == SYM_BASETYPE)
+		return base_type;
+
+	member = get_member_from_offset(sym, offset);
+	if (!member)
+		return NULL;
+	return get_real_base_type(member);
+}
+
+static const char *get_name_from_offset(struct symbol *arg, int offset)
+{
+	struct symbol *member, *type;
+	const char *name;
+	static char fullname[256];
+
+	name = arg->ident->name;
+
+	type = get_real_base_type(arg);
+	if (!type || type->type != SYM_PTR)
+		return name;
+
+	type = get_real_base_type(type);
+	if (!type)
+		return NULL;
+	if (type->type != SYM_STRUCT) {
+		snprintf(fullname, sizeof(fullname), "*%s", name);
+		return fullname;
+	}
+
+	member = get_member_from_offset(arg, offset);
+	if (!member)
+		return NULL;
+
+	snprintf(fullname, sizeof(fullname), "%s->%s", name, member->ident->name);
+	return fullname;
+}
+
+static void set_param_value(struct stree **stree, struct symbol *arg, int offset, struct range_list *rl)
+{
+	const char *name;
+
+	name = get_name_from_offset(arg, offset);
+	if (!name)
+		return;
+	set_state_stree(stree, SMATCH_EXTRA, name, arg, alloc_estate_rl(rl));
+}
+
+static int save_vals(void *_db_info, int argc, char **argv, char **azColName)
+{
+	struct db_info *db_info = _db_info;
+	struct symbol *type;
+	struct range_list *rl;
+	int offset = 0;
+	const char *value;
+
+	if (argc == 2) {
+		offset = atoi(argv[0]);
+		value = argv[1];
+	} else {
+		value = argv[0];
+	}
+
+	if (db_info->prev_offset != -1 &&
+	    db_info->prev_offset != offset) {
+		set_param_value(&db_info->stree, db_info->arg, db_info->prev_offset, db_info->rl);
+		db_info->rl = NULL;
+	}
+
+	db_info->prev_offset = offset;
+
+	type = get_real_base_type(db_info->arg);
+	if (db_info->star)
+		goto found_type;
+	if (type->type != SYM_PTR)
+		return 0;
+	type = get_real_base_type(type);
+	if (type->type == SYM_BASETYPE)
+		goto found_type;
+	type = get_member_type_from_offset(db_info->arg, offset);
+found_type:
+	str_to_rl(type, (char *)value, &rl);
+	if (db_info->rl)
+		db_info->rl = rl_union(db_info->rl, rl);
+	else
+		db_info->rl = rl;
+
+	return 0;
+}
+
+static struct stree *load_tag_info_sym(mtag_t tag, struct symbol *arg, int arg_offset, int star)
+{
+	struct db_info db_info = {
+		.arg = arg,
+		.prev_offset = -1,
+		.star = star,
+	};
+	struct symbol *type;
+
+	if (!tag || !arg->ident)
+		return NULL;
+
+	type = get_real_base_type(arg);
+	if (!type)
+		return NULL;
+	if (!star) {
+		if (type->type != SYM_PTR)
+			return NULL;
+		type = get_real_base_type(type);
+		if (!type)
+			return NULL;
+	}
+
+	if (star || type->type == SYM_BASETYPE) {
+		run_sql(save_vals, &db_info,
+			"select value from mtag_data where tag = %lld and offset = %d and type = %d;",
+			tag, arg_offset, DATA_VALUE);
+	} else {  /* presumably the parameter is a struct pointer */
+		run_sql(save_vals, &db_info,
+			"select offset, value from mtag_data where tag = %lld and type = %d;",
+			tag, DATA_VALUE);
+	}
+
+	if (db_info.prev_offset != -1)
+		set_param_value(&db_info.stree, arg, db_info.prev_offset, db_info.rl);
+
+	// FIXME: handle an offset correctly
+	if (!star && !arg_offset) {
+		sval_t sval;
+
+		sval.type = get_real_base_type(arg);
+		sval.uvalue = tag;
+		set_state_stree(&db_info.stree, SMATCH_EXTRA, arg->ident->name, arg, alloc_estate_sval(sval));
+	}
+	return db_info.stree;
+}
+
+static void handle_passed_container(struct symbol *sym)
+{
+	struct symbol *arg;
+	struct smatch_state *state;
+	struct sm_state *sm;
+	struct stree *stree;
+	mtag_t fn_tag, container_tag, arg_tag;
+	sval_t offset;
+	int container_offset, arg_offset;
+	int star;
+
+	FOR_EACH_PTR(cur_func_sym->ctype.base_type->arguments, arg) {
+		state = get_state(param_id, arg->ident->name, arg);
+		if (state)
+			goto found;
+	} END_FOR_EACH_PTR(arg);
+
+	return;
+found:
+	if (!estate_get_single_value(state, &offset))
+		return;
+	container_offset = -(offset.value & 0xffff);
+	arg_offset = (offset.value & 0xfff0000) >> 16;
+	star = !!(offset.value & (1ULL << 31));
+
+	if (!get_toplevel_mtag(cur_func_sym, &fn_tag))
+		return;
+	if (!mtag_map_select_container(fn_tag, container_offset, &container_tag))
+		return;
+	if (!arg_offset || star) {
+		arg_tag = container_tag;
+	} else {
+		if (!mtag_map_select_tag(container_tag, -arg_offset, &arg_tag))
+			return;
+	}
+
+	stree = load_tag_info_sym(arg_tag, arg, arg_offset, star);
+	FOR_EACH_SM(stree, sm) {
+		set_state(sm->owner, sm->name, sm->sym, sm->state);
+	} END_FOR_EACH_SM(sm);
+	free_stree(&stree);
+}
+
+void register_container_of(int id)
+{
+	my_id = id;
+
+	add_hook(&match_function_def, FUNC_DEF_HOOK);
+
+	add_get_state_hook(&get_state_hook);
+
+	add_hook(&match_save_states, INLINE_FN_START);
+	add_hook(&match_restore_states, INLINE_FN_END);
+
+	select_return_implies_hook(CONTAINER, &set_param_used);
+	all_return_states_hook(&process_states);
+
+	add_split_return_callback(&print_returns_container_of);
+	select_return_states_hook(CONTAINER, &returns_container_of);
+
+	add_hook(&match_call, FUNCTION_CALL_HOOK);
+}
+
+static struct smatch_state *unmatched_state(struct sm_state *sm)
+{
+	return alloc_estate_whole(estate_type(sm->state));
+}
+
+void register_container_of2(int id)
+{
+	param_id = id;
+
+	select_caller_info_hook(db_passed_container, CONTAINER);
+	add_hook(&handle_passed_container, AFTER_DEF_HOOK);
+	add_unmatched_state_hook(param_id, &unmatched_state);
+	add_merge_hook(param_id, &merge_estates);
+}
+
--- /dev/null	Fri Dec 21 15:00:16 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/build_early_index.sh	Fri Dec 21 15:00:16 2018
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+db_file=$1
+
+
+cat << EOF | sqlite3 $db_file
+PRAGMA synchronous = OFF;
+PRAGMA cache_size = 800000;
+PRAGMA journal_mode = OFF;
+PRAGMA count_changes = OFF;
+PRAGMA temp_store = MEMORY;
+PRAGMA locking = EXCLUSIVE;
+
+CREATE INDEX caller_fn_idx on caller_info (function, call_id);
+CREATE INDEX caller_ff_idx on caller_info (file, function, call_id);
+CREATE INDEX common_fn_idx on common_caller_info (function, call_id);
+CREATE INDEX common_ff_idx on common_caller_info (file, function, call_id);
+CREATE INDEX call_implies_fn_idx on call_implies (function);
+CREATE INDEX call_implies_ff_idx on call_implies (file, function);
+CREATE INDEX return_implies_fn_idx on return_implies (function);
+CREATE INDEX return_implies_ff_idx on return_implies (file, function);
+CREATE INDEX data_file_info_idx on data_info (file, data);
+CREATE INDEX data_info_idx on data_info (data);
+CREATE INDEX fn_ptr_idx_file on function_ptr (file, function);
+CREATE INDEX fn_ptr_idx_nofile on function_ptr (function);
+CREATE INDEX fn_ptr_idx_ptr on function_ptr (ptr);
+CREATE INDEX file_function_type_idx on function_type (file, function);
+CREATE INDEX function_type_idx on function_type (function);
+CREATE INDEX function_type_size_idx ON function_type_size (type);
+CREATE INDEX function_type_value_idx ON function_type_value (type);
+CREATE INDEX local_value_idx on local_values (file, variable);
+CREATE INDEX return_states_fn_idx on return_states (function);
+CREATE INDEX return_states_ff_idx on return_states (file, function);
+CREATE INDEX parameter_name_file_idx on parameter_name (file, function);
+CREATE INDEX parameter_name_idx on parameter_name (function);
+CREATE INDEX str_idx on constraints (str);
+CREATE INDEX required_idx on constraints_required (data);
+CREATE INDEX mtag_about_idx on mtag_about (tag);
+CREATE INDEX mtag_data_idx on mtag_data (tag);
+CREATE INDEX mtag_map_idx1 on mtag_map (tag);
+CREATE INDEX mtag_map_idx2 on mtag_map (container);
+CREATE INDEX sink_index on sink_info (file, sink_name);
+
+EOF
+
+#CREATE INDEX type_size_idx on type_size (type);
+#CREATE INDEX type_val_idx on type_value (type);
+
--- /dev/null	Fri Dec 21 15:00:16 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/build_late_index.sh	Fri Dec 21 15:00:16 2018
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+db_file=$1
+
+
+cat << EOF | sqlite3 $db_file
+PRAGMA synchronous = OFF;
+PRAGMA cache_size = 800000;
+PRAGMA journal_mode = OFF;
+PRAGMA count_changes = OFF;
+PRAGMA temp_store = MEMORY;
+PRAGMA locking = EXCLUSIVE;
+
+CREATE INDEX type_size_idx on type_size (type);
+CREATE INDEX type_val_idx on type_value (type);
+
+EOF
+
+
--- /dev/null	Fri Dec 21 15:00:16 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/call_implies.schema	Fri Dec 21 15:00:16 2018
@@ -0,0 +1,12 @@
+CREATE TABLE call_implies (
+	file varchar(128),
+	function varchar(64),
+	call_id integer,
+	static boolean,
+	type integer,
+	parameter integer,
+	key varchar(256),
+	value varchar(256),
+
+	CONSTRAINT implies_row UNIQUE (file, function, call_id, static, type, parameter, key, value)
+);
--- /dev/null	Fri Dec 21 15:00:16 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/caller_info.schema	Fri Dec 21 15:00:16 2018
@@ -0,0 +1,1 @@
+CREATE TABLE caller_info (file varchar(128), caller varchar(64), function varchar(64), call_id integer, static boolean, type integer, parameter integer, key varchar(256), value varchar(256));
--- /dev/null	Fri Dec 21 15:00:17 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/clear_user_data.sh	Fri Dec 21 15:00:17 2018
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+echo "delete from caller_info where type = 8017; delete from return_states where type = 8017;" | sqlite3 smatch_db.sqlite
+
+
--- /dev/null	Fri Dec 21 15:00:17 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/common_caller_info.schema	Fri Dec 21 15:00:17 2018
@@ -0,0 +1,1 @@
+CREATE TABLE common_caller_info (file varchar(128), caller varchar(64), function varchar(64), call_id integer, static boolean, type integer, parameter integer, key varchar(256), value varchar(256));
--- /dev/null	Fri Dec 21 15:00:17 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/constraints.schema	Fri Dec 21 15:00:17 2018
@@ -0,0 +1,6 @@
+CREATE TABLE constraints (
+	id integer primary key,
+	str varchar(256),
+
+	CONSTRAINT constraint_name UNIQUE (str)
+);
--- /dev/null	Fri Dec 21 15:00:17 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/constraints_required.schema	Fri Dec 21 15:00:17 2018
@@ -0,0 +1,7 @@
+CREATE TABLE constraints_required (
+	data varchar(256),
+	op integer,
+	bound varchar(256),
+
+	CONSTRAINT unique_row UNIQUE (data, op, bound)
+);
--- /dev/null	Fri Dec 21 15:00:17 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/copy_required_constraints.pl	Fri Dec 21 15:00:17 2018
@@ -0,0 +1,46 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+use bigint;
+use DBI;
+use Data::Dumper;
+use File::Basename;
+use Try::Tiny;
+
+my $project = shift;
+$project =~ s/.*=(.*)/$1/;
+my $warns = shift;
+my $db_file = shift;
+
+my $db;
+
+sub connect_to_db($)
+{
+    my $name = shift;
+
+    $db = DBI->connect("dbi:SQLite:$name", "", "", {AutoCommit => 0});
+
+    $db->do("PRAGMA cache_size = 800000");
+    $db->do("PRAGMA journal_mode = OFF");
+    $db->do("PRAGMA count_changes = OFF");
+    $db->do("PRAGMA temp_store = MEMORY");
+    $db->do("PRAGMA locking = EXCLUSIVE");
+}
+
+sub copy_constraints($$)
+{
+    my $full_path = shift;
+    my $project = shift;
+    my $dir = dirname($full_path);
+
+    $db->do('insert or ignore into constraints (str) select bound from constraints_required');
+
+    $db->commit();
+}
+
+connect_to_db($db_file);
+copy_constraints($0, $project);
+
+$db->commit();
+$db->disconnect();
--- /dev/null	Fri Dec 21 15:00:17 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/create_db.sh	Fri Dec 21 15:00:17 2018
@@ -0,0 +1,58 @@
+#!/bin/bash
+
+if echo $1 | grep -q '^-p' ; then
+    PROJ=$(echo $1 | cut -d = -f 2)
+    shift
+fi
+
+info_file=$1
+
+if [[ "$info_file" = "" ]] ; then
+    echo "Usage:  $0 -p=<project> <file with smatch messages>"
+    exit 1
+fi
+
+bin_dir=$(dirname $0)
+db_file=smatch_db.sqlite.new
+
+rm -f $db_file
+
+for i in ${bin_dir}/*.schema ; do
+    cat $i | sqlite3 $db_file
+done
+
+${bin_dir}/init_constraints.pl "$PROJ" $info_file $db_file
+${bin_dir}/init_constraints_required.pl "$PROJ" $info_file $db_file
+${bin_dir}/fill_db_sql.pl "$PROJ" $info_file $db_file
+if [ -e ${info_file}.sql ] ; then
+    ${bin_dir}/fill_db_sql.pl "$PROJ" ${info_file}.sql $db_file
+fi
+${bin_dir}/fill_db_caller_info.pl "$PROJ" $info_file $db_file
+if [ -e ${info_file}.caller_info ] ; then
+    ${bin_dir}/fill_db_caller_info.pl "$PROJ" ${info_file}.caller_info $db_file
+fi
+${bin_dir}/build_early_index.sh $db_file
+
+${bin_dir}/fill_db_type_value.pl "$PROJ" $info_file $db_file
+${bin_dir}/fill_db_type_size.pl "$PROJ" $info_file $db_file
+${bin_dir}/copy_required_constraints.pl "$PROJ" $info_file $db_file
+${bin_dir}/build_late_index.sh $db_file
+
+${bin_dir}/fixup_all.sh $db_file
+if [ "$PROJ" != "" ] ; then
+    ${bin_dir}/fixup_${PROJ}.sh $db_file
+fi
+
+${bin_dir}/remove_mixed_up_pointer_params.pl $db_file
+${bin_dir}/mark_function_ptrs_searchable.pl $db_file
+
+# delete duplicate entrees and speed things up
+echo "delete from function_ptr where rowid not in (select min(rowid) from function_ptr group by file, function, ptr, searchable);" | sqlite3 $db_file
+
+test -e  ${bin_dir}/${PROJ}.return_fixes && \
+cat ${bin_dir}/${PROJ}.return_fixes | \
+while read func old new ; do
+    echo "update return_states set return = '$new' where function = '$func' and return = '$old';" | sqlite3 $db_file
+done
+
+mv $db_file smatch_db.sqlite
--- /dev/null	Fri Dec 21 15:00:17 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/data_info.schema	Fri Dec 21 15:00:17 2018
@@ -0,0 +1,1 @@
+CREATE TABLE data_info (file varchar(80), data varchar(80), type integer, value varchar(80));
--- /dev/null	Fri Dec 21 15:00:17 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/db.schema	Fri Dec 21 15:00:17 2018
@@ -0,0 +1,1 @@
+PRAGMA max_page_count = 2147483646;
--- /dev/null	Fri Dec 21 15:00:17 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/fill_db_caller_info.pl	Fri Dec 21 15:00:17 2018
@@ -0,0 +1,96 @@
+#!/usr/bin/perl -w
+
+use strict;
+use DBI;
+use Scalar::Util qw(looks_like_number);
+
+sub usage()
+{
+    print "usage:  $0 <project> <smatch_warns.txt> <db_file>\n";
+    exit(1);
+}
+
+my %too_common_funcs;
+sub get_too_common_functions($$$)
+{
+    my $path = shift;
+    my $project = shift;
+    my $warns = shift;
+
+    open(FUNCS, "grep 'SQL_caller_info: ' $warns | grep '%call_marker%' | cut -d \"'\" -f 6 | sort | uniq -c | ");
+
+    while (<FUNCS>) {
+        if ($_ =~ /(\d+) (.*)/) {
+            if (int($1) > 200) {
+                $too_common_funcs{$2} = 1;
+            }
+        }
+    }
+
+    close(FUNCS);
+
+    open(FILE, ">", "$path/../$project.common_functions");
+    foreach my $func (keys %too_common_funcs) {
+        if ($func =~ / /) {
+            next;
+        }
+        print FILE "$func\n";
+    }
+    close(FILE);
+}
+
+my $exec_name = $0;
+my $path = $exec_name;
+$path =~ s/(.*)\/.*/$1/;
+my $project = shift;
+my $warns = shift;
+my $db_file = shift;
+
+if (!defined($db_file)) {
+    usage();
+}
+
+get_too_common_functions($path, $project, $warns);
+
+my $db = DBI->connect("dbi:SQLite:$db_file", "", "", {AutoCommit => 0});
+$db->do("PRAGMA cache_size = 800000");
+$db->do("PRAGMA journal_mode = OFF");
+$db->do("PRAGMA count_changes = OFF");
+$db->do("PRAGMA temp_store = MEMORY");
+$db->do("PRAGMA locking = EXCLUSIVE");
+
+foreach my $func (keys %too_common_funcs) {
+    $db->do("insert into common_caller_info values ('unknown', 'too common', '$func', 0, 0, 0, -1, '', '');");
+}
+
+my $call_id = 0;
+my ($fn, $dummy, $sql);
+
+open(WARNS, "<$warns");
+while (<WARNS>) {
+    # test.c:11 frob() SQL_caller_info: insert into caller_info values ('test.c', 'frob', '__smatch_buf_size', %CALL_ID%, 1, 0, -1, '', ');
+
+    if (!($_ =~ /^.*? \w+\(\) SQL_caller_info: /)) {
+        next;
+    }
+    ($dummy, $dummy, $dummy, $dummy, $dummy, $fn, $dummy) = split(/'/);
+
+    if ($fn =~ /__builtin_/) {
+        next;
+    }
+    if ($fn =~ /^(printk|memset|memcpy|kfree|printf|dev_err|writel)$/) {
+        next;
+    }
+
+    ($dummy, $dummy, $sql) = split(/:/, $_, 3);
+
+    if ($sql =~ /%call_marker%/) {
+        $sql =~ s/%call_marker%//; # don't need this taking space in the db.
+        $call_id++;
+    }
+    $sql =~ s/%CALL_ID%/$call_id/;
+
+    $db->do($sql);
+}
+$db->commit();
+$db->disconnect();
--- /dev/null	Fri Dec 21 15:00:17 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/fill_db_sql.pl	Fri Dec 21 15:00:17 2018
@@ -0,0 +1,49 @@
+#!/usr/bin/perl -w
+
+use strict;
+use DBI;
+
+my $project = shift;
+my $warns = shift;
+my $db_file = shift;
+
+if (!defined($warns)) {
+    print "usage:  $0 <-p=project> <smatch_warns.txt> <db_file>\n";
+    exit(1);
+}
+
+my $db = DBI->connect("dbi:SQLite:$db_file", "", "", {AutoCommit => 0});
+$db->do("PRAGMA cache_size = 800000");
+$db->do("PRAGMA journal_mode = OFF");
+$db->do("PRAGMA count_changes = OFF");
+$db->do("PRAGMA temp_store = MEMORY");
+$db->do("PRAGMA locking = EXCLUSIVE");
+
+my ($dummy, $sql);
+
+open(WARNS, "<$warns");
+while (<WARNS>) {
+
+    if (!($_ =~ /^.*? [^ ]*\(\) SQL: /)) {
+        next;
+    }
+    ($dummy, $dummy, $sql) = split(/:/, $_, 3);
+
+    $db->do($sql);
+}
+close(WARNS);
+
+open(WARNS, "<$warns");
+while (<WARNS>) {
+
+    if (!($_ =~ /^.*? [^ ]*\(\) SQL_late: /)) {
+        next;
+    }
+    ($dummy, $dummy, $sql) = split(/:/, $_, 3);
+
+    $db->do($sql);
+}
+close(WARNS);
+
+$db->commit();
+$db->disconnect();
--- /dev/null	Fri Dec 21 15:00:17 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/fill_db_type_size.pl	Fri Dec 21 15:00:17 2018
@@ -0,0 +1,185 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+use bigint;
+use DBI;
+use Data::Dumper;
+
+my $project = shift;
+my $warns = shift;
+my $db_file = shift;
+my $db = DBI->connect("dbi:SQLite:$db_file", "", "", {AutoCommit => 0});
+
+my $raw_line;
+
+sub text_to_int($)
+{
+    my $text = shift;
+
+    if ($text =~ /s64min/) {
+        return -(2**63);
+    } elsif ($text =~/s32min/) {
+        return -(2**31);
+    } elsif ($text =~ /s16min/) {
+        return -(2**15);
+    } elsif ($text =~ /s64max/) {
+        return 2**63 - 1;
+    } elsif ($text =~ /s32max/) {
+        return 2**31 - 1;
+    } elsif ($text =~ /s16max/) {
+        return 2**15 - 1;
+    } elsif ($text =~ /u64max/) {
+        return 2**62 - 1;
+    } elsif ($text =~ /u32max/) {
+        return 2**32 - 1;
+    } elsif ($text =~ /u16max/) {
+        return 2**16 - 1;
+    }
+    if ($text =~ /\((.*?)\)/) {
+        $text = $1;
+    }
+    if (!($text =~ /^[-0123456789]/)) {
+        return "NaN";
+    }
+
+    return int($text);
+}
+
+sub add_range($$$)
+{
+    my $union = shift;
+    my $min = shift;
+    my $max = shift;
+    my %range;
+    my @return_union;
+    my $added = 0;
+    my $check_next = 0;
+
+    $range{min} = $min;
+    $range{max} = $max;
+
+    foreach my $tmp (@$union) {
+        if ($added) {
+            push @return_union, $tmp;
+            next;
+        }
+
+        if ($range{max} < $tmp->{min}) {
+            push @return_union, \%range;
+            push @return_union, $tmp;
+            $added = 1;
+        } elsif ($range{min} <= $tmp->{min}) {
+            if ($range{max} <= $tmp->{max}) {
+                $range{max} = $tmp->{max};
+                push @return_union, \%range;
+                $added = 1;
+            }
+        } elsif ($range{min} <= $tmp->{max}) {
+            if ($range{max} <= $tmp->{max}) {
+                push @return_union, $tmp;
+                $added = 1;
+            } else {
+                $range{min} = $tmp->{min};
+            }
+        } else {
+            push @return_union, $tmp;
+        }
+    }
+
+    if (!$added) {
+        push @return_union, \%range;
+    }
+
+    return \@return_union;
+}
+
+sub print_num($)
+{
+    my $num = shift;
+
+    if ($num < 0) {
+        return "(" . $num . ")";
+    } else {
+        return $num;
+    }
+}
+
+sub print_range($)
+{
+    my $range = shift;
+
+    if ($range->{min} == $range->{max}) {
+        return print_num($range->{min});
+    } else {
+        return print_num($range->{min}) . "-" .  print_num($range->{max});
+    }
+}
+
+sub print_info($$)
+{
+    my $type = shift;
+    my $union = shift;
+    my $printed_range = "";
+    my $i = 0;
+
+    foreach my $range (@$union) {
+        if ($i) {
+            $printed_range = $printed_range . ",";
+        }
+        $i++;
+        $printed_range = $printed_range . print_range($range);
+    }
+    my $sql = "insert into type_size values ('$type', '$printed_range');";
+    $db->do($sql);
+}
+
+
+$db->do("PRAGMA cache_size = 800000");
+$db->do("PRAGMA journal_mode = OFF");
+$db->do("PRAGMA count_changes = OFF");
+$db->do("PRAGMA temp_store = MEMORY");
+$db->do("PRAGMA locking = EXCLUSIVE");
+
+my ($sth, @row, $cur_type, $type, @ranges, $range_txt, %range, $min, $max, $union_array, $skip);
+
+$sth = $db->prepare('select * from function_type_size order by type');
+$sth->execute();
+
+$skip = 0;
+$cur_type = "";
+while (@row = $sth->fetchrow_array()) {
+    $raw_line = join ',', @row;
+
+    $type = $row[2];
+
+    if ($cur_type ne "$type") {
+        if ($cur_type ne "" && $skip == 0) {
+            print_info($cur_type, $union_array);
+        }
+        $cur_type = $type;
+        $union_array = ();
+        $skip = 0;
+    }
+
+    @ranges = split(/,/, $row[3]);
+    foreach $range_txt (@ranges) {
+        if ($range_txt =~ /(.*[^(])-(.*)/) {
+            $min = text_to_int($1);
+            $max = text_to_int($2);
+        } else {
+            $min = text_to_int($range_txt);
+            $max = $min;
+        }
+        if ($min =~ /NaN/ || $max =~ /NaN/) {
+            $skip = 1;
+        }
+        $union_array = add_range($union_array, $min, $max);
+    }
+}
+if ($skip == 0) {
+    print_info($cur_type, $union_array);
+}
+
+$db->commit();
+$db->disconnect();
--- /dev/null	Fri Dec 21 15:00:17 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/fill_db_type_value.pl	Fri Dec 21 15:00:17 2018
@@ -0,0 +1,195 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+use bigint;
+use DBI;
+use Data::Dumper;
+
+
+my $project = shift;
+my $warns = shift;
+my $db_file = shift;
+my $db = DBI->connect("dbi:SQLite:$db_file", "", "", {AutoCommit => 0});
+
+sub text_to_int($)
+{
+    my $text = shift;
+
+    if ($text =~ /s64min/) {
+        return -(2**63);
+    } elsif ($text =~/s32min/) {
+        return -(2**31);
+    } elsif ($text =~ /s16min/) {
+        return -(2**15);
+    } elsif ($text =~ /s64max/) {
+        return 2**63 - 1;
+    } elsif ($text =~ /s32max/) {
+        return 2**31 - 1;
+    } elsif ($text =~ /s16max/) {
+        return 2**15 - 1;
+    } elsif ($text =~ /u64max/) {
+        return 2**64 - 1;
+    } elsif ($text =~ /u32max/) {
+        return 2**32 - 1;
+    } elsif ($text =~ /u16max/) {
+        return 2**16 - 1;
+    }
+    if ($text =~ /\((.*?)\)/) {
+        $text = $1;
+    }
+    if (!($text =~ /^[-0123456789]/)) {
+        return "NaN";
+    }
+
+    return int($text);
+}
+
+sub add_range($$$)
+{
+    my $union = shift;
+    my $min = shift;
+    my $max = shift;
+    my %range;
+    my @return_union;
+    my $added = 0;
+    my $check_next = 0;
+
+    $range{min} = $min;
+    $range{max} = $max;
+
+    foreach my $tmp (@$union) {
+        if ($added) {
+            push @return_union, $tmp;
+            next;
+        }
+
+        if ($range{max} < $tmp->{min}) {
+            push @return_union, \%range;
+            push @return_union, $tmp;
+            $added = 1;
+        } elsif ($range{min} <= $tmp->{min}) {
+            if ($range{max} <= $tmp->{max}) {
+                $range{max} = $tmp->{max};
+                push @return_union, \%range;
+                $added = 1;
+            }
+        } elsif ($range{min} <= $tmp->{max}) {
+            if ($range{max} <= $tmp->{max}) {
+                push @return_union, $tmp;
+                $added = 1;
+            } else {
+                $range{min} = $tmp->{min};
+            }
+        } else {
+            push @return_union, $tmp;
+        }
+    }
+
+    if (!$added) {
+        push @return_union, \%range;
+    }
+
+    return \@return_union;
+}
+
+sub print_num($)
+{
+    my $num = shift;
+
+    if ($num < 0) {
+        return "(" . $num . ")";
+    } else {
+        return $num;
+    }
+}
+
+sub print_range($)
+{
+    my $range = shift;
+
+    if ($range->{min} == $range->{max}) {
+        return print_num($range->{min});
+    } else {
+        return print_num($range->{min}) . "-" .  print_num($range->{max});
+    }
+}
+
+sub print_info($$)
+{
+    my $type = shift;
+    my $union = shift;
+    my $printed_range = "";
+    my $i = 0;
+
+    if ($#$union > 100) {
+        print "$type " . scalar @$union . "\n";
+        return;
+    }
+
+    foreach my $range (@$union) {
+        if ($i) {
+            $printed_range = $printed_range . ",";
+        }
+        $i++;
+        $printed_range = $printed_range . print_range($range);
+    }
+    my $sql = "insert into type_value values ('$type', '$printed_range');";
+    $db->do($sql);
+}
+
+
+$db->do("PRAGMA cache_size = 800000");
+$db->do("PRAGMA journal_mode = OFF");
+$db->do("PRAGMA count_changes = OFF");
+$db->do("PRAGMA temp_store = MEMORY");
+$db->do("PRAGMA locking = EXCLUSIVE");
+
+my ($sth, @row, $cur_type, $type, @ranges, $range_txt, %range, $min, $max, $union_array, $skip);
+
+$sth = $db->prepare('select type, value from function_type_value order by type');
+$sth->execute();
+
+$skip = 0;
+$cur_type = "";
+while (@row = $sth->fetchrow_array()) {
+    $type = $row[0];
+
+    if ($cur_type ne "$type") {
+        if ($cur_type ne "" && $skip == 0) {
+            print_info($cur_type, $union_array);
+        }
+        $cur_type = $type;
+        $union_array = ();
+        $skip = 0;
+    }
+
+    if ($skip == 1) {
+        next;
+    }
+
+    @ranges = split(/,/, $row[1]);
+    foreach $range_txt (@ranges) {
+        if ($range_txt =~ /ignore/) {
+            next;
+        }
+        if ($range_txt =~ /(.*[^(])-(.*)/) {
+            $min = text_to_int($1);
+            $max = text_to_int($2);
+        } else {
+            $min = text_to_int($range_txt);
+            $max = $min;
+        }
+        if ($min =~ /NaN/ || $max =~ /NaN/) {
+            $skip = 1;
+            last;
+        }
+        $union_array = add_range($union_array, $min, $max);
+    }
+}
+if ($skip == 0) {
+    print_info($cur_type, $union_array);
+}
+
+$db->commit();
+$db->disconnect();
--- /dev/null	Fri Dec 21 15:00:17 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/fixup_all.sh	Fri Dec 21 15:00:17 2018
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+db_file=$1
+cat << EOF | sqlite3 $db_file
+
+delete from return_states where function = 'strlen';
+delete from return_states where function = 'strnlen';
+delete from return_states where function = 'sprintf';
+delete from return_states where function = 'snprintf';
+
+EOF
+
--- /dev/null	Fri Dec 21 15:00:18 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/fixup_kernel.sh	Fri Dec 21 15:00:18 2018
@@ -0,0 +1,229 @@
+#!/bin/bash
+
+db_file=$1
+cat << EOF | sqlite3 $db_file
+/* we only care about the main ->read/write() functions. */
+delete from caller_info where function = '(struct file_operations)->read' and file != 'fs/read_write.c';
+delete from caller_info where function = '(struct file_operations)->write' and file != 'fs/read_write.c';
+delete from caller_info where function = '(struct file_operations)->read' and caller != '__vfs_read';
+delete from caller_info where function = '(struct file_operations)->write' and caller != '__vfs_write';
+delete from function_ptr where function = '(struct file_operations)->read';
+delete from function_ptr where function = '(struct file_operations)->write';
+delete from caller_info where function = '__vfs_write' and caller != 'vfs_write';
+delete from caller_info where function = '__vfs_read' and caller != 'vfs_read';
+delete from caller_info where function = '(struct file_operations)->write' and caller = 'do_loop_readv_writev';
+delete from caller_info where function = 'do_splice_from' and caller = 'direct_splice_actor';
+
+/* delete these function pointers which cause false positives */
+delete from caller_info where function = '(struct file_operations)->open' and type != 0;
+delete from caller_info where function = '(struct notifier_block)->notifier_call' and type != 0;
+delete from caller_info where function = '(struct mISDNchannel)->send' and type != 0;
+delete from caller_info where function = '(struct irq_router)->get' and type != 0;
+delete from caller_info where function = '(struct irq_router)->set' and type != 0;
+delete from caller_info where function = '(struct net_device_ops)->ndo_change_mtu' and caller = 'i40e_dbg_netdev_ops_write';
+delete from caller_info where function = '(struct timer_list)->function' and type != 0;
+
+/* type 1003 is USER_DATA */
+delete from caller_info where caller = 'hid_input_report' and type = 1003;
+delete from caller_info where caller = 'nes_process_iwarp_aeqe' and type = 1003;
+delete from caller_info where caller = 'oz_process_ep0_urb' and type = 1003;
+delete from caller_info where function = 'dev_hard_start_xmit' and key = '\$' and type = 1003;
+delete from caller_info where function like '%->ndo_start_xmit' and key = '\$' and type = 1003;
+delete from caller_info where caller = 'packet_rcv_fanout' and function = '(struct packet_type)->func' and parameter = 1 and type = 1003;
+delete from caller_info where caller = 'hptiop_probe' and type = 1003;
+delete from caller_info where caller = 'p9_fd_poll' and function = '(struct file_operations)->poll' and type = 1003;
+delete from caller_info where caller = 'proc_reg_poll' and function = 'proc_reg_poll ptr poll' and type = 1003;
+delete from caller_info where function = 'blkdev_ioctl' and type = 1003 and parameter = 0 and key = '\$';
+/* 9017 is USER_DATA3_SET */
+delete from return_states where function='vscnprintf' and type = 9017;
+delete from return_states where function='scnprintf' and type = 9017;
+delete from return_states where function='vsnprintf' and type = 9017;
+delete from return_states where function='snprintf' and type = 9017;
+delete from return_states where function='sprintf' and type = 9017;
+delete from return_states where function='vscnprintf' and type = 8017;
+delete from return_states where function='scnprintf' and type = 8017;
+delete from return_states where function='vsnprintf' and type = 8017;
+delete from return_states where function='snprintf' and type = 8017;
+delete from return_states where function='sprintf' and type = 8017;
+/* There is something setting skb->sk->sk_mark and friends to user_data and */
+/* because of recursion it gets passed to everything and is impossible to debug */
+delete from caller_info where function = '__dev_queue_xmit' and type = 8017;
+delete from caller_info where function = '__netdev_start_xmit' and type = 8017;
+/* comparison doesn't deal with chunks, I guess.  */
+delete from return_states where function='get_tty_driver' and type = 8017;
+delete from caller_info where caller = 'snd_ctl_elem_write' and function = '(struct snd_kcontrol)->put' and type = 8017;
+delete from caller_info where caller = 'snd_ctl_elem_read' and function = '(struct snd_kcontrol)->get' and type = 8017;
+delete from caller_info where function = 'nf_tables_newexpr' and type = 8017 and key = '\$->family';
+delete from caller_info where caller = 'fb_set_var' and function = '(struct fb_ops)->fb_set_par' and type = 8017 and parameter = 0;
+delete from return_states where function = 'tty_lookup_driver' and parameter = 2 and type = 8017;
+
+insert into caller_info values ('userspace', '', 'compat_sys_ioctl', 0, 0, 1003, 0, '\$', '1');
+insert into caller_info values ('userspace', '', 'compat_sys_ioctl', 0, 0, 1003, 1, '\$', '1');
+insert into caller_info values ('userspace', '', 'compat_sys_ioctl', 0, 0, 1003, 2, '\$', '1');
+
+delete from caller_info where function = '(struct timer_list)->function' and parameter = 0;
+
+/*
+ * rw_verify_area is a very central function for the kernel.  The 1000000000
+ * isn't accurate but I've picked it so that we can add "pos + count" without
+ * wrapping on 32 bits.
+ */
+delete from return_states where function = 'rw_verify_area';
+insert into return_states values ('faked', 'rw_verify_area', 0, 1, '0-1000000000[<=\$3]', 0, 0,   -1,      '', '');
+insert into return_states values ('faked', 'rw_verify_area', 0, 1, '0-1000000000[<=\$3]', 0, 104,  2, '*\$', '0-1000000000');
+insert into return_states values ('faked', 'rw_verify_area', 0, 1, '0-1000000000[<=\$3]', 0, 103, 3,  '\$', '0-1000000000');
+insert into return_states values ('faked', 'rw_verify_area', 0, 2, '(-4095)-(-1)',     0, 0,   -1,      '', '');
+
+delete from return_states where function = 'is_kernel_rodata';
+insert into return_states values ('faked', 'is_kernel_rodata', 0, 1, '1', 0, 0,   -1,  '', '');
+insert into return_states values ('faked', 'is_kernel_rodata', 0, 1, '1', 0, 103,  0,  '\$', '100000000-177777777');
+insert into return_states values ('faked', 'is_kernel_rodata', 0, 2, '0', 0, 0,   -1,  '', '');
+
+/*
+ * I am a bad person for doing this to __kmalloc() which is a very deep function
+ * and can easily be removed instead of to kmalloc().  But kmalloc() is an
+ * inline function so it ends up being recorded thousands of times in the
+ * database.  Doing this is easier.
+ *
+ */
+delete from return_states where function = '__kmalloc';
+insert into return_states values ('faked', '__kmalloc', 0, 1, '16', 0,    0,  -1, '', '');
+insert into return_states values ('faked', '__kmalloc', 0, 1, '16', 0, 103,   0, '\$', '0');
+insert into return_states values ('faked', '__kmalloc', 0, 2, '0,500000000-577777777', 0,    0, -1, '', '');
+insert into return_states values ('faked', '__kmalloc', 0, 2, '0,500000000-577777777', 0, 103,  0, '\$', '1-4000000');
+insert into return_states values ('faked', '__kmalloc', 0, 2, '0,500000000-577777777', 0, 1037,  -1, '', 400);
+insert into return_states values ('faked', '__kmalloc', 0, 3, '0', 0,    0,  -1, '', '');
+insert into return_states values ('faked', '__kmalloc', 0, 3, '0', 0,    103,  0, '\$', '4000000-long_max');
+
+/*
+ * Other kmalloc hacking.
+ */
+update return_states set return = '0,500000000-577777777' where function = 'kmalloc_slab' and return = 's64min-s64max';
+update return_states set return = '0,500000000-577777777' where function = 'slab_alloc_node' and return = 's64min-s64max';
+update return_states set return = '0,500000000-577777777' where function = 'kmalloc_large' and return != '0';
+update return_states set return = '0,500000000-577777777' where function = 'kmalloc_order_trace' and return != '0';
+
+delete from return_states where function = 'vmalloc';
+insert into return_states values ('faked', 'vmalloc', 0, 1, '0,600000000-677777777', 0,    0, -1, '', '');
+insert into return_states values ('faked', 'vmalloc', 0, 1, '0,600000000-677777777', 0, 103,  0, '\$', '1-128000000');
+insert into return_states values ('faked', 'vmalloc', 0, 2, '0', 0,    0,  -1, '', '');
+
+delete from return_states where function = 'ksize';
+insert into return_states values ('faked', 'ksize', 0, 1, '0', 0,    0, -1, '', '');
+insert into return_states values ('faked', 'ksize', 0, 1, '0', 0, 103,  0, '\$', '16');
+insert into return_states values ('faked', 'ksize', 0, 2, '1-4000000', 0,    0,  -1, '', '');
+
+/* store a bunch of capped functions */
+update return_states set return = '0-u32max[<=\$2]' where function = 'copy_to_user';
+update return_states set return = '0-u32max[<=\$2]' where function = '_copy_to_user';
+update return_states set return = '0-u32max[<=\$2]' where function = '__copy_to_user';
+update return_states set return = '0-u32max[<=\$2]' where function = 'copy_from_user';
+update return_states set return = '0-u32max[<=\$2]' where function = '_copy_from_user';
+update return_states set return = '0-u32max[<=\$2]' where function = '__copy_from_user';
+
+update return_states set return = '0-8' where function = '__arch_hweight8';
+update return_states set return = '0-16' where function = '__arch_hweight16';
+update return_states set return = '0-32' where function = '__arch_hweight32';
+update return_states set return = '0-64' where function = '__arch_hweight64';
+
+/*
+ * Preserve the value across byte swapping.  By the time we use it for math it
+ * will be byte swapped back to CPU endian.
+ */
+update return_states set return = '0-u64max[==\$0]' where function = '__fswab64';
+update return_states set return = '0-u32max[==\$0]' where function = '__fswab32';
+update return_states set return = '0-u16max[==\$0]' where function = '__fswab16';
+update return_states set return = '0-u64max[==\$0]' where function = '__builtin_bswap64';
+update return_states set return = '0-u32max[==\$0]' where function = '__builtin_bswap32';
+update return_states set return = '0-u16max[==\$0]' where function = '__builtin_bswap16';
+
+delete from return_states where function = 'bitmap_allocate_region' and return = '1';
+/* Just delete a lot of returns that everyone ignores */
+delete from return_states where file = 'drivers/pci/access.c' and (return >= 129 and return <= 137);
+
+update return_states set return = '(-4095)-s32max[<=\$1]' where function = 'get_user_pages' and return = 's32min-s32max';
+update return_states set return = '(-4095)-s64max[<=\$1]' where function = 'get_user_pages' and return = 's64min-s64max';
+
+/* Smatch can't parse wait_for_completion() */
+update return_states set return = '(-108),(-22),0' where function = '__spi_sync' and return = '(-115),(-108),(-22)';
+
+delete from caller_info where caller = '__kernel_write';
+
+/* We sometimes use pre-allocated 4097 byte buffers for performance critical code but pretend it is always PAGE_SIZE */
+update caller_info set value = 4096 where caller='kernfs_file_direct_read' and function='(struct kernfs_ops)->read' and type = 1002 and parameter = 1;
+/* let's pretend firewire doesn't exist */
+delete from caller_info where caller='init_fw_attribute_group' and function='(struct device_attribute)->show';
+/* and let's fake the next dev_attr_show() call entirely */
+delete from caller_info where caller='sysfs_kf_seq_show' and function='(struct sysfs_ops)->show';
+insert into caller_info values ('fake', 'sysfs_kf_seq_show', '(struct sysfs_ops)->show', 0, 0, 1001, 0, '\$', '4096-2117777777777777777');
+insert into caller_info values ('fake', 'sysfs_kf_seq_show', '(struct sysfs_ops)->show', 0, 0, 1002, 2, '\$', '4096');
+insert into caller_info values ('fake', 'sysfs_kf_seq_show', '(struct sysfs_ops)->show', 0, 0, 1001, 2, '\$', '4096-2117777777777777777');
+insert into caller_info values ('fake', 'sysfs_kf_seq_show', '(struct sysfs_ops)->show', 0, 0, 0,   -1, ''  , '');
+/* config fs confuses smatch a little */
+update caller_info set value = 4096 where caller='fill_read_buffer' and function='(struct configfs_item_operations)->show_attribute' and type = 1002 and parameter = 2;
+
+/* smatch sees the memset() but not the subsequent changes */
+update return_states set value = "" where function = 'gfs2_ea_find' and return = '0' and type = 101 and parameter = 3;
+
+delete from type_value where type = '(struct fd)->file';
+delete from type_value where type = '(struct fd)->flags';
+
+/* This is sometimes an enum or a u64 */
+delete from type_value where type = '(struct mc_cmd_header)->status';
+
+/* this is handled in check_kernel.c */
+delete from return_states where function = "__write_once_size";
+
+update return_states set value = "s32min-s32max[\$1]" where function = 'atomic_set' and parameter = 0 and type = 1025;
+
+/* handled in the check itself */
+delete from return_states where function = 'atomic_inc_return' and (type = 8023 or type = 8024);
+delete from return_states where function = 'atomic_add_return' and (type = 8023 or type = 8024);
+delete from return_states where function = 'atomic_sub_return' and (type = 8023 or type = 8024);
+delete from return_states where function = 'atomic_sub_and_test' and (type = 8023 or type = 8024);
+delete from return_states where function = 'atomic_dec_and_test' and (type = 8023 or type = 8024);
+delete from return_states where function = 'atomic_dec' and (type = 8023 or type = 8024);
+delete from return_states where function = 'atomic_inc' and (type = 8023 or type = 8024);
+delete from return_states where function = 'atomic_sub' and (type = 8023 or type = 8024);
+delete from return_states where function = 'refcount_add_not_zero' and (type = 8023 or type = 8024);
+delete from return_states where function = 'refcount_inc_not_zero' and (type = 8023 or type = 8024);
+delete from return_states where function = 'refcount_sub_and_test' and (type = 8023 or type = 8024);
+
+update return_states set return = '0-32,2147483648-2147483690' where function = '_parse_integer' and return = '0';
+update return_states set value = '0-u64max' where function = '_parse_integer' and type = 1025 and parameter = 2 and key = '*$';
+
+/* delete some function pointers which are sometimes byte units */
+delete from caller_info where function = '(struct i2c_algorithm)->master_xfer' and type = 1027;
+
+/* this if from READ_ONCE().  We can't know anything about the data.  */
+delete from type_info where key = '(union anonymous)->__val';
+
+EOF
+
+# fixme: this is totally broken
+call_id=$(echo "select distinct call_id from caller_info where function = '__kernel_write';" | sqlite3 $db_file)
+for id in $call_id ; do
+    echo "insert into caller_info values ('fake', '', '__kernel_write', $id, 0, 1003, 1, '*\$', '');" | sqlite3 $db_file
+done
+
+for i in $(echo "select distinct return from return_states where function = 'clear_user';" | sqlite3 $db_file ) ; do
+    echo "update return_states set return = \"$i[<=\$1]\" where return = \"$i\" and function = 'clear_user';" | sqlite3 $db_file
+done
+
+echo "select distinct file, function from function_ptr where ptr='(struct rtl_hal_ops)->set_hw_reg';" \
+        | sqlite3 $db_file | sed -e 's/|/ /' | while read file function ; do
+
+    drv=$(echo $file | perl -ne 's/.*\/rtlwifi\/(.*?)\/sw.c/$1/; print')
+    if [ $drv = "" ] ; then
+        continue
+    fi
+
+    echo "update caller_info
+          set function = '$drv (struct rtl_hal_ops)->set_hw_reg'
+          where function = '(struct rtl_hal_ops)->set_hw_reg' and file like 'drivers/net/wireless/rtlwifi/$drv/%';" \
+         | sqlite3 $db_file
+
+    echo "insert into function_ptr values ('$file', '$function', '$drv (struct rtl_hal_ops)->set_hw_reg', 1);" \
+         | sqlite3 $db_file
+done
+
No differences encountered
--- /dev/null	Fri Dec 21 15:00:18 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/fn_data_link.schema	Fri Dec 21 15:00:18 2018
@@ -0,0 +1,1 @@
+CREATE TABLE fn_data_link (file varchar(128), function varchar(64), static boolean, type integer, parameter integer, key varchar(256), value varchar(256));
--- /dev/null	Fri Dec 21 15:00:18 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/fn_ptr_data_link.schema	Fri Dec 21 15:00:18 2018
@@ -0,0 +1,1 @@
+CREATE TABLE fn_ptr_data_link (fn_ptr varchar(80), data varchar(80), CONSTRAINT unique_row UNIQUE (fn_ptr, data));
--- /dev/null	Fri Dec 21 15:00:18 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/function_ptr.schema	Fri Dec 21 15:00:18 2018
@@ -0,0 +1,1 @@
+CREATE TABLE function_ptr (file varchar(128), function varchar(64), ptr varchar(256), searchable integer);
--- /dev/null	Fri Dec 21 15:00:18 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/function_type.schema	Fri Dec 21 15:00:18 2018
@@ -0,0 +1,1 @@
+CREATE TABLE function_type (file varchar(80), function varchar(80), static boolean, parameter integer, value varchar(80));
--- /dev/null	Fri Dec 21 15:00:18 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/function_type_info.schema	Fri Dec 21 15:00:18 2018
@@ -0,0 +1,1 @@
+CREATE TABLE function_type_info (file varchar(128), function varchar(80), type integer, struct varchar(80), member varchar(80), value varchar(80));
--- /dev/null	Fri Dec 21 15:00:18 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/function_type_size.schema	Fri Dec 21 15:00:18 2018
@@ -0,0 +1,1 @@
+CREATE TABLE function_type_size (file varchar(128), function varchar(80), type varchar(80), size varchar(80));
--- /dev/null	Fri Dec 21 15:00:18 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/function_type_value.schema	Fri Dec 21 15:00:18 2018
@@ -0,0 +1,1 @@
+CREATE TABLE function_type_value (file varchar(128), function varchar(80), type varchar(80), value varchar(80));
--- /dev/null	Fri Dec 21 15:00:18 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/init_constraints.pl	Fri Dec 21 15:00:18 2018
@@ -0,0 +1,79 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+use bigint;
+use DBI;
+use Data::Dumper;
+use File::Basename;
+use Try::Tiny;
+
+my $project = shift;
+$project =~ s/.*=(.*)/$1/;
+my $warns = shift;
+my $db_file = shift;
+
+sub preserve_existing_constraints()
+{
+    if (! -e "smatch_db.sqlite") {
+        return;
+    }
+
+    my $db = DBI->connect("dbi:SQLite:$db_file", "", "",);
+    $db->do('attach "smatch_db.sqlite" as old_db');
+    $db->do('insert into constraints select * from old_db.constraints');
+    $db->disconnect();
+}
+
+my $db;
+
+sub connect_to_db($)
+{
+    my $name = shift;
+
+    $db = DBI->connect("dbi:SQLite:$name", "", "", {AutoCommit => 0});
+
+    $db->do("PRAGMA cache_size = 800000");
+    $db->do("PRAGMA journal_mode = OFF");
+    $db->do("PRAGMA count_changes = OFF");
+    $db->do("PRAGMA temp_store = MEMORY");
+    $db->do("PRAGMA locking = EXCLUSIVE");
+}
+
+sub load_manual_constraints($$)
+{
+    my $full_path = shift;
+    my $project = shift;
+    my $dir = dirname($full_path);
+
+    open(FILE, "$dir/$project.constraints");
+    while (<FILE>) {
+        s/\n//;
+        $db->do("insert or ignore into constraints (str) values ('$_')");
+    }
+    close(FILE);
+
+    open(FILE, "$dir/$project.constraints_required");
+    while (<FILE>) {
+        my $limit;
+        my $dummy;
+
+        ($dummy, $dummy, $limit) = split(/,/);
+        $limit =~ s/^ +//;
+        $limit =~ s/\n//;
+        try {
+            $db->do("insert or ignore into constraints (str) values ('$limit')");
+        } catch {}
+    }
+    close(FILE);
+
+    $db->commit();
+}
+
+preserve_existing_constraints();
+
+connect_to_db($db_file);
+load_manual_constraints($0, $project);
+
+$db->commit();
+$db->disconnect();
--- /dev/null	Fri Dec 21 15:00:18 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/init_constraints_required.pl	Fri Dec 21 15:00:18 2018
@@ -0,0 +1,54 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+use bigint;
+use DBI;
+use Data::Dumper;
+use File::Basename;
+
+my $project = shift;
+$project =~ s/.*=(.*)/$1/;
+my $warns = shift;
+my $db_file = shift;
+
+my $db;
+
+sub connect_to_db($)
+{
+    my $name = shift;
+
+    $db = DBI->connect("dbi:SQLite:$name", "", "", {AutoCommit => 0});
+
+    $db->do("PRAGMA cache_size = 800000");
+    $db->do("PRAGMA journal_mode = OFF");
+    $db->do("PRAGMA count_changes = OFF");
+    $db->do("PRAGMA temp_store = MEMORY");
+    $db->do("PRAGMA locking = EXCLUSIVE");
+}
+
+sub load_manual_constraints($$)
+{
+    my $full_path = shift;
+    my $project = shift;
+    my $dir = dirname($full_path);
+    my ($data, $op, $limit);
+
+    open(FILE, "$dir/$project.constraints_required");
+    while (<FILE>) {
+        ($data, $op, $limit) = split(/,/);
+        $op =~ s/ //g;
+        $limit =~ s/^ +//;
+        $limit =~ s/\n//;
+        $db->do("insert into constraints_required values (?, ?, ?);", undef, $data, $op, $limit);
+    }
+    close(FILE);
+
+    $db->commit();
+}
+
+connect_to_db($db_file);
+load_manual_constraints($0, $project);
+
+$db->commit();
+$db->disconnect();
--- /dev/null	Fri Dec 21 15:00:18 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/kernel.constraints	Fri Dec 21 15:00:18 2018
@@ -0,0 +1,1 @@
+trusted
--- /dev/null	Fri Dec 21 15:00:18 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/kernel.constraints_required	Fri Dec 21 15:00:18 2018
@@ -0,0 +1,4 @@
+(struct seq_oss_devinfo)->synths, <, (struct seq_oss_devinfo)->max_synthdev
+(struct hid_report)->field, <, (struct hid_report)->maxfield
+(struct pidff_device)->pid_id, <, (struct ff_device)->max_effects
+(struct usb_mixer_elem_info)->cache_val, <, (struct snd_ctl_elem_id)->index
--- /dev/null	Fri Dec 21 15:00:19 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/kernel.return_fixes	Fri Dec 21 15:00:19 2018
@@ -0,0 +1,34 @@
+i2c_master_recv s32min-s32max 1-s32max[<=$2]
+i2c_master_recv s32min-0,2-s32max 1-s32max[<=$2]
+hid_hw_output_report s32min-s32max 1-s32max[<=$2]
+_regmap_read s32min-(-1),1-s32max (-4095)-(-1)
+regmap_bulk_read s32min-(-1),1-s32max (-4095)-(-1)
+scnprintf s32min-s32max 0-s32max[<$1]
+scnprintf s32min-(-2),0-2147483646[<$1] 0-s32max[<$1]
+scnprintf s32min-(-2),0-2147483646 0-s32max[<$1]
+scnprintf s32min-s32max[<=$1] 0-s32max[<$1]
+scnprintf 0-s32max 0-s32max[<$1]
+vscnprintf s32min-(-2),0-s32max[<$1] 0-s32max[<$1]
+down_interruptible s32min-s32max (-62),(-4)
+__sock_create s32min-(-1),1-s32max (-4095)-(-1)
+sock_create_kern s32min-(-1),1-s32max (-4095)-(-1)
+nilfs_cpfile_get_checkpoint_block s32min-(-18),(-16)-s32max (-4095)-(-18),(-16)-(-1)
+nilfs_cpfile_get_checkpoint_block s32min-(-18),(-16)-(-3),(-1),1-s32max (-4095)-(-18),(-16)-(-3),(-1)
+nilfs_mdt_insert_new_block s32min-(-23),(-21)-(-1),1-s32max (-4095)-(-23),(-21)-(-1)
+simple_write_to_buffer s64min-s64max 0-s32max[<=$1]
+atomic_read s32min-s32max s32min-s32max[==$0->counter]
+notifier_to_errno (-2147483646)-(-1) (-4095)-(-1)
+mc_status_to_error s32min-s32max (-4095)-0
+dma_fence_wait_timeout s64min-s64max (-4095)-s64max
+dma_fence_wait_timeout s32min-s32max (-4095)-s32max
+fls s32min-s32max 0-32
+fls64 s64min-s64max 0-64
+__bitmap_weight s32min-s32max 0-s32max[<=$1]
+__bitmap_weight 0-s32max 0-s32max[<=$1]
+__ffs 0-u64max 0-63
+__ffs 0-u32max 0-31
+__spi_sync (-524),(-115),(-108),(-22) (-4095)-0
+tpm_tis_spi_read_bytes s32min-s32max (-4095)-0
+__irq_domain_activate_irq s32min-s32max (-4095)-0
+get_user_pages_fast s32min-s32max 1-s32max[<$1]
+__nci_request s32min-s32max (-4095)-0
--- /dev/null	Fri Dec 21 15:00:19 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/local_values.schema	Fri Dec 21 15:00:19 2018
@@ -0,0 +1,1 @@
+CREATE TABLE local_values (file varchar(128), variable varchar(64), value varchar(256));
--- /dev/null	Fri Dec 21 15:00:19 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/mark_function_ptrs_searchable.pl	Fri Dec 21 15:00:19 2018
@@ -0,0 +1,50 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+use bigint;
+use DBI;
+use Data::Dumper;
+
+my $db_file = shift;
+my $db = DBI->connect("dbi:SQLite:$db_file", "", "", {AutoCommit => 0});
+
+$db->do("PRAGMA cache_size = 800000");
+$db->do("PRAGMA journal_mode = OFF");
+$db->do("PRAGMA count_changes = OFF");
+$db->do("PRAGMA temp_store = MEMORY");
+$db->do("PRAGMA locking = EXCLUSIVE");
+
+my ($update, $sth, $fn_ptr, $ptr_to_ptr, $count);
+
+$update = $db->prepare_cached('UPDATE function_ptr set searchable = 1 where ptr = ?');
+$sth = $db->prepare('select distinct(ptr) from function_ptr;');
+$sth->execute();
+
+while ($fn_ptr = $sth->fetchrow_array()) {
+
+    # following a pointer to pointer chain is too complicated for now
+    $ptr_to_ptr = $db->selectrow_array("select function from function_ptr where ptr = '$fn_ptr' and function like '% %';");
+    if ($ptr_to_ptr) {
+        next;
+    }
+    $ptr_to_ptr = $db->selectrow_array("select function from function_ptr where ptr = '$fn_ptr' and function like '%[]';");
+    if ($ptr_to_ptr) {
+        next;
+    }
+
+    $count = $db->selectrow_array("select count(*) from return_states join function_ptr where return_states.function == function_ptr.function and ptr = '$fn_ptr';");
+    # if there are too many states then bail
+    if ($count > 1000) {
+        next;
+    }
+    # if there are no states at all then don't bother recording
+    if ($count == 0) {
+        next;
+    }
+
+    $update->execute($fn_ptr);
+}
+
+$db->commit();
+$db->disconnect();
--- /dev/null	Fri Dec 21 15:00:19 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/mtag_about.schema	Fri Dec 21 15:00:19 2018
@@ -0,0 +1,1 @@
+CREATE TABLE mtag_about (tag big int, file varchar(80), function varchar(80), line integer, left_name varchar(80), right_name varchar(80));
--- /dev/null	Fri Dec 21 15:00:19 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/mtag_alias.schema	Fri Dec 21 15:00:19 2018
@@ -0,0 +1,1 @@
+CREATE TABLE mtag_alias (orig big int, new big int);
--- /dev/null	Fri Dec 21 15:00:19 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/mtag_data.schema	Fri Dec 21 15:00:19 2018
@@ -0,0 +1,1 @@
+CREATE TABLE mtag_data (tag big int, offset integer, type integer, value varchar(80));
--- /dev/null	Fri Dec 21 15:00:19 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/mtag_map.schema	Fri Dec 21 15:00:19 2018
@@ -0,0 +1,1 @@
+CREATE TABLE mtag_map (tag big int, offset integer, container big int);
--- /dev/null	Fri Dec 21 15:00:19 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/param_map.schema	Fri Dec 21 15:00:19 2018
@@ -0,0 +1,1 @@
+CREATE TABLE param_map (file varchar(256), to_from bool, fn_ptr varchar(80), parameter integer, source varchar(80));
--- /dev/null	Fri Dec 21 15:00:19 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/parameter_name.schema	Fri Dec 21 15:00:19 2018
@@ -0,0 +1,1 @@
+CREATE TABLE parameter_name (file varchar(80), function varchar(80), static boolean, parameter integer, value varchar(80));
--- /dev/null	Fri Dec 21 15:00:19 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/reload_partial.sh	Fri Dec 21 15:00:19 2018
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+if echo $1 | grep -q '^-p' ; then
+    PROJ=$(echo $1 | cut -d = -f 2)
+    shift
+fi
+
+info_file=$1
+
+if [[ "$info_file" = "" ]] ; then
+    echo "Usage:  $0 -p=<project> <file with smatch messages>"
+    exit 1
+fi
+
+bin_dir=$(dirname $0)
+db_file=smatch_db.sqlite
+
+files=$(grep "insert into caller_info" $info_file | cut -d : -f 1 | sort -u)
+for c_file in $files; do
+    echo "FILE $c_file"
+    echo "delete from caller_info where file = '$c_file';" | sqlite3 $db_file
+    echo "delete from return_states where file = '$c_file';" | sqlite3 $db_file
+    echo "delete from call_implies where file = '$c_file';" | sqlite3 $db_file
+    echo "delete from return_implies where file = '$c_file';" | sqlite3 $db_file
+done
+
+tmp_file=$(mktemp)
+
+grep "insert into caller_info" $info_file > $tmp_file
+${bin_dir}/fill_db_caller_info.pl "$PROJ" $tmp_file $db_file
+
+grep "insert into return_states" $info_file > $tmp_file
+${bin_dir}/fill_db_sql.pl "$PROJ" $tmp_file $db_file
+
+grep "into call_implies" $info_file > $tmp_file
+${bin_dir}/fill_db_sql.pl "$PROJ" $tmp_file $db_file
+
+grep "into return_implies" $info_file > $tmp_file
+${bin_dir}/fill_db_sql.pl "$PROJ" $tmp_file $db_file
+
+rm $tmp_file
+
+${bin_dir}/fixup_all.sh $db_file
+if [ "$PROJ" != "" ] ; then
+    ${bin_dir}/fixup_${PROJ}.sh $db_file
+fi
+
--- /dev/null	Fri Dec 21 15:00:19 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/remove_mixed_up_pointer_params.pl	Fri Dec 21 15:00:19 2018
@@ -0,0 +1,50 @@
+#!/usr/bin/perl -w
+
+use strict;
+use warnings;
+use bigint;
+use DBI;
+use Data::Dumper;
+
+my $db_file = shift;
+my $db = DBI->connect("dbi:SQLite:$db_file", "", "", {AutoCommit => 0});
+
+$db->do("PRAGMA cache_size = 800000");
+$db->do("PRAGMA journal_mode = OFF");
+$db->do("PRAGMA count_changes = OFF");
+$db->do("PRAGMA temp_store = MEMORY");
+$db->do("PRAGMA locking = EXCLUSIVE");
+
+my ($select, $select_type, $remove, $file, $caller, $function, $param, $src_param, $value, $type);
+
+$remove = $db->prepare_cached('DELETE FROM caller_info WHERE file = ? AND caller = ? AND function = ? AND parameter = ? AND type != 1014');
+$select = $db->prepare('SELECT file, caller, function, parameter, value FROM caller_info WHERE function LIKE "% param %" AND type = 1014 AND value LIKE "p %"');
+$select_type = $db->prepare_cached('SELECT value from function_type WHERE file = ? AND function = ? AND parameter = ? limit 1');
+$select->execute();
+
+while (($file, $caller, $function, $param, $value) = $select->fetchrow_array()) {
+
+    if ($value =~ /p (.*)/) {
+        $src_param = $1;
+    } else {
+        print "error:  unexpected source parameter $value\n";
+        next;
+    }
+
+    $select_type->execute($file, $caller, $src_param);
+    $type = $select_type->fetchrow_array();
+    if (!$type) {
+        next;
+    }
+    #FIXME: Why is this extra fetch() needed???
+    $select_type->fetch();
+
+    if (!($type =~ /^void\*$/) && !($type =~ /^ulong$/)) {
+        next;
+    }
+
+    $remove->execute($file, $caller, $function, $param);
+}
+
+$db->commit();
+$db->disconnect();
--- /dev/null	Fri Dec 21 15:00:19 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/return_implies.schema	Fri Dec 21 15:00:19 2018
@@ -0,0 +1,12 @@
+CREATE TABLE return_implies (
+	file varchar(128),
+	function varchar(64),
+	call_id integer,
+	static boolean,
+	type integer,
+	parameter integer,
+	key varchar(256),
+	value varchar(256),
+
+	CONSTRAINT implies_row UNIQUE (file, function, call_id, static, type, parameter, key, value)
+);
--- /dev/null	Fri Dec 21 15:00:19 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/return_states.schema	Fri Dec 21 15:00:19 2018
@@ -0,0 +1,1 @@
+CREATE TABLE return_states (file varchar(128), function varchar(64), call_id integer, return_id integer, return varchar(256), static boolean, type integer, parameter integer, key varchar(256), value varchar(256));
--- /dev/null	Fri Dec 21 15:00:20 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/sink_info.schema	Fri Dec 21 15:00:20 2018
@@ -0,0 +1,1 @@
+CREATE TABLE sink_info (file varchar(128), static boolean, sink_name varchar(64), type integer, key varchar(256), value varchar(256));
--- /dev/null	Fri Dec 21 15:00:20 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/smdb.py	Fri Dec 21 15:00:20 2018
@@ -0,0 +1,668 @@
+#!/usr/bin/python
+
+# Copyright (C) 2013 Oracle.
+#
+# Licensed under the Open Software License version 1.1
+
+import sqlite3
+import sys
+import re
+
+try:
+    con = sqlite3.connect('smatch_db.sqlite')
+except sqlite3.Error, e:
+    print "Error %s:" % e.args[0]
+    sys.exit(1)
+
+def usage():
+    print "%s" %(sys.argv[0])
+    print "<function> - how a function is called"
+    print "return_states <function> - what a function returns"
+    print "call_tree <function> - show the call tree"
+    print "where <struct_type> <member> - where a struct member is set"
+    print "type_size <struct_type> <member> - how a struct member is allocated"
+    print "data_info <struct_type> <member> - information about a given data type"
+    print "function_ptr <function> - which function pointers point to this"
+    print "trace_param <function> <param> - trace where a parameter came from"
+    print "locals <file> - print the local values in a file."
+    sys.exit(1)
+
+function_ptrs = []
+searched_ptrs = []
+def get_function_pointers_helper(func):
+    cur = con.cursor()
+    cur.execute("select distinct ptr from function_ptr where function = '%s';" %(func))
+    for row in cur:
+        ptr = row[0]
+        if ptr in function_ptrs:
+            continue
+        function_ptrs.append(ptr)
+        if not ptr in searched_ptrs:
+            searched_ptrs.append(ptr)
+            get_function_pointers_helper(ptr)
+
+def get_function_pointers(func):
+    global function_ptrs
+    global searched_ptrs
+    function_ptrs = [func]
+    searched_ptrs = [func]
+    get_function_pointers_helper(func)
+    return function_ptrs
+
+db_types = {   0: "INTERNAL",
+             101: "PARAM_CLEARED",
+             103: "PARAM_LIMIT",
+             104: "PARAM_FILTER",
+            1001: "PARAM_VALUE",
+            1002: "BUF_SIZE",
+            1003: "USER_DATA",
+            1004: "CAPPED_DATA",
+            1005: "RETURN_VALUE",
+            1006: "DEREFERENCE",
+            1007: "RANGE_CAP",
+            1008: "LOCK_HELD",
+            1009: "LOCK_RELEASED",
+            1010: "ABSOLUTE_LIMITS",
+            1012: "PARAM_ADD",
+            1013: "PARAM_FREED",
+            1014: "DATA_SOURCE",
+            1015: "FUZZY_MAX",
+            1016: "STR_LEN",
+            1017: "ARRAY_LEN",
+            1018: "CAPABLE",
+            1019: "NS_CAPABLE",
+            1022: "TYPE_LINK",
+            1023: "UNTRACKED_PARAM",
+            1024: "CULL_PATH",
+            1025: "PARAM_SET",
+            1026: "PARAM_USED",
+            1027: "BYTE_UNITS",
+            1028: "COMPARE_LIMIT",
+            1029: "PARAM_COMPARE",
+            8017: "USER_DATA2",
+            8018: "NO_OVERFLOW",
+            8019: "NO_OVERFLOW_SIMPLE",
+            8020: "LOCKED",
+            8021: "UNLOCKED",
+            8023: "ATOMIC_INC",
+            8024: "ATOMIC_DEC",
+};
+
+def add_range(rl, min_val, max_val):
+    check_next = 0
+    done = 0
+    ret = []
+    idx = 0
+
+    if len(rl) == 0:
+        return [[min_val, max_val]]
+
+    for idx in range(len(rl)):
+        cur_min = rl[idx][0]
+        cur_max = rl[idx][1]
+
+        # we already merged the new range but we might need to change later
+        # ranges if they over lap with more than one
+        if check_next:
+            # join with added range
+            if max_val + 1 == cur_min:
+                ret[len(ret) - 1][1] = cur_max
+                done = 1
+                break
+            # don't overlap
+            if max_val < cur_min:
+                ret.append([cur_min, cur_max])
+                done = 1
+                break
+            # partially overlap
+            if max_val < cur_max:
+                ret[len(ret) - 1][1] = cur_max
+                done = 1
+                break
+            # completely overlap
+            continue
+
+        # join 2 ranges into one
+        if max_val + 1 == cur_min:
+            ret.append([min_val, cur_max])
+            done = 1
+            break
+        # range is entirely below
+        if max_val < cur_min:
+            ret.append([min_val, max_val])
+            ret.append([cur_min, cur_max])
+            done = 1
+            break
+        # range is partially below
+        if min_val < cur_min:
+            if max_val <= cur_max:
+                ret.append([min_val, cur_max])
+                done = 1
+                break
+            else:
+                ret.append([min_val, max_val])
+                check_next = 1
+                continue
+        # range already included
+        if max_val <= cur_max:
+            ret.append([cur_min, cur_max])
+            done = 1
+            break;
+        # range partially above
+        if min_val <= cur_max:
+            ret.append([cur_min, max_val])
+            check_next = 1
+            continue
+        # join 2 ranges on the other side
+        if min_val - 1 == cur_max:
+            ret.append([cur_min, max_val])
+            check_next = 1
+            continue
+        # range is above
+        ret.append([cur_min, cur_max])
+
+    if idx + 1 < len(rl):          # we hit a break statement
+        ret = ret + rl[idx + 1:]
+    elif done:                     # we hit a break on the last iteration
+        pass
+    elif not check_next:           # it's past the end of the rl
+        ret.append([min_val, max_val])
+
+    return ret;
+
+def rl_union(rl1, rl2):
+    ret = []
+    for r in rl1:
+        ret = add_range(ret, r[0], r[1])
+    for r in rl2:
+        ret = add_range(ret, r[0], r[1])
+
+    if (rl1 or rl2) and not ret:
+        print "bug: merging %s + %s gives empty" %(rl1, rl2)
+
+    return ret
+
+def txt_to_val(txt):
+    if txt == "s64min":
+        return -(2**63)
+    elif txt == "s32min":
+        return -(2**31)
+    elif txt == "s16min":
+        return -(2**15)
+    elif txt == "s64max":
+        return 2**63 - 1
+    elif txt == "s32max":
+        return 2**31 - 1
+    elif txt == "s16max":
+        return 2**15 - 1
+    elif txt == "u64max":
+        return 2**64 - 1
+    elif txt == "u32max":
+        return 2**32 - 1
+    elif txt == "u16max":
+        return 2**16 - 1
+    else:
+        try:
+            return int(txt)
+        except ValueError:
+            return 0
+
+def val_to_txt(val):
+    if val == -(2**63):
+        return "s64min"
+    elif val == -(2**31):
+        return "s32min"
+    elif val == -(2**15):
+        return "s16min"
+    elif val == 2**63 - 1:
+        return "s64max"
+    elif val == 2**31 - 1:
+        return "s32max"
+    elif val == 2**15 - 1:
+        return "s16max"
+    elif val == 2**64 - 1:
+        return "u64max"
+    elif val == 2**32 - 1:
+        return "u32max"
+    elif val == 2**16 - 1:
+        return "u16max"
+    elif val < 0:
+        return "(%d)" %(val)
+    else:
+        return "%d" %(val)
+
+def get_next_str(txt):
+    val = ""
+    parsed = 0
+
+    if txt[0] == '(':
+        parsed += 1
+        for char in txt[1:]:
+            if char == ')':
+                break
+            parsed += 1
+        val = txt[1:parsed]
+        parsed += 1
+    elif txt[0] == 's' or txt[0] == 'u':
+        parsed += 6
+        val = txt[:parsed]
+    else:
+        if txt[0] == '-':
+            parsed += 1
+        for char in txt[parsed:]:
+            if char == '-':
+                break
+            parsed += 1
+        val = txt[:parsed]
+    return [parsed, val]
+
+def txt_to_rl(txt):
+    if len(txt) == 0:
+        return []
+
+    ret = []
+    pairs = txt.split(",")
+    for pair in pairs:
+        cnt, min_str = get_next_str(pair)
+        if cnt == len(pair):
+            max_str = min_str
+        else:
+            cnt, max_str = get_next_str(pair[cnt + 1:])
+        min_val = txt_to_val(min_str)
+        max_val = txt_to_val(max_str)
+        ret.append([min_val, max_val])
+
+#    Hm...  Smatch won't call INT_MAX s32max if the variable is unsigned.
+#    if txt != rl_to_txt(ret):
+#        print "bug: converting: text = %s rl = %s internal = %s" %(txt, rl_to_txt(ret), ret)
+
+    return ret
+
+def rl_to_txt(rl):
+    ret = ""
+    for idx in range(len(rl)):
+        cur_min = rl[idx][0]
+        cur_max = rl[idx][1]
+
+        if idx != 0:
+            ret += ","
+
+        if cur_min == cur_max:
+            ret += val_to_txt(cur_min)
+        else:
+            ret += val_to_txt(cur_min)
+            ret += "-"
+            ret += val_to_txt(cur_max)
+    return ret
+
+def type_to_str(type_int):
+
+    t = int(type_int)
+    if db_types.has_key(t):
+        return db_types[t]
+    return type_int
+
+def type_to_int(type_string):
+    for k in db_types.keys():
+        if db_types[k] == type_string:
+            return k
+    return -1
+
+def display_caller_info(printed, cur, param_names):
+    for txt in cur:
+        if not printed:
+            print "file | caller | function | type | parameter | key | value |"
+        printed = 1
+
+        parameter = int(txt[6])
+        key = txt[7]
+        if len(param_names) and parameter in param_names:
+            key = key.replace("$", param_names[parameter])
+
+        print "%20s | %20s | %20s |" %(txt[0], txt[1], txt[2]),
+        print " %10s |" %(type_to_str(txt[5])),
+        print " %d | %s | %s" %(parameter, key, txt[8])
+    return printed
+
+def get_caller_info(filename, ptrs, my_type):
+    cur = con.cursor()
+    param_names = get_param_names(filename, func)
+    printed = 0
+    type_filter = ""
+    if my_type != "":
+        type_filter = "and type = %d" %(type_to_int(my_type))
+    for ptr in ptrs:
+        cur.execute("select * from caller_info where function = '%s' %s;" %(ptr, type_filter))
+        printed = display_caller_info(printed, cur, param_names)
+
+def print_caller_info(filename, func, my_type = ""):
+    ptrs = get_function_pointers(func)
+    get_caller_info(filename, ptrs, my_type)
+
+def merge_values(param_names, vals, cur):
+    for txt in cur:
+        parameter = int(txt[0])
+        name = txt[1]
+        rl = txt_to_rl(txt[2])
+        if parameter in param_names:
+            name = name.replace("$", param_names[parameter])
+
+        if not parameter in vals:
+            vals[parameter] = {}
+
+        # the first item on the list is the number of rows.  it's incremented
+        # every time we call merge_values().
+        if name in vals[parameter]:
+            vals[parameter][name] = [vals[parameter][name][0] + 1, rl_union(vals[parameter][name][1], rl)]
+        else:
+            vals[parameter][name] = [1, rl]
+
+def get_param_names(filename, func):
+    cur = con.cursor()
+    param_names = {}
+    cur.execute("select parameter, value from parameter_name where file = '%s' and function = '%s';" %(filename, func))
+    for txt in cur:
+        parameter = int(txt[0])
+        name = txt[1]
+        param_names[parameter] = name
+    if len(param_names):
+        return param_names
+
+    cur.execute("select parameter, value from parameter_name where function = '%s';" %(func))
+    for txt in cur:
+        parameter = int(txt[0])
+        name = txt[1]
+        param_names[parameter] = name
+    return param_names
+
+def get_caller_count(ptrs):
+    cur = con.cursor()
+    count = 0
+    for ptr in ptrs:
+        cur.execute("select count(distinct(call_id)) from caller_info where function = '%s';" %(ptr))
+        for txt in cur:
+            count += int(txt[0])
+    return count
+
+def print_merged_caller_values(filename, func, ptrs, param_names, call_cnt):
+    cur = con.cursor()
+    vals = {}
+    for ptr in ptrs:
+        cur.execute("select parameter, key, value from caller_info where function = '%s' and type = %d;" %(ptr, type_to_int("PARAM_VALUE")))
+        merge_values(param_names, vals, cur);
+
+    for param in sorted(vals):
+        for name in sorted(vals[param]):
+            if vals[param][name][0] != call_cnt:
+                continue
+            print "%d %s -> %s" %(param, name, rl_to_txt(vals[param][name][1]))
+
+
+def print_unmerged_caller_values(filename, func, ptrs, param_names):
+    cur = con.cursor()
+    for ptr in ptrs:
+        prev = -1
+        cur.execute("select file, caller, call_id, parameter, key, value from caller_info where function = '%s' and type = %d;" %(ptr, type_to_int("PARAM_VALUE")))
+        for filename, caller, call_id, parameter, name, value in cur:
+            if prev != int(call_id):
+                prev = int(call_id)
+
+            parameter = int(parameter)
+            if parameter < len(param_names):
+                name = name.replace("$", param_names[parameter])
+            else:
+                name = name.replace("$", "$%d" %(parameter))
+
+            print "%s | %s | %s | %s" %(filename, caller, name, value)
+        print "=========================="
+
+def print_caller_values(filename, func, ptrs):
+    param_names = get_param_names(filename, func)
+    call_cnt = get_caller_count(ptrs)
+
+    print_merged_caller_values(filename, func, ptrs, param_names, call_cnt)
+    print "=========================="
+    print_unmerged_caller_values(filename, func, ptrs, param_names)
+
+def caller_info_values(filename, func):
+    ptrs = get_function_pointers(func)
+    print_caller_values(filename, func, ptrs)
+
+def print_return_states(func):
+    cur = con.cursor()
+    cur.execute("select * from return_states where function = '%s';" %(func))
+    count = 0
+    for txt in cur:
+        printed = 1
+        if count == 0:
+            print "file | function | return_id | return_value | type | param | key | value |"
+        count += 1
+        print "%s | %s | %2s | %13s" %(txt[0], txt[1], txt[3], txt[4]),
+        print "| %13s |" %(type_to_str(txt[6])),
+        print " %2d | %20s | %20s |" %(txt[7], txt[8], txt[9])
+
+def print_return_implies(func):
+    cur = con.cursor()
+    cur.execute("select * from return_implies where function = '%s';" %(func))
+    count = 0
+    for txt in cur:
+        if not count:
+            print "file | function | type | param | key | value |"
+        count += 1
+        print "%15s | %15s" %(txt[0], txt[1]),
+        print "| %15s" %(type_to_str(txt[4])),
+        print "| %3d | %s | %15s |" %(txt[5], txt[6], txt[7])
+
+def print_type_size(struct_type, member):
+    cur = con.cursor()
+    cur.execute("select * from type_size where type like '(struct %s)->%s';" %(struct_type, member))
+    print "type | size"
+    for txt in cur:
+        print "%-15s | %s" %(txt[0], txt[1])
+
+    cur.execute("select * from function_type_size where type like '(struct %s)->%s';" %(struct_type, member))
+    print "file | function | type | size"
+    for txt in cur:
+        print "%-15s | %-15s | %-15s | %s" %(txt[0], txt[1], txt[2], txt[3])
+
+def print_data_info(struct_type, member):
+    cur = con.cursor()
+    cur.execute("select * from data_info where data like '(struct %s)->%s';" %(struct_type, member))
+    print "file | data | type | value"
+    for txt in cur:
+        print "%-15s | %-15s | %-15s | %s" %(txt[0], txt[1], type_to_str(txt[2]), txt[3])
+
+def print_fn_ptrs(func):
+    ptrs = get_function_pointers(func)
+    if not ptrs:
+        return
+    print "%s = " %(func),
+    print(ptrs)
+
+def print_functions(member):
+    cur = con.cursor()
+    cur.execute("select * from function_ptr where ptr like '%%->%s';" %(member))
+    print "File | Pointer | Function | Static"
+    for txt in cur:
+        print "%-15s | %-15s | %-15s | %s" %(txt[0], txt[2], txt[1], txt[3])
+
+def get_callers(func):
+    ret = []
+    cur = con.cursor()
+    ptrs = get_function_pointers(func)
+    for ptr in ptrs:
+        cur.execute("select distinct caller from caller_info where function = '%s';" %(ptr))
+        for row in cur:
+            ret.append(row[0])
+    return ret
+
+printed_funcs = []
+def call_tree_helper(func, indent = 0):
+    global printed_funcs
+    if func in printed_funcs:
+        return
+    print "%s%s()" %(" " * indent, func)
+    if func == "too common":
+        return
+    if indent > 6:
+        return
+    printed_funcs.append(func)
+    callers = get_callers(func)
+    if len(callers) >= 20:
+        print "Over 20 callers for %s()" %(func)
+        return
+    for caller in callers:
+        call_tree_helper(caller, indent + 2)
+
+def print_call_tree(func):
+    global printed_funcs
+    printed_funcs = []
+    call_tree_helper(func)
+
+def function_type_value(struct_type, member):
+    cur = con.cursor()
+    cur.execute("select * from function_type_value where type like '(struct %s)->%s';" %(struct_type, member))
+    for txt in cur:
+        print "%-30s | %-30s | %s | %s" %(txt[0], txt[1], txt[2], txt[3])
+
+def trace_callers(func, param):
+    sources = []
+    prev_type = 0
+
+    cur = con.cursor()
+    ptrs = get_function_pointers(func)
+    for ptr in ptrs:
+        cur.execute("select type, caller, value from caller_info where function = '%s' and (type = 0 or type = 1014 or type = 1028) and (parameter = -1 or parameter = %d);" %(ptr, param))
+        for row in cur:
+            data_type = int(row[0])
+            if data_type == 1014:
+                sources.append((row[1], row[2]))
+            elif data_type == 1028:
+                sources.append(("%", row[2])) # hack...
+            elif data_type == 0 and prev_type == 0:
+                sources.append((row[1], ""))
+            prev_type = data_type
+    return sources
+
+def trace_param_helper(func, param, indent = 0):
+    global printed_funcs
+    if func in printed_funcs:
+        return
+    print "%s%s(param %d)" %(" " * indent, func, param)
+    if func == "too common":
+        return
+    if indent > 20:
+        return
+    printed_funcs.append(func)
+    sources = trace_callers(func, param)
+    for path in sources:
+
+        if len(path[1]) and path[1][0] == 'p' and path[1][1] == ' ':
+            p = int(path[1][2:])
+            trace_param_helper(path[0], p, indent + 2)
+        elif len(path[0]) and path[0][0] == '%':
+            print "  %s%s" %(" " * indent, path[1])
+        else:
+            print "* %s%s %s" %(" " * (indent - 1), path[0], path[1])
+
+def trace_param(func, param):
+    global printed_funcs
+    printed_funcs = []
+    print "tracing %s %d" %(func, param)
+    trace_param_helper(func, param)
+
+def print_locals(filename):
+    cur = con.cursor()
+    cur.execute("select file,data,value from data_info where file = '%s' and type = 8029 and value != 0;" %(filename))
+    for txt in cur:
+        print "%s | %s | %s" %(txt[0], txt[1], txt[2])
+
+def constraint(struct_type, member):
+    cur = con.cursor()
+    cur.execute("select * from constraints_required where data like '(struct %s)->%s' or bound like '(struct %s)->%s';" %(struct_type, member, struct_type, member))
+    for txt in cur:
+        print "%-30s | %-30s | %s | %s" %(txt[0], txt[1], txt[2], txt[3])
+
+if len(sys.argv) < 2:
+    usage()
+
+if len(sys.argv) == 2:
+    func = sys.argv[1]
+    print_caller_info("", func)
+elif sys.argv[1] == "call_info":
+    if len(sys.argv) != 4:
+        usage()
+    filename = sys.argv[2]
+    func = sys.argv[3]
+    caller_info_values(filename, func)
+    print_caller_info(filename, func)
+elif sys.argv[1] == "user_data":
+    func = sys.argv[2]
+    print_caller_info(filename, func, "USER_DATA")
+elif sys.argv[1] == "param_value":
+    func = sys.argv[2]
+    print_caller_info(filename, func, "PARAM_VALUE")
+elif sys.argv[1] == "function_ptr" or sys.argv[1] == "fn_ptr":
+    func = sys.argv[2]
+    print_fn_ptrs(func)
+elif sys.argv[1] == "return_states":
+    func = sys.argv[2]
+    print_return_states(func)
+    print "================================================"
+    print_return_implies(func)
+elif sys.argv[1] == "return_implies":
+    func = sys.argv[2]
+    print_return_implies(func)
+elif sys.argv[1] == "type_size" or sys.argv[1] == "buf_size":
+    struct_type = sys.argv[2]
+    member = sys.argv[3]
+    print_type_size(struct_type, member)
+elif sys.argv[1] == "data_info":
+    struct_type = sys.argv[2]
+    member = sys.argv[3]
+    print_data_info(struct_type, member)
+elif sys.argv[1] == "call_tree":
+    func = sys.argv[2]
+    print_call_tree(func)
+elif sys.argv[1] == "where":
+    if len(sys.argv) == 3:
+        struct_type = "%"
+        member = sys.argv[2]
+    elif len(sys.argv) == 4:
+        struct_type = sys.argv[2]
+        member = sys.argv[3]
+    function_type_value(struct_type, member)
+elif sys.argv[1] == "local":
+    filename = sys.argv[2]
+    variable = ""
+    if len(sys.argv) == 4:
+        variable = sys.argv[3]
+    local_values(filename, variable)
+elif sys.argv[1] == "functions":
+    member = sys.argv[2]
+    print_functions(member)
+elif sys.argv[1] == "trace_param":
+    if len(sys.argv) != 4:
+        usage()
+    func = sys.argv[2]
+    param = int(sys.argv[3])
+    trace_param(func, param)
+elif sys.argv[1] == "locals":
+    if len(sys.argv) != 3:
+        usage()
+    filename = sys.argv[2]
+    print_locals(filename);
+elif sys.argv[1] == "constraint":
+    if len(sys.argv) == 3:
+        struct_type = "%"
+        member = sys.argv[2]
+    elif len(sys.argv) == 4:
+        struct_type = sys.argv[2]
+        member = sys.argv[3]
+    constraint(struct_type, member)
+elif sys.argv[1] == "test":
+    filename = sys.argv[2]
+    func = sys.argv[3]
+    caller_info_values(filename, func)
+else:
+    usage()
--- /dev/null	Fri Dec 21 15:00:20 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/type_info.schema	Fri Dec 21 15:00:20 2018
@@ -0,0 +1,9 @@
+CREATE TABLE type_info (
+	file varchar(80),
+	type integer,
+	key varchar(80),
+	value varchar(80),
+
+	CONSTRAINT type_info_constraint UNIQUE (type, key, value)
+);
+
--- /dev/null	Fri Dec 21 15:00:20 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/type_size.schema	Fri Dec 21 15:00:20 2018
@@ -0,0 +1,1 @@
+CREATE TABLE type_size (type varchar(80), size integer);
--- /dev/null	Fri Dec 21 15:00:20 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/type_value.schema	Fri Dec 21 15:00:20 2018
@@ -0,0 +1,1 @@
+CREATE TABLE type_value (type varchar(80), value varchar(80));
--- /dev/null	Fri Dec 21 15:00:20 2018
+++ new/usr/src/tools/smatch/src/smatch_data/db/vim_smdb	Fri Dec 21 15:00:20 2018
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+# Add these lines to your .vimrc file
+#
+# map <C-r> :! vim_smdb return_states <cword> <CR> :execute 'edit' system("cat ~/.smdb_tmp/cur") <CR>
+# map <C-c> :! vim_smdb <cword> <CR> :execute 'edit' system("cat ~/.smdb_tmp/cur") <CR>
+#
+# Now you can move your cursor over a function and hit CTRL-c to see how it's
+# called or CTRL-r to see what it returns.  Use the ":bd" command to get back to
+# your source.
+
+DIR="$HOME/.smdb_tmp"
+mkdir -p $DIR
+
+for i in $(seq 1 100) ; do
+	if [ ! -e $DIR/$i ] ; then
+		break
+	fi
+done
+
+if [ $i == 100 ] ; then
+	i=1
+fi
+
+next=$(($i + 1))
+
+rm -f $DIR/$next
+rm $DIR/.${i}.swp
+smdb $* > $DIR/$i
+
+echo "$DIR/$i" > $DIR/cur
+
--- /dev/null	Fri Dec 21 15:00:20 2018
+++ new/usr/src/tools/smatch/src/smatch_data/illumos_kernel.no_return_funcs	Fri Dec 21 15:00:20 2018
@@ -0,0 +1,18 @@
+/*
+ * These functions don't return.  Unfortunately, sparse today doesn't correctly
+ * respect __NORETURN, so we have to explicitly list them here for now.
+ */
+__assert_fail
+__builtin_unreachable
+bop_panic
+efi_reset
+panic
+pc_reset
+prom_exit_to_mon
+prom_panic
+prom_reboot
+reset
+resume_from_zombie
+swtch_from_zombie
+thread_exit
+vpanic
--- /dev/null	Fri Dec 21 15:00:20 2018
+++ new/usr/src/tools/smatch/src/smatch_data/illumos_kernel.skipped_functions	Fri Dec 21 15:00:20 2018
@@ -0,0 +1,8 @@
+/* These are "too hairy" for smatch. */
+dtrace_disx86
+elf32exec
+elfexec
+iscsi_ioctl
+lm_idle_chk
+segvn_fault_vnodepages
+tcp_input_data
--- /dev/null	Fri Dec 21 15:00:20 2018
+++ new/usr/src/tools/smatch/src/smatch_data/illumos_user.no_return_funcs	Fri Dec 21 15:00:20 2018
@@ -0,0 +1,21 @@
+/*
+ * These functions don't return.  Unfortunately, sparse today doesn't correctly
+ * respect __NORETURN, so we have to explicitly list them here for now.
+ */
+__assert_fail
+__builtin_unreachable
+abort
+ctfmerge_fatal
+err
+errx
+_exit
+exit
+_longjmp
+longjmp
+pthread_exit
+reparsed_door_call_error
+siglongjmp
+terminate
+thr_exit
+verr
+verrx
--- /dev/null	Fri Dec 21 15:00:20 2018
+++ new/usr/src/tools/smatch/src/smatch_data/illumos_user.skipped_functions	Fri Dec 21 15:00:20 2018
@@ -0,0 +1,40 @@
+/*
+ * The below functions cause smatch to fail with "turning off implications after
+ * 60 seconds" or similar, generally because they're too large for it to handle.
+ *
+ * This will disable analysis altogether.
+ */
+
+/* libast */
+_ast_optget
+_ast_opthelp
+/* libcmd */
+b_uname
+/* libcurses */
+_updateln
+/* libdisasm */
+dtrace_disx86
+/* libld */
+ld32_sym_process
+ld64_sym_process
+update_osym
+/* libsqlite */
+sqliteVdbeExec
+/* cmd/acpi/iasl */
+AslCompilerparse
+/* cmd/fs.d/autofs */
+nfsmount
+/* cmd/pppd */
+lcp_nakci
+
+/* generated code */
+ipf_yyparse
+ipmon_yyparse
+ipnat_yyparse
+ippool_yyparse
+ndr__ndr_hdr
+yyerror
+yylex
+yylook
+yyparse
+yywinput
--- /dev/null	Fri Dec 21 15:00:20 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.allocation_funcs	Fri Dec 21 15:00:20 2018
@@ -0,0 +1,1194 @@
+// list of functions that return a new allocation.
+// generated by `gen_allocation_list.sh`
+__a2mp_build
+aa_alloc_profile
+__aa_kvmalloc
+aarp_alloc
+ablkcipher_request_alloc
+acpi_alloc_ipmi_msg
+acpi_processor_alloc_pdc
+acquire_group
+add_device
+add_missing_dev
+add_vol
+adfs_read_map
+aer_alloc_rpc
+afs_alloc_flat_call
+afs_alloc_server
+afs_vlocation_alloc
+aggr_init
+agp_alloc_bridge
+agp_create_client
+agp_create_controller
+agp_create_memory
+agp_create_user_memory
+ahc_alloc
+ahc_alloc_tstate
+ahd_alloc
+ahd_alloc_tstate
+ai_attach
+alloc_ai
+alloc_apertures
+alloc_area
+alloc_async
+allocate_bitmap_node
+__allocate_fw_buf
+allocate_partitions
+allocate_request
+__alloc_atm_dev
+alloc_backref_edge
+alloc_backref_node
+alloc_buf
+alloc_buffer
+alloc_cell
+alloc_channel
+alloc_chunk
+alloc_cld_upcall
+alloc_client
+alloc_conn
+alloc_context
+alloc_cpu_rmap
+alloc_ctrl_packet
+alloc_data_packet
+alloc_dca_provider
+alloc_dev
+alloc_dev_data
+alloc_ep
+alloc_fdtable
+__alloc_filter
+alloc_flex_gd
+alloc_ftrace_hash
+alloc_fw_cache_entry
+alloc_group_attrs
+alloc_i7core_dev
+alloc_jh
+alloc_journal_list
+alloc_lvn
+alloc_mpc
+alloc_mr
+alloc_msg
+alloc_msi_entry
+alloc_multipath
+alloc_namespace
+alloc_net_device
+alloc_nilfs
+alloc_parallel
+_alloc_path_selector
+alloc_pcie_link_state
+alloc_pci_root_info
+alloc_pdev
+alloc_perf_context
+alloc_pgpath
+alloc_pg_vec
+alloc_pipe_info
+alloc_pl
+alloc_priority_group
+alloc_pvd
+alloc_rdma
+alloc_read_gpt_entries
+alloc_read_gpt_header
+alloc_reloc_control
+alloc_resource
+alloc_rootdomain
+alloc_rx_struct
+alloc_sbridge_dev
+alloc_sched_domains
+alloc_scq
+alloc_selector
+alloc_session
+alloc_smp_req
+alloc_sock_iocb
+alloc_super
+alloc_switch_ctx
+alloc_symbol_cache
+alloc_tree
+alloc_tx_struct
+alloc_ubifs_info
+alloc_uprobe
+alloc_urbs
+alloc_watch_adapter
+alloc_worker
+alloc_workqueue_attrs
+__alloc_workqueue_key
+amp_ctrl_add
+amp_mgr_create
+aoedev_by_aoeaddr
+ap_add_sta
+ap_auth_make_challenge
+append_internal
+array_zalloc
+ast_i2c_create
+ast_ttm_tt_create
+ata_port_alloc
+ath10k_ce_init_state
+ath10k_htt_attach
+ath6kl_htc_mbox_create
+ath6kl_htc_pipe_create
+ath6kl_usb_create
+ath6kl_wmi_init
+ath9k_htc_hw_alloc
+ath9k_init_wmi
+ath_gen_timer_alloc
+atif_add_device
+atom_parse
+audit_alloc_context
+audit_alloc_name
+audit_buffer_alloc
+audit_init_entry
+audit_krule_to_data
+autofs4_new_ino
+avmcard_dma_alloc
+ax25_create_cb
+b1_alloc_card
+b43_bus_dev_bcma_init
+b43_bus_dev_ssb_init
+b43_calibrate_lo_setting
+b43_generate_dyn_tssi2dbm_tab
+b43legacy_generate_probe_resp
+b43legacy_setup_dmaring
+b43legacy_setup_pioqueue
+b43_setup_dmaring
+b43_setup_pioqueue_rx
+b43_setup_pioqueue_tx
+batadv_dat_select_candidates
+batadv_hardif_add_interface
+batadv_hash_new
+batadv_neigh_node_new
+batadv_new_tt_req_node
+bch_alloc
+bch_cache_set_alloc
+bfad_fcxp_map_sg
+binder_get_thread
+binder_new_node
+bin_to_hex_dup
+bio_alloc_map_data
+bio_integrity_alloc
+bioset_create
+bl_alloc_extent
+__blk_queue_init_tags
+bnx2fc_alloc_work
+bnx2fc_cmd_mgr_alloc
+bnx2fc_hba_create
+bnx2x_vfop_add
+brcmf_sdbrcm_probe
+brcmf_usbdev_qinit
+brcms_c_ampdu_attach
+brcms_c_antsel_attach
+brcms_c_attach_malloc
+brcms_c_bsscfg_malloc
+brcms_c_channel_mgr_attach
+brcms_init_timer
+brd_alloc
+br_multicast_new_port_group
+bsd_alloc
+bsg_alloc_device
+btmrvl_add_card
+btrfs_alloc_block_rsv
+btrfs_alloc_delayed_item
+btrfs_alloc_root
+btrfsic_block_alloc
+btrfsic_block_link_alloc
+btrfsic_dev_state_alloc
+btrfsic_stack_frame_alloc
+build_htc_txctrl_packet
+build_path_from_dentry
+c4iw_uld_add
+cachefiles_cook_key
+caif_device_alloc
+call_usermodehelper_setup
+capiminor_alloc
+capincci_alloc
+carl9170_cmd_buf
+cas_page_alloc
+cciss_allocate_sg_chain_blocks
+cdebbuf_alloc
+cdev_alloc
+cdv_intel_crtc_mode_get
+ceph_buffer_new
+ceph_create_snap_context
+cfcnfg_create
+cffrml_create
+cfi_read_pri
+cfi_staa_setup
+cfusbl_create
+cfv_alloc_and_copy_to_shm
+cgroup_alloc_name
+channel_detector_create
+cifs_build_path_to_root
+cifs_lock_init
+cifs_new_fileinfo
+cifs_readdata_alloc
+cifs_strndup_from_utf16
+cifs_strndup_to_utf16
+cifs_writedata_alloc
+cirrus_ttm_tt_create
+class_compat_register
+clusterip_config_init
+cmtp_application_add
+cnic_alloc_dev
+cn_queue_alloc_callback_entry
+cn_queue_alloc_dev
+composite_default_mfr
+conn_create
+convert_chmap
+copy_tlv
+core_dev_init_initiator_node_lun_acl
+cpia2_init_camera_struct
+create_a
+create_bounce_buffer
+create_driver
+create_durable_buf
+create_event
+create_l2
+create_lease_buf
+create_new_subsystem
+create_osd
+create_port
+create_portdata0
+create_reconnect_durable_buf
+create_regulator
+create_rmpp_recv
+create_serial
+create_trace_option_files
+create_unique_id
+create_uts_ns
+create_wlan
+__crypto_alloc_tfm
+crypto_create_tfm
+cs46xx_dsp_spos_create
+cs5535_mfgpt_alloc_timer
+cs_alloc_spec
+csio_hw_alloc
+CsrWifiEventCsrUint16CsrUint8Des
+CsrWifiEventCsrUint16Des
+CsrWifiEventCsrUint32Des
+CsrWifiEventCsrUint8Des
+CsrWifiEventDes
+CsrWifiNmeApConfigSetReqDes
+CsrWifiNmeApStaRemoveReqDes
+CsrWifiNmeApStartCfmDes
+CsrWifiNmeApStartReqDes
+CsrWifiNmeApStationIndDes
+CsrWifiNmeApStopCfmDes
+CsrWifiNmeApStopIndDes
+CsrWifiNmeApWmmParamUpdateReqDes
+CsrWifiNmeApWpsRegisterCfmDes
+CsrWifiNmeApWpsRegisterReqDes
+CsrWifiRouterCtrlBlockAckDisableCfmDes
+CsrWifiRouterCtrlBlockAckDisableReqDes
+CsrWifiRouterCtrlBlockAckEnableCfmDes
+CsrWifiRouterCtrlBlockAckEnableReqDes
+CsrWifiRouterCtrlBlockAckErrorIndDes
+CsrWifiRouterCtrlCapabilitiesCfmDes
+CsrWifiRouterCtrlConfigurePowerModeReqDes
+CsrWifiRouterCtrlConnectedIndDes
+CsrWifiRouterCtrlHipIndDes
+CsrWifiRouterCtrlHipReqDes
+CsrWifiRouterCtrlM4ReadyToSendIndDes
+CsrWifiRouterCtrlM4TransmitReqDes
+CsrWifiRouterCtrlM4TransmittedIndDes
+CsrWifiRouterCtrlMediaStatusReqDes
+CsrWifiRouterCtrlMicFailureIndDes
+CsrWifiRouterCtrlModeSetCfmDes
+CsrWifiRouterCtrlModeSetReqDes
+CsrWifiRouterCtrlMulticastAddressIndDes
+CsrWifiRouterCtrlMulticastAddressResDes
+CsrWifiRouterCtrlPeerAddCfmDes
+CsrWifiRouterCtrlPeerAddReqDes
+CsrWifiRouterCtrlPeerDelCfmDes
+CsrWifiRouterCtrlPeerDelReqDes
+CsrWifiRouterCtrlPeerUpdateCfmDes
+CsrWifiRouterCtrlPeerUpdateReqDes
+CsrWifiRouterCtrlPortConfigureCfmDes
+CsrWifiRouterCtrlPortConfigureReqDes
+CsrWifiRouterCtrlQosControlReqDes
+CsrWifiRouterCtrlRawSdioDeinitialiseCfmDes
+CsrWifiRouterCtrlRawSdioInitialiseCfmDes
+CsrWifiRouterCtrlResumeResDes
+CsrWifiRouterCtrlStaInactiveIndDes
+CsrWifiRouterCtrlSuspendIndDes
+CsrWifiRouterCtrlSuspendResDes
+CsrWifiRouterCtrlTclasAddCfmDes
+CsrWifiRouterCtrlTclasAddReqDes
+CsrWifiRouterCtrlTclasDelCfmDes
+CsrWifiRouterCtrlTclasDelReqDes
+CsrWifiRouterCtrlTrafficClassificationReqDes
+CsrWifiRouterCtrlTrafficConfigReqDes
+CsrWifiRouterCtrlTrafficProtocolIndDes
+CsrWifiRouterCtrlTrafficSampleIndDes
+CsrWifiRouterCtrlUnexpectedFrameIndDes
+CsrWifiRouterCtrlWapiRxMicCheckIndDes
+CsrWifiRouterCtrlWapiRxPktReqDes
+CsrWifiRouterCtrlWapiUnicastTxEncryptIndDes
+CsrWifiRouterCtrlWapiUnicastTxPktReqDes
+CsrWifiRouterCtrlWifiOnCfmDes
+CsrWifiRouterCtrlWifiOnIndDes
+CsrWifiRouterCtrlWifiOnReqDes
+CsrWifiRouterCtrlWifiOnResDes
+CsrWifiRouterMaPacketCancelReqDes
+CsrWifiRouterMaPacketCfmDes
+CsrWifiRouterMaPacketIndDes
+CsrWifiRouterMaPacketReqDes
+CsrWifiRouterMaPacketResDes
+CsrWifiRouterMaPacketSubscribeCfmDes
+CsrWifiRouterMaPacketSubscribeReqDes
+CsrWifiRouterMaPacketUnsubscribeCfmDes
+CsrWifiSmeAdhocConfigGetCfmDes
+CsrWifiSmeAdhocConfigSetReqDes
+CsrWifiSmeAssociationCompleteIndDes
+CsrWifiSmeAssociationStartIndDes
+CsrWifiSmeBlacklistCfmDes
+CsrWifiSmeBlacklistReqDes
+CsrWifiSmeCalibrationDataGetCfmDes
+CsrWifiSmeCalibrationDataSetReqDes
+CsrWifiSmeCcxConfigGetCfmDes
+CsrWifiSmeCcxConfigSetCfmDes
+CsrWifiSmeCcxConfigSetReqDes
+CsrWifiSmeCloakedSsidsGetCfmDes
+CsrWifiSmeCloakedSsidsSetReqDes
+CsrWifiSmeCoexConfigGetCfmDes
+CsrWifiSmeCoexConfigSetReqDes
+CsrWifiSmeCoexInfoGetCfmDes
+CsrWifiSmeConnectCfmDes
+CsrWifiSmeConnectionConfigGetCfmDes
+CsrWifiSmeConnectionInfoGetCfmDes
+CsrWifiSmeConnectionQualityIndDes
+CsrWifiSmeConnectionStatsGetCfmDes
+CsrWifiSmeConnectReqDes
+CsrWifiSmeCoreDumpIndDes
+CsrWifiSmeDisconnectCfmDes
+CsrWifiSmeErrorIndDes
+CsrWifiSmeHostConfigGetCfmDes
+CsrWifiSmeHostConfigSetCfmDes
+CsrWifiSmeHostConfigSetReqDes
+CsrWifiSmeIbssStationIndDes
+CsrWifiSmeInfoIndDes
+CsrWifiSmeInterfaceCapabilityGetCfmDes
+CsrWifiSmeKeyCfmDes
+CsrWifiSmeKeyReqDes
+CsrWifiSmeLinkQualityGetCfmDes
+CsrWifiSmeMediaStatusIndDes
+CsrWifiSmeMibConfigGetCfmDes
+CsrWifiSmeMibConfigSetReqDes
+CsrWifiSmeMibGetCfmDes
+CsrWifiSmeMibGetNextCfmDes
+CsrWifiSmeMibGetNextReqDes
+CsrWifiSmeMibGetReqDes
+CsrWifiSmeMibSetReqDes
+CsrWifiSmeMicFailureIndDes
+CsrWifiSmeMulticastAddressCfmDes
+CsrWifiSmeMulticastAddressReqDes
+CsrWifiSmePacketFilterSetCfmDes
+CsrWifiSmePacketFilterSetReqDes
+CsrWifiSmePermanentMacAddressGetCfmDes
+CsrWifiSmePmkidCandidateListIndDes
+CsrWifiSmePmkidCfmDes
+CsrWifiSmePmkidReqDes
+CsrWifiSmePowerConfigGetCfmDes
+CsrWifiSmePowerConfigSetReqDes
+CsrWifiSmeRegulatoryDomainInfoGetCfmDes
+CsrWifiSmeRoamCompleteIndDes
+CsrWifiSmeRoamingConfigGetCfmDes
+CsrWifiSmeRoamingConfigSetCfmDes
+CsrWifiSmeRoamingConfigSetReqDes
+CsrWifiSmeRoamStartIndDes
+CsrWifiSmeScanConfigGetCfmDes
+CsrWifiSmeScanConfigSetReqDes
+CsrWifiSmeScanFullReqDes
+CsrWifiSmeScanResultIndDes
+CsrWifiSmeScanResultsGetCfmDes
+CsrWifiSmeSetReqDes
+CsrWifiSmeSmeCommonConfigGetCfmDes
+CsrWifiSmeSmeCommonConfigSetReqDes
+CsrWifiSmeSmeStaConfigGetCfmDes
+CsrWifiSmeSmeStaConfigSetCfmDes
+CsrWifiSmeSmeStaConfigSetReqDes
+CsrWifiSmeStationMacAddressGetCfmDes
+CsrWifiSmeTspecCfmDes
+CsrWifiSmeTspecIndDes
+CsrWifiSmeTspecReqDes
+CsrWifiSmeVersionsGetCfmDes
+CsrWifiSmeWifiFlightmodeReqDes
+CsrWifiSmeWifiOnIndDes
+CsrWifiSmeWifiOnReqDes
+CsrWifiSmeWpsConfigurationReqDes
+ct_timer_instance_new
+ct_timer_new
+cx88_core_create
+cxgb_alloc_mem
+cxgbi_alloc_big_mem
+cxgbi_device_register
+cxgbi_sock_create
+cyberpro_alloc_fb_info
+DAC960_DetectController
+datablob_format
+dca_allocate_domain
+dcookie_register
+ddp_make_gl
+decode_device
+decode_ds_addr
+dell_wmi_prepare_new_keymap
+device_alloc
+devinfo_seq_start
+_dev_list_add
+dev_seq_start
+dfs_pattern_detector_init
+dib8000_attach
+dlm_allocate_lvb
+dlm_alloc_ctxt
+dlm_alloc_pagevec
+dma_attach
+dm_alloc_md_mempools
+dma_ops_domain_alloc
+dma_pin_iovec_pages
+dm_bio_prison_create
+dm_deferred_set_create
+dm_dirty_log_create
+dm_tm_create_non_blocking_clone
+dn_dev_alloc_ifa
+dn_dev_create
+dn_new_zone
+do_get_edid
+drm_agp_init
+drm_do_get_edid
+drm_gem_object_alloc
+drm_master_create
+drm_mm_kmalloc
+drm_mode_create
+drm_pci_alloc
+drm_property_create
+drm_property_create_blob
+dsp_cmx_new_conf
+dst_cow_metrics_generic
+dwc2_hcd_qh_create
+dwc2_hcd_urb_alloc
+dwmac1000_setup
+dwmac100_setup
+eb_create
+edac_device_alloc_ctl_info
+edac_mc_alloc
+edac_pci_alloc_ctl_info
+efx_alloc_channel
+efx_copy_channel
+eg_cache_add_entry
+ehci_qh_alloc
+ext3_htree_create_dir_info
+ext4_htree_create_dir_info
+ext4_kvmalloc
+ext4_kvzalloc
+ext4_li_request_new
+ezusb_alloc_ctx
+__fa_get_part
+fb_create_modedb
+fb_do_probe_ddc_edid
+fc_exch_mgr_add
+fc_exch_mgr_alloc
+fcoe_ctlr_device_add
+fc_rport_create
+fd_setup_write_same_buf
+fib6_alloc_table
+fib_trie_table
+fifo_alloc
+fir16_create
+fl_create
+flex_array_alloc
+flexcop_device_kmalloc
+fnic_dev_register
+fq_codel_zalloc
+fscache_alloc_retrieval
+fs_path_alloc
+fusbh200_qh_alloc
+fuse_file_alloc
+fw_create_instance
+fwnet_pd_new
+fw_node_create
+gameport_allocate_port
+gcov_info_dup
+gcov_iter_new
+genprobe_ident_chips
+get_client
+getdqbuf
+get_id
+get_indirect_ea
+get_irq_table
+get_rndis_device
+get_rndis_request
+get_scq
+get_unbound_pool
+get_vm_block
+get_xol_area
+gf128mul_init_4k_bbe
+gf128mul_init_4k_lle
+gf128mul_init_64k_bbe
+gf128mul_init_64k_lle
+gfs2_alloc_sort_buffer
+gigaset_initdriver
+gntdev_alloc_map
+go7007_alloc
+groups_alloc
+gru_alloc_vma_data
+gsm_alloc_mux
+gsm_control_send
+gsm_data_alloc
+gsm_dlci_alloc
+gsmi_buf_alloc
+gss_alloc_context
+hashbin_new
+hashtab_create
+hci_alloc_dev
+hci_chan_create
+hci_conn_add
+hfs_btree_open
+hfsplus_btree_open
+hidinput_allocate
+hid_register_field
+__hostap_add_bss
+hotadd_new_pgdat
+hpfs_get_4sectors
+hpfs_load_bitmap_directory
+hpfs_load_code_page
+hpfs_map_4sectors
+hpi_alloc_control_cache
+hsi_alloc_controller
+hsi_alloc_msg
+hso_create_device
+hso_create_shared_int
+hugepage_new_subpool
+i2c_matroxfb_probe
+i2c_new_device
+i2o_exec_wait_alloc
+i915_error_object_create_sized
+i915_pages_create_for_stolen
+ibmasm_new_command
+ibm_slot_from_id
+ib_ucm_ctx_alloc
+ics5342_init
+idt77252_init_est
+iio_alloc_pollfunc
+iio_device_alloc
+iio_trigger_alloc
+il4965_sta_alloc_lq
+imon_init_intf0
+in_cache_add_entry
+inetdev_init
+inet_frag_alloc
+init_bch
+init_list_set
+init_sbd
+init_temp_data
+init_test_block_group
+input_allocate_device
+input_allocate_polled_device
+intel_crtc_mode_get
+intel_display_capture_error_state
+intel_overlay_capture_error_state
+ioat2_alloc_ring
+ioat_dma_alloc_descriptor
+iommu_domain_alloc
+ipack_bus_register
+ipath_create_mmap_info
+ipath_mcast_alloc
+ipath_mcast_qp_alloc
+ipath_user_sdma_queue_create
+ipc_alloc
+ipmi_alloc_recv_msg
+ipmi_alloc_smi_msg
+ipoib_cm_create_tx
+ipoib_mcast_alloc
+ipoib_mcast_iter_init
+ipoib_neigh_ctor
+ipoib_path_iter_init
+ipr_alloc_ucode_buffer
+ip_set_alloc
+ipv6_add_dev
+ip_vs_lblc_new
+ip_vs_lblcr_new
+ip_vs_sync_buff_create
+ip_vs_sync_buff_create_v0
+ipw_alloc_error_log
+ipwireless_hardware_create
+ipwireless_network_create
+ipw_rx_queue_alloc
+ipxitf_alloc
+ircomm_open
+irda_usb_find_class_desc
+iriap_open
+irias_new_integer_value
+irias_new_missing_value
+irias_new_object
+irias_new_octseq_value
+irias_new_string_value
+irlap_open
+irlmp_copy_discoveries
+irlmp_open_lsap
+irlmp_register_client
+irlmp_register_service
+irq_alloc_generic_chip
+irttp_open_tsap
+iscsi_alloc_session
+iscsi_boot_create_kobj
+iscsi_boot_create_kset
+iscsi_create_conn
+iscsi_create_endpoint
+iscsi_create_flashnode_conn
+iscsi_create_flashnode_sess
+iscsi_create_iface
+iscsi_login_init_conn
+iscsi_set_default_param
+iscsit_alloc_portal_group
+isdn_audio_adpcm_init
+isdn_audio_dtmf_init
+isdn_audio_silence_init
+isdn_ppp_ccp_reset_alloc
+isdn_ppp_ccp_reset_alloc_state
+isdn_v110_open
+iser_device_find_by_ib_device
+iso_sched_alloc
+iso_stream_alloc
+it821x_firmware_command
+iwl_parse_eeprom_data
+iwl_parse_nvm_data
+iwl_phy_db_init
+iwl_sta_alloc_lq
+iwl_trans_pcie_alloc
+jffs2_alloc_full_dirent
+journal_init_common
+kcalloc
+kmalloc
+kmem_alloc
+kobject_create
+kobject_get_path
+kobj_map_init
+kset_create
+kstruprdup
+kvm_create_pic
+kvm_create_pit
+kzalloc
+l2cap_chan_create
+l2tp_session_create
+lapb_create_cb
+lc_create
+leaf_info_new
+lib80211_ccmp_init
+lib80211_tkip_init
+lib80211_wep_init
+libipw_alloc_txb
+line6_alloc_sysex_buffer
+linear_conf
+llc_nop_init
+llc_sap_alloc
+llc_shdlc_init
+locate_module_kobject
+lowpan_alloc_new_frame
+lpddr_cmdset
+lpddr_probe_chip
+lpfc_alloc_fast_evt
+lpfc_bsg_dma_page_alloc
+lpfc_bsg_event_new
+lpfc_create_vport_work_array
+lpfc_els_hbq_alloc
+lpfc_hba_alloc
+lpfc_sli4_create_rpi_hdr
+lpfc_sli4_queue_alloc
+lpfc_sli4_rb_alloc
+make_8023_client
+make_acpi_ec
+make_auth_domain_name
+make_cm_node
+make_EII_client
+make_entry
+make_slot_name
+map_absent_probe
+map_ram_probe
+map_rom_probe
+match_strdup
+matroxfb_crtc2_probe
+mb_cache_create
+mca_bucket_alloc
+mdiobus_alloc_size
+md_register_thread
+mei_cl_add_device
+mei_cl_allocate
+mei_io_cb_init
+mei_me_dev_init
+mem_cgroup_alloc
+memstick_alloc_card
+memstick_alloc_host
+memtype_get_idx
+merge_attr
+mesh_table_alloc
+mgag200_i2c_create
+mgag200_ttm_tt_create
+mgmt_pending_add
+mgsl_allocate_device
+mini_cm_listen
+minstrel_alloc
+minstrel_alloc_sta
+minstrel_ht_alloc_sta
+mISDN_register_clock
+mlx4_alloc_db_pgdir
+mlx4_alloc_icm
+mlx4_en_add
+mlx4_en_filter_alloc
+mlx5_alloc_db_pgdir
+mlx5_vzalloc
+mmc_alloc_host
+mmc_alloc_sg
+mmc_test_alloc_mem
+mousevsc_alloc_device
+mpi_alloc
+mpi_get_buffer
+mppe_alloc
+mpt2sas_transport_port_add
+mpt3sas_transport_port_add
+mptsas_expander_add
+mptscsih_info
+mthca_alloc_icm
+mthca_alloc_icm_table
+mv88e1xxx_phy_create
+mv88x201x_phy_create
+mvs_pci_alloc
+mv_u3d_build_trb_one
+mvumi_alloc_mem_resource
+mvumi_create_internal_cmd
+mwifiex_add_sta_entry
+mwifiex_wmm_allocate_ralist_node
+my3126_phy_create
+nand_bch_init
+nci_allocate_device
+ncp_alloc_req
+neigh_alloc
+neigh_hash_alloc
+nes_cm_alloc_core
+nes_get_cqp_request
+net_alloc_generic
+netdev_create_hash
+netlbl_secattr_cache_alloc
+netlbl_unlhsh_add_iface
+new_adapter
+new_compound_name
+_new_connect_scan_req
+new_coredump_node
+new_dir
+new_inode_smack
+new_l3_process
+new_lanai_vcc
+new_links
+new_ncci
+new_node
+new_plci
+new_pts_fs_info
+new_tape_buffer
+new_task_smack
+newtframe
+new_writequeue_entry
+nf_bridge_alloc
+nfc_allocate_device
+nfc_hci_allocate_device
+nfc_llc_allocate
+nfc_llcp_build_sdreq_tlv
+nfc_llcp_build_sdres_tlv
+nfc_llcp_build_tlv
+nfc_mei_phy_alloc
+nfs3_alloc_createdata
+nfs4_acl_new
+nfs4_alloc_createdata
+nfs4_alloc_lockdata
+nfs4_alloc_lock_state
+nfs4_alloc_open_state
+nfs4_alloc_pages
+nfs4_alloc_session
+nfs4_alloc_state_owner
+nfs4_alloc_unlockdata
+nfs4_blk_decode_device
+nfs4_new_slot
+nfs4_opendata_alloc
+nfs4_pnfs_ds_add
+nfs4_pnfs_remotestr
+nfs_alloc_createdata
+nfs_alloc_fattr
+nfs_alloc_fhandle
+nfs_alloc_parsed_mount_data
+nfs_alloc_seqid
+nfs_alloc_server
+nfs_cache_defer_req_alloc
+nfsd4_cltrack_legacy_recdir
+nfsd4_cltrack_legacy_topdir
+nfs_readdata_alloc
+nfs_writedata_alloc
+n_hdlc_alloc
+nilfs_segctor_new
+niu_new_parent
+nlm_alloc_call
+nlm_alloc_host
+nlmclnt_prepare_block
+nlmsvc_create_block
+nsm_create_handle
+nvme_alloc_iod
+nvme_alloc_ns
+nvme_alloc_queue
+nvme_bio_split
+ocfs2_allocate_refcount_tree
+ocfs2_alloc_quota_recovery
+ocfs2_dx_dir_kmalloc_leaves
+ocfs2_new_dlm_debug
+ocfs2_new_path
+ocfs2_xattr_bucket_new
+ocrdma_init_emb_mqe
+_osd_request_alloc
+OS_kmalloc
+oslec_create
+ovs_flow_tbl_alloc
+oz_alloc_urb_link
+oz_elt_info_alloc
+oz_ep_alloc
+oz_pd_alloc
+oz_tx_frame_alloc
+p54_convert_db
+p9_fcall_alloc
+padata_alloc
+padata_alloc_pd
+panel_bind_key
+parkbd_allocate_serio
+parport_register_device
+parport_register_port
+path_rec_create
+pch_uart_init_port
+pci_alloc_bus
+pci_alloc_dev
+pci_alloc_host_bridge
+pci_create_slot
+pcie_init
+pci_mmconfig_alloc
+pciserial_init_ports
+pci_store_saved_state
+pcistub_device_alloc
+pcmcia_device_add
+pcmcia_make_resource
+pcpu_get_vm_areas
+pcrypt_alloc_instance
+pfkey_sadb2xfrm_user_sec_ctx
+__phonet_device_alloc
+picolcd_send_and_wait
+pkt_alloc_packet_data
+pkt_kobj_create
+pm3393_mac_create
+pmcraid_alloc_sglist
+pneigh_lookup
+pnfs_mdsthreshold_alloc
+pnp_add_card_id
+pnp_add_id
+pnp_alloc
+pnp_alloc_card
+pnp_alloc_dev
+pnp_build_option
+pnp_new_resource
+pool_allocate
+pool_alloc_page
+posix_acl_alloc
+pps_register_source
+pri_detector_init
+prism2_read_pda
+__proc_create
+protection_domain_alloc
+psb_gtt_alloc_range
+psb_intel_crtc_mode_get
+psb_intel_i2c_create
+psb_mmu_alloc_pd
+psb_mmu_alloc_pt
+psb_mmu_driver_init
+pstore_ftrace_seq_start
+publ_create
+pvr2_context_create
+pvr2_dvb_create
+pvr2_eeprom_fetch
+pvr2_full_eeprom_fetch
+pvr2_hdw_create
+pvr2_ioread_create
+pvr2_std_create_enum
+pvr2_stream_create
+pvr2_sysfs_class_create
+pvr2_sysfs_create
+pvr2_v4l2_create
+qcam_init
+qdisc_class_hash_alloc
+qib_create_mmap_info
+qib_mcast_alloc
+qib_mcast_qp_alloc
+qib_qp_iter_init
+qib_user_sdma_queue_create
+qla2x00_alloc_fcport
+qla2x00_alloc_work
+qla4xxx_alloc_work
+qla4xxx_get_new_mrb
+qla84xx_get_chip
+qlcnic_sriov_get_free_node_async_work
+qlt_get_port_database
+qp_guest_endpoint_create
+qp_host_alloc_queue
+qset_new_std
+queue_new
+quickstart_buttons_add
+qxl_ring_create
+r8a66597_make_td
+radeon_atombios_get_lvds_info
+radeon_atombios_get_primary_dac_info
+radeon_atombios_get_tv_dac_info
+radeon_atombios_set_dac_info
+radeon_atombios_set_dig_info
+radeon_bios_get_hardcoded_edid
+radeon_combios_get_lvds_info
+radeon_combios_get_primary_dac_info
+radeon_combios_get_tv_dac_info
+radeon_i2c_create
+radeon_i2c_create_dp
+radeon_legacy_get_ext_tmds_info
+radeon_legacy_get_lvds_info_from_regs
+radeon_legacy_get_tmds_info
+radeon_vm_bo_add
+rate_control_alloc
+rate_control_pid_alloc
+rate_control_pid_alloc_sta
+rb_alloc
+rbd_dev_create
+rbd_spec_alloc
+rc_allocate_device
+rcu_string_strdup
+rdma_create_xprt
+rds_message_alloc
+read_rds_samples
+realloc_argv
+recent_entry_init
+record_old_file_extents
+regcache_rbtree_node_alloc
+regdom_intersect
+register_8022_client
+register_memory_resource
+register_snap_client
+__register_sysctl_paths
+__register_sysctl_table
+relay_create_buf
+relay_open
+result_init
+resv_map_alloc
+rfcomm_dlc_alloc
+rfcomm_session_add
+rfkill_alloc
+__ring_buffer_alloc
+ring_buffer_read_prepare
+rio_alloc_net
+rio_request_outb_dbell
+rio_setup_device
+rndis_add_response
+rproc_alloc
+rs_init
+rtl_rate_alloc_sta
+rxrpc_alloc_bundle
+rxrpc_alloc_connection
+rxrpc_alloc_local
+rxrpc_alloc_peer
+rxrpc_alloc_transport
+saa7164_buffer_alloc
+saa7164_buffer_alloc_user
+sas_alloc_device
+sas_phy_alloc
+sas_port_alloc
+sb_open
+sch56xx_watchdog_register
+scsi_alloc_sdev
+scsi_bios_ptable
+scsi_host_alloc
+scsi_prep_async_scan
+sctp_association_new
+sctp_auth_create_key
+sctp_auth_shkey_create
+sctp_datamsg_new
+sctp_endpoint_new
+sctp_pack_cookie
+sctp_ssnmap_new
+sctp_transport_new
+sd_alloc_ctl_entry
+sdebug_device_create
+sdev_evt_alloc
+sep_queue_status_add
+seq_create_client1
+__seq_open_private
+sesInfoAlloc
+sfi_sysfs_install_table
+sfq_alloc
+sf_sample_new
+sf_zone_new
+sg_add_sfp
+sid_to_key_str
+simple_xattr_alloc
+slhc_init
+sm_create_sysfs_attributes
+smi_info_alloc
+smk_import_entry
+smk_parse_smack
+smp_chan_create
+smscore_createbuffer
+smtc_alloc_fb_info
+snd_ctl_new
+snd_emux_create_port
+snd_info_create_entry
+snd_midi_channel_alloc_set
+snd_midi_channel_init_set
+snd_pdacf_create
+snd_seq_create_port
+snd_seq_fifo_new
+snd_seq_oss_readq_new
+snd_seq_oss_timer_new
+snd_seq_oss_writeq_new
+snd_seq_pool_new
+snd_seq_prioq_new
+snd_seq_timer_new
+snd_sf_new
+snd_timer_instance_new
+snd_usb_add_endpoint
+__snd_util_memblk_new
+snd_util_memhdr_new
+snd_vx_create
+sock_kmalloc
+sparse_index_alloc
+spi_alloc_device
+spi_alloc_master
+squashfs_cache_init
+srp_add_port
+srp_alloc_iu
+srp_ring_alloc
+srpt_alloc_ioctx
+srpt_alloc_ioctx_ring
+sta_info_alloc
+st_allocate_request
+stub_device_alloc
+submit_async_request
+subscr_named_msg_event
+subscr_subscribe
+__svc_create
+synaptics_i2c_touch_create
+sync_fence_alloc
+sync_pt_create
+sync_timeline_create
+sysfs_init_inode_attrs
+t1_espi_create
+t1_sge_create
+t1_tp_create
+t4_alloc_mem
+table_seq_start
+tconInfoAlloc
+tcpm_new
+tcp_v4_save_options
+td_alloc_init_desc
+tg3_vpd_readblock
+tifm_alloc_adapter
+tipc_alloc_entry
+tipc_createport
+tipc_link_create
+tipc_nameseq_create
+tipc_subseq_alloc
+tomoyo_commit_ok
+tomoyo_init_log
+tomoyo_print_bprm
+tomoyo_print_header
+tpm_bios_log_setup
+tpm_register_hardware
+trusted_options_alloc
+__ttm_dma_alloc_page
+ttm_object_device_init
+ttm_object_file_init
+tty_audit_buf_alloc
+tty_buffer_alloc
+tun_flow_create
+_ubh_bread_
+ucma_alloc_ctx
+ucma_alloc_multicast
+udf_sb_alloc_bitmap
+udl_encoder_init
+udl_gem_alloc_object
+udl_get_edid
+uf_sdio_mmc_register_pm_notifier
+ulist_alloc
+umc_device_create
+unifi_alloc_card
+usb_alloc_dev
+usb_alloc_urb
+usb_cache_string
+usb_create_shared_hcd
+usbctlx_alloc
+usbhsh_ureq_alloc
+usbip_alloc_iso_desc_pdu
+usbvision_alloc
+uvc_alloc_entity
+uvesafb_prep
+__uwb_beca_add
+uwb_drp_ie_alloc
+uwb_rc_alloc
+uwb_rsv_alloc
+v4l2_ctrl_new
+v9fs_alloc_rdir_buf
+vb2_dc_get_base_sgt
+vb2_dma_sg_alloc
+vb2_dma_sg_get_userptr
+vb2_get_vma
+vb2_vmalloc_alloc
+vb2_vmalloc_get_userptr
+via_aux_probe
+via_new_spec
+vic_provinfo_alloc
+__videobuf_alloc
+__videobuf_alloc_vb
+videobuf_dvb_alloc_frontend
+vlan_info_alloc
+vlan_vid_info_alloc
+vlsi_alloc_ring
+vmalloc_to_sg
+vmbus_device_create
+vmci_handle_arr_create
+vme_dma_pattern_attribute
+vme_dma_pci_attribute
+vme_dma_request
+vme_dma_vme_attribute
+vme_lm_request
+vme_master_request
+vme_new_dma_list
+vme_slave_request
+vmw_fence_manager_init
+vmxnet3_copy_mc
+vnic_dev_register
+vq_req_alloc
+vsc7326_mac_create
+vxfs_getfsh
+__vxge_hw_channel_allocate
+vxge_os_dma_malloc
+w1_alloc_dev
+wakeup_source_create
+wa_xfer_create_subset_sg
+wiimote_create
+wl1271_op_prepare_multicast
+wlc_phy_shared_attach
+wlc_phy_shim_attach
+wm_adsp_buf_alloc
+wpan_phy_alloc
+wusb_dev_alloc
+xbv_to_patch
+xfrm_hash_alloc
+xfrm_policy_alloc
+xfrm_state_alloc
+xhci_alloc_command
+xhci_alloc_container_ctx
+xhci_alloc_stream_info
+xhci_ring_alloc
+xhci_segment_alloc
+xprt_alloc
+xprt_dynamic_alloc_slot
+xt_alloc_table_info
+xz_dec_bcj_create
+xz_dec_init
+xz_dec_lzma2_create
+zbud_create_pool
+z_comp_alloc
+z_decomp_alloc
+zoran_setup_videocodec
+zram_meta_alloc
+zs_create_pool
No differences encountered
--- /dev/null	Fri Dec 21 15:00:20 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.allocation_funcs_gfp	Fri Dec 21 15:00:21 2018
@@ -0,0 +1,744 @@
+// Automatically generated by add_gfp_to_allocations.sh
+aarp_alloc X
+acpi_processor_alloc_pdc X
+add_device X
+add_missing_dev X
+add_one_partition X
+adfs_read_map X
+aer_alloc_rpc X
+afs_alloc_flat_call X
+afs_alloc_server X
+afs_vlocation_alloc X
+agp_alloc_bridge X
+agp_create_client X
+agp_create_controller X
+agp_create_memory X
+agp_create_user_memory X
+ahc_alloc X
+ahc_alloc_tstate X
+ahd_alloc X
+ahd_alloc_tstate X
+alloc_area X
+alloc_async X
+allocate_bitmap_node X
+allocate_request X
+__alloc_atm_dev X
+alloc_bd_holder X
+alloc_behind_pages X
+alloc_buf X
+alloc_buffer X
+alloc_cell X
+alloc_chunk X
+alloc_client X
+alloc_context X
+alloc_ctrl_packet X
+alloc_data_packet X
+alloc_dca_provider X
+alloc_dev X
+alloc_dma_iso_ctx X
+alloc_ebda_hpc X
+alloc_ep 1
+alloc_error_bus X
+alloc_fdtable X
+alloc_group_attrs X
+alloc_ioapic_entries X
+alloc_jh X
+alloc_journal_list X
+alloc_mpc X
+alloc_msi_entry X
+alloc_multipath X
+AllocNetDevice X
+alloc_nfs_open_context X
+alloc_nilfs X
+_alloc_path_selector X
+alloc_pci_dev X
+alloc_pcie_link_state X
+alloc_pcpu_chunk X
+__alloc_pending_request 0
+alloc_pgpath X
+alloc_pg_vec X
+alloc_pipe_info X
+alloc_pl X
+alloc_priority_group X
+alloc_rdma X
+alloc_read_gpt_entries X
+alloc_read_gpt_header X
+alloc_resources X
+alloc_rootdomain X
+alloc_sched_domains X
+alloc_scq X
+alloc_selector X
+alloc_sglist X
+alloc_sock_iocb X
+alloc_super X
+alloc_symbol_cache X
+alloc_tree X
+alloc_tty_driver X
+alloc_urbs X
+AllocVmbusChannel X
+amd_alloc_nb X
+aoedev_by_sysminor_m X
+ap_add_sta X
+ap_auth_make_challenge X
+append_internal X
+argv_split 0
+ata_port_alloc X
+ath_gen_timer_alloc X
+ath_rate_alloc_sta 2
+atif_add_device X
+atom_parse X
+audit_buffer_alloc 1
+audit_krule_to_data X
+audit_krule_to_rule X
+autofs4_init_ino X
+avmcard_dma_alloc X
+ax25_create_cb X
+b1_alloc_card X
+b43_calibrate_lo_setting X
+b43_generate_dyn_tssi2dbm_tab X
+b43legacy_generate_probe_resp X
+b43legacy_setup_dmaring X
+b43legacy_setup_pioqueue X
+b43_setup_dmaring X
+b43_setup_pioqueue_rx X
+b43_setup_pioqueue_tx X
+bio_alloc_map_data 2
+bio_kmalloc 0
+bioset_create X
+bitmap_alloc_page X
+__blk_queue_init_tags X
+brd_alloc X
+br_multicast_new_group X
+bsd_alloc X
+bsg_alloc_device X
+btmrvl_add_card X
+build_path_from_dentry X
+cachefiles_cook_key X
+call_usermodehelper_setup 3
+capiminor_alloc X
+capincci_alloc X
+cas_page_alloc 1
+cciss_allocate_sg_chain_blocks X
+cdebbuf_alloc X
+cdev_alloc X
+cfi_read_pri X
+cfi_staa_setup X
+cifs_build_path_to_root X
+cifs_new_fileinfo X
+cifs_strndup_from_ucs X
+class_compat_register X
+clusterip_config_init X
+cmtp_application_add X
+cnic_alloc_dev X
+cn_queue_alloc_callback_entry X
+cn_queue_alloc_dev X
+Config_FileOperation X
+copy_tlv X
+country_ie_2_rd X
+cpia2_init_camera_struct X
+cpia_register_camera X
+cpqhp_slot_create X
+create_a X
+create_bounce_buffer X
+create_driver X
+create_event X
+create_l2 X
+create_logical_pred X
+create_neighbor X
+create_port X
+create_pred X
+create_regulator X
+create_rmpp_recv X
+create_serial X
+create_trace_option_files X
+create_unique_id X
+create_uts_ns X
+create_wlan X
+__create_workqueue_key X
+__crypto_alloc_tfm X
+crypto_create_tfm X
+cs46xx_dsp_spos_create X
+cs5535_mfgpt_alloc_timer X
+csr1212_create_csr X
+csr1212_new_keyval X
+ct_timer_instance_new X
+ct_timer_new X
+cx88_core_create X
+cxgb3i_c3cn_create X
+cxgb3i_ddp_make_gl 4
+cxgb_alloc_mem X
+cyberpro_alloc_fb_info X
+cypress_buf_alloc X
+DAC960_DetectController X
+dca_allocate_domain X
+dcookie_register X
+debug_buffer_allocate X
+device_alloc X
+devinfo_seq_start X
+dev_new X
+dev_seq_start X
+dlm_allocate_lvb X
+dlm_allocate_rsb X
+dlm_alloc_ctxt X
+dlm_alloc_pagevec X
+dm_alloc_md_mempools X
+dma_pin_iovec_pages X
+dm_dirty_log_create X
+dn_dev_alloc_ifa X
+dn_dev_create X
+dn_new_zone X
+drbd_new_device X
+drm_agp_init X
+drm_gem_object_alloc X
+drm_get_edid X
+drm_master_create X
+drm_mm_kmalloc 1
+drm_mode_create X
+drm_pci_alloc X
+drm_property_create X
+drm_property_create_blob X
+drm_sman_alloc X
+dsp_cmx_new_conf X
+edac_device_alloc_ctl_info X
+edac_mc_alloc X
+edac_pci_alloc_ctl_info X
+edge_buf_alloc X
+efx_tsoh_heap_alloc X
+eg_cache_add_entry X
+ehci_qh_alloc X
+ext3_htree_create_dir_info X
+ext4_htree_create_dir_info X
+ext4_init_io_end 1
+__fa_get_part 2
+fb_create_modedb X
+fb_do_probe_ddc_edid X
+fc_exch_mgr_add X
+fc_exch_mgr_alloc X
+fcoe_interface_create X
+fc_rport_create X
+fdtv_alloc X
+fib6_alloc_table X
+fib_hash_table X
+fl_create X
+flex_array_alloc 2
+flexcop_device_kmalloc X
+fnic_dev_register X
+fn_new_zone X
+frame_new X
+fscache_alloc_retrieval X
+fuse_file_alloc X
+fwnet_pd_new X
+fw_node_create X
+garp_attr_create X
+gcov_info_dup X
+gcov_iter_new X
+genprobe_ident_chips X
+getdqbuf X
+get_free_de X
+get_indirect_ea X
+GetRndisDevice X
+GetRndisRequest X
+get_scq X
+get_video_info X
+get_vm_block X
+gf128mul_init_4k_bbe X
+gf128mul_init_4k_lle X
+gf128mul_init_64k_bbe X
+gf128mul_init_64k_lle X
+gfs2_alloc_get X
+gigaset_initdriver X
+go7007_alloc X
+groups_alloc X
+gss_alloc_context X
+hashbin_new X
+hash_new X
+hashtab_create X
+hci_alloc_dev X
+hci_conn_add X
+hfs_btree_open X
+hfsplus_btree_open X
+hid_register_field X
+__hostap_add_bss X
+hpfs_get_4sectors X
+hpfs_load_bitmap_directory X
+hpfs_load_code_page X
+hpfs_map_4sectors X
+hpsb_alloc_host X
+hpsb_alloc_packet X
+hpsb_iso_common_init X
+hso_create_device X
+hso_create_shared_int X
+i1480u_tx_create 2
+__i2400m_work_setup 2
+i2c_matroxfb_probe X
+i2c_new_device X
+i2o_exec_wait_alloc X
+ibmasm_new_command X
+ibm_slot_from_id X
+ib_ucm_ctx_alloc X
+icn_initcard X
+ics5342_init X
+idt77252_init_est X
+ieee80211_alloc_txb 2
+ieee80211_ccmp_init X
+ieee80211_key_alloc X
+ieee80211_tkip_init X
+iio_allocate_device X
+iio_allocate_interrupt X
+iio_allocate_trigger X
+in_cache_add_entry X
+inetdev_init X
+inet_frag_alloc X
+init_sbd X
+init_send_hfcd X
+input_allocate_device X
+input_allocate_polled_device X
+ioat2_alloc_ring 2
+ioat_dma_alloc_descriptor 1
+iommu_domain_alloc X
+ipc_alloc X
+ipc_rcu_alloc X
+ipmi_alloc_recv_msg X
+ipmi_alloc_smi_msg X
+ipoib_cm_create_tx X
+ipoib_create_ah X
+ipoib_mcast_alloc X
+ipoib_mcast_iter_init X
+ipoib_neigh_alloc X
+ipoib_path_iter_init X
+ipr_alloc_ucode_buffer X
+ipv6_add_dev X
+ip_vs_dest_set_insert X
+ipw_alloc_error_log X
+ipwireless_hardware_create X
+ipwireless_network_create X
+ipw_rx_queue_alloc X
+ipxitf_alloc X
+ircomm_open X
+irda_usb_find_class_desc X
+iriap_open X
+irias_new_integer_value X
+irias_new_missing_value X
+irias_new_object X
+irias_new_octseq_value X
+irias_new_string_value X
+irlap_open X
+irlmp_copy_discoveries X
+irlmp_open_lsap X
+irlmp_register_client X
+irlmp_register_service X
+irttp_dup X
+irttp_open_tsap X
+iscsi_alloc_session X
+iscsi_create_conn X
+iscsi_create_endpoint X
+isdn_audio_adpcm_init X
+isdn_audio_dtmf_init X
+isdn_audio_silence_init X
+isdn_ppp_ccp_reset_alloc X
+isdn_ppp_ccp_reset_alloc_state X
+isdn_v110_open X
+iser_device_find_by_ib_device X
+iso_sched_alloc 1
+iso_stream_alloc 0
+it821x_firmware_command X
+jffs2_alloc_full_dirent X
+journal_init_common X
+kcalloc 2
+kmalloc 1
+kmem_alloc X
+kobject_create X
+kobject_get_path 1
+kobj_map_init X
+kset_create X
+kstruprdup 1
+kvasprintf 0
+kvm_create_pic X
+kvm_create_pit X
+kzalloc 1
+lapb_create_cb X
+lc_create X
+lib80211_ccmp_init X
+lib80211_tkip_init X
+lib80211_wep_init X
+libipw_alloc_txb 3
+line6_alloc_sysex_buffer X
+linear_conf X
+llc_sap_alloc X
+loop_alloc X
+lpddr_cmdset X
+lpddr_probe_chip X
+lpfc_alloc_fast_evt X
+lpfc_bsg_event_new X
+lpfc_create_vport_work_array X
+lpfc_els_hbq_alloc X
+lpfc_hba_alloc X
+lpfc_sli4_create_rpi_hdr X
+lpfc_sli4_queue_alloc X
+lpfc_sli4_rb_alloc X
+make_8023_client X
+make_acpi_ec X
+make_bind_capture X
+make_class_name X
+make_cm_node X
+make_driver_name X
+make_EII_client X
+make_entry X
+make_resource X
+make_slot_name X
+map_absent_probe X
+map_ram_probe X
+map_rom_probe X
+match_strdup X
+matroxfb_crtc2_probe X
+mb_cache_create X
+mca_attach_bus X
+mdiobus_alloc X
+md_register_thread X
+mem_cgroup_alloc X
+memstick_alloc_card X
+memstick_alloc_host X
+memtype_get_idx X
+mesh_table_alloc X
+mgsl_allocate_device X
+mini_cm_listen X
+minstrel_alloc X
+minstrel_alloc_sta 2
+mISDN_register_clock X
+mlx4_alloc_db_pgdir X
+mlx4_alloc_icm X
+mlx4_en_add X
+mmc_alloc_host X
+mppe_alloc X
+mpt2sas_transport_port_add X
+mptsas_expander_add X
+mptscsih_info X
+mthca_alloc_icm X
+mthca_alloc_icm_table X
+mv88e1xxx_phy_create X
+mv88x201x_phy_create X
+mvs_alloc_task X
+mvs_pci_alloc X
+my3126_phy_create X
+neigh_hash_alloc X
+nes_cm_alloc_core X
+nes_get_cqp_request X
+net_alloc_generic X
+netdev_create_hash X
+netfs_trans_alloc X
+netlbl_unlhsh_add_iface X
+new_adapter X
+new_inode_smack X
+new_l3_process X
+new_node X
+new_plci X
+new_pts_fs_info X
+new_tape_buffer X
+new_writequeue_entry 1
+nfs3_alloc_createdata X
+nfs4_acl_new X
+nfs4_alloc_createdata X
+nfs4_alloc_lockdata X
+nfs4_alloc_lock_state X
+nfs4_alloc_open_state X
+nfs4_alloc_session X
+nfs4_alloc_state_owner X
+nfs4_alloc_unlockdata X
+nfs4_opendata_alloc X
+nfs_alloc_parsed_mount_data X
+nfs_alloc_seqid X
+nfs_alloc_server X
+nfs_cache_defer_req_alloc X
+n_hdlc_alloc X
+ni_65xx_alloc_subdevice_private X
+ni_gpct_device_construct X
+nilfs_segctor_new X
+niu_new_parent X
+nlm_alloc_call X
+nlmclnt_prepare_block X
+nlm_lookup_host X
+nlmsvc_create_block X
+nodemgr_create_node X
+nodemgr_process_unit_directory X
+nsm_create_handle X
+ocfs2_allocate_refcount_tree X
+ocfs2_alloc_quota_recovery X
+ocfs2_dx_dir_kmalloc_leaves X
+ocfs2_new_dlm_debug X
+ocfs2_new_path X
+ocfs2_xattr_bucket_new X
+_osd_request_alloc 0
+osd_WaitEventCreate X
+oslec_create X
+oti6858_buf_alloc X
+p54_convert_db X
+padata_alloc X
+padata_alloc_pd X
+panel_bind_key X
+parkbd_allocate_serio X
+parport_register_device X
+parport_register_port X
+path_rec_create X
+pci_alloc_bus X
+pcibios_get_irq_routing_table X
+pci_create_slot X
+pcie_init X
+pci_mmconfig_add X
+pciserial_init_ports X
+pcmcia_device_add X
+pcpu_get_vm_areas X
+pcrypt_alloc_instance X
+perf_mmap_data_alloc X
+__phonet_device_alloc X
+pkt_alloc_packet_data X
+pkt_bio_alloc X
+pkt_kobj_create X
+pl2303_buf_alloc X
+pm3393_mac_create X
+pm8001_alloc_task X
+pmcraid_alloc_sglist X
+pneigh_lookup X
+pnp_add_card_id X
+pnp_add_id X
+pnp_alloc X
+pnp_alloc_card X
+pnp_alloc_dev X
+pnp_build_option X
+pnp_new_resource X
+pohmelfs_name_alloc X
+pool_allocate X
+pool_alloc_page 1
+posix_acl_alloc 1
+prism2_read_pda X
+prism2_wep_init X
+__proc_create X
+publ_create X
+pvr2_context_create X
+pvr2_dvb_create X
+pvr2_eeprom_fetch X
+pvr2_full_eeprom_fetch X
+pvr2_hdw_create X
+pvr2_ioread_create X
+pvr2_std_create_enum X
+pvr2_stream_create X
+pvr2_sysfs_class_create X
+pvr2_sysfs_create X
+pvr2_v4l2_create X
+qcam_init X
+qdisc_class_hash_alloc X
+qla2x00_alloc_fcport 1
+qla2x00_alloc_work X
+qla84xx_get_chip X
+qset_new_std 3
+queue_new X
+r10bio_pool_alloc 0
+r1bio_pool_alloc 0
+r8a66597_make_td X
+radeon_atombios_get_lvds_info X
+radeon_atombios_get_primary_dac_info X
+radeon_atombios_get_ss_info X
+radeon_atombios_get_tv_dac_info X
+radeon_atombios_set_dac_info X
+radeon_atombios_set_dig_info X
+radeon_combios_get_lvds_info X
+radeon_combios_get_primary_dac_info X
+radeon_combios_get_tv_dac_info X
+radeon_i2c_create X
+radeon_i2c_create_dp X
+radeon_legacy_get_ext_tmds_info X
+radeon_legacy_get_lvds_info_from_regs X
+radeon_legacy_get_tmds_info X
+rate_control_alloc X
+rate_control_pid_alloc X
+rate_control_pid_alloc_sta 2
+rdma_create_xprt X
+rds_message_alloc 1
+rds_rdma_prepare X
+read_rds_samples X
+Realloc X
+realloc_argv X
+recent_entry_init X
+regdom_intersect X
+register_8022_client X
+register_snap_client X
+__register_sysctl_paths X
+relay_alloc_page_array X
+relay_create_buf X
+relay_open X
+__request_region X
+resv_map_alloc X
+rfcomm_dlc_alloc 0
+rfcomm_session_add X
+rfkill_alloc X
+__ring_buffer_alloc X
+ring_buffer_read_start X
+rndis_add_response X
+rpc_alloc_iostats X
+rs_init X
+rxrpc_alloc_bundle 0
+rxrpc_alloc_connection 0
+rxrpc_alloc_local X
+rxrpc_alloc_peer 1
+rxrpc_alloc_transport 2
+saa7164_buffer_alloc X
+sas_ex_discover_end_dev X
+sas_ex_discover_expander X
+sas_phy_alloc X
+sas_port_alloc X
+savemem X
+sbp2_alloc_device X
+scan_behind_bridge X
+scm_fp_dup X
+scsi_alloc_sdev X
+scsi_bios_ptable X
+scsi_host_alloc X
+scsi_prep_async_scan X
+sctp_association_new 3
+sctp_auth_create_key 1
+sctp_auth_make_key_vector 3
+sctp_auth_shkey_create 1
+sctp_datamsg_new 0
+sctp_endpoint_new 1
+sctp_pack_cookie X
+sctp_ssnmap_new 2
+sctp_transport_new 1
+scx200_create_iface X
+sd_alloc_ctl_entry X
+sdebug_device_create 1
+sdev_evt_alloc 1
+seq_create_client1 X
+__seq_open_private X
+serial_buf_alloc X
+sesInfoAlloc X
+sf_sample_new X
+sf_zone_new X
+sg_add_sfp X
+slhc_init X
+slvl_init X
+smk_import_entry X
+smscore_createbuffer X
+smtc_alloc_fb_info X
+snd_ctl_new X
+snd_emux_create_port X
+snd_gf1_mem_xalloc X
+snd_info_create_entry X
+snd_midi_channel_alloc_set X
+snd_midi_channel_init_set X
+snd_pdacf_create X
+snd_seq_create_port X
+snd_seq_fifo_new X
+snd_seq_oss_readq_new X
+snd_seq_oss_timer_new X
+snd_seq_oss_writeq_new X
+snd_seq_pool_new X
+snd_seq_prioq_new X
+snd_seq_timer_new X
+snd_sf_new X
+snd_timer_instance_new X
+__snd_util_memblk_new X
+snd_util_memhdr_new X
+snd_vx_create X
+sock_kmalloc 1
+sock_kmalloc 2
+spi_alloc_device X
+spi_alloc_master X
+squashfs_cache_init X
+srp_add_port X
+srp_alloc_iu 2
+srp_ring_alloc X
+sta_info_alloc 2
+st_allocate_request X
+stl_allocbrd X
+stli_allocbrd X
+stub_device_alloc X
+submit_async_request 5
+subscr_subscribe X
+sv11_init X
+__svc_create X
+svc_setup_socket X
+synaptics_i2c_touch_create X
+sysfs_init_inode_attrs X
+t1_espi_create X
+t1_sge_create X
+t1_tp_create X
+table_seq_start X
+tconInfoAlloc X
+tcp_v4_save_options X
+ti_buf_alloc X
+tifm_alloc_adapter X
+tipc_cltr_create X
+tipc_disc_init_link_req X
+tipc_link_create X
+tipc_nameseq_create X
+tipc_subseq_alloc X
+tipc_zone_create X
+tomoyo_find_or_assign_new_profile X
+tomoyo_realpath_from_path X
+tpm_bios_log_setup X
+tpm_register_hardware X
+trace_create_file_ops X
+ttm_object_device_init X
+ttm_object_file_init X
+ttm_tt_create X
+tty_audit_buf_alloc X
+tty_buffer_alloc X
+_ubh_bread_ X
+ucma_alloc_ctx X
+ucma_alloc_multicast X
+udf_sb_alloc_bitmap X
+umc_device_create X
+usb_alloc_dev X
+usb_alloc_urb 1
+usb_cache_string X
+usb_create_hcd X
+usbctlx_alloc X
+usbip_alloc_iso_desc_pdu X
+usbvision_alloc X
+uvc_alloc_entity X
+uvesafb_prep X
+uvesafb_vbe_state_save X
+__uwb_beca_add X
+uwb_drp_ie_alloc X
+uwb_rc_alloc X
+uwb_rsv_alloc X
+via_new_spec X
+__videobuf_alloc X
+videobuf_dvb_alloc_frontend X
+videocodec_attach X
+vlan_group_alloc X
+vlsi_alloc_ring X
+vmalloc_to_sg X
+vme_dma_pattern_attribute X
+vme_dma_pci_attribute X
+vme_dma_request X
+vme_dma_vme_attribute X
+vme_lm_request X
+vme_master_request X
+vme_new_dma_list X
+vme_slave_request X
+vmxnet3_copy_mc X
+vnic_dev_register X
+vq_req_alloc X
+vsc7326_mac_create X
+vxfs_getfsh X
+__vxge_hw_channel_allocate X
+w1_alloc_dev X
+wl1271_op_prepare_multicast X
+wl_new_wavepoint X
+wlp_create_wssid_e X
+wpan_phy_alloc X
+wusb_dev_alloc X
+xfrm_hash_alloc X
+xfrm_policy_alloc 1
+xfrm_state_alloc X
+xhci_alloc_command 3
+xhci_alloc_container_ctx 2
+xhci_ring_alloc 3
+xhci_segment_alloc 1
+xt_alloc_table_info X
+xv_create_pool X
+z_comp_alloc X
+z_decomp_alloc X
+zfwMemAllocate X
+zlib_init X
+zoran_setup_videocodec X
--- /dev/null	Fri Dec 21 15:00:21 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.allocation_funcs_gfp.remove	Fri Dec 21 15:00:21 2018
@@ -0,0 +1,2 @@
+acquire_group 2
+acquire_group X
--- /dev/null	Fri Dec 21 15:00:21 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.bit_shifters	Fri Dec 21 15:00:21 2018
@@ -0,0 +1,4446 @@
+// list of macros used as shifters.
+// generated by `gen_bit_shifters.sh`
+AB8500_AD_DATA0_OFFSET 0
+AB8500_DA_DATA0_OFFSET 8
+ABORT_CONN 15
+ABORT_ISP_ACTIVE 3
+ABORT_UPCALL 6
+ABS_HAT0X 16
+ABS_HAT0Y 17
+ABS_HAT1X 18
+ABS_HAT1Y 19
+ABS_HAT2X 20
+ABS_HAT2Y 21
+ABS_HAT3X 22
+ABS_HAT3Y 23
+ABS_POS_BITS 13
+ABS_PRESSURE 24
+ABS_RX 3
+ABS_RY 4
+ABS_RZ 5
+ABS_X 0
+ABS_Y 1
+AC97_EI_DACS_SLOT_SHIFT 4
+AC97_SC_SPSR_SHIFT 12
+AC97_SLOT_LFE 9
+AC97_SLOT_MIC 6
+AC97_SLOT_PCM_CENTER 6
+AC97_SLOT_PCM_LEFT_0 7
+AC97_SLOT_PCM_LEFT 3
+AC97_SLOT_PCM_RIGHT_0 8
+AC97_SLOT_PCM_RIGHT 4
+AC97_SLOT_PCM_SLEFT 7
+AC97_SLOT_PCM_SRIGHT 8
+AC97_SLOT_SPDIF_LEFT1 6
+AC97_SLOT_SPDIF_LEFT2 10
+AC97_SLOT_SPDIF_LEFT 7
+AC97_SLOT_SPDIF_RIGHT1 9
+AC97_SLOT_SPDIF_RIGHT2 11
+AC97_SLOT_SPDIF_RIGHT 8
+AC_AMPCAP_MUTE_SHIFT 31
+AC_AMPCAP_NUM_STEPS_SHIFT 8
+AC_AMPCAP_OFFSET_SHIFT 0
+AC_AMPCAP_STEP_SIZE_SHIFT 16
+AC_AMP_SET_INDEX_SHIFT 8
+AC_DEFCFG_DEVICE_SHIFT 20
+AC_DEFCFG_PORT_CONN_SHIFT 30
+ACK_RATIO_SHIFT 4
+AC_PARAM_ECW_MAX_OFFSET 12
+AC_PARAM_ECW_MIN_OFFSET 8
+AC_PARAM_TXOP_OFFSET 16
+ACPI_BATTERY_ALARM_PRESENT 0
+ACPI_BATTERY_QUIRK_PERCENTAGE_CAPACITY 2
+ACPI_BATTERY_QUIRK_THINKPAD_MAH 3
+ACPI_BATTERY_XINFO_PRESENT 1
+ACPI_X_SLEEP_TYPE_POSITION 2
+ACT_ESTAB 3
+ACT_OFLD_CONN 1
+ACT_OPEN_REQ 0
+ACT_OPEN_RPL 2
+ACT_RETRY_INUSE 21
+ACT_RETRY_NOMEM 20
+AD1836_ADC_WORD_OFFSET 4
+AD1836_DAC_WORD_LEN_OFFSET 3
+AD193X_ADC_CHAN_SHFT 4
+AD193X_DAC_CHAN_SHFT 1
+AD193X_DAC_WORD_LEN_SHFT 3
+AD5380_CTRL_PWR_DOWN_MODE_OFFSET 13
+AD5449_CTRL_SDO_OFFSET 10
+AD5755_DC_DC_FREQ_SHIFT 2
+AD5755_DC_DC_MAXV 0
+AD5755_DC_DC_PHASE_SHIFT 4
+AD5755_SLEW_RATE_SHIFT 3
+AD5755_SLEW_STEP_SIZE_SHIFT 0
+AD7816_TEMP_FLOAT_OFFSET 2
+AD799X_CHANNEL_SHIFT 4
+AD9832_FREQ_BITS 32
+AD9832_PHASE_BITS 12
+AD9834_FREQ_BITS 28
+AD9834_PHASE_BITS 12
+ADAP_INIT 0
+ADAP_SLEEP 1
+ADAP_STREAMING 2
+ADAPTER_STATE_GOING_DOWN 1
+ADAPTER_STATE_INIT_FAILED 31
+ADAPTER_STATE_LINK_DOWN 2
+ADAPTER_STATE_READY 3
+ADAPTER_STATE_UP 0
+ADAU1373_EP_CTRL_MICBIAS1_OFFSET 4
+ADAU1373_EP_CTRL_MICBIAS2_OFFSET 2
+ADC_FRAC_BITS 14
+ADDR_LEN 6
+addr_shift 12
+ADM1031_UPDATE_RATE_SHIFT 2
+ADMA_MMIO_BAR 4
+ADT7316_T_VALUE_FLOAT_OFFSET 2
+ADT7462_PWM_CHANNEL_SHIFT 5
+ADT7462_PWM_RANGE_SHIFT 4
+AEL2020_GPIO_MODDET 1
+AF_82XX_DUMP_READING 26
+AF_82XX_FW_DUMPED 24
+AF_83XX_IOCB_INTR_ON 28
+AF_83XX_MBOX_INTR_ON 29
+AF_83XX_NO_FW_DUMP 27
+AF_8XXX_RST_OWNER 25
+AF_BUILD_DDB_LIST 22
+AF_EEH_BUSY 20
+AF_FW_RECOVERY 19
+AF_GET_CRASH_RECORD 7
+AF_HA_REMOVAL 12
+AF_INIT_DONE 1
+AF_INTERRUPTS_ON 6
+AF_INTx_ENABLED 15
+AF_IRQ_ATTACHED 10
+AF_LINK_UP 8
+AF_LOOPBACK 9
+AF_MBOX_COMMAND 2
+AF_MBOX_COMMAND_DONE 3
+AF_MBOX_COMMAND_NOPOLL 18
+AF_MSI_ENABLED 16
+AF_MSIX_ENABLED 17
+AF_ONLINE 0
+AF_PCI_CHANNEL_IO_PERM_FAILURE 21
+AF_ST_DISCOVERY_IN_PROGRESS 4
+AFS_VNODE_AUTOCELL 10
+AFS_VNODE_CB_BROKEN 0
+AFS_VNODE_DELETED 4
+AFS_VNODE_LOCKING 6
+AFS_VNODE_MODIFIED 2
+AFS_VNODE_MOUNTPOINT 5
+AFS_VNODE_PSEUDODIR 11
+AFS_VNODE_READLOCKED 7
+AFS_VNODE_UNSET 1
+AFS_VNODE_WRITELOCKED 8
+AFS_VNODE_ZAP_DATA 3
+AGP_FF_ALLOW_CLIENT 0
+AGP_FF_ALLOW_CONTROLLER 1
+AGP_FF_IS_CLIENT 2
+AGP_FF_IS_CONTROLLER 3
+AGP_FF_IS_VALID 4
+AHCI_PCI_BAR 5
+AIC32X4_DOSRMSB_SHIFT 4
+AIC32X4_PLLJ_SHIFT 6
+ALARM_ENABLE_SHIFT 7
+ALI_AC97_GPIO_DATA_SHIFT 16
+_ALLOC_dirid_groups 10
+_ALLOC_packing_groups 12
+_ALLOC_skip_busy 5
+ALSA_CAPTURE_OPEN 2
+ALSA_CAPTURE_RUNNING 4
+ALSA_PLAYBACK_OPEN 3
+ALSA_PLAYBACK_RUNNING 5
+ALT_NAK_OUT_PACKETS 7
+ALX_DEV_CTRL_MAXRRS_MIN 2
+ALX_DMA_RCHNL_SEL_SHIFT 26
+ALX_DMA_RDLY_CNT_SHIFT 11
+ALX_DMA_RORDER_MODE_SHIFT 0
+ALX_DMA_RREQ_BLEN_SHIFT 4
+ALX_DMA_WDLY_CNT_SHIFT 16
+ALX_HQTPD_Q1_NUMPREF_SHIFT 0
+ALX_HQTPD_Q2_NUMPREF_SHIFT 4
+ALX_HQTPD_Q3_NUMPREF_SHIFT 8
+ALX_IRQ_MODU_TIMER1_SHIFT 0
+ALX_MAC_CTRL_PRMBLEN_SHIFT 10
+ALX_MDIO_CLK_SEL_SHIFT 24
+ALX_MDIO_DATA_SHIFT 0
+ALX_MDIO_EXTN_DEVAD_SHIFT 16
+ALX_MDIO_EXTN_REG_SHIFT 0
+ALX_MDIO_REG_SHIFT 16
+ALX_MSI_RETRANS_TM_SHIFT 0
+ALX_RXQ0_IDT_TBL_SIZE_SHIFT 8
+ALX_RXQ0_NUM_RFD_PREF_SHIFT 20
+ALX_RXQ0_RSS_MODE_SHIFT 26
+ALX_RXQ2_RXF_XOFF_THRESH_SHIFT 16
+ALX_RXQ2_RXF_XON_THRESH_SHIFT 0
+ALX_TXQ0_TPD_BURSTPREF_SHIFT 0
+ALX_TXQ0_TXF_BURST_PREF_SHIFT 16
+ALX_WRR_PRI0_SHIFT 0
+ALX_WRR_PRI1_SHIFT 8
+ALX_WRR_PRI2_SHIFT 16
+ALX_WRR_PRI3_SHIFT 24
+ALX_WRR_PRI_SHIFT 29
+AMP_VAL_IDX_SHIFT 19
+ANALOG_FUZZ_BITS 2
+ANAPARAM_PWR0_SHIFT 28
+ANAPARAM_PWR1_SHIFT 20
+ANAPARAM_TXDACOFF_SHIFT 27
+APDS990X_APERS_SHIFT 0
+APDS990X_PPERS_SHIFT 4
+APERFMPERF_PRESENT 0
+AR5416_EEPROM_S 2
+AR5523_CONNECTED 2
+AR5523_HW_UP 0
+AR5523_USB_DISCONNECTED 1
+AR5K_BSS_ID1_AID_S 16
+AR5K_EEPROM_SIZE_ENDLOC_SHIFT 12
+AR5K_IFS0_DIFS_S 11
+AR5K_IFS1_CS_EN_S 26
+AR5K_NODCU_RETRY_LMT_CW_MIN_S 20
+AR5K_RSSI_THR_BMISS_S 8
+AR_ANT_DIV_CTRL_ALL_S 25
+AR_BufLen_S 16
+AR_CtrlStat_S 14
+AR_DescId_S 16
+AR_FAST_DIV_ENABLE_S 13
+ARITH_SHIFT 8
+ARIZONA_AIF1_RATE_SHIFT 11
+ARIZONA_AIF1TX_WL_SHIFT 8
+ARIZONA_CABLE_HEADPHONE 2
+ARIZONA_CABLE_MICROPHONE 1
+ARIZONA_FLL1_CLK_REF_DIV_SHIFT 6
+ARIZONA_FLL1_CLK_REF_SRC_SHIFT 0
+ARIZONA_FLL1_FRATIO_SHIFT 8
+ARIZONA_FLL1_GAIN_SHIFT 2
+ARIZONA_FLL1_OUTDIV_SHIFT 1
+ARIZONA_HAP_CTRL_SHIFT 2
+ARIZONA_HP_IMPEDANCE_RANGE_SHIFT 9
+ARIZONA_IN1_DMIC_SUP_SHIFT 11
+ARIZONA_IN1_MODE_SHIFT 9
+ARIZONA_LDO1_VSEL_SHIFT 5
+ARIZONA_MICD_BIAS_STARTTIME_SHIFT 12
+ARIZONA_MICD_DBTIME_SHIFT 1
+ARIZONA_MICD_RATE_SHIFT 8
+ARIZONA_OPCLK_DIV_SHIFT 3
+ARIZONA_SYSCLK_FREQ_SHIFT 8
+ARIZONA_SYSCLK_SRC_SHIFT 0
+AR_PHY_9285_ANT_DIV_ALT_LNACONF_S 25
+AR_PHY_9285_ANT_DIV_MAIN_LNACONF_S 27
+AR_PHY_9285_FAST_DIV_BIAS_S 9
+AR_PHY_ANT_DIV_ALT_GAINTB_S 29
+AR_PHY_ANT_DIV_ALT_LNACONF_S 25
+AR_PHY_ANT_DIV_LNADIV_S 24
+AR_PHY_ANT_DIV_MAIN_GAINTB_S 30
+AR_PHY_ANT_DIV_MAIN_LNACONF_S 27
+AR_PHY_ANT_FAST_DIV_BIAS_S 9
+AR_PHY_ANT_SW_RX_PROT_S 23
+AR_PHY_SFCORR_SPUR_SUBCHNL_SD_S 28
+AR_TxQcuNum_S 8
+AR_TxRxDesc_S 15
+AS_EIO 25
+AS_ENOSPC 26
+AS_PUSH_SHIFT 62
+ASYNCB_CHECK_CD 25
+ASYNCB_CLOSING 27
+ASYNCB_CTS_FLOW 26
+ASYNCB_INITIALIZED 31
+ASYNCB_SUSPENDED 30
+ATA_SHIFT_MWDMA 7
+ATA_SHIFT_PIO 0
+ATA_SHIFT_UDMA 12
+__AT_DOWN 3
+ATH10K_PCI_FEATURE_HW_1_0_WARKAROUND 1
+ATH10K_PCI_FEATURE_MSI_X 0
+ATH9K_NUM_TX_QUEUES 10
+ATH9K_TXDESC_PAPRD_S 16
+ATH_STAT_STARTED 3
+ATI_REG_CMD_SPDF_THRESHOLD_SHIFT 6
+ATI_REG_MODEM_OUT1_DMA_THRESHOLD_SHIFT 16
+ATI_REG_OUT_DMA_THRESHOLD_SHIFT 11
+ATI_REG_PHYS_OUT_ADDR_SHIFT 9
+ATI_REG_PHYS_OUT_DATA_SHIFT 16
+ATL1C_WORK_EVENT_LINK_CHANGE 1
+ATL1C_WORK_EVENT_RESET 0
+__ATL2_DOWN 2
+ATM_DF_REMOVED 0
+ATMEL_AT45DB0X1B_PAGE_POS 9
+ATM_HDR_GFC_SHIFT 28
+ATM_HDR_PTI_SHIFT 1
+ATM_HDR_VCI_SHIFT 4
+ATM_HDR_VPI_SHIFT 20
+ATM_VF_ADDR 0
+ATM_VF_BOUND 4
+ATM_VF_CLOSE 11
+ATM_VF_HASQOS 6
+ATM_VF_HASSAP 10
+ATM_VF_IS_CLIP 13
+ATM_VF_LISTEN 7
+ATM_VF_META 8
+ATM_VF_PARTIAL 2
+ATM_VF_READY 1
+ATM_VF_REGIS 3
+ATM_VF_RELEASED 5
+ATM_VF_SESSION 9
+ATM_VF_WAITING 12
+ATOM_PPLL0 2
+ATOM_PPLL1 0
+ATOM_PPLL2 1
+ATOM_PPLL_SS_AMOUNT_V2_NFRAC_SHIFT 8
+ATOM_S2_CURRENT_BL_LEVEL_SHIFT 8
+ATP867X_BAR_IOBASE 0
+ATP867X_IO_DMAMODE_MSTR_SHIFT 0
+ATP867X_IO_DMAMODE_SLAVE_SHIFT 4
+ATP867X_IO_PIOSPD_ACTIVE_SHIFT 4
+ATP867X_IO_PIOSPD_RECOVER_SHIFT 0
+AutoDetected 4
+AUTOVALIDATE 5
+AXF_ERROR 2
+AXF_ESCAPE 1
+AXF_INUSE 0
+B1_HDLC 0
+B43_DMA32_DCTL_ADDREXT_SHIFT 16
+B43_DMA32_RXADDREXT_SHIFT 16
+B43_DMA32_RXFROFF_SHIFT 1
+B43_DMA32_TXADDREXT_SHIFT 16
+B43_DMA64_DCTL1_ADDREXT_SHIFT 16
+B43_DMA64_RXADDREXT_SHIFT 16
+B43_DMA64_RXFROFF_SHIFT 1
+B43_DMA64_TXADDREXT_SHIFT 16
+B43legacy_DMA32_DCTL_ADDREXT_SHIFT 16
+B43legacy_DMA32_RXADDREXT_SHIFT 16
+B43legacy_DMA32_RXFROFF_SHIFT 1
+B43legacy_DMA32_TXADDREXT_SHIFT 16
+B43legacy_TX4_MAC_KEYALG_SHIFT 16
+B43legacy_TX4_MAC_KEYIDX_SHIFT 20
+B43_NPHY_BPHY_CTL3_SCALE_SHIFT 0
+B43_NPHY_C1_INITGAIN_HPVGA2_SHIFT 7
+B43_NPHY_C1_MINGAIN_SHIFT 0
+B43_NPHY_C2_INITGAIN_HPVGA2_SHIFT 7
+B43_NPHY_C2_MINGAIN_SHIFT 0
+B43_NPHY_OVER_DGAIN_CCKDGECV_SHIFT 8
+B43_NPHY_RFCTL_CMD_CORESEL_SHIFT 3
+B43_NPHY_RFSEQCA_RXDIS_SHIFT 12
+B43_NPHY_RFSEQCA_RXEN_SHIFT 4
+B43_NPHY_TXPCTL_ITSSI_0_SHIFT 0
+B43_NPHY_TXPCTL_ITSSI_1_SHIFT 8
+B43_NPHY_TXPCTL_N_NPTIL2_SHIFT 8
+B43_NPHY_TXPCTL_N_TSSID_SHIFT 0
+B43_NPHY_TXPCTL_TPWR_0_SHIFT 0
+B43_NPHY_TXPCTL_TPWR_1_SHIFT 8
+B43_PHY_BBANDCFG_RXANT_SHIFT 7
+B43_PHY_HT_TXPCTL_IDLE_TSSI2_C3_SHIFT 0
+B43_PHY_HT_TXPCTL_IDLE_TSSI_C1_SHIFT 0
+B43_PHY_HT_TXPCTL_IDLE_TSSI_C2_SHIFT 8
+B43_PHY_HT_TXPCTL_N_NPTIL2_SHIFT 8
+B43_PHY_HT_TXPCTL_TARG_PWR2_C3_SHIFT 0
+B43_PHY_HT_TXPCTL_TARG_PWR_C1_SHIFT 0
+B43_PHY_HT_TXPCTL_TARG_PWR_C2_SHIFT 8
+B43_TXH_MAC_KEYALG_SHIFT 16
+B43_TXH_MAC_KEYIDX_SHIFT 20
+B577XX_DOORBELL_HDR_CONN_TYPE_SHIFT 4
+B577XX_DOORBELL_HDR_DB_TYPE_SHIFT 1
+B577XX_DOORBELL_HDR_RX_SHIFT 0
+B577XX_FCOE_RX_DOORBELL_NEGATIVE_ARM_SHIFT 0
+B577XX_FCOE_RX_DOORBELL_OPCODE_SHIFT 5
+BBSHIFT 9
+BCD_EN_SHIFT 0
+BC_FLG_ACTIV 2
+BC_FLG_BUSY 3
+BCMA_CC_PMU15_PLL_PC0_FREQTGT_SHIFT 2
+BCMA_CC_PMU1_PLL0_PC0_P1DIV_SHIFT 20
+BCMA_CC_PMU1_PLL0_PC2_NDIV_INT_SHIFT 20
+BCMA_CC_PMU_CTL_RES_SHIFT 13
+BCMA_CORE_PCI_MDIODATA_DEVADDR_SHF 23
+BCMA_CORE_PCI_MDIODATA_DEVADDR_SHF_OLD 22
+BCMA_CORE_PCI_MDIODATA_REGADDR_SHF 18
+BCMA_CORE_PCI_MDIODATA_REGADDR_SHF_OLD 18
+BCMA_CORE_PCI_SPROM_PI_SHIFT 12
+BCN_TCFG_CW_SHIFT 8
+BCN_TCFG_IFS 0
+BDC_FLAG_VER_SHIFT 4
+BDI_async_congested 1
+BDINFO_FLAGS_MAXLEN_SHIFT 16
+BDI_registered 3
+B_DIRTY 2
+BDI_sync_congested 2
+BDI_writeback_running 4
+BEACON_BLINK_NEEDED 11
+BFI_MSIX_CT_MAX 9
+BFUSB_TX_WAKEUP 2
+BH_Delay 9
+BH_Dirty 1
+BH_JWrite 17
+BH_Lock 2
+BH_Mapped 5
+BH_New 6
+BH_NILFS_Node 17
+BH_Pinned 16
+BH_Quiet 13
+BH_Uptodate 0
+BIAS_MOD_LEVEL_SHIFT 8
+BICTCP_HZ 10
+BIO_BOUNCED 5
+BIO_CLONED 4
+BIO_EOF 2
+BIO_EOPNOTSUPP 7
+BIO_MAPPED_INTEGRITY 11
+BIO_NULL_MAPPED 8
+BIO_OWNS_VEC 13
+BIO_QUIET 10
+BIO_RESET_BITS 13
+BIO_SEG_VALID 3
+BIO_SNAP_STABLE 12
+BIO_UPTODATE 0
+BIO_USER_MAPPED 6
+BIT_AGGREGATION 3
+BITMAP_HOSTENDIAN 15
+BITMAP_IO 9
+BITMAP_STALE 1
+BITMAP_WRITE_ERROR 2
+BIT_MULTI_CS 0
+BIT_QOS 2
+BIT_WIMAX 1
+BLOCKACKPARAM_WINSIZE_POS 6
+Blocked 5
+BlockedBadBlocks 8
+BLOCK_FREED 2
+BLOCK_HASH_SHIFT 16
+BLOCK_NEEDS_FLUSH 4
+BLUE_IS_PULSE 4
+BLUE_LED 0
+BLUE_PULSE_LED 1
+BME_LOCKED 1
+BME_NO_WRITES 0
+BM_PAGE_HINT_WRITEOUT 27
+BM_PAGE_IO_ERROR 30
+BM_PAGE_LAZY_WRITEOUT 28
+BM_PAGE_NEED_WRITEOUT 29
+BM_RCTL_MO_SHIFT 3
+BNAD_RF_CEE_RUNNING 0
+BNAD_RF_DIM_TIMER_RUNNING 4
+BNAD_RF_MBOX_IRQ_DISABLED 2
+BNAD_RF_NETDEV_REGISTERED 3
+BNAD_RXQ_POST_OK 1
+BNAD_RXQ_STARTED 0
+BNAD_TXQ_TX_STARTED 1
+BNX2FC_CNIC_REGISTERED 1
+BNX2FC_CTLR_INIT_DONE 0
+BNX2FC_FLAG_CMD_LOST 12
+BNX2FC_FLAG_CTX_ALLOC_FAILURE 6
+BNX2FC_FLAG_DESTROY_CMPL 1
+BNX2FC_FLAG_DESTROYED 4
+BNX2FC_FLAG_DISABLED 3
+BNX2FC_FLAG_DISABLE_FAILED 9
+BNX2FC_FLAG_EH_ABORT 8
+BNX2FC_FLAG_ELS_TIMEOUT 11
+BNX2FC_FLAG_ENABLED 10
+BNX2FC_FLAG_FW_INIT_DONE 0
+BNX2FC_FLAG_IO_CLEANUP 6
+BNX2FC_FLAG_IO_COMPL 9
+BNX2FC_FLAG_ISSUE_ABTS 2
+BNX2FC_FLAG_ISSUE_RRQ 1
+BNX2FC_FLAG_OFFLOADED 2
+BNX2FC_FLAG_OFLD_REQ_CMPL 5
+BNX2FC_FLAG_RETIRE_OXID 7
+BNX2FC_FLAG_SESSION_READY 1
+BNX2FC_FLAG_SRR_SENT 13
+BNX2FC_FLAG_TM_COMPL 4
+BNX2FC_FLAG_TM_TIMEOUT 5
+BNX2FC_FLAG_UPLD_REQ_COMPL 7
+BNX2I_CNIC_REGISTERED 1
+BNX2I_NX2_DEV_5706 0
+BNX2I_NX2_DEV_5708 1
+BNX2I_NX2_DEV_5709 2
+BNX2I_NX2_DEV_57710 3
+BNX2_L2CTX_L2_STATUSB_NUM_SHIFT 24
+BNX2_PCICFG_INT_ACK_CMD_INT_NUM_SHIFT 24
+BNX2X_AFEX_FCOE_Q_UPDATE_PENDING 12
+BNX2X_AFEX_PENDING_VIFSET_MCP_ACK 13
+BNX2X_DB_SHIFT 7
+BNX2X_DONT_CONSUME_CAM_CREDIT 4
+BNX2X_ETH_MAC 1
+BNX2X_FILTER_RX_MODE_PENDING 3
+BNX2X_FILTER_RX_MODE_SCHED 4
+BNX2X_PRI_FLAG_FCOE 1
+BNX2X_PRI_FLAG_ISCSI 0
+BNX2X_PRI_FLAG_STORAGE 2
+BNX2X_Q_TYPE_HAS_RX 0
+BNX2X_Q_TYPE_HAS_TX 1
+BNX2X_SP_RTNL_AFEX_F_UPDATE 3
+BNX2X_SP_RTNL_ENABLE_SRIOV 4
+BNX2X_SP_RTNL_FAN_FAILURE 2
+BNX2X_SP_RTNL_HYPERVISOR_VLAN 8
+BNX2X_SP_RTNL_TX_TIMEOUT 1
+BNX2X_SP_RTNL_VFPF_CHANNEL_DOWN 6
+BNX2X_SP_RTNL_VFPF_MCAST 5
+BNX2X_SP_RTNL_VFPF_STORM_RX_MODE 7
+BNX2X_VF_CID_WND 0
+BOOST_DPM_LEVEL 7
+BPP_TUNED18_SHIFT_8411 4
+BP_VECTOR 3
+BRCMF_FWS_FIFO_AC_BE 1
+BRCMF_P2P_STATUS_ACTION_TX_COMPLETED 6
+BRCMF_P2P_STATUS_ACTION_TX_NOACK 7
+BRCMF_P2P_STATUS_DISCOVER_LISTEN 9
+BRCMF_P2P_STATUS_ENABLED 0
+BRCMF_P2P_STATUS_FINDING_COMMON_CHANNEL 13
+BRCMF_P2P_STATUS_GO_NEG_PHASE 8
+BRCMF_P2P_STATUS_SENDING_ACT_FRAME 10
+BRCMF_P2P_STATUS_WAITING_NEXT_ACT_FRAME 12
+BRCMF_P2P_STATUS_WAITING_NEXT_AF_LISTEN 11
+BRCMF_SCAN_STATUS_ABORT 1
+BRCMF_SCAN_STATUS_BUSY 0
+BRCMF_SCAN_STATUS_SUPPRESS 2
+BRCMF_VIF_STATUS_AP_CREATED 5
+BRCMF_VIF_STATUS_AP_CREATING 4
+BRCMF_VIF_STATUS_CONNECTED 2
+BRCMF_VIF_STATUS_CONNECTING 1
+BRCMF_VIF_STATUS_READY 0
+B_READING 0
+BR_PORT_BITS 10
+B_RS_H_DONE 20
+BSG_F_BLOCK 1
+BS_READABLE 1
+BS_WRITABLE 2
+BTN_A 304
+BTN_DEAD 303
+BTN_EXTRA 276
+BTN_LEFT 272
+BTN_MIDDLE 274
+BTN_RIGHT 273
+BTN_SIDE 275
+BTN_TOOL_DOUBLETAP 333
+BTN_TOOL_FINGER 325
+BTN_TOOL_QUADTAP 335
+BTN_TOOL_TRIPLETAP 334
+BTN_TOUCH 330
+BT_OP_PRIORITY_DETECTED 0
+BT_OP_SCAN 1
+BTRFS_FS_STATE_ERROR 0
+BTRFS_FS_STATE_REMOUNTING 1
+BTRFS_INODE_COPY_EVERYTHING 8
+BTRFS_INODE_DELALLOC_META_RESERVED 4
+BTRFS_INODE_DUMMY 2
+BTRFS_INODE_HAS_ASYNC_EXTENT 6
+BTRFS_INODE_HAS_ORPHAN_ITEM 5
+BTRFS_INODE_IN_DEFRAG 3
+BTRFS_INODE_IN_DELALLOC_LIST 9
+BTRFS_INODE_NEEDS_FULL_SYNC 7
+BTRFS_INODE_ORDERED_DATA_CLOSE 0
+BTRFS_ORDERED_COMPLETE 1
+BTRFS_ORDERED_DIRECT 5
+BTRFS_ORDERED_IOERR 6
+BTRFS_ORDERED_UPDATED_ISIZE 7
+BTRFS_STRIPE_HASH_TABLE_BITS 11
+BTR_SJW_SHIFT 6
+BTR_TSEG1_SHIFT 8
+BTR_TSEG2_SHIFT 12
+BT_SK_DEFER_SETUP 0
+BT_SK_SUSPEND 1
+BTUSB_BULK_RUNNING 1
+BTUSB_DID_ISO_RESUME 4
+BTUSB_SUSPENDING 3
+BUFFER_EMPTY 6
+BUFFER_FLUSH 7
+BUFFER_FULL 7
+BUFFERING_RX 2
+BUFF_FLAGS_OFFSET 24
+BurstLenShift 8
+BUS_CNTL1_MOBILE_PLATFORM_SEL_SHIFT 26
+BUS_WIDTH 0
+BUSWIDTH 1
+BYTE_SHIFT 3
+CACHE_CLEANED 3
+CACHEFILES_DEAD 1
+CACHEFILES_READY 0
+CACHE_NEGATIVE 1
+CACHE_SET_STOPPING_2 2
+CACHE_SET_UNREGISTERING 0
+CACHE_VALID 0
+CALIB_FRAC_BITS 10
+CALLBACK_PENDING 11
+CALShift 14
+CAM_CTRL_INDEX_SHIFT 16
+CAM_OUT_CQ_ID_SHIFT 5
+CAM_OUT_FUNC_SHIFT 2
+CANCEL_DC_I_SHIFT 5
+CANCEL_DC_Q_SHIFT 0
+CAN_SFF_ID_BITS 11
+CAPTURE_URB_COMPLETED 6
+CARD_HAS_ACTIVITY_LED 6
+CARD_HAS_PCCARD_ID 4
+CARD_HAS_POWER_LED 5
+CARD_READY 1
+CARL9170_TX_SUPER_AMPDU_DENSITY_S 0
+CARL9170_TX_SUPER_AMPDU_FACTOR_S 3
+CARL9170_TX_SUPER_RI_ERP_PROT_S 3
+CB710_MMC_CMD_CODE_SHIFT 8
+CDC_DCMD_ID_SHIFT 16
+CDC_DCMD_IF_SHIFT 12
+CEPH_BLOCK_SHIFT 22
+CF_CLOSE 6
+CF_CONFIG_NEEDED 1
+CF_CONFIG_NEEDED 4
+CF_CONNECTED 1
+CF_DMA_ACTIVE 3
+CFG_CHARGE_CURRENT_FCC_SHIFT 5
+CFG_CHARGE_CURRENT_PCC_SHIFT 3
+CFG_CURRENT_LIMIT_DC_SHIFT 4
+CFG_FLOAT_VOLTAGE_THRESHOLD_SHIFT 6
+CFG_OTG_CC_COMPENSATION_SHIFT 6
+CFG_OTG_TEMP_THRESHOLD_SHIFT 4
+CFG_Q_SHIFT 8
+CFGR_BLV_SHIFT 3
+CFG_TEMP_LIMIT_HARD_COLD_SHIFT 6
+CFG_TEMP_LIMIT_HARD_HOT_SHIFT 4
+CFG_TEMP_LIMIT_SOFT_COLD_SHIFT 2
+CFG_TEMP_LIMIT_SOFT_HOT_SHIFT 0
+CFG_THERM_SOFT_COLD_COMPENSATION_SHIFT 2
+CFG_THERM_SOFT_HOT_COMPENSATION_SHIFT 0
+CFHSI_AWAKE 3
+CFHSI_FLUSH_FIFO 6
+CFHSI_SHUTDOWN 5
+CFHSI_WAKE_DOWN_ACK 2
+CFHSI_WAKE_UP_ACK 1
+CF_IS_OTHERCON 5
+CFPREP_CBI_SHIFT 6
+CFQ_SERVICE_SHIFT 12
+CF_SG_RESTART 6
+CF_SINGLE_BUFFER 5
+CF_WRITE_PENDING 2
+CGRP_CPUSET_CLONE_CHILDREN 3
+CGRP_DEAD 0
+CGRP_NOTIFY_ON_RELEASE 2
+CGRP_RELEASABLE 1
+CH7017_LOOP_FILTER_SHIFT 5
+CH7017_LVDS_PLL_FEED_BACK_DIVIDER_SHIFT 4
+CH7017_LVDS_PLL_FEED_FORWARD_DIVIDER_SHIFT 0
+CH7017_LVDS_PLL_POST_SCALE_DIV_SHIFT 0
+CH7017_LVDS_PLL_VCO_SHIFT 4
+CH7017_PHASE_DETECTOR_SHIFT 0
+CHANNEL_ABORT 2
+CHANNEL_CLEAR_INTERRUPT 3
+CHANNEL_DONE 4
+CHANNEL_DOWN 2
+CHANNEL_ENABLE 0
+CHANNEL_START 1
+CHIP_RESET 3
+CHIP_SELECT_BIT12 12
+CHUNK_SHIFT 6
+CISTPL_POWER_VNOM 0
+CLEAN_LIST_BUSY_BIT 0
+CLEAN_SHUTDOWN 0
+CLEAR_BSSFILTER_ON_BEACON 5
+CLEAR_CONTROL_STATUS_PHASE_HANDSHAKE 3
+CLEAR_ENDPOINT_HALT 0
+CLEAR_ENDPOINT_TOGGLE 1
+CLEAR_EP_FORCE_CRC_ERROR 5
+CLEAR_EP_HIDE_STATUS_PHASE 6
+CLEAR_INTERRUPT_MODE 4
+CLEAR_NAK_OUT_PACKETS 7
+CLEAR_NAK_OUT_PACKETS_MODE 2
+CLK_27M_MCLK_SHIFT 3
+CLK312_EN_LBN 3
+CLK_32K_SR_SHIFT 4
+CLKDIV_IN_SHIFT 6
+CLKOUT_SL_SHIFT 4
+CLK_PWRMGT_CNTL__ACTIVE_HILO_LAT__SHIFT 13
+CLK_RATIO_SHIFT 1
+CLK_SPEED_SHIFT 5
+CLOCK_SELECT_SHIFT 4
+CLOSE_SENT 3
+CLOSE_UPCALL 8
+CL_SEL_POS 1
+CL_ST_CHG_FAIL 4
+CL_ST_CHG_SUCCESS 3
+CMA_OPTION_AFONLY 0
+CM_ASFC_SHIFT 10
+CM_CH0FMT_SHIFT 0
+CM_CH1FMT_SHIFT 2
+CMDQ_STAT_LAST_PKT_DB 2
+CMDQ_STAT_RUNNING 1
+CM_DSFC_SHIFT 13
+CMTP_LOOPBACK 0
+CNF1_SJW_SHIFT 6
+CNF2_PS1_SHIFT 3
+CNIC_F_BNX2_CLASS 3
+CNIC_F_BNX2X_CLASS 4
+CNIC_F_CNIC_UP 1
+CNIC_LCL_FL_KWQ_INIT 0
+CNIC_LCL_FL_L2_WAIT 1
+CNIC_LCL_FL_RINGS_INITED 2
+CNIC_LCL_FL_STOP_ISCSI 4
+COMMANDII_RANGE_SHIFT 0
+COMMANDII_RESOLUTION_SHIFT 2
+COMMANDII_SCHEME_SHIFT 7
+COMMMAND1_OPMODE_SHIFT 5
+CONF_CONNECT_PEND 5
+CONF_EWS_RECV 8
+CONFIG_CHANNEL_HT40 6
+CONFIG_HT_DISABLED 8
+CONFIG_POWERSAVING 7
+CONFIG_QOS_DISABLED 9
+CONFIGURE_PROX_SLP_SH 4
+CONFIG_WIZNET_BUS_SHIFT 0
+CONF_INPUT_DONE 1
+CONF_LOC_CONF_PEND 9
+CONF_MODE_DONE 4
+CONF_MTU_DONE 3
+CONF_NOT_COMPLETE 11
+CONF_OUTPUT_DONE 2
+CONF_RECV_NO_FCS 6
+CONF_REM_CONF_PEND 10
+CONF_REQ_SENT 0
+CONF_STATE2_DEVICE 7
+CONN_DRY_RUN 8
+CONNECTED 0
+CONNECT_PEND 1
+CONN_LOCAL_BUSY 5
+CONN_REJ_ACT 6
+CONN_REMOTE_BUSY 4
+CONNREQ_UPCALL 14
+CONN_RNR_SENT 8
+CONN_RPL_UPCALL 19
+CONN_SEND_FBIT 7
+CONN_SREJ_ACT 2
+CONN_WD_ST_CHG_FAIL 7
+CONN_WD_ST_CHG_OKAY 6
+CONN_WD_ST_CHG_REQ 5
+CONSIDER_RESYNC 6
+CONTROL_INV_TIMEOUT 5
+CONTROL_SHIFT 6
+CONTROL_STATUS_INTERRUPT 1
+CONTROL_STATUS_INTERRUPT 6
+CONTROL_STATUS_PHASE_HANDSHAKE 3
+COOKIEBITS 24
+COUNTER_SHIFT 16
+CPHY_SATA_DPLL_SHIFT 8
+CPL_RX_DDP_STATUS_DCRC_SHIFT 21
+CPL_RX_DDP_STATUS_DDP_SHIFT 16
+CPL_RX_DDP_STATUS_HCRC_SHIFT 20
+CPL_RX_DDP_STATUS_PAD_SHIFT 19
+cpuset_subsys_id 0
+CRASHED_PRIMARY 5
+CR_MAXPEXP 4
+CRQB_CMD_ADDR_SHIFT 8
+CRQB_HOSTQ_SHIFT 17
+CRQB_PMP_SHIFT 12
+CRQB_TAG_SHIFT 1
+CRVML_CLOCK_SHIFT 8
+CS2000_LOCK_CLK_SHIFT 1
+CS2000_R_SEL_SHIFT 3
+CS42L52_BEEP_RATE_SHIFT 4
+CS42L52_CHARGE_PUMP_SHIFT 4
+CS42L52_MIC_CTL_MIC_SEL_SHIFT 6
+CS42L52_MIC_CTL_TYPE_SHIFT 5
+CS_ONLINE 0
+CS_SCHED_LOAD_BALANCE 5
+CS_SPREAD_PAGE 6
+CS_SPREAD_SLAB 7
+CTL_A_GAIN_SHIFT 28
+CTL_A_SEL_SHIFT 24
+CTL_DA_SDR_SHIFT 8
+CTL_SLEW_SHIFT 4
+CT_PAGE_SHIFT 12
+CTRL_BITPOS_A 30
+CTRL_BITPOS_DESCLIMIT 18
+CTRL_BITPOS_FIFOINDEXMASK 4
+CTRL_BITPOS_G 31
+CTRL_BITPOS_L2SZ 0
+CTX_FL_CID_ERROR 2
+CTX_FL_DELETE_WAIT 1
+CTX_FL_OFFLD_START 0
+CURSOR_A_FIFO_WM_SHIFT 8
+CURSOR_B_FIFO_WM1_SHIFT 8
+CURSOR_B_FIFO_WM_SHIFT 16
+CURSOR_FIFO_SR_WM1_SHIFT 0
+CURSOR_X_SHIFT 0
+CURSOR_Y_SHIFT 16
+CX18_F_I_EOS 4
+CX18_F_I_FAILED 22
+CX18_F_I_LOADED_FW 0
+CX18_F_I_RADIO_USER 5
+CX18_F_M_NEED_SWAP 0
+CX18_F_S_APPL_IO 8
+CX18_F_S_CLAIMED 3
+CX18_F_S_INTERNAL_USE 5
+CX18_F_S_STOPPING 9
+CX18_F_S_STREAMING 4
+CX20442_AGC 4
+CX20442_MIC 2
+CX20442_SPKOUT 3
+CX20442_TELIN 0
+CX20442_TELOUT 1
+CX23885_IR_RX_END_OF_RX_DETECTED 1
+CX23885_IR_RX_FIFO_SERVICE_REQ 0
+CX23885_IR_RX_HW_FIFO_OVERRUN 2
+CX23885_IR_RX_SW_FIFO_OVERRUN 3
+CX23885_IR_TX_FIFO_SERVICE_REQ 0
+CYC2NS_SCALE_FACTOR 10
+D64_CTRL2_AE_SHIFT 16
+D64_RC_AE_SHIFT 16
+D64_RC_RO_SHIFT 1
+D64_XC_AE_SHIFT 16
+DA7213_DMIC_CLK_RATE_SHIFT 2
+DA7213_DMIC_DATA_SEL_SHIFT 0
+DA7213_DMIC_SAMPLEPHASE_SHIFT 1
+DA7213_MICBIAS1_LEVEL_SHIFT 0
+DA7213_MICBIAS2_LEVEL_SHIFT 4
+DA732X_HP_DAC_COMPO_SHIFT 3
+DA9052_GPIO_EVEN_SHIFT 3
+DA9052_GPIO_NIBBLE_SHIFT 4
+DA9052_GPIO_ODD_SHIFT 7
+DA9052_NIBBLE_SHIFT 4
+DA9055_E_GPI_SHIFT 1
+DA9055_RTC_MODE_SD_SHIFT 1
+DA9055_TWDSCALE_SHIFT 4
+DA9055_V_GPI_SHIFT 5
+DAC960_BlockSizeBits 9
+DAC960_MaxPartitionsBits 3
+DAC_CTRL_ONDACL 4
+DAC_CTRL_ONDACR 5
+DAC_CTRL_ONLNOL 2
+DAC_CTRL_ONLNOR 3
+DAC_FORCE_DATA_SHIFT 8
+DACK_POLARITY 2
+DAC_PRECH_ONMSTR 0
+DATA_IN_TOKEN_INTERRUPT 0
+DATA_IN_TOKEN_INTERRUPT_ENABLE 0
+DATA_OUT_PING_TOKEN_INTERRUPT 1
+DATA_OUT_TOKEN_INTERRUPT 1
+DATA_OUT_TOKEN_INTERRUPT_ENABLE 1
+DATA_PACKET_RECEIVED_INTERRUPT 3
+DATA_PACKET_RECEIVED_INTERRUPT_ENABLE 3
+DATA_PACKET_TRANSMITTED_INTERRUPT 2
+DATA_PACKET_TRANSMITTED_INTERRUPT_ENABLE 2
+DATA_WIDTH 0
+DB_DEF_PDU_CQPROC_SHIFT 16
+DB_DEF_PDU_EVENT_SHIFT 15
+DB_DEF_PDU_NUM_POSTED_SHIFT 24
+DB_DEF_PDU_REARM_SHIFT 14
+DB_DEF_PDU_WRB_INDEX_SHIFT 16
+DB_MCCQ_NUM_POSTED_SHIFT 16
+DB_RESET 26
+DB_VECTOR 1
+DCB_OUTPUT_ANALOG 0
+DCB_OUTPUT_DP 6
+DCB_OUTPUT_LVDS 3
+DCB_OUTPUT_TMDS 2
+DCB_OUTPUT_TV 1
+DCBX_CEE_VERSION_SHIFT 12
+DC_GCFG_DFHPEL_POS 12
+DC_GCFG_DFHPSL_POS 8
+DC_GENERAL_CFG_DFHPEL_SHIFT 12
+DC_GENERAL_CFG_DFHPSL_SHIFT 8
+DDS_ENT_AMP_LSB 14
+DDS_ENT_MAIN_LSB 9
+DDS_ENT_POST_LSB 5
+DDS_ENT_PRE_LSB 0
+DEBUG_SHIFT 0
+DE_HAVE_BARRIER_NUMBER 0
+DELAYED_UPDATE_BEACON 0
+DEMAND_MODE 12
+DESTROY_IN_PROGRESS 4
+DEST_SHIFT 24
+DEVCTRL_RTC_PWDN_SHIFT 6
+DEV_ENTRY_MODE_SHIFT 9
+DEVICE_CTRL_MAXRRS_MIN 2
+DEVICE_REMOTE_WAKEUP_ENABLE 1
+DEVICE_SET_CLEAR_DEVICE_REMOTE_WAKEUP 11
+DEVICE_STATE_ENABLED_RADIO 4
+DEVICE_STATE_INITIALIZED 2
+DEVICE_STATE_PRESENT 0
+DEVICE_STATE_REGISTERED_HW 1
+DEVICE_STATE_SCANNING 5
+DEVICE_STATE_STARTED 3
+devnum 1
+DF_BOOT_TGT 1
+DFL_BLOCK_LOCKS 0
+DFL_DLM_RECOVERY 6
+DFL_FIRST_MOUNT 2
+DFL_FIRST_MOUNT_DONE 3
+DFL_MOUNT_DONE 4
+DFL_NO_DLM_OPS 1
+DFL_UNMOUNT 5
+DF_RELOGIN 0
+DIRECTION_OF_TRANSFER 3
+DIRECT_LOOKUP_SHIFT 5
+DISCARD_MY_DATA 21
+DISCE_REVALIDATE_DOMAIN 1
+DISCONNECTED 0
+DISCONNECTED 8
+DISCONNECT_SENT 12
+DISCONN_UPCALL 16
+DLC_RTR_SHIFT 6
+DLM_PROC_FLAGS_CLOSING 1
+DLM_PROC_FLAGS_COMPAT 2
+DMA_ABORT 1
+DMA_BUFFER_VALID 7
+DMA_BURST_SHIFT 24
+DMA_BUS_MODE_PBL_SHIFT 8
+DMA_BUS_MODE_RPBL_SHIFT 17
+DMA_CFG_DESC_TX_0_QID_POS 16
+DMA_CHANNEL_INTERRUPT_SELECT 17
+DMA_CONTROL_DACK 4
+DMA_CTL_DACK 6
+DMA_CTRL_DMAR_BURST_LEN_SHIFT 4
+DMA_CTRL_DMAR_DLY_CNT_SHIFT 11
+DMA_CTRL_DMAW_BURST_LEN_SHIFT 7
+DMA_CTRL_DMAW_DLY_CNT_SHIFT 16
+DMA_DIRECTION 30
+DMA_DONE_INTERRUPT 6
+DMA_DONE_INTERRUPT_ENABLE 29
+DMA_DONE_INTERRUPT_ENABLE 6
+DMAE_CMD_E1HVN_SHIFT 15
+DMAE_COMMAND_C_DST_SHIFT 3
+DMAE_COMMAND_C_FUNC_SHIFT 19
+DMAE_COMMAND_DST_SHIFT 1
+DMAE_COMMAND_DST_VFID_SHIFT 8
+DMAE_COMMAND_DST_VFPF_SHIFT 14
+DMAE_COMMAND_DST_VN_SHIFT 17
+DMAE_COMMAND_ERR_POLICY_SHIFT 20
+DMAE_COMMAND_SRC_SHIFT 0
+DMAE_COMMAND_SRC_VFID_SHIFT 0
+DMAE_COMMAND_SRC_VFPF_SHIFT 6
+DMA_ENABLE 1
+DMA_ENDPOINT_SELECT 0
+DMA_EOT_ENABLE 14
+DMA_FIFO_VALIDATE 2
+DMA_MEMORY_WRITE_AND_INVALIDATE_ENABLE 10
+DMA_MODE 0
+DMA_READ_LINE_ENABLE 8
+DMA_READ_MULTIPLE_ENABLE 9
+DMA_REQUEST 6
+DMA_REQUEST_ENABLE 5
+DMAR_IQ_SHIFT 4
+DMA_RWCTRL_PCI_READ_CMD_SHIFT 24
+DMA_RWCTRL_PCI_WRITE_CMD_SHIFT 28
+DMA_RWCTRL_READ_WATER_SHIFT 16
+DMA_RWCTRL_WRITE_WATER_SHIFT 19
+DMARX_CTRL_ROSHIFT 1
+DMA_SCATTER_GATHER_DONE_INTERRUPT 25
+DMA_START 0
+DMA_TIMEOUT_ENABLE 5
+DMA_TRANSACTION_DONE_INTERRUPT 24
+DM_BUFIO_HASH_BITS 20
+DM_CRYPT_KEY_VALID 1
+DM_CRYPT_SUSPENDED 0
+DMF_BLOCK_IO_FOR_SUSPEND 0
+DMF_DELETING 4
+DMF_FREEING 3
+DMF_FROZEN 2
+DMF_MERGE_IS_OPTIONAL 6
+DMF_NOFLUSH_SUSPENDING 5
+DMF_SUSPENDED 1
+DM_KCOPYD_IGNORE_ERROR 1
+DOC_ADDR_BLOCK_SHIFT 6
+DONE_INTERRUPT_ENABLE 10
+DOORBELL_FROM_CARD_RX 4
+DPC_AEN 9
+DPC_GET_DHCP_IP_ADDR 15
+DPC_HA_NEED_QUIESCENT 22
+DPC_HA_UNRECOVERABLE 21
+DPC_LINK_CHANGED 18
+DPC_POST_IDC_ACK 23
+DPC_RELOGIN_DEVICE 3
+DPC_RESET_ACTIVE 20
+DPC_RESET_HA 1
+DPC_RESET_HA_FW_CONTEXT 4
+DPC_RESET_HA_INTR 5
+DPC_RETRY_RESET_HA 2
+DPLL_FPA01_P1_POST_DIV_SHIFT 16
+DPLL_FPA01_P1_POST_DIV_SHIFT_PINEVIEW 15
+DPLL_FPA1_P1_POST_DIV_SHIFT 0
+DPLL_MD_UDI_MULTIPLIER_SHIFT 8
+DP_TRAIN_PRE_EMPHASIS_SHIFT 3
+DP_TRAIN_VOLTAGE_SWING_SHIFT 0
+DQ_ACTIVE_B 5
+DQ_FAKE_B 3
+DQF_INFO_DIRTY_B 31
+DQ_READ_B 4
+DREQ_POLARITY 1
+DRV_FLAGS_DCB_CONFIGURED 0
+DRV_FLAGS_DCB_MFW_CONFIGURED 2
+DS1621_REG_CONFIG_RESOL_SHIFT 2
+DSP_DBGCNTL_EXEC_LOBIT 0
+DSP_DBGCNTL_SS_LOBIT 4
+DSPDMAC_DMACFG_AINCR_LOBIT 18
+DSPDMAC_DMACFG_DBADR_LOBIT 0
+DSPDMAC_XFRCNT_BCNT_LOBIT 16
+DSPDMAC_XFRCNT_CCNT_LOBIT 0
+DSP_FIFO_SR_WM_SHIFT 23
+DSPFW_CURSOR_SR_SHIFT 24
+DSPFW_HPLL_CURSOR_SHIFT 16
+DSPFW_SR_SHIFT 23
+DSP_PLANE_A_FIFO_WM1_SHIFT 16
+DSP_PLANE_B_FIFO_WM1_SHIFT 24
+DSP_PLANE_C_FIFO_WM_SHIFT 0
+DTE_GCR3_SHIFT_A 58
+DTE_GCR3_SHIFT_B 16
+DTE_GCR3_SHIFT_C 43
+DTIM_EXPIRED 4
+DTIM_PERIOD_AVAIL 6
+E1000_ADVTXD_L4LEN_SHIFT 8
+E1000_ADVTXD_MACLEN_SHIFT 9
+E1000_ADVTXD_MSS_SHIFT 16
+E1000_ADVTXD_PAYLEN_SHIFT 14
+E1000_COLD_SHIFT 12
+E1000_CT_SHIFT 4
+E1000_DMACR_DMACTHR_SHIFT 16
+__E1000_DOWN 2
+__E1000_DOWN 3
+E1000_FCRTC_RTH_COAL_SHIFT 4
+E1000_FWSM_MODE_SHIFT 1
+E1000_GEN_CTL_ADDRESS_SHIFT 8
+E1000_I2CCMD_PHY_ADDR_SHIFT 24
+E1000_I2CCMD_REG_ADDR_SHIFT 16
+E1000_KMRNCTRLSTA_OFFSET_SHIFT 16
+E1000_LEDCTL_LED0_MODE_SHIFT 0
+E1000_LTRV_NOSNOOP_SHIFT 16
+E1000_LTRV_REQ_SHIFT 15
+E1000_MDIC_PHY_SHIFT 21
+E1000_MDIC_REG_SHIFT 16
+E1000_NVM_RW_ADDR_SHIFT 2
+E1000_NVM_RW_REG_DATA 16
+E1000_PBA_BYTES_SHIFT 10
+E1000_PSRCTL_BSIZE2_SHIFT 6
+E1000_PSRCTL_BSIZE3_SHIFT 14
+E1000_RCTL_MO_SHIFT 12
+E1000_RTTBCNRC_RF_INT_SHIFT 14
+E1000_SRRCTL_BSIZEHDRSIZE_SHIFT 2
+__E1000_TESTING 0
+E1000_TIMINCA_INCPERIOD_SHIFT 24
+E1000_TIPG_IPGR1_SHIFT 10
+E1000_TIPG_IPGR2_SHIFT 20
+E1000_TX_FLAGS_VLAN_SHIFT 16
+E1000_TX_HEAD_ADDR_SHIFT 7
+E1000_VT_CTL_DEFAULT_POOL_SHIFT 7
+E1000_VT_MSGINFO_SHIFT 16
+EBLOCK_IDX_SHIFT 5
+EC_FLAGS_BLOCKED 3
+EC_FLAGS_GPE_STORM 1
+EC_FLAGS_HANDLERS_INSTALLED 2
+EC_FLAGS_QUERY_PENDING 0
+EDMA_REQ_Q_PTR_SHIFT 5
+EDMA_RSP_Q_PTR_SHIFT 3
+EEPROM_CTRL_ADDR_SHIFT 16
+__EE_WAS_ERROR 3
+EFI_64BIT 5
+EFI_BOOT 0
+EFI_CONFIG_TABLES 2
+EFI_MEMMAP 4
+EFI_PAGE_SHIFT 12
+EFI_RUNTIME_SERVICES 3
+EFI_SYSTEM_TABLES 1
+EFS_DIRBSIZE_BITS 9
+EFX_FILTER_INDEX_WIDTH 13
+EhnMIIdataShift 16
+EhnMIIpmdShift 6
+EhnMIIregShift 11
+EM28XX_SNAPSHOT_KEY 212
+EMAC_MDIO_MODE_CLOCK_CNT_BITSHIFT 16
+EMPTYWAIT 3
+Enabled 0
+END_OF_CHAIN 28
+ENDPOINT_0_INTERRUPT 0
+ENDPOINT_0_INTERRUPT_ENABLE 0
+ENDPOINT1 0
+ENDPOINT_BYTE_COUNT 16
+ENDPOINT_DIRECTION 4
+ENDPOINT_ENABLE 10
+ENDPOINT_ENABLE 7
+ENDPOINT_HALT 0
+ENDPOINT_NUMBER 0
+ENDPOINT_TOGGLE 1
+ENET_SERDES_CTRL_EMPH_0_SHIFT 4
+ENET_SERDES_CTRL_EMPH_1_SHIFT 7
+ENET_SERDES_CTRL_EMPH_2_SHIFT 10
+ENET_SERDES_CTRL_EMPH_3_SHIFT 13
+ENET_SERDES_CTRL_LADJ_0_SHIFT 16
+ENET_SERDES_CTRL_LADJ_1_SHIFT 19
+ENET_SERDES_CTRL_LADJ_2_SHIFT 22
+ENET_SERDES_CTRL_LADJ_3_SHIFT 25
+ENET_SERDES_TEST_MD_0_SHIFT 0
+ENET_SERDES_TEST_MD_1_SHIFT 2
+ENET_SERDES_TEST_MD_2_SHIFT 4
+ENET_SERDES_TEST_MD_3_SHIFT 6
+ENTRY_BITPOS_DESCRIPTOR 10
+ENTRY_BITPOS_QWORDS 0
+ENTRY_DATA_IO_FAILED 3
+ENTRY_DATA_PENDING 2
+ENTRY_DATA_STATUS_PENDING 4
+ENTRY_DATA_STATUS_SET 5
+ENTRY_OWNER_DEVICE_DATA 1
+EOT_POLARITY 3
+EP_DISC_ABORT 18
+EP_DISC_CLOSE 17
+EP_FLAG_RUNNING 1
+EP_FLAG_STOPPING 2
+EPLD_DMA_ENABLE 7
+EP_QUEUE_HEAD_MAX_PKT_LEN_POS 16
+EP_QUEUE_HEAD_MULT_POS 30
+ESD_USB2_TSEG1_SHIFT 16
+ESD_USB2_TSEG2_SHIFT 20
+ESPC_PIO_STAT_ADDR_SHIFT 8
+ESR_GLUE_CTRL0_BLTIME_SHIFT 24
+ESR_GLUE_CTRL0_SRATE_SHIFT 8
+ESR_GLUE_CTRL0_THCNT_SHIFT 0
+ESR_RXTX_CTRL_VMUXLO_SHIFT 22
+ESTAB_UPCALL 7
+ETH_CLASSIFY_CMD_HEADER_OPCODE_SHIFT 2
+ETH_TX_BD_FLAGS_VLAN_MODE_SHIFT 2
+ETH_TX_PARSE_2ND_BD_IP_HDR_LEN_OUTER_W_SHIFT 8
+ETH_TX_PARSE_2ND_BD_IP_HDR_TYPE_OUTER_SHIFT 4
+ETH_TX_PARSE_2ND_BD_LLC_SNAP_EN_SHIFT 5
+ETH_TX_PARSE_BD_E1X_ETH_ADDR_TYPE_SHIFT 4
+ETH_TX_PARSE_BD_E2_ETH_ADDR_TYPE_SHIFT 30
+ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W_SHIFT 0
+ETH_TX_PARSE_BD_E2_LSO_MSS_SHIFT 16
+ETH_TX_PARSE_BD_E2_TCP_HDR_LENGTH_DW_SHIFT 11
+ETH_TX_START_BD_HDR_NBDS_SHIFT 0
+ET_MAC_CFG2_PREAMBLE_SHIFT 12
+ET_MAC_STATION_ADDR1_OC4_SHIFT 8
+ET_MAC_STATION_ADDR1_OC5_SHIFT 16
+ET_MAC_STATION_ADDR1_OC6_SHIFT 24
+ET_MAC_STATION_ADDR2_OC1_SHIFT 16
+ET_MAC_STATION_ADDR2_OC2_SHIFT 24
+ET_RX_PFCTRL_MIN_PKT_SZ_SHIFT 16
+ET_RX_UNI_PF_ADDR1_1_SHIFT 8
+ET_RX_UNI_PF_ADDR1_3_SHIFT 24
+ET_RX_UNI_PF_ADDR1_4_SHIFT 16
+ET_RX_UNI_PF_ADDR1_5_SHIFT 8
+ET_RX_UNI_PF_ADDR2_1_SHIFT 24
+ET_RX_UNI_PF_ADDR2_2_SHIFT 16
+ET_RX_UNI_PF_ADDR2_3_SHIFT 24
+ET_RX_UNI_PF_ADDR2_4_SHIFT 16
+ET_RX_UNI_PF_ADDR2_5_SHIFT 8
+ET_RX_WOL_HI_SA1_SHIFT 8
+ET_RX_WOL_LO_SA3_SHIFT 24
+ET_RX_WOL_LO_SA4_SHIFT 16
+ET_RX_WOL_LO_SA5_SHIFT 8
+ET_TXDMA_CACHE_SHIFT 4
+EV_ABS 3
+EVENT_DEV_ASLEEP 6
+EVENT_DEV_OPEN 7
+EVENT_NO_RUNTIME_PM 9
+EVENT_RX_KILL 10
+EVENT_RX_PAUSED 5
+EVENT_STS_SPLIT 3
+EV_KEY 1
+EV_LED 17
+EV_MSC 4
+EV_REL 2
+EV_REP 20
+EV_SW 5
+EV_SYN 0
+EXHCH_HSIZE_SHIFT 0
+EXHCH_VSIZE_SHIFT 2
+EXT4_GROUP_INFO_NEED_INIT_BIT 0
+EXTENT_BUFFER_CORRUPT 3
+EXTENT_BUFFER_DUMMY 9
+EXTENT_BUFFER_IOERR 8
+EXTENT_BUFFER_READAHEAD 4
+EXTENT_BUFFER_STALE 6
+EXTENT_BUFFER_UPTODATE 0
+EXTENT_BUFFER_WRITEBACK 7
+EXTENT_FLAG_COMPRESSED 1
+EXTENT_FLAG_FILLING 5
+EXTENT_FLAG_LOGGING 4
+EXTENT_FLAG_PINNED 0
+EXTENT_FLAG_PREALLOC 3
+EXTENT_FLAG_VACANCY 2
+EXTIN_AC97_L 0
+EXTIN_AC97_R 1
+EXTIN_COAX_SPDIF_L 10
+EXTIN_COAX_SPDIF_R 11
+EXTIN_LINE1_L 8
+EXTIN_LINE1_R 9
+EXTIN_LINE2_L 12
+EXTIN_LINE2_R 13
+EXTIN_SPDIF_CD_L 2
+EXTIN_SPDIF_CD_R 3
+EXTIN_TOSLINK_L 6
+EXTIN_TOSLINK_R 7
+EXTIN_ZOOM_L 4
+EXTIN_ZOOM_R 5
+EXTOUT_AC97_CENTER 4
+EXTOUT_AC97_L 0
+EXTOUT_AC97_LFE 5
+EXTOUT_AC97_R 1
+EXTOUT_AC97_REAR_L 13
+EXTOUT_AC97_REAR_R 14
+EXTOUT_HEADPHONE_L 6
+EXTOUT_HEADPHONE_R 7
+EXTOUT_MIC_CAP 12
+EXTOUT_REAR_L 8
+EXTOUT_REAR_R 9
+EXTOUT_TOSLINK_L 2
+EXTOUT_TOSLINK_R 3
+EXTRA_FLAGS 16
+FAM10H_MMIO_CONF_BASE_SHIFT 20
+FAM10H_MMIO_CONF_BUSRANGE_SHIFT 2
+FAST_SLOW_TERMINATE_MODE_SELECT 15
+FaultRecorded 7
+Faulty 0
+FCOE_CQE_TOGGLE_BIT_SHIFT 15
+FCOE_CTX_RESET_NEEDED 18
+FCOE_IOS_PER_CONNECTION_SHIFT 0
+FCOE_KWQE_CONN_ENABLE_DISABLE_PRIORITY_SHIFT 13
+FCOE_KWQE_CONN_ENABLE_DISABLE_VLAN_ID_SHIFT 0
+FCOE_KWQE_CONN_OFFLOAD3_B_CONF_REQ_SHIFT 3
+FCOE_KWQE_CONN_OFFLOAD3_B_CONT_INCR_SEQ_CNT_SHIFT 2
+FCOE_KWQE_CONN_OFFLOAD3_B_E_D_TOV_RES_SHIFT 1
+FCOE_KWQE_CONN_OFFLOAD3_B_REC_VALID_SHIFT 4
+FCOE_KWQE_CONN_OFFLOAD3_B_VLAN_FLAG_SHIFT 7
+FCOE_KWQE_CONN_OFFLOAD3_PRIORITY_SHIFT 13
+FCOE_KWQE_CONN_OFFLOAD3_VLAN_ID_SHIFT 0
+FCOE_KWQE_HEADER_LAYER_CODE_SHIFT 4
+FCOE_KWQE_INIT1_LOG_PAGE_SIZE_SHIFT 0
+FCOE_LOGINS_PER_PORT_SHIFT 16
+FCOE_NPIV_WWN_PER_PORT_SHIFT 16
+FCOE_NUMBER_OF_EXCHANGES_SHIFT 0
+FCOE_OUTSTANDING_COMMANDS_SHIFT 16
+FCOE_SQE_TASK_ID_SHIFT 0
+FCOE_SQE_TOGGLE_BIT_SHIFT 15
+FCOE_TARGETS_SUPPORTED_SHIFT 0
+FCOE_TCE_RX_WR_TX_RD_CONST_CID_SHIFT 0
+FCOE_TCE_RX_WR_TX_RD_VAR_EXP_FIRST_FRAME_SHIFT 12
+FCOE_TCE_TX_WR_RX_RD_CONST_CACHED_SGE_SHIFT 5
+FCOE_TCE_TX_WR_RX_RD_CONST_CLASS_TYPE_SHIFT 4
+FCOE_TCE_TX_WR_RX_RD_CONST_DEV_TYPE_SHIFT 3
+FCOE_TCE_TX_WR_RX_RD_CONST_TASK_TYPE_SHIFT 0
+FCOE_TCE_TX_WR_RX_RD_CONST_TX_STATE_SHIFT 1
+FCPORT_UPDATE_NEEDED 13
+FCRAM_REF_TMR_MAX_SHIFT 16
+FCRAM_REF_TMR_MIN_SHIFT 0
+FD_DISK_CHANGED_BIT 4
+FD_DISK_NEWCHANGE_BIT 2
+FD_DISK_WRITABLE_BIT 5
+FD_NEED_TWADDLE_BIT 0
+FD_VERIFY_BIT 1
+FF_AUTOCENTER 97
+FF_CONSTANT 82
+FF_CORE_SHOULD_PLAY 4
+FF_CORE_UPDATE 5
+FF_DAMPER 85
+FF_FRICTION 84
+FF_GAIN 96
+FF_INERTIA 86
+FFLP_CFG_1_CAMLAT_SHIFT 16
+FFLP_CFG_1_CAMRATIO_SHIFT 12
+FFLP_CFG_1_FCRAMRATIO_SHIFT 8
+FF_MOD1_IS_USED 0
+FF_MOD2_IS_USED 1
+FF_PERIODIC 81
+FF_RAMP 87
+FF_RUMBLE 80
+FF_SAW_DOWN 92
+FF_SAW_UP 91
+FF_SINE 90
+FF_SPRING 83
+FF_SQUARE 88
+FF_TRIANGLE 89
+FH_MEM_TFDIB_REG1_ADDR_BITSHIFT 28
+FIELD_SIZE 5
+FIFO_EMPTY 10
+FIFO_FLUSH 9
+FIFO_FULL 11
+FIFO_OVERFLOW 13
+FIFOSIZE_DEPTH_SHIFT 16
+FIFOSIZE_STARTADDR_SHIFT 0
+FIFO_SOFT_RESET 4
+FIFO_UNDERFLOW 12
+FIP_DT_MAC 2
+FIRST_BOOT 7
+FirstUse 10
+FLAG_802_11 7
+FLAG_ACTIVE_LOW 6
+FLAG_ADHOC 3
+FLAG_COMMIT 13
+FLAG_EFS_ENABLE 5
+FLAG_ENABLED 2
+FLAG_EXITING 0
+FLAG_EXPORT 2
+FLAG_EXT_CTRL 4
+FLAG_FLASHING 15
+FLAG_FLUSHABLE 3
+FLAG_FORCE_ACTIVE 1
+FLAG_FORCE_RELIABLE 2
+FLAG_IRQ_ENABLE 1
+FLAG_IS_OUT 1
+FLAG_MIC_CAPABLE 4
+FLAG_MPI 11
+FLAG_OPEN_DRAIN 7
+FLAG_OPEN_SOURCE 8
+FLAG_PENDING_XMIT11 10
+FLAG_PENDING_XMIT 9
+FLAG_RADIO_DOWN 1
+FLAG_RADIO_OFF 0
+FLAG_REGISTERED 12
+FLAG_RESET 14
+FLAG_ROLE_SWITCH 0
+FLAG_SYSFS 3
+FLAG_UPDATE_MULTI 5
+FLAG_UPDATE_UNI 6
+FLAG_VBUS_CHANGED 0
+FLAG_WPA_CAPABLE 16
+FLASH_SECTOR_ADDR_SHIFT 12
+FLG_ACTIVE 6
+FLG_HDLC 13
+FLG_L1_DBUSY 5
+FLG_L1_PULL_REQ 6
+FLG_TRANSPARENT 12
+FLIDX_ABORTING 2
+FLIDX_DISCONNECTING 3
+FLIDX_SG_ACTIVE 1
+FLIDX_TIMED_OUT 5
+FLIDX_URB_ACTIVE 0
+FLOW_KEY_L4_0_SHIFT 2
+FLOW_KEY_L4_1_SHIFT 0
+FLT_SHIFT 0
+FLW_PRT_SEL_BASE_SHIFT 0
+FLW_PRT_SEL_MASK_SHIFT 8
+FM801_AC97_ADDR_SHIFT 10
+FM801_RATE_SHIFT 8
+FM_AF_SWITCH_INPROGRESS 5
+FM_CORE_READY 3
+FM_CORE_TX_XMITING 6
+FM_FW_DW_INPROGRESS 2
+FM_INTTASK_RUNNING 0
+FM_INTTASK_SCHEDULE_PENDING 1
+FNIC_INTX_ERR 1
+FNIC_INTX_NOTIFY 2
+FNIC_INTX_WQ_RQ_COPYWQ 0
+FORCE_DETACH 14
+FORCE_FULL_SPEED_MODE 30
+FORCE_HIGH_SPEED 3
+FP_PT1_VSIZE_SHIFT 16
+FP_SHIFT 12
+FRAC_BITS 14
+FRAC_BITS 8
+FREQ_RATIO_OFFSET 19
+FS155_VCI_BITS 6
+FS155_VPI_BITS 4
+FSCACHE_COOKIE_LOOKING_UP 0
+FSCACHE_COOKIE_NO_DATA_YET 1
+FSCACHE_COOKIE_RELINQUISHED 4
+FSCACHE_COOKIE_RETIRED 5
+FSCACHE_COOKIE_UNAVAILABLE 2
+FSCACHE_OBJECT_EV_CLEARED 4
+FSCACHE_OBJECT_IS_AVAILABLE 5
+FSCACHE_OBJECT_IS_LIVE 3
+FSCACHE_OP_EXCLUSIVE 5
+FSCACHE_OP_UNUSE_COOKIE 7
+FSCACHE_OP_WAITING 4
+FSHIFT 11
+FTRACE_EVENT_FL_ENABLED_BIT 0
+FTRACE_EVENT_FL_RECORDED_CMD_BIT 1
+FTRACE_EVENT_FL_SOFT_DISABLED_BIT 3
+FTRACE_EVENT_FL_SOFT_MODE_BIT 2
+FULLNESS_BITS 4
+FULL_SPEED 6
+FUNC_MF_CFG_MAX_BW_SHIFT 24
+FUSE_I_ADVISE_RDPLUS 0
+FW_STATUS_ABORT 2
+FW_STATUS_DONE 1
+FW_STATUS_LOADING 0
+FX00_RESET_RECOVERY 25
+FX00_TARGET_SCAN 26
+GAIN_ALPHA 5
+GBF_FULL 1
+GDFIFOCFG_EPINFOBASE_SHIFT 16
+GEN6_BLITTER_LOCK_SHIFT 16
+GEN6_MBC_SNPCR_SHIFT 21
+GEN6_PCODE_FREQ_IA_RATIO_SHIFT 8
+GEN6_PCODE_FREQ_RING_RATIO_SHIFT 16
+GENERATE_RESUME 3
+GENERATE_RESUME 5
+GET_DEVICE_STATUS 0
+GET_INTERFACE_STATUS 1
+GI2CCTL_I2CDEVADDR_SHIFT 26
+GIF_ALLOC_FAILED 2
+GIF_INVALID 0
+GIF_QD_LOCKED 1
+GIF_SW_PAGED 3
+GLF_BLOCKING 15
+GLF_DEMOTE 3
+GLF_DEMOTE_IN_PROGRESS 5
+GLF_DIRTY 6
+GLF_FROZEN 11
+GLF_INITIAL 10
+GLF_INVALIDATE_IN_PROGRESS 8
+GLF_LFLUSH 7
+GLF_LRU 13
+GLF_QUEUED 12
+GLF_REPLY_PENDING 9
+GLOBAL_BEEP_ENABLE_SHIFT 15
+GMAC_FLOW_CTRL_PT_SHIFT 16
+GMBUS_SLAVE_INDEX_SHIFT 8
+GMCR_GAPBB_SHIFT 14
+GMCR_GAPR1_SHIFT 7
+GMCR_GAPR2_SHIFT 0
+GPIO_LLI_BIT 5
+GPIO_MIC_RELAY 4
+GPIO_OVRUN_BIT 4
+GPIO_RXUVL_BIT 3
+GRC_MISC_CFG_PRESCALAR_SHIFT 1
+GRCR_HASHSIZE_SHIFT 17
+GREG_SWRST_CACHE_SHIFT 16
+GRSTCTL_TXFNUM_SHIFT 6
+GS40G_PAGE_SHIFT 16
+H5_RX_ESC 0
+H5_TX_ACK_REQ 1
+HAS_ALARM 1
+HASH_FN_SHIFT 13
+HAS_NVRAM 0
+HCCHAR_DEVADDR_SHIFT 22
+HCCHAR_EPNUM_SHIFT 11
+HCCHAR_EPTYPE_SHIFT 18
+HCCHAR_MPS_SHIFT 0
+HCCHAR_MULTICNT_SHIFT 20
+HCD_FLAG_DEAD 6
+HCD_FLAG_HW_ACCESSIBLE 0
+HCD_FLAG_POLL_PENDING 3
+HCD_FLAG_POLL_RH 2
+HCD_FLAG_RH_RUNNING 5
+HCD_FLAG_WAKEUP_PENDING 4
+HCI_AUTH 5
+HCI_AUTO_OFF 1
+HCI_CONNECTABLE 12
+HCI_CONN_ENCRYPT_PEND 2
+HCI_CONN_POWER_SAVE 9
+HCI_CONN_REAUTH_PEND 1
+HCI_CONN_REMOTE_OOB 10
+HCI_CONN_SCO_SETUP_PEND 5
+HCI_CONN_SSP_ENABLED 8
+HCI_DEBUG_KEYS 5
+HCI_ENCRYPT 6
+HCI_FAST_CONNECTABLE 16
+HCI_HS_ENABLED 9
+HCI_INIT 1
+HCI_INQUIRY 7
+HCI_ISCAN 4
+HCI_LE_ENABLED 10
+HCI_LE_PERIPHERAL 11
+HCI_LE_SCAN 7
+HC_INDEX_DATA_HC_ENABLED_SHIFT 1
+HC_INDEX_DATA_SM_ID_SHIFT 0
+HCI_PAIRABLE 3
+HCI_PERIODIC_INQ 15
+HCI_PSCAN 3
+HCI_QUIRK_FIXUP_BUFFER_SIZE 2
+HCI_QUIRK_RAW_DEVICE 1
+HCI_QUIRK_RESET_ON_CLOSE 0
+HCI_RAW 8
+HCI_RESET 9
+HCI_RUNNING 2
+HCI_SETUP 0
+HCI_SSP_ENABLED 8
+HCI_UART_INIT_PENDING 3
+HCI_UART_REGISTERED 1
+HCI_UART_SENDING 1
+HCI_UART_TX_WAKEUP 2
+HCI_UNREGISTER 6
+HCI_UP 0
+HCSPLT_HUBADDR_SHIFT 7
+HCSPLT_PRTADDR_SHIFT 0
+HCSPLT_XACTPOS_SHIFT 14
+HDPVR_RCA_BACK 0
+HDPVR_RCA_FRONT 1
+HDPVR_SPDIF 2
+HERMES_MIC_KEY_ID_SHIFT 11
+HFIR_FRINT_SHIFT 0
+HFS_BNODE_DELETED 2
+HFS_BNODE_DELETED 4
+HFS_BNODE_ERROR 0
+HFS_BNODE_ERROR 1
+HFS_BNODE_NEW 1
+HFS_BNODE_NEW 2
+HFS_FLG_ALT_MDB_DIRTY 2
+HFS_FLG_MDB_DIRTY 1
+HFSPLUS_I_CAT_DIRTY 1
+HFSPLUS_I_EXT_DIRTY 2
+HFSPLUS_I_RSRC 0
+HFSPLUS_SB_CASEFOLD 4
+HFSPLUS_SB_FORCE 2
+HFSPLUS_SB_HFSX 3
+HFSPLUS_SB_NOBARRIER 5
+HFSPLUS_SB_NODECOMPOSE 1
+HFSPLUS_SB_WRITEBACKUP 0
+HFSPLUS_SECTOR_SHIFT 9
+HFS_SECTOR_SIZE_BITS 9
+HID_CLEAR_HALT 6
+HID_CTRL_RUNNING 1
+HID_DISCONNECTED 7
+HIDE_STATUS_PHASE 6
+HID_KEYS_PRESSED 10
+HID_NO_BANDWIDTH 11
+HID_OUT_RUNNING 2
+HIDP_BLUETOOTH_VENDOR_ID 9
+HIDP_VIRTUAL_CABLE_UNPLUG 0
+HIDP_WAITING_FOR_RETURN 10
+HIDP_WAITING_FOR_SEND_ACK 11
+HID_RESET_PENDING 4
+HID_STARTED 8
+HID_SUSPENDED 5
+HI_EARLY_ALLOC_IRAM_BANKS_SHIFT 0
+HI_EARLY_ALLOC_MAGIC_SHIFT 16
+HIF_HOLDER 6
+HIGH_SPEED 7
+HighThresholdShift 2
+HI_OPTION_FW_BRIDGE_SHIFT 4
+HI_OPTION_FW_MODE_SHIFT 12
+HI_OPTION_FW_SUBMODE_SHIFT 20
+HI_OPTION_MAC_ADDR_METHOD_SHIFT 3
+HI_OPTION_NUM_DEV_SHIFT 9
+HMC5843_RANGE_GAIN_OFFSET 5
+HMC5843_RATE_OFFSET 2
+HORZ_PANEL_SHIFT 16
+HOST_CONTROL_IF_SHIFT 4
+HOST_DMA_ISOC_NBYTES_SHIFT 0
+HOST_DMA_NBYTES_SHIFT 0
+HOST_RAMP_DOWN_QUEUE_DEPTH 22
+HOST_SLEEP_MODE_CMD_PROCESSED 9
+HREF_HSIZE_SHIFT 0
+HREF_HSTART_SHIFT 4
+HREF_VSIZE_SHIFT 2
+HREF_VSTART_SHIFT 6
+HSO_NET_RUNNING 0
+HT_AGG_STATE_OPERATIONAL 2
+HT_AGG_STATE_STOPPING 3
+HT_AGG_STATE_WANT_STOP 5
+HTC_CONN_FLGS_SET_RECV_ALLOC_SHIFT 8
+HTC_MAILBOX 0
+HTS2_PRST_SHIFT 10
+HTS_PCPL_SHIFT 21
+HTS_PTL_SHIFT 1
+HV_KMRN_FIFO_CTRLSTA_PREAMBLE_SHIFT 12
+HV_SMB_ADDR_FREQ_LOW_SHIFT 8
+HW_HT_RATES_OFFSET 16
+HW_MIMO_RATES_OFFSET 24
+HWTSTAMP_FILTER_ALL 1
+HWTSTAMP_FILTER_NONE 0
+HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ 5
+HWTSTAMP_FILTER_PTP_V1_L4_EVENT 3
+HWTSTAMP_FILTER_PTP_V1_L4_SYNC 4
+HWTSTAMP_FILTER_PTP_V2_DELAY_REQ 14
+HWTSTAMP_FILTER_PTP_V2_EVENT 12
+HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ 11
+HWTSTAMP_FILTER_PTP_V2_L2_EVENT 9
+HWTSTAMP_FILTER_PTP_V2_L2_SYNC 10
+HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ 8
+HWTSTAMP_FILTER_PTP_V2_L4_EVENT 6
+HWTSTAMP_FILTER_PTP_V2_L4_SYNC 7
+HWTSTAMP_FILTER_PTP_V2_SYNC 13
+HWTSTAMP_TX_OFF 0
+HWTSTAMP_TX_ON 1
+HWTSTAMP_TX_ONESTEP_SYNC 2
+I2C_HID_READ_PENDING 4
+I2C_HID_RESET_PENDING 2
+I2C_HID_STARTED 1
+i2c_m_status_wdat_done_pos 1
+i2c_m_status_wdat_fail_pos 2
+I2F_FRAC_BITS 23
+I830_FENCE_PITCH_SHIFT 4
+I830_FENCE_TILING_Y_SHIFT 12
+I965_FENCE_TILING_Y_SHIFT 1
+IA32_SYSCALL_VECTOR 128
+IBA6120_R_PKEY_DIS_SHIFT 30
+IBA7220_IBCC_LINKCMD_SHIFT 19
+IBA7220_IBC_RXPOL_SHIFT 7
+IBA7220_LEDBLINK_OFF_SHIFT 0
+IBA7220_LEDBLINK_ON_SHIFT 32
+IBA7220_R_CTXTCFG_SHIFT 36
+IBA7220_R_INTRAVAIL_SHIFT 17
+IBA7220_R_PKEY_DIS_SHIFT 34
+IBA7220_R_TAILUPD_SHIFT 35
+IBA7220_TID_PA_SHIFT 11
+IBA7220_TID_SZ_SHIFT 37
+IBA7322_HDRHEAD_PKTINT_SHIFT 32
+IBA7322_TID_PA_SHIFT 11
+IBA7322_TID_SZ_SHIFT 37
+IB_ACK_REQUESTED 1
+IB_MGMT_METHOD_GET 1
+IB_MGMT_METHOD_SEND 3
+IB_MGMT_METHOD_SET 2
+IBSHIFT 16
+IBS_STARTED 1
+IBS_STOPPING 2
+IB_USER_VERBS_CMD_ALLOC_MW 14
+IB_USER_VERBS_CMD_ALLOC_PD 3
+IB_USER_VERBS_CMD_ATTACH_MCAST 30
+IB_USER_VERBS_CMD_BIND_MW 15
+IB_USER_VERBS_CMD_CLOSE_XRCD 38
+IB_USER_VERBS_CMD_CREATE_AH 5
+IB_USER_VERBS_CMD_CREATE_COMP_CHANNEL 17
+IB_USER_VERBS_CMD_CREATE_CQ 18
+IB_USER_VERBS_CMD_CREATE_QP 24
+IB_USER_VERBS_CMD_CREATE_SRQ 32
+IB_USER_VERBS_CMD_CREATE_XSRQ 39
+IB_USER_VERBS_CMD_DEALLOC_MW 16
+IB_USER_VERBS_CMD_DEALLOC_PD 4
+IB_USER_VERBS_CMD_DEREG_MR 13
+IB_USER_VERBS_CMD_DESTROY_AH 8
+IB_USER_VERBS_CMD_DESTROY_CQ 20
+IB_USER_VERBS_CMD_DESTROY_QP 27
+IB_USER_VERBS_CMD_DESTROY_SRQ 35
+IB_USER_VERBS_CMD_DETACH_MCAST 31
+IB_USER_VERBS_CMD_GET_CONTEXT 0
+IB_USER_VERBS_CMD_MODIFY_AH 6
+IB_USER_VERBS_CMD_MODIFY_QP 26
+IB_USER_VERBS_CMD_MODIFY_SRQ 33
+IB_USER_VERBS_CMD_OPEN_QP 40
+IB_USER_VERBS_CMD_OPEN_XRCD 37
+IB_USER_VERBS_CMD_POLL_CQ 21
+IB_USER_VERBS_CMD_POST_RECV 29
+IB_USER_VERBS_CMD_POST_SEND 28
+IB_USER_VERBS_CMD_POST_SRQ_RECV 36
+IB_USER_VERBS_CMD_QUERY_AH 7
+IB_USER_VERBS_CMD_QUERY_DEVICE 1
+IB_USER_VERBS_CMD_QUERY_PORT 2
+IB_USER_VERBS_CMD_QUERY_QP 25
+IB_USER_VERBS_CMD_QUERY_SRQ 34
+IB_USER_VERBS_CMD_REG_MR 9
+IB_USER_VERBS_CMD_REQ_NOTIFY_CQ 23
+IB_USER_VERBS_CMD_RESIZE_CQ 19
+ICH_DI1L_SHIFT 4
+ICH_DI2L_SHIFT 6
+IDE_CAST_CMD_SHIFT 24
+IDEV_ABORT_PATH_ACTIVE 7
+IDEV_ABORT_PATH_RESUME_PENDING 8
+IDEV_GONE 3
+IDEV_IO_NCQERROR 5
+IDEV_IO_READY 4
+IDEV_START_PENDING 0
+IDEV_STOP_PENDING 1
+IDLE_CODE 25
+ID_SHIFT 16
+IDT77252_BIT_INIT 1
+IEEE80211_BAR_CTRL_TID_INFO_SHIFT 12
+IEEE80211_HT_AMPDU_PARM_DENSITY_SHIFT 2
+IEEE80211_HT_CAP_RX_STBC_SHIFT 8
+IEEE80211_HT_CAP_SM_PS_SHIFT 2
+IEEE80211_HT_MCS_TX_MAX_STREAMS_SHIFT 2
+IEEE80211_RADIOTAP_EXT 31
+IEEE80211_RADIOTAP_MCS_STBC_SHIFT 5
+IEEE80211_SEQ_SEQ_SHIFT 4
+IEEE80211_TX_CTL_STBC_SHIFT 23
+IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_SHIFT 23
+IEEE80211_WMM_IE_STA_QOSINFO_SP_SHIFT 5
+IEEE802154_FC_DAMODE_SHIFT 10
+IEEE802154_FC_SAMODE_SHIFT 14
+IFORCE_XMIT_AGAIN 1
+IFX_SPI_DTR 4
+IFX_SPI_MORE_BIT 4
+IFX_SPI_RTS 5
+IFX_SPI_STATE_IO_AVAILABLE 4
+IFX_SPI_STATE_IO_READY 2
+IFX_SPI_STATE_PRESENT 0
+IFX_SPI_UPDATE 8
+IGB_82576_TSYNC_SHIFT 19
+__IGB_DOWN 2
+IGB_RING_FLAG_RX_LB_VLAN_BSWAP 1
+IGB_RING_FLAG_RX_SCTP_CSUM 0
+IGB_RING_FLAG_TX_CTX_IDX 2
+IGB_RING_FLAG_TX_DETECT_HANG 3
+__IGB_TESTING 0
+IGB_TX_FLAGS_VLAN_SHIFT 16
+__IGBVF_DOWN 2
+__IGBVF_TESTING 0
+IGBVF_TX_FLAGS_VLAN_SHIFT 16
+IGNORE_NEXT_INT 2
+IGP_PAGE_SHIFT 5
+IGU_ACK_REGISTER_INTERRUPT_MODE_SHIFT 9
+IGU_ACK_REGISTER_STATUS_BLOCK_ID_SHIFT 0
+IGU_ACK_REGISTER_STORM_ID_SHIFT 5
+IGU_ACK_REGISTER_UPDATE_INDEX_SHIFT 8
+IGU_CTRL_REG_ADDRESS_SHIFT 0
+IGU_CTRL_REG_FID_SHIFT 12
+IGU_CTRL_REG_TYPE_SHIFT 20
+IGU_FID_ENCODE_IS_PF_SHIFT 6
+IGU_REGULAR_BUPDATE_SHIFT 24
+IGU_REGULAR_CLEANUP_TYPE_SHIFT 28
+IGU_REGULAR_ENABLE_INT_SHIFT 25
+IGU_REGULAR_SB_INDEX_SHIFT 0
+IGU_REGULAR_SEGMENT_ACCESS_SHIFT 21
+IGU_VF_CONF_PARENT_SHIFT 2
+IHFLG_IFSHFT 2
+IHOST_IRQ_ENABLED 2
+IHOST_START_PENDING 0
+IHOST_STOP_PENDING 1
+IL_FIRST_OFDM_RATE 4
+IMG_REQ_CHILD 1
+IMG_REQ_LAYERED 2
+IMG_REQ_WRITE 0
+IMGSZ_V_SHIFT 16
+IMM 6
+INFINIPATH_HWE_HTCMEMPARITYERR_SHIFT 0
+INFINIPATH_HWE_RXEMEMPARITYERR_SHIFT 44
+INFINIPATH_HWE_TXEMEMPARITYERR_SHIFT 40
+INFINIPATH_IBCC_CREDITSCALE_SHIFT 40
+INFINIPATH_IBCC_FLOWCTRLPERIOD_SHIFT 0
+INFINIPATH_IBCC_FLOWCTRLWATERMARK_SHIFT 8
+INFINIPATH_IBCC_LINKINITCMD_SHIFT 16
+INFINIPATH_IBCC_OVERRUNTHRESHOLD_SHIFT 36
+INFINIPATH_IBCC_PHYERRTHRESHOLD_SHIFT 32
+INFINIPATH_IBCS_LINKTRAININGSTATE_SHIFT 0
+INFINIPATH_I_RCVAVAIL_SHIFT 12
+INFINIPATH_I_RCVURG_SHIFT 0
+INFINIPATH_RT_BUFSIZE_SHIFT 48
+INFINIPATH_S_DISARMPIOBUF_SHIFT 16
+INFINIPATH_SENDPIOAVAIL_BUSY_SHIFT 1
+INFINIPATH_S_UPDTHRESH_SHIFT 24
+INFINIPATH_XGXS_RX_POL_SHIFT 19
+INIT_HCA_DEVICE_MANAGED_FLOW_STEERING_EN 6
+INIT_IB_MTU_SHIFT 12
+INIT_IB_PORT_WIDTH_SHIFT 8
+INIT_IB_VL_SHIFT 4
+INIT_PORT_PORT_WIDTH_SHIFT 8
+INIT_PORT_VL_SHIFT 4
+INPUT_PROP_SEMI_MT 3
+In_sync 1
+INTA_ASSERTED 12
+INTEL_ANALOG_CLONE_BIT 9
+INTEL_OUTPUT_ANALOG 1
+INTEL_OUTPUT_DISPLAYPORT 9
+INTEL_OUTPUT_EDP 10
+INTEL_OUTPUT_HDMI 6
+INTEL_OUTPUT_LVDS 4
+INTEL_OUTPUT_MIPI2 8
+INTEL_OUTPUT_MIPI 7
+INTEL_OUTPUT_SDVO 3
+INTEL_OUTPUT_TVOUT 5
+INTEL_PMC_IDX_FIXED 32
+INTEL_SDVO_LVDS_CLONE_BIT 8
+INTEL_SDVO_NON_TV_CLONE_BIT 6
+INTEL_SDVO_TV_CLONE_BIT 7
+INT_EN 1
+INTERCEPT_IOIO_PROT 27
+INTERCEPT_MSR_PROT 28
+INTERCEPT_NMI 1
+INTERCEPT_SELECTIVE_CR0 5
+INTERCEPT_VMRUN 32
+INTERRUPT_AFTER_TERMINAL_COUNT 2
+INTERRUPT_MODE 4
+INT_MASK_WE 8
+INTR_COAL_COUNT_SHIFT 16
+INV_MPU6050_ACCL_CONFIG_FSR_SHIFT 3
+INV_MPU6050_GYRO_CONFIG_FSR_SHIFT 3
+IOAT_COMPLETION_ACK 1
+IOAT_COMPLETION_PENDING 0
+IOAT_KOBJ_INIT_FAIL 3
+IOAT_MMIO_BAR 0
+IOAT_RESET_PENDING 2
+IOAT_RUN 5
+_IOC_NR 101
+_IOC_NR 102
+_IOC_NR 2
+_IOC_NR 21
+_IOC_NR 25
+_IOC_NR 27
+_IOC_NR 28
+_IOC_NR 36
+_IOC_NR 37
+_IOC_NR 4
+_IOC_NR 5
+_IOC_NR 58
+_IOC_NR 59
+_IOC_NR 60
+_IOC_NR 64
+_IOC_NR 67
+_IOC_NR 68
+_IOC_NR 71
+_IOC_NR 72
+_IOC_NR 73
+_IOC_NR 79
+_IOC_NR 80
+IOCR_INPUTS_OFFSET 8
+IOCR_OUTPUTS_OFFSET 0
+IO_DONE_BIT 0
+IO_ERROR_SHIFT 20
+IOMMU_CAP_EFR 27
+IOMMU_CAP_IOTLB 24
+IOMMU_CAP_NPCACHE 26
+IOPM_ALLOC_ORDER 2
+IOPOLL_F_DISABLE 1
+IOPOLL_F_SCHED 0
+IOSF_BAR_SHIFT 1
+IOSF_BYTE_ENABLES_SHIFT 4
+IOSF_DEVFN_SHIFT 24
+IOSF_OPCODE_SHIFT 16
+IOSF_PORT_SHIFT 8
+IO_TLB_SHIFT 11
+IO_WAKEUP_ENABLE 1
+IPATH_AETH_CREDIT_SHIFT 24
+IPATH_GPIO_LLI_BIT 5
+IPATH_GPIO_OVRUN_BIT 4
+IPATH_GPIO_PORT0_BIT 2
+IPATH_GPIO_RXUVL_BIT 3
+IPATH_PORT_MASTER_UNINIT 4
+IPATH_PORT_WAITING_RCV 2
+IPATH_PORT_WAITING_URG 5
+IPATH_R_WRID_VALID 0
+IPATH_SDMA_DISARMED 1
+IPCT_ASSURED 4
+IPCT_DESTROY 2
+IPCT_HELPER 6
+IPCT_LABEL 10
+IPCT_MARK 7
+IPCT_NATSEQADJ 8
+IPCT_NEW 0
+IPCT_PROTOINFO 5
+IPCT_RELATED 1
+IPCT_REPLY 3
+IPCT_SECMARK 9
+IPEXP_DESTROY 1
+IPEXP_NEW 0
+IPMI_FLAGS_HANDLER_INSTALL 0
+IPOIB_FLAG_ADMIN_CM 9
+IPOIB_FLAG_ADMIN_UP 2
+IPOIB_FLAG_INITIALIZED 1
+IPOIB_FLAG_OPER_UP 0
+IPOIB_FLAG_SUBINTERFACE 5
+IPOIB_FLAG_UMCAST 10
+IPOIB_MCAST_FLAG_BUSY 2
+IPOIB_MCAST_FLAG_FOUND 0
+IPOIB_MCAST_FLAG_SENDONLY 1
+IPOIB_NEIGH_TBL_FLUSH 12
+IPOIB_PKEY_ASSIGNED 3
+IPOIB_PKEY_STOP 4
+IPOIB_STOP_NEIGH_GC 11
+IPOIB_STOP_REAPER 7
+IPORT_RESET_PENDING 0
+IPP_CFIG_IP_MAX_PKT_SHIFT 8
+IPS_ASSURED_BIT 2
+IPS_DYING_BIT 9
+IPS_HELPER_BIT 13
+IPS_SEQ_ADJUST_BIT 6
+IP_VS_DEST_STATE_REMOVING 1
+IP_VS_SCTP_S_CLOSED 13
+IP_VS_SCTP_S_ESTABLISHED 8
+IP_VS_SCTP_S_SHUTDOWN_ACK_SENT 11
+IP_VS_SCTP_S_SHUTDOWN_RECEIVED 10
+IP_VS_SCTP_S_SHUTDOWN_SENT 9
+IP_VS_TCP_S_CLOSE 6
+IP_VS_TCP_S_CLOSE_WAIT 7
+IP_VS_TCP_S_ESTABLISHED 1
+IP_VS_TCP_S_FIN_WAIT 4
+IP_VS_TCP_S_TIME_WAIT 5
+IQM_CF_MIDTAP_IM__B 1
+IQM_CF_MIDTAP_RE__B 0
+IQM_CF_OUT_ENA_QAM__B 1
+IQM_RC_RATE_OFS_LO__W 16
+IREQ_ABORT_PATH_ACTIVE 6
+IREQ_ACTIVE 3
+IREQ_COMPLETE_IN_TARGET 0
+IREQ_NO_AUTO_FREE_TAG 7
+IREQ_PENDING_ABORT 4
+IREQ_TC_ABORT_POSTED 5
+IREQ_TERMINATED 1
+IREQ_TMF 2
+IRL_FC_SHIFT 24
+IRQ_MODRT_RX_TIMER_SHIFT 16
+IRQ_MODRT_TX_TIMER_SHIFT 0
+IRQ_MOVE_CLEANUP_VECTOR 32
+IRQTF_AFFINITY 2
+IRQTF_FORCED_THREAD 3
+IS_ANY_T0 9
+IS_ANY_T1 10
+IS_ATR_PRESENT 11
+IS_ATR_VALID 12
+IS_AUTOPPS_ACT 6
+IS_BAD_CARD 16
+IS_CMM_ABSENT 13
+ISCSI_CMD_REQUEST_TYPE_SHIFT 14
+ISCSI_KWQE_HEADER_LAYER_CODE_SHIFT 4
+ISCSI_KWQE_INIT1_PAGE_SIZE_SHIFT 0
+ISCSI_LOGIN_REQUEST_NUM_RESP_BDS_SHIFT 24
+ISCSI_LOGIN_REQUEST_RESP_BUFFER_LENGTH_SHIFT 0
+ISCSI_LOGIN_REQUEST_TYPE_SHIFT 14
+ISCSI_LOGOUT_REQUEST_TYPE_SHIFT 14
+ISCSI_SUSPEND_BIT 1
+ISCSI_TEXT_REQUEST_NUM_RESP_BDS_SHIFT 24
+ISCSI_TEXT_REQUEST_RESP_BUFFER_LENGTH_SHIFT 0
+ISCSI_TEXT_REQUEST_TYPE_SHIFT 14
+ISCSI_TMF_REQUEST_TYPE_SHIFT 14
+ISDN_P_NT_E1 4
+ISDN_P_NT_S0 2
+ISDN_P_TE_E1 3
+ISDN_P_TE_S0 1
+IS_INVREV 8
+ISP_ABORT_NEEDED 2
+ISP_ABORT_RETRY 10
+ISP_QUIESCE_NEEDED 20
+ISP_UNRECOVERABLE 17
+IT87_CFQ_SHIFT 3
+IVTV_F_I_DECODING_YUV 12
+IVTV_F_I_DEC_PAUSED 20
+IVTV_F_I_DEC_YUV 7
+IVTV_F_I_DMA 0
+IVTV_F_I_EOS 4
+IVTV_F_I_EV_DEC_STOPPED 28
+IVTV_F_I_EV_VSYNC 29
+IVTV_F_I_EV_VSYNC_ENABLED 31
+IVTV_F_I_EV_VSYNC_FIELD 30
+IVTV_F_I_FAILED 22
+IVTV_F_I_HAVE_WORK 15
+IVTV_F_I_PIO 19
+IVTV_F_I_RADIO_USER 5
+IVTV_F_I_UDMA 1
+IVTV_F_I_UDMA_PENDING 2
+IVTV_F_I_UPDATE_CC 9
+IVTV_F_I_UPDATE_VPS 11
+IVTV_F_I_UPDATE_WSS 10
+IVTV_F_I_VALID_DEC_TIMINGS 14
+IVTV_F_I_WORK_HANDLER_PCM 23
+IVTV_F_I_WORK_HANDLER_PIO 18
+IVTV_F_I_WORK_HANDLER_VBI 16
+IVTV_F_I_WORK_HANDLER_YUV 17
+IVTV_F_S_APPL_IO 8
+IVTV_F_S_DMA_HAS_VBI 1
+IVTV_F_S_DMA_PENDING 0
+IVTV_F_S_INTERNAL_USE 5
+IVTV_F_S_NEEDS_DATA 2
+IVTV_F_S_PASSTHROUGH 6
+IVTV_F_S_PIO_PENDING 9
+IVTV_F_S_STREAMING 4
+IVTV_F_S_STREAMOFF 7
+IWCM_F_CALLBACK_DESTROY 1
+IWCM_F_CONNECT_WAIT 2
+IWLAGN_BT_FLAG_COEX_MODE_SHIFT 3
+IWLAGN_EXT_BEACON_TIME_POS 22
+IWL_FIRST_OFDM_RATE 4
+IWL_MVM_STATUS_HW_CTKILL 1
+IWL_MVM_STATUS_HW_RFKILL 0
+IWL_MVM_STATUS_IN_HW_RESTART 3
+IWL_MVM_STATUS_ROC_RUNNING 2
+__IXGB_DOWN 0
+IXGBE_ADVTXD_IDX_SHIFT 4
+IXGBE_ADVTXD_L4LEN_SHIFT 8
+IXGBE_ADVTXD_MACLEN_SHIFT 9
+IXGBE_ADVTXD_MSS_SHIFT 16
+IXGBE_ADVTXD_PAYLEN_SHIFT 14
+__IXGBE_DOWN 2
+IXGBE_DPMCS_MTSOS_SHIFT 16
+IXGBE_EEPROM_RW_ADDR_SHIFT 2
+IXGBE_EEPROM_RW_REG_DATA 16
+IXGBE_ETQF_POOL_SHIFT 20
+IXGBE_FCBUFF_BUFFCNT_SHIFT 8
+IXGBE_FCBUFF_BUFFSIZE_SHIFT 3
+IXGBE_FCBUFF_OFFSET_SHIFT 16
+IXGBE_FCDMARW_LASTSIZE_SHIFT 16
+__IXGBE_FCOE_TARGET 1
+IXGBE_FDIRCMD_FLOW_TYPE_SHIFT 5
+IXGBE_FDIRCMD_RX_QUEUE_SHIFT 16
+IXGBE_FDIRCMD_VT_POOL_SHIFT 24
+IXGBE_FDIRCTRL_DROP_Q_SHIFT 8
+IXGBE_FDIRCTRL_FLEX_SHIFT 16
+IXGBE_FDIRCTRL_FULL_THRESH_SHIFT 28
+IXGBE_FDIRCTRL_MAX_LENGTH_SHIFT 24
+IXGBE_FDIRHASH_SIG_SW_INDEX_SHIFT 16
+IXGBE_MFLCN_RPFCE_SHIFT 4
+IXGBE_MHADD_MFS_SHIFT 16
+IXGBE_MSCA_DEV_TYPE_SHIFT 16
+IXGBE_MSCA_NP_ADDR_SHIFT 0
+IXGBE_MSCA_PHY_ADDR_SHIFT 21
+IXGBE_RAH_VIND_SHIFT 18
+__IXGBE_READ_I2C 5
+IXGBE_RT2CR_MCL_SHIFT 12
+IXGBE_RTRPT4C_BWG_SHIFT 9
+IXGBE_RTRPT4C_MCL_SHIFT 12
+IXGBE_RTRUP2TC_UP_SHIFT 3
+IXGBE_RTTDT2C_BWG_SHIFT 9
+IXGBE_RTTDT2C_MCL_SHIFT 12
+IXGBE_RTTPCS_ARBD_SHIFT 22
+IXGBE_RTTPT2C_BWG_SHIFT 9
+IXGBE_RTTPT2C_MCL_SHIFT 12
+__IXGBE_RX_CSUM_UDP_ZERO_ERR 5
+__IXGBE_RX_FCOE 6
+IXGBE_RXPBSIZE_SHIFT 10
+IXGBE_SFF_VENDOR_OUI_BYTE0_SHIFT 24
+IXGBE_SFF_VENDOR_OUI_BYTE1_SHIFT 16
+IXGBE_SFF_VENDOR_OUI_BYTE2_SHIFT 8
+IXGBE_SRRCTL_BSIZEHDRSIZE_SHIFT 2
+IXGBE_TDPT2TCCR_BWG_SHIFT 9
+IXGBE_TDPT2TCCR_MCL_SHIFT 12
+IXGBE_TDTQ2TCCR_BWG_SHIFT 9
+IXGBE_TDTQ2TCCR_MCL_SHIFT 12
+__IXGBE_TESTING 0
+__IXGBE_TX_FDIR_INIT_DONE 0
+IXGBE_TX_FLAGS_VLAN_PRIO_SHIFT 29
+IXGBE_TX_FLAGS_VLAN_SHIFT 16
+__IXGBEVF_DOWN 2
+__IXGBEVF_TESTING 0
+IXGBE_VT_CTL_POOL_SHIFT 7
+IXGBE_VT_MSGINFO_SHIFT 16
+IXGB_MSCA_DEV_TYPE_SHIFT 16
+IXGB_MSCA_NP_ADDR_SHIFT 0
+IXGB_MSCA_PHY_ADDR_SHIFT 21
+IXGB_RCTL_MO_SHIFT 12
+J_ABORTED 3
+JC42_CFG_HYST_SHIFT 9
+__JI_COMMIT_RUNNING 0
+JIFFIES_SHIFT 8
+JME_FLAG_MSI 1
+JME_FLAG_POLL 5
+JME_FLAG_SHUTDOWN 6
+JME_FLAG_SSET 2
+JOB_AUTOWEP 7
+JOB_DIE 0
+JOB_EVENT 6
+JOB_MIC 5
+JOB_PROMISC 4
+JOB_SCAN_RESULTS 9
+JOB_STATS 3
+JOB_WSTATS 8
+JOB_XMIT 1
+JOB_XMIT11 2
+JSET_BITS 3
+J_WRITERS_BLOCKED 1
+J_WRITERS_QUEUED 2
+KDB_DEBUG_FLAG_SHIFT 16
+KEY_BRIGHTNESS_CYCLE 243
+KEY_BRIGHTNESSDOWN 224
+KEY_BRIGHTNESSUP 225
+KEY_BRIGHTNESS_ZERO 244
+KEY_DISPLAY_OFF 245
+KEY_F14 184
+KEY_F15 185
+KEY_F16 186
+KEY_F17 187
+KEY_F18 188
+KEY_FLAG_DEAD 1
+KEY_FLAG_IN_QUOTA 3
+KEY_FLAG_INSTANTIATED 0
+KEY_FLAG_INVALIDATED 7
+KEY_FLAG_NEGATIVE 5
+KEY_FLAG_REVOKED 2
+KEY_FLAG_ROOT_CAN_CLEAR 6
+KEY_FLAG_USER_CONSTRUCT 4
+KEY_GC_KEY_EXPIRED 0
+KEY_GC_REAPING_KEYTYPE 2
+KEY_GC_REAP_KEYTYPE 1
+KEY_NUMLOCK 69
+KEYP_LK_PTV_PTV_SHIFT 5
+KEY_POWER 116
+KEY_SLEEP 142
+KEY_SWITCHVIDEOMODE 227
+KEY_UNKNOWN 240
+KEY_VIDEO_NEXT 241
+KEY_VIDEO_PREV 242
+KEY_VOLUMEDOWN 114
+KEY_VOLUMEUP 115
+KG_SHIFT 0
+KMEM_ACCOUNTED_ACTIVATED 1
+KMEM_ACCOUNTED_ACTIVE 0
+KMEM_ACCOUNTED_DEAD 2
+KPF_ANON 12
+KPF_BUDDY 10
+KPF_COMPOUND_HEAD 15
+KPF_COMPOUND_TAIL 16
+KPF_HUGE 17
+KPF_KSM 21
+KPF_MMAP 11
+KPF_NOPAGE 20
+KPF_THP 22
+KP_ROW_SHIFT 4
+KTHREAD_IS_PER_CPU 0
+KTHREAD_SHOULD_PARK 2
+KTHREAD_SHOULD_STOP 1
+KVM_APIC_INIT 0
+KVM_APIC_SIPI 1
+KVM_FEATURE_ASYNC_PF 4
+KVM_FEATURE_CLOCKSOURCE 0
+KVM_FEATURE_CLOCKSOURCE2 3
+KVM_FEATURE_CLOCKSOURCE_STABLE_BIT 24
+KVM_FEATURE_NOP_IO_DELAY 1
+KVM_FEATURE_PV_EOI 6
+KVM_FEATURE_STEAL_TIME 5
+KVM_IRQFD_RESAMPLE_IRQ_SOURCE_ID 1
+KVM_MMU_HASH_SHIFT 10
+KVM_REQ_CLOCK_UPDATE 8
+KVM_REQ_MASTERCLOCK_UPDATE 18
+KVM_USERSPACE_IRQ_SOURCE_ID 0
+KWQE_LAYER_SHIFT 28
+KWQE_OPCODE_SHIFT 16
+L2BPERDMAP 13
+L2CAP_CTRL_FINAL_SHIFT 7
+L2CAP_CTRL_POLL_SHIFT 4
+L2CAP_CTRL_REQSEQ_SHIFT 8
+L2CAP_CTRL_SAR_SHIFT 14
+L2CAP_CTRL_SUPER_SHIFT 2
+L2CAP_CTRL_TXSEQ_SHIFT 1
+L2CAP_EXT_CTRL_FINAL_SHIFT 1
+L2CAP_EXT_CTRL_POLL_SHIFT 18
+L2CAP_EXT_CTRL_REQSEQ_SHIFT 2
+L2CAP_EXT_CTRL_SAR_SHIFT 16
+L2CAP_EXT_CTRL_SUPER_SHIFT 16
+L2CAP_EXT_CTRL_TXSEQ_SHIFT 18
+L2_DB_SIZE 14
+L2DBWORD 5
+L2DISIZE 9
+L2DTSLOTSIZE 5
+L2EXTSPERSUM 5
+L2INOSPEREXT 5
+L2INOSPERIAG 12
+L2LOGPSIZE 12
+L2_QENTRY_SZ 12
+L2XTSLOTSIZE 4
+L3_CLS_PID_SHIFT 16
+L3_CLS_TOSMASK_SHIFT 8
+L3_CLS_TOS_SHIFT 0
+L4_KWQ_CLOSE_REQ_LAYER_CODE_SHIFT 4
+L4_KWQ_CONNECT_REQ1_LAYER_CODE_SHIFT 4
+L4_KWQ_CONNECT_REQ2_LAYER_CODE_SHIFT 4
+L4_KWQ_CONNECT_REQ3_LAYER_CODE_SHIFT 4
+L4_KWQ_OFFLOAD_PG_LAYER_CODE_SHIFT 4
+L4_KWQ_RESET_REQ_LAYER_CODE_SHIFT 4
+L4_KWQ_UPDATE_PG_LAYER_CODE_SHIFT 4
+L4_KWQ_UPLOAD_LAYER_CODE_SHIFT 4
+LAS_BIT_BIGENDIAN 24
+LC_LINK_WIDTH_SHIFT 0
+LC_SPEED_CHANGE_ATTEMPTS_ALLOWED_SHIFT 3
+LDO_I2C_EN_SHIFT 0
+LDO_SEL_SHIFT 2
+LDO_SEQ_SHIFT 2
+LED_CAPSL 1
+LED_COMPOSE 3
+LED_KANA 4
+LED_LINK_SHIFT 12
+LED_NUML 0
+LED_SCROLLL 2
+LED_TXRX_SHIFT 8
+LFA_LINK_FLAP_REASON_OFFSET 0
+LINE6_INDEX_PAUSE_PLAYBACK 12
+LINK_FLAP_AVOIDANCE_COUNT_OFFSET 8
+LINK_FLAP_COUNT_OFFSET 16
+__LINK_STATE_DORMANT 4
+__LINK_STATE_NOCARRIER 2
+__LINK_STATE_PRESENT 1
+__LINK_STATE_START 0
+LK_STATE_IN_USE 0
+LM3533_ALS_FLAG_INT_ENABLED 1
+LM3533_BOOST_FREQ_SHIFT 0
+LM3533_BOOST_OVP_SHIFT 1
+LM73_CTRL_RES_SHIFT 5
+LmRAMPAGE_LSHIFT 8
+LOCAL_ADDRESSING_MODE 11
+LOCAL_BURST_ENABLE 8
+LOCAL_BUS_WIDTH 0
+LOCAL_DMA_CHANNEL_0_INTERRUPT_ENABLE 18
+LOCAL_INTERRUPT_INPUT_ENABLE 11
+LOCAL_LOOP_UPDATE 6
+LOCAL_OUT_ZLP 6
+LOG2_LOG_TABLE_SIZE 5
+log_FLUSH 4
+log_INLINELOG 1
+log_QUIESCE 3
+log_SYNCBARRIER 2
+LOOPBACK_NONE 0
+LOOPBACK_XGMII 3
+LOOP_RESYNC_NEEDED 4
+LowThresholdShift 12
+LOWWAIT 2
+LP8725_BUCK_CL_S 6
+LP8727_ICHG_SHIFT 4
+LP8788_ALM_EN_S 7
+LP8788_BL_DIM_MODE_SHIFT 1
+LP8788_BL_FULLSCALE_SHIFT 2
+LP8788_BL_PWM_POLARITY_SHIFT 6
+LP8788_BL_RAMP_RISE_SHIFT 4
+LPFC_DATA_READY 1
+LPFC_ELS_RING 2
+LPFC_FCP_RING 0
+LPFC_FIP_ELS_ID_SHIFT 14
+LP_PREEMPT_REQUEST 1
+LSFL_CB_DELAY 9
+LSFL_NODIR 10
+LSFL_RCOM_READY 5
+LSFL_RCOM_WAIT 6
+LSFL_RECOVER_DOWN 1
+LSFL_RECOVER_LOCK 2
+LSFL_RECOVER_STOP 0
+LSFL_RECOVER_WORK 3
+LSFL_RUNNING 4
+LSFL_TIMEWARN 8
+LSFL_UEVENT_WAIT 7
+LVDS_BL_MOD_LEVEL_SHIFT 8
+LZMA_LEN_NUM_LOW_BITS 3
+LZMA_LEN_NUM_MID_BITS 3
+LZMA_NUM_POS_BITS_MAX 4
+LZMA_NUM_POS_SLOT_BITS 6
+M8051_RESET 0
+M98088_MICPRE_SHIFT 5
+M98090_ADCHP_SHIFT 0
+M98090_DACHP_SHIFT 0
+M98090_DMIC_COMP_SHIFT 4
+M98090_FREQ_SHIFT 4
+M98090_IJDET_SHIFT 2
+M98090_MICCLK_SHIFT 4
+M98090_MIC_PA1EN_SHIFT 5
+M98090_MIC_PA2EN_SHIFT 5
+M98090_PERFMODE_SHIFT 1
+M98090_TDM_SLOTDLY_SHIFT 0
+M98090_TDM_SLOTL_SHIFT 6
+M98090_TDM_SLOTR_SHIFT 4
+M98090_USE_M1_SHIFT 0
+M98095_MICPRE_SHIFT 5
+MAC_ADDR_IDX_SHIFT 4
+MAC_ADDR_TYPE_SHIFT 16
+MAC_ADDR_VALID 0
+MACB_REV_SIZE 16
+MAC_CFG_DESC_TX_1_DST_INDEX_POS 16
+MAC_CFG_DESC_TX_2_L2_TRANSLATION_TYPE_POS 18
+MAC_CFG_DESC_TX_2_NUM_OF_DESCRIPTORS_POS 0
+MAC_CTRL_HALF_LEFT_BUF_SHIFT 28
+MAC_CTRL_PRMLEN_SHIFT 10
+MAC_CTRL_SPEED_SHIFT 20
+MAC_FLOW_CTRL_PT_SHIFT 16
+MAC_HALF_DUPLX_CTRL_ABEBT_SHIFT 20
+MAC_HALF_DUPLX_CTRL_JAMIPG_SHIFT 24
+MAC_HALF_DUPLX_CTRL_RETRY_SHIFT 12
+MAC_IPG_IFG_IPGR1_SHIFT 16
+MAC_IPG_IFG_IPGR2_SHIFT 24
+MAC_IPG_IFG_IPGT_SHIFT 0
+MAC_IPG_IFG_MIFG_SHIFT 8
+Magic 1
+MAP_ISR_S2_CST 6
+MAP_ISR_S2_GTT 6
+MAX77686_OPMODE_BUCK234_SHIFT 4
+MAX77686_OPMODE_SHIFT 6
+MAX8925_IRQ_RTC_ALARM0 22
+MAX8997_LED_FLASH_SHIFT 3
+MAX8997_LED_MOVIE_SHIFT 4
+MAX9877_OSC_OFFSET 4
+MAX_HWIFS 10
+MAX_ORDER 11
+MAX_PFC_PRIORITIES 8
+MAX_READ_REQUEST_SHIFT 12
+MAX_READ_REQUEST_SZ_SHIFT 12
+MAX_SWAPFILES_SHIFT 5
+M_BITS 9
+MB_RFD_PROD_INDX_SHIFT 0
+MB_RRD_CONS_INDX_SHIFT 11
+MB_TPD_PROD_INDX_SHIFT 22
+MBX_INTR_WAIT 2
+MBX_UPDATE_FLASH_ACTIVE 3
+MC13783_ADC1_ATO_SHIFT 11
+MC13783_POWER_CONTROL_2_ON1BDBNC 4
+MC13783_POWER_CONTROL_2_ON2BDBNC 6
+MC13783_POWER_CONTROL_2_ON3BDBNC 8
+MC13XXX_ADC1_CHAN0_SHIFT 5
+MC13XXX_ADC1_CHAN1_SHIFT 8
+MC_CHP_IO_CNTL_A1__MEM_SYNC_ENA__SHIFT 24
+MC_CHP_IO_CNTL_B1__MEM_SYNC_ENB__SHIFT 24
+MC_CMD_CAPABILITIES_TURBO_ACTIVE_LBN 2
+MC_CMD_GET_LINK_OUT_FULL_DUPLEX_LBN 1
+MC_CMD_GET_LINK_OUT_LINK_UP_LBN 0
+MC_CMD_GET_PHY_CFG_OUT_BIST_CABLE_LONG_LBN 2
+MC_CMD_GET_PHY_CFG_OUT_BIST_CABLE_SHORT_LBN 1
+MC_CMD_GET_PHY_CFG_OUT_BIST_LBN 6
+MC_CMD_GET_PHY_CFG_OUT_LOWPOWER_LBN 3
+MC_CMD_GET_PHY_CFG_OUT_POWEROFF_LBN 4
+MC_CMD_GET_PHY_CFG_OUT_TXDIS_LBN 5
+MC_CMD_MMD_CLAUSE22 0
+MC_CMD_NVRAM_INFO_OUT_PROTECTED_LBN 0
+MC_CMD_PHY_CAP_10000FDX_LBN 7
+MC_CMD_PHY_CAP_1000FDX_LBN 6
+MC_CMD_PHY_CAP_1000HDX_LBN 5
+MC_CMD_PHY_CAP_100FDX_LBN 4
+MC_CMD_PHY_CAP_100HDX_LBN 3
+MC_CMD_PHY_CAP_10FDX_LBN 2
+MC_CMD_PHY_CAP_10HDX_LBN 1
+MC_CMD_PHY_CAP_AN_LBN 10
+MC_CMD_PHY_CAP_ASYM_LBN 9
+MC_CMD_PHY_CAP_PAUSE_LBN 8
+MC_CMD_SET_LINK_IN_LOWPOWER_LBN 0
+MC_CMD_SET_LINK_IN_POWEROFF_LBN 1
+MC_CMD_SET_LINK_IN_TXDIS_LBN 2
+MC_CMD_SET_MAC_IN_REJECT_UNCST_LBN 0
+MCC_WRB_SGE_CNT_SHIFT 3
+MC_DISP0R_INIT_LAT_SHIFT 8
+MC_DISP1R_INIT_LAT_SHIFT 12
+MCE_OVERFLOW 0
+MC_HASH_SZ_LOG 9
+MCH_PRD_LEN_SHIFT 16
+MCH_SSP_FR_TYPE_SHIFT 13
+MC_NANOSECOND_BITS 30
+MCPR_IMC_COMMAND_OPERATION_BITSHIFT 28
+MCPR_IMC_COMMAND_TRANSFER_ADDRESS_BITSHIFT 8
+MCS_SEL_IN_FREQ_SHIFT 4
+MC_VECTOR 18
+MD_ARRAY_FIRST_USE 3
+MD_CHANGE_CLEAN 1
+MD_CHANGE_DEVS 0
+MD_CHANGE_PENDING 2
+MD_DISK_ACTIVE 1
+MD_DISK_FAULTY 0
+MD_DISK_REMOVED 3
+MD_DISK_SYNC 2
+MD_DISK_WRITEMOSTLY 9
+MDIO_CLK_SEL_SHIFT 24
+MDIO_DATA_OP_SHIFT 28
+MDIO_DATA_PMD_SHIFT 23
+MDIO_DATA_RA_SHIFT 18
+MDIO_DATA_SHIFT 0
+MDIO_DATA_TA_SHIFT 16
+MDIO_MMD_PHYXS 4
+MDIO_REG_ADDR_SHIFT 16
+MDIO_TX0_TX_DRIVER_PREEMPHASIS_SHIFT 12
+MD_NO_FUA 7
+MdpMinorShift 6
+MD_RECOVERY_CHECK 7
+MD_RECOVERY_DONE 4
+MD_RECOVERY_ERROR 10
+MD_RECOVERY_FROZEN 9
+MD_RECOVERY_INTR 3
+MD_RECOVERY_NEEDED 5
+MD_RECOVERY_RECOVER 2
+MD_RECOVERY_REQUESTED 6
+MD_RECOVERY_RESHAPE 8
+MD_RECOVERY_RUNNING 0
+MD_RECOVERY_SYNC 1
+MD_SB_BITMAP_PRESENT 8
+MD_SB_CLEAN 0
+MEDIA_FLAG_REGISTERED 0
+MEGASAS_FUSION_IN_RESET 0
+MEGASAS_REQ_DESCRIPT_FLAGS_TYPE_SHIFT 1
+MEI_CL_EVENT_RX 0
+MEMCG_SOCK_ACTIVE 0
+MEMCTL_CMD_SHIFT 13
+MEMCTL_FREQ_SHIFT 8
+MEMORY_SPACE_LOCAL_BUS_WIDTH 0
+MEM_SDRAM_MODE_REG__MEM_MODE_REG__SHIFT 0
+MESH_IFACE_BIT_OFFSET 12
+MESH_WORK_DRIFT_ADJUST 4
+MESH_WORK_GROW_MPATH_TABLE 1
+MESH_WORK_GROW_MPP_TABLE 2
+MESH_WORK_HOUSEKEEPING 0
+MESH_WORK_MBSS_CHANGED 5
+MESH_WORK_ROOT 3
+META_discard 4
+META_forcewrite 5
+META_free 1
+META_io 6
+MI_COM_PHY_ADDR_SHIFT 21
+MI_COM_REG_ADDR_SHIFT 16
+MICRO_SELECT_PREAMPLI_OFFSET 2
+MID_DMA_CHAN_SHIFT 6
+MID_DMA_COUNT_SHIFT 16
+MID_DMA_VCI_SHIFT 6
+MID_RED_SHIFT 25
+MID_SEG_ID_SHIFT 28
+MID_SEG_PR_SHIFT 25
+MID_SEG_RATE_SHIFT 19
+MID_SEG_VCI_SHIFT 4
+MID_VCI_LOCATION_SHIFT 18
+MID_VCI_MODE_SHIFT 30
+MID_VCI_SIZE_SHIFT 15
+MIIpmdShift 7
+MIIregShift 2
+MII_TG3_AUXCTL_MISC_RDSEL_SHIFT 12
+MIN_OCQP_SHIFT 12
+MINORBITS 20
+MIN_PBL_SHIFT 8
+MIN_RQT_SHIFT 10
+MISC_REGISTERS_GPIO_3 3
+MISC_REGISTERS_GPIO_CLR_POS 16
+MISC_REGISTERS_GPIO_FLOAT_POS 24
+MISC_REGISTERS_GPIO_INT_CLR_POS 24
+MISC_REGISTERS_GPIO_INT_SET_POS 16
+MISC_REGISTERS_GPIO_SET_POS 8
+MISC_SPIO_CLR_POS 16
+MISC_SPIO_FLOAT_POS 24
+MISC_SPIO_INT_OLD_SET_POS 16
+MISC_SPIO_SET_POS 8
+MI_STORE_DWORD_INDEX_SHIFT 2
+MIXART_MOTHERBOARD_ELF_INDEX 1
+MIXART_NOTIFY_CARD_OFFSET 12
+MIXART_NOTIFY_PCM_OFFSET 8
+ML_BITS 4
+MLX4_CMPT_SHIFT 24
+MLX4_EVENT_TYPE_PORT_MNG_CHG_EVENT 29
+MLX4_RSS_QPC_FLAG_OFFSET 13
+MLX4_UPD_QP_PATH_MASK_ETH_RX_BLOCK_1P 43
+MLX4_UPD_QP_PATH_MASK_ETH_RX_BLOCK_TAGGED 44
+MLX4_UPD_QP_PATH_MASK_ETH_RX_BLOCK_UNTAGGED 42
+MLX4_UPD_QP_PATH_MASK_ETH_TX_BLOCK_1P 40
+MLX4_UPD_QP_PATH_MASK_ETH_TX_BLOCK_TAGGED 41
+MLX4_UPD_QP_PATH_MASK_ETH_TX_BLOCK_UNTAGGED 39
+MLX4_UPD_QP_PATH_MASK_SCHED_QUEUE 46
+MLX4_UPD_QP_PATH_MASK_VLAN_INDEX 37
+MLX5_CMD_DATA 0
+MLX5_EVENT_TYPE_CMD 10
+MLX5_EVENT_TYPE_PAGE_REQUEST 11
+MLX5_IB_MMAP_CMD_SHIFT 8
+MLX5_IB_SQ_STRIDE 6
+MMF_DUMPABLE 0
+MMF_DUMP_FILTER_SHIFT 2
+MMF_DUMP_SECURELY 1
+MMF_HAS_UPROBES 19
+MMF_RECALC_UPROBES 20
+MMF_VM_MERGEABLE 16
+MMIO_GEN_LOW_SHIFT 9
+MMIO_SPTE_GEN_HIGH_SHIFT 52
+MMIO_SPTE_GEN_LOW_SHIFT 3
+MM_SHIFT 6
+MODEL24_SHIFT 1
+MODE_SHIFT 5
+MPI_NIC_FUNCTION_SHIFT 6
+MPI_RESET_NEEDED 19
+MP_ISA_BUS 0
+MPU3050_PWR_MGM_POS 6
+MPU401_MODE_BIT_INPUT 0
+MPU401_MODE_BIT_OUTPUT 1
+MPU401_MODE_BIT_OUTPUT_TRIGGER 3
+MPX_MODE 3
+MR_COMPLETE 2
+MR_INPROGRESS 1
+MR_RAID_CTX_RAID_FLAGS_IO_SUB_TYPE_SHIFT 4
+MR_START 0
+MSBD0_X_SHIFT 28
+MSBD0_Y_SHIFT 24
+MSBD1_SHIFT 24
+MSC_RAW 3
+MSC_SCAN 4
+MSI_ADDR_DEST_MODE_SHIFT 2
+MSI_DATA_TRIGGER_SHIFT 15
+MSPRO_BLOCK_PART_SHIFT 3
+MSR_C_LO_VID_SHIFT 8
+MSR_LINK_SHIFT 0
+MSRPM_ALLOC_ORDER 1
+MSSShift 16
+MS_X0_SHIFT 0
+MS_X1_SHIFT 8
+MS_X2_SHIFT 16
+MS_X3_SHIFT 0
+MS_X4_SHIFT 8
+MS_X5_SHIFT 16
+MS_Y0_SHIFT 4
+MS_Y1_SHIFT 12
+MS_Y2_SHIFT 20
+MS_Y3_SHIFT 4
+MS_Y4_SHIFT 12
+MS_Y5_SHIFT 20
+MTIP_ABAR 5
+MTIP_DDF_CLEANUP_BIT 5
+MTIP_DDF_INIT_DONE_BIT 7
+MTIP_DDF_OVER_TEMP_BIT 2
+MTIP_DDF_REBUILD_FAILED_BIT 8
+MTIP_DDF_REMOVE_PENDING_BIT 1
+MTIP_DDF_RESUME_BIT 6
+MTIP_DDF_SEC_LOCK_BIT 0
+MTIP_DDF_WRITE_PROTECT_BIT 3
+MTIP_PF_DM_ACTIVE_BIT 3
+MTIP_PF_EH_ACTIVE_BIT 1
+MTIP_PF_IC_ACTIVE_BIT 0
+MTIP_PF_ISSUE_CMDS_BIT 5
+MTIP_PF_REBUILD_BIT 6
+MTIP_PF_SE_ACTIVE_BIT 2
+MTIP_PF_SVC_THD_ACTIVE_BIT 4
+MTIP_PF_SVC_THD_STOP_BIT 8
+MTIP_TAG_INTERNAL 0
+MT_ST_BLKSIZE_SHIFT 0
+MT_ST_DENSITY_SHIFT 24
+MT_ST_SOFTERR_SHIFT 0
+MTYPE_OFS 4
+MUSB_DEVCTL_VBUS_SHIFT 3
+MUSYCC_CCD_BUFFER_LENGTH 16
+MUSYCC_CCD_BUFFER_LOC 24
+MUSYCC_CCD_MAX_LENGTH 10
+MUSYCC_CCD_PROTO_SHIFT 12
+MVMDIO_SMI_DATA_SHIFT 0
+MVMDIO_SMI_PHY_ADDR_SHIFT 16
+MVMDIO_SMI_PHY_REG_SHIFT 21
+MV_PRIMARY_BAR 0
+MV_U3D_EPXCR_EP_ENABLE_SHIFT 4
+MV_U3D_EPXCR_MAX_BURST_SIZE_SHIFT 12
+MV_U3D_EPXCR_MAX_PACKET_SIZE_SHIFT 16
+MWAIT_SUBSTATE_SIZE 4
+NAK_OUT_PACKETS 4
+NAK_OUT_PACKETS 5
+NAK_OUT_PACKETS_MODE 2
+NAME_HASH_SHIFT 5
+NAPI_STATE_NPSVC 2
+NAPI_STATE_SCHED 0
+NCI_DATA_EXCHANGE_TO 3
+NCI_INIT 0
+NCI_SPI_ACK_SHIFT 6
+NCI_UP 1
+NES_CQP_APBVT_NIC_SHIFT 16
+NES_CQP_OP_LOGICAL_PORT_SHIFT 26
+NES_CQP_OP_TERMLEN_SHIFT 28
+NET2272_PCI_IRQ 0
+NET2272_RESET 0
+NET_CONGESTED 0
+NETDEV_MCAST_ALL_OFF 11
+NETDEV_MCAST_ALL_ON 10
+NETLBL_DOMHSH_BITSIZE 7
+NETQ_STOPPED 3
+NEW_CUR_UUID 17
+NF_ARP_NUMHOOKS 3
+NF_BR_BROUTING 5
+NF_BR_LOCAL_OUT 3
+NF_BR_NUMHOOKS 6
+NF_BR_PRE_ROUTING 0
+NFC_HCI_QUIRK_SHORT_CLEAR 0
+NFC_PROTO_NFC_DEP 5
+NFCWILINK_FW_DOWNLOAD 1
+NF_INET_FORWARD 2
+NF_INET_LOCAL_IN 1
+NF_INET_LOCAL_OUT 3
+NF_INET_NUMHOOKS 5
+NF_INET_POST_ROUTING 4
+NF_INET_PRE_ROUTING 0
+NFS4CLNT_BIND_CONN_TO_SESSION 10
+NFS4CLNT_CHECK_LEASE 1
+NFS4CLNT_DELEGRETURN 5
+NFS4CLNT_LEASE_CONFIRM 7
+NFS4CLNT_LEASE_EXPIRED 2
+NFS4CLNT_PURGE_STATE 9
+NFS4CLNT_RECLAIM_NOGRACE 4
+NFS4CLNT_RECLAIM_REBOOT 3
+NFS4CLNT_SERVER_SCOPE_MISMATCH 8
+NFS4CLNT_SESSION_RESET 6
+NFS4_SESSION_INITING 0
+NFS4_SLOT_TBL_DRAINING 0
+NFS_CONTEXT_BAD 2
+NFS_CONTEXT_ERROR_WRITE 0
+NFS_CONTEXT_RESEND_WRITES 1
+NFS_CS_CHECK_LEASE_TIME 5
+NFS_CS_MIGRATION 2
+NFS_CS_NORESVPORT 0
+NFS_CS_RENEWD 3
+NFS_CS_STOP_RENEW 4
+NFSD4_CLIENT_CB_KILL 1
+NFSD4_CLIENT_CB_UPDATE 0
+NFSD4_CLIENT_CONFIRMED 4
+NFSD4_CLIENT_STABLE 2
+NFS_DELEGATED_STATE 1
+NFS_DELEGATION_NEED_RECLAIM 0
+NFS_DELEGATION_REFERENCED 3
+NFS_DELEGATION_RETURN 1
+NFS_DELEGATION_RETURN_IF_CLOSED 2
+NFS_DELEGATION_RETURNING 4
+NFS_DEVICEID_INVALID 0
+NFS_DEVICEID_UNAVAILABLE 1
+NFS_INO_ADVISE_RDPLUS 0
+NFS_INO_FSCACHE 5
+NFS_INO_STALE 1
+NFS_IOHDR_EOF 1
+NFS_IOHDR_ERROR 0
+NFS_IOHDR_NEED_RESCHED 4
+NFS_IOHDR_REDO 2
+NFS_IO_INPROGRESS 0
+NFS_LAYOUT_BULK_RECALL 2
+NFS_LAYOUT_RETURN 4
+NFS_LAYOUT_ROC 3
+NFS_LOCK_INITIALIZED 0
+NFS_LSEG_ROC 1
+NFS_LSEG_VALID 0
+NFS_OPEN_STATE 2
+NFS_O_RDONLY_STATE 3
+NFS_O_RDWR_STATE 5
+NFS_OWNER_RECLAIM_NOGRACE 1
+NFS_OWNER_RECLAIM_REBOOT 0
+NFS_O_WRONLY_STATE 4
+NFS_STATE_POSIX_LOCKS 8
+NFS_STATE_RECLAIM_NOGRACE 7
+NFS_STATE_RECLAIM_REBOOT 6
+NFS_STATE_RECOVERY_FAILED 9
+NHMEX_M_PMON_CTL_INC_SEL_SHIFT 9
+NHMEX_R_PMON_CTL_EV_SEL_SHIFT 1
+NIG_LATCH_BC_ENABLE_MI_INT 0
+NIG_STATUS_XGXS0_LINK_STATUS_SIZE 18
+NILFS_I_BMAP 7
+NILFS_I_BUSY 3
+NILFS_I_COLLECTED 4
+NILFS_I_DIRTY 1
+NILFS_I_GCINODE 8
+NILFS_I_INODE_DIRTY 6
+NILFS_I_NEW 0
+NILFS_I_QUEUED 2
+NILFS_I_UPDATED 5
+NILFS_SC_DIRTY 0
+NILFS_SC_HAVE_DELTA 4
+NILFS_SC_PRIOR_FLUSH 3
+NILFS_SC_SUPER_ROOT 2
+NILFS_SC_UNCLOSED 1
+NILFS_SEGMENT_USAGE_ACTIVE 0
+NILFS_SEGMENT_USAGE_ERROR 2
+NM_VECTOR 7
+NO_DECELERATION 1
+NO_FILTER 5
+NOHZ_TICK_STOPPED 0
+NOSV 7
+NOT_MASKED_PD_BITS 17
+NPIV_CONFIG_NEEDED 16
+NR_FSCACHE_OBJECT_EVENTS 7
+NR_MOVE_TYPE 2
+NR_PAGEFLAGS 25
+NR_SHAPERS 16
+NTP_SCALE_SHIFT 32
+NUM_MAC_INDEX_DRIVER 4
+NUM_NL80211_IFTYPES 11
+NUM_TSF_IDS 4
+NUM_TSSI_FRAMES 4
+NUM_VCI_BITS 10
+NUM_VPI_BITS 0
+NVDEV_ENGINE_DEVICE 0
+NVDEV_ENGINE_DMAOBJ 18
+NVM_COMB_VER_SHFT 8
+NVME_CC_MPS_SHIFT 7
+NVM_ETRACK_SHIFT 16
+NV_MMIO_BAR 5
+NVREG_ADAPTCTL_PHYSHIFT 24
+NVREG_BKOFFCTRL_GEAR 12
+NVREG_BKOFFCTRL_SELECT 24
+NVREG_MIICTL_ADDRSHIFT 5
+NVREG_RINGSZ_RXSHIFT 16
+NVREG_RINGSZ_TXSHIFT 0
+NV_TX2_TSO_SHIFT 14
+NWD_SHIFT 4
+__NX_DEV_UP 1
+OBJ_REQ_EXISTS 3
+OBJ_REQ_KNOWN 2
+OCFS2_HASH_SHIFT 5
+OCRDMA_ALLOC_LKEY_FMR_SHIFT 1
+OCRDMA_ALLOC_LKEY_LOCAL_WR_SHIFT 5
+OCRDMA_ALLOC_LKEY_PBL_SIZE_SHIFT 16
+OCRDMA_ALLOC_LKEY_REMOTE_ATOMIC_SHIFT 6
+OCRDMA_ALLOC_LKEY_REMOTE_RD_SHIFT 4
+OCRDMA_ALLOC_LKEY_REMOTE_WR_SHIFT 3
+OCRDMA_CREATE_AH_ENTRY_SIZE_SHIFT 23
+OCRDMA_CREATE_AH_NUM_PAGES_SHIFT 19
+OCRDMA_CREATE_AH_PAGE_SIZE_SHIFT 16
+OCRDMA_CREATE_CQ_CNT_SHIFT 27
+OCRDMA_CREATE_CQ_EQID_SHIFT 22
+OCRDMA_CREATE_CQ_PAGE_SIZE_SHIFT 16
+OCRDMA_CREATE_CQ_TYPE_SHIFT 24
+OCRDMA_CREATE_EQ_CNT_SHIFT 26
+OCRDMA_CREATE_MQ_CQ_ID_SHIFT 16
+OCRDMA_CREATE_MQ_RING_SIZE_SHIFT 16
+OCRDMA_CREATE_QP_REQ_DPP_CREDIT_SHIFT 16
+OCRDMA_CREATE_QP_REQ_MAX_IRD_SHIFT 0
+OCRDMA_CREATE_QP_REQ_MAX_ORD_SHIFT 16
+OCRDMA_CREATE_QP_REQ_MAX_RQE_SHIFT 0
+OCRDMA_CREATE_QP_REQ_MAX_SGE_RECV_SHIFT 16
+OCRDMA_CREATE_QP_REQ_MAX_SGE_SEND_SHIFT 16
+OCRDMA_CREATE_QP_REQ_MAX_SGE_WRITE_SHIFT 0
+OCRDMA_CREATE_QP_REQ_MAX_WQE_SHIFT 16
+OCRDMA_CREATE_QP_REQ_NUM_RQ_PAGES_SHIFT 0
+OCRDMA_CREATE_QP_REQ_NUM_WQ_PAGES_SHIFT 16
+OCRDMA_CREATE_QP_REQ_PD_ID_SHIFT 0
+OCRDMA_CREATE_QP_REQ_QPT_SHIFT 29
+OCRDMA_CREATE_QP_REQ_RQ_CQID_SHIFT 0
+OCRDMA_CREATE_QP_REQ_RQE_SIZE_SHIFT 0
+OCRDMA_CREATE_QP_REQ_RQ_PAGE_SIZE_SHIFT 19
+OCRDMA_CREATE_QP_REQ_SQ_PAGE_SIZE_SHIFT 16
+OCRDMA_CREATE_QP_REQ_WQ_CQID_SHIFT 16
+OCRDMA_CREATE_QP_REQ_WQE_SIZE_SHIFT 16
+OCRDMA_CREATE_SRQ_MAX_SGE_RECV_SHIFT 16
+OCRDMA_CREATE_SRQ_NUM_RQ_PAGES_SHIFT 16
+OCRDMA_CREATE_SRQ_PG_SZ_SHIFT 16
+OCRDMA_CREATE_SRQ_RQE_SIZE_SHIFT 0
+OCRDMA_DB_CQ_RING_ID_EXT_MASK_SHIFT 1
+OCRDMA_DESTROY_CQ_QID_SHIFT 0
+OCRDMA_MCH_SUBSYS_SHIFT 8
+OCRDMA_MODIFY_SRQ_LIMIT_SHIFT 16
+OCRDMA_MQE_HDR_EMB_SHIFT 0
+OCRDMA_QP_PARAMS_ACK_TIMEOUT_SHIFT 27
+OCRDMA_QP_PARAMS_HOP_LMT_SHIFT 24
+OCRDMA_QP_PARAMS_MAX_ORD_SHIFT 16
+OCRDMA_QP_PARAMS_PATH_MTU_SHIFT 18
+OCRDMA_QP_PARAMS_RETRY_CNT_SHIFT 24
+OCRDMA_QP_PARAMS_RNR_NAK_TIMER_SHIFT 27
+OCRDMA_QP_PARAMS_RNR_RETRY_CNT_SHIFT 24
+OCRDMA_QP_PARAMS_STATE_SHIFT 5
+OCRDMA_QP_PARAMS_TCLASS_SHIFT 24
+OCRDMA_QP_PARAMS_VLAN_SHIFT 16
+OCRDMA_REG_NSMR_BIND_MEMWIN_SHIFT 24
+OCRDMA_REG_NSMR_CONT_LAST_SHIFT 31
+OCRDMA_REG_NSMR_CONT_NUM_PBL_SHIFT 16
+OCRDMA_REG_NSMR_HPAGE_SIZE_SHIFT 16
+OCRDMA_REG_NSMR_LAST_SHIFT 31
+OCRDMA_REG_NSMR_LOCAL_WR_SHIFT 29
+OCRDMA_REG_NSMR_NUM_PBL_SHIFT 16
+OCRDMA_REG_NSMR_REMOTE_ATOMIC_SHIFT 30
+OCRDMA_REG_NSMR_REMOTE_RD_SHIFT 28
+OCRDMA_REG_NSMR_REMOTE_WR_SHIFT 27
+OCRDMA_WQE_FLAGS_SHIFT 5
+OCRDMA_WQE_OPCODE_SHIFT 0
+OCRDMA_WQE_SIZE_SHIFT 18
+OCRDMA_WQE_TYPE_SHIFT 16
+OFDM_SC_RA_RAM_ECHO_THRES_2K__B 8
+OFDM_SC_RA_RAM_ECHO_THRES_8K__B 0
+OMAP_CTRL_USB_PWRCTL_CLK_CMD_SHIFT 14
+OMAP_CTRL_USB_PWRCTL_CLK_FREQ_SHIFT 22
+ONETOUCH_BUTTON 148
+OO_SHIFT 16
+OP_ANI_RUNNING 32
+OP_BT_PRIORITY_DETECTED 8
+OP_BT_SCAN 16
+OP_ENABLE_BEACON 4
+OP_INVALID 1
+OP_SCANNING 2
+OP_TSF_RESET 64
+OSD_OFFSET_MAX_BITS 28
+OSST_FRAME_SHIFT 6
+OSST_SECTOR_SHIFT 9
+OVS_KEY_ATTR_ARP 13
+OVS_KEY_ATTR_ENCAP 1
+OVS_KEY_ATTR_ETHERNET 4
+OVS_KEY_ATTR_ETHERTYPE 6
+OVS_KEY_ATTR_ICMP 11
+OVS_KEY_ATTR_ICMPV6 12
+OVS_KEY_ATTR_IN_PORT 3
+OVS_KEY_ATTR_IPV4 7
+OVS_KEY_ATTR_IPV6 8
+OVS_KEY_ATTR_ND 14
+OVS_KEY_ATTR_PRIORITY 2
+OVS_KEY_ATTR_SKB_MARK 15
+OVS_KEY_ATTR_TCP 9
+OVS_KEY_ATTR_TUNNEL 16
+OVS_KEY_ATTR_UDP 10
+OVS_KEY_ATTR_VLAN 5
+OXU_REV_SHIFT 16
+OXYGEN_AC97_REG_ADDR_SHIFT 16
+OXYGEN_AC97_REG_CODEC_SHIFT 24
+OXYGEN_A_MONITOR_ROUTE_0_SHIFT 0
+OXYGEN_A_MONITOR_ROUTE_1_SHIFT 2
+OXYGEN_A_MONITOR_ROUTE_2_SHIFT 4
+OXYGEN_A_MONITOR_ROUTE_3_SHIFT 6
+OXYGEN_MULTICH_FORMAT_SHIFT 2
+OXYGEN_PLAY_DAC0_SOURCE_SHIFT 8
+OXYGEN_PLAY_DAC1_SOURCE_SHIFT 10
+OXYGEN_PLAY_DAC2_SOURCE_SHIFT 12
+OXYGEN_PLAY_DAC3_SOURCE_SHIFT 14
+OXYGEN_REC_FORMAT_A_SHIFT 0
+OXYGEN_REC_FORMAT_B_SHIFT 2
+OXYGEN_REC_FORMAT_C_SHIFT 4
+OXYGEN_SPDIF_CATEGORY_SHIFT 4
+OXYGEN_SPDIF_CS_RATE_SHIFT 12
+OXYGEN_SPDIF_FORMAT_SHIFT 0
+OXYGEN_SPDIF_OUT_RATE_SHIFT 24
+OXYGEN_SPI_CODEC_SHIFT 4
+OZ_VERSION_SHIFT 2
+P0_EN_1V0X_LBN 0
+P0_EN_1V2_LBN 1
+P0_EN_2V5_LBN 2
+P0_EN_3V3X_LBN 3
+P0_EN_5V_LBN 4
+P0_X_TRST_LBN 6
+P1_AFE_PWD_LBN 0
+P1_DSP_PWD25_LBN 1
+P1_SPARE_LBN 4
+PACKET_LRA_VALID 3
+PACKET_MERGE_SEGS 4
+PACKET_NWA_VALID 2
+PACKET_WRITABLE 1
+PA_CTRL_APALP 4
+PA_CTRL_APAPRECH 5
+PAGE_ALLOC_COSTLY_ORDER 3
+PAGE_CACHE_SHIFT 12
+PAGE_SHIFT 12
+PALMAS_PRIMARY_SECONDARY_PAD1_GPIO_1_SHIFT 3
+PALMAS_PRIMARY_SECONDARY_PAD1_GPIO_2_SHIFT 5
+PALMAS_SMPS10_CTRL_MODE_SLEEP_SHIFT 4
+PALMAS_SMPS12_CTRL_MODE_SLEEP_SHIFT 2
+PANEL_LIGHT_OFF_DELAY_SHIFT 0
+PANEL_LIGHT_ON_DELAY_SHIFT 0
+PANEL_POWER_CYCLE_DELAY_SHIFT 0
+PANEL_POWER_DOWN_DELAY_SHIFT 16
+PANEL_POWER_UP_DELAY_SHIFT 16
+PART_BITS 4
+PARTN_BITS 6
+PASS_ACCEPT_REQ 4
+PASS_ESTAB 5
+PBC_PORT_SEL_LSB 26
+PBC_VL_NUM_LSB 27
+PCAP_ADC_ADA1_SHIFT 4
+PCAP_ADC_ADA2_SHIFT 7
+PCAP_ADC_TS_M_SHIFT 17
+PCAP_IRQ_ADCDONE2 20
+PCAP_REGISTER_ADDRESS_SHIFT 26
+PCCRX_SHIFT 8
+PCCRXTO_SHIFT 16
+PCCTX_SHIFT 8
+PCCTXTO_SHIFT 16
+PCH_BIT_SJW_SHIFT 6
+PCH_BIT_TSEG1_SHIFT 8
+PCH_BIT_TSEG2_SHIFT 12
+PCH_GBE_MIIM_PHY_ADDR_SHIFT 21
+PCH_GBE_MIIM_REG_ADDR_SHIFT 16
+PCH_GBE_PCI_BAR 1
+PCI_BASE2_RANGE 16
+_PCIB_op_pending 1
+PCI_ENABLE 5
+PCI_INTERRUPT_ENABLE 31
+PCI_INTERRUPT_ENABLE 8
+PCI_LTR_SCALE_SHIFT 10
+PCI_MASTER_ABORT_RECEIVED_INTERRUPT_ENABLE 20
+PCI_NUM_RESOURCES 17
+PCI_RETRY_ABORT_INTERRUPT_ENABLE 17
+PCI_TARGET_ABORT_RECEIVED_INTERRUPT_ENABLE 19
+PCM_MULTICH 4
+PCM_SPDIF 3
+PCS_FW_HEARTB_WIDTH 8
+PCS_UC_STATUS_LBN 0
+PCS_UC_STATUS_WIDTH 8
+PCTL_LINK_OFFS 16
+PCXHR_DSP_RESET_GPO_OFFSET 5
+PCXHR_FIRMWARE_DSP_EPRM_INDEX 2
+PCXHR_FIRMWARE_DSP_MAIN_INDEX 4
+PCXHR_FIRMWARE_XLX_COM_INDEX 1
+PCXHR_PIPE_STATE_CAPTURE_OFFSET 12
+PCXHR_SELMIC_PREAMPLI_OFFSET 2
+PD_BITS 4
+PDC_DIMM_BAR 4
+PDC_MMIO_BAR 3
+PDC_MMIO_BAR 5
+PEER_ABORT 12
+PEER_CLOSE 13
+PERSISTENT_GNT_ACTIVE 0
+PERSISTENT_GNT_WAS_ACTIVE 1
+PFIT_HORIZ_SCALE_SHIFT 4
+PFIT_PIPE_SHIFT 29
+PFIT_VERT_SCALE_SHIFT 20
+PF_VECTOR 14
+PG_active 6
+PG_CLEAN 2
+PG_COMMIT_TO_DS 5
+PG_dirty 4
+PG_error 1
+PG_LEVEL_1G 3
+PG_LEVEL_2M 2
+PG_locked 0
+PG_lru 5
+PG_MAPPED 1
+PG_mlocked 21
+PG_private 11
+PG_reclaim 18
+PG_referenced 2
+PG_reserved 10
+PG_swapbacked 19
+PG_uptodate 3
+PG_writeback 13
+PHYAD_SHIFT 8
+PHY_CTX_SHIFT 6
+PHYID1_OUI_SHFT 6
+PHY_TXC1_MODE_SHIFT 3
+PHY_TXC_ANT_SHIFT 6
+PIC_CASCADE_IR 2
+PI_CONS_V_XMT_INDEX 16
+PI_IO_CMP_V_SLOT 4
+PIIX_SIDPR_BAR 5
+PIPE_A 0
+PIPE_B 1
+PIPE_C 2
+PI_RCV_DESCR_V_SEG_LEN 23
+PI_XMT_DESCR_V_SEG_LEN 16
+PKT_CLASSIFICATION_USER_PRIORITY_VALID 0
+PKT_CLASSIFICATION_VLANID_VALID 1
+PKTSShift 11
+PLAYBACK_URB_COMPLETED 7
+PLLCLK_IN_SHIFT 4
+PLLD_LSB_SHIFT 2
+PLLD_MSB_SHIFT 0
+PLLJ_SHIFT 2
+PLL_LOAD_PULSE_PHASE_SHIFT 9
+PLLQ_SHIFT 3
+PLL_REF_SDVO_HDMI_MULTIPLIER_SHIFT 9
+PLL_REGM_F_SHIFT 0
+PLL_REGM_SHIFT 9
+PLL_REGN_SHIFT 1
+PLLR_SHIFT 0
+PLL_SD_SHIFT 9
+PLL_SELFREQDCO_SHIFT 1
+PM8607_IRQ_CC 5
+PM8607_IRQ_ONKEY 0
+PM8607_IRQ_RTC 4
+PMA_PMD_EXT_SSR_LBN 15
+PMA_PMD_FTX_STATIC_LBN 13
+PMA_PMD_LNPGA_POWERDOWN_LBN 8
+PMA_PMD_RXIN_SEL_LBN 6
+PMU_XTALFREQ_REG_MEASURE_SHIFT 31
+PORT_BASED_PRIORITY_SHIFT 3
+PORT_DEVSLP_DETO_OFFSET 2
+PORT_DEVSLP_DITO_OFFSET 15
+PORT_DEVSLP_MDAT_OFFSET 10
+PORT_FBS_DEV_OFFSET 8
+PORT_IRQ_RAW_SHIFT 16
+PPOD_IDX_SHIFT 6
+PPOD_SIZE_SHIFT 6
+PP_REFERENCE_DIVIDER_SHIFT 8
+PPR_STATUS_SHIFT 12
+PRB_MX_ADDR_MOD_SEL_SHIFT 9
+PRISM2_INFO_PENDING_LINKSTATUS 0
+PRISM2_INFO_PENDING_SCANRESULTS 1
+PRIVATE_DTMF_TONE 5
+PRIVATE_ECHO_CANCELLER 0
+PRIVATE_FAX_NONSTANDARD 8
+PRIVATE_FAX_PAPER_FORMATS 6
+PRIVATE_FAX_SUB_SEP_PWD 3
+PRIVATE_PIAFS 29
+PRIVATE_RTP 1
+PRIVATE_T38 2
+PRIVATE_V18 4
+PRIVATE_VOWN 7
+PROFILE_GRPSHIFT 3
+PSS_SHIFT 12
+PSZ_CIF 4
+PSZ_QCIF 2
+PSZ_QSIF 1
+PSZ_SIF 3
+PSZ_SQCIF 0
+PSZ_VGA 5
+PTE_FILE_MAX_BITS 46
+PT_OPT_FLAG_SHIFT 3
+PTP_STNSUR_ADDSUB_SHIFT 31
+PVR2_CVAL_INPUT_COMPOSITE 2
+PVR2_CVAL_INPUT_DTV 1
+PVR2_CVAL_INPUT_RADIO 4
+PVR2_CVAL_INPUT_SVIDEO 3
+PVR2_CVAL_INPUT_TV 0
+PWIDX_ADC 0
+PWIDX_CLFE 2
+PWIDX_FRONT 1
+PWIDX_MIC 4
+PWIDX_SURR 3
+PWMF_REQUESTED 1
+PWM_NCHAN 4
+QDF_CHANGE 1
+QDF_LOCKED 2
+QDF_REFRESH 3
+__QDISC_STATE_DEACTIVATED 1
+QFQ_MAX_WSHIFT 10
+QFQ_MTU_SHIFT 16
+QIB_7220_RcvCtrl_RcvQPMapEnable_LSB 38
+QIB_7220_SendDmaLenGen_Generation_MSB 18
+QIB_7322_SendDmaLenGen_0_Generation_MSB 18
+QIB_AETH_CREDIT_SHIFT 24
+QIB_CTXT_MASTER_UNINIT 4
+QIB_CTXT_WAITING_RCV 2
+QIB_CTXT_WAITING_URG 5
+QIB_EEPROM_WEN_NUM 14
+_QIB_EVENT_DISARM_BUFS_BIT 0
+QIB_R_REWIND_SGE 1
+QIB_R_WRID_VALID 0
+QIF_DQBLKSIZE_BITS 10
+QL_ADAPTER_UP 0
+QL_ADAPTER_UP 7
+QL_ALLMULTI 6
+QL_ALLOC_BUFQS_DONE 11
+QL_ALLOC_REQ_RSP_Q_DONE 10
+QL_ALLOC_SMALL_BUF_DONE 12
+QL_ASIC_RECOVERY 14
+QLC_83XX_IDC_COMP_AEN 3
+QLC_83XX_MBX_READY 2
+QLC_83XX_MODULE_LOADED 1
+QL_CAM_RT_SET 8
+QLC_BC_CFREE 1
+QLC_BC_FLR 2
+QLC_BC_MSG 0
+QLC_BC_VF_FLR 4
+QLC_BC_VF_SOFT_FLR 5
+QLC_BC_VF_STATE 3
+__QLCNIC_AER 5
+__QLCNIC_DEV_UP 1
+__QLCNIC_DIAG_RES_ALLOC 6
+__QLCNIC_FW_ATTACHED 0
+__QLCNIC_RESETTING 2
+__QLCNIC_SRIOV_CAPABLE 11
+__QLCNIC_SRIOV_ENABLE 10
+__QLCNIC_START_FW 4
+QL_DMA64 4
+QL_EEH_FATAL 12
+QL_FRC_COREDUMP 11
+QL_LB_LINK_UP 10
+QL_LINK_MASTER 6
+QL_LINK_OPTICAL 13
+QL_MSI_ENABLED 14
+QL_MSI_ENABLED 2
+QL_MSIX_ENABLED 3
+QLOGIC_IB_HWE_PCIEMEMPARITYERR_SHIFT 0
+QLOGIC_IB_IBCC_LINKCMD_SHIFT 18
+QLOGIC_IB_IBCC_LINKINITCMD_SHIFT 16
+QLOGIC_IB_I_RCVAVAIL_SHIFT 0
+QLOGIC_IB_I_RCVAVAIL_SHIFT 12
+QLOGIC_IB_I_RCVURG_SHIFT 0
+QLOGIC_IB_I_RCVURG_SHIFT 32
+QLOGIC_IB_R_INTRAVAIL_SHIFT 16
+QLOGIC_IB_R_TAILUPD_SHIFT 31
+QLOGIC_IB_SENDPIOAVAIL_BUSY_SHIFT 1
+QL_PORT_CFG 7
+QL_PROMISCUOUS 5
+QL_RESET_ACTIVE 2
+QL_RESET_DONE 1
+QL_RESET_PER_SCSI 4
+QL_RESET_START 3
+QL_SELFTEST 9
+QP_REFERENCED 5
+QSFP_GPIO_PORT2_SHIFT 5
+QS_MMIO_BAR 4
+QUEUE_FLAG_BIDI 7
+QUEUE_FLAG_DISCARD 14
+QUEUE_FLAG_NONROT 12
+QUEUE_PAUSED 1
+QUN 4
+QUOTABLOCK_BITS 10
+R10BIO_Degraded 4
+R10BIO_IsRecover 2
+R10BIO_IsReshape 3
+R10BIO_IsSync 1
+R10BIO_MadeGood 6
+R10BIO_Previous 8
+R10BIO_ReadError 5
+R10BIO_Uptodate 0
+R10BIO_WriteError 7
+R1BIO_BehindIO 3
+R1BIO_Degraded 2
+R1BIO_IsSync 1
+R1BIO_MadeGood 7
+R1BIO_ReadError 4
+R1BIO_Uptodate 0
+R1BIO_WriteError 8
+R300_MC_DISP0R_INIT_LAT_SHIFT 8
+R300_MC_DISP1R_INIT_LAT_SHIFT 12
+R300_MSBD0_X_SHIFT 28
+R300_MSBD0_Y_SHIFT 24
+R300_MSBD1_SHIFT 24
+R300_MS_X0_SHIFT 0
+R300_MS_X1_SHIFT 8
+R300_MS_X2_SHIFT 16
+R300_MS_X3_SHIFT 0
+R300_MS_X4_SHIFT 8
+R300_MS_X5_SHIFT 16
+R300_MS_Y0_SHIFT 4
+R300_MS_Y1_SHIFT 12
+R300_MS_Y2_SHIFT 20
+R300_MS_Y3_SHIFT 4
+R300_MS_Y4_SHIFT 12
+R300_MS_Y5_SHIFT 20
+R592_TPC_EXEC_LEN_SHIFT 16
+R592_TPC_EXEC_TPC_SHIFT 28
+R5_Discard 23
+R5_DOUBLE_LOCKED 2
+R5_Expanded 11
+R5_Insync 4
+R5_LOCKED 1
+R5_MadeGood 18
+R5_MadeGoodRepl 20
+R5_NeedReplace 21
+R5_Overlap 7
+R5_OVERWRITE 3
+R5_ReadError 9
+R5_ReadNoMerge 8
+R5_ReadRepl 19
+R5_ReWrite 10
+R5_SyncIO 16
+R5_UPTODATE 0
+R5_Wantcompute 12
+R5_Wantdrain 14
+R5_Wantfill 13
+R5_WantFUA 15
+R5_Wantread 5
+R5_WantReplace 22
+R5_Wantwrite 6
+R5_WriteError 17
+RADEON_ACTIVE_HILO_LAT_SHIFT 13
+RADEON_BLANK_LEVEL_SHIFT 8
+RADEON_CRT1_CRTC_SHIFT 9
+RADEON_CRT2_CRTC_SHIFT 12
+RADEON_CRTC2_PIX_WIDTH_SHIFT 8
+RADEON_CRTC_H_DISP_SHIFT 16
+RADEON_CRTC_H_SYNC_STRT_CHAR_SHIFT 3
+RADEON_CRTC_H_TOTAL_SHIFT 0
+RADEON_CRTC_V_DISP_SHIFT 16
+RADEON_CRTC_V_SYNC_STRT_SHIFT 0
+RADEON_CRTC_V_TOTAL_SHIFT 0
+RADEON_CY_FILT_BLEND_SHIFT 28
+RADEON_DAC_FORCE_DATA_SHIFT 8
+RADEON_DFP1_CRTC_SHIFT 11
+RADEON_DFP2_CRTC_SHIFT 14
+RADEON_DPM_AUTO_THROTTLE_SRC_EXTERNAL 1
+RADEON_DPM_AUTO_THROTTLE_SRC_THERMAL 0
+RADEON_FIFORAM_FFMACRO_READ_MARGIN_SHIFT 20
+RADEON_GPU_PAGE_SHIFT 12
+RADEON_GRPH_START_REQ_SHIFT 0
+RADEON_GRPH_STOP_REQ_SHIFT 8
+RADEON_H_INC_SHIFT 0
+RADEON_I2C_PRESCALE_SHIFT 16
+RADEON_LCD1_CRTC_SHIFT 8
+RADEON_LVDS_BL_MOD_LEVEL_SHIFT 8
+RADEON_LVDS_PWRSEQ_DELAY1_SHIFT 16
+RADEON_LVDS_PWRSEQ_DELAY2_SHIFT 20
+RADEON_NUM_VERTICES_SHIFT 16
+RADEON_PCIE_LC_LINK_WIDTH_RD_SHIFT 4
+RADEON_PCIE_LC_LINK_WIDTH_SHIFT 0
+RADEON_SET_UP_LEVEL_SHIFT 16
+RADEON_SPLL_FB_DIV_SHIFT 16
+RADEON_SPLL_PVG_SHIFT 11
+RADEON_TV1_CRTC_SHIFT 10
+RADEON_TV_DAC_BGADJ_SHIFT 16
+RADEON_TV_DAC_DACADJ_SHIFT 20
+RADEON_TV_FORCE_DAC_DATA_SHIFT 16
+RADEON_TV_M0HI_SHIFT 18
+RADEON_TV_N0HI_SHIFT 21
+RADEON_TV_N0LO_SHIFT 8
+RADEON_TVPCP_SHIFT 8
+RADEON_TVPDC_SHIFT 14
+RADEON_TV_P_SHIFT 24
+RADEON_TVPVG_SHIFT 11
+RADEON_TV_V_BURST_LEVEL_SHIFT 16
+RADEON_UV_OUTPUT_POST_SCALE_SHIFT 24
+RADEON_UVRAM_READ_MARGIN_SHIFT 16
+RADEON_Y_DEL_W_SIG_SHIFT 26
+RADIO_2055_NBRSSI_VCM_I_SHIFT 0
+RADIO_2055_NBRSSI_VCM_Q_SHIFT 0
+RADIO_2055_WBRSSI_VCM_IQ_SHIFT 2
+RADIO_2056_RSSI_VCM_SHIFT 2
+RAMROD_CONT 6
+RAMROD_DRV_CLR_ONLY 3
+RAMROD_EXEC 5
+RAMROD_RX 1
+RAMROD_TX 0
+RATELIMIT_CALC_SHIFT 10
+RATE_MCS_ANT_POS 14
+RATIO_SCALE_LOG 8
+RB_BUFFERS_DISABLED_BIT 1
+RBD_DEV_FLAG_EXISTS 0
+RBIO_CACHE_READY_BIT 3
+RBIO_RMW_LOCKED_BIT 1
+RBP_IDX_OFFSET 6
+RBR_CFIG_B_BLKSIZE_SHIFT 24
+RBR_CFIG_B_BUFSZ0_SHIFT 0
+RBR_CFIG_B_BUFSZ1_SHIFT 8
+RBR_CFIG_B_BUFSZ2_SHIFT 16
+RBSShift 0
+RC_MODEL_TOTAL_BITS 11
+RC_PID_ARITH_SHIFT 8
+RCR_ENTRY_PKT_BUF_ADDR_SHIFT 6
+RCR_FIFO_OFFSET 13
+RC_SHIFT_BITS 8
+RC_TOP_BITS 24
+RCV_LAZY_FC_SHIFT 24
+RDC_RED_PARA_THRE_SHIFT 4
+RDC_RED_PARA_THRE_SYN_SHIFT 20
+RDC_RED_PARA_WIN_SHIFT 0
+RDC_RED_PARA_WIN_SYN_SHIFT 16
+RDMACTXT_F_FAST_UNREG 1
+RDMACTXT_F_LAST_CTXT 2
+RDMAXPRT_CONN_PENDING 3
+RDMAXPRT_RQ_PENDING 1
+RDMAXPRT_SQ_PENDING 2
+RDS_LL_SEND_FULL 0
+RDS_MSG_ACK_REQUIRED 4
+RDS_MSG_HAS_ACK_SEQ 3
+RDS_MSG_MAPPED 6
+RDS_MSG_ON_CONN 2
+RDS_MSG_ON_SOCK 1
+RDS_MSG_PAGEVEC 7
+RDS_MSG_RETRANSMITTED 5
+RDS_RECONNECT_PENDING 1
+READ_LOC_AMP_ASSOC 1
+READ_LOC_AMP_ASSOC_FINAL 2
+READ_LOC_AMP_INFO 0
+RECOVERY_CLEANUP 8
+RED_LED 1
+RED_LED 2
+REDUCE_REPORTING 3
+REGISTER_FC4_NEEDED 9
+REGISTER_FDMI_NEEDED 12
+reg_ofdm_rst_pos 1
+REISERFS_3_5 0
+REISERFS_3_6 1
+REISERFS_ATTRS 14
+REISERFS_BARRIER_FLUSH 19
+REISERFS_BARRIER_NONE 18
+REISERFS_CONVERT 3
+REISERFS_DATA_LOG 8
+REISERFS_DATA_ORDERED 9
+REISERFS_DATA_WRITEBACK 10
+REISERFS_ERROR_CONTINUE 22
+REISERFS_ERROR_PANIC 20
+REISERFS_ERROR_RO 21
+REISERFS_EXPOSE_PRIVROOT 17
+REISERFS_GRPQUOTA 24
+REISERFS_HASHED_RELOCATION 13
+REISERFS_LARGETAIL 0
+REISERFS_NO_BORDER 11
+REISERFS_NO_UNHASHED_RELOCATION 12
+REISERFS_OLD_FORMAT 2
+REISERFS_OPT_ALLOWEMPTY 31
+REISERFS_POSIXACL 16
+REISERFS_SMALLTAIL 1
+REISERFS_TEST4 28
+REISERFS_UNSUPPORTED_OPT 29
+REISERFS_USRQUOTA 23
+REISERFS_XATTRS_USER 15
+RELEASE_RESOURCES 2
+REL_HWHEEL 6
+RELOGIN_NEEDED 8
+REL_WHEEL 8
+REL_X 0
+REL_Y 1
+REMOTE_WAKEUP_SUPPORT 5
+Replacement 10
+REPLAYONLY 2
+RESET_MARKER_NEEDED 0
+RESIZE_PENDING 16
+RESOLVE_CONFLICTS 1
+RESUME_INTERRUPT 1
+RESUME_INTERRUPT 5
+RESYNC_AFTER_NEG 15
+RETRY_LIMIT_LONG_SHIFT 0
+RETRY_LIMIT_SHORT_SHIFT 8
+RFCOMM_AUTH_ACCEPT 6
+RFCOMM_AUTH_PENDING 5
+RFCOMM_AUTH_REJECT 7
+RFCOMM_DEFER_SETUP 8
+RFCOMM_ENC_DROP 9
+RFCOMM_HANGUP_NOW 2
+RFCOMM_MSC_PENDING 3
+RFCOMM_RELEASE_ONHUP 1
+RFCOMM_REUSE_DLC 0
+RFCOMM_SEC_PENDING 4
+RFCOMM_TIMED_OUT 2
+RFCOMM_TTY_ATTACHED 3
+RFCOMM_TX_THROTTLED 1
+RH_OFS 0
+RISC_RESET_STATUS_SHIFT 20
+RISC_SET_STATUS_SHIFT 16
+ROAM_TBL_PEND 6
+ROOT_PORT_RESET_INTERRUPT 4
+ROOT_PORT_RESET_INTERRUPT 6
+ROOT_PORT_RESET_INTERRUPT_ENABLE 4
+ROOT_PORT_RESET_INTERRUPT_ENABLE 6
+R_OPCODE_LSB 3
+RPCAUTH_CRED_HASHED 2
+RPCAUTH_CRED_NEGATIVE 3
+RPCAUTH_CRED_NEW 0
+RPCAUTH_CRED_UPTODATE 1
+RPC_BC_PA_IN_USE 1
+RPC_TASK_ACTIVE 2
+Rpending 2
+RSCN_UPDATE 7
+RSCONFIG_MAX_DMA_SIZE_SHIFT 24
+RSCONFIG_STREAM_NUM_SHIFT 16
+RS_OFS 16
+RSPEC_BW_SHIFT 8
+RSPEC_STC_SHIFT 20
+RSPEC_STF_SHIFT 11
+RST_OFS 8
+RT5640_DMIC_CLK_SFT 5
+RT5640_I2S_BCLK_MS1_SFT 15
+RT5640_I2S_BCLK_MS2_SFT 11
+RT5640_I2S_PD1_SFT 12
+RT5640_I2S_PD2_SFT 8
+RT5640_PLL_M_BP_SFT 11
+RT5640_PLL_M_SFT 12
+RT5640_PLL_N_SFT 7
+RTC_RBUDR_SHIFT 4
+RTC_UDR_SHIFT 0
+R_TDI_LSB 2
+RT_IDX_IDX_SHIFT 8
+RT_IDX_TYPE_SHIFT 16
+RTL8150_HW_CRC 0
+RTL8150_UNPLUG 2
+RTL8152_SET_RX_MODE 2
+RTL8152_UNPLUG 0
+RTL_FLAG_TASK_ENABLED 0
+RTL_FLAG_TASK_RESET_PENDING 2
+RTL_STATUS_INTERFACE_START 0
+RTSCTS_SH_CTS_MOD_TYPE 24
+RTSCTS_SH_CTS_PMB_TYPE 25
+RTSCTS_SH_CTS_RATE 16
+RTSCTS_SH_RTS_MOD_TYPE 8
+RTSCTS_SH_RTS_PMB_TYPE 9
+RTSCTS_SH_RTS_RATE 0
+RTS_LEVEL_SHIFT_BITS 2
+RXBSIDH_SHIFT 3
+RxBufferLenShift 16
+RxBurstSizeShift 0
+RxComplThreshShift 0
+RXD_FLAGS_SHIFT 0
+RXD_LEN_SHIFT 0
+RX_DMA_CTL_STAT_PKTREAD_SHIFT 0
+RX_DMA_CTL_STAT_PTRREAD_SHIFT 16
+RXD_OPAQUE_INDEX_SHIFT 0
+RxDRNT_shift 1
+RxEarlyIntThreshShift 12
+RX_FLAG_STBC_SHIFT 26
+RX_FLOW_ON_BIT 2
+RxHighPrioThreshShift 8
+RX_LOG_PAGE_VLD_FUNC_SHIFT 2
+RxMinDescrThreshShift 0
+RxMXDMA_shift 20
+RXQ_CTRL_RFD_BURST_NUM_SHIFT 0
+RXQ_CTRL_RFD_PREF_MIN_IPG_SHIFT 16
+RXQ_CTRL_RRD_BURST_THRESH_SHIFT 8
+RXQ_JMBO_LKAH_SHIFT 11
+RXQ_JMBOSZ_TH_SHIFT 0
+RXQ_RFD_BURST_NUM_SHIFT 20
+RXQ_RRD_PAUSE_TH_HI_SHIFT 0
+RXQ_RRD_PAUSE_TH_LO_SHIFT 16
+RXQ_RRD_TIMER_SHIFT 16
+RXQ_RXF_PAUSE_TH_HI_SHIFT 0
+RXQ_RXF_PAUSE_TH_HI_SHIFT 16
+RXQ_RXF_PAUSE_TH_LO_SHIFT 0
+RXQ_RXF_PAUSE_TH_LO_SHIFT 16
+RXRPC_CALL_ABORT 7
+RXRPC_CALL_ACK_FINAL 4
+RXRPC_CALL_CONN_ABORT 8
+RXRPC_CALL_DRAIN_RX_OOS 11
+RXRPC_CALL_LIFE_TIMER 12
+RXRPC_CALL_POST_ACCEPT 15
+RXRPC_CALL_RCVD_ABORT 2
+RXRPC_CALL_RCVD_ACKALL 0
+RXRPC_CALL_RCVD_BUSY 1
+RXRPC_CALL_RCVD_ERROR 3
+RXRPC_CALL_RCVD_LAST 2
+RXRPC_CALL_RESEND 10
+RXRPC_CALL_RUN_RTIMER 3
+RXRPC_CALL_TERMINAL_MSG 1
+RXRPC_CALL_TX_SOFT_ACK 4
+RXRPC_CONN_CHALLENGE 0
+RXRPC_SOCK_EXCLUSIVE_CONN 1
+RX_URB_FAIL 1
+RX_URB_FAIL 3
+__S2IO_STATE_CARD_UP 1
+S5M8767_ENCTRL_SHIFT 6
+SA2400_REG4_FIRDAC_SHIFT 7
+S_ALIVE 6
+SAR_TBD_VCI_SHIFT 4
+SAR_TBD_VPI_SHIFT 20
+SAS_DEV_EH_PENDING 3
+SAS_DEV_FOUND 1
+SAS_DEV_GONE 0
+SAS_HA_ATA_EH_ACTIVE 2
+SAS_HA_DRAINING 1
+SAS_HA_FROZEN 3
+SAS_HA_REGISTERED 0
+SATA_PMP_CTRL_PORT 15
+SAVAGE_BD_BPP_SHIFT 16
+SAVAGE_BD_TILE_SHIFT 24
+SB_M_DIVIDER_SHIFT 24
+SB_N_CB_TUNE_SHIFT 24
+SB_N_DIVIDER_SHIFT 26
+SB_N_VCO_SEL_SHIFT 30
+SBSDIO_FUNC1_SLEEPCSR_KSO_SHIFT 0
+SBSDIO_FUNC1_WCTRL_HTWAIT_SHIFT 1
+SCAN_ABORTED 4
+SCAN_COMPLETED 3
+S_CHANNEL_SWITCH_PENDING 18
+SCHED_SCANNING 12
+SC_OP_ANI_RUN 2
+SC_OP_BEACONS 1
+SC_OP_HW_RESET 4
+SC_OP_INVALID 0
+SC_OP_PRIM_STA_VIF 3
+SC_OP_SCANNING 5
+SC_RA_RAM_BE_OPT_ENA_CP_OPT 1
+SCR_PENDING 21
+SCU_COMPLETION_TL_STATUS_SHIFT 22
+SCU_CONTEXT_COMMAND_LOGICAL_PORT_SHIFT 12
+SCU_CONTEXT_COMMAND_PROTOCOL_ENGINE_GROUP_SHIFT 16
+SCU_EVENT_SPECIFIC_CODE_SHIFT 18
+SCU_RAM_AGC_KI_IF__B 8
+SCU_RAM_AGC_KI_RED_IAGC_RED__B 4
+SCU_RAM_AGC_KI_RED_RAGC_RED__B 2
+SCU_RAM_AGC_KI_RF__B 4
+SD1_DVM_EN 6
+SD1_DVM_SHIFT 5
+SDATA_STATE_OFFCHANNEL 1
+SDATA_STATE_OFFCHANNEL_BEACON_STOPPED 2
+SDATA_STATE_RUNNING 0
+SDCLK_DELAY_SHIFT 10
+SDCLK_DELAY_SHIFT 9
+SDCLK_SEL_SHIFT 8
+SD_CTL_STREAM_TAG_SHIFT 20
+SDEV_EVT_MEDIA_CHANGE 1
+SDF_JOURNAL_CHECKED 0
+SDF_JOURNAL_LIVE 1
+SDF_NOBARRIERS 3
+SDF_NOJOURNALID 6
+SDF_NORECOVERY 4
+SDF_RORECOVERY 7
+SDF_SKIP_DLM_UNLOCK 8
+SDHCI_CLOCK_BASE_SHIFT 8
+SDHCI_DIVIDER_HI_SHIFT 6
+SDHCI_DIVIDER_SHIFT 8
+SDHCI_MAX_CURRENT_180_SHIFT 16
+SDHCI_MAX_CURRENT_300_SHIFT 8
+SDHCI_MAX_CURRENT_330_SHIFT 0
+SDHCI_TIMEOUT_CLK_SHIFT 0
+SDIO_DRIVE_DTSx_SHIFT 4
+SDIO_FUNC_1 1
+SDIO_FUNC_2 2
+SDMA_DESC_COUNT_LSB 16
+SDMA_DESC_GEN_LSB 30
+SDM_OP_GEN_AGG_VECT_IDX_VALID_SHIFT 16
+SDPCM_CHANNEL_SHIFT 8
+SDPCM_DOFFSET_SHIFT 24
+SDVO_MULTIPLIER_SHIFT_HIRES 4
+SDVO_PORT_MULTIPLY_SHIFT 23
+SECTION_NID_SHIFT 2
+SECTOR_BITS 9
+SECTOR_SHIFT 9
+SELF_POWERED_STATUS 0
+SELF_POWERED_USB_DEVICE 6
+SEM_FLASH_SHIFT 8
+SEM_ICB_SHIFT 4
+SEM_MAC_ADDR_SHIFT 6
+SEM_PROBE_SHIFT 10
+SEM_PROC_REG_SHIFT 14
+SEM_RT_IDX_SHIFT 12
+SEM_XGMAC0_SHIFT 0
+SEM_XGMAC1_SHIFT 2
+SEND_PING 2
+SEP_FASTCALL_WRITE_DONE_OFFSET 0
+SEP_LEGACY_MMAP_DONE_OFFSET 1
+SEP_LEGACY_POLL_DONE_OFFSET 3
+SEP_LEGACY_SENDMSG_DONE_OFFSET 2
+SEQNUM_SHIFT 4
+SERDES_CHANS 4
+SERPORT_ACTIVE 2
+SERPORT_DEAD 3
+SET_ADDRESS 13
+SET_ENDPOINT_HALT 8
+SET_NAK_OUT_PACKETS 15
+SET_NAK_OUT_PACKETS_MODE 10
+SET_TEST_MODE 16
+SETUP_PACKET_INTERRUPT 5
+SETUP_PACKET_INTERRUPT 7
+SETUP_PACKET_INTERRUPT_ENABLE 5
+SETUP_PACKET_INTERRUPT_ENABLE 7
+SE_VAP_CNTL__VF_MAX_VTX_NUM__SHIFT 18
+S_EXIT_PENDING 10
+SFQ_ALLOT_SHIFT 3
+S_FW_ERROR 17
+S_GEO_CONFIGURED 9
+SGTL5000_ANA_GND_SHIFT 4
+SGTL5000_BIAS_R_SHIFT 8
+SGTL5000_DAC_SEL_SHIFT 4
+SGTL5000_DAC_VOL_LEFT_SHIFT 0
+SGTL5000_DAC_VOL_RIGHT_SHIFT 8
+SGTL5000_I2S_DLEN_SHIFT 4
+SGTL5000_I2S_SCLKFREQ_SHIFT 8
+SGTL5000_LINE_OUT_CURRENT_SHIFT 8
+SGTL5000_LINE_OUT_GND_SHIFT 0
+SGTL5000_MCLK_FREQ_SHIFT 0
+SGTL5000_PLL_FRAC_DIV_SHIFT 0
+SGTL5000_PLL_INT_DIV_SHIFT 11
+SGTL5000_RATE_MODE_SHIFT 4
+SGTL5000_SYS_FS_SHIFT 2
+SGTL5000_VDDC_MAN_ASSN_SHIFT 6
+SHADOW_REG_SHIFT 20
+SHARED_HW_CFG_LED_MODE_SHIFT 16
+S_HCMD_ACTIVE 0
+SHIFT 11
+SHIFT_2 2
+SHIFT 8
+SHMEM_EEE_ADV_STATUS_SHIFT 20
+SHMEM_EEE_LP_ADV_STATUS_SHIFT 24
+SHMEM_EEE_SUPPORTED_SHIFT 16
+SHORT_PACKET_OUT_DONE_INTERRUPT 6
+SHORT_PACKET_TRANSFERRED_INTERRUPT 4
+SHORT_PACKET_TRANSFERRED_INTERRUPT 5
+SHORT_PACKET_TRANSFERRED_INTERRUPT_ENABLE 5
+SHUTDOWN_MERGE 1
+SI476X_DIGITAL_IO_SAMPLE_SIZE_SHIFT 8
+SI476X_DIGITAL_IO_SLOT_SIZE_SHIFT 11
+SI5351_OUTPUT_CLK_DIV_SHIFT 4
+SIDL_EXIDE_SHIFT 3
+SIDL_SID_SHIFT 5
+SIGNAL_ASENDER 3
+SIL164_CONTROL1_DESKEW_INCR_SHIFT 5
+SIL164_CONTROL2_FILTER_SETTING_SHIFT 1
+SIL164_DUALLINK_SKEW_SHIFT 5
+SIL24_HOST_BAR 0
+SIL24_PORT_BAR 2
+SIL680_MMIO_BAR 5
+SIL_MMIO_BAR 5
+S_INIT 5
+SIO_HI_RA_RAM_PAR_3_CFG_DBL_SCL__B 7
+SIO_PDR_MCLK_CFG_DRIVE__B 3
+SIO_PDR_MD0_CFG_DRIVE__B 3
+SIS_MM_ALIGN_SHIFT 0
+SIS_SCR_PCI_BAR 5
+SKB_DATAREF_SHIFT 16
+SK_F_HW_ERR 8
+SK_F_IPV6 5
+SK_F_OFFLD_COMPLETE 1
+SK_F_PG_OFFLD_COMPLETE 3
+SLF_ERROR 1
+SLF_ERROR 2
+SLF_ESCAPE 1
+SLF_INUSE 0
+SLF_KEEPTEST 3
+SLF_OUTWAIT 4
+SLICE_BITS 4
+SMB_DATA_VERSION_SHIFT 16
+SMBINTF_HWADDR_SHIFT 8
+SMBINTF_HWDATW_SHIFT 16
+SMC_NISLANDS_SPLL_DIV_TABLE_CLKS_SHIFT 20
+SMC_NISLANDS_SPLL_DIV_TABLE_CLKV_SHIFT 0
+SMC_NISLANDS_SPLL_DIV_TABLE_FBDIV_SHIFT 0
+SMC_NISLANDS_SPLL_DIV_TABLE_PDIV_SHIFT 25
+SMC_SISLANDS_SCALE_R 12
+SMC_SISLANDS_SPLL_DIV_TABLE_CLKS_SHIFT 20
+SMC_SISLANDS_SPLL_DIV_TABLE_CLKV_SHIFT 0
+SMC_SISLANDS_SPLL_DIV_TABLE_FBDIV_SHIFT 0
+SMC_SISLANDS_SPLL_DIV_TABLE_PDIV_SHIFT 25
+SMI_DATA_SHIFT 16
+SMP_FLAG_CFM_PENDING 2
+SMP_FLAG_MITM_AUTH 3
+SMP_FLAG_TK_VALID 1
+SMPL_EN_SHIFT 7
+SMPLT_SHIFT 2
+SNDRV_PCM_HW_PARAM_RATE 11
+SNDRV_PCM_HW_PARAM_SAMPLE_BITS 8
+SNDRV_PCM_STREAM_CAPTURE 1
+SNDRV_PCM_STREAM_PLAYBACK 0
+SNDRV_TIMER_EVENT_CONTINUE 4
+SNDRV_TIMER_EVENT_MCONTINUE 14
+SNDRV_TIMER_EVENT_MPAUSE 15
+SNDRV_TIMER_EVENT_MRESUME 18
+SNDRV_TIMER_EVENT_MSTART 12
+SNDRV_TIMER_EVENT_MSTOP 13
+SNDRV_TIMER_EVENT_MSUSPEND 17
+SNDRV_TIMER_EVENT_PAUSE 5
+SNDRV_TIMER_EVENT_RESOLUTION 0
+SNDRV_TIMER_EVENT_RESUME 8
+SNDRV_TIMER_EVENT_START 2
+SNDRV_TIMER_EVENT_STOP 3
+SNDRV_TIMER_EVENT_SUSPEND 7
+SNDRV_TIMER_EVENT_TICK 1
+SOCK_ASYNC_NOSPACE 0
+SOCK_ASYNC_WAITDATA 1
+SOCK_EXTERNALLY_ALLOCATED 5
+SOCK_NOSPACE 2
+SOCK_PASSCRED 3
+SOCK_PASSSEC 4
+SOCK_TIMESTAMPING_RX_SOFTWARE 19
+SOF_DOWN_INTERRUPT 14
+SOF_INTERRUPT 0
+SOF_INTERRUPT 7
+SOFTACK_MSHIFT 15
+SOFTACK_PSHIFT 16
+SPCR_RFIC_FIELD 20
+SPCR_TFIC_FIELD 16
+SPE_HDR_CONN_TYPE_SHIFT 0
+SPE_HDR_FUNCTION_ID_SHIFT 8
+SPI_FLASH_CTRL_CLK_HI_SHIFT 22
+SPI_FLASH_CTRL_CLK_LO_SHIFT 20
+SPI_FLASH_CTRL_CS_HI_SHIFT 16
+SPI_FLASH_CTRL_CS_HOLD_SHIFT 18
+SPI_FLASH_CTRL_CS_SETUP_SHIFT 24
+SPI_FLASH_CTRL_INS_SHIFT 8
+SPI_FRF_OFFSET 4
+SPI_MODE_OFFSET 6
+SPI_REG_SHIFT 9
+SPI_SS_OFF 2
+SPI_SS_ON 1
+SPI_TERMINATE 3
+SPI_TMOD_OFFSET 8
+SPI_XCOMM_SETTINGS_LEN_OFFSET 10
+SPI_XFER 0
+S_PORT 1
+S_POWER_PMI 16
+S_READY 7
+S_RFKILL 3
+S_RXCOALESCESIZE 0
+SSB_CHIPCO_PMU_CTL_ILP_DIV_SHIFT 16
+SSB_CHIPCO_PMU_CTL_XTALFREQ_SHIFT 2
+SSB_FLASH_WCNT_1_SHIFT 8
+SSB_FLASH_WCNT_3_SHIFT 24
+SSB_IMCFGLO_REQTO_SHIFT 4
+SSB_PMU0_PLLCTL1_WILD_FMSK_SHIFT 8
+SSB_PMU0_PLLCTL1_WILD_IMSK_SHIFT 28
+SSB_PMU0_PLLCTL2_WILD_IMSKHI_SHIFT 0
+SSB_PMU1_PLLCTL0_P1DIV_SHIFT 20
+SSB_PMU1_PLLCTL0_P2DIV_SHIFT 24
+SSB_PMU1_PLLCTL2_NDIVINT_SHIFT 20
+SSB_PMU1_PLLCTL2_NDIVMODE_SHIFT 17
+SSB_PMU1_PLLCTL3_NDIVFRAC_SHIFT 0
+SSB_PMU1_PLLCTL5_CLKDRV_SHIFT 8
+SSB_PMURES_4325_CBUCK_BURST 1
+SSB_PMURES_4325_CLDO_CBUCK_BURST 3
+SSB_PMURES_4325_LNLDO2_PU 10
+SSB_PMURES_4328_BB_SWITCHER_PWM 1
+SSB_PMURES_4328_EXT_SWITCHER_PWM 0
+SSB_PMURES_4328_XTAL_EN 16
+SSB_PROG_WCNT_1_SHIFT 8
+SSB_PROG_WCNT_2_SHIFT 16
+SSB_PROG_WCNT_3_SHIFT 24
+S_SCAN_HW 15
+S_SCANNING 13
+SSM2518_CHAN_MAP_LEFT_SLOT_OFFSET 0
+SSM2518_CHAN_MAP_RIGHT_SLOT_OFFSET 4
+S_STATS 12
+STA32X_CONFA_IR_SHIFT 3
+STA32X_CONFA_MCS_SHIFT 0
+STA32X_CONFF_OCFG_SHIFT 0
+STA32X_CxCFG_OM_SHIFT 6
+STA_KEY_FLG_KEYID_POS 8
+STATE_SENT 10
+STATIC_MAC_FID_SHIFT 22
+STATIC_MAC_FWD_PORTS_SHIFT 16
+STAT_RDA 7
+STATS_UPDATE_PEND 8
+STATUS_ALIVE 2
+STATUS_CHANNEL_SWITCH_PENDING 11
+STATUS_CT_KILL 1
+STATUS_DEVICE_ENABLED 1
+STATUS_EXIT_PENDING 5
+STATUS_FW_ERROR 10
+STATUS_FW_ERROR 5
+STATUS_READY 3
+STATUS_RFKILL 4
+STATUS_RF_KILL_HW 0
+STATUS_SCAN_COMPLETE 12
+STATUS_SCAN_HW 9
+STATUS_SCANNING 7
+STATUS_SCAN_ROC_EXPIRED 14
+STATUS_STATISTICS 6
+STATUS_TPOWER_PMI 2
+STB6100_K_PSD2_SHIFT 2
+STB6100_VCO_ODIV_SHIFT 4
+S_TEMPERATURE 8
+STMPE_IRQ_TOUCH_DET 0
+STOP_TX 1
+STREAM_FMT_OFFSET 10
+STREAM_INDEP_HP 1
+STREAM_MULTI_OUT 0
+ST_REG_IN_PROGRESS 2
+ST_REG_PENDING 3
+STRIPE_BIOFILL_RUN 14
+STRIPE_BIT_DELAY 8
+STRIPE_COMPUTE_RUN 15
+STRIPE_DEGRADED 7
+STRIPE_DELAYED 6
+STRIPE_DISCARD 18
+STRIPE_EXPANDING 9
+STRIPE_EXPAND_READY 11
+STRIPE_EXPAND_SOURCE 10
+STRIPE_HANDLE 1
+STRIPE_INSYNC 4
+STRIPE_IO_STARTED 12
+STRIPE_OP_BIODRAIN 3
+STRIPE_OP_BIOFILL 0
+STRIPE_OP_CHECK 5
+STRIPE_OP_COMPUTE_BLK 1
+STRIPE_OP_PREXOR 2
+STRIPE_OP_RECONSTRUCT 4
+STRIPE_SYNCING 3
+STRIPE_SYNC_REQUESTED 2
+ST_TX_WAKEUP 2
+SUM_CHECK_P 0
+SUM_CHECK_Q 1
+SUNI_TPOP_APM_S_SHIFT 2
+SUSPEND_IO 8
+SUSPEND_REQUEST_CHANGE_INTERRUPT 2
+SUSPEND_REQUEST_CHANGE_INTERRUPT 4
+SUSPEND_REQUEST_CHANGE_INTERRUPT_ENABLE 2
+SUSPEND_REQUEST_CHANGE_INTERRUPT_ENABLE 4
+SUSPEND_REQUEST_INTERRUPT 3
+S_VLANEXTRACTIONENABLE 12
+SVM_EXITINFOSHIFT_TS_HAS_ERROR_CODE 44
+SVM_EXITINFOSHIFT_TS_REASON_IRET 36
+SVM_EXITINFOSHIFT_TS_REASON_JMP 38
+SVM_IOIO_SIZE_SHIFT 4
+SVM_SELECTOR_AVL_SHIFT 8
+SVM_SELECTOR_DB_SHIFT 10
+SVM_SELECTOR_DPL_SHIFT 5
+SVM_SELECTOR_G_SHIFT 11
+SVM_SELECTOR_L_SHIFT 9
+SVM_SELECTOR_P_SHIFT 7
+SVM_SELECTOR_S_SHIFT 4
+SVM_VM_CR_SVM_DISABLE 4
+SWDPIO__EXT_SHIFT 4
+SW_LID 0
+SW_TABLET_MODE 1
+SYCC_CD_SHIFT 16
+SYM_MEM_SHIFT 4
+SYSFS_NS_TYPE_SHIFT 8
+T3_CTRL_QP_SIZE_LOG2 8
+TABLE_SEL_SHIFT 2
+TA_READY_INPUT_ENABLE 6
+TBSShift 0
+TCAM_ASSOCDATA_OFFSET_SHIFT 2
+TCAM_V4KEY0_CLASS_CODE_SHIFT 3
+TCAM_V4KEY1_L2RDCNUM_SHIFT 59
+TCAM_V4KEY2_PROTO_SHIFT 32
+TCAM_V4KEY2_TOS_SHIFT 40
+TCAM_V4KEY3_SADDR_SHIFT 32
+TC_CBQ_MAXPRIO 8
+TCE_READ_SHIFT 0
+TCE_RPN_SHIFT 12
+TCE_WRITE_SHIFT 1
+TCODE_PHY_PACKET 16
+TCON_LINK_IN_TREE 2
+TCON_LINK_MASTER 0
+TCON_LINK_PENDING 1
+TCP_DELACK_TIMER_DEFERRED 4
+TCP_METRIC_CWND 3
+TCP_METRIC_REORDERING 4
+TCP_METRIC_RTT 0
+TCP_METRIC_RTTVAR 1
+TCP_METRIC_SSTHRESH 2
+TCP_MTU_REDUCED_DEFERRED 5
+TCP_TSQ_DEFERRED 2
+TCP_WRITE_TIMER_DEFERRED 3
+TD_PIDEP_OFFSET 4
+TD_TOKEN_DEVADDR_SHIFT 8
+TEA5777_W_AM_FM_SHIFT 46
+TEA5777_W_AM_LNA_SHIFT 30
+TEA5777_W_AM_MWLW_SHIFT 31
+TEA5777_W_AM_PEAK_SHIFT 25
+TEA5777_W_AM_PLL_SHIFT 34
+TEA5777_W_CHP0_SHIFT 18
+TEA5777_W_FM_FORCEMONO_SHIFT 15
+TEA5777_W_FM_FREF_SHIFT 30
+TEA5777_W_FM_PLL_SHIFT 32
+TEA5777_W_IFCE_SHIFT 29
+TEA5777_W_IFW_SHIFT 28
+TEA5777_W_INTEXT_SHIFT 24
+TEA5777_W_SLEV_SHIFT 3
+TESTMODE 3
+TG3_PHY_MII_ADDR 1
+THREAD_WAKEUP 0
+TILES_IN_X_LSB_SHIFT 30
+TILES_IN_X_MSB_SHIFT 24
+TILES_IN_X_SHIFT 4
+TIMEDOUT 11
+TIMEOUT 0
+TIMEOUT 21
+TIPC_CRITICAL_IMPORTANCE 3
+TIPC_LOW_IMPORTANCE 0
+TLV320AIC23_CLKIN_SHIFT 6
+TMEM_POOL_PAGESIZE_SHIFT 4
+TMEM_VERSION_SHIFT 24
+TMRDIV_SHIFT 0
+TOMOYO_TYPE_EXECUTE 0
+TP_ACPI_HOTKEYSCAN_FNEND 16
+TP_ACPI_HOTKEYSCAN_FNHOME 15
+TPD_BUFLEN_SHIFT 0
+TPD_CC_SEGMENT_EN_SHIFT 3
+TPD_CCSUM_EN_SHIFT 8
+TPD_CCSUM_OFFSET_SHIFT 18
+TPD_CCSUMOFFSET_SHIFT 24
+TPD_CUST_CSUM_EN_SHIFT 3
+TPD_EOP_SHIFT 0
+TPD_EOP_SHIFT 31
+TPD_ETH_TYPE_SHIFT 17
+TPD_ETHTYPE_SHIFT 9
+TPD_HADDR_SHIFT 5
+TPD_HDRFLAG_SHIFT 18
+TPD_INS_VL_TAG_SHIFT 2
+TPD_INS_VTAG_SHIFT 15
+TPD_IP_CSUM_SHIFT 5
+TPD_IPHL_SHIFT 10
+TPD_IPV4_PACKET_SHIFT 16
+TPD_LSO_EN_SHIFT 12
+TPD_LSO_VER_SHIFT 13
+TPD_MSS_SHIFT 18
+TPD_MSS_SHIFT 19
+TPD_PLOADOFFSET_SHIFT 0
+TPD_PLOADOFFSET_SHIFT 16
+TPD_SEGMENT_EN_SHIFT 4
+TPD_TCP_CSUM_SHIFT 6
+TPD_TCPHDRLEN_SHIFT 14
+TPD_TCPHDR_OFFSET_SHIFT 0
+TPD_V4_IPHL_SHIFT 10
+TPD_VLAN_SHIFT 16
+TPD_VLANTAG_SHIFT 16
+TPD_VL_TAGGED_SHIFT 8
+TP_NVRAM_POS_LEVEL_BRIGHTNESS 0
+TPS6105X_REG0_MODE_SHIFT 6
+TPS6105X_REG0_VOLTAGE_SHIFT 4
+TRANSPARENT_HUGEPAGE_FLAG 0
+TRANSPARENT_HUGEPAGE_REQ_MADV_FLAG 1
+TRB_MAX_BUFF_SHIFT 16
+TRUEIDE_MWORD_DMA_TIMING_SHIFT 7
+TRUEIDE_PIO_TIMING_SHIFT 4
+TSIZ_NTD_SHIFT 8
+TSIZ_PKTCNT_SHIFT 19
+TSIZ_SCHINFO_SHIFT 0
+TSIZ_SC_MC_PID_SHIFT 29
+TSIZ_XFERSIZE_SHIFT 0
+TSQ_THROTTLED 0
+TST_SWITCH_PENDING 1
+TST_SWITCH_WAIT 2
+TT1_SHIFT 0
+TT2_SHIFT 4
+TTM_BO_PRIV_FLAG_MOVING 0
+TT_OFFSET 2
+TTY_CLOSING 7
+TTY_DO_WRITE_WAKEUP 5
+TTY_EXCLUSIVE 3
+TTY_HUPPED 18
+TTY_HUPPING 21
+TTY_IO_ERROR 1
+TTY_LDISC 9
+TTY_LDISC_CHANGING 10
+TTY_LDISC_HALTED 22
+TTY_NO_WRITE_SPLIT 17
+TTY_OTHER_CLOSED 2
+TTYP_FLUSHPENDING 2
+TTY_PTY_LOCK 16
+TTY_PUSH 6
+TTY_THROTTLED 0
+TV_BURST_LEVEL_SHIFT 16
+TV_DAC_CNTL_BGADJ__SHIFT 16
+TV_DAC_CNTL_DACADJ__SHIFT 20
+TV_HBLANK_END_SHIFT 16
+TV_HBLANK_START_SHIFT 0
+TV_HBURST_LEN_SHIFT 0
+TV_HSYNC_END_SHIFT 16
+TV_HTOTAL_SHIFT 0
+TV_NBR_END_SHIFT 16
+TVP5150_CROP_SHIFT 2
+TV_SCDDA1_INC_SHIFT 0
+TV_SCDDA2_INC_SHIFT 0
+TV_SCDDA2_SIZE_SHIFT 16
+TV_SCDDA3_INC_SHIFT 0
+TV_SCDDA3_SIZE_SHIFT 16
+TV_VBURST_END_F1_SHIFT 0
+TV_VBURST_END_F2_SHIFT 0
+TV_VBURST_END_F3_SHIFT 0
+TV_VBURST_END_F4_SHIFT 0
+TV_VBURST_START_F1_SHIFT 16
+TV_VBURST_START_F2_SHIFT 16
+TV_VBURST_START_F3_SHIFT 16
+TV_VBURST_START_F4_SHIFT 16
+TV_VEQ_LEN_SHIFT 16
+TV_VEQ_START_F1_SHIFT 8
+TV_VEQ_START_F2_SHIFT 0
+TV_VI_END_F1_SHIFT 8
+TV_VI_END_F2_SHIFT 0
+TV_VSYNC_LEN_SHIFT 16
+TV_VSYNC_START_F1_SHIFT 8
+TV_VSYNC_START_F2_SHIFT 0
+TW_IN_RESET 2
+TWL4030_ROW_SHIFT 4
+TWL6030_CFG_STATE_GRP_SHIFT 5
+TWSIC0_SID_SHIFT 3
+TWSIC1_ADDR_SHIFT 16
+TW_USING_MSI 3
+TXC_AMPDU_SHIFT 9
+TXC_ARXCTL_RXPD0_LBN 12
+TXC_ARXCTL_RXPD1_LBN 13
+TXC_ARXCTL_RXPD2_LBN 14
+TXC_ARXCTL_RXPD3_LBN 15
+TXC_ATXCTL_TXPD0_LBN 12
+TXC_ATXCTL_TXPD1_LBN 13
+TXC_ATXCTL_TXPD2_LBN 14
+TXC_ATXCTL_TXPD3_LBN 15
+TXC_BIST_CTRL_ENAB_LBN 13
+TXC_BIST_CTRL_STOP_LBN 14
+TXC_BIST_CTRL_STRT_LBN 15
+TXC_BIST_CTRL_TYPE_LBN 10
+TXC_GLCMD_L01PD_LBN 5
+TXC_GLCMD_L23PD_LBN 6
+TXC_GLCMD_LMTSWRST_LBN 14
+TXC_MCTL_RXLED_LBN 13
+TXC_MCTL_TXLED_LBN 14
+TX_CMD_SEC_SHIFT 6
+TX_CMD_SEC_WEP_KEY_IDX_POS 6
+TXC_MTDIABLO_CTRL_PMA_LOOP_LBN 10
+TXD_LEN_SHIFT 16
+TxDMABurstSizeShift 8
+TXD_MSS_SHIFT 16
+TxDRNT_shift 0
+TXD_VLAN_TAG_SHIFT 0
+TXFID_SEQ_SHIFT 5
+TXFIFOCMD_FIFOSEL_SHIFT 8
+TXFIFO_FIFOTOP_SHIFT 8
+TxFILLT_shift 8
+TX_FLOW_ON_BIT 1
+TXHDR_IHL_SHIFT 52
+TXHDR_L3START_SHIFT 48
+TXHDR_L4START_SHIFT 40
+TXHDR_L4STUFF_SHIFT 32
+TXHDR_LEN_SHIFT 16
+TXHDR_PAD_SHIFT 0
+TxHiPriFIFOThreshShift 24
+TX_HW_ATTR_OFST_RATE_POLICY 5
+TX_HW_ATTR_OFST_SESSION_COUNTER 2
+TX_JUMBO_TASK_TH_SHIFT 0
+TX_LENGTHS_IPG_CRS_SHIFT 12
+TX_LENGTHS_IPG_SHIFT 8
+TX_LENGTHS_SLOT_TIME_SHIFT 0
+TX_LOG_PAGE_VLD_FUNC_SHIFT 2
+TxMXDMA_shift 20
+TxPadLenShift 16
+TXQ_CMD_SHIFT 29
+TXQ_CTRL 2
+TXQ_CTRL_TPD_BURST_NUM_SHIFT 0
+TXQ_CTRL_TPD_FETCH_TH_SHIFT 8
+TXQ_CTRL_TXF_BURST_NUM_SHIFT 16
+TXQ_ETH 0
+TXQ_OFLD 1
+TXQ_PHY_SHIFT 12
+TXQ_RUNNING 1
+TXQ_SRS_SHIFT 20
+TX_RNG_CFIG_LEN_SHIFT 48
+TX_STATUS_BA_BMAP47_SHIFT 3
+TXSTOPPED 1
+TX_TPD_MIN_IPG_SHIFT 16
+UAC_FORMAT_TYPE_I_ALAW 4
+UAC_FORMAT_TYPE_I_IEEE_FLOAT 3
+UAC_FORMAT_TYPE_I_MULAW 5
+UAC_FORMAT_TYPE_I_PCM 1
+UAC_FORMAT_TYPE_I_PCM8 2
+UAC_FORMAT_TYPE_I_UNDEFINED 0
+UBIFS_BLOCK_SHIFT 12
+UBIFS_LPT_FANOUT_SHIFT 2
+UDC_BITS_PER_BYTE_SHIFT 3
+UDCCONR_AISN_S 19
+UDCCONR_CN_S 25
+UDCCONR_EN_S 15
+UDCCONR_ET_S 13
+UDCCONR_IN_S 22
+UDCCONR_MPS_S 2
+UDC_CSR_NE_ALT_SHIFT 15
+UDC_CSR_NE_CFG_SHIFT 7
+UDC_CSR_NE_DIR_SHIFT 4
+UDC_CSR_NE_INTF_SHIFT 11
+UDC_CSR_NE_MAX_PKT_SHIFT 19
+UDC_CSR_NE_NUM_SHIFT 0
+UDC_CSR_NE_TYPE_SHIFT 5
+UDC_DEVCTL_BRLEN_SHIFT 16
+UDC_DEVCTL_THLEN_SHIFT 24
+UDC_EP0OUT_IX 16
+UDC_EPCTL_ET_SHIFT 4
+UDF_FLAG_BLOCKSIZE_SET 19
+UDF_FLAG_GID_FORGET 13
+UDF_FLAG_GID_IGNORE 14
+UDF_FLAG_GID_SET 16
+UDF_FLAG_LASTBLOCK_SET 18
+UDF_FLAG_NLS_MAP 9
+UDF_FLAG_SESSION_SET 17
+UDF_FLAG_STRICT 5
+UDF_FLAG_UID_FORGET 11
+UDF_FLAG_UID_IGNORE 12
+UDF_FLAG_UID_SET 15
+UDF_FLAG_UNDELETE 6
+UDF_FLAG_UNHIDE 7
+UDF_FLAG_USE_AD_IN_ICB 3
+UDF_FLAG_USE_SHORT_AD 2
+UDF_FLAG_UTF8 10
+UDI_SENDER_ID_SHIFT 8
+UD_VECTOR 6
+ULP_ACCEPT 9
+ULP_F_CALL_PENDING 2
+ULP_REJECT 10
+ultra 2
+ULTRA_DMA_TIMING_SHIFT 10
+UNLOADING 15
+Unmerged 2
+UNPLUG_REMOTE 0
+uPD98401_IM_I_SHIFT 24
+uPD98401_PC_C_SHIFT 16
+uPD98401_RXFP_ALERT_SHIFT 28
+uPD98401_RXFP_BFSZ_SHIFT 24
+uPD98401_RXFP_BTSZ_SHIFT 16
+uPD98401_RXVC_POOL_SHIFT 16
+uPD98401_TXVC_SHP_SHIFT 24
+uPD98401_TXVC_VPI_SHIFT 16
+UPROBE_COPY_INSN 0
+USB_CAPTURE_RUNNING 0
+USB_CDC_ETHERNET_TYPE 15
+USB_CDC_HEADER_TYPE 0
+USB_CDC_UNION_TYPE 6
+USB_DETECT_ENABLE 3
+USB_DEVICE_A_ALT_HNP_SUPPORT 5
+USB_DEVICE_A_HNP_SUPPORT 4
+USB_DEVICE_B_HNP_ENABLE 3
+USB_DEVICE_REMOTE_WAKEUP 1
+USB_DEVICE_SELF_POWERED 0
+USB_DEV_STAT_U1_ENABLED 2
+USB_DEV_STAT_U2_ENABLED 3
+USB_EHCI_LOADED 2
+USB_ENDPOINT_HALT 0
+USB_FULL_SPEED 1
+USB_HIGH_SPEED 2
+USB_IN_ACK_RCVD 18
+USB_IN_ACK_RCVD 3
+USB_IN_NAK_SENT 19
+USB_IN_NAK_SENT 4
+USB_OHCI_LOADED 1
+USB_OUT_ACK_SENT 1
+USB_OUT_ACK_SENT 16
+USB_OUT_NAK_SENT 2
+USB_OUT_PING_NAK_SENT 17
+USB_PLAYBACK_RUNNING 1
+USB_PORT_FEAT_C_CONNECTION 16
+USB_PORT_FEAT_C_RESET 20
+USB_PORT_FEAT_C_SUSPEND 18
+USB_PORT_FEAT_RESET 4
+USB_PORT_FEAT_SUSPEND 2
+USB_ROOT_PORT_WAKEUP_ENABLE 11
+USB_ROOT_PORT_WAKEUP_ENABLE 5
+USB_SOFT_RESET 1
+USB_STALL_SENT 20
+USB_STALL_SENT 5
+USB_UHCI_LOADED 0
+USE_DEGR_WFC_T 2
+USER 4
+USER_CONTROL_RES1_SHIFT 0
+USER_ODIG_CTRL_GPIOS_SHIFT 5
+USER_PMD_TX_CTL_TX_DAC_TXCK_SH 4
+USER_PMD_TX_CTL_TX_DAC_TXD_SH 6
+US_FLIDX_ABORTING 2
+US_FLIDX_DISCONNECTING 3
+US_FLIDX_READ10_WORKED 8
+US_FLIDX_REDO_READ10 7
+US_FLIDX_RESETTING 4
+US_FLIDX_SCAN_PENDING 6
+US_FLIDX_SG_ACTIVE 1
+US_FLIDX_TIMED_OUT 5
+US_FLIDX_URB_ACTIVE 0
+USTORM_ISCSI_ST_CONTEXT_MAX_OUTSTANDING_R2TS_SHIFT 24
+UV2_ACK_UNITS_SHFT 3
+UV2_EXT_SHFT 33
+UV_DESC_PSHIFT 49
+UVH_IPI_INT_APIC_ID_SHFT 16
+UVH_IPI_INT_SEND_SHFT 63
+UVH_IPI_INT_VECTOR_SHFT 0
+UVH_RH_GAM_GRU_OVERLAY_CONFIG_MMR_BASE_SHFT 28
+UVH_RTC1_INT_CONFIG_APIC_ID_SHFT 32
+UVH_RTC1_INT_CONFIG_VECTOR_SHFT 0
+UV_PAYLOADQ_PNODE_SHIFT 49
+UV_SW_ACK_NPENDING 8
+V2_DQBLKSIZE_BITS 10
+V4L2_COLORFX_BW 1
+V4L2_COLORFX_NEGATIVE 3
+V4L2_COLORFX_NONE 0
+V4L2_COLORFX_SEPIA 2
+V4L2_COLORFX_SKETCH 5
+V4L2_FL_REGISTERED 0
+V4L2_FL_USE_FH_PRIO 2
+V4L2_FL_USES_V4L2_FH 1
+V4L2_MPEG_AUDIO_AC3_BITRATE_256K 12
+V4L2_MPEG_AUDIO_AC3_BITRATE_384K 14
+V4L2_MPEG_AUDIO_DEC_PLAYBACK_AUTO 0
+V4L2_MPEG_AUDIO_L2_BITRATE_256K 11
+V4L2_MPEG_AUDIO_L2_BITRATE_384K 13
+V4L2_MPEG_AUDIO_SAMPLING_FREQ_48000 1
+V4L2_MPEG_STREAM_TYPE_MPEG2_TS 1
+V4L2_MPEG_VIDEO_ENCODING_MPEG_2 1
+VALID_BIT 31
+VALUE_HASH_SHIFT 16
+VBUS_INTERRUPT 2
+VBUS_INTERRUPT 7
+VBUS_INTERRUPT_ENABLE 2
+VBUS_INTERRUPT_ENABLE 7
+VBUS_PIN 0
+VBUS_PIN 10
+VCF_IDLE 2
+VCF_RX 1
+VCF_TX 0
+VCPU_EXREG_CPL 20
+VCPU_EXREG_CR3 18
+VCPU_EXREG_PDPTR 17
+VCPU_EXREG_RFLAGS 19
+VCPU_EXREG_SEGMENTS 21
+VCPU_REGS_RIP 16
+VCPU_REGS_RSP 4
+VDD1_VGAIN_SEL_SHIFT 6
+VDD2_VGAIN_SEL_SHIFT 6
+VERT_PANEL_SHIFT 12
+VHOST_F_LOG_ALL 26
+VHOST_NET_F_VIRTIO_NET_HDR 27
+VHOST_VRING_F_LOG 0
+VIA_MM_ALIGN_SHIFT 4
+VIA_REG_AC97_CMD_SHIFT 16
+VIA_REG_AC97_CODEC_ID_SHIFT 30
+VIA_REG_AC97_DATA_SHIFT 0
+VIA_STRFILT_CNT_SHIFT 16
+VIDCFG_PIXFMT_SHIFT 18
+V_INTR_PRIO_SHIFT 16
+VIRTIO_CONSOLE_F_MULTIPORT 1
+VIRTIO_NET_F_MRG_RXBUF 15
+VIRTIO_RING_F_EVENT_IDX 29
+VLAN_PRIO_SHIFT 13
+VLAN_VALID 1
+VMCB_DIRTY_MAX 11
+VMWARE_PORT_CMD_LEGACY_X2APIC 3
+VMWARE_PORT_CMD_VCPU_RESERVED 31
+VMX_BASIC_MEM_TYPE_SHIFT 50
+VMX_BASIC_VMCS_SIZE_SHIFT 32
+VMX_EPT_GAW_EPTP_SHIFT 3
+VMX_EPT_MT_EPTE_SHIFT 3
+VMXNET3_RXD_BTYPE_SHIFT 14
+VMXNET3_STATE_BIT_QUIESCED 1
+VMXNET3_TXD_GEN_SHIFT 14
+V_PARAM_SHIFT 1
+VPD_CAP_VPD_ADDR_SHIFT 16
+VP_DPC_NEEDED 14
+VP_IDX_ACQUIRED 0
+VP_SCR_NEEDED 4
+VSC_MMIO_BAR 0
+__VXGE_STATE_CARD_UP 1
+W1_SLAVE_ACTIVE 0
+WAKEUP_BEHAVIOR_RESTORE_CR4 1
+WAKEUP_BEHAVIOR_RESTORE_MISC_ENABLE 0
+WantReplacement 9
+WBD_ALPHA 6
+WDM_DISCONNECTING 2
+WDM_INT_STALL 5
+WDM_IN_USE 1
+WDM_OVERFLOW 10
+WDM_READ 4
+WDM_RESETTING 9
+WDM_RESPONDING 7
+WDM_SUSPENDING 8
+WDOG_ACTIVE 0
+WDOG_ALLOW_RELEASE 2
+WDOG_NO_WAY_OUT 3
+WDOG_UNREGISTERED 4
+WDT_FLAGS_ORPHAN 2
+WDT_OK_TO_CLOSE 1
+WDTS_EXPECTED 5
+WDTS_KEEPALIVE 2
+WDTS_USE_GP 4
+WFOI_MASK_SHIFT 4
+WH_OFS 20
+wil_status_dontscan 3
+wil_status_fwconnected 2
+wil_status_fwconnecting 1
+wil_status_fwready 0
+wil_status_irqen 5
+wil_status_reset_done 4
+WIMAX_ST_CONNECTED 8
+WIMAX_ST_CONNECTING 7
+WIMAX_ST_DOWN 1
+__WIMAX_ST_QUIESCING 2
+WIMAX_ST_RADIO_OFF 4
+WIMAX_ST_READY 5
+WIMAX_ST_SCANNING 6
+WIMAX_ST_UNINITIALIZED 3
+WL1271_FLAG_DUMMY_PACKET_PENDING 7
+WL1271_FLAG_FW_TX_BUSY 6
+WL1271_FLAG_IN_ELP 3
+WL1271_FLAG_INTENDED_FW_RECOVERY 13
+WL1271_FLAG_IRQ_RUNNING 5
+WL1271_FLAG_PENDING_WORK 9
+WL1271_FLAG_RECOVERY_IN_PROGRESS 11
+WL1271_FLAG_SOFT_GEMINI 10
+WL1271_FLAG_SUSPENDED 8
+WL1271_FLAG_TX_PENDING 2
+WL1271_FLAG_VIF_CHANGE_IN_PROGRESS 12
+WLAN_ENABLED 7
+WLAN_STA_ASSOC 1
+WLAN_STA_AUTH 0
+WLAN_STA_AUTHORIZED 3
+WLVIF_FLAG_AP_PROBE_RESP_SET 10
+WLVIF_FLAG_AP_STARTED 4
+WLVIF_FLAG_CS_PROGRESS 9
+WLVIF_FLAG_IBSS_JOINED 3
+WLVIF_FLAG_INITIALIZED 0
+WLVIF_FLAG_IN_PS 5
+WLVIF_FLAG_IN_USE 11
+WLVIF_FLAG_RX_STREAMING_STARTED 7
+WLVIF_FLAG_STA_ASSOCIATED 1
+WLVIF_FLAG_STA_AUTHORIZED 2
+WM0_PIPE_PLANE_SHIFT 16
+WM0_PIPE_SPRITE_SHIFT 8
+WM2200_AIF1TX_WL_SHIFT 8
+WM2200_FLL_CLK_REF_DIV_SHIFT 4
+WM2200_FLL_OUTDIV_SHIFT 8
+WM2200_IN1_DMIC_SUP_SHIFT 11
+WM2200_IN1_MODE_SHIFT 9
+WM2200_MICB1_LVL_SHIFT 2
+WM2200_SYSCLK_FREQ_SHIFT 8
+WM5100_ACCDET_BIAS_SRC_SHIFT 14
+WM5100_ACCDET_BIAS_STARTTIME_SHIFT 12
+WM5100_ACCDET_RATE_SHIFT 8
+WM5100_ACCDET_SRC_SHIFT 13
+WM5100_AIF1TX_WL_SHIFT 8
+WM5100_FLL1_OUTDIV_SHIFT 8
+WM5100_FLL1_REFCLK_DIV_SHIFT 6
+WM5100_GP1_DIR_SHIFT 15
+WM5100_GP1_FN_SHIFT 0
+WM5100_GP1_LVL_SHIFT 6
+WM5100_HPCOM_SRC_SHIFT 9
+WM5100_IN1_DMIC_SUP_SHIFT 11
+WM5100_IN1_MODE_SHIFT 9
+WM5100_SYSCLK_FREQ_SHIFT 8
+WM831X_CLKOUT_SRC_SHIFT 0
+WM831X_DC1_DVS_SRC_SHIFT 11
+WM831X_DC1_HC_THR_SHIFT 4
+WM831X_DC1_ON_MODE_SHIFT 8
+WM831X_LED_DUR_SHIFT 2
+WM831X_LED_MODE_SHIFT 8
+WM831X_LED_SRC_SHIFT 14
+WM831X_WDOG_PRIMACT_SHIFT 4
+WM831X_WDOG_RST_SRC_SHIFT 13
+WM831X_WDOG_SECACT_SHIFT 8
+WM8350_DC1_ENSLOT_SHIFT 10
+WM8350_DC1_ERRACT_SHIFT 14
+WM8350_DC1_SDSLOT_SHIFT 6
+WM8350_DC2_FBSRC_SHIFT 0
+WM8350_DC2_HIB_MODE_SHIFT 12
+WM8350_DC2_ILIM_SHIFT 6
+WM8350_DC2_MODE_SHIFT 14
+WM8350_DC2_RMP_SHIFT 3
+WM8350_DC5_FBSRC_SHIFT 0
+WM8350_DC5_HIB_MODE_SHIFT 12
+WM8350_DC5_ILIM_SHIFT 6
+WM8350_DC5_MODE_SHIFT 14
+WM8350_DC5_RMP_SHIFT 3
+WM8350_OUT1L_VOL_SHIFT 2
+WM8350_OUT1R_VOL_SHIFT 2
+WM8350_RTC_ALMDAY_SHIFT 8
+WM8350_RTC_ALMMINS_SHIFT 8
+WM8350_RTC_ALMMTH_SHIFT 8
+WM8350_RTC_DAY_SHIFT 8
+WM8350_RTC_MINS_SHIFT 8
+WM8350_RTC_MTH_SHIFT 8
+WM8350_RTC_YHUNDREDS_SHIFT 8
+WM8400_AINLMUX_PWR 1
+WM8400_AINRMUX_PWR 3
+WM8400_FLL_REF_FREQ_SHIFT 12
+WM8400_INMIXL_PWR 0
+WM8400_INMIXR_PWR 2
+WM8737_SR_SHIFT 1
+WM8903_CLK_SYS_MODE_SHIFT 8
+WM8903_CLK_SYS_RATE_SHIFT 10
+WM8903_DEEMPH_SHIFT 1
+WM8903_GP1_FN_SHIFT 8
+WM8903_GP1_LVL_SHIFT 4
+WM8903_GP2_LVL_SHIFT 4
+WM8903_ISEL_SHIFT 2
+WM8903_VMID_SOFT_SHIFT 3
+WM8904_CLK_SYS_RATE_SHIFT 10
+WM8904_DCS_TRIG_STARTUP_0_SHIFT 4
+WM8904_DEEMPH_SHIFT 1
+WM8904_FLL_CLK_REF_DIV_SHIFT 3
+WM8904_FLL_FRATIO_SHIFT 0
+WM8904_FLL_N_SHIFT 5
+WM8904_FLL_OUTDIV_SHIFT 8
+WM8904_ISEL_SHIFT 2
+WM8904_SAMPLE_RATE_SHIFT 0
+WM8904_VMID_RES_SHIFT 1
+WM8955_DEEMPH_SHIFT 1
+WM8955_N_SHIFT 5
+WM8955_SR_SHIFT 1
+WM8955_VMIDSEL_SHIFT 7
+WM8955_VREF_SHIFT 6
+WM8955_VSEL_SHIFT 6
+WM8958_DSP2CLK_SRC_SHIFT 12
+WM8958_MBC_SEL_SHIFT 4
+WM8958_MICD_BIAS_STARTTIME_SHIFT 12
+WM8958_MICD_RATE_SHIFT 8
+WM8961_CLK_SYS_RATE_SHIFT 1
+WM8961_VMIDSEL_SHIFT 7
+WM8961_WL_SHIFT 2
+WM8962_BEEP_RATE_SHIFT 1
+WM8962_CLKOUT2_SEL_SHIFT 5
+WM8962_CLKOUT3_SEL_SHIFT 3
+WM8962_FLL_OUTDIV_SHIFT 3
+WM8962_FLL_REFCLK_SRC_SHIFT 5
+WM8962_GP2_FN_SHIFT 0
+WM8962_GP2_LVL_SHIFT 6
+WM8962_SYSCLK_RATE_SHIFT 1
+WM8962_SYSCLK_SRC_SHIFT 9
+WM8983_BCLKDIV_SHIFT 2
+WM8983_BCP_SHIFT 8
+WM8983_EQ3DMODE_SHIFT 8
+WM8983_FMT_SHIFT 3
+WM8983_LRCP_SHIFT 7
+WM8983_MCLKDIV_SHIFT 5
+WM8983_MS_SHIFT 0
+WM8983_PLL_PRESCALE_SHIFT 4
+WM8983_SOFTMUTE_SHIFT 6
+WM8983_SR_SHIFT 1
+WM8983_VMIDSEL_SHIFT 0
+WM8983_WL_SHIFT 5
+WM8985_BCLKDIV_SHIFT 2
+WM8985_BCP_SHIFT 8
+WM8985_EQ3DMODE_SHIFT 8
+WM8985_FMT_SHIFT 3
+WM8985_LRP_SHIFT 7
+WM8985_MCLKDIV_SHIFT 5
+WM8985_MS_SHIFT 0
+WM8985_PLL_PRESCALE_SHIFT 4
+WM8985_SOFTMUTE_SHIFT 6
+WM8985_SR_SHIFT 1
+WM8985_VMIDSEL_SHIFT 0
+WM8985_WL_SHIFT 5
+WM8990_AINLMUX_PWR_BIT 1
+WM8990_AINRMUX_PWR_BIT 3
+WM8990_INMIXL_PWR_BIT 0
+WM8990_INMIXR_PWR_BIT 2
+WM8991_AINLMUX_PWR_BIT 1
+WM8991_AINRMUX_PWR_BIT 3
+WM8991_INMIXL_PWR_BIT 0
+WM8991_INMIXR_PWR_BIT 2
+WM8993_BCLK_DIV_SHIFT 1
+WM8993_CLK_SYS_RATE_SHIFT 1
+WM8993_DCS_DAC_WR_VAL_1_SHIFT 8
+WM8993_DCS_SERIES_NO_01_SHIFT 5
+WM8993_FLL_CLK_REF_DIV_SHIFT 3
+WM8993_FLL_FRATIO_SHIFT 0
+WM8993_FLL_N_SHIFT 5
+WM8993_FLL_OUTDIV_SHIFT 8
+WM8993_JD_SCTHR_SHIFT 6
+WM8993_JD_THR_SHIFT 4
+WM8993_MICB2_LVL_SHIFT 1
+WM8993_SAMPLE_RATE_SHIFT 7
+WM8994_AIF1_BCLK_DIV_SHIFT 4
+WM8994_AIF1DAC1_3D_GAIN_SHIFT 9
+WM8994_AIF1DAC2_3D_GAIN_SHIFT 9
+WM8994_AIF1_SR_SHIFT 4
+WM8994_AIF2DAC_3D_GAIN_SHIFT 9
+WM8994_CP_DYN_SRC_SEL_SHIFT 8
+WM8994_FLL1_FRATIO_SHIFT 0
+WM8994_FLL1_FRC_NCO_SHIFT 6
+WM8994_FLL1_N_SHIFT 5
+WM8994_FLL1_OUTDIV_SHIFT 8
+WM8994_FLL1_REFCLK_DIV_SHIFT 3
+WM8994_VMID_RAMP_SHIFT 5
+WM8995_AIF1_BCLK_DIV_SHIFT 4
+WM8995_AIF1DAC1_MUTE_SHIFT 9
+WM8995_AIF1_FMT_SHIFT 3
+WM8995_AIF1_SR_SHIFT 4
+WM8995_AIF1_WL_SHIFT 5
+WM8995_CP_DYN_SRC_SEL_SHIFT 8
+WM8995_FLL1_FRATIO_SHIFT 0
+WM8995_FLL1_N_SHIFT 5
+WM8995_FLL1_OUTDIV_SHIFT 8
+WM8995_FLL1_REFCLK_DIV_SHIFT 3
+WM8996_AIF1RX_CHAN0_SLOTS_SHIFT 6
+WM8996_AIF1RX_CHAN1_SLOTS_SHIFT 6
+WM8996_AIF1RX_CHAN2_SLOTS_SHIFT 6
+WM8996_AIF1RX_CHAN3_SLOTS_SHIFT 6
+WM8996_AIF1RX_CHAN4_SLOTS_SHIFT 6
+WM8996_AIF1RX_CHAN5_SLOTS_SHIFT 6
+WM8996_AIF1TX_CHAN0_SLOTS_SHIFT 6
+WM8996_AIF1TX_CHAN1_SLOTS_SHIFT 6
+WM8996_AIF1TX_CHAN2_SLOTS_SHIFT 6
+WM8996_AIF1TX_CHAN3_SLOTS_SHIFT 6
+WM8996_AIF1TX_CHAN4_SLOTS_SHIFT 6
+WM8996_AIF1TX_CHAN5_SLOTS_SHIFT 6
+WM8996_AIF1TX_WL_SHIFT 8
+WM8996_AIF2RX_CHAN0_SLOTS_SHIFT 6
+WM8996_AIF2RX_CHAN1_SLOTS_SHIFT 6
+WM8996_AIF2TX_CHAN0_SLOTS_SHIFT 6
+WM8996_DCS_TRIG_STARTUP_0_SHIFT 4
+WM8996_FLL_LFSR_SEL_SHIFT 1
+WM8996_FLL_N_SHIFT 5
+WM8996_FLL_OUTDIV_SHIFT 8
+WM8996_FLL_REFCLK_DIV_SHIFT 3
+WM8996_FLL_REF_FREQ_SHIFT 2
+WM8996_GP1_DIR_SHIFT 15
+WM8996_GP1_FN_SHIFT 0
+WM8996_GP1_LVL_SHIFT 6
+WM8996_INL_MODE_SHIFT 2
+WM8996_MICD_BIAS_STARTTIME_SHIFT 12
+WM8996_MICD_RATE_SHIFT 8
+WM8996_SYSCLK_SRC_SHIFT 3
+WM9081_AIFDAC_TDM_MODE_SHIFT 2
+WM9081_CLK_SYS_RATE_SHIFT 4
+WM9081_FLL_CLK_REF_DIV_SHIFT 3
+WM9081_FLL_FRATIO_SHIFT 0
+WM9081_FLL_N_SHIFT 5
+WM9081_FLL_OUTDIV_SHIFT 8
+WM9081_SAMPLE_RATE_SHIFT 0
+WM9090_VMID_RES_SHIFT 1
+WMI_CTRL_EP_FULL 2
+WMI_DATA_HDR_DATA_TYPE_SHIFT 6
+WMI_DATA_HDR_MSG_TYPE_SHIFT 0
+WMI_ENABLED 0
+WMI_RC_RX_STBC_FLAG_S 6
+WMI_READY 1
+WMM_AC_BK 1
+WMM_ENABLED 2
+WMM_NUM_AC 4
+WM_SW_DAC 0
+WORK_DONE_BIT 1
+WORK_ENABLE 3
+WORK_HIGH_PRIO_BIT 3
+WORK_LINK_DOWN 2
+WORK_LINK_UP 1
+WORK_OFFQ_POOL_SHIFT 6
+WORK_SET_MULTICAST_LIST 4
+WORK_STRUCT_COLOR_BITS 4
+WORK_STRUCT_COLOR_SHIFT 5
+Wpending 8
+WriteErrorSeen 6
+WriteMostly 3
+WRITE_REMOTE_AMP_ASSOC 3
+WS_OFS 28
+WSPI_CMD_BYTE_LENGTH_OFFSET 17
+WST_OFS 22
+WTSR_EN_SHIFT 6
+WTSRT_SHIFT 0
+X25_ACCPT_APPRV_FLAG 2
+X25_Q_BIT_FLAG 0
+XEN_MCE_OVERFLOW 0
+_XEN_PCIB_active 2
+_XEN_PCIB_AERHANDLER 1
+_XEN_PCIF_active 0
+XFS_BLF_SHIFT 7
+XFS_EFI_RECOVERED 1
+XFS_ILOCK_SHIFT 24
+XFS_IOLOCK_SHIFT 16
+XFTS_CHANNEL_SHIFT 8
+XFTS_FBRRTS_FT_SHIFT 4
+XFTS_RTS_FT_SHIFT 2
+XGMAC_FLOW_CTRL_PT_SHIFT 16
+XMAC_IPG_IPG_MII_GMII_SHIFT 8
+XMAC_IPG_IPG_XGMII_SHIFT 0
+XMAC_MIN_RX_MIN_PKT_SIZE_SHFT 20
+XMAC_MIN_TX_MIN_PKT_SIZE_SHFT 0
+XMIT_BUF_ONE_READY 6
+XMIT_BUF_TWO_READY 7
+XMIT_SENDING_READY 8
+XMIT_WAITING 8
+XMIT_WAKEUP 0
+XMIT_WAKEUP 2
+XPRT_CLOSE_WAIT 3
+XPRT_CLOSING 6
+XPRT_CONGESTED 9
+XPRT_CONNECTION_ABORT 7
+XPRT_CONNECTION_CLOSE 8
+XPT_BUSY 0
+XPT_CACHE_AUTH 12
+XPT_CHNGBUF 7
+XPT_CLOSE 2
+XPT_CONN 1
+XPT_DATA 3
+XPT_DEFERRED 8
+XPT_DETACHED 10
+XPT_LISTENER 11
+XPT_TEMP 4
+XSTORM_COMMON_CONTEXT_SECTION_PBF_PORT_SHIFT 1
+XSTORM_COMMON_CONTEXT_SECTION_PHYSQ_INITIALIZED_SHIFT 0
+XT_DSCP_SHIFT 2
+XY_BUF_OFFSET 4
+ZCACHE_DSTMEM_ORDER 1
+ZD_DEVICE_RUNNING 0
+ZR36057_FHAP_NAX 16
+ZR36057_FHAP_PAX 0
+ZR36057_FVAP_NAY 16
+ZR36057_FVAP_PAY 0
+ZR36057_HSP_HsyncStart 16
+ZR36057_HSP_LineTot 0
+ZR36057_JCGI_JPEGuestID 4
+ZR36057_JCGI_JPEGuestReg 0
+ZR36057_VDCR_MinPix 24
+ZR36057_VDCR_VidWinHt 12
+ZR36057_VDCR_VidWinWid 0
+ZR36057_VFEHCR_HEnd 0
+ZR36057_VFEHCR_HStart 10
+ZR36057_VFESPFR_DispMode 6
+ZR36057_VFESPFR_HFilter 21
+ZR36057_VFESPFR_HorDcm 14
+ZR36057_VFESPFR_VerDcm 8
+ZR36057_VFEVCR_VEnd 0
+ZR36057_VFEVCR_VStart 10
+ZR36057_VSP_FrmTot 0
+ZR36057_VSP_VsyncSize 16
+ZR36057_VSSFGR_DispStride 16
--- /dev/null	Fri Dec 21 15:00:21 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.bit_shifters.remove	Fri Dec 21 15:00:21 2018
@@ -0,0 +1,9 @@
+// tvaudio.c deliberately reuses these in a non conventional way
+V4L2_TUNER_MODE_MONO 0
+V4L2_TUNER_MODE_STEREO 1
+V4L2_TUNER_MODE_LANG2 2
+V4L2_TUNER_MODE_SAP 2
+V4L2_TUNER_MODE_LANG1 3
+V4L2_TUNER_MODE_LANG1_LANG2 4
+
+MBX_INTERRUPT 1
--- /dev/null	Fri Dec 21 15:00:21 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.check_string_condition.ignore	Fri Dec 21 15:00:21 2018
@@ -0,0 +1,1 @@
+TRACE_EVENT
--- /dev/null	Fri Dec 21 15:00:21 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.clears_argument	Fri Dec 21 15:00:21 2018
@@ -0,0 +1,9 @@
+copy_from_user 0
+__copy_from_user 0
+copy_user_generic 0
+loop_get_status 1
+loop_info64_to_old 1
+ib_copy_qp_attr_to_user 0
+tcp_get_info 1
+snd_rawmidi_info_select 1
+t3e3_if_config 3
--- /dev/null	Fri Dec 21 15:00:21 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.common_functions	Fri Dec 21 15:00:21 2018
@@ -0,0 +1,75 @@
+printk
+memcpy
+dev_err
+kfree
+writel
+memset
+lockdep_rcu_suspicious
+variable_test_bit
+mutex_unlock
+spin_unlock_irqrestore
+nv_wr32
+dev_printk
+no_printk
+spin_unlock
+warn_slowpath_null
+_raw_spin_unlock_irqrestore
+spinlock_check
+mutex_lock_nested
+outb
+r100_mm_wreg
+snprintf
+sprintf
+readl
+usb_control_msg
+kmalloc
+warn_slowpath_fmt
+dev_set_drvdata
+constant_test_bit
+current_thread_info
+__udelay
+i2c_transfer
+__snd_printk
+__fswab32
+_raw_spin_unlock
+seq_printf
+get_current
+__kmalloc
+cit_write_reg
+spin_lock
+__list_add
+trace_define_field
+set_bit
+_raw_spin_lock_irqsave
+debugfs_create_file
+list_empty
+list_add_tail
+dev_warn
+netdev_priv
+_raw_spin_lock
+dev_get_drvdata
+atomic_read
+nv_mthd
+INIT_LIST_HEAD
+mod_phy_reg
+_dev_info
+clear_bit
+__fswab16
+spin_unlock_irq
+iowrite32
+__raw_spin_lock_init
+debug_lockdep_rcu_enabled
+stv090x_write_reg
+kzalloc
+i2c_master_send
+nv_rd32
+IS_ERR
+b43_phy_write
+lock_is_held
+task_pid_nr
+spin_unlock_bh
+__wake_up
+drm_ut_debug_printk
+reg_w
+writeb
+__create_pipe
--- /dev/null	Fri Dec 21 15:00:21 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.dev_queue_xmit	Fri Dec 21 15:00:21 2018
@@ -0,0 +1,42 @@
+br_dev_queue_push_xmit 0
+neigh_compat_output 0
+fcoe_fip_send 1
+eql_slave_xmit 0
+irlap_queue_xmit 1
+can_send 0
+snap_request 1
+llc_sap_action_send_xid_c 1
+llc_sap_action_send_ui 1
+x25_transmit_link 0
+pEII_request 1
+br_nf_dev_queue_xmit 0
+pppoe_xmit 1
+lapbeth_data_transmit 1
+irlap_send_i_frame 1
+aarp_send_ddp 1
+x25_send_iframe 1
+ipddp_xmit 0
+pipe_skb_send 1
+ax25_queue_xmit 0
+llc_station_send_pdu 0
+macvlan_start_xmit 0
+dsa_xmit 0
+pn_skb_send 1
+pspoll_send_buffered 2
+dev_queue_xmit 0
+irlap_send_ui_frame 1
+p8022_request 1
+hostap_mgmt_start_xmit 0
+edsa_xmit 0
+nes_nic_cm_xmit 0
+__pppoe_xmit 1
+pvc_xmit 0
+p8023_request 1
+macvlan_queue_xmit 0
+llc_build_and_send_ui_pkt 1
+x25_send_frame 0
+bpq_xmit 0
+pppoe_rcv_core 1
+pn_send 0
+llc_sap_action_send_test_c 1
+phonet_rcv 0
--- /dev/null	Fri Dec 21 15:00:21 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.dma_funcs	Fri Dec 21 15:00:21 2018
@@ -0,0 +1,35 @@
+// list of DMA function and buffer parameters.
+// generated by `gen_dma_funcs.sh`
+alauda_get_redu_data 2
+alauda_read_block 4
+alauda_read_block_raw 4
+alauda_write_block 2
+brcmf_usb_dl_send_bulk 1
+datafab_bulk_read 1
+datafab_bulk_write 1
+ene_get_card_type 2
+ene_send_scsi_cmd 2
+fill_isoc_urb 3
+ft1000_control 6
+jumpshot_bulk_read 1
+jumpshot_bulk_write 1
+ms_lib_read_extrablock 4
+ms_read_copyblock 5
+ms_read_readpage 3
+mts_int_submit_urb 2
+rts51x_bulk_transfer_buf 2
+rts51x_bulk_transport 4
+rts51x_bulk_transport_special 4
+rts51x_transfer_data 2
+rts51x_transfer_data_rcc 2
+sddr55_bulk_transport 2
+sisusb_bulkin_msg 2
+sisusb_bulkout_msg 3
+usbat_bulk_read 1
+usbat_bulk_write 1
+__usb_control_msg 6
+usb_control_msg 6
+usb_fill_bulk_urb 3
+usb_stor_bulk_transfer_buf 2
+usb_stor_bulk_transfer_sg 2
+vub300_usb_bulk_msg 2
--- /dev/null	Fri Dec 21 15:00:21 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.expects_err_ptr	Fri Dec 21 15:00:21 2018
@@ -0,0 +1,67 @@
+// list of functions which expect an ERR_PTR.
+// generated by `gen_expects_err_ptr.sh`
+bnx2fc_flogi_resp 1
+bnx2fc_logo_resp 1
+cfg80211_unlock_rdev 0
+cifs_get_tlink 0
+cifs_put_tlink 0
+class_destroy 0
+clusterip_seq_stop 1
+device_create_vargs 0
+d_obtain_alias 0
+do_readlink 2
+d_splice_alias 0
+fc_disc_gpn_ft_resp 1
+fc_disc_gpn_id_resp 1
+fc_els_resp_type 0
+fc_exch_rrq_resp 1
+fc_fcp_rec_resp 1
+fc_fcp_recv 1
+fc_fcp_srr_resp 1
+fc_lport_bsg_resp 1
+fc_lport_flogi_resp 1
+fc_lport_logo_resp 1
+fc_lport_ms_resp 1
+fc_lport_ns_resp 1
+fc_lport_scr_resp 1
+fcoe_flogi_resp 1
+fcoe_logo_resp 1
+fc_rport_adisc_resp 1
+fc_rport_error 1
+fc_rport_flogi_resp 1
+fc_rport_logo_resp 1
+fc_rport_plogi_resp 1
+fc_rport_prli_resp 1
+fc_rport_rtv_resp 1
+fc_tm_done 1
+free_link 0
+ft_recv_seq 1
+ieee80211_wep_decrypt_data 0
+ieee80211_wep_encrypt_data 0
+is_bad 0
+is_error_page 0
+kmemleak_alloc 0
+kmemleak_alloc_percpu 0
+kmemleak_free 0
+kmemleak_free_part 0
+kmemleak_free_percpu 0
+kmemleak_ignore 0
+kmemleak_no_scan 0
+kmemleak_not_leak 0
+kmemleak_scan_area 0
+kmemleak_seq_stop 1
+nfs3_cache_acls 1
+nfs3_cache_acls 2
+nfs_follow_remote_path 0
+ntfs_runlists_merge 0
+ntfs_runlists_merge 1
+osduld_put_device 0
+PTR_RET 0
+quota_quotaon 4
+regulator_put 0
+securityfs_remove 0
+tty_read 0
+__vfs_follow_link 1
+vfs_readlink 3
+wait_on_page_read 0
+xs_error 0
--- /dev/null	Fri Dec 21 15:00:21 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.frees_argument	Fri Dec 21 15:00:21 2018
@@ -0,0 +1,518 @@
+// list of functions and the argument they free.
+// generated by `gen_frees_list.sh`
+__aarp_expire 0
+acpi_bus_hot_remove_device 0
+acpi_ds_delete_walk_state 0
+acpi_ev_delete_gpe_xrupt 0
+acpi_os_delete_lock 0
+acpi_ut_delete_internal_object_list 0
+ad714x_remove 0
+adu_delete 0
+adxl34x_remove 0
+ahc_alloc 1
+ahc_dma_tag_destroy 1
+ahc_free 0
+ahd_dma_tag_destroy 1
+ahd_free 0
+amixer_mgr_destroy 0
+ap_free_sta 1
+argv_free 0
+ast_connector_destroy 0
+ast_crtc_destroy 0
+ast_encoder_destroy 0
+ast_i2c_destroy 0
+ast_ttm_backend_destroy 0
+asus_cleanup_pci_hotplug 0
+ata_sas_port_destroy 0
+ath10k_htc_destroy 0
+ath10k_htt_detach 0
+ath6kl_wmi_shutdown 0
+ath9k_htc_hw_free 0
+ath_gen_timer_free 1
+ath_mci_del_profile 2
+atm_mpoa_delete_qos 0
+atom_destroy 0
+au0828_usb_release 0
+audit_free_rule 0
+autofs4_free_ino 0
+__ax25_put_route 0
+b1_free_card 0
+b43_destroy_pioqueue_rx 0
+balloon_devinfo_free 0
+balloon_mapping_free 0
+bar_release 2
+batadv_hash_destroy 0
+bcm_remove_op 0
+bio_free_map_data 0
+bl_free_lseg 0
+blkg_free 0
+blk_trace_free 0
+block2mtd_free_device 0
+bnx2fc_hba_destroy 0
+bnx2x_exe_queue_free_elem 1
+brcmf_free_vif 1
+brcms_c_ampdu_detach 0
+brcms_c_antsel_detach 0
+brcms_c_bsscfg_mfree 0
+brcms_c_channel_mgr_detach 0
+brcms_ucode_free_buf 0
+bsg_destroy_job 0
+btrfs_free_block_rsv 1
+btrfsic_block_free 0
+btrfsic_block_link_free 0
+btrfsic_dev_state_free 0
+btrfsic_stack_frame_free 0
+c2_dealloc_ucontext 0
+cache_destroy_net 0
+call_usermodehelper_freeinfo 0
+cat_destroy 0
+cat_destroy 1
+cciss_free_sg_chain_blocks 0
+cdc_ncm_free 0
+ceph_auth_destroy 0
+ceph_mdsmap_destroy 0
+ceph_put_page_vector 0
+ceph_release_page_vector 0
+cffrml_free 0
+cfg80211_dev_free 0
+channel_detector_exit 1
+cipso_v4_doi_free 0
+cirrus_connector_destroy 0
+cirrus_ttm_backend_destroy 0
+class_compat_unregister 0
+class_create_release 0
+class_osdblk_release 0
+class_pktcdvd_release 0
+clkdev_drop 0
+close_bwqcam 0
+close_cqcam 0
+cls_destroy 0
+cls_destroy 1
+cm109_usb_cleanup 0
+cma3000_exit 0
+cm_create_port_fs 0
+cm_free_work 0
+common_destroy 0
+common_destroy 1
+complete_agent_reset_write_no_wait 4
+cond_destroy_bool 0
+cond_destroy_bool 1
+context_free 0
+crush_destroy_bucket_list 0
+crush_destroy_bucket_straw 0
+crush_destroy_bucket_tree 0
+crush_destroy_bucket_uniform 0
+crystalhd_delete_dioq 1
+CsrWifiNmeApPfree 0
+CsrWifiRouterCtrlPfree 0
+CsrWifiRouterPfree 0
+CsrWifiRouterTransportSerialiseAndSend 1
+CsrWifiSmePfree 0
+ct_atc_destroy 0
+ct_mixer_destroy 0
+ct_timer_free 0
+cuse_gendev_release 0
+cxio_hal_destroy_resource 0
+cyttsp_remove 0
+dapm_free_path 0
+db9_remove 0
+dca_free_domain 0
+delete_adapter 0
+delete_attr_set 0
+delete_port 0
+destroy_8023_client 0
+destroy_av 1
+destroy_cache_args 0
+destroy_EII_client 0
+destroy_header_iter 0
+destroy_htc_txctrl_packet 0
+destroy_log_context 0
+destroy_mount_options 0
+destroy_trace_option_files 0
+devinfo_seq_stop 1
+diolan_u2c_free 0
+dlm_free_lvb 0
+dlm_free_pagevec 0
+dl_seq_next 1
+dma_buf_detach 1
+dma_unpin_iovec_pages 0
+dm_bio_prison_destroy 0
+dm_block_manager_destroy 0
+dm_deferred_set_destroy 0
+dm_free_md_mempools 0
+dmi_entry_free 0
+dm_io_client_destroy 0
+doc_release_device 0
+do_sync_work 0
+do_thaw_all 0
+drbd_free_bc 0
+drr_destroy_class 1
+dummy_free 0
+dvb_unregister_device 0
+dynamic_kobj_release 0
+_edac_mc_free 0
+eeepc_cleanup_pci_hotplug 0
+efivarfs_destroy 0
+erase_callback 0
+eventfd_free_ctx 0
+ext4_remove_li_request 0
+extcon_dev_release 0
+fb_destroy_modedb 0
+fcoe_sysfs_fcf_del 0
+fib_free_table 0
+filenametr_destroy 0
+filenametr_destroy 1
+flexcop_device_kfree 0
+flow_destroy_filter 1
+flush_entry_free 0
+__fmc_sdb_free 0
+force_clean_group 0
+__fprog_destroy 0
+framebuffer_release 0
+free_buffer_page 0
+free_buf_info 1
+free_cmd 0
+free_cmd_box 1
+free_conn 0
+free_context 0
+free_cpumask_var 0
+free_dca_provider 0
+free_device_state 0
+free_dev_ioctl 0
+free_event_entry 0
+free_fake_cpuc 0
+free_flex_gd 0
+free_fw_cache_entry 0
+free_hba 0
+free_i7core_dev 0
+free_imon_context 0
+free_ipath 0
+free_irq_cfg 1
+free_link_state 0
+free_local_pdev 0
+free_log_tree 1
+free_map_info 0
+free_msg 0
+free_ncci 1
+free_param_target 0
+free_partition 0
+free_partitions 0
+free_pasid_state 0
+free_pgpath 0
+free_pipe_info 0
+free_pl 0
+free_plci 1
+free_sbridge_dev 0
+free_sched_domains 0
+free_sched_group 0
+free_symbol_cache 0
+free_sysfs_super_info 0
+free_trace_uprobe 0
+free_trial_cpuset 0
+free_tty_struct 0
+free_usb_address 1
+free_watch_adapter 0
+__free_xattr 0
+fsnotify_final_destroy_group 0
+fs_path_free 0
+ftl_erase_callback 0
+ftrace_free_entry 0
+fuse_file_free 0
+fuse_free_conn 0
+fwnet_pd_delete 0
+fwnet_receive_packet 1
+garp_attr_destroy 1
+gcov_iter_free 0
+gc_remove 0
+gen_pool_destroy 0
+gf128mul_free_4k 0
+gf128mul_free_64k 0
+gntdev_free_map 0
+gred_destroy_vq 0
+groups_free 0
+gsm_free_mux 0
+gss_do_free_ctx 0
+gss_free_cred 0
+hashtab_destroy 0
+hfs_bnode_free 0
+hfsplus_bnode_free 0
+hid_free_report 0
+hidinput_cleanup_hidinput 1
+hsi_free_msg 0
+hso_free_shared_int 0
+htb_destroy_class 1
+i2c_tiny_usb_free 0
+i2o_block_device_free 0
+i2o_exec_wait_free 0
+i915_error_object_free 0
+ib_dealloc_device 0
+ibft_kobj_release 0
+ibmpex_bmc_delete 0
+idmouse_delete 0
+ieee80211_key_free_common 0
+if_spi_h2c 1
+iio_buffer_remove_and_free_scan_dev_attr 1
+iio_channel_release_all_cb 0
+iio_dealloc_pollfunc 0
+iio_device_remove_and_free_read_attr 1
+intel_crt_destroy 0
+intel_dvo_destroy 0
+intel_hdmi_destroy 0
+intel_set_config_free 0
+intel_tv_destroy 0
+ioeventfd_release 0
+iommu_domain_free 0
+iowarrior_delete 0
+ip6mr_free_table 0
+ipack_bus_unregister 0
+ipath_user_sdma_queue_destroy 0
+ipmr_free_table 0
+__ipoctal_remove 0
+ip_options_get_finish 2
+ip_vs_app_inc_destroy 0
+ip_vs_dest_dst_free 0
+ip_vs_service_free 0
+ip_vs_sync_buff_release 0
+ipwireless_network_free 0
+__ircomm_close 0
+__ircomm_tty_cleanup 0
+__irda_task_delete 0
+__iriap_close 0
+__irias_delete_attrib 0
+__irias_delete_object 0
+irias_delete_value 0
+__irlap_close 0
+__irlmp_close_lsap 0
+isdn_v110_close 0
+iwch_free_fastreg_pbl 0
+iwl_trans_pcie_free 0
+jffs2_free_full_dirent 0
+kbd_disconnect 0
+kvm_arch_free_vm 0
+lapb_free_cb 0
+libipw_txb_free 0
+loop_remove 0
+lpfc_els_free_bpl 1
+lpfc_els_hbq_free 1
+lpfc_free_ct_rsp 1
+lpfc_hba_free 0
+lpfc_sli4_rb_free 1
+mac_destroy 0
+mac_hid_emumouse_disconnect 0
+mce_device_release 0
+mdiobus_free 0
+md_unplug 0
+mei_io_cb_free 0
+mempool_kfree 0
+__mesh_table_free 0
+mga_connector_destroy 0
+mgag200_i2c_destroy 0
+mgag200_ttm_backend_destroy 0
+minstrel_free 0
+mlx4_en_filter_free 0
+mmc_free_ext_csd 0
+mmc_test_free_mem 0
+move_node 2
+mpi_free_limb_space 0
+mpt_adapter_dispose 0
+mptsas_port_delete 1
+mrp_attr_destroy 1
+mthca_free_mailbox 1
+mv88e1xxx_destroy 0
+mv88x201x_destroy 0
+mwifiex_unregister 0
+my3126_destroy 0
+netlink_consume_callback 0
+netlink_destroy_callback 0
+nfc_llc_free 0
+nfc_llcp_free_sdp_tlv 0
+nfc_mei_phy_free 0
+nfs3_free_createdata 0
+nfs41_free_stateid_release 0
+nfs4_delegreturn_release 0
+nfs4_free_open_state 0
+nfs4_free_pages 0
+nfs4_release_lockowner_release 0
+nfs4_remove_reclaim_record 0
+nfs_free_createdata 0
+nfs_free_unlinkdata 0
+n_hdlc_release 0
+nouveau_abi16_ntfy_fini 1
+nouveau_gem_object_del 0
+nouveau_object_destroy 0
+nv50_dac_destroy 0
+nv50_pior_destroy 0
+nv50_sor_destroy 0
+nv_poweroff_work 0
+ocfs2_free_refcount_tree 0
+_osd_request_free 0
+osst_release_request 0
+ovs_vport_free 0
+oz_isoc_stream_free 0
+p9_idpool_destroy 0
+padata_free_pd 0
+pci_mmconfig_remove 0
+pcxhr_chip_free 0
+pcxhr_free 0
+perm_destroy 0
+perm_destroy 1
+pkt_free_packet_data 0
+pm3393_destroy 0
+pmu_dev_release 0
+pnp_free_resource 0
+portman_free 0
+pps_device_destruct 0
+psb_intel_i2c_destroy 0
+psb_mmu_driver_takedown 0
+psb_mmu_free_pt 0
+pstore_ftrace_seq_stop 1
+pt1_free_adapter 0
+put_nfs_open_dir_context 0
+pvr2_hdw_destroy 0
+pvr2_sysfs_release 0
+pvr2_v4l2_destroy_no_lock 0
+qib_free_fast_reg_page_list 0
+qib_user_sdma_queue_destroy 0
+qlcnic_sriov_cleanup_transaction 0
+qlt_release 0
+qp_host_free_queue 0
+queue_delete 0
+quickstart_button_del 0
+qxl_ring_free 0
+r10bio_pool_free 0
+r1bio_pool_free 0
+r8712_free_cmd_obj 0
+r8712_getbbrfreg_cmdrsp_callback 1
+r8712_readtssi_cmdrsp_callback 1
+radeon_connector_destroy 0
+radeon_dp_connector_destroy 0
+radeon_i2c_destroy 0
+radeon_vm_bo_rmv 1
+range_tr_destroy 0
+range_tr_destroy 1
+rate_control_pid_free_sta 2
+__rds_put_mr_final 0
+realloc_argv 1
+recent_entry_remove 1
+redrat3_delete 0
+regmap_del_irq_chip 1
+regmap_field_free 0
+regmap_mmio_free_context 0
+release_memory_resource 0
+__remove_pg_pool 1
+__remove_xattr 1
+rem_res_tree 0
+rfkill_disconnect 0
+rio_release_outb_dbell 1
+role_destroy 0
+role_destroy 1
+rose_remove_node 0
+rose_remove_route 0
+rpc_destroy_pipe_data 0
+rpc_free_iostats 0
+rtd_release 0
+saa7164_buffer_dealloc_user 0
+sbp_free_request 0
+sbp_management_agent_unregister 0
+sbp_target_agent_unregister 0
+sb_register_oss 0
+sb_unload 0
+selinux_release_secctx 0
+selinux_tun_dev_free_security 0
+sens_destroy 0
+sens_destroy 1
+slhc_free 0
+smsdvb_unregister_client 0
+smtc_free_fb_info 0
+snd_ak4113_free 0
+snd_ak4114_free 0
+snd_ak4117_free 0
+snd_ca0106_free 0
+snd_card_do_free 0
+snd_cs5530_free 0
+snd_cs5535audio_free 0
+snd_emu10k1_free 0
+snd_hda_bus_free 0
+snd_hwdep_free 0
+snd_i2c_device_free 0
+snd_lx6464es_free 0
+snd_midi_channel_free_set 0
+snd_mixart_chip_free 0
+snd_mixart_free 0
+snd_mts64_free 0
+snd_opl3_free 0
+snd_pcm_oss_release_file 0
+snd_pcm_plugin_free 0
+snd_sbdsp_free 0
+snd_seq_device_free 0
+snd_uart16550_free 0
+snd_usb_audio_free 0
+snd_usb_mixer_free 0
+__snd_util_mem_free 1
+snd_util_memhdr_free 0
+snd_vx222_free 0
+solo_enc_free 0
+_sp2d_free 0
+squashfs_cache_delete 0
+src_mgr_destroy 0
+st_release_request 0
+stub_device_free 0
+sum_mgr_destroy 0
+system_root_device_release 0
+t1_espi_destroy 0
+t1_tp_destroy 0
+target_fabric_configfs_free 0
+__team_option_inst_del 0
+tgfx_remove 0
+tipc_free_entry 0
+tomoyo_memory_free 0
+tower_delete 0
+tpci200_release_device 0
+ttm_transfered_destroy 0
+tty_audit_buf_free 0
+type_destroy 0
+type_destroy 1
+udl_connector_destroy 0
+udl_crtc_destroy 0
+udl_enc_destroy 0
+unifi_free_card 0
+_unload_intf_hdl 0
+unregister_from_lirc 0
+unx_free_cred 0
+usb_cleanup 0
+usb_free_descriptors 0
+usbhsh_ureq_free 1
+usblp_cleanup 0
+usb_pcwd_delete 0
+user_destroy 0
+user_destroy 1
+v4l2_m2m_release 0
+vb2_dma_contig_cleanup_ctx 0
+vb2_put_vma 0
+vcs_poll_data_free 0
+vfio_group_unlock_and_free 0
+via_aux_free 0
+vic_provinfo_free 0
+video_device_release 0
+vmci_handle_arr_destroy 0
+vme_dma_free_attribute 0
+vme_dma_list_free 0
+vme_lm_free 0
+vme_slave_free 0
+vmw_sou_destroy 0
+__vxge_hw_channel_free 0
+w1_slave_detach 0
+wl1271_rx_filter_free 0
+wlc_phy_shim_detach 0
+w_resync_finished 0
+xencons_free 0
+xen_pcibk_config_field_free 0
+xfrm_policy_destroy 0
+xhci_free_container_ctx 1
+xhci_segment_free 1
+xt_unregister_table 0
+xz_dec_lzma2_end 0
+zbud_destroy_pool 0
+zoran_vdev_release 0
+zram_meta_free 0
+zs_destroy_pool 0
--- /dev/null	Fri Dec 21 15:00:21 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.frees_argument.remove	Fri Dec 21 15:00:21 2018
@@ -0,0 +1,7 @@
+free_cell 0
+free_scq 0
+free_scq 1
+setup_card 0
+krealloc 0
+free_urbs 0
+free_area 0
--- /dev/null	Fri Dec 21 15:00:22 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.gfp_flags	Fri Dec 21 15:00:22 2018
@@ -0,0 +1,230 @@
+// list of GFP flag parameters.
+// generated by `gen_gfp_flags.sh`
+aa_alloc_file_context 0
+aa_alloc_task_context 0
+aligned_kmalloc 1
+alloc_buffer 1
+alloc_bulk_urbs_generic 5
+alloc_cmd_box 1
+alloc_cpu_rmap 1
+alloc_ep 1
+alloc_new_range 2
+__alloc_objio_seg 1
+alloc_pl 0
+alloc_send_rmpp_list 1
+alloc_ts_config 1
+alloc_workqueue_attrs 0
+apparmor_cred_alloc_blank 1
+apparmor_cred_prepare 2
+array_zalloc 2
+asd_alloc_edbs 1
+asd_alloc_escbs 1
+ath_rate_alloc_sta 2
+b44_alloc_consistent 1
+bch_bio_split 2
+bio_alloc 0
+bio_alloc_bioset 0
+bio_alloc_drbd 0
+bio_alloc_map_data 2
+bio_alloc_mddev 0
+bio_chain_clone 1
+bio_clone 1
+bio_clone_bioset 1
+bio_clone_kmalloc 1
+bio_clone_mddev 1
+bio_clone_range 3
+bio_integrity_alloc 1
+bio_integrity_clone 2
+bio_kmalloc 0
+bio_kmalloc 1
+__bio_map_kern 3
+bio_map_kern 3
+bl_alloc_layout_hdr 1
+bl_alloc_lseg 2
+blk_rq_prep_clone 3
+bm_init 2
+bnx2_alloc_rx_data 3
+br_netpoll_enable 1
+btrfs_bio_alloc 3
+btrfs_bio_clone 1
+btrfs_dio_bio_alloc 2
+btrfs_io_bio_alloc 0
+call_usermodehelper_setup 3
+carl9170_usb_alloc_rx_urb 1
+cas_page_alloc 1
+ceph_alloc_page_vector 1
+ceph_buffer_new 1
+ceph_create_snap_context 1
+cfg80211_inform_bss 9
+compressed_bio_alloc 2
+core_tmr_alloc_req 3
+create_endpoint_and_queue_bulk 7
+create_endpoint_and_queue_control 5
+create_endpoint_and_queue_int 7
+cxgbi_alloc_big_mem 1
+_dev_list_add 3
+devm_kzalloc 1
+devres_open_group 2
+drm_mm_get_block_generic 4
+drm_mm_get_block_range_generic 6
+drm_mm_kmalloc 1
+dummy_urb_enqueue 2
+dwc2_hcd_qh_create 2
+dwc2_hcd_qtd_add 3
+dwc2_hcd_urb_alloc 2
+dwc2_hcd_urb_enqueue 3
+dwc3_gadget_ep_alloc_request 1
+ehci_mem_init 1
+ep_alloc_request 1
+ext4_kvmalloc 1
+ext4_kvzalloc 1
+__fa_get_part 2
+fb_alloc_cmap_gfp 3
+filelayout_alloc_layout_hdr 1
+filelayout_alloc_lseg 2
+flex_array_alloc 2
+flush_entry_alloc 0
+fotg210_ep_alloc_request 1
+fsm_init 2
+__fuse_request_alloc 1
+get_1284_register 3
+get_swap_bio 0
+goku_alloc_request 1
+gss_import_sec_context 5
+gss_import_sec_context_kerberos 4
+heap_init 2
+hsi_alloc_controller 1
+hsi_alloc_msg 1
+ib_sa_guid_info_rec_query 7
+ib_sa_mcmember_rec_query 7
+ib_sa_path_rec_get 6
+ib_sa_service_rec_query 7
+ioat2_alloc_ring 2
+ioat_dma_alloc_descriptor 1
+iso_sched_alloc 1
+iso_stream_alloc 0
+itd_urb_transaction 3
+kcalloc 2
+kcryptd_io_read 1
+kdb_strdup 1
+__kmalloc 1
+kmalloc 1
+kmalloc_array 2
+kmp_init 2
+kstruprdup 1
+kzalloc 1
+libipw_alloc_txb 3
+m66592_alloc_request 1
+mca_bucket_alloc 2
+mempool_kmalloc 0
+minstrel_alloc_sta 2
+minstrel_ht_alloc_sta 2
+mpage_alloc 3
+mthca_alloc_mailbox 1
+mv_alloc_request 1
+mv_u3d_alloc_request 1
+net2272_alloc_request 1
+net2280_alloc_request 1
+netlbl_secattr_alloc 0
+netlbl_secattr_cache_alloc 0
+netlbl_secattr_catmap_alloc 0
+netlbl_secattr_catmap_setbit 2
+netlbl_secattr_catmap_setrng 3
+new_task_smack 2
+new_writequeue_entry 1
+nfs4_alloc_pages 1
+nfs4_alloc_state_owner 2
+nfs4_find_or_create_slot 3
+nfs4_label_alloc 1
+nfs4_new_slot 3
+nfs4_pnfs_remotestr 1
+nfs_alloc_seqid 1
+objio_alloc_lseg 4
+objlayout_alloc_layout_hdr 1
+_osd_request_alloc 0
+osd_start_request 1
+oz_build_endpoints_for_interface 3
+oz_ep_alloc 0
+pch_udc_alloc_request 1
+pool_alloc_page 1
+posix_acl_alloc 1
+posix_acl_from_mode 1
+pscsi_get_bio 0
+pxa_ep_alloc_request 1
+qla2x00_alloc_fcport 1
+qset_add_urb 3
+qset_add_urb_sg 3
+qset_fill_page_list 2
+qset_new_std 3
+r10bio_pool_alloc 0
+r10buf_pool_alloc 0
+r1bio_pool_alloc 0
+r1buf_pool_alloc 0
+r8a66597_alloc_request 1
+rate_control_pid_alloc_sta 2
+rcu_string_strdup 1
+rds_ib_conn_alloc 1
+rds_iw_conn_alloc 1
+rds_loop_conn_alloc 1
+rds_message_alloc 1
+request_firmware_nowait 4
+resize_iovec 1
+rfcomm_dlc_alloc 0
+rpipe_get_idle 3
+rtl_rate_alloc_sta 2
+rx_alloc_submit 1
+sctp_add_bind_addr 3
+sctp_association_new 3
+sctp_auth_asoc_set_secret 3
+sctp_auth_create_key 1
+sctp_auth_shkey_create 1
+sctp_bind_addr_copy 4
+sctp_bind_addr_dup 2
+sctp_bind_addrs_to_raw 2
+sctp_copy_one_addr 4
+sctp_datamsg_new 0
+sctp_endpoint_new 1
+sctp_make_init_ack 2
+sctp_transport_new 2
+sctp_tsnmap_init 3
+sdebug_device_create 1
+sdev_evt_alloc 1
+sdev_evt_send_simple 2
+security_context_to_sid_core 4
+security_context_to_sid_default 4
+selinux_cred_alloc_blank 1
+selinux_sk_alloc_security 2
+set_1284_register 3
+sg_kmalloc 1
+sierra_setup_urb 5
+sitd_urb_transaction 3
+smack_cred_alloc_blank 1
+smack_cred_prepare 2
+srp_alloc_iu 2
+sta_info_alloc 2
+submit_async_request 5
+target_submit_tmr 6
+team_port_enable_netpoll 2
+ubi_zalloc_vid_hdr 1
+udc_alloc_request 1
+ulist_alloc 0
+update_display_visual 1
+usb_alloc_urb 1
+usbhsg_ep_alloc_request 1
+usbhsh_data_stage_packet_push 3
+usbhsh_endpoint_attach 2
+usbhsh_queue_push 2
+usbhsh_status_stage_packet_push 3
+usbhsh_ureq_alloc 2
+vic_provinfo_alloc 0
+xfrm_policy_alloc 1
+xhci_alloc_command 3
+xhci_alloc_container_ctx 2
+xhci_alloc_segments_for_ring 6
+xhci_alloc_tt_info 4
+xhci_ring_alloc 4
+xhci_ring_expansion 3
+xhci_segment_alloc 2
+xpc_kmalloc_cacheline_aligned 1
+xpc_kzalloc_cacheline_aligned 1
+zbud_create_pool 0
--- /dev/null	Fri Dec 21 15:00:22 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.ignore_macro_indenting	Fri Dec 21 15:00:22 2018
@@ -0,0 +1,6 @@
+while_each_pid_thread
+while_each_pid_task
+LOCKDEP_STATE
+get_user_catch
+put_user_catch
+tcp_skb_tsorted_restore
--- /dev/null	Fri Dec 21 15:00:22 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.ignore_memcpy_struct_overflows	Fri Dec 21 15:00:22 2018
@@ -0,0 +1,3 @@
+/* list for struct types to ignore */
+lpfc_fdmi_attr_entry
+be_cmd_req_hdr
--- /dev/null	Fri Dec 21 15:00:22 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.ignore_side_effects	Fri Dec 21 15:00:22 2018
@@ -0,0 +1,67 @@
+/*
+ * Manually created.
+ *
+ * Most of these have intentional side effects.
+ * Some of them like put_user() and friends, have side effects when __CHECKER__
+ * is defined but not in the compiled kernel.
+ */
+ADD_STA_STATS
+ARCH_DLINFO
+AWDATA
+ENCODE
+ENCODE_DATA
+ENCODE_STR
+get_child
+get_child_rcu
+get_unaligned
+get_user
+__get_user
+__get_user_nocheck
+hybrid_tuner_request_state
+iterate_bvec
+iterate_all_kinds
+lookup
+lookup_rightempty
+MAKE_RAW_BYTE
+MAKE_RAW_BYTE_56K
+mdelay
+MsgHead
+MUL64
+NEW_AUX_ENT
+nh_vmac_nhbytes
+ntohl
+OUT_RING_REG
+poly_step
+PUT_BYTE
+put_short
+put_user
+__put_user
+__put_user_nocheck
+R128_WAIT_UNTIL_PAGE_FLIPPED
+R600_CLEAR_AGE
+R600_DISPATCH_AGE
+R600_FRAME_AGE
+RADEON_CLEAR_AGE
+RADEON_DISPATCH_AGE
+RADEON_FLUSH_CACHE
+RADEON_FRAME_AGE
+RADEON_PURGE_CACHE
+RADEON_PURGE_ZCACHE
+RADEON_WAIT_UNTIL_2D_IDLE
+RADEON_WAIT_UNTIL_3D_IDLE
+RADEON_WAIT_UNTIL_IDLE
+RCU_INIT_POINTER
+READ64
+rtnl_dereference
+send_bits
+send_code
+SOCK_ADDR_LOAD_NESTED_FIELD
+SOCK_ADDR_LOAD_NESTED_FIELD_SIZE_OFF
+SOCK_ADDR_LOAD_OR_STORE_NESTED_FIELD_SIZE_OFF
+SOCK_ADDR_LOAD_OR_STORE_NESTED_FIELD
+SOCK_OPS_GET_TCP32
+unsafe_get_user
+unsafe_put_user
+VIA_OUT_RING_QW
+WRITE64
+Z
--- /dev/null	Fri Dec 21 15:00:22 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.ignore_uninitialized_param	Fri Dec 21 15:00:22 2018
@@ -0,0 +1,104 @@
+regmap_read 2
+regmap_fields_read 2
+visorchannel_read 2
+dmam_alloc_coherent 2
+diva_pci_alloc_consistent 2
+read_mos_reg 3
+adp5520_read 2
+gameport_cooked_read 2
+max3100_sr 1
+sata_scr_read 2
+svia_scr_read 2
+lp8788_read_byte 2
+qla83xx_rd_reg 2
+cciss_read_capacity 2
+cciss_read_capacity 3
+rio_mport_read_config_32 4
+acpi_read 0
+axi_clkgen_mmcm_read 2
+intel_msic_irq_read 2
+pci_user_read_config_word 2
+ec_read 1
+sony_call_snc_handle 2
+pci_user_read_config_word 2
+read_reg_fp 2
+vid_blk_read_word 2
+mc417_memory_read 2
+stv06xx_read_sensor 2
+lm90_read_reg 2
+read_mii_word 3
+read_eprom_word 2
+generic_ocp_read 2
+lan78xx_read_reg 2
+com20020_copy_from_card 3
+wl3501_get_from_wla 2
+ipw_get_ordinal 2
+generic_ocp_read 3
+et131x_mii_read 2
+ql_mii_read_reg 2
+atl1c_read_phy_dbg 2
+atl2_read_phy_reg 2
+atl1_read_phy_reg 2
+pch_gbe_hal_read_phy_reg 2
+t1_tpi_read 2
+rio_local_read_config_32 2
+acpi_smbus_read 4
+pci_read_config_dword 2
+viafb_i2c_readbyte 3
+bap_read 1
+of_get_property 2
+of_property_read_u32 2
+of_property_read_u8 2
+of_property_read_u16 2
+of_property_read_u32_index 3
+intel_gvt_hypervisor_read_gpa 2
+cs5536_read 1
+__amd64_read_pci_cfg_dword 2
+e1e_rphy 2
+imx_phy_reg_read 0
+chipio_read 0
+had_read_register 1
+qcaspi_read_register 2
+mv88e6xxx_g2_read 2
+b53_read8 3
+b53_read16 3
+b53_read32 3
+b53_read48 3
+b53_read64 3
+dvbtqam_get_acc_pkt_err 1
+ch7xxx_readb 2
+ivch_read 2
+tvp7002_read 2
+rtsx_pci_read_register 2
+rtsx_usb_ep0_read_register 2
+__t1_tpi_read 2
+smsc95xx_read_reg 2
+pci_user_read_config_dword 2
+da903x_read 2
+rio_read_config_8 2
+rio_read_config_16 2
+rio_read_config_32 2
+__ad7280_read32 1
+rtsx_read_cfg_dw 3
+lola_read_param 3
+soc_dapm_read 2
+read_nic_byte 2
+amd_smn_read 2
+meson_ao_cec_read 2
+pci_read_config_byte 2
+pci_read_config_word 2
+i40e_read_nvm_word 2
+stk_camera_read_reg 2
+cnl_get_buf_trans_edp 1
+cnl_get_buf_trans_dp 1
+intel_ddi_get_buf_trans_edp 1
+intel_ddi_get_buf_trans_dp 1
+cnl_get_buf_trans_hdmi 1
+iosf_mbi_read 3
+lola_codec_read 5
+chipio_read 2
+pcxhr_write_io_num_reg_cont 3
+read_current_timer 0
+pwrap_read 2
+dibusb_read_eeprom_byte 2
+of_fdt_unflatten_tree 2
--- /dev/null	Fri Dec 21 15:00:22 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.ignored_macros	Fri Dec 21 15:00:22 2018
@@ -0,0 +1,21 @@
+/*
+ * These macros are actively misleading to smatch so 
+ * it's best to ignore them.
+ */
+WARN_ON
+B43legacy_WARN_ON
+B43_WARN_ON
+/* ASSERT can be worthwhile or bogus. */
+HPI_DEBUG_ASSERT
+snd_BUG_ON
+WARN_ON_ONCE
+ubi_assert
+bfa_assert
+ZD_ASSERT
+ubifs_assert
+AR_DEBUG_ASSERT
+RT_ASSERT
+SKD_ASSERT
+SNIC_BUG_ON
+LASSERT
+AA_BUG
--- /dev/null	Fri Dec 21 15:00:22 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.implicit_dependencies.no_structs	Fri Dec 21 15:00:22 2018
@@ -0,0 +1,610 @@
+C_SYSC_setsockopt read_list: [(struct proto_ops)->compat_setsockopt, ]
+C_SYSC_getsockopt read_list: [(struct proto_ops)->compat_getsockopt, ]
+SYSC_sendto read_list: [(struct file)->f_flags, ]
+SYSC_recvfrom read_list: [(struct file)->f_flags, ]
+SYSC_recvmmsg read_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct msghdr)->msg_flags, ]
+SYSC_bpf read_list: [(struct mm_segment_t)->seg, (struct bpf_map)->key_size, (struct bpf_map)->map_type, (union bpf_attr)->flags, (union bpf_attr)->prog_flags, (union bpf_attr)->insn_cnt, (union bpf_attr)->kern_version, (struct bpf_prog)->insns, (union bpf_attr)->bpf_fd, (struct bpf_verifier_ops)->test_run, (struct file)->private_data, ]
+SYSC_rt_sigtimedwait read_list: [(struct task_struct)->timer_slack_ns, (struct mm_segment_t)->seg, (struct siginfo)->si_code, (struct siginfo)->si_signo, ]
+C_SYSC_rt_sigtimedwait read_list: [(struct task_struct)->timer_slack_ns, ]
+SYSC_kill read_list: [(union anonymous)->__c, ]
+SYSC_rt_sigqueueinfo read_list: [(struct siginfo)->si_code, ]
+C_SYSC_rt_sigqueueinfo read_list: [(struct siginfo)->si_code, ]
+SYSC_rt_tgsigqueueinfo read_list: [(struct siginfo)->si_code, ]
+C_SYSC_rt_tgsigqueueinfo read_list: [(struct siginfo)->si_code, ]
+SYSC_rt_sigaction read_list: [(union anonymous)->__c, (union anonymous)->__c, ]
+C_SYSC_rt_sigaction read_list: [(union anonymous)->__c, (union anonymous)->__c, ]
+C_SYSC_sigaction read_list: [(struct mm_segment_t)->seg, (union anonymous)->__c, (union anonymous)->__c, ]
+SYSC_signal read_list: [(union anonymous)->__c, (union anonymous)->__c, ]
+SYSC_delete_module read_list: [(union anonymous)->__c, (struct module)->state, (struct module)->init, (struct module)->exit, ]
+SYSC_init_module read_list: [(struct load_info)->len, (struct module)->name, (struct module)->args, (struct load_info)->num_debug, (struct module)->num_kp, (struct module_layout)->base, (struct module_layout)->size, ]
+SYSC_finit_module read_list: [(struct module)->name, (struct module)->args, (struct load_info)->num_debug, (struct module)->num_kp, (struct module_layout)->base, (struct module_layout)->size, ]
+SYSC_ptrace read_list: [(struct task_struct)->ptrace, (struct task_struct)->flags, (struct task_struct)->exit_state, (struct task_struct)->state, ]
+C_SYSC_ptrace read_list: [(struct task_struct)->ptrace, (struct task_struct)->flags, (struct task_struct)->exit_state, (struct task_struct)->state, ]
+SYSC_unshare read_list: [(struct fs_struct)->users, (union anonymous)->__c, ]
+C_SYSC_sigprocmask read_list: [(struct sigset_t)->sig, ]
+C_SYSC_sched_getaffinity read_list: [(struct cpumask)->bits, ]
+C_SYSC_migrate_pages read_list: [(struct mm_segment_t)->seg, (struct nodemask_t)->bits, ]
+SYSC_perf_event_open read_list: [(struct mm_segment_t)->seg, (struct perf_event_attr)->__reserved_1, (struct perf_event_attr)->sample_type, (struct perf_event_attr)->read_format, (struct perf_event_attr)->exclude_kernel, (struct perf_event_attr)->exclude_user, (struct perf_event_attr)->exclude_hv, (struct perf_event_attr)->sample_regs_user, (struct perf_event_attr)->sample_stack_user, (struct perf_event_attr)->sample_stack_user, (struct perf_event_attr)->sample_regs_intr, (struct perf_event_attr)->namespaces, (struct perf_event_attr)->freq, (struct perf_event_attr)->sample_freq, (struct perf_event_attr)->sample_period, (struct perf_event_attr)->sample_max_stack, (struct perf_event_attr)->inherit, (struct hw_perf_event)->sample_period, (struct pmu)->nr_addr_filters, (struct perf_event)->addr_filters_offs, (struct perf_event)->destroy, (struct pmu)->capabilities, (struct perf_event_attr)->use_clockid, (struct pmu)->task_ctx_nr, (struct perf_event)->event_caps, (struct perf_event)->group_caps, (struct perf_event)->attach_state, (struct pmu)->task_ctx_size, (struct perf_event_context)->task_ctx_data, (struct task_struct)->flags, (union anonymous)->__c, (union anonymous)->__c, (struct perf_event)->clock, (struct perf_event)->cpu, (struct perf_event_attr)->exclusive, (struct perf_event_attr)->pinned, (union anonymous)->__c, (struct perf_event)->read_size, (struct perf_event)->header_size, (struct perf_event)->id_header_size, (struct perf_cpu_context)->online, (struct perf_event_attr)->disabled, (union anonymous)->__c, (union anonymous)->__c, (struct perf_event)->nr_siblings, (struct fd)->flags, ]
+SYSC_futex read_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct timespec)->tv_nsec, ]
+SYSC_setpriority read_list: [(union anonymous)->__c, ]
+SYSC_getpriority read_list: [(union anonymous)->__c, ]
+SYSC_setpgid read_list: [(struct task_struct)->exit_signal, (struct task_struct)->flags, (struct signal_struct)->leader, ]
+sys_setsid read_list: [(struct signal_struct)->leader, ]
+SYSC_newuname read_list: [(struct task_struct)->personality, (struct new_utsname)->release, (struct new_utsname)->machine, ]
+SYSC_uname read_list: [(struct task_struct)->personality, (struct old_utsname)->release, (struct old_utsname)->machine, ]
+SYSC_olduname read_list: [(struct mm_segment_t)->seg, (struct oldold_utsname)->machine, (struct task_struct)->personality, (struct oldold_utsname)->release, ]
+SYSC_gethostname read_list: [(struct new_utsname)->nodename, ]
+C_SYSC_setrlimit read_list: [(struct compat_rlimit)->rlim_cur, (struct compat_rlimit)->rlim_max, ]
+C_SYSC_getrlimit read_list: [(struct rlimit)->rlim_cur, (struct rlimit)->rlim_max, ]
+SYSC_old_getrlimit read_list: [(struct rlimit)->rlim_cur, (struct rlimit)->rlim_max, ]
+C_SYSC_old_getrlimit read_list: [(struct rlimit)->rlim_cur, (struct rlimit)->rlim_max, ]
+SYSC_prlimit64 read_list: [(struct rlimit64)->rlim_cur, (struct rlimit64)->rlim_max, (union anonymous)->__c, (struct rlimit)->rlim_cur, (struct rlimit)->rlim_max, ]
+SYSC_setrlimit read_list: [(struct rlimit)->rlim_cur, (struct rlimit)->rlim_max, ]
+SYSC_getrusage read_list: [(struct signal_struct)->maxrss, ]
+C_SYSC_getrusage read_list: [(struct signal_struct)->maxrss, ]
+SYSC_prctl read_list: [(struct mm_struct)->flags, (struct task_struct)->timer_slack_ns, (struct task_struct)->flags, (struct task_struct)->personality, ]
+SYSC_sysinfo read_list: [(struct timespec)->tv_nsec, (struct sysinfo)->loads, (struct sysinfo)->totalram, (struct sysinfo)->totalswap, ]
+C_SYSC_sysinfo read_list: [(struct timespec)->tv_nsec, (struct sysinfo)->loads, (struct sysinfo)->totalram, (struct sysinfo)->totalswap, (struct sysinfo)->mem_unit, (struct mm_segment_t)->seg, ]
+SYSC_setns read_list: [(struct proc_ns_operations)->type, ]
+SYSC_timer_create read_list: [(struct k_clock)->timer_create, ]
+C_SYSC_timer_create read_list: [(struct k_clock)->timer_create, ]
+SYSC_timer_gettime read_list: [(struct k_clock)->timer_get, ]
+C_SYSC_timer_gettime read_list: [(struct k_clock)->timer_get, ]
+SYSC_timer_settime read_list: [(struct k_clock)->timer_set, ]
+C_SYSC_timer_settime read_list: [(struct k_clock)->timer_set, ]
+SYSC_timer_delete read_list: [(struct k_clock)->timer_del, ]
+SYSC_clock_settime read_list: [(struct k_clock)->clock_set, ]
+SYSC_clock_adjtime read_list: [(struct k_clock)->clock_adj, ]
+C_SYSC_clock_settime read_list: [(struct k_clock)->clock_set, ]
+C_SYSC_clock_adjtime read_list: [(struct k_clock)->clock_adj, ]
+SYSC_clock_nanosleep read_list: [(struct k_clock)->nsleep, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+C_SYSC_clock_nanosleep read_list: [(struct k_clock)->nsleep, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+SYSC_getitimer read_list: [(struct signal_struct)->it_real_incr, ]
+C_SYSC_getitimer read_list: [(struct signal_struct)->it_real_incr, ]
+SYSC_alarm read_list: [(struct timeval)->tv_sec, (struct timeval)->tv_usec, ]
+SYSC_setitimer read_list: [(struct timeval)->tv_sec, (struct timeval)->tv_usec, (struct signal_struct)->it_real_incr, ]
+C_SYSC_setitimer read_list: [(struct timeval)->tv_sec, (struct timeval)->tv_usec, (struct signal_struct)->it_real_incr, ]
+SYSC_nanosleep read_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+C_SYSC_nanosleep read_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+SYSC_settimeofday read_list: [(struct timeval)->tv_sec, (struct timeval)->tv_usec, (struct timezone)->tz_minuteswest, ]
+C_SYSC_settimeofday read_list: [(struct timezone)->tz_minuteswest, ]
+SYSC_syslog read_list: [(struct mm_segment_t)->seg, ]
+C_SYSC_futex read_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct timespec)->tv_nsec, ]
+SYSC_sysctl read_list: [(struct __sysctl_args)->oldval, (struct __sysctl_args)->oldlenp, ]
+C_SYSC_sysctl read_list: [(struct compat_sysctl_args)->oldval, (struct compat_sysctl_args)->oldlenp, ]
+SYSC_membarrier read_list: [(struct cpumask)->bits, ]
+SYSC_sched_setattr read_list: [(struct mm_segment_t)->seg, (struct sched_attr)->sched_policy, ]
+SYSC_sched_getscheduler read_list: [(struct task_struct)->sched_reset_on_fork, ]
+SYSC_sched_getparam read_list: [(struct task_struct)->policy, ]
+SYSC_sched_getattr read_list: [(struct task_struct)->sched_reset_on_fork, (struct task_struct)->policy, (struct mm_segment_t)->seg, (struct sched_attr)->size, ]
+SYSC_sched_setaffinity read_list: [(struct task_struct)->flags, (union anonymous)->__c, (struct root_domain)->span, ]
+SYSC_sched_rr_get_interval read_list: [(struct rq_flags)->flags, (struct sched_class)->get_rr_interval, ]
+SYSC_acct read_list: [(struct file)->f_mode, ]
+SYSC_getgroups16 read_list: [(struct group_info)->ngroups, ]
+SYSC_setgroups16 read_list: [(struct group_info)->ngroups, ]
+SYSC_mremap read_list: [(struct task_struct)->personality, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, (struct vm_area_struct)->vm_pgoff, (struct mm_struct)->map_count, (struct vm_operations_struct)->mremap, ]
+SYSC_brk read_list: [(struct mm_struct)->start_brk, (struct mm_struct)->end_data, (struct mm_struct)->start_data, (struct mm_struct)->brk, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_start, (struct mm_struct)->def_flags, ]
+SYSC_remap_file_pages read_list: [(struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, ]
+SYSC_munlock read_list: [(struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, ]
+SYSC_mlockall read_list: [(struct mm_struct)->total_vm, (struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, (struct task_struct)->personality, ]
+sys_munlockall read_list: [(struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, ]
+SYSC_move_pages read_list: [(struct nodemask_t)->bits, ]
+SYSC_readahead read_list: [(struct file)->f_mode, (struct fd)->flags, ]
+SYSC_swapoff read_list: [(struct swap_info_struct)->flags, (struct swap_info_struct)->pages, (struct swap_info_struct)->prio, (struct page)->private, (struct swp_entry_t)->val, (struct swap_info_struct)->swap_map, (struct swap_info_struct)->inuse_pages, ]
+SYSC_swapon read_list: [(struct swap_info_struct)->flags, (union anonymous)->__c, (struct inode)->i_flags, (struct address_space_operations)->readpage, (struct cpumask)->bits, (struct swap_info_struct)->type, ]
+SYSC_mprotect read_list: [(struct task_struct)->personality, (struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_end, ]
+SYSC_pkey_mprotect read_list: [(struct task_struct)->personality, (struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_end, ]
+SYSC_pkey_alloc read_list: [(struct cpuinfo_x86)->x86_capability, (struct mm_context_t)->pkey_allocation_map, ]
+SYSC_mincore read_list: [(struct mm_segment_t)->seg, (struct vm_area_struct)->vm_start, ]
+SYSC_mbind read_list: [(struct nodemask_t)->bits, ]
+SYSC_set_mempolicy read_list: [(struct nodemask_t)->bits, (struct mempolicy)->mode, ]
+SYSC_migrate_pages read_list: [(struct nodemask_t)->bits, (struct nodemask_t)->bits, ]
+SYSC_get_mempolicy read_list: [(struct vm_operations_struct)->get_policy, (struct mempolicy)->mode, (struct task_struct)->il_prev, (struct nodemask_t)->bits, ]
+C_SYSC_mbind read_list: [(struct nodemask_t)->bits, ]
+SYSC_msync read_list: [(struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_flags, ]
+SYSC_fadvise64_64 read_list: [(struct inode)->i_flags, (struct fd)->flags, ]
+SYSC_madvise read_list: [(struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, ]
+sys_rt_sigreturn read_list: [(struct mm_segment_t)->seg, (struct thread_struct)->uaccess_err, ]
+SYSC_set_thread_area read_list: [(struct thread_struct)->fsindex, (struct thread_struct)->gsindex, ]
+sys_modify_ldt read_list: [(struct user_desc)->entry_number, (struct user_desc)->contents, (struct user_desc)->seg_not_present, (struct user_desc)->base_addr, (struct user_desc)->limit, (struct user_desc)->read_exec_only, (struct user_desc)->seg_32bit, (struct user_desc)->limit_in_pages, (struct user_desc)->useable, ]
+sys_ioperm read_list: [(struct thread_struct)->io_bitmap_ptr, ]
+SYSC_keyctl read_list: [(struct key)->description, (struct key_type)->name, (struct key)->perm, (struct key_type)->read, (struct key_user)->qnkeys, (struct key_user)->qnbytes, (struct key)->quotalen, (struct task_struct)->pid, (union anonymous)->__c, (struct key)->serial, ]
+SYSC_msgctl read_list: [(struct msqid64_ds)->msg_qbytes, (struct ipc_namespace)->msg_ctlmnb, ]
+SYSC_msgsnd read_list: [(struct ipc_namespace)->msg_ctlmax, ]
+SYSC_msgrcv read_list: [(struct msg_msg)->m_ts, (union anonymous)->__c, ]
+SYSC_mq_open read_list: [(struct filename)->name, ]
+SYSC_mq_timedsend read_list: [(struct file)->f_mode, (struct mq_attr)->mq_msgsize, (struct mq_attr)->mq_curmsgs, (struct mq_attr)->mq_maxmsg, (struct file)->f_flags, ]
+SYSC_mq_timedreceive read_list: [(struct file)->f_mode, (struct mq_attr)->mq_msgsize, (struct mq_attr)->mq_curmsgs, (struct file)->f_flags, (struct msg_msg)->m_ts, ]
+SYSC_mq_notify read_list: [(struct sigevent)->sigev_notify, (struct sigevent)->sigev_signo, (struct sk_buff)->data, (union sigval)->sival_ptr, ]
+SYSC_mq_getsetattr read_list: [(struct mq_attr)->mq_flags, ]
+C_SYSC_mq_open read_list: [(struct filename)->name, ]
+C_SYSC_mq_timedsend read_list: [(struct file)->f_mode, (struct mq_attr)->mq_msgsize, (struct mq_attr)->mq_curmsgs, (struct mq_attr)->mq_maxmsg, (struct file)->f_flags, ]
+C_SYSC_mq_timedreceive read_list: [(struct file)->f_mode, (struct mq_attr)->mq_msgsize, (struct mq_attr)->mq_curmsgs, (struct file)->f_flags, (struct msg_msg)->m_ts, ]
+C_SYSC_mq_notify read_list: [(struct sigevent)->sigev_notify, (struct sigevent)->sigev_signo, (struct sk_buff)->data, (union sigval)->sival_ptr, ]
+C_SYSC_mq_getsetattr read_list: [(struct mq_attr)->mq_flags, ]
+C_SYSC_msgctl read_list: [(struct mm_segment_t)->seg, ]
+C_SYSC_shmctl read_list: [(struct mm_segment_t)->seg, (struct shminfo64)->shmmax, ]
+SYSC_semctl read_list: [(struct sem_array)->sem_nsems, ]
+SYSC_semtimedop read_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct sembuf)->sem_num, (struct sembuf)->sem_flg, (struct sembuf)->sem_op, (struct sem_array)->sem_nsems, (struct sem_array)->use_global_lock, (union anonymous)->__c, (struct kern_ipc_perm)->deleted, (struct sem_undo)->semid, (struct sem_queue)->dupsop, (struct sem_array)->complex_count, (struct sem_queue)->nsops, ]
+SYSC_shmctl read_list: [(struct kern_ipc_perm)->deleted, (struct kern_ipc_perm)->mode, ]
+SYSC_shmdt read_list: [(struct vm_area_struct)->vm_pgoff, ]
+SYSC_quotactl read_list: [(struct filename)->name, (struct super_block)->s_quota_types, (struct quotactl_ops)->quota_sync, (struct super_block)->s_flags, ]
+SYSC_vmsplice read_list: [(struct file)->f_mode, (struct splice_desc)->total_len, (struct fd)->flags, ]
+SYSC_splice read_list: [(struct file)->f_mode, (struct file)->f_flags, (struct fd)->flags, ]
+SYSC_tee read_list: [(struct file)->f_mode, (struct fd)->flags, ]
+SYSC_io_setup read_list: [(struct kioctx)->req_batch, (struct kioctx)->max_reqs, (struct kioctx)->mmap_size, (struct kioctx)->mmap_base, (union anonymous)->__c, ]
+C_SYSC_io_setup read_list: [(struct kioctx)->req_batch, (struct kioctx)->max_reqs, (struct kioctx)->mmap_size, (struct kioctx)->mmap_base, (union anonymous)->__c, ]
+SYSC_io_destroy read_list: [(union anonymous)->__c, (struct kioctx_table)->nr, (struct kioctx)->user_id, (union anonymous)->__c, (struct kioctx)->max_reqs, (struct kioctx)->mmap_size, (struct kioctx)->mmap_base, ]
+SYSC_io_submit read_list: [(struct mm_segment_t)->seg, ]
+C_SYSC_io_submit read_list: [(struct mm_segment_t)->seg, ]
+SYSC_io_cancel read_list: [(union anonymous)->__c, (struct kioctx_table)->nr, (struct kioctx)->user_id, ]
+SYSC_io_getevents read_list: [(union anonymous)->__c, (struct kioctx_table)->nr, (struct kioctx)->user_id, (struct task_struct)->timer_slack_ns, ]
+SYSC_name_to_handle_at read_list: [(struct export_operations)->fh_to_dentry, (struct file_handle)->handle_bytes, ]
+SYSC_ioctl read_list: [(struct fd)->flags, ]
+SYSC_sysfs read_list: [(struct file_system_type)->name, (struct filename)->name, ]
+SYSC_signalfd4 read_list: [(struct fd)->flags, ]
+SYSC_stat read_list: [(struct task_struct)->comm, (struct kstat)->dev, (struct __old_kernel_stat)->st_ino, (struct kstat)->ino, (struct __old_kernel_stat)->st_nlink, (struct kstat)->nlink, (struct kstat)->rdev, ]
+SYSC_lstat read_list: [(struct task_struct)->comm, (struct kstat)->dev, (struct __old_kernel_stat)->st_ino, (struct kstat)->ino, (struct __old_kernel_stat)->st_nlink, (struct kstat)->nlink, (struct kstat)->rdev, ]
+SYSC_fstat read_list: [(struct task_struct)->comm, (struct kstat)->dev, (struct __old_kernel_stat)->st_ino, (struct kstat)->ino, (struct __old_kernel_stat)->st_nlink, (struct kstat)->nlink, (struct kstat)->rdev, ]
+SYSC_newstat read_list: [(struct kstat)->dev, (struct stat)->st_ino, (struct kstat)->ino, (struct stat)->st_nlink, (struct kstat)->nlink, (struct kstat)->rdev, ]
+SYSC_newlstat read_list: [(struct kstat)->dev, (struct stat)->st_ino, (struct kstat)->ino, (struct stat)->st_nlink, (struct kstat)->nlink, (struct kstat)->rdev, ]
+SYSC_newfstatat read_list: [(struct kstat)->dev, (struct stat)->st_ino, (struct kstat)->ino, (struct stat)->st_nlink, (struct kstat)->nlink, (struct kstat)->rdev, ]
+SYSC_newfstat read_list: [(struct kstat)->dev, (struct stat)->st_ino, (struct kstat)->ino, (struct stat)->st_nlink, (struct kstat)->nlink, (struct kstat)->rdev, ]
+SYSC_readlinkat read_list: [(struct inode_operations)->readlink, ]
+C_SYSC_newstat read_list: [(struct kstat)->dev, (struct kstat)->rdev, (struct compat_stat)->st_ino, (struct kstat)->ino, (struct compat_stat)->st_nlink, (struct kstat)->nlink, (struct kstat)->size, ]
+C_SYSC_newlstat read_list: [(struct kstat)->dev, (struct kstat)->rdev, (struct compat_stat)->st_ino, (struct kstat)->ino, (struct compat_stat)->st_nlink, (struct kstat)->nlink, (struct kstat)->size, ]
+C_SYSC_newfstatat read_list: [(struct kstat)->dev, (struct kstat)->rdev, (struct compat_stat)->st_ino, (struct kstat)->ino, (struct compat_stat)->st_nlink, (struct kstat)->nlink, (struct kstat)->size, ]
+C_SYSC_newfstat read_list: [(struct kstat)->dev, (struct kstat)->rdev, (struct compat_stat)->st_ino, (struct kstat)->ino, (struct compat_stat)->st_nlink, (struct kstat)->nlink, (struct kstat)->size, ]
+SYSC_old_readdir read_list: [(struct readdir_callback)->result, (struct fd)->flags, ]
+SYSC_getdents read_list: [(struct mm_segment_t)->seg, (struct fd)->flags, ]
+SYSC_getdents64 read_list: [(struct mm_segment_t)->seg, (struct fd)->flags, ]
+C_SYSC_old_readdir read_list: [(struct compat_readdir_callback)->result, (struct fd)->flags, ]
+C_SYSC_getdents read_list: [(struct mm_segment_t)->seg, (struct fd)->flags, ]
+SYSC_dup3 read_list: [(union anonymous)->__c, (struct fdtable)->max_fds, (struct files_struct)->resize_in_progress, (union anonymous)->__c, (union anonymous)->__c, (union anonymous)->__c, ]
+SYSC_fsetxattr read_list: [(struct fd)->flags, ]
+SYSC_fgetxattr read_list: [(struct fd)->flags, ]
+SYSC_flistxattr read_list: [(struct fd)->flags, ]
+SYSC_fremovexattr read_list: [(struct fd)->flags, ]
+SYSC_uselib read_list: [(struct vfsmount)->mnt_flags, (struct super_block)->s_iflags, (struct linux_binfmt)->load_shlib, ]
+SYSC_umount read_list: [(struct vfsmount)->mnt_flags, (struct super_operations)->umount_begin, (struct super_block)->s_flags, (struct task_struct)->flags, ]
+SYSC_mount read_list: [(struct task_struct)->personality, ]
+SYSC_pivot_root read_list: [(struct vfsmount)->mnt_flags, ]
+C_SYSC_mount read_list: [(struct ncp_mount_data)->mounted_vol, (struct compat_ncp_mount_data)->mounted_vol, (struct compat_nfs4_mount_data_v1)->auth_flavours, (struct compat_nfs4_mount_data_v1)->host_addr, ]
+SYSC_lseek read_list: [(struct fd)->flags, ]
+SYSC_llseek read_list: [(struct fd)->flags, ]
+SYSC_read read_list: [(struct fd)->flags, ]
+SYSC_write read_list: [(struct fd)->flags, ]
+SYSC_pread64 read_list: [(struct file)->f_mode, (struct fd)->flags, ]
+SYSC_pwrite64 read_list: [(struct file)->f_mode, (struct fd)->flags, ]
+SYSC_preadv read_list: [(struct file)->f_mode, ]
+SYSC_preadv2 read_list: [(struct file)->f_mode, ]
+SYSC_pwritev read_list: [(struct file)->f_mode, ]
+SYSC_pwritev2 read_list: [(struct file)->f_mode, ]
+C_SYSC_preadv64 read_list: [(struct file)->f_mode, ]
+C_SYSC_preadv read_list: [(struct file)->f_mode, ]
+C_SYSC_preadv64v2 read_list: [(struct file)->f_mode, ]
+C_SYSC_preadv2 read_list: [(struct file)->f_mode, ]
+C_SYSC_pwritev64 read_list: [(struct file)->f_mode, ]
+C_SYSC_pwritev read_list: [(struct file)->f_mode, ]
+C_SYSC_pwritev64v2 read_list: [(struct file)->f_mode, ]
+C_SYSC_pwritev2 read_list: [(struct file)->f_mode, ]
+SYSC_sendfile read_list: [(struct file)->f_mode, ]
+SYSC_sendfile64 read_list: [(struct file)->f_mode, ]
+C_SYSC_sendfile read_list: [(struct file)->f_mode, ]
+C_SYSC_sendfile64 read_list: [(struct file)->f_mode, ]
+SYSC_copy_file_range read_list: [(struct fd)->flags, ]
+SYSC_timerfd_create read_list: [(struct timerfd_ctx)->clockid, ]
+SYSC_timerfd_settime read_list: [(struct timerfd_ctx)->expired, (struct timerfd_ctx)->tintv, (struct timerfd_ctx)->tintv, ]
+SYSC_timerfd_gettime read_list: [(struct timerfd_ctx)->expired, (struct timerfd_ctx)->tintv, (struct timerfd_ctx)->tintv, ]
+C_SYSC_timerfd_settime read_list: [(struct timerfd_ctx)->expired, (struct timerfd_ctx)->tintv, (struct timerfd_ctx)->tintv, ]
+C_SYSC_timerfd_gettime read_list: [(struct timerfd_ctx)->expired, (struct timerfd_ctx)->tintv, (struct timerfd_ctx)->tintv, ]
+SYSC_select read_list: [(union anonymous)->__c, (struct fd_set_bits)->in, (struct fd_set_bits)->out, (struct fd_set_bits)->ex, (struct fd_set_bits)->res_in, (struct fd_set_bits)->res_out, (struct fd_set_bits)->res_ex, (struct task_struct)->personality, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+SYSC_pselect6 read_list: [(struct mm_segment_t)->seg, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+SYSC_poll read_list: [(struct poll_list)->entries, (struct poll_list)->len, ]
+SYSC_ppoll read_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct poll_list)->entries, (struct poll_list)->len, (struct task_struct)->personality, ]
+C_SYSC_select read_list: [(union anonymous)->__c, (struct fd_set_bits)->in, (struct fd_set_bits)->out, (struct fd_set_bits)->ex, (struct fd_set_bits)->res_in, (struct fd_set_bits)->res_out, (struct fd_set_bits)->res_ex, (struct task_struct)->personality, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+C_SYSC_pselect6 read_list: [(struct mm_segment_t)->seg, (struct compat_timespec)->tv_sec, (struct compat_timespec)->tv_nsec, ]
+C_SYSC_ppoll read_list: [(struct compat_timespec)->tv_sec, (struct compat_timespec)->tv_nsec, (struct poll_list)->entries, (struct poll_list)->len, (struct task_struct)->personality, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+SYSC_syncfs read_list: [(struct fd)->flags, ]
+SYSC_sync_file_range read_list: [(struct fd)->flags, ]
+SYSC_ftruncate read_list: [(struct file)->f_flags, (struct file)->f_mode, (struct inode)->i_flags, ]
+C_SYSC_ftruncate read_list: [(struct file)->f_flags, (struct file)->f_mode, (struct inode)->i_flags, ]
+SYSC_fallocate read_list: [(struct fd)->flags, ]
+SYSC_fchdir read_list: [(struct fd)->flags, ]
+SYSC_fchmod read_list: [(struct fd)->flags, ]
+SYSC_fchown read_list: [(struct fd)->flags, ]
+SYSC_utimensat read_list: [(struct timespec)->tv_nsec, ]
+SYSC_futimesat read_list: [(struct timeval)->tv_usec, (struct timespec)->tv_nsec, ]
+C_SYSC_utime read_list: [(struct timespec)->tv_nsec, ]
+C_SYSC_utimensat read_list: [(struct timespec)->tv_nsec, ]
+C_SYSC_futimesat read_list: [(struct timespec)->tv_nsec, ]
+SYSC_flock read_list: [(struct file)->f_mode, (struct file_operations)->flock, (struct super_block)->s_flags, (struct fd)->flags, ]
+SYSC_epoll_ctl read_list: [(struct file_operations)->poll, (struct epoll_event)->events, (union anonymous)->__c, (union anonymous)->__c, (struct epitem)->nwait, (struct fd)->flags, ]
+SYSC_epoll_wait read_list: [(struct mm_segment_t)->seg, (struct fd)->flags, ]
+C_SYSC_statfs read_list: [(struct kstatfs)->f_files, (struct kstatfs)->f_ffree, ]
+C_SYSC_fstatfs read_list: [(struct kstatfs)->f_files, (struct kstatfs)->f_ffree, ]
+C_SYSC_statfs64 read_list: [(struct kstatfs)->f_files, (struct kstatfs)->f_ffree, ]
+C_SYSC_fstatfs64 read_list: [(struct kstatfs)->f_files, (struct kstatfs)->f_ffree, ]
+SYSC_fcntl read_list: [(struct file)->f_mode, (struct fd)->flags, ]
+C_SYSC_fcntl64 read_list: [(struct file)->f_mode, (struct flock)->l_start, (struct flock)->l_len, (struct fd)->flags, ]
+SYSC_mknodat read_list: [(struct super_block)->s_flags, ]
+SYSC_mkdirat read_list: [(struct super_block)->s_flags, ]
+SYSC_symlinkat read_list: [(struct filename)->refcnt, (struct filename)->name, (struct filename)->iname, (struct filename)->name, ]
+SYSC_renameat2 read_list: [(struct filename)->refcnt, (struct filename)->name, (struct filename)->iname, (struct filename)->name, ]
+C_SYSC_ioctl read_list: [(struct file_operations)->compat_ioctl, (struct file_operations)->unlocked_ioctl, (struct fd)->flags, ]
+SYSC_inotify_add_watch read_list: [(struct fd)->flags, ]
+SYSC_inotify_rm_watch read_list: [(struct fd)->flags, ]
+sys_dmi_modalias_show read_list: [(struct mafield)->prefix, (struct mafield)->field, ]
+sys_copyarea read_list: [(struct fb_info)->state, (struct fb_ops)->fb_sync, ]
+sys_fillrect read_list: [(struct fb_info)->state, (struct fb_fix_screeninfo)->visual, (struct fb_ops)->fb_sync, ]
+sys_imageblit read_list: [(struct fb_info)->state, (struct fb_ops)->fb_sync, (struct fb_image)->depth, (struct fb_fix_screeninfo)->visual, ]
+sys_set_trip_temp read_list: [(struct pkg_device)->tj_max, (struct pkg_device)->cpu, ]
+SYSC_getrandom read_list: [(struct task_struct)->comm, ]
+SYSC_ioprio_set write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct pid)->level, (struct hlist_node)->pprev, (struct user_struct)->mq_bytes, (struct user_struct)->locked_shm, (struct user_struct)->unix_inflight, (struct kgid_t)->val, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, ]
+SYSC_ioprio_get write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct pid)->level, (struct hlist_node)->pprev, (struct user_struct)->mq_bytes, (struct user_struct)->locked_shm, (struct user_struct)->unix_inflight, (struct kgid_t)->val, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, ]
+C_SYSC_setsockopt write_list: [(struct socket)->state, (struct socket)->type, (struct socket)->flags, ]
+C_SYSC_getsockopt write_list: [(struct socket)->state, (struct socket)->type, (struct socket)->flags, ]
+SYSC_socket write_list: [(struct callback_head)->func, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct file)->f_write_hint, (struct atomic64_t)->counter, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+SYSC_socketpair write_list: [(struct callback_head)->func, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct file)->f_write_hint, (struct atomic64_t)->counter, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+SYSC_bind write_list: [(struct fd)->flags, (struct socket)->state, (struct socket)->type, (struct socket)->flags, (struct __kernel_sockaddr_storage)->ss_family, ]
+SYSC_listen write_list: [(struct fd)->flags, (struct socket)->state, (struct socket)->type, (struct socket)->flags, ]
+SYSC_accept4 write_list: [(struct fd)->flags, (struct socket)->state, (struct socket)->type, (struct socket)->flags, (struct proto_ops)->family, (struct proto_ops)->release, (struct proto_ops)->bind, (struct proto_ops)->connect, (struct proto_ops)->socketpair, (struct proto_ops)->accept, (struct proto_ops)->getname, (struct proto_ops)->poll, (struct proto_ops)->ioctl, (struct proto_ops)->compat_ioctl, (struct proto_ops)->listen, (struct proto_ops)->shutdown, (struct proto_ops)->setsockopt, (struct proto_ops)->getsockopt, (struct proto_ops)->compat_setsockopt, (struct proto_ops)->compat_getsockopt, (struct proto_ops)->sendmsg, (struct proto_ops)->recvmsg, (struct proto_ops)->mmap, (struct proto_ops)->sendpage, (struct proto_ops)->splice_read, (struct proto_ops)->set_peek_off, (struct proto_ops)->peek_len, (struct proto_ops)->read_sock, (struct callback_head)->func, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct file)->f_write_hint, (struct atomic64_t)->counter, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+SYSC_connect write_list: [(struct fd)->flags, (struct socket)->state, (struct socket)->type, (struct socket)->flags, (struct __kernel_sockaddr_storage)->ss_family, ]
+SYSC_getsockname write_list: [(struct fd)->flags, (struct socket)->state, (struct socket)->type, (struct socket)->flags, ]
+SYSC_getpeername write_list: [(struct fd)->flags, (struct socket)->state, (struct socket)->type, (struct socket)->flags, ]
+SYSC_sendto write_list: [(struct fd)->flags, (struct socket)->state, (struct socket)->type, (struct socket)->flags, (struct msghdr)->msg_name, (struct msghdr)->msg_control, (struct msghdr)->msg_controllen, (struct msghdr)->msg_namelen, (struct __kernel_sockaddr_storage)->ss_family, (struct msghdr)->msg_flags, ]
+SYSC_recvfrom write_list: [(struct fd)->flags, (struct socket)->state, (struct socket)->type, (struct socket)->flags, (struct msghdr)->msg_control, (struct msghdr)->msg_controllen, (struct msghdr)->msg_name, (struct msghdr)->msg_namelen, (struct msghdr)->msg_flags, ]
+SYSC_setsockopt write_list: [(struct fd)->flags, (struct socket)->state, (struct socket)->type, (struct socket)->flags, ]
+SYSC_getsockopt write_list: [(struct fd)->flags, (struct socket)->state, (struct socket)->type, (struct socket)->flags, ]
+SYSC_shutdown write_list: [(struct fd)->flags, (struct socket)->state, (struct socket)->type, (struct socket)->flags, ]
+SYSC_sendmsg write_list: [(struct socket)->state, (struct socket)->type, (struct socket)->flags, ]
+SYSC_sendmmsg write_list: [(struct socket)->state, (struct socket)->type, (struct socket)->flags, (struct used_address)->name_len, (struct user_msghdr)->msg_name, (struct user_msghdr)->msg_namelen, (struct user_msghdr)->msg_iovlen, (struct user_msghdr)->msg_control, (struct user_msghdr)->msg_controllen, (struct user_msghdr)->msg_flags, (struct mmsghdr)->msg_len, (struct compat_msghdr)->msg_name, (struct compat_msghdr)->msg_namelen, (struct compat_msghdr)->msg_iov, (struct compat_msghdr)->msg_iovlen, (struct compat_msghdr)->msg_control, (struct compat_msghdr)->msg_controllen, (struct compat_msghdr)->msg_flags, (struct compat_mmsghdr)->msg_len, ]
+SYSC_recvmsg write_list: [(struct socket)->state, (struct socket)->type, (struct socket)->flags, ]
+SYSC_recvmmsg write_list: [(struct socket)->state, (struct socket)->type, (struct socket)->flags, (struct user_msghdr)->msg_name, (struct user_msghdr)->msg_namelen, (struct user_msghdr)->msg_iovlen, (struct user_msghdr)->msg_control, (struct user_msghdr)->msg_controllen, (struct user_msghdr)->msg_flags, (struct mmsghdr)->msg_len, (struct compat_msghdr)->msg_name, (struct compat_msghdr)->msg_namelen, (struct compat_msghdr)->msg_iov, (struct compat_msghdr)->msg_iovlen, (struct compat_msghdr)->msg_control, (struct compat_msghdr)->msg_controllen, (struct compat_msghdr)->msg_flags, (struct compat_mmsghdr)->msg_len, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct sock)->sk_err, ]
+SYSC_bpf write_list: [(union bpf_attr)->map_type, (union bpf_attr)->key_size, (union bpf_attr)->value_size, (union bpf_attr)->max_entries, (union bpf_attr)->map_flags, (union bpf_attr)->inner_map_fd, (union bpf_attr)->map_fd, (union bpf_attr)->key, (union bpf_attr)->value, (union bpf_attr)->next_key, (union bpf_attr)->flags, (union bpf_attr)->prog_type, (union bpf_attr)->insn_cnt, (union bpf_attr)->insns, (union bpf_attr)->license, (union bpf_attr)->log_level, (union bpf_attr)->log_size, (union bpf_attr)->log_buf, (union bpf_attr)->kern_version, (union bpf_attr)->prog_flags, (union bpf_attr)->pathname, (union bpf_attr)->bpf_fd, (union bpf_attr)->target_fd, (union bpf_attr)->attach_bpf_fd, (union bpf_attr)->attach_type, (union bpf_attr)->attach_flags, (union bpf_attr)->start_id, (union bpf_attr)->prog_id, (union bpf_attr)->map_id, (union bpf_attr)->next_id, (struct atomic_t)->counter, (struct bpf_map)->map_type, (struct bpf_map)->key_size, (struct bpf_map)->value_size, (struct bpf_map)->max_entries, (struct bpf_map)->map_flags, (struct bpf_map)->pages, (struct bpf_map)->id, (struct atomic64_t)->counter, (struct work_struct)->func, (struct lockdep_map)->name, (struct fd)->flags, (struct bpf_prog)->pages, (struct bpf_prog)->jited, (struct bpf_prog)->locked, (struct bpf_prog)->gpl_compatible, (struct bpf_prog)->cb_access, (struct bpf_prog)->dst_needed, (struct bpf_prog)->type, (struct bpf_prog)->len, (struct bpf_prog)->jited_len, (struct bpf_prog)->bpf_func, ]
+sys_restart_syscall write_list: [(struct restart_block)->fn, ]
+SYSC_rt_sigprocmask write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+SYSC_rt_sigtimedwait write_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct siginfo)->si_signo, (struct siginfo)->si_errno, (struct siginfo)->si_code, (union sigval)->sival_int, (union sigval)->sival_ptr, ]
+C_SYSC_rt_sigtimedwait write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+SYSC_kill write_list: [(struct siginfo)->si_signo, (struct siginfo)->si_errno, (struct siginfo)->si_code, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+SYSC_tgkill write_list: [(struct siginfo)->si_signo, (struct siginfo)->si_errno, (struct siginfo)->si_code, (union anonymous)->_pad, (union sigval)->sival_int, (union sigval)->sival_ptr, ]
+SYSC_tkill write_list: [(struct siginfo)->si_signo, (struct siginfo)->si_errno, (struct siginfo)->si_code, (union anonymous)->_pad, (union sigval)->sival_int, (union sigval)->sival_ptr, ]
+SYSC_rt_sigqueueinfo write_list: [(struct siginfo)->si_signo, (struct siginfo)->si_errno, (struct siginfo)->si_code, (union sigval)->sival_int, (union sigval)->sival_ptr, ]
+C_SYSC_rt_sigqueueinfo write_list: [(struct siginfo)->si_signo, (struct siginfo)->si_errno, (struct siginfo)->si_code, (union anonymous)->_pad, (union sigval)->sival_int, (union sigval)->sival_ptr, ]
+SYSC_rt_tgsigqueueinfo write_list: [(struct siginfo)->si_signo, (struct siginfo)->si_errno, (struct siginfo)->si_code, (union sigval)->sival_int, (union sigval)->sival_ptr, ]
+C_SYSC_rt_tgsigqueueinfo write_list: [(struct siginfo)->si_signo, (struct siginfo)->si_errno, (struct siginfo)->si_code, (union anonymous)->_pad, (union sigval)->sival_int, (union sigval)->sival_ptr, ]
+SYSC_sigaltstack write_list: [(struct sigaltstack)->ss_sp, (struct sigaltstack)->ss_flags, (struct sigaltstack)->ss_size, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+C_SYSC_sigaltstack write_list: [(struct compat_sigaltstack)->ss_sp, (struct compat_sigaltstack)->ss_flags, (struct compat_sigaltstack)->ss_size, (struct sigaltstack)->ss_sp, (struct sigaltstack)->ss_flags, (struct sigaltstack)->ss_size, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+SYSC_rt_sigaction write_list: [(struct sigaction)->sa_handler, (struct sigaction)->sa_flags, (struct sigaction)->sa_restorer, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+C_SYSC_rt_sigaction write_list: [(struct sigaction)->sa_handler, (struct sigaction)->sa_restorer, (struct sigaction)->sa_flags, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct sigaction)->sa_flags, ]
+C_SYSC_sigaction write_list: [(struct sigaction)->sa_flags, (struct sigaction)->sa_handler, (struct sigaction)->sa_restorer, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct sigaction)->sa_flags, ]
+SYSC_signal write_list: [(struct sigaction)->sa_handler, (struct sigaction)->sa_flags, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct sigaction)->sa_restorer, ]
+sys_pause write_list: [(struct task_struct)->task_state_change, (struct task_struct)->state, ]
+SYSC_rt_sigsuspend write_list: [(struct task_struct)->task_state_change, (struct task_struct)->state, ]
+SYSC_sigsuspend write_list: [(struct task_struct)->task_state_change, (struct task_struct)->state, ]
+SYSC_delete_module write_list: [(struct module)->state, (struct kobject)->name, (struct atomic_t)->counter, (struct kobject)->state_initialized, (struct kobject)->state_in_sysfs, (struct kobject)->state_add_uevent_sent, (struct kobject)->state_remove_uevent_sent, (struct kobject)->uevent_suppress, (struct module)->version, (struct module)->srcversion, (struct module)->crcs, (struct module)->num_syms, (struct atomic64_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mutex)->magic, (struct module)->num_kp, (struct module)->num_gpl_syms, (struct module)->gpl_crcs, (struct module)->async_probe_requested, (struct module)->gpl_future_crcs, (struct module)->num_gpl_future_syms, (struct module)->num_exentries, (struct module)->init, (struct module_layout)->base, (struct module_layout)->size, (struct module_layout)->text_size, (struct module_layout)->ro_size, (struct module_layout)->ro_after_init_size, (struct module)->taints, (struct module)->num_bugs, (struct mod_kallsyms)->num_symtab, (struct mod_kallsyms)->strtab, (struct module)->args, (struct module)->percpu, (struct module)->percpu_size, (struct module)->num_tracepoints, (struct module)->tracepoints_ptrs, (struct module)->num_jump_entries, (struct module)->num_trace_bprintk_fmt, (struct module)->trace_bprintk_fmt_start, (struct module)->trace_events, (struct module)->num_trace_events, (struct module)->trace_evals, (struct module)->num_trace_evals, (struct module)->exit, (struct module)->ctors, (struct module)->num_ctors, ]
+SYSC_init_module write_list: [(struct load_info)->name, (struct load_info)->len, (struct load_info)->secstrings, (struct load_info)->strtab, (struct load_info)->symoffs, (struct load_info)->stroffs, (struct load_info)->num_debug, (struct load_info)->sig_ok, (struct load_info)->mod_kallsyms_init_off, (struct elf64_hdr)->e_type, (struct elf64_hdr)->e_machine, (struct elf64_hdr)->e_version, (struct elf64_hdr)->e_entry, (struct elf64_hdr)->e_phoff, (struct elf64_hdr)->e_shoff, (struct elf64_hdr)->e_flags, (struct elf64_hdr)->e_ehsize, (struct elf64_hdr)->e_phentsize, (struct elf64_hdr)->e_phnum, (struct elf64_hdr)->e_shentsize, (struct elf64_hdr)->e_shnum, (struct elf64_hdr)->e_shstrndx, (struct module)->state, (struct kobject)->name, (struct atomic_t)->counter, (struct kobject)->state_initialized, (struct kobject)->state_in_sysfs, (struct kobject)->state_add_uevent_sent, (struct kobject)->state_remove_uevent_sent, (struct kobject)->uevent_suppress, (struct module)->version, (struct module)->srcversion, (struct module)->crcs, (struct module)->num_syms, (struct atomic64_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mutex)->magic, (struct module)->num_kp, (struct module)->num_gpl_syms, (struct module)->gpl_crcs, (struct module)->async_probe_requested, (struct module)->gpl_future_crcs, (struct module)->num_gpl_future_syms, (struct module)->num_exentries, (struct module)->init, (struct module_layout)->base, (struct module_layout)->size, (struct module_layout)->text_size, (struct module_layout)->ro_size, (struct module_layout)->ro_after_init_size, (struct module)->taints, (struct module)->num_bugs, (struct mod_kallsyms)->num_symtab, (struct mod_kallsyms)->strtab, (struct module)->args, (struct module)->percpu, (struct module)->percpu_size, (struct module)->num_tracepoints, (struct module)->tracepoints_ptrs, (struct module)->num_jump_entries, (struct module)->num_trace_bprintk_fmt, (struct module)->trace_bprintk_fmt_start, (struct module)->trace_events, (struct module)->num_trace_events, (struct module)->trace_evals, (struct module)->num_trace_evals, (struct module)->exit, (struct module)->ctors, (struct module)->num_ctors, ]
+SYSC_finit_module write_list: [(struct load_info)->name, (struct load_info)->len, (struct load_info)->secstrings, (struct load_info)->strtab, (struct load_info)->symoffs, (struct load_info)->stroffs, (struct load_info)->num_debug, (struct load_info)->sig_ok, (struct load_info)->mod_kallsyms_init_off, (struct elf64_hdr)->e_type, (struct elf64_hdr)->e_machine, (struct elf64_hdr)->e_version, (struct elf64_hdr)->e_entry, (struct elf64_hdr)->e_phoff, (struct elf64_hdr)->e_shoff, (struct elf64_hdr)->e_flags, (struct elf64_hdr)->e_ehsize, (struct elf64_hdr)->e_phentsize, (struct elf64_hdr)->e_phnum, (struct elf64_hdr)->e_shentsize, (struct elf64_hdr)->e_shnum, (struct elf64_hdr)->e_shstrndx, (struct module)->state, (struct kobject)->name, (struct atomic_t)->counter, (struct kobject)->state_initialized, (struct kobject)->state_in_sysfs, (struct kobject)->state_add_uevent_sent, (struct kobject)->state_remove_uevent_sent, (struct kobject)->uevent_suppress, (struct module)->version, (struct module)->srcversion, (struct module)->crcs, (struct module)->num_syms, (struct atomic64_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mutex)->magic, (struct module)->num_kp, (struct module)->num_gpl_syms, (struct module)->gpl_crcs, (struct module)->async_probe_requested, (struct module)->gpl_future_crcs, (struct module)->num_gpl_future_syms, (struct module)->num_exentries, (struct module)->init, (struct module_layout)->base, (struct module_layout)->size, (struct module_layout)->text_size, (struct module_layout)->ro_size, (struct module_layout)->ro_after_init_size, (struct module)->taints, (struct module)->num_bugs, (struct mod_kallsyms)->num_symtab, (struct mod_kallsyms)->strtab, (struct module)->args, (struct module)->percpu, (struct module)->percpu_size, (struct module)->num_tracepoints, (struct module)->tracepoints_ptrs, (struct module)->num_jump_entries, (struct module)->num_trace_bprintk_fmt, (struct module)->trace_bprintk_fmt_start, (struct module)->trace_events, (struct module)->num_trace_events, (struct module)->trace_evals, (struct module)->num_trace_evals, (struct module)->exit, (struct module)->ctors, (struct module)->num_ctors, ]
+SYSC_kexec_load write_list: [(struct kimage)->preserve_context, (struct kimage)->head, (struct kimage)->entry, (struct kimage)->last_entry, (struct kimage)->start, (struct kimage)->vmcoreinfo_data_copy, (struct kimage)->nr_segments, (struct kimage)->control_page, (struct kimage)->type, (struct kimage)->file_mode, (struct kimage_arch)->backup_src_start, (struct kimage_arch)->backup_src_sz, (struct kimage_arch)->backup_load_addr, (struct kimage_arch)->elf_headers, (struct kimage_arch)->elf_headers_sz, (struct kimage_arch)->elf_load_addr, ]
+C_SYSC_kexec_load write_list: [(struct kexec_segment)->buf, (struct kexec_segment)->kbuf, (struct kexec_segment)->bufsz, (struct kexec_segment)->mem, (struct kexec_segment)->memsz, (struct compat_kexec_segment)->buf, (struct compat_kexec_segment)->bufsz, (struct compat_kexec_segment)->mem, (struct compat_kexec_segment)->memsz, ]
+SYSC_getgroups write_list: [(struct atomic_t)->counter, (struct kuid_t)->val, (struct kgid_t)->val, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, (struct callback_head)->func, (struct uid_gid_map)->nr_extents, (struct user_namespace)->level, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct user_namespace)->flags, (struct work_struct)->func, (struct lockdep_map)->name, (struct ctl_table_set)->is_seen, (struct ctl_table_header)->used, (struct ctl_table_header)->count, (struct ctl_table_header)->nreg, ]
+SYSC_setgroups write_list: [(struct uid_gid_map)->nr_extents, (struct atomic_t)->counter, (struct user_namespace)->level, (struct kuid_t)->val, (struct kgid_t)->val, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct user_namespace)->flags, (struct work_struct)->func, (struct lockdep_map)->name, (struct ctl_table_set)->is_seen, (struct ctl_table_header)->used, (struct ctl_table_header)->count, (struct ctl_table_header)->nreg, (struct callback_head)->func, (struct group_info)->ngroups, ]
+SYSC_ptrace write_list: [(struct task_struct)->ptrace, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+C_SYSC_ptrace write_list: [(struct task_struct)->ptrace, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+SYSC_reboot write_list: [(struct atomic_t)->counter, (struct callback_head)->func, (struct pid_namespace)->last_pid, (struct pid_namespace)->nr_hashed, (struct pid_namespace)->level, (struct atomic64_t)->counter, (struct work_struct)->func, (struct lockdep_map)->name, (struct kgid_t)->val, (struct pid_namespace)->hide_pid, (struct pid_namespace)->reboot, (struct ns_common)->inum, ]
+SYSC_set_tid_address write_list: [(struct task_struct)->clear_child_tid, ]
+sys_fork write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct pid)->level, (struct completion)->done, ]
+sys_vfork write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct pid)->level, (struct completion)->done, ]
+SYSC_clone write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct pid)->level, (struct completion)->done, ]
+SYSC_unshare write_list: [(struct fs_struct)->users, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct seqcount)->sequence, (struct fs_struct)->umask, (struct fs_struct)->in_exec, (struct files_struct)->resize_in_progress, (struct fdtable)->max_fds, (struct fdtable)->fd, (struct fdtable)->close_on_exec, (struct fdtable)->open_fds, (struct fdtable)->full_fds_bits, (struct callback_head)->func, (struct files_struct)->next_fd, (struct kuid_t)->val, (struct kgid_t)->val, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, ]
+C_SYSC_sched_rr_get_interval write_list: [(struct mm_segment_t)->seg, ]
+SYSC_perf_event_open write_list: [(struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct atomic64_t)->counter, (struct mutex)->magic, (struct perf_event_context)->nr_events, (struct perf_event_context)->nr_active, (struct perf_event_context)->is_active, (struct perf_event_context)->nr_stat, (struct perf_event_context)->nr_freq, (struct perf_event_context)->rotate_disable, (struct perf_event_context)->time, (struct perf_event_context)->timestamp, (struct perf_event_context)->parent_gen, (struct perf_event_context)->generation, (struct perf_event_context)->pin_count, (struct perf_event_context)->task_ctx_data, (struct callback_head)->func, (struct fd)->flags, (struct perf_event_attr)->type, (struct perf_event_attr)->size, (struct perf_event_attr)->config, (struct perf_event_attr)->sample_period, (struct perf_event_attr)->sample_freq, (struct perf_event_attr)->sample_type, (struct perf_event_attr)->read_format, (struct perf_event_attr)->disabled, (struct perf_event_attr)->inherit, (struct perf_event_attr)->pinned, (struct perf_event_attr)->exclusive, (struct perf_event_attr)->exclude_user, (struct perf_event_attr)->exclude_kernel, (struct perf_event_attr)->exclude_hv, (struct perf_event_attr)->exclude_idle, (struct perf_event_attr)->mmap, (struct perf_event_attr)->comm, (struct perf_event_attr)->freq, (struct perf_event_attr)->inherit_stat, (struct perf_event_attr)->enable_on_exec, (struct perf_event_attr)->task, (struct perf_event_attr)->watermark, (struct perf_event_attr)->precise_ip, (struct perf_event_attr)->mmap_data, (struct perf_event_attr)->sample_id_all, (struct perf_event_attr)->exclude_host, (struct perf_event_attr)->exclude_guest, (struct perf_event_attr)->exclude_callchain_kernel, (struct perf_event_attr)->exclude_callchain_user, (struct perf_event_attr)->mmap2, (struct perf_event_attr)->comm_exec, (struct perf_event_attr)->use_clockid, (struct perf_event_attr)->context_switch, (struct perf_event_attr)->write_backward, (struct perf_event_attr)->namespaces, (struct perf_event_attr)->__reserved_1, (struct perf_event_attr)->wakeup_events, (struct perf_event_attr)->wakeup_watermark, (struct perf_event_attr)->bp_type, (struct perf_event_attr)->bp_addr, (struct perf_event_attr)->config1, (struct perf_event_attr)->bp_len, (struct perf_event_attr)->config2, (struct perf_event_attr)->branch_sample_type, (struct perf_event_attr)->sample_regs_user, (struct perf_event_attr)->sample_stack_user, (struct perf_event_attr)->clockid, (struct perf_event_attr)->sample_regs_intr, (struct perf_event_attr)->aux_watermark, (struct perf_event_attr)->sample_max_stack, (struct perf_event_attr)->__reserved_2, (struct hlist_node)->pprev, (struct perf_event)->nr_siblings, (struct perf_event)->event_caps, (struct perf_event)->group_caps, (struct perf_event)->pmu_private, (struct perf_event)->state, (struct perf_event)->attach_state, (struct perf_event)->total_time_enabled, (struct perf_event)->total_time_running, (struct perf_event)->tstamp_enabled, (struct perf_event)->tstamp_running, (struct perf_event)->tstamp_stopped, (struct perf_event)->shadow_ctx_time, (struct perf_event)->header_size, (struct perf_event)->id_header_size, (struct perf_event)->read_size, (struct hw_perf_event)->config, (struct hw_perf_event)->last_tag, (struct hw_perf_event)->config_base, (struct hw_perf_event)->event_base, (struct hw_perf_event)->event_base_rdpmc, (struct hw_perf_event)->idx, (struct hw_perf_event)->last_cpu, (struct hw_perf_event)->flags, (struct hw_perf_event_extra)->config, (struct hw_perf_event_extra)->reg, (struct hw_perf_event_extra)->alloc, (struct hw_perf_event_extra)->idx, (struct rb_node)->__rb_parent_color, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct hw_perf_event)->cqm_state, (struct hw_perf_event)->cqm_rmid, (struct hw_perf_event)->is_group_event, (struct hw_perf_event)->itrace_started, (struct hw_perf_event)->pwr_acc, (struct hw_perf_event)->ptsc, (struct arch_hw_breakpoint)->address, (struct arch_hw_breakpoint)->mask, (struct arch_hw_breakpoint)->len, (struct arch_hw_breakpoint)->type, (struct hw_perf_event)->iommu_bank, (struct hw_perf_event)->iommu_cntr, (struct hw_perf_event)->padding, (struct hw_perf_event)->conf, (struct hw_perf_event)->conf1, (struct hw_perf_event)->addr_filters, (struct hw_perf_event)->addr_filters_gen, (struct hw_perf_event)->state, (struct hw_perf_event)->sample_period, (struct hw_perf_event)->last_period, (struct hw_perf_event)->interrupts_seq, (struct hw_perf_event)->interrupts, (struct hw_perf_event)->freq_time_stamp, (struct hw_perf_event)->freq_count_stamp, (struct perf_event)->oncpu, (struct perf_event)->cpu, (struct perf_event)->rcu_batches, (struct perf_event)->rcu_pending, (struct perf_event)->pending_wakeup, (struct perf_event)->pending_kill, (struct perf_event)->pending_disable, (struct irq_work)->flags, (struct irq_work)->func, (struct perf_addr_filters_head)->nr_file_filters, (struct perf_event)->addr_filters_offs, (struct perf_event)->addr_filters_gen, (struct perf_event)->destroy, (struct perf_event)->id, (struct perf_event)->clock, (struct perf_event)->overflow_handler, (struct perf_event)->overflow_handler_context, (struct perf_event)->orig_overflow_handler, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct pid_namespace)->last_pid, (struct pid_namespace)->nr_hashed, (struct pid_namespace)->level, (struct work_struct)->func, (struct kgid_t)->val, (struct pid_namespace)->hide_pid, (struct pid_namespace)->reboot, (struct ns_common)->inum, (struct bpf_prog)->pages, (struct bpf_prog)->jited, (struct bpf_prog)->locked, (struct bpf_prog)->gpl_compatible, (struct bpf_prog)->cb_access, (struct bpf_prog)->dst_needed, (struct bpf_prog)->type, (struct bpf_prog)->len, (struct bpf_prog)->jited_len, (struct bpf_prog)->bpf_func, (struct pmu)->attr_groups, (struct pmu)->name, (struct pmu)->type, (struct pmu)->capabilities, (struct pmu)->pmu_disable_count, (struct pmu)->task_ctx_nr, (struct pmu)->hrtimer_interval_ms, (struct pmu)->nr_addr_filters, (struct pmu)->pmu_enable, (struct pmu)->pmu_disable, (struct pmu)->event_init, (struct pmu)->event_mapped, (struct pmu)->event_unmapped, (struct pmu)->add, (struct pmu)->del, (struct pmu)->start, (struct pmu)->stop, (struct pmu)->read, (struct pmu)->start_txn, (struct pmu)->commit_txn, (struct pmu)->cancel_txn, (struct pmu)->event_idx, (struct pmu)->sched_task, (struct pmu)->task_ctx_size, (struct pmu)->count, (struct pmu)->setup_aux, (struct pmu)->free_aux, (struct pmu)->addr_filters_validate, (struct pmu)->addr_filters_sync, (struct pmu)->filter_match, (struct perf_cpu_context)->active_oncpu, (struct perf_cpu_context)->exclusive, (struct perf_cpu_context)->hrtimer_interval, (struct perf_cpu_context)->hrtimer_active, (struct perf_cpu_context)->sched_cb_usage, (struct perf_cpu_context)->online, (struct ring_buffer)->nr_pages, (struct ring_buffer)->overwrite, (struct ring_buffer)->paused, (struct ring_buffer)->watermark, (struct ring_buffer)->aux_watermark, (struct ring_buffer)->mmap_locked, (struct ring_buffer)->aux_pgoff, (struct ring_buffer)->aux_nr_pages, (struct ring_buffer)->aux_overwrite, (struct ring_buffer)->aux_mmap_locked, (struct ring_buffer)->free_aux, (struct ring_buffer)->aux_pages, (struct ring_buffer)->aux_priv, (struct file)->f_write_hint, (struct file)->f_flags, (struct file)->f_mode, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+SYSC_exit_group write_list: [(struct atomic_t)->counter, (struct signal_struct)->nr_threads, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct signal_struct)->group_exit_code, (struct signal_struct)->notify_count, (struct signal_struct)->group_stop_count, (struct signal_struct)->flags, (struct signal_struct)->is_child_subreaper, (struct signal_struct)->has_child_subreaper, (struct signal_struct)->posix_timer_id, (struct rb_node)->__rb_parent_color, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct signal_struct)->it_real_incr, (struct atomic64_t)->counter, (struct thread_group_cputimer)->running, (struct thread_group_cputimer)->checking_timer, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct signal_struct)->leader, (struct seqcount)->sequence, (struct signal_struct)->utime, (struct signal_struct)->stime, (struct signal_struct)->cutime, (struct signal_struct)->cstime, (struct signal_struct)->gtime, (struct signal_struct)->cgtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct signal_struct)->nvcsw, (struct signal_struct)->nivcsw, (struct signal_struct)->cnvcsw, (struct signal_struct)->cnivcsw, (struct signal_struct)->min_flt, (struct signal_struct)->maj_flt, (struct signal_struct)->cmin_flt, (struct signal_struct)->cmaj_flt, (struct signal_struct)->inblock, (struct signal_struct)->oublock, (struct signal_struct)->cinblock, (struct signal_struct)->coublock, (struct signal_struct)->maxrss, (struct signal_struct)->cmaxrss, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct signal_struct)->sum_sched_runtime, (struct pacct_struct)->ac_flag, (struct pacct_struct)->ac_exitcode, (struct pacct_struct)->ac_mem, (struct pacct_struct)->ac_utime, (struct pacct_struct)->ac_stime, (struct pacct_struct)->ac_minflt, (struct pacct_struct)->ac_majflt, (struct signal_struct)->audit_tty, (struct signal_struct)->oom_flag_origin, (struct signal_struct)->oom_score_adj, (struct signal_struct)->oom_score_adj_min, (struct mutex)->magic, ]
+SYSC_waitid write_list: [(struct waitid_info)->status, (struct waitid_info)->pid, (struct waitid_info)->uid, (struct waitid_info)->cause, (struct atomic_t)->counter, (struct pid)->level, (struct callback_head)->func, (struct wait_opts)->wo_type, (struct wait_opts)->wo_flags, (struct timeval)->tv_sec, (struct timeval)->tv_usec, (struct rusage)->ru_maxrss, (struct rusage)->ru_ixrss, (struct rusage)->ru_idrss, (struct rusage)->ru_isrss, (struct rusage)->ru_minflt, (struct rusage)->ru_majflt, (struct rusage)->ru_nswap, (struct rusage)->ru_inblock, (struct rusage)->ru_oublock, (struct rusage)->ru_msgsnd, (struct rusage)->ru_msgrcv, (struct rusage)->ru_nsignals, (struct rusage)->ru_nvcsw, (struct rusage)->ru_nivcsw, ]
+SYSC_wait4 write_list: [(struct atomic_t)->counter, (struct pid)->level, (struct callback_head)->func, (struct wait_opts)->wo_type, (struct wait_opts)->wo_flags, (struct wait_opts)->wo_stat, (struct timeval)->tv_sec, (struct timeval)->tv_usec, (struct rusage)->ru_maxrss, (struct rusage)->ru_ixrss, (struct rusage)->ru_idrss, (struct rusage)->ru_isrss, (struct rusage)->ru_minflt, (struct rusage)->ru_majflt, (struct rusage)->ru_nswap, (struct rusage)->ru_inblock, (struct rusage)->ru_oublock, (struct rusage)->ru_msgsnd, (struct rusage)->ru_msgrcv, (struct rusage)->ru_nsignals, (struct rusage)->ru_nvcsw, (struct rusage)->ru_nivcsw, ]
+C_SYSC_wait4 write_list: [(struct atomic_t)->counter, (struct pid)->level, (struct callback_head)->func, (struct wait_opts)->wo_type, (struct wait_opts)->wo_flags, (struct wait_opts)->wo_stat, (struct timeval)->tv_sec, (struct timeval)->tv_usec, (struct rusage)->ru_maxrss, (struct rusage)->ru_ixrss, (struct rusage)->ru_idrss, (struct rusage)->ru_isrss, (struct rusage)->ru_minflt, (struct rusage)->ru_majflt, (struct rusage)->ru_nswap, (struct rusage)->ru_inblock, (struct rusage)->ru_oublock, (struct rusage)->ru_msgsnd, (struct rusage)->ru_msgrcv, (struct rusage)->ru_nsignals, (struct rusage)->ru_nvcsw, (struct rusage)->ru_nivcsw, ]
+C_SYSC_waitid write_list: [(struct waitid_info)->status, (struct waitid_info)->pid, (struct waitid_info)->uid, (struct waitid_info)->cause, (struct atomic_t)->counter, (struct pid)->level, (struct callback_head)->func, (struct wait_opts)->wo_type, (struct wait_opts)->wo_flags, (struct timeval)->tv_sec, (struct timeval)->tv_usec, (struct rusage)->ru_maxrss, (struct rusage)->ru_ixrss, (struct rusage)->ru_idrss, (struct rusage)->ru_isrss, (struct rusage)->ru_minflt, (struct rusage)->ru_majflt, (struct rusage)->ru_nswap, (struct rusage)->ru_inblock, (struct rusage)->ru_oublock, (struct rusage)->ru_msgsnd, (struct rusage)->ru_msgrcv, (struct rusage)->ru_nsignals, (struct rusage)->ru_nvcsw, (struct rusage)->ru_nivcsw, ]
+SYSC_set_robust_list write_list: [(struct robust_list_head)->futex_offset, ]
+SYSC_get_robust_list write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct robust_list_head)->futex_offset, ]
+SYSC_futex write_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+SYSC_setpriority write_list: [(struct atomic_t)->counter, (struct kuid_t)->val, (struct kgid_t)->val, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, (struct callback_head)->func, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct pid)->level, (struct hlist_node)->pprev, (struct user_struct)->mq_bytes, (struct user_struct)->locked_shm, (struct user_struct)->unix_inflight, ]
+SYSC_getpriority write_list: [(struct atomic_t)->counter, (struct kuid_t)->val, (struct kgid_t)->val, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, (struct callback_head)->func, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct pid)->level, (struct hlist_node)->pprev, (struct user_struct)->mq_bytes, (struct user_struct)->locked_shm, (struct user_struct)->unix_inflight, ]
+SYSC_setregid write_list: [(struct uid_gid_map)->nr_extents, (struct atomic_t)->counter, (struct user_namespace)->level, (struct kuid_t)->val, (struct kgid_t)->val, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct user_namespace)->flags, (struct work_struct)->func, (struct lockdep_map)->name, (struct ctl_table_set)->is_seen, (struct ctl_table_header)->used, (struct ctl_table_header)->count, (struct ctl_table_header)->nreg, (struct callback_head)->func, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, ]
+SYSC_setgid write_list: [(struct uid_gid_map)->nr_extents, (struct atomic_t)->counter, (struct user_namespace)->level, (struct kuid_t)->val, (struct kgid_t)->val, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct user_namespace)->flags, (struct work_struct)->func, (struct lockdep_map)->name, (struct ctl_table_set)->is_seen, (struct ctl_table_header)->used, (struct ctl_table_header)->count, (struct ctl_table_header)->nreg, (struct callback_head)->func, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, ]
+SYSC_setreuid write_list: [(struct uid_gid_map)->nr_extents, (struct atomic_t)->counter, (struct user_namespace)->level, (struct kuid_t)->val, (struct kgid_t)->val, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct user_namespace)->flags, (struct work_struct)->func, (struct lockdep_map)->name, (struct ctl_table_set)->is_seen, (struct ctl_table_header)->used, (struct ctl_table_header)->count, (struct ctl_table_header)->nreg, (struct callback_head)->func, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, (struct user_struct)->mq_bytes, (struct user_struct)->locked_shm, (struct user_struct)->unix_inflight, (struct hlist_node)->pprev, (struct task_struct)->flags, ]
+SYSC_setuid write_list: [(struct uid_gid_map)->nr_extents, (struct atomic_t)->counter, (struct user_namespace)->level, (struct kuid_t)->val, (struct kgid_t)->val, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct user_namespace)->flags, (struct work_struct)->func, (struct lockdep_map)->name, (struct ctl_table_set)->is_seen, (struct ctl_table_header)->used, (struct ctl_table_header)->count, (struct ctl_table_header)->nreg, (struct callback_head)->func, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, (struct user_struct)->mq_bytes, (struct user_struct)->locked_shm, (struct user_struct)->unix_inflight, (struct hlist_node)->pprev, (struct task_struct)->flags, ]
+SYSC_setresuid write_list: [(struct uid_gid_map)->nr_extents, (struct atomic_t)->counter, (struct user_namespace)->level, (struct kuid_t)->val, (struct kgid_t)->val, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct user_namespace)->flags, (struct work_struct)->func, (struct lockdep_map)->name, (struct ctl_table_set)->is_seen, (struct ctl_table_header)->used, (struct ctl_table_header)->count, (struct ctl_table_header)->nreg, (struct callback_head)->func, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, (struct user_struct)->mq_bytes, (struct user_struct)->locked_shm, (struct user_struct)->unix_inflight, (struct hlist_node)->pprev, (struct task_struct)->flags, ]
+SYSC_getresuid write_list: [(struct atomic_t)->counter, (struct kuid_t)->val, (struct kgid_t)->val, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, (struct callback_head)->func, ]
+SYSC_setresgid write_list: [(struct uid_gid_map)->nr_extents, (struct atomic_t)->counter, (struct user_namespace)->level, (struct kuid_t)->val, (struct kgid_t)->val, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct user_namespace)->flags, (struct work_struct)->func, (struct lockdep_map)->name, (struct ctl_table_set)->is_seen, (struct ctl_table_header)->used, (struct ctl_table_header)->count, (struct ctl_table_header)->nreg, (struct callback_head)->func, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, ]
+SYSC_getresgid write_list: [(struct atomic_t)->counter, (struct kuid_t)->val, (struct kgid_t)->val, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, (struct callback_head)->func, ]
+SYSC_setfsuid write_list: [(struct atomic_t)->counter, (struct kuid_t)->val, (struct kgid_t)->val, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, (struct callback_head)->func, ]
+SYSC_setfsgid write_list: [(struct atomic_t)->counter, (struct kuid_t)->val, (struct kgid_t)->val, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, (struct callback_head)->func, ]
+sys_getppid write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+SYSC_times write_list: [(struct tms)->tms_utime, (struct tms)->tms_stime, (struct tms)->tms_cutime, (struct tms)->tms_cstime, ]
+C_SYSC_times write_list: [(struct tms)->tms_utime, (struct tms)->tms_stime, (struct tms)->tms_cutime, (struct tms)->tms_cstime, (struct compat_tms)->tms_utime, (struct compat_tms)->tms_stime, (struct compat_tms)->tms_cutime, (struct compat_tms)->tms_cstime, ]
+SYSC_setpgid write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct pid)->level, ]
+SYSC_getpgid write_list: [(struct atomic_t)->counter, (struct pid)->level, (struct callback_head)->func, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+SYSC_getsid write_list: [(struct atomic_t)->counter, (struct pid)->level, (struct callback_head)->func, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+sys_setsid write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct pid)->level, (struct signal_struct)->leader, ]
+C_SYSC_setrlimit write_list: [(struct compat_rlimit)->rlim_cur, (struct compat_rlimit)->rlim_max, (struct rlimit)->rlim_cur, (struct rlimit)->rlim_max, ]
+C_SYSC_getrlimit write_list: [(struct compat_rlimit)->rlim_cur, (struct compat_rlimit)->rlim_max, ]
+SYSC_old_getrlimit write_list: [(struct rlimit)->rlim_cur, (struct rlimit)->rlim_max, ]
+C_SYSC_old_getrlimit write_list: [(struct rlimit)->rlim_cur, (struct rlimit)->rlim_max, ]
+SYSC_prlimit64 write_list: [(struct rlimit64)->rlim_cur, (struct rlimit64)->rlim_max, (struct rlimit)->rlim_cur, (struct rlimit)->rlim_max, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct kgid_t)->val, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, ]
+SYSC_setrlimit write_list: [(struct rlimit)->rlim_cur, (struct rlimit)->rlim_max, ]
+SYSC_getrusage write_list: [(struct timeval)->tv_sec, (struct timeval)->tv_usec, (struct rusage)->ru_maxrss, (struct rusage)->ru_ixrss, (struct rusage)->ru_idrss, (struct rusage)->ru_isrss, (struct rusage)->ru_minflt, (struct rusage)->ru_majflt, (struct rusage)->ru_nswap, (struct rusage)->ru_inblock, (struct rusage)->ru_oublock, (struct rusage)->ru_msgsnd, (struct rusage)->ru_msgrcv, (struct rusage)->ru_nsignals, (struct rusage)->ru_nvcsw, (struct rusage)->ru_nivcsw, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct mm_struct)->vmacache_seqnum, (struct mm_struct)->get_unmapped_area, (struct mm_struct)->mmap_base, (struct mm_struct)->mmap_legacy_base, (struct mm_struct)->mmap_compat_base, (struct mm_struct)->mmap_compat_legacy_base, (struct mm_struct)->task_size, (struct mm_struct)->highest_vm_end, (struct mm_struct)->map_count, (struct mm_struct)->hiwater_rss, (struct mm_struct)->hiwater_vm, (struct mm_struct)->total_vm, (struct mm_struct)->locked_vm, (struct mm_struct)->pinned_vm, (struct mm_struct)->data_vm, (struct mm_struct)->exec_vm, (struct mm_struct)->stack_vm, (struct mm_struct)->def_flags, (struct mm_struct)->start_code, (struct mm_struct)->end_code, (struct mm_struct)->start_data, (struct mm_struct)->end_data, (struct mm_struct)->start_brk, (struct mm_struct)->brk, (struct mm_struct)->start_stack, (struct mm_struct)->arg_start, (struct mm_struct)->arg_end, (struct mm_struct)->env_start, (struct mm_struct)->env_end, (struct mm_context_t)->ia32_compat, (struct mm_context_t)->vdso, (struct mm_context_t)->pkey_allocation_map, (struct mm_context_t)->execute_only_pkey, (struct mm_struct)->flags, (struct mm_struct)->tlb_flush_batched, (struct work_struct)->func, ]
+C_SYSC_getrusage write_list: [(struct timeval)->tv_sec, (struct timeval)->tv_usec, (struct rusage)->ru_maxrss, (struct rusage)->ru_ixrss, (struct rusage)->ru_idrss, (struct rusage)->ru_isrss, (struct rusage)->ru_minflt, (struct rusage)->ru_majflt, (struct rusage)->ru_nswap, (struct rusage)->ru_inblock, (struct rusage)->ru_oublock, (struct rusage)->ru_msgsnd, (struct rusage)->ru_msgrcv, (struct rusage)->ru_nsignals, (struct rusage)->ru_nvcsw, (struct rusage)->ru_nivcsw, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct mm_struct)->vmacache_seqnum, (struct mm_struct)->get_unmapped_area, (struct mm_struct)->mmap_base, (struct mm_struct)->mmap_legacy_base, (struct mm_struct)->mmap_compat_base, (struct mm_struct)->mmap_compat_legacy_base, (struct mm_struct)->task_size, (struct mm_struct)->highest_vm_end, (struct mm_struct)->map_count, (struct mm_struct)->hiwater_rss, (struct mm_struct)->hiwater_vm, (struct mm_struct)->total_vm, (struct mm_struct)->locked_vm, (struct mm_struct)->pinned_vm, (struct mm_struct)->data_vm, (struct mm_struct)->exec_vm, (struct mm_struct)->stack_vm, (struct mm_struct)->def_flags, (struct mm_struct)->start_code, (struct mm_struct)->end_code, (struct mm_struct)->start_data, (struct mm_struct)->end_data, (struct mm_struct)->start_brk, (struct mm_struct)->brk, (struct mm_struct)->start_stack, (struct mm_struct)->arg_start, (struct mm_struct)->arg_end, (struct mm_struct)->env_start, (struct mm_struct)->env_end, (struct mm_context_t)->ia32_compat, (struct mm_context_t)->vdso, (struct mm_context_t)->pkey_allocation_map, (struct mm_context_t)->execute_only_pkey, (struct mm_struct)->flags, (struct mm_struct)->tlb_flush_batched, (struct work_struct)->func, ]
+SYSC_prctl write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct mm_struct)->vmacache_seqnum, (struct mm_struct)->get_unmapped_area, (struct mm_struct)->mmap_base, (struct mm_struct)->mmap_legacy_base, (struct mm_struct)->mmap_compat_base, (struct mm_struct)->mmap_compat_legacy_base, (struct mm_struct)->task_size, (struct mm_struct)->highest_vm_end, (struct mm_struct)->map_count, (struct mm_struct)->hiwater_rss, (struct mm_struct)->hiwater_vm, (struct mm_struct)->total_vm, (struct mm_struct)->locked_vm, (struct mm_struct)->pinned_vm, (struct mm_struct)->data_vm, (struct mm_struct)->exec_vm, (struct mm_struct)->stack_vm, (struct mm_struct)->def_flags, (struct mm_struct)->start_code, (struct mm_struct)->end_code, (struct mm_struct)->start_data, (struct mm_struct)->end_data, (struct mm_struct)->start_brk, (struct mm_struct)->brk, (struct mm_struct)->start_stack, (struct mm_struct)->arg_start, (struct mm_struct)->arg_end, (struct mm_struct)->env_start, (struct mm_struct)->env_end, (struct mm_context_t)->ia32_compat, (struct mm_context_t)->vdso, (struct mm_context_t)->pkey_allocation_map, (struct mm_context_t)->execute_only_pkey, (struct mm_struct)->flags, (struct mm_struct)->tlb_flush_batched, (struct work_struct)->func, (struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, (struct vm_area_struct)->rb_subtree_gap, (struct pgprot)->pgprot, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_pgoff, (struct vm_area_struct)->vm_private_data, (struct prctl_mm_map)->start_code, (struct prctl_mm_map)->end_code, (struct prctl_mm_map)->start_data, (struct prctl_mm_map)->end_data, (struct prctl_mm_map)->start_brk, (struct prctl_mm_map)->brk, (struct prctl_mm_map)->start_stack, (struct prctl_mm_map)->arg_start, (struct prctl_mm_map)->arg_end, (struct prctl_mm_map)->env_start, (struct prctl_mm_map)->env_end, (struct prctl_mm_map)->auxv, (struct prctl_mm_map)->auxv_size, (struct prctl_mm_map)->exe_fd, ]
+SYSC_sysinfo write_list: [(struct sysinfo)->uptime, (struct sysinfo)->totalram, (struct sysinfo)->freeram, (struct sysinfo)->sharedram, (struct sysinfo)->bufferram, (struct sysinfo)->totalswap, (struct sysinfo)->freeswap, (struct sysinfo)->procs, (struct sysinfo)->pad, (struct sysinfo)->totalhigh, (struct sysinfo)->freehigh, (struct sysinfo)->mem_unit, ]
+C_SYSC_sysinfo write_list: [(struct sysinfo)->uptime, (struct sysinfo)->totalram, (struct sysinfo)->freeram, (struct sysinfo)->sharedram, (struct sysinfo)->bufferram, (struct sysinfo)->totalswap, (struct sysinfo)->freeswap, (struct sysinfo)->procs, (struct sysinfo)->pad, (struct sysinfo)->totalhigh, (struct sysinfo)->freehigh, (struct sysinfo)->mem_unit, ]
+SYSC_setns write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct file)->f_write_hint, (struct file)->f_flags, (struct file)->f_mode, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, (struct ns_common)->inum, (struct ipc_namespace)->used_sems, (struct ipc_namespace)->msg_ctlmax, (struct ipc_namespace)->msg_ctlmnb, (struct ipc_namespace)->msg_ctlmni, (struct ipc_namespace)->shm_ctlmax, (struct ipc_namespace)->shm_ctlall, (struct ipc_namespace)->shm_tot, (struct ipc_namespace)->shm_ctlmni, (struct ipc_namespace)->shm_rmid_forced, (struct notifier_block)->notifier_call, (struct notifier_block)->priority, (struct ipc_namespace)->mq_queues_count, (struct ipc_namespace)->mq_queues_max, (struct ipc_namespace)->mq_msg_max, (struct ipc_namespace)->mq_msgsize_max, (struct ipc_namespace)->mq_msg_default, (struct ipc_namespace)->mq_msgsize_default, (struct pid_namespace)->last_pid, (struct pid_namespace)->nr_hashed, (struct pid_namespace)->level, (struct work_struct)->func, (struct kgid_t)->val, (struct pid_namespace)->hide_pid, (struct pid_namespace)->reboot, (struct radix_tree_root)->gfp_mask, (struct idr)->idr_next, (struct ctl_table_set)->is_seen, (struct ctl_table_header)->used, (struct ctl_table_header)->count, (struct ctl_table_header)->nreg, (struct net)->dev_base_seq, (struct net)->ifindex, (struct net)->dev_unreg_count, (struct netns_core)->sysctl_somaxconn, (struct netns_unix)->sysctl_max_dgram_qlen, (struct netns_ipv4)->fib_has_custom_rules, (struct netns_ipv4)->fib_offload_disabled, (struct netns_ipv4)->icmp_sk, (struct netns_ipv4)->tcp_sk, (struct percpu_counter)->count, (struct percpu_counter)->counters, (struct netns_frags)->timeout, (struct netns_frags)->high_thresh, (struct netns_frags)->low_thresh, (struct netns_frags)->max_dist, (struct netns_ipv4)->sysctl_icmp_echo_ignore_all, (struct netns_ipv4)->sysctl_icmp_echo_ignore_broadcasts, (struct netns_ipv4)->sysctl_icmp_ignore_bogus_error_responses, (struct netns_ipv4)->sysctl_icmp_ratelimit, (struct netns_ipv4)->sysctl_icmp_ratemask, (struct netns_ipv4)->sysctl_icmp_errors_use_inbound_ifaddr, (struct local_ports)->warned, (struct netns_ipv4)->sysctl_tcp_ecn, (struct netns_ipv4)->sysctl_tcp_ecn_fallback, (struct netns_ipv4)->sysctl_ip_default_ttl, (struct netns_ipv4)->sysctl_ip_no_pmtu_disc, (struct netns_ipv4)->sysctl_ip_fwd_use_pmtu, (struct netns_ipv4)->sysctl_ip_nonlocal_bind, (struct netns_ipv4)->sysctl_ip_dynaddr, (struct netns_ipv4)->sysctl_ip_early_demux, (struct netns_ipv4)->sysctl_tcp_early_demux, (struct netns_ipv4)->sysctl_udp_early_demux, (struct netns_ipv4)->sysctl_fwmark_reflect, (struct netns_ipv4)->sysctl_tcp_fwmark_accept, (struct netns_ipv4)->sysctl_tcp_mtu_probing, (struct netns_ipv4)->sysctl_tcp_base_mss, (struct netns_ipv4)->sysctl_tcp_probe_threshold, (struct netns_ipv4)->sysctl_tcp_probe_interval, (struct netns_ipv4)->sysctl_tcp_keepalive_time, (struct netns_ipv4)->sysctl_tcp_keepalive_probes, (struct netns_ipv4)->sysctl_tcp_keepalive_intvl, (struct netns_ipv4)->sysctl_tcp_syn_retries, (struct netns_ipv4)->sysctl_tcp_synack_retries, (struct netns_ipv4)->sysctl_tcp_syncookies, (struct netns_ipv4)->sysctl_tcp_reordering, (struct netns_ipv4)->sysctl_tcp_retries1, (struct netns_ipv4)->sysctl_tcp_retries2, (struct netns_ipv4)->sysctl_tcp_orphan_retries, (struct netns_ipv4)->sysctl_tcp_fin_timeout, (struct netns_ipv4)->sysctl_tcp_notsent_lowat, (struct netns_ipv4)->sysctl_tcp_tw_reuse, (struct netns_ipv4)->sysctl_tcp_sack, (struct netns_ipv4)->sysctl_tcp_window_scaling, (struct netns_ipv4)->sysctl_tcp_timestamps, (struct inet_timewait_death_row)->sysctl_max_tw_buckets, (struct netns_ipv4)->sysctl_max_syn_backlog, (struct netns_ipv4)->sysctl_igmp_max_memberships, (struct netns_ipv4)->sysctl_igmp_max_msf, (struct netns_ipv4)->sysctl_igmp_llm_reports, (struct netns_ipv4)->sysctl_igmp_qrv, (struct netns_ipv4)->sysctl_local_reserved_ports, (struct netns_ipv4)->sysctl_ip_prot_sock, (struct netns_ipv4)->sysctl_fib_multipath_use_neigh, (struct netns_ipv4)->sysctl_fib_multipath_hash_policy, (struct netns_ipv4)->fib_seq, (struct netns_sysctl_ipv6)->bindv6only, (struct netns_sysctl_ipv6)->flush_delay, (struct netns_sysctl_ipv6)->ip6_rt_max_size, (struct netns_sysctl_ipv6)->ip6_rt_gc_min_interval, (struct netns_sysctl_ipv6)->ip6_rt_gc_timeout, (struct netns_sysctl_ipv6)->ip6_rt_gc_interval, (struct netns_sysctl_ipv6)->ip6_rt_gc_elasticity, (struct netns_sysctl_ipv6)->ip6_rt_mtu_expires, (struct netns_sysctl_ipv6)->ip6_rt_min_advmss, (struct netns_sysctl_ipv6)->flowlabel_consistency, (struct netns_sysctl_ipv6)->auto_flowlabels, (struct netns_sysctl_ipv6)->icmpv6_time, (struct netns_sysctl_ipv6)->anycast_src_echo_reply, (struct netns_sysctl_ipv6)->ip_nonlocal_bind, (struct netns_sysctl_ipv6)->fwmark_reflect, (struct netns_sysctl_ipv6)->idgen_retries, (struct netns_sysctl_ipv6)->idgen_delay, (struct netns_sysctl_ipv6)->flowlabel_state_ranges, (struct hlist_node)->pprev, (struct timer_list)->expires, (struct timer_list)->function, (struct timer_list)->data, (struct timer_list)->flags, (struct dst_ops)->family, (struct dst_ops)->gc_thresh, (struct dst_ops)->gc, (struct dst_ops)->check, (struct dst_ops)->default_advmss, (struct dst_ops)->mtu, (struct dst_ops)->cow_metrics, (struct dst_ops)->destroy, (struct dst_ops)->ifdown, (struct dst_ops)->negative_advice, (struct dst_ops)->link_failure, (struct dst_ops)->update_pmtu, (struct dst_ops)->redirect, (struct dst_ops)->local_out, (struct dst_ops)->neigh_lookup, (struct dst_ops)->confirm_neigh, (struct netns_ipv6)->ip6_rt_gc_expire, (struct netns_ipv6)->ip6_rt_last_gc, (struct netns_ipv6)->icmp_sk, (struct netns_nf)->defrag_ipv4, (struct netns_nf)->defrag_ipv6, (struct netns_xt)->notrack_deprecated_warning, (struct netns_xt)->clusterip_deprecated_warning, (struct netns_ct)->expect_count, (struct netns_ct)->sysctl_log_invalid, (struct netns_ct)->sysctl_events, (struct netns_ct)->sysctl_acct, (struct netns_ct)->sysctl_auto_assign_helper, (struct netns_ct)->auto_assign_helper_warned, (struct netns_ct)->sysctl_tstamp, (struct netns_ct)->sysctl_checksum, (struct nf_proto_net)->users, (struct nf_generic_net)->timeout, (struct nf_tcp_net)->tcp_loose, (struct nf_tcp_net)->tcp_be_liberal, (struct nf_tcp_net)->tcp_max_retrans, (struct nf_icmp_net)->timeout, (struct netns_xfrm)->state_hmask, (struct netns_xfrm)->state_num, (struct netns_xfrm)->policy_idx_hmask, (struct xfrm_policy_hthresh)->lbits4, (struct xfrm_policy_hthresh)->rbits4, (struct xfrm_policy_hthresh)->lbits6, (struct xfrm_policy_hthresh)->rbits6, (struct netns_xfrm)->sysctl_aevent_etime, (struct netns_xfrm)->sysctl_aevent_rseqth, (struct netns_xfrm)->sysctl_larval_drop, (struct netns_xfrm)->sysctl_acq_expires, (struct flow_cache)->hash_shift, (struct flow_cache)->low_watermark, (struct flow_cache)->high_watermark, ]
+SYSC_timer_create write_list: [(union sigval)->sival_int, (union sigval)->sival_ptr, (struct sigevent)->sigev_signo, (struct sigevent)->sigev_notify, (union anonymous)->_tid, (struct k_clock)->clock_getres, (struct k_clock)->clock_set, (struct k_clock)->clock_get, (struct k_clock)->clock_adj, (struct k_clock)->timer_create, (struct k_clock)->nsleep, (struct k_clock)->timer_set, (struct k_clock)->timer_del, (struct k_clock)->timer_get, (struct k_clock)->timer_rearm, (struct k_clock)->timer_forward, (struct k_clock)->timer_remaining, (struct k_clock)->timer_try_to_cancel, (struct k_clock)->timer_arm, (struct hlist_node)->pprev, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct k_itimer)->it_clock, (struct k_itimer)->it_id, (struct k_itimer)->it_active, (struct k_itimer)->it_overrun, (struct k_itimer)->it_overrun_last, (struct k_itimer)->it_requeue_pending, (struct k_itimer)->it_sigev_notify, (struct k_itimer)->it_interval, (struct rb_node)->__rb_parent_color, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct cpu_timer_list)->expires, (struct cpu_timer_list)->incr, (struct cpu_timer_list)->firing, (struct alarm)->function, (struct alarm)->type, (struct alarm)->state, (struct alarm)->data, (struct callback_head)->func, (struct pid)->level, (struct siginfo)->si_signo, (struct siginfo)->si_code, (struct signal_struct)->nr_threads, (struct signal_struct)->group_exit_code, (struct signal_struct)->notify_count, (struct signal_struct)->group_stop_count, (struct signal_struct)->flags, (struct signal_struct)->is_child_subreaper, (struct signal_struct)->has_child_subreaper, (struct signal_struct)->posix_timer_id, (struct signal_struct)->it_real_incr, (struct atomic64_t)->counter, (struct thread_group_cputimer)->running, (struct thread_group_cputimer)->checking_timer, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct signal_struct)->leader, (struct seqcount)->sequence, (struct signal_struct)->utime, (struct signal_struct)->stime, (struct signal_struct)->cutime, (struct signal_struct)->cstime, (struct signal_struct)->gtime, (struct signal_struct)->cgtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct signal_struct)->nvcsw, (struct signal_struct)->nivcsw, (struct signal_struct)->cnvcsw, (struct signal_struct)->cnivcsw, (struct signal_struct)->min_flt, (struct signal_struct)->maj_flt, (struct signal_struct)->cmin_flt, (struct signal_struct)->cmaj_flt, (struct signal_struct)->inblock, (struct signal_struct)->oublock, (struct signal_struct)->cinblock, (struct signal_struct)->coublock, (struct signal_struct)->maxrss, (struct signal_struct)->cmaxrss, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct signal_struct)->sum_sched_runtime, (struct pacct_struct)->ac_flag, (struct pacct_struct)->ac_exitcode, (struct pacct_struct)->ac_mem, (struct pacct_struct)->ac_utime, (struct pacct_struct)->ac_stime, (struct pacct_struct)->ac_minflt, (struct pacct_struct)->ac_majflt, (struct signal_struct)->audit_tty, (struct signal_struct)->oom_flag_origin, (struct signal_struct)->oom_score_adj, (struct signal_struct)->oom_score_adj_min, (struct mutex)->magic, ]
+C_SYSC_timer_create write_list: [(union sigval)->sival_int, (union sigval)->sival_ptr, (struct sigevent)->sigev_signo, (struct sigevent)->sigev_notify, (union anonymous)->_tid, (struct k_clock)->clock_getres, (struct k_clock)->clock_set, (struct k_clock)->clock_get, (struct k_clock)->clock_adj, (struct k_clock)->timer_create, (struct k_clock)->nsleep, (struct k_clock)->timer_set, (struct k_clock)->timer_del, (struct k_clock)->timer_get, (struct k_clock)->timer_rearm, (struct k_clock)->timer_forward, (struct k_clock)->timer_remaining, (struct k_clock)->timer_try_to_cancel, (struct k_clock)->timer_arm, (struct hlist_node)->pprev, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct k_itimer)->it_clock, (struct k_itimer)->it_id, (struct k_itimer)->it_active, (struct k_itimer)->it_overrun, (struct k_itimer)->it_overrun_last, (struct k_itimer)->it_requeue_pending, (struct k_itimer)->it_sigev_notify, (struct k_itimer)->it_interval, (struct rb_node)->__rb_parent_color, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct cpu_timer_list)->expires, (struct cpu_timer_list)->incr, (struct cpu_timer_list)->firing, (struct alarm)->function, (struct alarm)->type, (struct alarm)->state, (struct alarm)->data, (struct callback_head)->func, (struct pid)->level, (struct siginfo)->si_signo, (struct siginfo)->si_code, (struct signal_struct)->nr_threads, (struct signal_struct)->group_exit_code, (struct signal_struct)->notify_count, (struct signal_struct)->group_stop_count, (struct signal_struct)->flags, (struct signal_struct)->is_child_subreaper, (struct signal_struct)->has_child_subreaper, (struct signal_struct)->posix_timer_id, (struct signal_struct)->it_real_incr, (struct atomic64_t)->counter, (struct thread_group_cputimer)->running, (struct thread_group_cputimer)->checking_timer, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct signal_struct)->leader, (struct seqcount)->sequence, (struct signal_struct)->utime, (struct signal_struct)->stime, (struct signal_struct)->cutime, (struct signal_struct)->cstime, (struct signal_struct)->gtime, (struct signal_struct)->cgtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct signal_struct)->nvcsw, (struct signal_struct)->nivcsw, (struct signal_struct)->cnvcsw, (struct signal_struct)->cnivcsw, (struct signal_struct)->min_flt, (struct signal_struct)->maj_flt, (struct signal_struct)->cmin_flt, (struct signal_struct)->cmaj_flt, (struct signal_struct)->inblock, (struct signal_struct)->oublock, (struct signal_struct)->cinblock, (struct signal_struct)->coublock, (struct signal_struct)->maxrss, (struct signal_struct)->cmaxrss, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct signal_struct)->sum_sched_runtime, (struct pacct_struct)->ac_flag, (struct pacct_struct)->ac_exitcode, (struct pacct_struct)->ac_mem, (struct pacct_struct)->ac_utime, (struct pacct_struct)->ac_stime, (struct pacct_struct)->ac_minflt, (struct pacct_struct)->ac_majflt, (struct signal_struct)->audit_tty, (struct signal_struct)->oom_flag_origin, (struct signal_struct)->oom_score_adj, (struct signal_struct)->oom_score_adj_min, (struct mutex)->magic, ]
+SYSC_timer_gettime write_list: [(struct hlist_node)->pprev, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct k_itimer)->it_clock, (struct k_itimer)->it_id, (struct k_itimer)->it_active, (struct k_itimer)->it_overrun, (struct k_itimer)->it_overrun_last, (struct k_itimer)->it_requeue_pending, (struct k_itimer)->it_sigev_notify, (struct k_itimer)->it_interval, (struct rb_node)->__rb_parent_color, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct cpu_timer_list)->expires, (struct cpu_timer_list)->incr, (struct cpu_timer_list)->firing, (struct alarm)->function, (struct alarm)->type, (struct alarm)->state, (struct alarm)->data, (struct callback_head)->func, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct k_clock)->clock_getres, (struct k_clock)->clock_set, (struct k_clock)->clock_get, (struct k_clock)->clock_adj, (struct k_clock)->timer_create, (struct k_clock)->nsleep, (struct k_clock)->timer_set, (struct k_clock)->timer_del, (struct k_clock)->timer_get, (struct k_clock)->timer_rearm, (struct k_clock)->timer_forward, (struct k_clock)->timer_remaining, (struct k_clock)->timer_try_to_cancel, (struct k_clock)->timer_arm, ]
+C_SYSC_timer_gettime write_list: [(struct hlist_node)->pprev, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct k_itimer)->it_clock, (struct k_itimer)->it_id, (struct k_itimer)->it_active, (struct k_itimer)->it_overrun, (struct k_itimer)->it_overrun_last, (struct k_itimer)->it_requeue_pending, (struct k_itimer)->it_sigev_notify, (struct k_itimer)->it_interval, (struct rb_node)->__rb_parent_color, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct cpu_timer_list)->expires, (struct cpu_timer_list)->incr, (struct cpu_timer_list)->firing, (struct alarm)->function, (struct alarm)->type, (struct alarm)->state, (struct alarm)->data, (struct callback_head)->func, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct k_clock)->clock_getres, (struct k_clock)->clock_set, (struct k_clock)->clock_get, (struct k_clock)->clock_adj, (struct k_clock)->timer_create, (struct k_clock)->nsleep, (struct k_clock)->timer_set, (struct k_clock)->timer_del, (struct k_clock)->timer_get, (struct k_clock)->timer_rearm, (struct k_clock)->timer_forward, (struct k_clock)->timer_remaining, (struct k_clock)->timer_try_to_cancel, (struct k_clock)->timer_arm, ]
+SYSC_timer_getoverrun write_list: [(struct hlist_node)->pprev, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct k_itimer)->it_clock, (struct k_itimer)->it_id, (struct k_itimer)->it_active, (struct k_itimer)->it_overrun, (struct k_itimer)->it_overrun_last, (struct k_itimer)->it_requeue_pending, (struct k_itimer)->it_sigev_notify, (struct k_itimer)->it_interval, (struct rb_node)->__rb_parent_color, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct cpu_timer_list)->expires, (struct cpu_timer_list)->incr, (struct cpu_timer_list)->firing, (struct alarm)->function, (struct alarm)->type, (struct alarm)->state, (struct alarm)->data, (struct callback_head)->func, ]
+SYSC_timer_settime write_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct hlist_node)->pprev, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct k_itimer)->it_clock, (struct k_itimer)->it_id, (struct k_itimer)->it_active, (struct k_itimer)->it_overrun, (struct k_itimer)->it_overrun_last, (struct k_itimer)->it_requeue_pending, (struct k_itimer)->it_sigev_notify, (struct k_itimer)->it_interval, (struct rb_node)->__rb_parent_color, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct cpu_timer_list)->expires, (struct cpu_timer_list)->incr, (struct cpu_timer_list)->firing, (struct alarm)->function, (struct alarm)->type, (struct alarm)->state, (struct alarm)->data, (struct callback_head)->func, (struct k_clock)->clock_getres, (struct k_clock)->clock_set, (struct k_clock)->clock_get, (struct k_clock)->clock_adj, (struct k_clock)->timer_create, (struct k_clock)->nsleep, (struct k_clock)->timer_set, (struct k_clock)->timer_del, (struct k_clock)->timer_get, (struct k_clock)->timer_rearm, (struct k_clock)->timer_forward, (struct k_clock)->timer_remaining, (struct k_clock)->timer_try_to_cancel, (struct k_clock)->timer_arm, ]
+C_SYSC_timer_settime write_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct hlist_node)->pprev, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct k_itimer)->it_clock, (struct k_itimer)->it_id, (struct k_itimer)->it_active, (struct k_itimer)->it_overrun, (struct k_itimer)->it_overrun_last, (struct k_itimer)->it_requeue_pending, (struct k_itimer)->it_sigev_notify, (struct k_itimer)->it_interval, (struct rb_node)->__rb_parent_color, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct cpu_timer_list)->expires, (struct cpu_timer_list)->incr, (struct cpu_timer_list)->firing, (struct alarm)->function, (struct alarm)->type, (struct alarm)->state, (struct alarm)->data, (struct callback_head)->func, (struct k_clock)->clock_getres, (struct k_clock)->clock_set, (struct k_clock)->clock_get, (struct k_clock)->clock_adj, (struct k_clock)->timer_create, (struct k_clock)->nsleep, (struct k_clock)->timer_set, (struct k_clock)->timer_del, (struct k_clock)->timer_get, (struct k_clock)->timer_rearm, (struct k_clock)->timer_forward, (struct k_clock)->timer_remaining, (struct k_clock)->timer_try_to_cancel, (struct k_clock)->timer_arm, ]
+SYSC_timer_delete write_list: [(struct hlist_node)->pprev, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct k_itimer)->it_clock, (struct k_itimer)->it_id, (struct k_itimer)->it_active, (struct k_itimer)->it_overrun, (struct k_itimer)->it_overrun_last, (struct k_itimer)->it_requeue_pending, (struct k_itimer)->it_sigev_notify, (struct k_itimer)->it_interval, (struct rb_node)->__rb_parent_color, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct cpu_timer_list)->expires, (struct cpu_timer_list)->incr, (struct cpu_timer_list)->firing, (struct alarm)->function, (struct alarm)->type, (struct alarm)->state, (struct alarm)->data, (struct callback_head)->func, (struct k_clock)->clock_getres, (struct k_clock)->clock_set, (struct k_clock)->clock_get, (struct k_clock)->clock_adj, (struct k_clock)->timer_create, (struct k_clock)->nsleep, (struct k_clock)->timer_set, (struct k_clock)->timer_del, (struct k_clock)->timer_get, (struct k_clock)->timer_rearm, (struct k_clock)->timer_forward, (struct k_clock)->timer_remaining, (struct k_clock)->timer_try_to_cancel, (struct k_clock)->timer_arm, ]
+SYSC_clock_settime write_list: [(struct k_clock)->clock_getres, (struct k_clock)->clock_set, (struct k_clock)->clock_get, (struct k_clock)->clock_adj, (struct k_clock)->timer_create, (struct k_clock)->nsleep, (struct k_clock)->timer_set, (struct k_clock)->timer_del, (struct k_clock)->timer_get, (struct k_clock)->timer_rearm, (struct k_clock)->timer_forward, (struct k_clock)->timer_remaining, (struct k_clock)->timer_try_to_cancel, (struct k_clock)->timer_arm, ]
+SYSC_clock_gettime write_list: [(struct k_clock)->clock_getres, (struct k_clock)->clock_set, (struct k_clock)->clock_get, (struct k_clock)->clock_adj, (struct k_clock)->timer_create, (struct k_clock)->nsleep, (struct k_clock)->timer_set, (struct k_clock)->timer_del, (struct k_clock)->timer_get, (struct k_clock)->timer_rearm, (struct k_clock)->timer_forward, (struct k_clock)->timer_remaining, (struct k_clock)->timer_try_to_cancel, (struct k_clock)->timer_arm, ]
+SYSC_clock_adjtime write_list: [(struct k_clock)->clock_getres, (struct k_clock)->clock_set, (struct k_clock)->clock_get, (struct k_clock)->clock_adj, (struct k_clock)->timer_create, (struct k_clock)->nsleep, (struct k_clock)->timer_set, (struct k_clock)->timer_del, (struct k_clock)->timer_get, (struct k_clock)->timer_rearm, (struct k_clock)->timer_forward, (struct k_clock)->timer_remaining, (struct k_clock)->timer_try_to_cancel, (struct k_clock)->timer_arm, (struct timex)->modes, (struct timex)->offset, (struct timex)->freq, (struct timex)->maxerror, (struct timex)->esterror, (struct timex)->status, (struct timex)->constant, (struct timex)->precision, (struct timex)->tolerance, (struct timeval)->tv_sec, (struct timeval)->tv_usec, (struct timex)->tick, (struct timex)->ppsfreq, (struct timex)->jitter, (struct timex)->shift, (struct timex)->stabil, (struct timex)->jitcnt, (struct timex)->calcnt, (struct timex)->errcnt, (struct timex)->stbcnt, (struct timex)->tai, ]
+SYSC_clock_getres write_list: [(struct k_clock)->clock_getres, (struct k_clock)->clock_set, (struct k_clock)->clock_get, (struct k_clock)->clock_adj, (struct k_clock)->timer_create, (struct k_clock)->nsleep, (struct k_clock)->timer_set, (struct k_clock)->timer_del, (struct k_clock)->timer_get, (struct k_clock)->timer_rearm, (struct k_clock)->timer_forward, (struct k_clock)->timer_remaining, (struct k_clock)->timer_try_to_cancel, (struct k_clock)->timer_arm, ]
+C_SYSC_clock_settime write_list: [(struct k_clock)->clock_getres, (struct k_clock)->clock_set, (struct k_clock)->clock_get, (struct k_clock)->clock_adj, (struct k_clock)->timer_create, (struct k_clock)->nsleep, (struct k_clock)->timer_set, (struct k_clock)->timer_del, (struct k_clock)->timer_get, (struct k_clock)->timer_rearm, (struct k_clock)->timer_forward, (struct k_clock)->timer_remaining, (struct k_clock)->timer_try_to_cancel, (struct k_clock)->timer_arm, ]
+C_SYSC_clock_gettime write_list: [(struct k_clock)->clock_getres, (struct k_clock)->clock_set, (struct k_clock)->clock_get, (struct k_clock)->clock_adj, (struct k_clock)->timer_create, (struct k_clock)->nsleep, (struct k_clock)->timer_set, (struct k_clock)->timer_del, (struct k_clock)->timer_get, (struct k_clock)->timer_rearm, (struct k_clock)->timer_forward, (struct k_clock)->timer_remaining, (struct k_clock)->timer_try_to_cancel, (struct k_clock)->timer_arm, ]
+C_SYSC_clock_adjtime write_list: [(struct k_clock)->clock_getres, (struct k_clock)->clock_set, (struct k_clock)->clock_get, (struct k_clock)->clock_adj, (struct k_clock)->timer_create, (struct k_clock)->nsleep, (struct k_clock)->timer_set, (struct k_clock)->timer_del, (struct k_clock)->timer_get, (struct k_clock)->timer_rearm, (struct k_clock)->timer_forward, (struct k_clock)->timer_remaining, (struct k_clock)->timer_try_to_cancel, (struct k_clock)->timer_arm, ]
+C_SYSC_clock_getres write_list: [(struct k_clock)->clock_getres, (struct k_clock)->clock_set, (struct k_clock)->clock_get, (struct k_clock)->clock_adj, (struct k_clock)->timer_create, (struct k_clock)->nsleep, (struct k_clock)->timer_set, (struct k_clock)->timer_del, (struct k_clock)->timer_get, (struct k_clock)->timer_rearm, (struct k_clock)->timer_forward, (struct k_clock)->timer_remaining, (struct k_clock)->timer_try_to_cancel, (struct k_clock)->timer_arm, ]
+SYSC_clock_nanosleep write_list: [(struct k_clock)->clock_getres, (struct k_clock)->clock_set, (struct k_clock)->clock_get, (struct k_clock)->clock_adj, (struct k_clock)->timer_create, (struct k_clock)->nsleep, (struct k_clock)->timer_set, (struct k_clock)->timer_del, (struct k_clock)->timer_get, (struct k_clock)->timer_rearm, (struct k_clock)->timer_forward, (struct k_clock)->timer_remaining, (struct k_clock)->timer_try_to_cancel, (struct k_clock)->timer_arm, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+C_SYSC_clock_nanosleep write_list: [(struct k_clock)->clock_getres, (struct k_clock)->clock_set, (struct k_clock)->clock_get, (struct k_clock)->clock_adj, (struct k_clock)->timer_create, (struct k_clock)->nsleep, (struct k_clock)->timer_set, (struct k_clock)->timer_del, (struct k_clock)->timer_get, (struct k_clock)->timer_rearm, (struct k_clock)->timer_forward, (struct k_clock)->timer_remaining, (struct k_clock)->timer_try_to_cancel, (struct k_clock)->timer_arm, (struct compat_timespec)->tv_sec, (struct compat_timespec)->tv_nsec, ]
+SYSC_getitimer write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct timeval)->tv_sec, (struct timeval)->tv_usec, ]
+C_SYSC_getitimer write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct timeval)->tv_sec, (struct timeval)->tv_usec, ]
+SYSC_alarm write_list: [(struct timeval)->tv_sec, (struct timeval)->tv_usec, ]
+SYSC_setitimer write_list: [(struct timeval)->tv_sec, (struct timeval)->tv_usec, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct signal_struct)->it_real_incr, ]
+C_SYSC_setitimer write_list: [(struct timeval)->tv_sec, (struct timeval)->tv_usec, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct signal_struct)->it_real_incr, ]
+SYSC_nanosleep write_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct rb_node)->__rb_parent_color, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct restart_block)->fn, ]
+C_SYSC_nanosleep write_list: [(struct compat_timespec)->tv_sec, (struct compat_timespec)->tv_nsec, (struct rb_node)->__rb_parent_color, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct restart_block)->fn, ]
+SYSC_stime write_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct timespec)->tv_sec, ]
+C_SYSC_stime write_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct timespec)->tv_sec, ]
+SYSC_settimeofday write_list: [(struct timeval)->tv_sec, (struct timeval)->tv_usec, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct timezone)->tz_minuteswest, (struct timezone)->tz_dsttime, ]
+C_SYSC_settimeofday write_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct timezone)->tz_minuteswest, (struct timezone)->tz_dsttime, ]
+SYSC_adjtimex write_list: [(struct timex)->modes, (struct timex)->offset, (struct timex)->freq, (struct timex)->maxerror, (struct timex)->esterror, (struct timex)->status, (struct timex)->constant, (struct timex)->precision, (struct timex)->tolerance, (struct timeval)->tv_sec, (struct timeval)->tv_usec, (struct timex)->tick, (struct timex)->ppsfreq, (struct timex)->jitter, (struct timex)->shift, (struct timex)->stabil, (struct timex)->jitcnt, (struct timex)->calcnt, (struct timex)->errcnt, (struct timex)->stbcnt, (struct timex)->tai, ]
+SYSC_capget write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct __user_cap_data_struct)->effective, (struct __user_cap_data_struct)->permitted, (struct __user_cap_data_struct)->inheritable, ]
+SYSC_capset write_list: [(struct atomic_t)->counter, (struct kuid_t)->val, (struct kgid_t)->val, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, (struct callback_head)->func, ]
+SYSC_syslog write_list: [(struct printk_log)->ts_nsec, (struct printk_log)->len, (struct printk_log)->text_len, (struct printk_log)->dict_len, (struct printk_log)->facility, (struct printk_log)->flags, (struct printk_log)->level, ]
+C_SYSC_set_robust_list write_list: [(struct compat_robust_list)->next, (struct compat_robust_list_head)->futex_offset, (struct compat_robust_list_head)->list_op_pending, ]
+C_SYSC_get_robust_list write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct compat_robust_list)->next, (struct compat_robust_list_head)->futex_offset, (struct compat_robust_list_head)->list_op_pending, ]
+SYSC_sysctl write_list: [(struct __sysctl_args)->name, (struct __sysctl_args)->nlen, (struct __sysctl_args)->oldval, (struct __sysctl_args)->oldlenp, (struct __sysctl_args)->newval, (struct __sysctl_args)->newlen, ]
+C_SYSC_sysctl write_list: [(struct compat_sysctl_args)->name, (struct compat_sysctl_args)->nlen, (struct compat_sysctl_args)->oldval, (struct compat_sysctl_args)->oldlenp, (struct compat_sysctl_args)->newval, (struct compat_sysctl_args)->newlen, ]
+SYSC_personality write_list: [(struct task_struct)->personality, ]
+SYSC_sched_setscheduler write_list: [(struct sched_param)->sched_priority, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+SYSC_sched_setparam write_list: [(struct sched_param)->sched_priority, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+SYSC_sched_setattr write_list: [(struct sched_attr)->size, (struct sched_attr)->sched_policy, (struct sched_attr)->sched_flags, (struct sched_attr)->sched_nice, (struct sched_attr)->sched_priority, (struct sched_attr)->sched_runtime, (struct sched_attr)->sched_deadline, (struct sched_attr)->sched_period, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+SYSC_sched_getscheduler write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+SYSC_sched_getparam write_list: [(struct sched_param)->sched_priority, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+SYSC_sched_getattr write_list: [(struct sched_attr)->size, (struct sched_attr)->sched_policy, (struct sched_attr)->sched_flags, (struct sched_attr)->sched_nice, (struct sched_attr)->sched_priority, (struct sched_attr)->sched_runtime, (struct sched_attr)->sched_deadline, (struct sched_attr)->sched_period, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+SYSC_sched_setaffinity write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct kgid_t)->val, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, ]
+SYSC_sched_getaffinity write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+sys_sched_yield write_list: [(struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct rq)->nr_running, (struct rq)->last_load_update_tick, (struct rq)->nohz_flags, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rq)->nr_load_updates, (struct rq)->nr_switches, (struct cfs_rq)->nr_running, (struct cfs_rq)->h_nr_running, (struct cfs_rq)->exec_clock, (struct cfs_rq)->min_vruntime, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct cfs_rq)->runnable_load_sum, (struct cfs_rq)->runnable_load_avg, (struct cfs_rq)->tg_load_avg_contrib, (struct cfs_rq)->propagate_avg, (struct atomic64_t)->counter, (struct cfs_rq)->h_load, (struct cfs_rq)->last_h_load_update, (struct cfs_rq)->on_list, (struct rt_rq)->rt_nr_running, (struct rt_rq)->rr_nr_running, (struct rt_rq)->rt_nr_migratory, (struct rt_rq)->rt_nr_total, (struct rt_rq)->overloaded, (struct rt_rq)->push_flags, (struct rt_rq)->push_cpu, (struct irq_work)->flags, (struct irq_work)->func, (struct rt_rq)->rt_queued, (struct rt_rq)->rt_throttled, (struct rt_rq)->rt_time, (struct rt_rq)->rt_runtime, (struct dl_rq)->dl_nr_running, (struct dl_rq)->dl_nr_migratory, (struct dl_rq)->overloaded, (struct dl_rq)->running_bw, (struct dl_rq)->this_bw, (struct dl_rq)->extra_bw, (struct dl_rq)->bw_ratio, (struct rq)->nr_uninterruptible, (struct rq)->next_balance, (struct rq)->clock_update_flags, (struct rq)->clock, (struct rq)->clock_task, (struct rq)->cpu_capacity, (struct rq)->cpu_capacity_orig, (struct rq)->idle_balance, (struct rq)->active_balance, (struct rq)->push_cpu, (struct cpu_stop_work)->fn, (struct cpu_stop_work)->arg, (struct rq)->cpu, (struct rq)->online, (struct rq)->rt_avg, (struct rq)->age_stamp, (struct rq)->idle_stamp, (struct rq)->avg_idle, (struct rq)->max_idle_balance_cost, (struct rq)->calc_load_update, (struct rq)->calc_load_active, (struct rq)->hrtick_csd_pending, (struct call_single_data)->func, (struct call_single_data)->info, (struct call_single_data)->flags, (struct rb_node)->__rb_parent_color, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct rq)->rq_cpu_time, (struct rq)->yld_count, (struct rq)->sched_count, (struct rq)->sched_goidle, (struct rq)->ttwu_count, (struct rq)->ttwu_local, ]
+SYSC_sched_rr_get_interval write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct rq_flags)->flags, (struct rq)->nr_running, (struct rq)->last_load_update_tick, (struct rq)->nohz_flags, (struct rq)->nr_load_updates, (struct rq)->nr_switches, (struct cfs_rq)->nr_running, (struct cfs_rq)->h_nr_running, (struct cfs_rq)->exec_clock, (struct cfs_rq)->min_vruntime, (struct cfs_rq)->runnable_load_sum, (struct cfs_rq)->runnable_load_avg, (struct cfs_rq)->tg_load_avg_contrib, (struct cfs_rq)->propagate_avg, (struct cfs_rq)->h_load, (struct cfs_rq)->last_h_load_update, (struct cfs_rq)->on_list, (struct rt_rq)->rt_nr_running, (struct rt_rq)->rr_nr_running, (struct rt_rq)->rt_nr_migratory, (struct rt_rq)->rt_nr_total, (struct rt_rq)->overloaded, (struct rt_rq)->push_flags, (struct rt_rq)->push_cpu, (struct irq_work)->flags, (struct irq_work)->func, (struct rt_rq)->rt_queued, (struct rt_rq)->rt_throttled, (struct rt_rq)->rt_time, (struct rt_rq)->rt_runtime, (struct dl_rq)->dl_nr_running, (struct dl_rq)->dl_nr_migratory, (struct dl_rq)->overloaded, (struct dl_rq)->running_bw, (struct dl_rq)->this_bw, (struct dl_rq)->extra_bw, (struct dl_rq)->bw_ratio, (struct rq)->nr_uninterruptible, (struct rq)->next_balance, (struct rq)->clock_update_flags, (struct rq)->clock, (struct rq)->clock_task, (struct rq)->cpu_capacity, (struct rq)->cpu_capacity_orig, (struct rq)->idle_balance, (struct rq)->active_balance, (struct rq)->push_cpu, (struct cpu_stop_work)->fn, (struct cpu_stop_work)->arg, (struct rq)->cpu, (struct rq)->online, (struct rq)->rt_avg, (struct rq)->age_stamp, (struct rq)->idle_stamp, (struct rq)->avg_idle, (struct rq)->max_idle_balance_cost, (struct rq)->calc_load_update, (struct rq)->calc_load_active, (struct rq)->hrtick_csd_pending, (struct call_single_data)->func, (struct call_single_data)->info, (struct call_single_data)->flags, (struct rq)->rq_cpu_time, (struct rq)->yld_count, (struct rq)->sched_count, (struct rq)->sched_goidle, (struct rq)->ttwu_count, (struct rq)->ttwu_local, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+SYSC_acct write_list: [(struct filename)->name, (struct filename)->uptr, (struct filename)->refcnt, (struct atomic_t)->counter, (struct callback_head)->func, (struct pid_namespace)->last_pid, (struct pid_namespace)->nr_hashed, (struct pid_namespace)->level, (struct atomic64_t)->counter, (struct work_struct)->func, (struct lockdep_map)->name, (struct kgid_t)->val, (struct pid_namespace)->hide_pid, (struct pid_namespace)->reboot, (struct ns_common)->inum, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct fs_pin)->done, (struct hlist_node)->pprev, (struct fs_pin)->kill, (struct mutex)->magic, (struct bsd_acct_struct)->active, (struct bsd_acct_struct)->needcheck, (struct completion)->done, (struct file)->f_write_hint, (struct file)->f_flags, (struct file)->f_mode, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, (struct vfsmount)->mnt_flags, ]
+SYSC_getresuid16 write_list: [(struct atomic_t)->counter, (struct kuid_t)->val, (struct kgid_t)->val, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, (struct callback_head)->func, ]
+SYSC_getresgid16 write_list: [(struct atomic_t)->counter, (struct kuid_t)->val, (struct kgid_t)->val, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, (struct callback_head)->func, ]
+SYSC_getgroups16 write_list: [(struct atomic_t)->counter, (struct kuid_t)->val, (struct kgid_t)->val, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, (struct callback_head)->func, (struct uid_gid_map)->nr_extents, (struct user_namespace)->level, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct user_namespace)->flags, (struct work_struct)->func, (struct lockdep_map)->name, (struct ctl_table_set)->is_seen, (struct ctl_table_header)->used, (struct ctl_table_header)->count, (struct ctl_table_header)->nreg, ]
+SYSC_setgroups16 write_list: [(struct atomic_t)->counter, (struct group_info)->ngroups, (struct uid_gid_map)->nr_extents, (struct user_namespace)->level, (struct kuid_t)->val, (struct kgid_t)->val, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct user_namespace)->flags, (struct work_struct)->func, (struct lockdep_map)->name, (struct ctl_table_set)->is_seen, (struct ctl_table_header)->used, (struct ctl_table_header)->count, (struct ctl_table_header)->nreg, (struct callback_head)->func, ]
+SYSC_mremap write_list: [(struct mm_struct)->vmacache_seqnum, (struct mm_struct)->get_unmapped_area, (struct mm_struct)->mmap_base, (struct mm_struct)->mmap_legacy_base, (struct mm_struct)->mmap_compat_base, (struct mm_struct)->mmap_compat_legacy_base, (struct mm_struct)->task_size, (struct mm_struct)->highest_vm_end, (struct atomic_t)->counter, (struct atomic64_t)->counter, (struct mm_struct)->map_count, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mm_struct)->hiwater_rss, (struct mm_struct)->hiwater_vm, (struct mm_struct)->total_vm, (struct mm_struct)->locked_vm, (struct mm_struct)->pinned_vm, (struct mm_struct)->data_vm, (struct mm_struct)->exec_vm, (struct mm_struct)->stack_vm, (struct mm_struct)->def_flags, (struct mm_struct)->start_code, (struct mm_struct)->end_code, (struct mm_struct)->start_data, (struct mm_struct)->end_data, (struct mm_struct)->start_brk, (struct mm_struct)->brk, (struct mm_struct)->start_stack, (struct mm_struct)->arg_start, (struct mm_struct)->arg_end, (struct mm_struct)->env_start, (struct mm_struct)->env_end, (struct mm_context_t)->ia32_compat, (struct mutex)->magic, (struct mm_context_t)->vdso, (struct mm_context_t)->pkey_allocation_map, (struct mm_context_t)->execute_only_pkey, (struct mm_struct)->flags, (struct mm_struct)->tlb_flush_batched, (struct work_struct)->func, (struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, (struct rb_node)->__rb_parent_color, (struct vm_area_struct)->rb_subtree_gap, (struct pgprot)->pgprot, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_pgoff, (struct vm_area_struct)->vm_private_data, ]
+SYSC_memfd_create write_list: [(struct callback_head)->func, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct file)->f_write_hint, (struct atomic64_t)->counter, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, (struct shmem_inode_info)->seals, (struct shmem_inode_info)->flags, (struct shmem_inode_info)->alloced, (struct shmem_inode_info)->swapped, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, ]
+SYSC_brk write_list: [(struct mm_struct)->vmacache_seqnum, (struct mm_struct)->get_unmapped_area, (struct mm_struct)->mmap_base, (struct mm_struct)->mmap_legacy_base, (struct mm_struct)->mmap_compat_base, (struct mm_struct)->mmap_compat_legacy_base, (struct mm_struct)->task_size, (struct mm_struct)->highest_vm_end, (struct atomic_t)->counter, (struct atomic64_t)->counter, (struct mm_struct)->map_count, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mm_struct)->hiwater_rss, (struct mm_struct)->hiwater_vm, (struct mm_struct)->total_vm, (struct mm_struct)->locked_vm, (struct mm_struct)->pinned_vm, (struct mm_struct)->data_vm, (struct mm_struct)->exec_vm, (struct mm_struct)->stack_vm, (struct mm_struct)->def_flags, (struct mm_struct)->start_code, (struct mm_struct)->end_code, (struct mm_struct)->start_data, (struct mm_struct)->end_data, (struct mm_struct)->start_brk, (struct mm_struct)->brk, (struct mm_struct)->start_stack, (struct mm_struct)->arg_start, (struct mm_struct)->arg_end, (struct mm_struct)->env_start, (struct mm_struct)->env_end, (struct mm_context_t)->ia32_compat, (struct mutex)->magic, (struct mm_context_t)->vdso, (struct mm_context_t)->pkey_allocation_map, (struct mm_context_t)->execute_only_pkey, (struct mm_struct)->flags, (struct mm_struct)->tlb_flush_batched, (struct work_struct)->func, (struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, (struct rb_node)->__rb_parent_color, (struct vm_area_struct)->rb_subtree_gap, (struct pgprot)->pgprot, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_pgoff, (struct vm_area_struct)->vm_private_data, ]
+SYSC_mmap_pgoff write_list: [(struct callback_head)->func, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct file)->f_write_hint, (struct atomic64_t)->counter, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, (struct hstate)->next_nid_to_alloc, (struct hstate)->next_nid_to_free, (struct hstate)->order, (struct hstate)->mask, (struct hstate)->max_huge_pages, (struct hstate)->nr_huge_pages, (struct hstate)->free_huge_pages, (struct hstate)->resv_huge_pages, (struct hstate)->surplus_huge_pages, (struct hstate)->nr_overcommit_huge_pages, ]
+SYSC_remap_file_pages write_list: [(struct mm_struct)->vmacache_seqnum, (struct mm_struct)->get_unmapped_area, (struct mm_struct)->mmap_base, (struct mm_struct)->mmap_legacy_base, (struct mm_struct)->mmap_compat_base, (struct mm_struct)->mmap_compat_legacy_base, (struct mm_struct)->task_size, (struct mm_struct)->highest_vm_end, (struct atomic_t)->counter, (struct atomic64_t)->counter, (struct mm_struct)->map_count, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mm_struct)->hiwater_rss, (struct mm_struct)->hiwater_vm, (struct mm_struct)->total_vm, (struct mm_struct)->locked_vm, (struct mm_struct)->pinned_vm, (struct mm_struct)->data_vm, (struct mm_struct)->exec_vm, (struct mm_struct)->stack_vm, (struct mm_struct)->def_flags, (struct mm_struct)->start_code, (struct mm_struct)->end_code, (struct mm_struct)->start_data, (struct mm_struct)->end_data, (struct mm_struct)->start_brk, (struct mm_struct)->brk, (struct mm_struct)->start_stack, (struct mm_struct)->arg_start, (struct mm_struct)->arg_end, (struct mm_struct)->env_start, (struct mm_struct)->env_end, (struct mm_context_t)->ia32_compat, (struct mutex)->magic, (struct mm_context_t)->vdso, (struct mm_context_t)->pkey_allocation_map, (struct mm_context_t)->execute_only_pkey, (struct mm_struct)->flags, (struct mm_struct)->tlb_flush_batched, (struct work_struct)->func, (struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, (struct rb_node)->__rb_parent_color, (struct vm_area_struct)->rb_subtree_gap, (struct pgprot)->pgprot, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_pgoff, (struct vm_area_struct)->vm_private_data, (struct callback_head)->func, (struct file)->f_write_hint, (struct file)->f_flags, (struct file)->f_mode, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+SYSC_munlock write_list: [(struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, (struct rb_node)->__rb_parent_color, (struct vm_area_struct)->rb_subtree_gap, (struct pgprot)->pgprot, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_pgoff, (struct vm_area_struct)->vm_private_data, ]
+SYSC_mlockall write_list: [(struct mm_struct)->def_flags, (struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, (struct rb_node)->__rb_parent_color, (struct vm_area_struct)->rb_subtree_gap, (struct pgprot)->pgprot, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_pgoff, (struct vm_area_struct)->vm_private_data, ]
+sys_munlockall write_list: [(struct mm_struct)->def_flags, (struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, (struct rb_node)->__rb_parent_color, (struct vm_area_struct)->rb_subtree_gap, (struct pgprot)->pgprot, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_pgoff, (struct vm_area_struct)->vm_private_data, ]
+SYSC_move_pages write_list: [(struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct atomic_t)->counter, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct callback_head)->func, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct mm_struct)->vmacache_seqnum, (struct mm_struct)->get_unmapped_area, (struct mm_struct)->mmap_base, (struct mm_struct)->mmap_legacy_base, (struct mm_struct)->mmap_compat_base, (struct mm_struct)->mmap_compat_legacy_base, (struct mm_struct)->task_size, (struct mm_struct)->highest_vm_end, (struct mm_struct)->map_count, (struct mm_struct)->hiwater_rss, (struct mm_struct)->hiwater_vm, (struct mm_struct)->total_vm, (struct mm_struct)->locked_vm, (struct mm_struct)->pinned_vm, (struct mm_struct)->data_vm, (struct mm_struct)->exec_vm, (struct mm_struct)->stack_vm, (struct mm_struct)->def_flags, (struct mm_struct)->start_code, (struct mm_struct)->end_code, (struct mm_struct)->start_data, (struct mm_struct)->end_data, (struct mm_struct)->start_brk, (struct mm_struct)->brk, (struct mm_struct)->start_stack, (struct mm_struct)->arg_start, (struct mm_struct)->arg_end, (struct mm_struct)->env_start, (struct mm_struct)->env_end, (struct mm_context_t)->ia32_compat, (struct mm_context_t)->vdso, (struct mm_context_t)->pkey_allocation_map, (struct mm_context_t)->execute_only_pkey, (struct mm_struct)->flags, (struct mm_struct)->tlb_flush_batched, (struct work_struct)->func, (struct page_to_node)->addr, (struct page_to_node)->node, (struct page_to_node)->status, ]
+SYSC_readahead write_list: [(struct fd)->flags, (struct radix_tree_root)->gfp_mask, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct atomic64_t)->counter, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, ]
+SYSC_swapoff write_list: [(struct filename)->name, (struct filename)->uptr, (struct filename)->refcnt, (struct callback_head)->func, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct file)->f_write_hint, (struct atomic64_t)->counter, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct swap_info_struct)->flags, (struct swap_info_struct)->prio, (struct plist_node)->prio, (struct swap_info_struct)->type, (struct swap_info_struct)->max, (struct swap_info_struct)->swap_map, (struct swap_cluster_info)->data, (struct swap_cluster_info)->flags, (struct swap_info_struct)->lowest_bit, (struct swap_info_struct)->highest_bit, (struct swap_info_struct)->pages, (struct swap_info_struct)->inuse_pages, (struct swap_info_struct)->cluster_next, (struct swap_info_struct)->cluster_nr, (struct swap_extent)->start_page, (struct swap_extent)->nr_pages, (struct swap_extent)->start_block, (struct swap_info_struct)->old_block_size, (struct work_struct)->func, (struct signal_struct)->oom_flag_origin, (struct mm_struct)->vmacache_seqnum, (struct mm_struct)->get_unmapped_area, (struct mm_struct)->mmap_base, (struct mm_struct)->mmap_legacy_base, (struct mm_struct)->mmap_compat_base, (struct mm_struct)->mmap_compat_legacy_base, (struct mm_struct)->task_size, (struct mm_struct)->highest_vm_end, (struct mm_struct)->map_count, (struct mm_struct)->hiwater_rss, (struct mm_struct)->hiwater_vm, (struct mm_struct)->total_vm, (struct mm_struct)->locked_vm, (struct mm_struct)->pinned_vm, (struct mm_struct)->data_vm, (struct mm_struct)->exec_vm, (struct mm_struct)->stack_vm, (struct mm_struct)->def_flags, (struct mm_struct)->start_code, (struct mm_struct)->end_code, (struct mm_struct)->start_data, (struct mm_struct)->end_data, (struct mm_struct)->start_brk, (struct mm_struct)->brk, (struct mm_struct)->start_stack, (struct mm_struct)->arg_start, (struct mm_struct)->arg_end, (struct mm_struct)->env_start, (struct mm_struct)->env_end, (struct mm_context_t)->ia32_compat, (struct mm_context_t)->vdso, (struct mm_context_t)->pkey_allocation_map, (struct mm_context_t)->execute_only_pkey, (struct mm_struct)->flags, (struct mm_struct)->tlb_flush_batched, (struct swp_entry_t)->val, (struct page)->flags, (struct page)->s_mem, (struct page)->index, (struct page)->freelist, (struct page)->counters, (struct page)->active, (struct page)->inuse, (struct page)->objects, (struct page)->frozen, (struct page)->units, (struct page)->pages, (struct page)->pobjects, (struct page)->compound_head, (struct page)->compound_dtor, (struct page)->compound_order, (struct page)->private, (struct writeback_control)->sync_mode, (struct writeback_control)->nr_to_write, (struct writeback_control)->pages_skipped, (struct writeback_control)->range_start, (struct writeback_control)->range_end, (struct writeback_control)->for_kupdate, (struct writeback_control)->for_background, (struct writeback_control)->tagged_writepages, (struct writeback_control)->for_reclaim, (struct writeback_control)->range_cyclic, (struct writeback_control)->for_sync, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct inode)->i_version, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (struct block_device)->bd_dev, (struct block_device)->bd_openers, (struct block_device)->bd_claiming, (struct block_device)->bd_holder, (struct block_device)->bd_holders, (struct block_device)->bd_write_holder, (struct block_device)->bd_block_size, (struct block_device)->bd_part_count, (struct block_device)->bd_invalidated, (struct block_device)->bd_private, (struct block_device)->bd_fsfreeze_count, ]
+SYSC_swapon write_list: [(struct swap_info_struct)->flags, (struct swap_info_struct)->prio, (struct plist_node)->prio, (struct swap_info_struct)->type, (struct swap_info_struct)->max, (struct swap_info_struct)->swap_map, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct swap_cluster_info)->data, (struct swap_cluster_info)->flags, (struct swap_info_struct)->lowest_bit, (struct swap_info_struct)->highest_bit, (struct swap_info_struct)->pages, (struct swap_info_struct)->inuse_pages, (struct swap_info_struct)->cluster_next, (struct swap_info_struct)->cluster_nr, (struct swap_extent)->start_page, (struct swap_extent)->nr_pages, (struct swap_extent)->start_block, (struct swap_info_struct)->old_block_size, (struct atomic64_t)->counter, (struct work_struct)->func, (struct filename)->name, (struct filename)->uptr, (struct filename)->refcnt, (struct callback_head)->func, (struct file)->f_write_hint, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct inode)->i_version, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (struct block_device)->bd_dev, (struct block_device)->bd_openers, (struct block_device)->bd_claiming, (struct block_device)->bd_holder, (struct block_device)->bd_holders, (struct block_device)->bd_write_holder, (struct block_device)->bd_block_size, (struct block_device)->bd_part_count, (struct block_device)->bd_invalidated, (struct block_device)->bd_private, (struct block_device)->bd_fsfreeze_count, (struct page)->flags, (struct page)->s_mem, (struct page)->index, (struct page)->freelist, (struct page)->counters, (struct page)->active, (struct page)->inuse, (struct page)->objects, (struct page)->frozen, (struct page)->units, (struct page)->pages, (struct page)->pobjects, (struct page)->compound_head, (struct page)->compound_dtor, (struct page)->compound_order, (struct page)->private, (struct super_block)->s_dev, (struct super_block)->s_blocksize_bits, (struct super_block)->s_blocksize, (struct super_block)->s_maxbytes, (struct super_block)->s_flags, (struct super_block)->s_iflags, (struct super_block)->s_magic, (struct super_block)->s_count, (struct super_block)->s_security, (struct super_block)->s_xattr, (struct super_block)->s_quota_types, (struct quota_info)->flags, (struct sb_writers)->frozen, (struct super_block)->s_fs_info, (struct super_block)->s_max_links, (struct super_block)->s_mode, (struct super_block)->s_time_gran, (struct super_block)->s_subtype, (struct super_block)->cleancache_poolid, (struct shrinker)->count_objects, (struct shrinker)->scan_objects, (struct shrinker)->seeks, (struct shrinker)->batch, (struct shrinker)->flags, (struct super_block)->s_readonly_remount, (struct super_block)->s_stack_depth, (struct percpu_cluster)->next, (struct request_queue)->nr_rqs_elvpriv, (struct request_list)->flags, (struct request_queue)->request_fn, (struct request_queue)->make_request_fn, (struct request_queue)->prep_rq_fn, (struct request_queue)->unprep_rq_fn, (struct request_queue)->softirq_done_fn, (struct request_queue)->rq_timed_out_fn, (struct request_queue)->dma_drain_needed, (struct request_queue)->lld_busy_fn, (struct request_queue)->init_rq_fn, (struct request_queue)->exit_rq_fn, (struct request_queue)->initialize_rq_fn, (struct request_queue)->mq_map, (struct request_queue)->nr_queues, (struct request_queue)->queue_depth, (struct request_queue)->queue_hw_ctx, (struct request_queue)->nr_hw_queues, (struct request_queue)->end_sector, (struct timer_list)->expires, (struct timer_list)->function, (struct timer_list)->data, (struct timer_list)->flags, (struct delayed_work)->cpu, (struct request_queue)->queuedata, (struct request_queue)->queue_flags, (struct request_queue)->id, (struct request_queue)->bounce_gfp, (struct kobject)->name, (struct kobject)->state_initialized, (struct kobject)->state_in_sysfs, (struct kobject)->state_add_uevent_sent, (struct kobject)->state_remove_uevent_sent, (struct kobject)->uevent_suppress, (struct request_queue)->rpm_status, (struct request_queue)->nr_pending, (struct request_queue)->nr_requests, (struct request_queue)->nr_congestion_on, (struct request_queue)->nr_congestion_off, (struct request_queue)->nr_batching, (struct request_queue)->dma_drain_size, (struct request_queue)->dma_drain_buffer, (struct request_queue)->dma_pad_mask, (struct request_queue)->dma_alignment, (struct request_queue)->nr_sorted, (struct request_queue)->request_fn_active, (struct request_queue)->rq_timeout, (struct request_queue)->poll_nsec, (struct queue_limits)->bounce_pfn, (struct queue_limits)->seg_boundary_mask, (struct queue_limits)->virt_boundary_mask, (struct queue_limits)->max_hw_sectors, (struct queue_limits)->max_dev_sectors, (struct queue_limits)->chunk_sectors, (struct queue_limits)->max_sectors, (struct queue_limits)->max_segment_size, (struct queue_limits)->physical_block_size, (struct queue_limits)->alignment_offset, (struct queue_limits)->io_min, (struct queue_limits)->io_opt, (struct queue_limits)->max_discard_sectors, (struct queue_limits)->max_hw_discard_sectors, (struct queue_limits)->max_write_same_sectors, (struct queue_limits)->max_write_zeroes_sectors, (struct queue_limits)->discard_granularity, (struct queue_limits)->discard_alignment, (struct queue_limits)->logical_block_size, (struct queue_limits)->max_segments, (struct queue_limits)->max_integrity_segments, (struct queue_limits)->max_discard_segments, (struct queue_limits)->misaligned, (struct queue_limits)->discard_misaligned, (struct queue_limits)->cluster, (struct queue_limits)->raid_partial_stripes_expensive, (struct queue_limits)->zoned, (struct request_queue)->sg_timeout, (struct request_queue)->sg_reserved_size, (struct request_queue)->node, (struct request_queue)->bypass_depth, (struct request_queue)->bsg_job_fn, (struct bsg_class_device)->minor, (struct bsg_class_device)->release, (struct percpu_ref)->percpu_count_ptr, (struct percpu_ref)->release, (struct percpu_ref)->confirm_switch, (struct percpu_ref)->force_atomic, (struct request_queue)->mq_sysfs_init_done, (struct request_queue)->cmd_size, (struct request_queue)->rq_alloc_data, ]
+SYSC_mprotect write_list: [(struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, (struct rb_node)->__rb_parent_color, (struct vm_area_struct)->rb_subtree_gap, (struct pgprot)->pgprot, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_pgoff, (struct vm_area_struct)->vm_private_data, ]
+SYSC_pkey_mprotect write_list: [(struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, (struct rb_node)->__rb_parent_color, (struct vm_area_struct)->rb_subtree_gap, (struct pgprot)->pgprot, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_pgoff, (struct vm_area_struct)->vm_private_data, ]
+SYSC_pkey_alloc write_list: [(struct mm_context_t)->pkey_allocation_map, ]
+SYSC_pkey_free write_list: [(struct mm_context_t)->pkey_allocation_map, ]
+SYSC_mincore write_list: [(struct mm_walk)->pmd_entry, (struct mm_walk)->pte_hole, (struct mm_walk)->hugetlb_entry, (struct mm_walk)->private, (struct mm_walk)->pud_entry, (struct mm_walk)->pte_entry, (struct mm_walk)->test_walk, (struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, (struct rb_node)->__rb_parent_color, (struct vm_area_struct)->rb_subtree_gap, (struct pgprot)->pgprot, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_pgoff, (struct vm_area_struct)->vm_private_data, (struct mm_struct)->vmacache_seqnum, (struct mm_struct)->get_unmapped_area, (struct mm_struct)->mmap_base, (struct mm_struct)->mmap_legacy_base, (struct mm_struct)->mmap_compat_base, (struct mm_struct)->mmap_compat_legacy_base, (struct mm_struct)->task_size, (struct mm_struct)->highest_vm_end, (struct atomic_t)->counter, (struct atomic64_t)->counter, (struct mm_struct)->map_count, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mm_struct)->hiwater_rss, (struct mm_struct)->hiwater_vm, (struct mm_struct)->total_vm, (struct mm_struct)->locked_vm, (struct mm_struct)->pinned_vm, (struct mm_struct)->data_vm, (struct mm_struct)->exec_vm, (struct mm_struct)->stack_vm, (struct mm_struct)->def_flags, (struct mm_struct)->start_code, (struct mm_struct)->end_code, (struct mm_struct)->start_data, (struct mm_struct)->end_data, (struct mm_struct)->start_brk, (struct mm_struct)->brk, (struct mm_struct)->start_stack, (struct mm_struct)->arg_start, (struct mm_struct)->arg_end, (struct mm_struct)->env_start, (struct mm_struct)->env_end, (struct mm_context_t)->ia32_compat, (struct mutex)->magic, (struct mm_context_t)->vdso, (struct mm_context_t)->pkey_allocation_map, (struct mm_context_t)->execute_only_pkey, (struct mm_struct)->flags, (struct mm_struct)->tlb_flush_batched, (struct work_struct)->func, ]
+SYSC_mbind write_list: [(struct mm_struct)->vmacache_seqnum, (struct mm_struct)->get_unmapped_area, (struct mm_struct)->mmap_base, (struct mm_struct)->mmap_legacy_base, (struct mm_struct)->mmap_compat_base, (struct mm_struct)->mmap_compat_legacy_base, (struct mm_struct)->task_size, (struct mm_struct)->highest_vm_end, (struct atomic_t)->counter, (struct atomic64_t)->counter, (struct mm_struct)->map_count, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mm_struct)->hiwater_rss, (struct mm_struct)->hiwater_vm, (struct mm_struct)->total_vm, (struct mm_struct)->locked_vm, (struct mm_struct)->pinned_vm, (struct mm_struct)->data_vm, (struct mm_struct)->exec_vm, (struct mm_struct)->stack_vm, (struct mm_struct)->def_flags, (struct mm_struct)->start_code, (struct mm_struct)->end_code, (struct mm_struct)->start_data, (struct mm_struct)->end_data, (struct mm_struct)->start_brk, (struct mm_struct)->brk, (struct mm_struct)->start_stack, (struct mm_struct)->arg_start, (struct mm_struct)->arg_end, (struct mm_struct)->env_start, (struct mm_struct)->env_end, (struct mm_context_t)->ia32_compat, (struct mutex)->magic, (struct mm_context_t)->vdso, (struct mm_context_t)->pkey_allocation_map, (struct mm_context_t)->execute_only_pkey, (struct mm_struct)->flags, (struct mm_struct)->tlb_flush_batched, (struct work_struct)->func, (struct mempolicy)->mode, (struct mempolicy)->flags, (union anonymous)->preferred_node, ]
+SYSC_set_mempolicy write_list: [(struct atomic_t)->counter, (struct mempolicy)->mode, (struct mempolicy)->flags, (union anonymous)->preferred_node, (struct task_struct)->il_prev, ]
+SYSC_migrate_pages write_list: [(struct atomic_t)->counter, (struct kuid_t)->val, (struct kgid_t)->val, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, (struct callback_head)->func, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct atomic64_t)->counter, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct mm_struct)->vmacache_seqnum, (struct mm_struct)->get_unmapped_area, (struct mm_struct)->mmap_base, (struct mm_struct)->mmap_legacy_base, (struct mm_struct)->mmap_compat_base, (struct mm_struct)->mmap_compat_legacy_base, (struct mm_struct)->task_size, (struct mm_struct)->highest_vm_end, (struct mm_struct)->map_count, (struct mm_struct)->hiwater_rss, (struct mm_struct)->hiwater_vm, (struct mm_struct)->total_vm, (struct mm_struct)->locked_vm, (struct mm_struct)->pinned_vm, (struct mm_struct)->data_vm, (struct mm_struct)->exec_vm, (struct mm_struct)->stack_vm, (struct mm_struct)->def_flags, (struct mm_struct)->start_code, (struct mm_struct)->end_code, (struct mm_struct)->start_data, (struct mm_struct)->end_data, (struct mm_struct)->start_brk, (struct mm_struct)->brk, (struct mm_struct)->start_stack, (struct mm_struct)->arg_start, (struct mm_struct)->arg_end, (struct mm_struct)->env_start, (struct mm_struct)->env_end, (struct mm_context_t)->ia32_compat, (struct mm_context_t)->vdso, (struct mm_context_t)->pkey_allocation_map, (struct mm_context_t)->execute_only_pkey, (struct mm_struct)->flags, (struct mm_struct)->tlb_flush_batched, (struct work_struct)->func, ]
+SYSC_get_mempolicy write_list: [(struct mm_struct)->vmacache_seqnum, (struct mm_struct)->get_unmapped_area, (struct mm_struct)->mmap_base, (struct mm_struct)->mmap_legacy_base, (struct mm_struct)->mmap_compat_base, (struct mm_struct)->mmap_compat_legacy_base, (struct mm_struct)->task_size, (struct mm_struct)->highest_vm_end, (struct atomic_t)->counter, (struct atomic64_t)->counter, (struct mm_struct)->map_count, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mm_struct)->hiwater_rss, (struct mm_struct)->hiwater_vm, (struct mm_struct)->total_vm, (struct mm_struct)->locked_vm, (struct mm_struct)->pinned_vm, (struct mm_struct)->data_vm, (struct mm_struct)->exec_vm, (struct mm_struct)->stack_vm, (struct mm_struct)->def_flags, (struct mm_struct)->start_code, (struct mm_struct)->end_code, (struct mm_struct)->start_data, (struct mm_struct)->end_data, (struct mm_struct)->start_brk, (struct mm_struct)->brk, (struct mm_struct)->start_stack, (struct mm_struct)->arg_start, (struct mm_struct)->arg_end, (struct mm_struct)->env_start, (struct mm_struct)->env_end, (struct mm_context_t)->ia32_compat, (struct mutex)->magic, (struct mm_context_t)->vdso, (struct mm_context_t)->pkey_allocation_map, (struct mm_context_t)->execute_only_pkey, (struct mm_struct)->flags, (struct mm_struct)->tlb_flush_batched, (struct work_struct)->func, (struct mempolicy)->mode, (struct mempolicy)->flags, (union anonymous)->preferred_node, (struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, (struct rb_node)->__rb_parent_color, (struct vm_area_struct)->rb_subtree_gap, (struct pgprot)->pgprot, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_pgoff, (struct vm_area_struct)->vm_private_data, ]
+SYSC_msync write_list: [(struct mm_struct)->vmacache_seqnum, (struct mm_struct)->get_unmapped_area, (struct mm_struct)->mmap_base, (struct mm_struct)->mmap_legacy_base, (struct mm_struct)->mmap_compat_base, (struct mm_struct)->mmap_compat_legacy_base, (struct mm_struct)->task_size, (struct mm_struct)->highest_vm_end, (struct atomic_t)->counter, (struct atomic64_t)->counter, (struct mm_struct)->map_count, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mm_struct)->hiwater_rss, (struct mm_struct)->hiwater_vm, (struct mm_struct)->total_vm, (struct mm_struct)->locked_vm, (struct mm_struct)->pinned_vm, (struct mm_struct)->data_vm, (struct mm_struct)->exec_vm, (struct mm_struct)->stack_vm, (struct mm_struct)->def_flags, (struct mm_struct)->start_code, (struct mm_struct)->end_code, (struct mm_struct)->start_data, (struct mm_struct)->end_data, (struct mm_struct)->start_brk, (struct mm_struct)->brk, (struct mm_struct)->start_stack, (struct mm_struct)->arg_start, (struct mm_struct)->arg_end, (struct mm_struct)->env_start, (struct mm_struct)->env_end, (struct mm_context_t)->ia32_compat, (struct mutex)->magic, (struct mm_context_t)->vdso, (struct mm_context_t)->pkey_allocation_map, (struct mm_context_t)->execute_only_pkey, (struct mm_struct)->flags, (struct mm_struct)->tlb_flush_batched, (struct work_struct)->func, (struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, (struct rb_node)->__rb_parent_color, (struct vm_area_struct)->rb_subtree_gap, (struct pgprot)->pgprot, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_pgoff, (struct vm_area_struct)->vm_private_data, (struct callback_head)->func, (struct file)->f_write_hint, (struct file)->f_flags, (struct file)->f_mode, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+SYSC_fadvise64_64 write_list: [(struct fd)->flags, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (struct super_block)->s_dev, (struct super_block)->s_blocksize_bits, (struct super_block)->s_blocksize, (struct super_block)->s_maxbytes, (struct super_block)->s_flags, (struct super_block)->s_iflags, (struct super_block)->s_magic, (struct super_block)->s_count, (struct super_block)->s_security, (struct super_block)->s_xattr, (struct super_block)->s_quota_types, (struct quota_info)->flags, (struct mutex)->magic, (struct sb_writers)->frozen, (struct super_block)->s_fs_info, (struct super_block)->s_max_links, (struct super_block)->s_mode, (struct super_block)->s_time_gran, (struct super_block)->s_subtype, (struct super_block)->cleancache_poolid, (struct shrinker)->count_objects, (struct shrinker)->scan_objects, (struct shrinker)->seeks, (struct shrinker)->batch, (struct shrinker)->flags, (struct super_block)->s_readonly_remount, (struct work_struct)->func, (struct super_block)->s_stack_depth, (struct backing_dev_info)->ra_pages, (struct backing_dev_info)->io_pages, (struct backing_dev_info)->congested_fn, (struct backing_dev_info)->congested_data, (struct backing_dev_info)->name, (struct backing_dev_info)->capabilities, (struct backing_dev_info)->min_ratio, (struct backing_dev_info)->max_ratio, (struct backing_dev_info)->max_prop_frac, (struct bdi_writeback)->state, (struct bdi_writeback)->last_old_flush, (struct bdi_writeback)->bw_time_stamp, (struct bdi_writeback)->dirtied_stamp, (struct bdi_writeback)->written_stamp, (struct bdi_writeback)->write_bandwidth, (struct bdi_writeback)->avg_write_bandwidth, (struct bdi_writeback)->dirty_ratelimit, (struct bdi_writeback)->balanced_dirty_ratelimit, (struct percpu_counter)->count, (struct percpu_counter)->counters, (struct fprop_local_percpu)->period, (struct bdi_writeback)->dirty_exceeded, (struct timer_list)->expires, (struct timer_list)->function, (struct timer_list)->data, (struct timer_list)->flags, (struct delayed_work)->cpu, (struct bdi_writeback)->dirty_sleep, (struct file_ra_state)->ra_pages, (struct file)->f_mode, ]
+SYSC_process_vm_readv write_list: [(struct iovec)->iov_base, (struct iovec)->iov_len, ]
+SYSC_process_vm_writev write_list: [(struct iovec)->iov_base, (struct iovec)->iov_len, ]
+C_SYSC_process_vm_readv write_list: [(struct iovec)->iov_base, (struct iovec)->iov_len, ]
+C_SYSC_process_vm_writev write_list: [(struct iovec)->iov_base, (struct iovec)->iov_len, ]
+SYSC_madvise write_list: [(struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, (struct rb_node)->__rb_parent_color, (struct vm_area_struct)->rb_subtree_gap, (struct pgprot)->pgprot, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_pgoff, (struct vm_area_struct)->vm_private_data, ]
+sys_rt_sigreturn write_list: [(struct pt_regs)->r15, (struct pt_regs)->r14, (struct pt_regs)->r13, (struct pt_regs)->r12, (struct pt_regs)->bp, (struct pt_regs)->bx, (struct pt_regs)->r11, (struct pt_regs)->r10, (struct pt_regs)->r9, (struct pt_regs)->r8, (struct pt_regs)->ax, (struct pt_regs)->cx, (struct pt_regs)->dx, (struct pt_regs)->si, (struct pt_regs)->di, (struct pt_regs)->orig_ax, (struct pt_regs)->ip, (struct pt_regs)->cs, (struct pt_regs)->flags, (struct pt_regs)->sp, (struct pt_regs)->ss, (struct rt_sigframe)->pretcode, (struct ucontext)->uc_flags, (struct sigaltstack)->ss_sp, (struct sigaltstack)->ss_flags, (struct sigaltstack)->ss_size, (struct sigcontext_64)->r8, (struct sigcontext_64)->r9, (struct sigcontext_64)->r10, (struct sigcontext_64)->r11, (struct sigcontext_64)->r12, (struct sigcontext_64)->r13, (struct sigcontext_64)->r14, (struct sigcontext_64)->r15, (struct sigcontext_64)->di, (struct sigcontext_64)->si, (struct sigcontext_64)->bp, (struct sigcontext_64)->bx, (struct sigcontext_64)->dx, (struct sigcontext_64)->ax, (struct sigcontext_64)->cx, (struct sigcontext_64)->sp, (struct sigcontext_64)->ip, (struct sigcontext_64)->flags, (struct sigcontext_64)->cs, (struct sigcontext_64)->gs, (struct sigcontext_64)->fs, (struct sigcontext_64)->ss, (struct sigcontext_64)->err, (struct sigcontext_64)->trapno, (struct sigcontext_64)->oldmask, (struct sigcontext_64)->cr2, (struct sigcontext_64)->fpstate, (struct siginfo)->si_signo, (struct siginfo)->si_errno, (struct siginfo)->si_code, (union sigval)->sival_int, (union sigval)->sival_ptr, (struct restart_block)->fn, (struct thread_struct)->uaccess_err, (struct pt_regs)->di, (struct pt_regs)->si, (struct pt_regs)->bp, (struct pt_regs)->sp, (struct pt_regs)->bx, (struct pt_regs)->dx, (struct pt_regs)->cx, (struct pt_regs)->ip, (struct pt_regs)->ax, (struct pt_regs)->r8, (struct pt_regs)->r9, (struct pt_regs)->r10, (struct pt_regs)->r11, (struct pt_regs)->r12, (struct pt_regs)->r13, (struct pt_regs)->r14, (struct pt_regs)->r15, ]
+SYSC_set_thread_area write_list: [(struct user_desc)->entry_number, (struct user_desc)->base_addr, (struct user_desc)->limit, (struct user_desc)->seg_32bit, (struct user_desc)->contents, (struct user_desc)->read_exec_only, (struct user_desc)->limit_in_pages, (struct user_desc)->seg_not_present, (struct user_desc)->useable, (struct user_desc)->lm, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, ]
+SYSC_get_thread_area write_list: [(struct user_desc)->entry_number, (struct user_desc)->base_addr, (struct user_desc)->limit, (struct user_desc)->seg_32bit, (struct user_desc)->contents, (struct user_desc)->read_exec_only, (struct user_desc)->limit_in_pages, (struct user_desc)->seg_not_present, (struct user_desc)->useable, (struct user_desc)->lm, ]
+sys_modify_ldt write_list: [(struct mm_struct)->vmacache_seqnum, (struct mm_struct)->get_unmapped_area, (struct mm_struct)->mmap_base, (struct mm_struct)->mmap_legacy_base, (struct mm_struct)->mmap_compat_base, (struct mm_struct)->mmap_compat_legacy_base, (struct mm_struct)->task_size, (struct mm_struct)->highest_vm_end, (struct atomic_t)->counter, (struct atomic64_t)->counter, (struct mm_struct)->map_count, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mm_struct)->hiwater_rss, (struct mm_struct)->hiwater_vm, (struct mm_struct)->total_vm, (struct mm_struct)->locked_vm, (struct mm_struct)->pinned_vm, (struct mm_struct)->data_vm, (struct mm_struct)->exec_vm, (struct mm_struct)->stack_vm, (struct mm_struct)->def_flags, (struct mm_struct)->start_code, (struct mm_struct)->end_code, (struct mm_struct)->start_data, (struct mm_struct)->end_data, (struct mm_struct)->start_brk, (struct mm_struct)->brk, (struct mm_struct)->start_stack, (struct mm_struct)->arg_start, (struct mm_struct)->arg_end, (struct mm_struct)->env_start, (struct mm_struct)->env_end, (struct mm_context_t)->ia32_compat, (struct mutex)->magic, (struct mm_context_t)->vdso, (struct mm_context_t)->pkey_allocation_map, (struct mm_context_t)->execute_only_pkey, (struct mm_struct)->flags, (struct mm_struct)->tlb_flush_batched, (struct work_struct)->func, (struct user_desc)->entry_number, (struct user_desc)->base_addr, (struct user_desc)->limit, (struct user_desc)->seg_32bit, (struct user_desc)->contents, (struct user_desc)->read_exec_only, (struct user_desc)->limit_in_pages, (struct user_desc)->seg_not_present, (struct user_desc)->useable, (struct user_desc)->lm, (struct desc_struct)->a, (struct desc_struct)->b, (struct desc_struct)->limit0, (struct desc_struct)->base0, (struct desc_struct)->base1, (struct desc_struct)->type, (struct desc_struct)->s, (struct desc_struct)->dpl, (struct desc_struct)->p, (struct desc_struct)->limit, (struct desc_struct)->avl, (struct desc_struct)->l, (struct desc_struct)->d, (struct desc_struct)->g, (struct desc_struct)->base2, (struct ldt_struct)->nr_entries, ]
+sys_ioperm write_list: [(struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct x86_hw_tss)->reserved1, (struct x86_hw_tss)->sp0, (struct x86_hw_tss)->sp1, (struct x86_hw_tss)->sp2, (struct x86_hw_tss)->reserved2, (struct x86_hw_tss)->reserved3, (struct x86_hw_tss)->reserved4, (struct x86_hw_tss)->reserved5, (struct x86_hw_tss)->io_bitmap_base, ]
+SYSC_iopl write_list: [(struct pt_regs)->r15, (struct pt_regs)->r14, (struct pt_regs)->r13, (struct pt_regs)->r12, (struct pt_regs)->bp, (struct pt_regs)->bx, (struct pt_regs)->r11, (struct pt_regs)->r10, (struct pt_regs)->r9, (struct pt_regs)->r8, (struct pt_regs)->ax, (struct pt_regs)->cx, (struct pt_regs)->dx, (struct pt_regs)->si, (struct pt_regs)->di, (struct pt_regs)->orig_ax, (struct pt_regs)->ip, (struct pt_regs)->cs, (struct pt_regs)->flags, (struct pt_regs)->sp, (struct pt_regs)->ss, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+SYSC_arch_prctl write_list: [(struct thread_struct)->gsindex, (struct thread_struct)->gsbase, (struct thread_struct)->fsindex, (struct thread_struct)->fsbase, ]
+C_SYSC_keyctl write_list: [(struct iovec)->iov_base, (struct iovec)->iov_len, ]
+SYSC_request_key write_list: [(struct key_type)->name, (struct key_type)->def_datalen, (struct key_type)->vet_description, (struct key_type)->preparse, (struct key_type)->free_preparse, (struct key_type)->instantiate, (struct key_type)->update, (struct key_type)->match_preparse, (struct key_type)->match_free, (struct key_type)->revoke, (struct key_type)->destroy, (struct key_type)->describe, (struct key_type)->read, (struct key_type)->request_key, (struct key_type)->lookup_restriction, (struct atomic_t)->counter, (struct key)->serial, (struct rb_node)->__rb_parent_color, (struct atomic64_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct key)->security, (struct key)->expiry, (struct key)->revoked_at, (struct key)->last_used_at, (struct kuid_t)->val, (struct kgid_t)->val, (struct key)->perm, (struct key)->quotalen, (struct key)->datalen, (struct key)->flags, (struct keyring_index_key)->description, (struct keyring_index_key)->desc_len, (struct key)->description, (union key_payload)->rcu_data0, (struct assoc_array)->nr_leaves_on_tree, (struct key)->reject_error, ]
+SYSC_keyctl write_list: [(struct atomic_t)->counter, (struct key)->serial, (struct rb_node)->__rb_parent_color, (struct atomic64_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct key)->security, (struct key)->expiry, (struct key)->revoked_at, (struct key)->last_used_at, (struct kuid_t)->val, (struct kgid_t)->val, (struct key)->perm, (struct key)->quotalen, (struct key)->datalen, (struct key)->flags, (struct keyring_index_key)->description, (struct keyring_index_key)->desc_len, (struct key)->description, (union key_payload)->rcu_data0, (struct assoc_array)->nr_leaves_on_tree, (struct key)->reject_error, (struct key_type)->name, (struct key_type)->def_datalen, (struct key_type)->vet_description, (struct key_type)->preparse, (struct key_type)->free_preparse, (struct key_type)->instantiate, (struct key_type)->update, (struct key_type)->match_preparse, (struct key_type)->match_free, (struct key_type)->revoke, (struct key_type)->destroy, (struct key_type)->describe, (struct key_type)->read, (struct key_type)->request_key, (struct key_type)->lookup_restriction, (struct mutex)->magic, (struct key_user)->qnkeys, (struct key_user)->qnbytes, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, (struct callback_head)->func, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct request_key_auth)->callout_info, (struct request_key_auth)->callout_len, (struct request_key_auth)->pid, (struct iovec)->iov_base, (struct iovec)->iov_len, ]
+SYSC_msgget write_list: [(struct ipc_ops)->getnew, (struct ipc_ops)->associate, (struct ipc_ops)->more_checks, (struct atomic_t)->counter, (struct ipc_namespace)->used_sems, (struct ipc_namespace)->msg_ctlmax, (struct ipc_namespace)->msg_ctlmnb, (struct ipc_namespace)->msg_ctlmni, (struct ipc_namespace)->shm_ctlmax, (struct ipc_namespace)->shm_ctlall, (struct ipc_namespace)->shm_tot, (struct ipc_namespace)->shm_ctlmni, (struct ipc_namespace)->shm_rmid_forced, (struct notifier_block)->notifier_call, (struct notifier_block)->priority, (struct ipc_namespace)->mq_queues_count, (struct ipc_namespace)->mq_queues_max, (struct ipc_namespace)->mq_msg_max, (struct ipc_namespace)->mq_msgsize_max, (struct ipc_namespace)->mq_msg_default, (struct ipc_namespace)->mq_msgsize_default, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct ipc_params)->key, (struct ipc_params)->flg, ]
+SYSC_msgctl write_list: [(struct atomic_t)->counter, (struct ipc_namespace)->used_sems, (struct ipc_namespace)->msg_ctlmax, (struct ipc_namespace)->msg_ctlmnb, (struct ipc_namespace)->msg_ctlmni, (struct ipc_namespace)->shm_ctlmax, (struct ipc_namespace)->shm_ctlall, (struct ipc_namespace)->shm_tot, (struct ipc_namespace)->shm_ctlmni, (struct ipc_namespace)->shm_rmid_forced, (struct notifier_block)->notifier_call, (struct notifier_block)->priority, (struct ipc_namespace)->mq_queues_count, (struct ipc_namespace)->mq_queues_max, (struct ipc_namespace)->mq_msg_max, (struct ipc_namespace)->mq_msgsize_max, (struct ipc_namespace)->mq_msg_default, (struct ipc_namespace)->mq_msgsize_default, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct msginfo)->msgpool, (struct msginfo)->msgmap, (struct msginfo)->msgmax, (struct msginfo)->msgmnb, (struct msginfo)->msgmni, (struct msginfo)->msgssz, (struct msginfo)->msgtql, (struct msginfo)->msgseg, (struct ipc64_perm)->key, (struct ipc64_perm)->uid, (struct ipc64_perm)->gid, (struct ipc64_perm)->cuid, (struct ipc64_perm)->cgid, (struct ipc64_perm)->mode, (struct ipc64_perm)->seq, (struct ipc64_perm)->__pad2, (struct ipc64_perm)->__unused1, (struct ipc64_perm)->__unused2, (struct msqid64_ds)->msg_stime, (struct msqid64_ds)->msg_rtime, (struct msqid64_ds)->msg_ctime, (struct msqid64_ds)->msg_cbytes, (struct msqid64_ds)->msg_qnum, (struct msqid64_ds)->msg_qbytes, (struct msqid64_ds)->msg_lspid, (struct msqid64_ds)->msg_lrpid, (struct msqid64_ds)->__unused4, (struct msqid64_ds)->__unused5, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct kern_ipc_perm)->deleted, (struct kern_ipc_perm)->id, (struct kern_ipc_perm)->key, (struct kuid_t)->val, (struct kgid_t)->val, (struct kern_ipc_perm)->mode, (struct kern_ipc_perm)->seq, (struct kern_ipc_perm)->security, (struct callback_head)->func, (struct msg_queue)->q_stime, (struct msg_queue)->q_rtime, (struct msg_queue)->q_ctime, (struct msg_queue)->q_cbytes, (struct msg_queue)->q_qnum, (struct msg_queue)->q_qbytes, (struct msg_queue)->q_lspid, (struct msg_queue)->q_lrpid, (struct wake_q_head)->lastp, ]
+SYSC_msgsnd write_list: [(struct wake_q_head)->lastp, (struct atomic_t)->counter, (struct ipc_namespace)->used_sems, (struct ipc_namespace)->msg_ctlmax, (struct ipc_namespace)->msg_ctlmnb, (struct ipc_namespace)->msg_ctlmni, (struct ipc_namespace)->shm_ctlmax, (struct ipc_namespace)->shm_ctlall, (struct ipc_namespace)->shm_tot, (struct ipc_namespace)->shm_ctlmni, (struct ipc_namespace)->shm_rmid_forced, (struct notifier_block)->notifier_call, (struct notifier_block)->priority, (struct ipc_namespace)->mq_queues_count, (struct ipc_namespace)->mq_queues_max, (struct ipc_namespace)->mq_msg_max, (struct ipc_namespace)->mq_msgsize_max, (struct ipc_namespace)->mq_msg_default, (struct ipc_namespace)->mq_msgsize_default, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct msg_msg)->m_type, (struct msg_msg)->m_ts, (struct msg_msg)->security, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct kern_ipc_perm)->deleted, (struct kern_ipc_perm)->id, (struct kern_ipc_perm)->key, (struct kuid_t)->val, (struct kgid_t)->val, (struct kern_ipc_perm)->mode, (struct kern_ipc_perm)->seq, (struct kern_ipc_perm)->security, (struct callback_head)->func, (struct msg_queue)->q_stime, (struct msg_queue)->q_rtime, (struct msg_queue)->q_ctime, (struct msg_queue)->q_cbytes, (struct msg_queue)->q_qnum, (struct msg_queue)->q_qbytes, (struct msg_queue)->q_lspid, (struct msg_queue)->q_lrpid, ]
+SYSC_msgrcv write_list: [(struct wake_q_head)->lastp, (struct atomic_t)->counter, (struct ipc_namespace)->used_sems, (struct ipc_namespace)->msg_ctlmax, (struct ipc_namespace)->msg_ctlmnb, (struct ipc_namespace)->msg_ctlmni, (struct ipc_namespace)->shm_ctlmax, (struct ipc_namespace)->shm_ctlall, (struct ipc_namespace)->shm_tot, (struct ipc_namespace)->shm_ctlmni, (struct ipc_namespace)->shm_rmid_forced, (struct notifier_block)->notifier_call, (struct notifier_block)->priority, (struct ipc_namespace)->mq_queues_count, (struct ipc_namespace)->mq_queues_max, (struct ipc_namespace)->mq_msg_max, (struct ipc_namespace)->mq_msgsize_max, (struct ipc_namespace)->mq_msg_default, (struct ipc_namespace)->mq_msgsize_default, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct msg_msg)->m_type, (struct msg_msg)->m_ts, (struct msg_msg)->security, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct kern_ipc_perm)->deleted, (struct kern_ipc_perm)->id, (struct kern_ipc_perm)->key, (struct kuid_t)->val, (struct kgid_t)->val, (struct kern_ipc_perm)->mode, (struct kern_ipc_perm)->seq, (struct kern_ipc_perm)->security, (struct callback_head)->func, (struct msg_queue)->q_stime, (struct msg_queue)->q_rtime, (struct msg_queue)->q_ctime, (struct msg_queue)->q_cbytes, (struct msg_queue)->q_qnum, (struct msg_queue)->q_qbytes, (struct msg_queue)->q_lspid, (struct msg_queue)->q_lrpid, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct msg_receiver)->r_msgtype, (struct msg_receiver)->r_mode, (struct msg_receiver)->r_maxsize, ]
+SYSC_mq_open write_list: [(struct mq_attr)->mq_flags, (struct mq_attr)->mq_maxmsg, (struct mq_attr)->mq_msgsize, (struct mq_attr)->mq_curmsgs, (struct atomic_t)->counter, (struct ipc_namespace)->used_sems, (struct ipc_namespace)->msg_ctlmax, (struct ipc_namespace)->msg_ctlmnb, (struct ipc_namespace)->msg_ctlmni, (struct ipc_namespace)->shm_ctlmax, (struct ipc_namespace)->shm_ctlall, (struct ipc_namespace)->shm_tot, (struct ipc_namespace)->shm_ctlmni, (struct ipc_namespace)->shm_rmid_forced, (struct notifier_block)->notifier_call, (struct notifier_block)->priority, (struct ipc_namespace)->mq_queues_count, (struct ipc_namespace)->mq_queues_max, (struct ipc_namespace)->mq_msg_max, (struct ipc_namespace)->mq_msgsize_max, (struct ipc_namespace)->mq_msg_default, (struct ipc_namespace)->mq_msgsize_default, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct vfsmount)->mnt_flags, (struct dentry)->d_flags, (struct seqcount)->sequence, (struct lockdep_map)->name, (struct hlist_bl_node)->pprev, (struct qstr)->hash, (struct qstr)->len, (struct qstr)->hash_len, (struct qstr)->name, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockref)->count, (struct dentry)->d_time, (struct dentry)->d_fsdata, (struct hlist_node)->pprev, (struct callback_head)->func, (struct filename)->name, (struct filename)->uptr, (struct filename)->refcnt, (struct file)->f_write_hint, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+SYSC_mq_unlink write_list: [(struct atomic_t)->counter, (struct ipc_namespace)->used_sems, (struct ipc_namespace)->msg_ctlmax, (struct ipc_namespace)->msg_ctlmnb, (struct ipc_namespace)->msg_ctlmni, (struct ipc_namespace)->shm_ctlmax, (struct ipc_namespace)->shm_ctlall, (struct ipc_namespace)->shm_tot, (struct ipc_namespace)->shm_ctlmni, (struct ipc_namespace)->shm_rmid_forced, (struct notifier_block)->notifier_call, (struct notifier_block)->priority, (struct ipc_namespace)->mq_queues_count, (struct ipc_namespace)->mq_queues_max, (struct ipc_namespace)->mq_msg_max, (struct ipc_namespace)->mq_msgsize_max, (struct ipc_namespace)->mq_msg_default, (struct ipc_namespace)->mq_msgsize_default, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct vfsmount)->mnt_flags, (struct filename)->name, (struct filename)->uptr, (struct filename)->refcnt, (struct dentry)->d_flags, (struct seqcount)->sequence, (struct lockdep_map)->name, (struct hlist_bl_node)->pprev, (struct qstr)->hash, (struct qstr)->len, (struct qstr)->hash_len, (struct qstr)->name, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockref)->count, (struct dentry)->d_time, (struct dentry)->d_fsdata, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, ]
+SYSC_mq_timedsend write_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct wake_q_head)->lastp, (struct fd)->flags, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (struct mq_attr)->mq_flags, (struct mq_attr)->mq_maxmsg, (struct mq_attr)->mq_msgsize, (struct mq_attr)->mq_curmsgs, (union sigval)->sival_int, (union sigval)->sival_ptr, (struct sigevent)->sigev_signo, (struct sigevent)->sigev_notify, (union anonymous)->_tid, (struct mqueue_inode_info)->qsize, (struct msg_msg)->m_type, (struct msg_msg)->m_ts, (struct msg_msg)->security, (struct rb_node)->__rb_parent_color, (struct posix_msg_tree_node)->priority, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct ext_wait_queue)->state, ]
+SYSC_mq_timedreceive write_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct fd)->flags, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (struct mq_attr)->mq_flags, (struct mq_attr)->mq_maxmsg, (struct mq_attr)->mq_msgsize, (struct mq_attr)->mq_curmsgs, (union sigval)->sival_int, (union sigval)->sival_ptr, (struct sigevent)->sigev_signo, (struct sigevent)->sigev_notify, (union anonymous)->_tid, (struct mqueue_inode_info)->qsize, (struct rb_node)->__rb_parent_color, (struct posix_msg_tree_node)->priority, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct ext_wait_queue)->state, (struct msg_msg)->m_type, (struct msg_msg)->m_ts, (struct msg_msg)->security, (struct wake_q_head)->lastp, ]
+SYSC_mq_notify write_list: [(union sigval)->sival_int, (union sigval)->sival_ptr, (struct sigevent)->sigev_signo, (struct sigevent)->sigev_notify, (union anonymous)->_tid, (struct sk_buff)->tstamp, (struct sk_buff)->skb_mstamp, (struct rb_node)->__rb_parent_color, (struct sk_buff)->dev_scratch, (struct sk_buff)->_skb_refdst, (struct sk_buff)->destructor, (struct sk_buff)->_nfct, (struct sk_buff)->len, (struct sk_buff)->data_len, (struct sk_buff)->mac_len, (struct sk_buff)->hdr_len, (struct sk_buff)->queue_mapping, (struct sk_buff)->cloned, (struct sk_buff)->nohdr, (struct sk_buff)->fclone, (struct sk_buff)->peeked, (struct sk_buff)->head_frag, (struct sk_buff)->xmit_more, (struct sk_buff)->__unused, (struct sk_buff)->pkt_type, (struct sk_buff)->pfmemalloc, (struct sk_buff)->ignore_df, (struct sk_buff)->nf_trace, (struct sk_buff)->ip_summed, (struct sk_buff)->ooo_okay, (struct sk_buff)->l4_hash, (struct sk_buff)->sw_hash, (struct sk_buff)->wifi_acked_valid, (struct sk_buff)->wifi_acked, (struct sk_buff)->no_fcs, (struct sk_buff)->encapsulation, (struct sk_buff)->encap_hdr_csum, (struct sk_buff)->csum_valid, (struct sk_buff)->csum_complete_sw, (struct sk_buff)->csum_level, (struct sk_buff)->csum_not_inet, (struct sk_buff)->dst_pending_confirm, (struct sk_buff)->ndisc_nodetype, (struct sk_buff)->ipvs_property, (struct sk_buff)->inner_protocol_type, (struct sk_buff)->remcsum_offload, (struct sk_buff)->tc_skip_classify, (struct sk_buff)->tc_at_ingress, (struct sk_buff)->tc_redirected, (struct sk_buff)->tc_from_ingress, (struct sk_buff)->tc_index, (struct sk_buff)->csum, (struct sk_buff)->csum_start, (struct sk_buff)->csum_offset, (struct sk_buff)->priority, (struct sk_buff)->skb_iif, (struct sk_buff)->hash, (struct sk_buff)->vlan_proto, (struct sk_buff)->vlan_tci, (struct sk_buff)->napi_id, (struct sk_buff)->sender_cpu, (struct sk_buff)->secmark, (struct sk_buff)->mark, (struct sk_buff)->reserved_tailroom, (struct sk_buff)->inner_protocol, (struct sk_buff)->inner_ipproto, (struct sk_buff)->inner_transport_header, (struct sk_buff)->inner_network_header, (struct sk_buff)->inner_mac_header, (struct sk_buff)->protocol, (struct sk_buff)->transport_header, (struct sk_buff)->network_header, (struct sk_buff)->mac_header, (struct sk_buff)->tail, (struct sk_buff)->end, (struct sk_buff)->head, (struct sk_buff)->data, (struct sk_buff)->truesize, (struct atomic_t)->counter, (struct fd)->flags, (struct sock_common)->skc_addrpair, (struct sock_common)->skc_daddr, (struct sock_common)->skc_rcv_saddr, (struct sock_common)->skc_hash, (struct sock_common)->skc_portpair, (struct sock_common)->skc_dport, (struct sock_common)->skc_num, (struct sock_common)->skc_family, (struct sock_common)->skc_state, (struct sock_common)->skc_reuse, (struct sock_common)->skc_reuseport, (struct sock_common)->skc_ipv6only, (struct sock_common)->skc_net_refcnt, (struct sock_common)->skc_bound_dev_if, (struct hlist_node)->pprev, (struct atomic64_t)->counter, (struct sock_common)->skc_flags, (struct hlist_nulls_node)->pprev, (struct sock_common)->skc_tx_queue_mapping, (struct sock_common)->skc_incoming_cpu, (struct sock_common)->skc_rcv_wnd, (struct sock_common)->skc_tw_rcv_nxt, (struct sock_common)->skc_rxhash, (struct sock_common)->skc_window_clamp, (struct sock_common)->skc_tw_snd_nxt, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct socket_lock_t)->owned, (struct sock)->sk_rcvlowat, (struct sk_buff_head)->qlen, (struct sock)->sk_forward_alloc, (struct sock)->sk_ll_usec, (struct sock)->sk_napi_id, (struct sock)->sk_rcvbuf, (struct sock)->sk_sndbuf, (struct sock)->sk_wmem_queued, (struct sock)->sk_tsq_flags, (struct sock)->sk_peek_off, (struct sock)->sk_write_pending, (struct sock)->sk_dst_pending_confirm, (struct sock)->sk_pacing_status, (struct sock)->sk_sndtimeo, (struct timer_list)->expires, (struct timer_list)->function, (struct timer_list)->data, (struct timer_list)->flags, (struct sock)->sk_priority, (struct sock)->sk_mark, (struct sock)->sk_pacing_rate, (struct sock)->sk_max_pacing_rate, (struct page_frag)->offset, (struct page_frag)->size, (struct sock)->sk_route_caps, (struct sock)->sk_route_nocaps, (struct sock)->sk_gso_type, (struct sock)->sk_gso_max_size, (struct sock)->sk_allocation, (struct sock)->sk_txhash, (struct sock)->sk_padding, (struct sock)->sk_kern_sock, (struct sock)->sk_no_check_tx, (struct sock)->sk_no_check_rx, (struct sock)->sk_userlocks, (struct sock)->sk_protocol, (struct sock)->sk_type, (struct sock)->sk_gso_max_segs, (struct sock)->sk_lingertime, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct sock)->sk_err, (struct sock)->sk_err_soft, (struct sock)->sk_ack_backlog, (struct sock)->sk_max_ack_backlog, (struct kuid_t)->val, (struct sock)->sk_rcvtimeo, (struct sock)->sk_stamp, (struct sock)->sk_tsflags, (struct sock)->sk_shutdown, (struct sock)->sk_tskey, (struct sock)->sk_user_data, (struct sock)->sk_security, (struct sock)->sk_state_change, (struct sock)->sk_data_ready, (struct sock)->sk_write_space, (struct sock)->sk_error_report, (struct sock)->sk_backlog_rcv, (struct sock)->sk_destruct, (struct callback_head)->func, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (struct mq_attr)->mq_flags, (struct mq_attr)->mq_maxmsg, (struct mq_attr)->mq_msgsize, (struct mq_attr)->mq_curmsgs, (struct mqueue_inode_info)->qsize, (struct sigevent)->sigev_value, (struct pid)->level, (struct uid_gid_map)->nr_extents, (struct user_namespace)->level, (struct ns_common)->inum, (struct user_namespace)->flags, (struct work_struct)->func, (struct ctl_table_set)->is_seen, (struct ctl_table_header)->used, (struct ctl_table_header)->count, (struct ctl_table_header)->nreg, ]
+SYSC_mq_getsetattr write_list: [(struct mq_attr)->mq_flags, (struct mq_attr)->mq_maxmsg, (struct mq_attr)->mq_msgsize, (struct mq_attr)->mq_curmsgs, (struct fd)->flags, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (union sigval)->sival_int, (union sigval)->sival_ptr, (struct sigevent)->sigev_signo, (struct sigevent)->sigev_notify, (union anonymous)->_tid, (struct mqueue_inode_info)->qsize, (struct file)->f_flags, ]
+C_SYSC_mq_open write_list: [(struct mq_attr)->mq_flags, (struct mq_attr)->mq_maxmsg, (struct mq_attr)->mq_msgsize, (struct mq_attr)->mq_curmsgs, (struct compat_mq_attr)->mq_flags, (struct compat_mq_attr)->mq_maxmsg, (struct compat_mq_attr)->mq_msgsize, (struct compat_mq_attr)->mq_curmsgs, (struct atomic_t)->counter, (struct ipc_namespace)->used_sems, (struct ipc_namespace)->msg_ctlmax, (struct ipc_namespace)->msg_ctlmnb, (struct ipc_namespace)->msg_ctlmni, (struct ipc_namespace)->shm_ctlmax, (struct ipc_namespace)->shm_ctlall, (struct ipc_namespace)->shm_tot, (struct ipc_namespace)->shm_ctlmni, (struct ipc_namespace)->shm_rmid_forced, (struct notifier_block)->notifier_call, (struct notifier_block)->priority, (struct ipc_namespace)->mq_queues_count, (struct ipc_namespace)->mq_queues_max, (struct ipc_namespace)->mq_msg_max, (struct ipc_namespace)->mq_msgsize_max, (struct ipc_namespace)->mq_msg_default, (struct ipc_namespace)->mq_msgsize_default, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct vfsmount)->mnt_flags, (struct dentry)->d_flags, (struct seqcount)->sequence, (struct lockdep_map)->name, (struct hlist_bl_node)->pprev, (struct qstr)->hash, (struct qstr)->len, (struct qstr)->hash_len, (struct qstr)->name, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockref)->count, (struct dentry)->d_time, (struct dentry)->d_fsdata, (struct hlist_node)->pprev, (struct callback_head)->func, (struct filename)->name, (struct filename)->uptr, (struct filename)->refcnt, (struct file)->f_write_hint, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+C_SYSC_mq_timedsend write_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct wake_q_head)->lastp, (struct fd)->flags, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (struct mq_attr)->mq_flags, (struct mq_attr)->mq_maxmsg, (struct mq_attr)->mq_msgsize, (struct mq_attr)->mq_curmsgs, (union sigval)->sival_int, (union sigval)->sival_ptr, (struct sigevent)->sigev_signo, (struct sigevent)->sigev_notify, (union anonymous)->_tid, (struct mqueue_inode_info)->qsize, (struct msg_msg)->m_type, (struct msg_msg)->m_ts, (struct msg_msg)->security, (struct rb_node)->__rb_parent_color, (struct posix_msg_tree_node)->priority, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct ext_wait_queue)->state, ]
+C_SYSC_mq_timedreceive write_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct fd)->flags, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (struct mq_attr)->mq_flags, (struct mq_attr)->mq_maxmsg, (struct mq_attr)->mq_msgsize, (struct mq_attr)->mq_curmsgs, (union sigval)->sival_int, (union sigval)->sival_ptr, (struct sigevent)->sigev_signo, (struct sigevent)->sigev_notify, (union anonymous)->_tid, (struct mqueue_inode_info)->qsize, (struct rb_node)->__rb_parent_color, (struct posix_msg_tree_node)->priority, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, (struct ext_wait_queue)->state, (struct msg_msg)->m_type, (struct msg_msg)->m_ts, (struct msg_msg)->security, (struct wake_q_head)->lastp, ]
+C_SYSC_mq_notify write_list: [(union sigval)->sival_int, (union sigval)->sival_ptr, (struct sigevent)->sigev_signo, (struct sigevent)->sigev_notify, (union anonymous)->_tid, (struct sk_buff)->tstamp, (struct sk_buff)->skb_mstamp, (struct rb_node)->__rb_parent_color, (struct sk_buff)->dev_scratch, (struct sk_buff)->_skb_refdst, (struct sk_buff)->destructor, (struct sk_buff)->_nfct, (struct sk_buff)->len, (struct sk_buff)->data_len, (struct sk_buff)->mac_len, (struct sk_buff)->hdr_len, (struct sk_buff)->queue_mapping, (struct sk_buff)->cloned, (struct sk_buff)->nohdr, (struct sk_buff)->fclone, (struct sk_buff)->peeked, (struct sk_buff)->head_frag, (struct sk_buff)->xmit_more, (struct sk_buff)->__unused, (struct sk_buff)->pkt_type, (struct sk_buff)->pfmemalloc, (struct sk_buff)->ignore_df, (struct sk_buff)->nf_trace, (struct sk_buff)->ip_summed, (struct sk_buff)->ooo_okay, (struct sk_buff)->l4_hash, (struct sk_buff)->sw_hash, (struct sk_buff)->wifi_acked_valid, (struct sk_buff)->wifi_acked, (struct sk_buff)->no_fcs, (struct sk_buff)->encapsulation, (struct sk_buff)->encap_hdr_csum, (struct sk_buff)->csum_valid, (struct sk_buff)->csum_complete_sw, (struct sk_buff)->csum_level, (struct sk_buff)->csum_not_inet, (struct sk_buff)->dst_pending_confirm, (struct sk_buff)->ndisc_nodetype, (struct sk_buff)->ipvs_property, (struct sk_buff)->inner_protocol_type, (struct sk_buff)->remcsum_offload, (struct sk_buff)->tc_skip_classify, (struct sk_buff)->tc_at_ingress, (struct sk_buff)->tc_redirected, (struct sk_buff)->tc_from_ingress, (struct sk_buff)->tc_index, (struct sk_buff)->csum, (struct sk_buff)->csum_start, (struct sk_buff)->csum_offset, (struct sk_buff)->priority, (struct sk_buff)->skb_iif, (struct sk_buff)->hash, (struct sk_buff)->vlan_proto, (struct sk_buff)->vlan_tci, (struct sk_buff)->napi_id, (struct sk_buff)->sender_cpu, (struct sk_buff)->secmark, (struct sk_buff)->mark, (struct sk_buff)->reserved_tailroom, (struct sk_buff)->inner_protocol, (struct sk_buff)->inner_ipproto, (struct sk_buff)->inner_transport_header, (struct sk_buff)->inner_network_header, (struct sk_buff)->inner_mac_header, (struct sk_buff)->protocol, (struct sk_buff)->transport_header, (struct sk_buff)->network_header, (struct sk_buff)->mac_header, (struct sk_buff)->tail, (struct sk_buff)->end, (struct sk_buff)->head, (struct sk_buff)->data, (struct sk_buff)->truesize, (struct atomic_t)->counter, (struct fd)->flags, (struct sock_common)->skc_addrpair, (struct sock_common)->skc_daddr, (struct sock_common)->skc_rcv_saddr, (struct sock_common)->skc_hash, (struct sock_common)->skc_portpair, (struct sock_common)->skc_dport, (struct sock_common)->skc_num, (struct sock_common)->skc_family, (struct sock_common)->skc_state, (struct sock_common)->skc_reuse, (struct sock_common)->skc_reuseport, (struct sock_common)->skc_ipv6only, (struct sock_common)->skc_net_refcnt, (struct sock_common)->skc_bound_dev_if, (struct hlist_node)->pprev, (struct atomic64_t)->counter, (struct sock_common)->skc_flags, (struct hlist_nulls_node)->pprev, (struct sock_common)->skc_tx_queue_mapping, (struct sock_common)->skc_incoming_cpu, (struct sock_common)->skc_rcv_wnd, (struct sock_common)->skc_tw_rcv_nxt, (struct sock_common)->skc_rxhash, (struct sock_common)->skc_window_clamp, (struct sock_common)->skc_tw_snd_nxt, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct socket_lock_t)->owned, (struct sock)->sk_rcvlowat, (struct sk_buff_head)->qlen, (struct sock)->sk_forward_alloc, (struct sock)->sk_ll_usec, (struct sock)->sk_napi_id, (struct sock)->sk_rcvbuf, (struct sock)->sk_sndbuf, (struct sock)->sk_wmem_queued, (struct sock)->sk_tsq_flags, (struct sock)->sk_peek_off, (struct sock)->sk_write_pending, (struct sock)->sk_dst_pending_confirm, (struct sock)->sk_pacing_status, (struct sock)->sk_sndtimeo, (struct timer_list)->expires, (struct timer_list)->function, (struct timer_list)->data, (struct timer_list)->flags, (struct sock)->sk_priority, (struct sock)->sk_mark, (struct sock)->sk_pacing_rate, (struct sock)->sk_max_pacing_rate, (struct page_frag)->offset, (struct page_frag)->size, (struct sock)->sk_route_caps, (struct sock)->sk_route_nocaps, (struct sock)->sk_gso_type, (struct sock)->sk_gso_max_size, (struct sock)->sk_allocation, (struct sock)->sk_txhash, (struct sock)->sk_padding, (struct sock)->sk_kern_sock, (struct sock)->sk_no_check_tx, (struct sock)->sk_no_check_rx, (struct sock)->sk_userlocks, (struct sock)->sk_protocol, (struct sock)->sk_type, (struct sock)->sk_gso_max_segs, (struct sock)->sk_lingertime, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct sock)->sk_err, (struct sock)->sk_err_soft, (struct sock)->sk_ack_backlog, (struct sock)->sk_max_ack_backlog, (struct kuid_t)->val, (struct sock)->sk_rcvtimeo, (struct sock)->sk_stamp, (struct sock)->sk_tsflags, (struct sock)->sk_shutdown, (struct sock)->sk_tskey, (struct sock)->sk_user_data, (struct sock)->sk_security, (struct sock)->sk_state_change, (struct sock)->sk_data_ready, (struct sock)->sk_write_space, (struct sock)->sk_error_report, (struct sock)->sk_backlog_rcv, (struct sock)->sk_destruct, (struct callback_head)->func, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (struct mq_attr)->mq_flags, (struct mq_attr)->mq_maxmsg, (struct mq_attr)->mq_msgsize, (struct mq_attr)->mq_curmsgs, (struct mqueue_inode_info)->qsize, (struct sigevent)->sigev_value, (struct pid)->level, (struct uid_gid_map)->nr_extents, (struct user_namespace)->level, (struct ns_common)->inum, (struct user_namespace)->flags, (struct work_struct)->func, (struct ctl_table_set)->is_seen, (struct ctl_table_header)->used, (struct ctl_table_header)->count, (struct ctl_table_header)->nreg, ]
+C_SYSC_mq_getsetattr write_list: [(struct mq_attr)->mq_flags, (struct mq_attr)->mq_maxmsg, (struct mq_attr)->mq_msgsize, (struct mq_attr)->mq_curmsgs, (struct compat_mq_attr)->mq_flags, (struct compat_mq_attr)->mq_maxmsg, (struct compat_mq_attr)->mq_msgsize, (struct compat_mq_attr)->mq_curmsgs, (struct fd)->flags, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (union sigval)->sival_int, (union sigval)->sival_ptr, (struct sigevent)->sigev_signo, (struct sigevent)->sigev_notify, (union anonymous)->_tid, (struct mqueue_inode_info)->qsize, (struct file)->f_flags, ]
+C_SYSC_ipc write_list: [(struct ipc64_perm)->key, (struct ipc64_perm)->uid, (struct ipc64_perm)->gid, (struct ipc64_perm)->cuid, (struct ipc64_perm)->cgid, (struct ipc64_perm)->mode, (struct ipc64_perm)->seq, (struct ipc64_perm)->__pad2, (struct ipc64_perm)->__unused1, (struct ipc64_perm)->__unused2, (struct semid64_ds)->sem_otime, (struct semid64_ds)->__unused1, (struct semid64_ds)->sem_ctime, (struct semid64_ds)->__unused2, (struct semid64_ds)->sem_nsems, (struct semid64_ds)->__unused3, (struct semid64_ds)->__unused4, (struct compat_msgbuf)->mtype, (struct compat_ipc_kludge)->msgp, (struct compat_ipc_kludge)->msgtyp, ]
+C_SYSC_semctl write_list: [(struct ipc64_perm)->key, (struct ipc64_perm)->uid, (struct ipc64_perm)->gid, (struct ipc64_perm)->cuid, (struct ipc64_perm)->cgid, (struct ipc64_perm)->mode, (struct ipc64_perm)->seq, (struct ipc64_perm)->__pad2, (struct ipc64_perm)->__unused1, (struct ipc64_perm)->__unused2, (struct semid64_ds)->sem_otime, (struct semid64_ds)->__unused1, (struct semid64_ds)->sem_ctime, (struct semid64_ds)->__unused2, (struct semid64_ds)->sem_nsems, (struct semid64_ds)->__unused3, (struct semid64_ds)->__unused4, ]
+C_SYSC_msgsnd write_list: [(struct compat_msgbuf)->mtype, ]
+C_SYSC_msgctl write_list: [(struct ipc64_perm)->key, (struct ipc64_perm)->uid, (struct ipc64_perm)->gid, (struct ipc64_perm)->cuid, (struct ipc64_perm)->cgid, (struct ipc64_perm)->mode, (struct ipc64_perm)->seq, (struct ipc64_perm)->__pad2, (struct ipc64_perm)->__unused1, (struct ipc64_perm)->__unused2, (struct msqid64_ds)->msg_stime, (struct msqid64_ds)->msg_rtime, (struct msqid64_ds)->msg_ctime, (struct msqid64_ds)->msg_cbytes, (struct msqid64_ds)->msg_qnum, (struct msqid64_ds)->msg_qbytes, (struct msqid64_ds)->msg_lspid, (struct msqid64_ds)->msg_lrpid, (struct msqid64_ds)->__unused4, (struct msqid64_ds)->__unused5, (struct msqid64_ds)->msg_qbytes, ]
+C_SYSC_shmctl write_list: [(struct ipc64_perm)->key, (struct ipc64_perm)->uid, (struct ipc64_perm)->gid, (struct ipc64_perm)->cuid, (struct ipc64_perm)->cgid, (struct ipc64_perm)->mode, (struct ipc64_perm)->seq, (struct ipc64_perm)->__pad2, (struct ipc64_perm)->__unused1, (struct ipc64_perm)->__unused2, (struct shmid64_ds)->shm_segsz, (struct shmid64_ds)->shm_atime, (struct shmid64_ds)->shm_dtime, (struct shmid64_ds)->shm_ctime, (struct shmid64_ds)->shm_cpid, (struct shmid64_ds)->shm_lpid, (struct shmid64_ds)->shm_nattch, (struct shmid64_ds)->__unused4, (struct shmid64_ds)->__unused5, (struct shminfo64)->shmmax, (struct shminfo64)->shmmin, (struct shminfo64)->shmmni, (struct shminfo64)->shmseg, (struct shminfo64)->shmall, (struct shminfo64)->__unused1, (struct shminfo64)->__unused2, (struct shminfo64)->__unused3, (struct shminfo64)->__unused4, (struct shm_info)->used_ids, (struct shm_info)->shm_tot, (struct shm_info)->shm_rss, (struct shm_info)->shm_swp, (struct shm_info)->swap_attempts, (struct shm_info)->swap_successes, ]
+SYSC_semget write_list: [(struct ipc_ops)->getnew, (struct ipc_ops)->associate, (struct ipc_ops)->more_checks, (struct atomic_t)->counter, (struct ipc_namespace)->used_sems, (struct ipc_namespace)->msg_ctlmax, (struct ipc_namespace)->msg_ctlmnb, (struct ipc_namespace)->msg_ctlmni, (struct ipc_namespace)->shm_ctlmax, (struct ipc_namespace)->shm_ctlall, (struct ipc_namespace)->shm_tot, (struct ipc_namespace)->shm_ctlmni, (struct ipc_namespace)->shm_rmid_forced, (struct notifier_block)->notifier_call, (struct notifier_block)->priority, (struct ipc_namespace)->mq_queues_count, (struct ipc_namespace)->mq_queues_max, (struct ipc_namespace)->mq_msg_max, (struct ipc_namespace)->mq_msgsize_max, (struct ipc_namespace)->mq_msg_default, (struct ipc_namespace)->mq_msgsize_default, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct ipc_params)->key, (struct ipc_params)->flg, (union anonymous)->nsems, ]
+SYSC_semctl write_list: [(struct atomic_t)->counter, (struct ipc_namespace)->used_sems, (struct ipc_namespace)->msg_ctlmax, (struct ipc_namespace)->msg_ctlmnb, (struct ipc_namespace)->msg_ctlmni, (struct ipc_namespace)->shm_ctlmax, (struct ipc_namespace)->shm_ctlall, (struct ipc_namespace)->shm_tot, (struct ipc_namespace)->shm_ctlmni, (struct ipc_namespace)->shm_rmid_forced, (struct notifier_block)->notifier_call, (struct notifier_block)->priority, (struct ipc_namespace)->mq_queues_count, (struct ipc_namespace)->mq_queues_max, (struct ipc_namespace)->mq_msg_max, (struct ipc_namespace)->mq_msgsize_max, (struct ipc_namespace)->mq_msg_default, (struct ipc_namespace)->mq_msgsize_default, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct seminfo)->semmap, (struct seminfo)->semmni, (struct seminfo)->semmns, (struct seminfo)->semmnu, (struct seminfo)->semmsl, (struct seminfo)->semopm, (struct seminfo)->semume, (struct seminfo)->semusz, (struct seminfo)->semvmx, (struct seminfo)->semaem, (struct ipc64_perm)->key, (struct ipc64_perm)->uid, (struct ipc64_perm)->gid, (struct ipc64_perm)->cuid, (struct ipc64_perm)->cgid, (struct ipc64_perm)->mode, (struct ipc64_perm)->seq, (struct ipc64_perm)->__pad2, (struct ipc64_perm)->__unused1, (struct ipc64_perm)->__unused2, (struct semid64_ds)->sem_otime, (struct semid64_ds)->__unused1, (struct semid64_ds)->sem_ctime, (struct semid64_ds)->__unused2, (struct semid64_ds)->sem_nsems, (struct semid64_ds)->__unused3, (struct semid64_ds)->__unused4, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct kern_ipc_perm)->deleted, (struct kern_ipc_perm)->id, (struct kern_ipc_perm)->key, (struct kuid_t)->val, (struct kgid_t)->val, (struct kern_ipc_perm)->mode, (struct kern_ipc_perm)->seq, (struct kern_ipc_perm)->security, (struct callback_head)->func, (struct sem_array)->sem_ctime, (struct sem_array)->sem_nsems, (struct sem_array)->complex_count, (struct sem_array)->use_global_lock, (struct wake_q_head)->lastp, (struct sem)->semval, (struct sem)->sempid, (struct sem_undo)->semid, (struct sem_undo)->semadj, (struct sem)->sem_otime, ]
+SYSC_semtimedop write_list: [(struct sembuf)->sem_num, (struct sembuf)->sem_op, (struct sembuf)->sem_flg, (struct atomic_t)->counter, (struct ipc_namespace)->used_sems, (struct ipc_namespace)->msg_ctlmax, (struct ipc_namespace)->msg_ctlmnb, (struct ipc_namespace)->msg_ctlmni, (struct ipc_namespace)->shm_ctlmax, (struct ipc_namespace)->shm_ctlall, (struct ipc_namespace)->shm_tot, (struct ipc_namespace)->shm_ctlmni, (struct ipc_namespace)->shm_rmid_forced, (struct notifier_block)->notifier_call, (struct notifier_block)->priority, (struct ipc_namespace)->mq_queues_count, (struct ipc_namespace)->mq_queues_max, (struct ipc_namespace)->mq_msg_max, (struct ipc_namespace)->mq_msgsize_max, (struct ipc_namespace)->mq_msg_default, (struct ipc_namespace)->mq_msgsize_default, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct callback_head)->func, (struct sem_undo)->semid, (struct sem_undo)->semadj, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct kern_ipc_perm)->deleted, (struct kern_ipc_perm)->id, (struct kern_ipc_perm)->key, (struct kuid_t)->val, (struct kgid_t)->val, (struct kern_ipc_perm)->mode, (struct kern_ipc_perm)->seq, (struct kern_ipc_perm)->security, (struct sem_array)->sem_ctime, (struct sem_array)->sem_nsems, (struct sem_array)->complex_count, (struct sem_array)->use_global_lock, (struct sem)->semval, (struct sem)->sempid, (struct sem)->sem_otime, (struct sem_queue)->nsops, (struct sem_queue)->pid, (struct sem_queue)->alter, (struct sem_queue)->dupsop, (struct wake_q_head)->lastp, (struct sem_queue)->status, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct mutex)->magic, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+SYSC_shmget write_list: [(struct ipc_ops)->getnew, (struct ipc_ops)->associate, (struct ipc_ops)->more_checks, (struct atomic_t)->counter, (struct ipc_namespace)->used_sems, (struct ipc_namespace)->msg_ctlmax, (struct ipc_namespace)->msg_ctlmnb, (struct ipc_namespace)->msg_ctlmni, (struct ipc_namespace)->shm_ctlmax, (struct ipc_namespace)->shm_ctlall, (struct ipc_namespace)->shm_tot, (struct ipc_namespace)->shm_ctlmni, (struct ipc_namespace)->shm_rmid_forced, (struct notifier_block)->notifier_call, (struct notifier_block)->priority, (struct ipc_namespace)->mq_queues_count, (struct ipc_namespace)->mq_queues_max, (struct ipc_namespace)->mq_msg_max, (struct ipc_namespace)->mq_msgsize_max, (struct ipc_namespace)->mq_msg_default, (struct ipc_namespace)->mq_msgsize_default, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct ipc_params)->key, (struct ipc_params)->flg, (union anonymous)->size, ]
+SYSC_shmctl write_list: [(struct atomic_t)->counter, (struct ipc_namespace)->used_sems, (struct ipc_namespace)->msg_ctlmax, (struct ipc_namespace)->msg_ctlmnb, (struct ipc_namespace)->msg_ctlmni, (struct ipc_namespace)->shm_ctlmax, (struct ipc_namespace)->shm_ctlall, (struct ipc_namespace)->shm_tot, (struct ipc_namespace)->shm_ctlmni, (struct ipc_namespace)->shm_rmid_forced, (struct notifier_block)->notifier_call, (struct notifier_block)->priority, (struct ipc_namespace)->mq_queues_count, (struct ipc_namespace)->mq_queues_max, (struct ipc_namespace)->mq_msg_max, (struct ipc_namespace)->mq_msgsize_max, (struct ipc_namespace)->mq_msg_default, (struct ipc_namespace)->mq_msgsize_default, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct shminfo64)->shmmax, (struct shminfo64)->shmmin, (struct shminfo64)->shmmni, (struct shminfo64)->shmseg, (struct shminfo64)->shmall, (struct shminfo64)->__unused1, (struct shminfo64)->__unused2, (struct shminfo64)->__unused3, (struct shminfo64)->__unused4, (struct shm_info)->used_ids, (struct shm_info)->shm_tot, (struct shm_info)->shm_rss, (struct shm_info)->shm_swp, (struct shm_info)->swap_attempts, (struct shm_info)->swap_successes, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct kern_ipc_perm)->deleted, (struct kern_ipc_perm)->id, (struct kern_ipc_perm)->key, (struct kuid_t)->val, (struct kgid_t)->val, (struct kern_ipc_perm)->mode, (struct kern_ipc_perm)->seq, (struct kern_ipc_perm)->security, (struct callback_head)->func, (struct shmid_kernel)->shm_nattch, (struct shmid_kernel)->shm_segsz, (struct shmid_kernel)->shm_atim, (struct shmid_kernel)->shm_dtim, (struct shmid_kernel)->shm_ctim, (struct shmid_kernel)->shm_cprid, (struct shmid_kernel)->shm_lprid, (struct ipc64_perm)->key, (struct ipc64_perm)->uid, (struct ipc64_perm)->gid, (struct ipc64_perm)->cuid, (struct ipc64_perm)->cgid, (struct ipc64_perm)->mode, (struct ipc64_perm)->seq, (struct ipc64_perm)->__pad2, (struct ipc64_perm)->__unused1, (struct ipc64_perm)->__unused2, (struct shmid64_ds)->shm_segsz, (struct shmid64_ds)->shm_atime, (struct shmid64_ds)->shm_dtime, (struct shmid64_ds)->shm_ctime, (struct shmid64_ds)->shm_cpid, (struct shmid64_ds)->shm_lpid, (struct shmid64_ds)->shm_nattch, (struct shmid64_ds)->__unused4, (struct shmid64_ds)->__unused5, (struct file)->f_write_hint, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, (struct user_struct)->mq_bytes, (struct user_struct)->locked_shm, (struct user_struct)->unix_inflight, (struct hlist_node)->pprev, ]
+SYSC_shmat write_list: [(struct atomic_t)->counter, (struct ipc_namespace)->used_sems, (struct ipc_namespace)->msg_ctlmax, (struct ipc_namespace)->msg_ctlmnb, (struct ipc_namespace)->msg_ctlmni, (struct ipc_namespace)->shm_ctlmax, (struct ipc_namespace)->shm_ctlall, (struct ipc_namespace)->shm_tot, (struct ipc_namespace)->shm_ctlmni, (struct ipc_namespace)->shm_rmid_forced, (struct notifier_block)->notifier_call, (struct notifier_block)->priority, (struct ipc_namespace)->mq_queues_count, (struct ipc_namespace)->mq_queues_max, (struct ipc_namespace)->mq_msg_max, (struct ipc_namespace)->mq_msgsize_max, (struct ipc_namespace)->mq_msg_default, (struct ipc_namespace)->mq_msgsize_default, (struct atomic64_t)->counter, (struct ns_common)->inum, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct kern_ipc_perm)->deleted, (struct kern_ipc_perm)->id, (struct kern_ipc_perm)->key, (struct kuid_t)->val, (struct kgid_t)->val, (struct kern_ipc_perm)->mode, (struct kern_ipc_perm)->seq, (struct kern_ipc_perm)->security, (struct callback_head)->func, (struct shmid_kernel)->shm_nattch, (struct shmid_kernel)->shm_segsz, (struct shmid_kernel)->shm_atim, (struct shmid_kernel)->shm_dtim, (struct shmid_kernel)->shm_ctim, (struct shmid_kernel)->shm_cprid, (struct shmid_kernel)->shm_lprid, (struct shm_file_data)->id, (struct file)->f_write_hint, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, ]
+SYSC_shmdt write_list: [(struct mm_struct)->vmacache_seqnum, (struct mm_struct)->get_unmapped_area, (struct mm_struct)->mmap_base, (struct mm_struct)->mmap_legacy_base, (struct mm_struct)->mmap_compat_base, (struct mm_struct)->mmap_compat_legacy_base, (struct mm_struct)->task_size, (struct mm_struct)->highest_vm_end, (struct atomic_t)->counter, (struct atomic64_t)->counter, (struct mm_struct)->map_count, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mm_struct)->hiwater_rss, (struct mm_struct)->hiwater_vm, (struct mm_struct)->total_vm, (struct mm_struct)->locked_vm, (struct mm_struct)->pinned_vm, (struct mm_struct)->data_vm, (struct mm_struct)->exec_vm, (struct mm_struct)->stack_vm, (struct mm_struct)->def_flags, (struct mm_struct)->start_code, (struct mm_struct)->end_code, (struct mm_struct)->start_data, (struct mm_struct)->end_data, (struct mm_struct)->start_brk, (struct mm_struct)->brk, (struct mm_struct)->start_stack, (struct mm_struct)->arg_start, (struct mm_struct)->arg_end, (struct mm_struct)->env_start, (struct mm_struct)->env_end, (struct mm_context_t)->ia32_compat, (struct mutex)->magic, (struct mm_context_t)->vdso, (struct mm_context_t)->pkey_allocation_map, (struct mm_context_t)->execute_only_pkey, (struct mm_struct)->flags, (struct mm_struct)->tlb_flush_batched, (struct work_struct)->func, (struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, (struct rb_node)->__rb_parent_color, (struct vm_area_struct)->rb_subtree_gap, (struct pgprot)->pgprot, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_pgoff, (struct vm_area_struct)->vm_private_data, (struct callback_head)->func, (struct file)->f_write_hint, (struct file)->f_flags, (struct file)->f_mode, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+SYSC_quotactl write_list: [(struct filename)->name, (struct filename)->uptr, (struct filename)->refcnt, (struct block_device)->bd_dev, (struct block_device)->bd_openers, (struct atomic64_t)->counter, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mutex)->magic, (struct block_device)->bd_claiming, (struct block_device)->bd_holder, (struct block_device)->bd_holders, (struct block_device)->bd_write_holder, (struct block_device)->bd_block_size, (struct block_device)->bd_part_count, (struct block_device)->bd_invalidated, (struct block_device)->bd_private, (struct block_device)->bd_fsfreeze_count, (struct super_block)->s_dev, (struct super_block)->s_blocksize_bits, (struct super_block)->s_blocksize, (struct super_block)->s_maxbytes, (struct super_block)->s_flags, (struct super_block)->s_iflags, (struct super_block)->s_magic, (struct super_block)->s_count, (struct super_block)->s_security, (struct super_block)->s_xattr, (struct hlist_node)->pprev, (struct super_block)->s_quota_types, (struct quota_info)->flags, (struct sb_writers)->frozen, (struct super_block)->s_fs_info, (struct super_block)->s_max_links, (struct super_block)->s_mode, (struct super_block)->s_time_gran, (struct super_block)->s_subtype, (struct super_block)->cleancache_poolid, (struct shrinker)->count_objects, (struct shrinker)->scan_objects, (struct shrinker)->seeks, (struct shrinker)->batch, (struct shrinker)->flags, (struct super_block)->s_readonly_remount, (struct callback_head)->func, (struct work_struct)->func, (struct super_block)->s_stack_depth, ]
+SYSC_vmsplice write_list: [(struct fd)->flags, (struct iovec)->iov_base, (struct iovec)->iov_len, (struct atomic64_t)->counter, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mutex)->magic, (struct pipe_inode_info)->nrbufs, (struct pipe_inode_info)->curbuf, (struct pipe_inode_info)->buffers, (struct pipe_inode_info)->readers, (struct pipe_inode_info)->writers, (struct pipe_inode_info)->files, (struct pipe_inode_info)->waiting_writers, (struct pipe_inode_info)->r_counter, (struct pipe_inode_info)->w_counter, (struct splice_desc)->total_len, (struct splice_desc)->len, (struct splice_desc)->flags, (union anonymous)->data, (struct splice_desc)->pos, ]
+C_SYSC_vmsplice write_list: [(struct iovec)->iov_base, (struct iovec)->iov_len, (struct compat_iovec)->iov_base, (struct compat_iovec)->iov_len, ]
+SYSC_splice write_list: [(struct fd)->flags, (struct atomic64_t)->counter, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mutex)->magic, (struct pipe_inode_info)->nrbufs, (struct pipe_inode_info)->curbuf, (struct pipe_inode_info)->buffers, (struct pipe_inode_info)->readers, (struct pipe_inode_info)->writers, (struct pipe_inode_info)->files, (struct pipe_inode_info)->waiting_writers, (struct pipe_inode_info)->r_counter, (struct pipe_inode_info)->w_counter, (struct file)->f_pos, ]
+SYSC_tee write_list: [(struct fd)->flags, (struct atomic64_t)->counter, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mutex)->magic, (struct pipe_inode_info)->nrbufs, (struct pipe_inode_info)->curbuf, (struct pipe_inode_info)->buffers, (struct pipe_inode_info)->readers, (struct pipe_inode_info)->writers, (struct pipe_inode_info)->files, (struct pipe_inode_info)->waiting_writers, (struct pipe_inode_info)->r_counter, (struct pipe_inode_info)->w_counter, ]
+SYSC_io_setup write_list: [(struct mm_struct)->vmacache_seqnum, (struct mm_struct)->get_unmapped_area, (struct mm_struct)->mmap_base, (struct mm_struct)->mmap_legacy_base, (struct mm_struct)->mmap_compat_base, (struct mm_struct)->mmap_compat_legacy_base, (struct mm_struct)->task_size, (struct mm_struct)->highest_vm_end, (struct atomic_t)->counter, (struct atomic64_t)->counter, (struct mm_struct)->map_count, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mm_struct)->hiwater_rss, (struct mm_struct)->hiwater_vm, (struct mm_struct)->total_vm, (struct mm_struct)->locked_vm, (struct mm_struct)->pinned_vm, (struct mm_struct)->data_vm, (struct mm_struct)->exec_vm, (struct mm_struct)->stack_vm, (struct mm_struct)->def_flags, (struct mm_struct)->start_code, (struct mm_struct)->end_code, (struct mm_struct)->start_data, (struct mm_struct)->end_data, (struct mm_struct)->start_brk, (struct mm_struct)->brk, (struct mm_struct)->start_stack, (struct mm_struct)->arg_start, (struct mm_struct)->arg_end, (struct mm_struct)->env_start, (struct mm_struct)->env_end, (struct mm_context_t)->ia32_compat, (struct mutex)->magic, (struct mm_context_t)->vdso, (struct mm_context_t)->pkey_allocation_map, (struct mm_context_t)->execute_only_pkey, (struct mm_struct)->flags, (struct mm_struct)->tlb_flush_batched, (struct work_struct)->func, (struct percpu_ref)->percpu_count_ptr, (struct percpu_ref)->release, (struct percpu_ref)->confirm_switch, (struct percpu_ref)->force_atomic, (struct callback_head)->func, (struct kioctx)->user_id, (struct kioctx)->req_batch, (struct kioctx)->max_reqs, (struct kioctx)->nr_events, (struct kioctx)->mmap_base, (struct kioctx)->mmap_size, (struct kioctx)->ring_pages, (struct kioctx)->nr_pages, (struct kioctx)->tail, (struct kioctx)->completed_events, (struct kioctx)->id, (struct kioctx_cpu)->reqs_available, (struct kioctx_table)->nr, (struct completion)->done, ]
+C_SYSC_io_setup write_list: [(struct mm_struct)->vmacache_seqnum, (struct mm_struct)->get_unmapped_area, (struct mm_struct)->mmap_base, (struct mm_struct)->mmap_legacy_base, (struct mm_struct)->mmap_compat_base, (struct mm_struct)->mmap_compat_legacy_base, (struct mm_struct)->task_size, (struct mm_struct)->highest_vm_end, (struct atomic_t)->counter, (struct atomic64_t)->counter, (struct mm_struct)->map_count, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mm_struct)->hiwater_rss, (struct mm_struct)->hiwater_vm, (struct mm_struct)->total_vm, (struct mm_struct)->locked_vm, (struct mm_struct)->pinned_vm, (struct mm_struct)->data_vm, (struct mm_struct)->exec_vm, (struct mm_struct)->stack_vm, (struct mm_struct)->def_flags, (struct mm_struct)->start_code, (struct mm_struct)->end_code, (struct mm_struct)->start_data, (struct mm_struct)->end_data, (struct mm_struct)->start_brk, (struct mm_struct)->brk, (struct mm_struct)->start_stack, (struct mm_struct)->arg_start, (struct mm_struct)->arg_end, (struct mm_struct)->env_start, (struct mm_struct)->env_end, (struct mm_context_t)->ia32_compat, (struct mutex)->magic, (struct mm_context_t)->vdso, (struct mm_context_t)->pkey_allocation_map, (struct mm_context_t)->execute_only_pkey, (struct mm_struct)->flags, (struct mm_struct)->tlb_flush_batched, (struct work_struct)->func, (struct percpu_ref)->percpu_count_ptr, (struct percpu_ref)->release, (struct percpu_ref)->confirm_switch, (struct percpu_ref)->force_atomic, (struct callback_head)->func, (struct kioctx)->user_id, (struct kioctx)->req_batch, (struct kioctx)->max_reqs, (struct kioctx)->nr_events, (struct kioctx)->mmap_base, (struct kioctx)->mmap_size, (struct kioctx)->ring_pages, (struct kioctx)->nr_pages, (struct kioctx)->tail, (struct kioctx)->completed_events, (struct kioctx)->id, (struct kioctx_cpu)->reqs_available, (struct kioctx_table)->nr, (struct completion)->done, ]
+SYSC_io_destroy write_list: [(struct aio_ring)->id, (struct aio_ring)->nr, (struct aio_ring)->head, (struct aio_ring)->tail, (struct aio_ring)->magic, (struct aio_ring)->compat_features, (struct aio_ring)->incompat_features, (struct aio_ring)->header_length, (struct mm_struct)->vmacache_seqnum, (struct mm_struct)->get_unmapped_area, (struct mm_struct)->mmap_base, (struct mm_struct)->mmap_legacy_base, (struct mm_struct)->mmap_compat_base, (struct mm_struct)->mmap_compat_legacy_base, (struct mm_struct)->task_size, (struct mm_struct)->highest_vm_end, (struct atomic_t)->counter, (struct atomic64_t)->counter, (struct mm_struct)->map_count, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mm_struct)->hiwater_rss, (struct mm_struct)->hiwater_vm, (struct mm_struct)->total_vm, (struct mm_struct)->locked_vm, (struct mm_struct)->pinned_vm, (struct mm_struct)->data_vm, (struct mm_struct)->exec_vm, (struct mm_struct)->stack_vm, (struct mm_struct)->def_flags, (struct mm_struct)->start_code, (struct mm_struct)->end_code, (struct mm_struct)->start_data, (struct mm_struct)->end_data, (struct mm_struct)->start_brk, (struct mm_struct)->brk, (struct mm_struct)->start_stack, (struct mm_struct)->arg_start, (struct mm_struct)->arg_end, (struct mm_struct)->env_start, (struct mm_struct)->env_end, (struct mm_context_t)->ia32_compat, (struct mutex)->magic, (struct mm_context_t)->vdso, (struct mm_context_t)->pkey_allocation_map, (struct mm_context_t)->execute_only_pkey, (struct mm_struct)->flags, (struct mm_struct)->tlb_flush_batched, (struct work_struct)->func, (struct callback_head)->func, (struct kioctx_table)->nr, (struct percpu_ref)->percpu_count_ptr, (struct percpu_ref)->release, (struct percpu_ref)->confirm_switch, (struct percpu_ref)->force_atomic, (struct kioctx)->user_id, (struct kioctx)->req_batch, (struct kioctx)->max_reqs, (struct kioctx)->nr_events, (struct kioctx)->mmap_base, (struct kioctx)->mmap_size, (struct kioctx)->ring_pages, (struct kioctx)->nr_pages, (struct kioctx)->tail, (struct kioctx)->completed_events, (struct kioctx)->id, (struct completion)->done, ]
+SYSC_io_submit write_list: [(struct atomic64_t)->counter, (struct percpu_ref)->percpu_count_ptr, (struct percpu_ref)->release, (struct percpu_ref)->confirm_switch, (struct percpu_ref)->force_atomic, (struct callback_head)->func, (struct atomic_t)->counter, (struct kioctx)->user_id, (struct kioctx)->req_batch, (struct kioctx)->max_reqs, (struct kioctx)->nr_events, (struct kioctx)->mmap_base, (struct kioctx)->mmap_size, (struct kioctx)->ring_pages, (struct kioctx)->nr_pages, (struct work_struct)->func, (struct lockdep_map)->name, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct mutex)->magic, (struct kioctx)->tail, (struct kioctx)->completed_events, (struct kioctx)->id, (struct iocb)->aio_data, (struct iocb)->aio_key, (struct iocb)->aio_rw_flags, (struct iocb)->aio_lio_opcode, (struct iocb)->aio_reqprio, (struct iocb)->aio_fildes, (struct iocb)->aio_buf, (struct iocb)->aio_nbytes, (struct iocb)->aio_offset, (struct iocb)->aio_reserved2, (struct iocb)->aio_flags, (struct iocb)->aio_resfd, ]
+C_SYSC_io_submit write_list: [(struct iocb)->aio_data, (struct iocb)->aio_key, (struct iocb)->aio_rw_flags, (struct iocb)->aio_lio_opcode, (struct iocb)->aio_reqprio, (struct iocb)->aio_fildes, (struct iocb)->aio_buf, (struct iocb)->aio_nbytes, (struct iocb)->aio_offset, (struct iocb)->aio_reserved2, (struct iocb)->aio_flags, (struct iocb)->aio_resfd, (struct atomic64_t)->counter, (struct percpu_ref)->percpu_count_ptr, (struct percpu_ref)->release, (struct percpu_ref)->confirm_switch, (struct percpu_ref)->force_atomic, (struct callback_head)->func, (struct atomic_t)->counter, (struct kioctx)->user_id, (struct kioctx)->req_batch, (struct kioctx)->max_reqs, (struct kioctx)->nr_events, (struct kioctx)->mmap_base, (struct kioctx)->mmap_size, (struct kioctx)->ring_pages, (struct kioctx)->nr_pages, (struct work_struct)->func, (struct lockdep_map)->name, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct mutex)->magic, (struct kioctx)->tail, (struct kioctx)->completed_events, (struct kioctx)->id, ]
+SYSC_io_cancel write_list: [(struct aio_ring)->id, (struct aio_ring)->nr, (struct aio_ring)->head, (struct aio_ring)->tail, (struct aio_ring)->magic, (struct aio_ring)->compat_features, (struct aio_ring)->incompat_features, (struct aio_ring)->header_length, (struct mm_struct)->vmacache_seqnum, (struct mm_struct)->get_unmapped_area, (struct mm_struct)->mmap_base, (struct mm_struct)->mmap_legacy_base, (struct mm_struct)->mmap_compat_base, (struct mm_struct)->mmap_compat_legacy_base, (struct mm_struct)->task_size, (struct mm_struct)->highest_vm_end, (struct atomic_t)->counter, (struct atomic64_t)->counter, (struct mm_struct)->map_count, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mm_struct)->hiwater_rss, (struct mm_struct)->hiwater_vm, (struct mm_struct)->total_vm, (struct mm_struct)->locked_vm, (struct mm_struct)->pinned_vm, (struct mm_struct)->data_vm, (struct mm_struct)->exec_vm, (struct mm_struct)->stack_vm, (struct mm_struct)->def_flags, (struct mm_struct)->start_code, (struct mm_struct)->end_code, (struct mm_struct)->start_data, (struct mm_struct)->end_data, (struct mm_struct)->start_brk, (struct mm_struct)->brk, (struct mm_struct)->start_stack, (struct mm_struct)->arg_start, (struct mm_struct)->arg_end, (struct mm_struct)->env_start, (struct mm_struct)->env_end, (struct mm_context_t)->ia32_compat, (struct mutex)->magic, (struct mm_context_t)->vdso, (struct mm_context_t)->pkey_allocation_map, (struct mm_context_t)->execute_only_pkey, (struct mm_struct)->flags, (struct mm_struct)->tlb_flush_batched, (struct work_struct)->func, (struct callback_head)->func, (struct kioctx_table)->nr, (struct percpu_ref)->percpu_count_ptr, (struct percpu_ref)->release, (struct percpu_ref)->confirm_switch, (struct percpu_ref)->force_atomic, (struct kioctx)->user_id, (struct kioctx)->req_batch, (struct kioctx)->max_reqs, (struct kioctx)->nr_events, (struct kioctx)->mmap_base, (struct kioctx)->mmap_size, (struct kioctx)->ring_pages, (struct kioctx)->nr_pages, (struct kioctx)->tail, (struct kioctx)->completed_events, (struct kioctx)->id, (struct kiocb)->ki_pos, (struct kiocb)->ki_complete, (struct kiocb)->private, (struct kiocb)->ki_flags, (struct kiocb)->ki_hint, (struct aio_kiocb)->ki_cancel, (struct aio_kiocb)->ki_user_data, ]
+SYSC_io_getevents write_list: [(struct aio_ring)->id, (struct aio_ring)->nr, (struct aio_ring)->head, (struct aio_ring)->tail, (struct aio_ring)->magic, (struct aio_ring)->compat_features, (struct aio_ring)->incompat_features, (struct aio_ring)->header_length, (struct mm_struct)->vmacache_seqnum, (struct mm_struct)->get_unmapped_area, (struct mm_struct)->mmap_base, (struct mm_struct)->mmap_legacy_base, (struct mm_struct)->mmap_compat_base, (struct mm_struct)->mmap_compat_legacy_base, (struct mm_struct)->task_size, (struct mm_struct)->highest_vm_end, (struct atomic_t)->counter, (struct atomic64_t)->counter, (struct mm_struct)->map_count, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mm_struct)->hiwater_rss, (struct mm_struct)->hiwater_vm, (struct mm_struct)->total_vm, (struct mm_struct)->locked_vm, (struct mm_struct)->pinned_vm, (struct mm_struct)->data_vm, (struct mm_struct)->exec_vm, (struct mm_struct)->stack_vm, (struct mm_struct)->def_flags, (struct mm_struct)->start_code, (struct mm_struct)->end_code, (struct mm_struct)->start_data, (struct mm_struct)->end_data, (struct mm_struct)->start_brk, (struct mm_struct)->brk, (struct mm_struct)->start_stack, (struct mm_struct)->arg_start, (struct mm_struct)->arg_end, (struct mm_struct)->env_start, (struct mm_struct)->env_end, (struct mm_context_t)->ia32_compat, (struct mutex)->magic, (struct mm_context_t)->vdso, (struct mm_context_t)->pkey_allocation_map, (struct mm_context_t)->execute_only_pkey, (struct mm_struct)->flags, (struct mm_struct)->tlb_flush_batched, (struct work_struct)->func, (struct callback_head)->func, (struct kioctx_table)->nr, (struct percpu_ref)->percpu_count_ptr, (struct percpu_ref)->release, (struct percpu_ref)->confirm_switch, (struct percpu_ref)->force_atomic, (struct kioctx)->user_id, (struct kioctx)->req_batch, (struct kioctx)->max_reqs, (struct kioctx)->nr_events, (struct kioctx)->mmap_base, (struct kioctx)->mmap_size, (struct kioctx)->ring_pages, (struct kioctx)->nr_pages, (struct kioctx)->tail, (struct kioctx)->completed_events, (struct kioctx)->id, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct rb_node)->__rb_parent_color, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, ]
+C_SYSC_io_getevents write_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+SYSC_name_to_handle_at write_list: [(struct file_handle)->handle_bytes, (struct file_handle)->handle_type, ]
+SYSC_open_by_handle_at write_list: [(struct callback_head)->func, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct file)->f_write_hint, (struct atomic64_t)->counter, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+C_SYSC_open_by_handle_at write_list: [(struct callback_head)->func, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct file)->f_write_hint, (struct atomic64_t)->counter, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+SYSC_ioctl write_list: [(struct fd)->flags, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, ]
+SYSC_sysfs write_list: [(struct filename)->name, (struct filename)->uptr, (struct filename)->refcnt, (struct file_system_type)->name, (struct file_system_type)->fs_flags, (struct file_system_type)->mount, (struct file_system_type)->kill_sb, ]
+SYSC_signalfd4 write_list: [(struct fd)->flags, ]
+SYSC_pipe2 write_list: [(struct callback_head)->func, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct file)->f_write_hint, (struct atomic64_t)->counter, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+SYSC_getcwd write_list: [(struct dentry)->d_flags, (struct seqcount)->sequence, (struct lockdep_map)->name, (struct hlist_bl_node)->pprev, (struct qstr)->hash, (struct qstr)->len, (struct qstr)->hash_len, (struct qstr)->name, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockref)->count, (struct dentry)->d_time, (struct dentry)->d_fsdata, (struct hlist_node)->pprev, (struct callback_head)->func, (struct vfsmount)->mnt_flags, (struct mount)->mnt_devname, (struct mount)->mnt_fsnotify_mask, (struct mount)->mnt_id, (struct mount)->mnt_group_id, (struct mount)->mnt_expiry_mark, (struct fs_pin)->done, (struct fs_pin)->kill, ]
+SYSC_stat write_list: [(struct __old_kernel_stat)->st_dev, (struct __old_kernel_stat)->st_ino, (struct __old_kernel_stat)->st_mode, (struct __old_kernel_stat)->st_nlink, (struct __old_kernel_stat)->st_uid, (struct __old_kernel_stat)->st_gid, (struct __old_kernel_stat)->st_rdev, (struct __old_kernel_stat)->st_size, (struct __old_kernel_stat)->st_atime, (struct __old_kernel_stat)->st_mtime, (struct __old_kernel_stat)->st_ctime, (struct __old_kernel_stat)->st_uid, (struct __old_kernel_stat)->st_gid, ]
+SYSC_lstat write_list: [(struct __old_kernel_stat)->st_dev, (struct __old_kernel_stat)->st_ino, (struct __old_kernel_stat)->st_mode, (struct __old_kernel_stat)->st_nlink, (struct __old_kernel_stat)->st_uid, (struct __old_kernel_stat)->st_gid, (struct __old_kernel_stat)->st_rdev, (struct __old_kernel_stat)->st_size, (struct __old_kernel_stat)->st_atime, (struct __old_kernel_stat)->st_mtime, (struct __old_kernel_stat)->st_ctime, (struct __old_kernel_stat)->st_uid, (struct __old_kernel_stat)->st_gid, ]
+SYSC_fstat write_list: [(struct __old_kernel_stat)->st_dev, (struct __old_kernel_stat)->st_ino, (struct __old_kernel_stat)->st_mode, (struct __old_kernel_stat)->st_nlink, (struct __old_kernel_stat)->st_uid, (struct __old_kernel_stat)->st_gid, (struct __old_kernel_stat)->st_rdev, (struct __old_kernel_stat)->st_size, (struct __old_kernel_stat)->st_atime, (struct __old_kernel_stat)->st_mtime, (struct __old_kernel_stat)->st_ctime, (struct __old_kernel_stat)->st_uid, (struct __old_kernel_stat)->st_gid, ]
+SYSC_newstat write_list: [(struct stat)->__pad0, (struct stat)->st_dev, (struct stat)->st_ino, (struct stat)->st_mode, (struct stat)->st_nlink, (struct stat)->st_uid, (struct stat)->st_gid, (struct stat)->st_rdev, (struct stat)->st_size, (struct stat)->st_atime, (struct stat)->st_mtime, (struct stat)->st_ctime, (struct stat)->st_atime_nsec, (struct stat)->st_mtime_nsec, (struct stat)->st_ctime_nsec, (struct stat)->st_blocks, (struct stat)->st_blksize, ]
+SYSC_newlstat write_list: [(struct stat)->__pad0, (struct stat)->st_dev, (struct stat)->st_ino, (struct stat)->st_mode, (struct stat)->st_nlink, (struct stat)->st_uid, (struct stat)->st_gid, (struct stat)->st_rdev, (struct stat)->st_size, (struct stat)->st_atime, (struct stat)->st_mtime, (struct stat)->st_ctime, (struct stat)->st_atime_nsec, (struct stat)->st_mtime_nsec, (struct stat)->st_ctime_nsec, (struct stat)->st_blocks, (struct stat)->st_blksize, ]
+SYSC_newfstatat write_list: [(struct stat)->__pad0, (struct stat)->st_dev, (struct stat)->st_ino, (struct stat)->st_mode, (struct stat)->st_nlink, (struct stat)->st_uid, (struct stat)->st_gid, (struct stat)->st_rdev, (struct stat)->st_size, (struct stat)->st_atime, (struct stat)->st_mtime, (struct stat)->st_ctime, (struct stat)->st_atime_nsec, (struct stat)->st_mtime_nsec, (struct stat)->st_ctime_nsec, (struct stat)->st_blocks, (struct stat)->st_blksize, ]
+SYSC_newfstat write_list: [(struct stat)->__pad0, (struct stat)->st_dev, (struct stat)->st_ino, (struct stat)->st_mode, (struct stat)->st_nlink, (struct stat)->st_uid, (struct stat)->st_gid, (struct stat)->st_rdev, (struct stat)->st_size, (struct stat)->st_atime, (struct stat)->st_mtime, (struct stat)->st_ctime, (struct stat)->st_atime_nsec, (struct stat)->st_mtime_nsec, (struct stat)->st_ctime_nsec, (struct stat)->st_blocks, (struct stat)->st_blksize, ]
+SYSC_readlinkat write_list: [(struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, ]
+SYSC_statx write_list: [(struct statx)->stx_mask, (struct statx)->stx_blksize, (struct statx)->stx_attributes, (struct statx)->stx_nlink, (struct statx)->stx_uid, (struct statx)->stx_gid, (struct statx)->stx_mode, (struct statx)->stx_ino, (struct statx)->stx_size, (struct statx)->stx_blocks, (struct statx)->stx_attributes_mask, (struct statx_timestamp)->tv_sec, (struct statx_timestamp)->tv_nsec, (struct statx_timestamp)->__reserved, (struct statx)->stx_rdev_major, (struct statx)->stx_rdev_minor, (struct statx)->stx_dev_major, (struct statx)->stx_dev_minor, ]
+C_SYSC_newstat write_list: [(struct compat_stat)->st_dev, (struct compat_stat)->__pad1, (struct compat_stat)->st_ino, (struct compat_stat)->st_mode, (struct compat_stat)->st_nlink, (struct compat_stat)->st_uid, (struct compat_stat)->st_gid, (struct compat_stat)->st_rdev, (struct compat_stat)->__pad2, (struct compat_stat)->st_size, (struct compat_stat)->st_blksize, (struct compat_stat)->st_blocks, (struct compat_stat)->st_atime, (struct compat_stat)->st_atime_nsec, (struct compat_stat)->st_mtime, (struct compat_stat)->st_mtime_nsec, (struct compat_stat)->st_ctime, (struct compat_stat)->st_ctime_nsec, (struct compat_stat)->__unused4, (struct compat_stat)->__unused5, (struct compat_stat)->st_uid, (struct compat_stat)->st_gid, ]
+C_SYSC_newlstat write_list: [(struct compat_stat)->st_dev, (struct compat_stat)->__pad1, (struct compat_stat)->st_ino, (struct compat_stat)->st_mode, (struct compat_stat)->st_nlink, (struct compat_stat)->st_uid, (struct compat_stat)->st_gid, (struct compat_stat)->st_rdev, (struct compat_stat)->__pad2, (struct compat_stat)->st_size, (struct compat_stat)->st_blksize, (struct compat_stat)->st_blocks, (struct compat_stat)->st_atime, (struct compat_stat)->st_atime_nsec, (struct compat_stat)->st_mtime, (struct compat_stat)->st_mtime_nsec, (struct compat_stat)->st_ctime, (struct compat_stat)->st_ctime_nsec, (struct compat_stat)->__unused4, (struct compat_stat)->__unused5, (struct compat_stat)->st_uid, (struct compat_stat)->st_gid, ]
+C_SYSC_newfstatat write_list: [(struct compat_stat)->st_dev, (struct compat_stat)->__pad1, (struct compat_stat)->st_ino, (struct compat_stat)->st_mode, (struct compat_stat)->st_nlink, (struct compat_stat)->st_uid, (struct compat_stat)->st_gid, (struct compat_stat)->st_rdev, (struct compat_stat)->__pad2, (struct compat_stat)->st_size, (struct compat_stat)->st_blksize, (struct compat_stat)->st_blocks, (struct compat_stat)->st_atime, (struct compat_stat)->st_atime_nsec, (struct compat_stat)->st_mtime, (struct compat_stat)->st_mtime_nsec, (struct compat_stat)->st_ctime, (struct compat_stat)->st_ctime_nsec, (struct compat_stat)->__unused4, (struct compat_stat)->__unused5, (struct compat_stat)->st_uid, (struct compat_stat)->st_gid, ]
+C_SYSC_newfstat write_list: [(struct compat_stat)->st_dev, (struct compat_stat)->__pad1, (struct compat_stat)->st_ino, (struct compat_stat)->st_mode, (struct compat_stat)->st_nlink, (struct compat_stat)->st_uid, (struct compat_stat)->st_gid, (struct compat_stat)->st_rdev, (struct compat_stat)->__pad2, (struct compat_stat)->st_size, (struct compat_stat)->st_blksize, (struct compat_stat)->st_blocks, (struct compat_stat)->st_atime, (struct compat_stat)->st_atime_nsec, (struct compat_stat)->st_mtime, (struct compat_stat)->st_mtime_nsec, (struct compat_stat)->st_ctime, (struct compat_stat)->st_ctime_nsec, (struct compat_stat)->__unused4, (struct compat_stat)->__unused5, (struct compat_stat)->st_uid, (struct compat_stat)->st_gid, ]
+SYSC_old_readdir write_list: [(struct fd)->flags, (struct dir_context)->actor, (struct old_linux_dirent)->d_ino, (struct old_linux_dirent)->d_offset, (struct old_linux_dirent)->d_namlen, (struct dir_context)->pos, (struct readdir_callback)->result, ]
+SYSC_getdents write_list: [(struct dir_context)->actor, (struct getdents_callback)->count, (struct linux_dirent)->d_ino, (struct linux_dirent)->d_off, (struct linux_dirent)->d_reclen, (struct dir_context)->pos, (struct getdents_callback)->error, (struct fd)->flags, ]
+SYSC_getdents64 write_list: [(struct dir_context)->actor, (struct getdents_callback64)->count, (struct linux_dirent64)->d_ino, (struct linux_dirent64)->d_off, (struct linux_dirent64)->d_reclen, (struct linux_dirent64)->d_type, (struct dir_context)->pos, (struct getdents_callback64)->error, (struct fd)->flags, ]
+C_SYSC_old_readdir write_list: [(struct fd)->flags, (struct dir_context)->actor, (struct compat_old_linux_dirent)->d_ino, (struct compat_old_linux_dirent)->d_offset, (struct compat_old_linux_dirent)->d_namlen, (struct dir_context)->pos, (struct compat_readdir_callback)->result, ]
+C_SYSC_getdents write_list: [(struct dir_context)->actor, (struct compat_linux_dirent)->d_ino, (struct compat_linux_dirent)->d_off, (struct compat_linux_dirent)->d_reclen, (struct compat_getdents_callback)->count, (struct dir_context)->pos, (struct compat_getdents_callback)->error, (struct fd)->flags, ]
+SYSC_dup3 write_list: [(struct atomic_t)->counter, (struct files_struct)->resize_in_progress, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct fdtable)->max_fds, (struct fdtable)->fd, (struct fdtable)->close_on_exec, (struct fdtable)->open_fds, (struct fdtable)->full_fds_bits, (struct callback_head)->func, (struct files_struct)->next_fd, (struct file)->f_write_hint, (struct atomic64_t)->counter, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+SYSC_dup2 write_list: [(struct atomic_t)->counter, (struct files_struct)->resize_in_progress, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct fdtable)->max_fds, (struct fdtable)->fd, (struct fdtable)->close_on_exec, (struct fdtable)->open_fds, (struct fdtable)->full_fds_bits, (struct callback_head)->func, (struct files_struct)->next_fd, ]
+SYSC_dup write_list: [(struct callback_head)->func, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct file)->f_write_hint, (struct atomic64_t)->counter, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+SYSC_fsetxattr write_list: [(struct fd)->flags, ]
+SYSC_fgetxattr write_list: [(struct fd)->flags, ]
+SYSC_flistxattr write_list: [(struct fd)->flags, ]
+SYSC_fremovexattr write_list: [(struct fd)->flags, ]
+SYSC_uselib write_list: [(struct filename)->name, (struct filename)->uptr, (struct filename)->refcnt, (struct open_flags)->open_flag, (struct open_flags)->acc_mode, (struct open_flags)->intent, (struct open_flags)->lookup_flags, (struct open_flags)->mode, (struct callback_head)->func, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct file)->f_write_hint, (struct atomic64_t)->counter, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (struct linux_binfmt)->load_binary, (struct linux_binfmt)->load_shlib, (struct linux_binfmt)->core_dump, (struct linux_binfmt)->min_coredump, ]
+SYSC_execve write_list: [(union anonymous)->native, (struct user_arg_ptr)->is_compat, (union anonymous)->compat, ]
+SYSC_execveat write_list: [(union anonymous)->native, (struct user_arg_ptr)->is_compat, (union anonymous)->compat, ]
+C_SYSC_execve write_list: [(struct user_arg_ptr)->is_compat, (union anonymous)->compat, (union anonymous)->native, ]
+C_SYSC_execveat write_list: [(struct user_arg_ptr)->is_compat, (union anonymous)->compat, (union anonymous)->native, ]
+SYSC_umount write_list: [(struct hlist_node)->pprev, (struct vfsmount)->mnt_flags, (struct callback_head)->func, (struct mount)->mnt_devname, (struct mount)->mnt_fsnotify_mask, (struct mount)->mnt_id, (struct mount)->mnt_group_id, (struct mount)->mnt_expiry_mark, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct fs_pin)->done, (struct fs_pin)->kill, (struct super_block)->s_dev, (struct super_block)->s_blocksize_bits, (struct super_block)->s_blocksize, (struct super_block)->s_maxbytes, (struct super_block)->s_flags, (struct super_block)->s_iflags, (struct super_block)->s_magic, (struct atomic64_t)->counter, (struct super_block)->s_count, (struct super_block)->s_security, (struct super_block)->s_xattr, (struct super_block)->s_quota_types, (struct quota_info)->flags, (struct mutex)->magic, (struct sb_writers)->frozen, (struct super_block)->s_fs_info, (struct super_block)->s_max_links, (struct super_block)->s_mode, (struct super_block)->s_time_gran, (struct super_block)->s_subtype, (struct super_block)->cleancache_poolid, (struct shrinker)->count_objects, (struct shrinker)->scan_objects, (struct shrinker)->seeks, (struct shrinker)->batch, (struct shrinker)->flags, (struct super_block)->s_readonly_remount, (struct work_struct)->func, (struct super_block)->s_stack_depth, (struct thread_info)->flags, (struct task_struct)->state, (struct task_struct)->stack, (struct task_struct)->flags, (struct task_struct)->ptrace, (struct task_struct)->on_cpu, (struct task_struct)->cpu, (struct task_struct)->wakee_flips, (struct task_struct)->wakee_flip_decay_ts, (struct task_struct)->wake_cpu, (struct task_struct)->on_rq, (struct task_struct)->prio, (struct task_struct)->static_prio, (struct task_struct)->normal_prio, (struct task_struct)->rt_priority, (struct load_weight)->weight, (struct load_weight)->inv_weight, (struct rb_node)->__rb_parent_color, (struct sched_entity)->on_rq, (struct sched_entity)->exec_start, (struct sched_entity)->sum_exec_runtime, (struct sched_entity)->vruntime, (struct sched_entity)->prev_sum_exec_runtime, (struct sched_entity)->nr_migrations, (struct sched_statistics)->wait_start, (struct sched_statistics)->wait_max, (struct sched_statistics)->wait_count, (struct sched_statistics)->wait_sum, (struct sched_statistics)->iowait_count, (struct sched_statistics)->iowait_sum, (struct sched_statistics)->sleep_start, (struct sched_statistics)->sleep_max, (struct sched_statistics)->sum_sleep_runtime, (struct sched_statistics)->block_start, (struct sched_statistics)->block_max, (struct sched_statistics)->exec_max, (struct sched_statistics)->slice_max, (struct sched_statistics)->nr_migrations_cold, (struct sched_statistics)->nr_failed_migrations_affine, (struct sched_statistics)->nr_failed_migrations_running, (struct sched_statistics)->nr_failed_migrations_hot, (struct sched_statistics)->nr_forced_migrations, (struct sched_statistics)->nr_wakeups, (struct sched_statistics)->nr_wakeups_sync, (struct sched_statistics)->nr_wakeups_migrate, (struct sched_statistics)->nr_wakeups_local, (struct sched_statistics)->nr_wakeups_remote, (struct sched_statistics)->nr_wakeups_affine, (struct sched_statistics)->nr_wakeups_affine_attempts, (struct sched_statistics)->nr_wakeups_passive, (struct sched_statistics)->nr_wakeups_idle, (struct sched_entity)->depth, (struct sched_avg)->last_update_time, (struct sched_avg)->load_sum, (struct sched_avg)->util_sum, (struct sched_avg)->period_contrib, (struct sched_avg)->load_avg, (struct sched_avg)->util_avg, (struct sched_rt_entity)->timeout, (struct sched_rt_entity)->watchdog_stamp, (struct sched_rt_entity)->time_slice, (struct sched_rt_entity)->on_rq, (struct sched_rt_entity)->on_list, (struct sched_dl_entity)->dl_runtime, (struct sched_dl_entity)->dl_deadline, (struct sched_dl_entity)->dl_period, (struct sched_dl_entity)->dl_bw, (struct sched_dl_entity)->dl_density, (struct sched_dl_entity)->runtime, (struct sched_dl_entity)->deadline, (struct sched_dl_entity)->flags, (struct sched_dl_entity)->dl_throttled, (struct sched_dl_entity)->dl_boosted, (struct sched_dl_entity)->dl_yielded, (struct sched_dl_entity)->dl_non_contending, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct task_struct)->btrace_seq, (struct task_struct)->policy, (struct task_struct)->nr_cpus_allowed, (struct sched_info)->pcount, (struct sched_info)->run_delay, (struct sched_info)->last_arrival, (struct sched_info)->last_queued, (struct plist_node)->prio, (struct vmacache)->seqnum, (struct task_rss_stat)->events, (struct task_struct)->exit_state, (struct task_struct)->exit_code, (struct task_struct)->exit_signal, (struct task_struct)->pdeath_signal, (struct task_struct)->jobctl, (struct task_struct)->personality, (struct task_struct)->sched_reset_on_fork, (struct task_struct)->sched_contributes_to_load, (struct task_struct)->sched_migrated, (struct task_struct)->sched_remote_wakeup, (struct task_struct)->in_execve, (struct task_struct)->in_iowait, (struct task_struct)->restore_sigmask, (struct task_struct)->no_cgroup_migration, (struct task_struct)->atomic_flags, (struct restart_block)->fn, (struct task_struct)->pid, (struct task_struct)->tgid, (struct task_struct)->set_child_tid, (struct task_struct)->clear_child_tid, (struct task_struct)->utime, (struct task_struct)->stime, (struct task_struct)->gtime, (struct prev_cputime)->utime, (struct prev_cputime)->stime, (struct task_struct)->nvcsw, (struct task_struct)->nivcsw, (struct task_struct)->start_time, (struct task_struct)->real_start_time, (struct task_struct)->min_flt, (struct task_struct)->maj_flt, (struct task_cputime)->utime, (struct task_cputime)->stime, (struct task_cputime)->sum_exec_runtime, (struct task_struct)->last_switch_count, (struct task_struct)->sas_ss_sp, (struct task_struct)->sas_ss_size, (struct task_struct)->sas_ss_flags, (struct kuid_t)->val, (struct task_struct)->sessionid, (struct seccomp)->mode, (struct task_struct)->parent_exec_id, (struct task_struct)->self_exec_id, (struct task_struct)->irq_events, (struct task_struct)->hardirq_enable_ip, (struct task_struct)->hardirq_disable_ip, (struct task_struct)->hardirq_enable_event, (struct task_struct)->hardirq_disable_event, (struct task_struct)->hardirqs_enabled, (struct task_struct)->hardirq_context, (struct task_struct)->softirq_disable_ip, (struct task_struct)->softirq_enable_ip, (struct task_struct)->softirq_disable_event, (struct task_struct)->softirq_enable_event, (struct task_struct)->softirqs_enabled, (struct task_struct)->softirq_context, (struct task_struct)->curr_chain_key, (struct task_struct)->lockdep_depth, (struct task_struct)->lockdep_recursion, (struct task_struct)->lockdep_reclaim_gfp, (struct task_struct)->journal_info, (struct task_struct)->ptrace_message, (struct task_io_accounting)->rchar, (struct task_io_accounting)->wchar, (struct task_io_accounting)->syscr, (struct task_io_accounting)->syscw, (struct task_io_accounting)->read_bytes, (struct task_io_accounting)->write_bytes, (struct task_io_accounting)->cancelled_write_bytes, (struct task_struct)->acct_rss_mem1, (struct task_struct)->acct_vm_mem1, (struct task_struct)->acct_timexpd, (struct seqcount)->sequence, (struct task_struct)->cpuset_mem_spread_rotor, (struct task_struct)->cpuset_slab_spread_rotor, (struct task_struct)->il_prev, (struct task_struct)->pref_node_fork, (struct tlbflush_unmap_batch)->flush_required, (struct tlbflush_unmap_batch)->writable, (struct page_frag)->offset, (struct page_frag)->size, (struct task_struct)->nr_dirtied, (struct task_struct)->nr_dirtied_pause, (struct task_struct)->dirty_paused_when, (struct task_struct)->timer_slack_ns, (struct task_struct)->default_timer_slack_ns, (struct task_struct)->kasan_depth, (struct task_struct)->trace, (struct task_struct)->trace_recursion, (struct task_struct)->kcov_mode, (struct task_struct)->kcov_size, (struct task_struct)->kcov_area, (struct task_struct)->task_state_change, (struct task_struct)->pagefault_disabled, (struct task_struct)->security, (struct thread_struct)->sp0, (struct thread_struct)->sp, (struct thread_struct)->es, (struct thread_struct)->ds, (struct thread_struct)->fsindex, (struct thread_struct)->gsindex, (struct thread_struct)->status, (struct thread_struct)->fsbase, (struct thread_struct)->gsbase, (struct thread_struct)->debugreg6, (struct thread_struct)->ptrace_dr7, (struct thread_struct)->cr2, (struct thread_struct)->trap_nr, (struct thread_struct)->error_code, (struct thread_struct)->io_bitmap_ptr, (struct thread_struct)->iopl, (struct thread_struct)->io_bitmap_max, (struct mm_segment_t)->seg, (struct thread_struct)->sig_on_uaccess_err, (struct thread_struct)->uaccess_err, (struct fpu)->last_cpu, (struct fpu)->fpstate_active, (struct fpu)->fpregs_active, (struct fregs_state)->cwd, (struct fregs_state)->swd, (struct fregs_state)->twd, (struct fregs_state)->fip, (struct fregs_state)->fcs, (struct fregs_state)->foo, (struct fregs_state)->fos, (struct fregs_state)->status, (struct fxregs_state)->cwd, (struct fxregs_state)->swd, (struct fxregs_state)->twd, (struct fxregs_state)->fop, (struct fxregs_state)->rip, (struct fxregs_state)->rdp, (struct fxregs_state)->fip, (struct fxregs_state)->fcs, (struct fxregs_state)->foo, (struct fxregs_state)->fos, (struct fxregs_state)->mxcsr, (struct fxregs_state)->mxcsr_mask, (struct swregs_state)->cwd, (struct swregs_state)->swd, (struct swregs_state)->twd, (struct swregs_state)->fip, (struct swregs_state)->fcs, (struct swregs_state)->foo, (struct swregs_state)->fos, (struct swregs_state)->ftop, (struct swregs_state)->changed, (struct swregs_state)->lookahead, (struct swregs_state)->no_update, (struct swregs_state)->rm, (struct swregs_state)->alimit, (struct swregs_state)->entry_eip, (struct xstate_header)->xfeatures, (struct xstate_header)->xcomp_bv, ]
+SYSC_pivot_root write_list: [(struct dentry)->d_flags, (struct seqcount)->sequence, (struct lockdep_map)->name, (struct hlist_bl_node)->pprev, (struct qstr)->hash, (struct qstr)->len, (struct qstr)->hash_len, (struct qstr)->name, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockref)->count, (struct dentry)->d_time, (struct dentry)->d_fsdata, (struct hlist_node)->pprev, (struct callback_head)->func, (struct vfsmount)->mnt_flags, (struct mountpoint)->m_count, (struct mount)->mnt_devname, (struct mount)->mnt_fsnotify_mask, (struct mount)->mnt_id, (struct mount)->mnt_group_id, (struct mount)->mnt_expiry_mark, (struct fs_pin)->done, (struct fs_pin)->kill, (struct mnt_namespace)->event, ]
+C_SYSC_mount write_list: [(struct compat_ncp_mount_data)->version, (struct compat_ncp_mount_data)->ncp_fd, (struct compat_ncp_mount_data)->mounted_uid, (struct compat_ncp_mount_data)->wdog_pid, (struct compat_ncp_mount_data)->time_out, (struct compat_ncp_mount_data)->retry_count, (struct compat_ncp_mount_data)->flags, (struct compat_ncp_mount_data)->uid, (struct compat_ncp_mount_data)->gid, (struct compat_ncp_mount_data)->file_mode, (struct compat_ncp_mount_data)->dir_mode, (struct ncp_mount_data)->version, (struct ncp_mount_data)->ncp_fd, (struct ncp_mount_data)->mounted_uid, (struct ncp_mount_data)->wdog_pid, (struct ncp_mount_data)->time_out, (struct ncp_mount_data)->retry_count, (struct ncp_mount_data)->flags, (struct ncp_mount_data)->uid, (struct ncp_mount_data)->gid, (struct ncp_mount_data)->file_mode, (struct ncp_mount_data)->dir_mode, (struct compat_ncp_mount_data_v4)->version, (struct compat_ncp_mount_data_v4)->flags, (struct compat_ncp_mount_data_v4)->mounted_uid, (struct compat_ncp_mount_data_v4)->wdog_pid, (struct compat_ncp_mount_data_v4)->ncp_fd, (struct compat_ncp_mount_data_v4)->time_out, (struct compat_ncp_mount_data_v4)->retry_count, (struct compat_ncp_mount_data_v4)->uid, (struct compat_ncp_mount_data_v4)->gid, (struct compat_ncp_mount_data_v4)->file_mode, (struct compat_ncp_mount_data_v4)->dir_mode, (struct ncp_mount_data_v4)->version, (struct ncp_mount_data_v4)->flags, (struct ncp_mount_data_v4)->mounted_uid, (struct ncp_mount_data_v4)->wdog_pid, (struct ncp_mount_data_v4)->ncp_fd, (struct ncp_mount_data_v4)->time_out, (struct ncp_mount_data_v4)->retry_count, (struct ncp_mount_data_v4)->uid, (struct ncp_mount_data_v4)->gid, (struct ncp_mount_data_v4)->file_mode, (struct ncp_mount_data_v4)->dir_mode, (struct compat_nfs4_mount_data_v1)->version, (struct compat_nfs4_mount_data_v1)->flags, (struct compat_nfs4_mount_data_v1)->rsize, (struct compat_nfs4_mount_data_v1)->wsize, (struct compat_nfs4_mount_data_v1)->timeo, (struct compat_nfs4_mount_data_v1)->retrans, (struct compat_nfs4_mount_data_v1)->acregmin, (struct compat_nfs4_mount_data_v1)->acregmax, (struct compat_nfs4_mount_data_v1)->acdirmin, (struct compat_nfs4_mount_data_v1)->acdirmax, (struct compat_nfs_string)->len, (struct compat_nfs_string)->data, (struct compat_nfs4_mount_data_v1)->host_addrlen, (struct compat_nfs4_mount_data_v1)->host_addr, (struct compat_nfs4_mount_data_v1)->proto, (struct compat_nfs4_mount_data_v1)->auth_flavourlen, (struct compat_nfs4_mount_data_v1)->auth_flavours, (struct nfs4_mount_data)->version, (struct nfs4_mount_data)->flags, (struct nfs4_mount_data)->rsize, (struct nfs4_mount_data)->wsize, (struct nfs4_mount_data)->timeo, (struct nfs4_mount_data)->retrans, (struct nfs4_mount_data)->acregmin, (struct nfs4_mount_data)->acregmax, (struct nfs4_mount_data)->acdirmin, (struct nfs4_mount_data)->acdirmax, (struct nfs_string)->len, (struct nfs_string)->data, (struct nfs4_mount_data)->host_addrlen, (struct nfs4_mount_data)->proto, (struct nfs4_mount_data)->auth_flavourlen, (struct nfs4_mount_data)->auth_flavours, (struct sockaddr)->sa_family, ]
+SYSC_lseek write_list: [(struct fd)->flags, ]
+SYSC_llseek write_list: [(struct fd)->flags, ]
+SYSC_read write_list: [(struct fd)->flags, (struct file)->f_pos, ]
+SYSC_write write_list: [(struct fd)->flags, (struct file)->f_pos, ]
+SYSC_pread64 write_list: [(struct fd)->flags, ]
+SYSC_pwrite64 write_list: [(struct fd)->flags, ]
+SYSC_readv write_list: [(struct fd)->flags, ]
+SYSC_writev write_list: [(struct fd)->flags, ]
+SYSC_preadv write_list: [(struct fd)->flags, ]
+SYSC_preadv2 write_list: [(struct fd)->flags, ]
+SYSC_pwritev write_list: [(struct fd)->flags, ]
+SYSC_pwritev2 write_list: [(struct fd)->flags, ]
+C_SYSC_readv write_list: [(struct fd)->flags, (struct file)->f_pos, ]
+C_SYSC_preadv64 write_list: [(struct fd)->flags, ]
+C_SYSC_preadv write_list: [(struct fd)->flags, ]
+C_SYSC_preadv64v2 write_list: [(struct fd)->flags, ]
+C_SYSC_preadv2 write_list: [(struct fd)->flags, (struct file)->f_pos, ]
+C_SYSC_writev write_list: [(struct fd)->flags, (struct file)->f_pos, ]
+C_SYSC_pwritev64 write_list: [(struct fd)->flags, ]
+C_SYSC_pwritev write_list: [(struct fd)->flags, ]
+C_SYSC_pwritev64v2 write_list: [(struct fd)->flags, ]
+C_SYSC_pwritev2 write_list: [(struct fd)->flags, (struct file)->f_pos, ]
+SYSC_sendfile write_list: [(struct fd)->flags, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (struct file)->f_pos, ]
+SYSC_sendfile64 write_list: [(struct fd)->flags, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (struct file)->f_pos, ]
+C_SYSC_sendfile write_list: [(struct fd)->flags, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (struct file)->f_pos, ]
+C_SYSC_sendfile64 write_list: [(struct fd)->flags, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (struct file)->f_pos, ]
+SYSC_copy_file_range write_list: [(struct fd)->flags, (struct file)->f_pos, ]
+SYSC_timerfd_create write_list: [(struct rb_node)->__rb_parent_color, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct alarm)->function, (struct alarm)->type, (struct alarm)->state, (struct alarm)->data, (struct timerfd_ctx)->tintv, (struct timerfd_ctx)->moffs, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct timerfd_ctx)->ticks, (struct timerfd_ctx)->clockid, (struct timerfd_ctx)->expired, (struct timerfd_ctx)->settime_flags, (struct callback_head)->func, (struct timerfd_ctx)->might_cancel, ]
+SYSC_timerfd_settime write_list: [(struct rb_node)->__rb_parent_color, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct alarm)->function, (struct alarm)->type, (struct alarm)->state, (struct alarm)->data, (struct timerfd_ctx)->tintv, (struct timerfd_ctx)->moffs, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct timerfd_ctx)->ticks, (struct timerfd_ctx)->clockid, (struct timerfd_ctx)->expired, (struct timerfd_ctx)->settime_flags, (struct callback_head)->func, (struct timerfd_ctx)->might_cancel, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+SYSC_timerfd_gettime write_list: [(struct rb_node)->__rb_parent_color, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct alarm)->function, (struct alarm)->type, (struct alarm)->state, (struct alarm)->data, (struct timerfd_ctx)->tintv, (struct timerfd_ctx)->moffs, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct timerfd_ctx)->ticks, (struct timerfd_ctx)->clockid, (struct timerfd_ctx)->expired, (struct timerfd_ctx)->settime_flags, (struct callback_head)->func, (struct timerfd_ctx)->might_cancel, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+C_SYSC_timerfd_settime write_list: [(struct rb_node)->__rb_parent_color, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct alarm)->function, (struct alarm)->type, (struct alarm)->state, (struct alarm)->data, (struct timerfd_ctx)->tintv, (struct timerfd_ctx)->moffs, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct timerfd_ctx)->ticks, (struct timerfd_ctx)->clockid, (struct timerfd_ctx)->expired, (struct timerfd_ctx)->settime_flags, (struct callback_head)->func, (struct timerfd_ctx)->might_cancel, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+C_SYSC_timerfd_gettime write_list: [(struct rb_node)->__rb_parent_color, (struct timerqueue_node)->expires, (struct hrtimer)->_softexpires, (struct hrtimer)->function, (struct hrtimer)->state, (struct hrtimer)->is_rel, (struct alarm)->function, (struct alarm)->type, (struct alarm)->state, (struct alarm)->data, (struct timerfd_ctx)->tintv, (struct timerfd_ctx)->moffs, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct timerfd_ctx)->ticks, (struct timerfd_ctx)->clockid, (struct timerfd_ctx)->expired, (struct timerfd_ctx)->settime_flags, (struct callback_head)->func, (struct timerfd_ctx)->might_cancel, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+SYSC_eventfd2 write_list: [(struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct eventfd_ctx)->count, (struct eventfd_ctx)->flags, (struct callback_head)->func, (struct file)->f_write_hint, (struct atomic64_t)->counter, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+SYSC_select write_list: [(struct timeval)->tv_sec, (struct timeval)->tv_usec, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct fdtable)->max_fds, (struct fdtable)->fd, (struct fdtable)->close_on_exec, (struct fdtable)->open_fds, (struct fdtable)->full_fds_bits, (struct callback_head)->func, (struct fd_set_bits)->in, (struct fd_set_bits)->out, (struct fd_set_bits)->ex, (struct fd_set_bits)->res_in, (struct fd_set_bits)->res_out, (struct fd_set_bits)->res_ex, ]
+SYSC_pselect6 write_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+SYSC_poll write_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct poll_list)->len, (struct pollfd)->fd, (struct pollfd)->events, (struct pollfd)->revents, (struct restart_block)->fn, ]
+SYSC_ppoll write_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct poll_list)->len, (struct pollfd)->fd, (struct pollfd)->events, (struct pollfd)->revents, (struct task_struct)->restore_sigmask, (struct timeval)->tv_sec, (struct timeval)->tv_usec, ]
+C_SYSC_select write_list: [(struct compat_timeval)->tv_sec, (struct compat_timeval)->tv_usec, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct fdtable)->max_fds, (struct fdtable)->fd, (struct fdtable)->close_on_exec, (struct fdtable)->open_fds, (struct fdtable)->full_fds_bits, (struct callback_head)->func, (struct fd_set_bits)->in, (struct fd_set_bits)->out, (struct fd_set_bits)->ex, (struct fd_set_bits)->res_in, (struct fd_set_bits)->res_out, (struct fd_set_bits)->res_ex, (struct compat_timespec)->tv_sec, (struct compat_timespec)->tv_nsec, ]
+C_SYSC_old_select write_list: [(struct compat_sel_arg_struct)->n, (struct compat_sel_arg_struct)->inp, (struct compat_sel_arg_struct)->outp, (struct compat_sel_arg_struct)->exp, (struct compat_sel_arg_struct)->tvp, ]
+C_SYSC_pselect6 write_list: [(struct compat_timespec)->tv_sec, (struct compat_timespec)->tv_nsec, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+C_SYSC_ppoll write_list: [(struct compat_timespec)->tv_sec, (struct compat_timespec)->tv_nsec, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct poll_list)->len, (struct pollfd)->fd, (struct pollfd)->events, (struct pollfd)->revents, (struct task_struct)->restore_sigmask, (struct compat_timeval)->tv_sec, (struct compat_timeval)->tv_usec, ]
+SYSC_syncfs write_list: [(struct fd)->flags, (struct super_block)->s_dev, (struct super_block)->s_blocksize_bits, (struct super_block)->s_blocksize, (struct super_block)->s_maxbytes, (struct super_block)->s_flags, (struct super_block)->s_iflags, (struct super_block)->s_magic, (struct atomic64_t)->counter, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct super_block)->s_count, (struct super_block)->s_security, (struct super_block)->s_xattr, (struct hlist_node)->pprev, (struct super_block)->s_quota_types, (struct quota_info)->flags, (struct mutex)->magic, (struct sb_writers)->frozen, (struct super_block)->s_fs_info, (struct super_block)->s_max_links, (struct super_block)->s_mode, (struct super_block)->s_time_gran, (struct super_block)->s_subtype, (struct super_block)->cleancache_poolid, (struct shrinker)->count_objects, (struct shrinker)->scan_objects, (struct shrinker)->seeks, (struct shrinker)->batch, (struct shrinker)->flags, (struct super_block)->s_readonly_remount, (struct callback_head)->func, (struct work_struct)->func, (struct super_block)->s_stack_depth, ]
+SYSC_fsync write_list: [(struct fd)->flags, ]
+SYSC_fdatasync write_list: [(struct fd)->flags, ]
+SYSC_sync_file_range write_list: [(struct fd)->flags, (struct radix_tree_root)->gfp_mask, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct atomic64_t)->counter, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, ]
+SYSC_ftruncate write_list: [(struct fd)->flags, (struct dentry)->d_flags, (struct seqcount)->sequence, (struct lockdep_map)->name, (struct hlist_bl_node)->pprev, (struct qstr)->hash, (struct qstr)->len, (struct qstr)->hash_len, (struct qstr)->name, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockref)->count, (struct dentry)->d_time, (struct dentry)->d_fsdata, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, ]
+C_SYSC_ftruncate write_list: [(struct fd)->flags, (struct dentry)->d_flags, (struct seqcount)->sequence, (struct lockdep_map)->name, (struct hlist_bl_node)->pprev, (struct qstr)->hash, (struct qstr)->len, (struct qstr)->hash_len, (struct qstr)->name, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockref)->count, (struct dentry)->d_time, (struct dentry)->d_fsdata, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, ]
+SYSC_fallocate write_list: [(struct fd)->flags, ]
+SYSC_faccessat write_list: [(struct atomic_t)->counter, (struct kuid_t)->val, (struct kgid_t)->val, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, (struct callback_head)->func, (struct inode)->i_mode, (struct inode)->i_opflags, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, ]
+SYSC_fchdir write_list: [(struct fd)->flags, ]
+SYSC_fchmod write_list: [(struct fd)->flags, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (struct iattr)->ia_mode, (struct iattr)->ia_valid, ]
+SYSC_fchmodat write_list: [(struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (struct iattr)->ia_mode, (struct iattr)->ia_valid, ]
+SYSC_fchownat write_list: [(struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (struct iattr)->ia_valid, ]
+SYSC_fchown write_list: [(struct fd)->flags, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (struct iattr)->ia_valid, ]
+SYSC_open write_list: [(struct filename)->name, (struct filename)->uptr, (struct filename)->refcnt, (struct callback_head)->func, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct file)->f_write_hint, (struct atomic64_t)->counter, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+SYSC_openat write_list: [(struct filename)->name, (struct filename)->uptr, (struct filename)->refcnt, (struct callback_head)->func, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct file)->f_write_hint, (struct atomic64_t)->counter, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+C_SYSC_open write_list: [(struct filename)->name, (struct filename)->uptr, (struct filename)->refcnt, (struct callback_head)->func, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct file)->f_write_hint, (struct atomic64_t)->counter, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+C_SYSC_openat write_list: [(struct filename)->name, (struct filename)->uptr, (struct filename)->refcnt, (struct callback_head)->func, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct file)->f_write_hint, (struct atomic64_t)->counter, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+SYSC_utime write_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+SYSC_utimensat write_list: [(struct fd)->flags, ]
+SYSC_futimesat write_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct fd)->flags, ]
+C_SYSC_utime write_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct fd)->flags, ]
+C_SYSC_utimensat write_list: [(struct fd)->flags, ]
+C_SYSC_futimesat write_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct timespec)->tv_nsec, (struct fd)->flags, ]
+SYSC_flock write_list: [(struct fd)->flags, (struct hlist_node)->pprev, (struct file_lock)->fl_owner, (struct file_lock)->fl_flags, (struct file_lock)->fl_type, (struct file_lock)->fl_pid, (struct file_lock)->fl_link_cpu, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct file_lock)->fl_start, (struct file_lock)->fl_end, (struct file_lock)->fl_break_time, (struct file_lock)->fl_downgrade_time, (struct nfs_lock_info)->state, (struct callback_head)->func, (struct file)->f_write_hint, (struct atomic64_t)->counter, (struct file)->f_flags, (struct file)->f_mode, (struct mutex)->magic, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+SYSC_epoll_create1 write_list: [(struct atomic_t)->counter, (struct kuid_t)->val, (struct kgid_t)->val, (struct cred)->securebits, (struct cred)->jit_keyring, (struct cred)->security, (struct callback_head)->func, (struct atomic64_t)->counter, (struct user_struct)->mq_bytes, (struct user_struct)->locked_shm, (struct user_struct)->unix_inflight, (struct hlist_node)->pprev, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct mutex)->magic, (struct eventpoll)->visited, (struct eventpoll)->napi_id, (struct rb_node)->__rb_parent_color, (struct epoll_filefd)->fd, (struct epitem)->nwait, (struct epoll_event)->events, (struct epoll_event)->data, (struct file)->f_write_hint, (struct file)->f_flags, (struct file)->f_mode, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, ]
+SYSC_epoll_ctl write_list: [(struct epoll_event)->events, (struct epoll_event)->data, (struct fd)->flags, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct atomic64_t)->counter, (struct mutex)->magic, (struct eventpoll)->visited, (struct eventpoll)->napi_id, (struct callback_head)->func, (struct file)->f_write_hint, (struct file)->f_flags, (struct file)->f_mode, (struct file)->f_pos, (struct rwlock_t)->magic, (struct rwlock_t)->owner_cpu, (struct rwlock_t)->owner, (struct fown_struct)->pid_type, (struct kuid_t)->val, (struct fown_struct)->signum, (struct file_ra_state)->start, (struct file_ra_state)->size, (struct file_ra_state)->async_size, (struct file_ra_state)->ra_pages, (struct file_ra_state)->mmap_miss, (struct file_ra_state)->prev_pos, (struct file)->f_version, (struct file)->f_security, (struct file)->private_data, (struct file)->f_wb_err, (struct rb_node)->__rb_parent_color, (struct epoll_filefd)->fd, (struct epitem)->nwait, ]
+SYSC_epoll_wait write_list: [(struct fd)->flags, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct atomic64_t)->counter, (struct mutex)->magic, (struct eventpoll)->visited, (struct eventpoll)->napi_id, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct task_struct)->task_state_change, (struct task_struct)->state, ]
+SYSC_epoll_pwait write_list: [(struct task_struct)->restore_sigmask, ]
+C_SYSC_epoll_pwait write_list: [(struct task_struct)->restore_sigmask, ]
+SYSC_statfs write_list: [(struct kstatfs)->f_type, (struct kstatfs)->f_bsize, (struct kstatfs)->f_blocks, (struct kstatfs)->f_bfree, (struct kstatfs)->f_bavail, (struct kstatfs)->f_files, (struct kstatfs)->f_ffree, (struct kstatfs)->f_namelen, (struct kstatfs)->f_frsize, (struct kstatfs)->f_flags, (struct statfs)->f_type, (struct statfs)->f_bsize, (struct statfs)->f_blocks, (struct statfs)->f_bfree, (struct statfs)->f_bavail, (struct statfs)->f_files, (struct statfs)->f_ffree, (struct statfs)->f_namelen, (struct statfs)->f_frsize, (struct statfs)->f_flags, ]
+SYSC_statfs64 write_list: [(struct kstatfs)->f_type, (struct kstatfs)->f_bsize, (struct kstatfs)->f_blocks, (struct kstatfs)->f_bfree, (struct kstatfs)->f_bavail, (struct kstatfs)->f_files, (struct kstatfs)->f_ffree, (struct kstatfs)->f_namelen, (struct kstatfs)->f_frsize, (struct kstatfs)->f_flags, (struct statfs64)->f_type, (struct statfs64)->f_bsize, (struct statfs64)->f_blocks, (struct statfs64)->f_bfree, (struct statfs64)->f_bavail, (struct statfs64)->f_files, (struct statfs64)->f_ffree, (struct statfs64)->f_namelen, (struct statfs64)->f_frsize, (struct statfs64)->f_flags, ]
+SYSC_fstatfs write_list: [(struct fd)->flags, (struct kstatfs)->f_type, (struct kstatfs)->f_bsize, (struct kstatfs)->f_blocks, (struct kstatfs)->f_bfree, (struct kstatfs)->f_bavail, (struct kstatfs)->f_files, (struct kstatfs)->f_ffree, (struct kstatfs)->f_namelen, (struct kstatfs)->f_frsize, (struct kstatfs)->f_flags, (struct statfs)->f_type, (struct statfs)->f_bsize, (struct statfs)->f_blocks, (struct statfs)->f_bfree, (struct statfs)->f_bavail, (struct statfs)->f_files, (struct statfs)->f_ffree, (struct statfs)->f_namelen, (struct statfs)->f_frsize, (struct statfs)->f_flags, ]
+SYSC_fstatfs64 write_list: [(struct fd)->flags, (struct kstatfs)->f_type, (struct kstatfs)->f_bsize, (struct kstatfs)->f_blocks, (struct kstatfs)->f_bfree, (struct kstatfs)->f_bavail, (struct kstatfs)->f_files, (struct kstatfs)->f_ffree, (struct kstatfs)->f_namelen, (struct kstatfs)->f_frsize, (struct kstatfs)->f_flags, (struct statfs64)->f_type, (struct statfs64)->f_bsize, (struct statfs64)->f_blocks, (struct statfs64)->f_bfree, (struct statfs64)->f_bavail, (struct statfs64)->f_files, (struct statfs64)->f_ffree, (struct statfs64)->f_namelen, (struct statfs64)->f_frsize, (struct statfs64)->f_flags, ]
+SYSC_ustat write_list: [(struct super_block)->s_dev, (struct super_block)->s_blocksize_bits, (struct super_block)->s_blocksize, (struct super_block)->s_maxbytes, (struct super_block)->s_flags, (struct super_block)->s_iflags, (struct super_block)->s_magic, (struct atomic64_t)->counter, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct super_block)->s_count, (struct super_block)->s_security, (struct super_block)->s_xattr, (struct hlist_node)->pprev, (struct super_block)->s_quota_types, (struct quota_info)->flags, (struct mutex)->magic, (struct sb_writers)->frozen, (struct super_block)->s_fs_info, (struct super_block)->s_max_links, (struct super_block)->s_mode, (struct super_block)->s_time_gran, (struct super_block)->s_subtype, (struct super_block)->cleancache_poolid, (struct shrinker)->count_objects, (struct shrinker)->scan_objects, (struct shrinker)->seeks, (struct shrinker)->batch, (struct shrinker)->flags, (struct super_block)->s_readonly_remount, (struct callback_head)->func, (struct work_struct)->func, (struct super_block)->s_stack_depth, (struct kstatfs)->f_type, (struct kstatfs)->f_bsize, (struct kstatfs)->f_blocks, (struct kstatfs)->f_bfree, (struct kstatfs)->f_bavail, (struct kstatfs)->f_files, (struct kstatfs)->f_ffree, (struct kstatfs)->f_namelen, (struct kstatfs)->f_frsize, (struct kstatfs)->f_flags, (struct ustat)->f_tfree, (struct ustat)->f_tinode, ]
+C_SYSC_statfs write_list: [(struct kstatfs)->f_type, (struct kstatfs)->f_bsize, (struct kstatfs)->f_blocks, (struct kstatfs)->f_bfree, (struct kstatfs)->f_bavail, (struct kstatfs)->f_files, (struct kstatfs)->f_ffree, (struct kstatfs)->f_namelen, (struct kstatfs)->f_frsize, (struct kstatfs)->f_flags, (struct compat_statfs)->f_type, (struct compat_statfs)->f_bsize, (struct compat_statfs)->f_blocks, (struct compat_statfs)->f_bfree, (struct compat_statfs)->f_bavail, (struct compat_statfs)->f_files, (struct compat_statfs)->f_ffree, (struct compat_statfs)->f_namelen, (struct compat_statfs)->f_frsize, (struct compat_statfs)->f_flags, ]
+C_SYSC_fstatfs write_list: [(struct fd)->flags, (struct kstatfs)->f_type, (struct kstatfs)->f_bsize, (struct kstatfs)->f_blocks, (struct kstatfs)->f_bfree, (struct kstatfs)->f_bavail, (struct kstatfs)->f_files, (struct kstatfs)->f_ffree, (struct kstatfs)->f_namelen, (struct kstatfs)->f_frsize, (struct kstatfs)->f_flags, (struct compat_statfs)->f_type, (struct compat_statfs)->f_bsize, (struct compat_statfs)->f_blocks, (struct compat_statfs)->f_bfree, (struct compat_statfs)->f_bavail, (struct compat_statfs)->f_files, (struct compat_statfs)->f_ffree, (struct compat_statfs)->f_namelen, (struct compat_statfs)->f_frsize, (struct compat_statfs)->f_flags, ]
+C_SYSC_statfs64 write_list: [(struct kstatfs)->f_type, (struct kstatfs)->f_bsize, (struct kstatfs)->f_blocks, (struct kstatfs)->f_bfree, (struct kstatfs)->f_bavail, (struct kstatfs)->f_files, (struct kstatfs)->f_ffree, (struct kstatfs)->f_namelen, (struct kstatfs)->f_frsize, (struct kstatfs)->f_flags, (struct compat_statfs64)->f_type, (struct compat_statfs64)->f_bsize, (struct compat_statfs64)->f_blocks, (struct compat_statfs64)->f_bfree, (struct compat_statfs64)->f_bavail, (struct compat_statfs64)->f_files, (struct compat_statfs64)->f_ffree, (struct compat_statfs64)->f_namelen, (struct compat_statfs64)->f_frsize, (struct compat_statfs64)->f_flags, ]
+C_SYSC_fstatfs64 write_list: [(struct fd)->flags, (struct kstatfs)->f_type, (struct kstatfs)->f_bsize, (struct kstatfs)->f_blocks, (struct kstatfs)->f_bfree, (struct kstatfs)->f_bavail, (struct kstatfs)->f_files, (struct kstatfs)->f_ffree, (struct kstatfs)->f_namelen, (struct kstatfs)->f_frsize, (struct kstatfs)->f_flags, (struct compat_statfs64)->f_type, (struct compat_statfs64)->f_bsize, (struct compat_statfs64)->f_blocks, (struct compat_statfs64)->f_bfree, (struct compat_statfs64)->f_bavail, (struct compat_statfs64)->f_files, (struct compat_statfs64)->f_ffree, (struct compat_statfs64)->f_namelen, (struct compat_statfs64)->f_frsize, (struct compat_statfs64)->f_flags, ]
+C_SYSC_ustat write_list: [(struct super_block)->s_dev, (struct super_block)->s_blocksize_bits, (struct super_block)->s_blocksize, (struct super_block)->s_maxbytes, (struct super_block)->s_flags, (struct super_block)->s_iflags, (struct super_block)->s_magic, (struct atomic64_t)->counter, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct super_block)->s_count, (struct super_block)->s_security, (struct super_block)->s_xattr, (struct hlist_node)->pprev, (struct super_block)->s_quota_types, (struct quota_info)->flags, (struct mutex)->magic, (struct sb_writers)->frozen, (struct super_block)->s_fs_info, (struct super_block)->s_max_links, (struct super_block)->s_mode, (struct super_block)->s_time_gran, (struct super_block)->s_subtype, (struct super_block)->cleancache_poolid, (struct shrinker)->count_objects, (struct shrinker)->scan_objects, (struct shrinker)->seeks, (struct shrinker)->batch, (struct shrinker)->flags, (struct super_block)->s_readonly_remount, (struct callback_head)->func, (struct work_struct)->func, (struct super_block)->s_stack_depth, (struct kstatfs)->f_type, (struct kstatfs)->f_bsize, (struct kstatfs)->f_blocks, (struct kstatfs)->f_bfree, (struct kstatfs)->f_bavail, (struct kstatfs)->f_files, (struct kstatfs)->f_ffree, (struct kstatfs)->f_namelen, (struct kstatfs)->f_frsize, (struct kstatfs)->f_flags, (struct compat_ustat)->f_tfree, (struct compat_ustat)->f_tinode, ]
+SYSC_fcntl write_list: [(struct fd)->flags, (struct flock)->l_type, (struct flock)->l_whence, (struct flock)->l_start, (struct flock)->l_len, (struct flock)->l_pid, (struct fown_struct)->signum, ]
+C_SYSC_fcntl64 write_list: [(struct fd)->flags, (struct compat_flock)->l_type, (struct compat_flock)->l_whence, (struct compat_flock)->l_start, (struct compat_flock)->l_len, (struct compat_flock)->l_pid, (struct flock)->l_type, (struct flock)->l_whence, (struct flock)->l_start, (struct flock)->l_len, (struct flock)->l_pid, (struct compat_flock64)->l_type, (struct compat_flock64)->l_whence, (struct compat_flock64)->l_start, (struct compat_flock64)->l_len, (struct compat_flock64)->l_pid, (struct fown_struct)->signum, ]
+SYSC_mknodat write_list: [(struct dentry)->d_flags, (struct seqcount)->sequence, (struct lockdep_map)->name, (struct hlist_bl_node)->pprev, (struct qstr)->hash, (struct qstr)->len, (struct qstr)->hash_len, (struct qstr)->name, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockref)->count, (struct dentry)->d_time, (struct dentry)->d_fsdata, (struct hlist_node)->pprev, (struct callback_head)->func, ]
+SYSC_mkdirat write_list: [(struct dentry)->d_flags, (struct seqcount)->sequence, (struct lockdep_map)->name, (struct hlist_bl_node)->pprev, (struct qstr)->hash, (struct qstr)->len, (struct qstr)->hash_len, (struct qstr)->name, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockref)->count, (struct dentry)->d_time, (struct dentry)->d_fsdata, (struct hlist_node)->pprev, (struct callback_head)->func, ]
+SYSC_rmdir write_list: [(struct filename)->name, (struct filename)->uptr, (struct filename)->refcnt, (struct dentry)->d_flags, (struct seqcount)->sequence, (struct lockdep_map)->name, (struct hlist_bl_node)->pprev, (struct qstr)->hash, (struct qstr)->len, (struct qstr)->hash_len, (struct qstr)->name, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockref)->count, (struct dentry)->d_time, (struct dentry)->d_fsdata, (struct hlist_node)->pprev, (struct callback_head)->func, ]
+SYSC_unlinkat write_list: [(struct filename)->name, (struct filename)->uptr, (struct filename)->refcnt, (struct dentry)->d_flags, (struct seqcount)->sequence, (struct lockdep_map)->name, (struct hlist_bl_node)->pprev, (struct qstr)->hash, (struct qstr)->len, (struct qstr)->hash_len, (struct qstr)->name, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockref)->count, (struct dentry)->d_time, (struct dentry)->d_fsdata, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, ]
+SYSC_unlink write_list: [(struct filename)->name, (struct filename)->uptr, (struct filename)->refcnt, (struct dentry)->d_flags, (struct seqcount)->sequence, (struct lockdep_map)->name, (struct hlist_bl_node)->pprev, (struct qstr)->hash, (struct qstr)->len, (struct qstr)->hash_len, (struct qstr)->name, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockref)->count, (struct dentry)->d_time, (struct dentry)->d_fsdata, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, ]
+SYSC_symlinkat write_list: [(struct filename)->name, (struct filename)->uptr, (struct filename)->refcnt, (struct dentry)->d_flags, (struct seqcount)->sequence, (struct lockdep_map)->name, (struct hlist_bl_node)->pprev, (struct qstr)->hash, (struct qstr)->len, (struct qstr)->hash_len, (struct qstr)->name, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockref)->count, (struct dentry)->d_time, (struct dentry)->d_fsdata, (struct hlist_node)->pprev, (struct callback_head)->func, ]
+SYSC_linkat write_list: [(struct dentry)->d_flags, (struct seqcount)->sequence, (struct lockdep_map)->name, (struct hlist_bl_node)->pprev, (struct qstr)->hash, (struct qstr)->len, (struct qstr)->hash_len, (struct qstr)->name, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockref)->count, (struct dentry)->d_time, (struct dentry)->d_fsdata, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, ]
+SYSC_renameat2 write_list: [(struct qstr)->hash, (struct qstr)->len, (struct qstr)->hash_len, (struct qstr)->name, (struct filename)->name, (struct filename)->uptr, (struct filename)->refcnt, (struct dentry)->d_flags, (struct seqcount)->sequence, (struct lockdep_map)->name, (struct hlist_bl_node)->pprev, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockref)->count, (struct dentry)->d_time, (struct dentry)->d_fsdata, (struct hlist_node)->pprev, (struct callback_head)->func, ]
+C_SYSC_ioctl write_list: [(struct fd)->flags, (struct space_resv)->l_type, (struct space_resv)->l_whence, (struct space_resv)->l_start, (struct space_resv)->l_len, (struct space_resv)->l_sysid, (struct space_resv)->l_pid, ]
+SYSC_inotify_init1 write_list: [(struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct fsnotify_group)->q_len, (struct fsnotify_group)->max_events, (struct fsnotify_group)->priority, (struct fsnotify_group)->shutdown, (struct atomic64_t)->counter, (struct mutex)->magic, (struct fsnotify_group)->private, (struct radix_tree_root)->gfp_mask, (struct idr)->idr_next, (struct fsnotify_event)->mask, (struct inotify_event_info)->wd, (struct inotify_event_info)->sync_cookie, (struct inotify_event_info)->name_len, (struct hlist_node)->pprev, (struct kuid_t)->val, (struct ucounts)->count, ]
+SYSC_inotify_add_watch write_list: [(struct fd)->flags, (struct inode)->i_mode, (struct inode)->i_opflags, (struct kuid_t)->val, (struct kgid_t)->val, (struct inode)->i_flags, (struct inode)->i_security, (struct inode)->i_ino, (struct inode)->i_nlink, (struct inode)->__i_nlink, (struct inode)->i_rdev, (struct inode)->i_size, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct inode)->i_bytes, (struct inode)->i_blkbits, (struct inode)->i_write_hint, (struct inode)->i_blocks, (struct inode)->i_state, (struct atomic64_t)->counter, (struct inode)->dirtied_when, (struct inode)->dirtied_time_when, (struct hlist_node)->pprev, (struct callback_head)->func, (struct inode)->i_version, (struct radix_tree_root)->gfp_mask, (struct address_space)->nrpages, (struct address_space)->nrexceptional, (struct address_space)->writeback_index, (struct address_space)->flags, (struct address_space)->gfp_mask, (struct address_space)->private_data, (struct address_space)->wb_err, (struct inode)->i_link, (struct inode)->i_dir_seq, (struct inode)->i_generation, (struct inode)->i_fsnotify_mask, (struct inode)->i_private, (struct fsnotify_group)->q_len, (struct fsnotify_group)->max_events, (struct fsnotify_group)->priority, (struct fsnotify_group)->shutdown, (struct mutex)->magic, (struct fsnotify_group)->private, (struct idr)->idr_next, ]
+SYSC_inotify_rm_watch write_list: [(struct fd)->flags, (struct atomic_t)->counter, (struct raw_spinlock)->magic, (struct raw_spinlock)->owner_cpu, (struct raw_spinlock)->owner, (struct lockdep_map)->name, (struct fsnotify_group)->q_len, (struct fsnotify_group)->max_events, (struct fsnotify_group)->priority, (struct fsnotify_group)->shutdown, (struct atomic64_t)->counter, (struct mutex)->magic, (struct fsnotify_group)->private, (struct radix_tree_root)->gfp_mask, (struct idr)->idr_next, (struct fsnotify_mark)->mask, (struct hlist_node)->pprev, (struct fsnotify_mark)->ignored_mask, (struct fsnotify_mark)->flags, (struct inotify_inode_mark)->wd, ]
+sys_dmi_modalias_show write_list: [(struct mafield)->prefix, (struct mafield)->field, ]
+sys_get_curr_temp write_list: [(struct pkg_device)->cpu, (struct pkg_device)->work_scheduled, (struct pkg_device)->tj_max, (struct pkg_device)->msr_pkg_therm_low, (struct pkg_device)->msr_pkg_therm_high, (struct atomic64_t)->counter, (struct work_struct)->func, (struct lockdep_map)->name, (struct hlist_node)->pprev, (struct timer_list)->expires, (struct timer_list)->function, (struct timer_list)->data, (struct timer_list)->flags, (struct delayed_work)->cpu, ]
+sys_get_trip_temp write_list: [(struct pkg_device)->cpu, (struct pkg_device)->work_scheduled, (struct pkg_device)->tj_max, (struct pkg_device)->msr_pkg_therm_low, (struct pkg_device)->msr_pkg_therm_high, (struct atomic64_t)->counter, (struct work_struct)->func, (struct lockdep_map)->name, (struct hlist_node)->pprev, (struct timer_list)->expires, (struct timer_list)->function, (struct timer_list)->data, (struct timer_list)->flags, (struct delayed_work)->cpu, ]
+sys_set_trip_temp write_list: [(struct pkg_device)->cpu, (struct pkg_device)->work_scheduled, (struct pkg_device)->tj_max, (struct pkg_device)->msr_pkg_therm_low, (struct pkg_device)->msr_pkg_therm_high, (struct atomic64_t)->counter, (struct work_struct)->func, (struct lockdep_map)->name, (struct hlist_node)->pprev, (struct timer_list)->expires, (struct timer_list)->function, (struct timer_list)->data, (struct timer_list)->flags, (struct delayed_work)->cpu, ]
--- /dev/null	Fri Dec 21 15:00:22 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.implicit_dependencies.v1	Fri Dec 21 15:00:22 2018
@@ -0,0 +1,965 @@
+// list of syscalls and the fields they write/read to.
+// generated by `gen_implicit_dependencies.sh`
+SyS_ioprio_set read_list: []
+SyS_ioprio_get read_list: []
+SYSC_ioprio_get read_list: [(struct task_struct)->io_context, (struct task_struct)->cred, (struct task_struct)->cred, (struct task_struct)->real_cred, (struct task_struct)->real_cred, ]
+SYSC_ioprio_set read_list: [(struct task_struct)->cred, (struct task_struct)->cred, (struct task_struct)->real_cred, (struct task_struct)->real_cred, ]
+compat_SyS_setsockopt read_list: []
+compat_SyS_getsockopt read_list: []
+compat_SyS_sendmsg read_list: []
+compat_SyS_sendmmsg read_list: []
+compat_SyS_recvmsg read_list: []
+compat_SyS_recv read_list: []
+compat_SyS_recvfrom read_list: []
+compat_SyS_recvmmsg read_list: []
+compat_SyS_socketcall read_list: []
+C_SYSC_socketcall read_list: []
+C_SYSC_recvmmsg read_list: []
+C_SYSC_recvfrom read_list: []
+C_SYSC_recv read_list: []
+C_SYSC_recvmsg read_list: []
+C_SYSC_sendmmsg read_list: []
+C_SYSC_sendmsg read_list: []
+C_SYSC_getsockopt read_list: [(struct proto_ops)->compat_getsockopt, ]
+C_SYSC_setsockopt read_list: [(struct proto_ops)->compat_setsockopt, ]
+SyS_socket read_list: []
+SyS_socketpair read_list: []
+SyS_bind read_list: []
+SyS_listen read_list: []
+SyS_accept4 read_list: []
+SyS_accept read_list: []
+SyS_connect read_list: []
+SyS_getsockname read_list: []
+SyS_getpeername read_list: []
+SyS_sendto read_list: []
+SyS_send read_list: []
+SyS_recvfrom read_list: []
+SyS_recv read_list: []
+SyS_setsockopt read_list: []
+SyS_getsockopt read_list: []
+SyS_shutdown read_list: []
+SyS_sendmsg read_list: []
+SyS_sendmmsg read_list: []
+SyS_recvmsg read_list: []
+SyS_recvmmsg read_list: []
+SyS_socketcall read_list: []
+SYSC_socketcall read_list: []
+SYSC_recvmmsg read_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct msghdr)->msg_flags, ]
+SYSC_recvmsg read_list: []
+SYSC_sendmmsg read_list: []
+SYSC_sendmsg read_list: []
+SYSC_shutdown read_list: [(struct fd)->file, ]
+SYSC_getsockopt read_list: [(struct fd)->file, ]
+SYSC_setsockopt read_list: [(struct fd)->file, ]
+SYSC_recv read_list: []
+SYSC_recvfrom read_list: [(struct fd)->file, (struct file)->f_flags, ]
+SYSC_send read_list: []
+SYSC_sendto read_list: [(struct fd)->file, (struct file)->f_flags, ]
+SYSC_getpeername read_list: [(struct fd)->file, ]
+SYSC_getsockname read_list: [(struct fd)->file, ]
+SYSC_connect read_list: [(struct fd)->file, ]
+SYSC_accept read_list: []
+SYSC_accept4 read_list: [(struct fd)->file, ]
+SYSC_listen read_list: [(struct fd)->file, ]
+SYSC_bind read_list: [(struct fd)->file, ]
+SYSC_socketpair read_list: []
+SYSC_socket read_list: []
+SyS_bpf read_list: []
+SYSC_bpf read_list: [(struct bpf_map)->map_type, (union bpf_attr)->prog_flags, (union bpf_attr)->insn_cnt, (union bpf_attr)->kern_version, (union bpf_attr)->bpf_fd, (struct bpf_verifier_ops)->test_run, (struct fd)->file, (struct file)->f_op, ]
+sys_restart_syscall read_list: []
+SyS_rt_sigprocmask read_list: []
+compat_SyS_rt_sigprocmask read_list: []
+SyS_rt_sigpending read_list: []
+compat_SyS_rt_sigpending read_list: []
+SyS_rt_sigtimedwait read_list: []
+compat_SyS_rt_sigtimedwait read_list: []
+SyS_kill read_list: []
+SyS_tgkill read_list: []
+SyS_tkill read_list: []
+SyS_rt_sigqueueinfo read_list: []
+compat_SyS_rt_sigqueueinfo read_list: []
+SyS_rt_tgsigqueueinfo read_list: []
+compat_SyS_rt_tgsigqueueinfo read_list: []
+SyS_sigaltstack read_list: []
+compat_SyS_sigaltstack read_list: []
+SyS_sigpending read_list: []
+compat_SyS_sigpending read_list: []
+SyS_sigprocmask read_list: []
+SyS_rt_sigaction read_list: []
+compat_SyS_rt_sigaction read_list: []
+compat_SyS_sigaction read_list: []
+sys_sgetmask read_list: []
+SyS_ssetmask read_list: []
+SyS_signal read_list: []
+sys_pause read_list: []
+SyS_rt_sigsuspend read_list: []
+compat_SyS_rt_sigsuspend read_list: []
+SyS_sigsuspend read_list: []
+SYSC_sigsuspend read_list: []
+C_SYSC_rt_sigsuspend read_list: []
+SYSC_rt_sigsuspend read_list: []
+SYSC_signal read_list: []
+SYSC_ssetmask read_list: []
+C_SYSC_sigaction read_list: []
+C_SYSC_rt_sigaction read_list: []
+SYSC_rt_sigaction read_list: []
+SYSC_sigprocmask read_list: []
+C_SYSC_sigpending read_list: []
+SYSC_sigpending read_list: []
+C_SYSC_sigaltstack read_list: []
+SYSC_sigaltstack read_list: []
+C_SYSC_rt_tgsigqueueinfo read_list: [(struct siginfo)->si_code, ]
+SYSC_rt_tgsigqueueinfo read_list: [(struct siginfo)->si_code, ]
+C_SYSC_rt_sigqueueinfo read_list: [(struct siginfo)->si_code, ]
+SYSC_rt_sigqueueinfo read_list: [(struct siginfo)->si_code, ]
+SYSC_tkill read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+SYSC_tgkill read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+SYSC_kill read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+C_SYSC_rt_sigtimedwait read_list: []
+SYSC_rt_sigtimedwait read_list: [(struct siginfo)->si_code, (struct siginfo)->si_signo, ]
+C_SYSC_rt_sigpending read_list: []
+SYSC_rt_sigpending read_list: []
+C_SYSC_rt_sigprocmask read_list: []
+SYSC_rt_sigprocmask read_list: []
+SyS_delete_module read_list: []
+SyS_init_module read_list: []
+SyS_finit_module read_list: []
+SYSC_finit_module read_list: []
+SYSC_init_module read_list: [(struct load_info)->len, (struct load_info)->hdr, ]
+SYSC_delete_module read_list: [(struct module)->state, (struct module)->init, (struct module)->exit, ]
+SyS_kexec_load read_list: []
+compat_SyS_kexec_load read_list: []
+C_SYSC_kexec_load read_list: []
+SYSC_kexec_load read_list: []
+SyS_getgroups read_list: []
+SyS_setgroups read_list: []
+SYSC_setgroups read_list: []
+SYSC_getgroups read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+SyS_ptrace read_list: []
+compat_SyS_ptrace read_list: []
+C_SYSC_ptrace read_list: [(struct task_struct)->ptrace, (struct task_struct)->flags, (struct task_struct)->exit_state, (struct task_struct)->state, (struct task_struct)->parent, ]
+SYSC_ptrace read_list: [(struct task_struct)->ptrace, (struct task_struct)->flags, (struct task_struct)->exit_state, (struct task_struct)->state, (struct task_struct)->parent, ]
+sys_ni_syscall read_list: []
+SyS_reboot read_list: []
+SYSC_reboot read_list: []
+SyS_set_tid_address read_list: []
+sys_fork read_list: []
+sys_vfork read_list: []
+SyS_clone read_list: []
+SyS_unshare read_list: []
+SYSC_unshare read_list: [(struct fs_struct)->users, ]
+SYSC_clone read_list: []
+SYSC_set_tid_address read_list: []
+SyS_seccomp read_list: []
+SYSC_seccomp read_list: []
+compat_SyS_sigprocmask read_list: []
+compat_SyS_sched_setaffinity read_list: []
+compat_SyS_sched_getaffinity read_list: []
+compat_SyS_move_pages read_list: []
+compat_SyS_migrate_pages read_list: []
+compat_SyS_sched_rr_get_interval read_list: []
+C_SYSC_sched_rr_get_interval read_list: []
+C_SYSC_migrate_pages read_list: []
+C_SYSC_move_pages read_list: []
+C_SYSC_sched_getaffinity read_list: []
+C_SYSC_sched_setaffinity read_list: []
+C_SYSC_sigprocmask read_list: []
+SyS_perf_event_open read_list: []
+SYSC_perf_event_open read_list: [(struct perf_event_attr)->__reserved_1, (struct perf_event_attr)->sample_type, (struct perf_event_attr)->read_format, (struct perf_event_attr)->exclude_kernel, (struct perf_event_attr)->exclude_user, (struct perf_event_attr)->exclude_hv, (struct perf_event_attr)->sample_stack_user, (struct perf_event_attr)->sample_stack_user, (struct perf_event_attr)->namespaces, (struct perf_event_attr)->freq, (struct perf_event_attr)->sample_freq, (struct perf_event_attr)->sample_period, (struct perf_event_attr)->sample_max_stack, (struct fd)->file, (struct file)->f_op, (struct perf_event_attr)->inherit, (struct perf_event)->addr_filters_offs, (struct perf_event)->parent, (struct perf_event)->destroy, (struct perf_event)->ns, (struct pmu)->capabilities, (struct perf_event_attr)->use_clockid, (struct pmu)->task_ctx_nr, (struct perf_event)->event_caps, (struct perf_event)->group_caps, (struct perf_event)->attach_state, (struct perf_event_context)->task_ctx_data, (struct task_struct)->flags, (struct perf_event)->group_leader, (struct perf_event)->clock, (struct perf_event)->cpu, (struct perf_event_context)->task, (struct perf_event)->ctx, (struct perf_event_attr)->exclusive, (struct perf_event_attr)->pinned, (struct perf_event)->pmu, (struct perf_event)->read_size, (struct perf_event)->header_size, (struct perf_event)->id_header_size, (struct perf_cpu_context)->online, (struct perf_event_context)->parent_ctx, (struct perf_event_attr)->disabled, (struct fd)->flags, ]
+SyS_exit read_list: []
+SyS_exit_group read_list: []
+SyS_waitid read_list: []
+SyS_wait4 read_list: []
+SyS_waitpid read_list: []
+compat_SyS_wait4 read_list: []
+compat_SyS_waitid read_list: []
+C_SYSC_waitid read_list: []
+C_SYSC_wait4 read_list: []
+SYSC_waitpid read_list: []
+SYSC_wait4 read_list: []
+SYSC_waitid read_list: []
+SYSC_exit_group read_list: []
+SYSC_exit read_list: []
+SyS_set_robust_list read_list: []
+SyS_get_robust_list read_list: []
+SyS_futex read_list: []
+SYSC_futex read_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+SYSC_get_robust_list read_list: []
+SYSC_set_robust_list read_list: []
+SyS_setpriority read_list: []
+SyS_getpriority read_list: []
+SyS_setregid read_list: []
+SyS_setgid read_list: []
+SyS_setreuid read_list: []
+SyS_setuid read_list: []
+SyS_setresuid read_list: []
+SyS_getresuid read_list: []
+SyS_setresgid read_list: []
+SyS_getresgid read_list: []
+SyS_setfsuid read_list: []
+SyS_setfsgid read_list: []
+sys_getpid read_list: []
+sys_gettid read_list: []
+sys_getppid read_list: [(struct task_struct)->real_parent, (struct task_struct)->real_parent, ]
+sys_getuid read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+sys_geteuid read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+sys_getgid read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+sys_getegid read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+SyS_times read_list: []
+compat_SyS_times read_list: []
+SyS_setpgid read_list: []
+SyS_getpgid read_list: []
+sys_getpgrp read_list: []
+SyS_getsid read_list: []
+sys_setsid read_list: [(struct signal_struct)->leader, ]
+SyS_newuname read_list: []
+SyS_uname read_list: []
+SyS_olduname read_list: []
+SyS_sethostname read_list: []
+SyS_gethostname read_list: []
+SyS_setdomainname read_list: []
+SyS_getrlimit read_list: []
+compat_SyS_setrlimit read_list: []
+compat_SyS_getrlimit read_list: []
+SyS_old_getrlimit read_list: []
+compat_SyS_old_getrlimit read_list: []
+SyS_prlimit64 read_list: []
+SyS_setrlimit read_list: []
+SyS_getrusage read_list: []
+compat_SyS_getrusage read_list: []
+SyS_umask read_list: []
+SyS_prctl read_list: []
+SyS_getcpu read_list: []
+SyS_sysinfo read_list: []
+compat_SyS_sysinfo read_list: []
+C_SYSC_sysinfo read_list: [(struct timespec)->tv_nsec, (struct sysinfo)->totalram, (struct sysinfo)->totalswap, (struct sysinfo)->mem_unit, ]
+SYSC_sysinfo read_list: [(struct timespec)->tv_nsec, (struct sysinfo)->totalram, (struct sysinfo)->totalswap, ]
+SYSC_getcpu read_list: []
+SYSC_prctl read_list: [(struct task_struct)->timer_slack_ns, (struct task_struct)->flags, (struct task_struct)->personality, ]
+SYSC_umask read_list: []
+C_SYSC_getrusage read_list: [(struct signal_struct)->maxrss, ]
+SYSC_getrusage read_list: [(struct signal_struct)->maxrss, ]
+SYSC_setrlimit read_list: [(struct rlimit)->rlim_cur, (struct rlimit)->rlim_max, (struct task_struct)->sighand, ]
+SYSC_prlimit64 read_list: [(struct task_struct)->cred, (struct task_struct)->cred, (struct task_struct)->real_cred, (struct task_struct)->real_cred, (struct rlimit)->rlim_cur, (struct rlimit)->rlim_max, (struct task_struct)->sighand, ]
+C_SYSC_old_getrlimit read_list: [(struct rlimit)->rlim_cur, (struct rlimit)->rlim_max, ]
+SYSC_old_getrlimit read_list: [(struct rlimit)->rlim_cur, (struct rlimit)->rlim_max, ]
+C_SYSC_getrlimit read_list: [(struct rlimit)->rlim_cur, (struct rlimit)->rlim_max, ]
+C_SYSC_setrlimit read_list: [(struct compat_rlimit)->rlim_cur, (struct compat_rlimit)->rlim_max, ]
+SYSC_getrlimit read_list: []
+SYSC_setdomainname read_list: []
+SYSC_gethostname read_list: []
+SYSC_sethostname read_list: []
+SYSC_olduname read_list: [(struct task_struct)->personality, ]
+SYSC_uname read_list: [(struct task_struct)->personality, ]
+SYSC_newuname read_list: [(struct task_struct)->personality, ]
+SYSC_getsid read_list: []
+SYSC_getpgid read_list: []
+SYSC_setpgid read_list: [(struct task_struct)->exit_signal, (struct task_struct)->signal, (struct task_struct)->flags, (struct signal_struct)->leader, ]
+C_SYSC_times read_list: []
+SYSC_times read_list: []
+SYSC_setfsgid read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+SYSC_setfsuid read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+SYSC_getresgid read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+SYSC_setresgid read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+SYSC_getresuid read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+SYSC_setresuid read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+SYSC_setuid read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+SYSC_setreuid read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+SYSC_setgid read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+SYSC_setregid read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+SYSC_getpriority read_list: [(struct task_struct)->cred, (struct task_struct)->cred, (struct task_struct)->real_cred, (struct task_struct)->real_cred, ]
+SYSC_setpriority read_list: [(struct task_struct)->cred, (struct task_struct)->cred, (struct task_struct)->real_cred, (struct task_struct)->real_cred, ]
+SyS_setns read_list: []
+SYSC_setns read_list: [(struct proc_ns_operations)->type, (struct nsproxy)->pid_ns_for_children, (struct nsproxy)->ipc_ns, (struct nsproxy)->uts_ns, (struct nsproxy)->mnt_ns, ]
+SyS_timer_create read_list: []
+compat_SyS_timer_create read_list: []
+SyS_timer_gettime read_list: []
+compat_SyS_timer_gettime read_list: []
+SyS_timer_getoverrun read_list: []
+SyS_timer_settime read_list: []
+compat_SyS_timer_settime read_list: []
+SyS_timer_delete read_list: []
+SyS_clock_settime read_list: []
+SyS_clock_gettime read_list: []
+SyS_clock_adjtime read_list: []
+SyS_clock_getres read_list: []
+compat_SyS_clock_settime read_list: []
+compat_SyS_clock_gettime read_list: []
+compat_SyS_clock_adjtime read_list: []
+compat_SyS_clock_getres read_list: []
+SyS_clock_nanosleep read_list: []
+compat_SyS_clock_nanosleep read_list: []
+C_SYSC_clock_nanosleep read_list: [(struct k_clock)->nsleep, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+SYSC_clock_nanosleep read_list: [(struct k_clock)->nsleep, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+C_SYSC_clock_getres read_list: []
+C_SYSC_clock_adjtime read_list: [(struct k_clock)->clock_adj, ]
+C_SYSC_clock_gettime read_list: []
+C_SYSC_clock_settime read_list: [(struct k_clock)->clock_set, ]
+SYSC_clock_getres read_list: []
+SYSC_clock_adjtime read_list: [(struct k_clock)->clock_adj, ]
+SYSC_clock_gettime read_list: []
+SYSC_clock_settime read_list: [(struct k_clock)->clock_set, ]
+SYSC_timer_delete read_list: [(struct k_itimer)->it_signal, (struct task_struct)->signal, (struct k_clock)->timer_del, ]
+C_SYSC_timer_settime read_list: [(struct k_clock)->timer_set, ]
+SYSC_timer_settime read_list: [(struct k_clock)->timer_set, ]
+SYSC_timer_getoverrun read_list: [(struct k_itimer)->it_signal, (struct task_struct)->signal, ]
+C_SYSC_timer_gettime read_list: [(struct k_clock)->timer_get, ]
+SYSC_timer_gettime read_list: [(struct k_clock)->timer_get, ]
+C_SYSC_timer_create read_list: [(struct k_clock)->timer_create, (struct k_itimer)->it_pid, ]
+SYSC_timer_create read_list: [(struct k_clock)->timer_create, (struct k_itimer)->it_pid, ]
+SyS_getitimer read_list: []
+compat_SyS_getitimer read_list: []
+SyS_alarm read_list: []
+SyS_setitimer read_list: []
+compat_SyS_setitimer read_list: []
+C_SYSC_setitimer read_list: [(struct timeval)->tv_sec, (struct timeval)->tv_usec, ]
+SYSC_setitimer read_list: [(struct timeval)->tv_sec, (struct timeval)->tv_usec, ]
+SYSC_alarm read_list: [(struct timeval)->tv_sec, (struct timeval)->tv_usec, ]
+C_SYSC_getitimer read_list: []
+SYSC_getitimer read_list: []
+SyS_nanosleep read_list: []
+compat_SyS_nanosleep read_list: []
+C_SYSC_nanosleep read_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+SYSC_nanosleep read_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+SyS_time read_list: []
+SyS_stime read_list: []
+compat_SyS_time read_list: []
+compat_SyS_stime read_list: []
+SyS_gettimeofday read_list: []
+SyS_settimeofday read_list: []
+compat_SyS_gettimeofday read_list: []
+compat_SyS_settimeofday read_list: []
+SyS_adjtimex read_list: []
+compat_SyS_adjtimex read_list: []
+C_SYSC_adjtimex read_list: []
+SYSC_adjtimex read_list: []
+C_SYSC_settimeofday read_list: [(struct timezone)->tz_minuteswest, ]
+C_SYSC_gettimeofday read_list: []
+SYSC_settimeofday read_list: [(struct timeval)->tv_sec, (struct timeval)->tv_usec, (struct timezone)->tz_minuteswest, ]
+SYSC_gettimeofday read_list: []
+C_SYSC_stime read_list: []
+C_SYSC_time read_list: []
+SYSC_stime read_list: []
+SYSC_time read_list: []
+SyS_capget read_list: []
+SyS_capset read_list: []
+SYSC_capset read_list: [(struct task_struct)->cred, (struct task_struct)->cred, (struct task_struct)->cred, ]
+SYSC_capget read_list: []
+SyS_syslog read_list: []
+SYSC_syslog read_list: []
+compat_SyS_set_robust_list read_list: []
+compat_SyS_get_robust_list read_list: []
+compat_SyS_futex read_list: []
+C_SYSC_futex read_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+C_SYSC_get_robust_list read_list: []
+C_SYSC_set_robust_list read_list: []
+SyS_sysctl read_list: []
+compat_SyS_sysctl read_list: []
+C_SYSC_sysctl read_list: [(struct compat_sysctl_args)->oldval, (struct compat_sysctl_args)->oldlenp, ]
+SYSC_sysctl read_list: [(struct __sysctl_args)->oldval, (struct __sysctl_args)->oldlenp, ]
+SyS_membarrier read_list: []
+SyS_personality read_list: []
+SYSC_personality read_list: []
+SyS_nice read_list: []
+SyS_sched_setscheduler read_list: []
+SyS_sched_setparam read_list: []
+SyS_sched_setattr read_list: []
+SyS_sched_getscheduler read_list: []
+SyS_sched_getparam read_list: []
+SyS_sched_getattr read_list: []
+SyS_sched_setaffinity read_list: []
+SyS_sched_getaffinity read_list: []
+sys_sched_yield read_list: []
+SyS_sched_get_priority_max read_list: []
+SyS_sched_get_priority_min read_list: []
+SyS_sched_rr_get_interval read_list: []
+SYSC_sched_rr_get_interval read_list: [(struct sched_class)->get_rr_interval, ]
+SYSC_sched_get_priority_min read_list: []
+SYSC_sched_get_priority_max read_list: []
+SYSC_sched_getaffinity read_list: []
+SYSC_sched_setaffinity read_list: [(struct task_struct)->flags, (struct task_struct)->real_cred, (struct task_struct)->real_cred, ]
+SYSC_sched_getattr read_list: [(struct task_struct)->sched_reset_on_fork, ]
+SYSC_sched_getparam read_list: []
+SYSC_sched_getscheduler read_list: [(struct task_struct)->sched_reset_on_fork, ]
+SYSC_sched_setattr read_list: [(struct sched_attr)->sched_policy, ]
+SYSC_sched_setparam read_list: []
+SYSC_sched_setscheduler read_list: []
+SYSC_nice read_list: []
+SyS_acct read_list: []
+SYSC_acct read_list: [(struct file)->f_mode, ]
+SyS_chown16 read_list: []
+SyS_lchown16 read_list: []
+SyS_fchown16 read_list: []
+SyS_setregid16 read_list: []
+SyS_setgid16 read_list: []
+SyS_setreuid16 read_list: []
+SyS_setuid16 read_list: []
+SyS_setresuid16 read_list: []
+SyS_getresuid16 read_list: []
+SyS_setresgid16 read_list: []
+SyS_getresgid16 read_list: []
+SyS_setfsuid16 read_list: []
+SyS_setfsgid16 read_list: []
+SyS_getgroups16 read_list: []
+SyS_setgroups16 read_list: []
+sys_getuid16 read_list: [(struct task_struct)->cred, (struct task_struct)->cred, (struct task_struct)->cred, ]
+sys_geteuid16 read_list: [(struct task_struct)->cred, (struct task_struct)->cred, (struct task_struct)->cred, ]
+sys_getgid16 read_list: [(struct task_struct)->cred, (struct task_struct)->cred, (struct task_struct)->cred, ]
+sys_getegid16 read_list: [(struct task_struct)->cred, (struct task_struct)->cred, (struct task_struct)->cred, ]
+SYSC_setgroups16 read_list: [(struct group_info)->ngroups, ]
+SYSC_getgroups16 read_list: [(struct task_struct)->cred, (struct task_struct)->cred, (struct group_info)->ngroups, ]
+SYSC_setfsgid16 read_list: []
+SYSC_setfsuid16 read_list: []
+SYSC_getresgid16 read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+SYSC_setresgid16 read_list: []
+SYSC_getresuid16 read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+SYSC_setresuid16 read_list: []
+SYSC_setuid16 read_list: []
+SYSC_setreuid16 read_list: []
+SYSC_setgid16 read_list: []
+SYSC_setregid16 read_list: []
+SYSC_fchown16 read_list: []
+SYSC_lchown16 read_list: []
+SYSC_chown16 read_list: []
+SyS_mremap read_list: []
+SYSC_mremap read_list: [(struct task_struct)->personality, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, (struct vm_area_struct)->vm_next, (struct mm_struct)->map_count, (struct vm_area_struct)->vm_ops, (struct vm_operations_struct)->mremap, ]
+SyS_memfd_create read_list: []
+SYSC_memfd_create read_list: []
+SyS_brk read_list: []
+SyS_mmap_pgoff read_list: []
+SyS_munmap read_list: []
+SyS_remap_file_pages read_list: []
+SYSC_remap_file_pages read_list: [(struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, (struct vm_area_struct)->vm_file, ]
+SYSC_munmap read_list: []
+SYSC_mmap_pgoff read_list: [(struct file)->f_op, ]
+SYSC_brk read_list: [(struct mm_struct)->brk, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_start, (struct mm_struct)->def_flags, ]
+SyS_mlock read_list: []
+SyS_mlock2 read_list: []
+SyS_munlock read_list: []
+SyS_mlockall read_list: []
+sys_munlockall read_list: []
+SYSC_mlockall read_list: [(struct mm_struct)->total_vm, (struct task_struct)->personality, ]
+SYSC_munlock read_list: [(struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, ]
+SYSC_mlock2 read_list: []
+SYSC_mlock read_list: []
+SyS_move_pages read_list: []
+SYSC_move_pages read_list: []
+SyS_readahead read_list: []
+SYSC_readahead read_list: [(struct fd)->file, (struct file)->f_mode, (struct address_space)->a_ops, (struct fd)->flags, ]
+SyS_swapoff read_list: []
+SyS_swapon read_list: []
+SYSC_swapon read_list: [(struct swap_info_struct)->flags, (struct inode)->i_flags, (struct address_space_operations)->readpage, (struct swap_info_struct)->bdev, (struct swap_info_struct)->percpu_cluster, ]
+SYSC_swapoff read_list: [(struct task_struct)->mm, (struct swap_info_struct)->flags, (struct file)->f_mapping, (struct swap_info_struct)->prio, (struct page)->private, (struct swp_entry_t)->val, (struct swap_info_struct)->inuse_pages, ]
+SyS_mprotect read_list: []
+SyS_pkey_mprotect read_list: []
+SyS_pkey_alloc read_list: []
+SyS_pkey_free read_list: []
+SYSC_pkey_free read_list: []
+SYSC_pkey_alloc read_list: [(struct mm_context_t)->pkey_allocation_map, ]
+SYSC_pkey_mprotect read_list: [(struct task_struct)->personality, (struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_end, ]
+SYSC_mprotect read_list: [(struct task_struct)->personality, (struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_flags, (struct vm_area_struct)->vm_end, ]
+SyS_mincore read_list: []
+SYSC_mincore read_list: [(struct vm_area_struct)->vm_start, ]
+SyS_mbind read_list: []
+SyS_set_mempolicy read_list: []
+SyS_migrate_pages read_list: []
+SyS_get_mempolicy read_list: []
+compat_SyS_get_mempolicy read_list: []
+compat_SyS_set_mempolicy read_list: []
+compat_SyS_mbind read_list: []
+C_SYSC_mbind read_list: []
+C_SYSC_set_mempolicy read_list: []
+C_SYSC_get_mempolicy read_list: []
+SYSC_get_mempolicy read_list: [(struct vm_area_struct)->vm_ops, (struct vm_operations_struct)->get_policy, (struct task_struct)->mempolicy, (struct mempolicy)->mode, ]
+SYSC_migrate_pages read_list: [(struct task_struct)->cred, (struct task_struct)->cred, (struct task_struct)->real_cred, (struct task_struct)->real_cred, ]
+SYSC_set_mempolicy read_list: [(struct mempolicy)->mode, ]
+SYSC_mbind read_list: []
+SyS_msync read_list: []
+SyS_fadvise64_64 read_list: []
+SyS_fadvise64 read_list: []
+SyS_process_vm_readv read_list: []
+SyS_process_vm_writev read_list: []
+compat_SyS_process_vm_readv read_list: []
+compat_SyS_process_vm_writev read_list: []
+C_SYSC_process_vm_writev read_list: []
+C_SYSC_process_vm_readv read_list: []
+SYSC_process_vm_writev read_list: []
+SYSC_process_vm_readv read_list: []
+SyS_madvise read_list: []
+SYSC_madvise read_list: [(struct vm_area_struct)->vm_start, (struct vm_area_struct)->vm_end, ]
+sys_rt_sigreturn read_list: [(struct thread_struct)->uaccess_err, ]
+SyS_set_thread_area read_list: []
+SyS_get_thread_area read_list: []
+SYSC_get_thread_area read_list: []
+SYSC_set_thread_area read_list: [(struct thread_struct)->fsindex, (struct thread_struct)->gsindex, ]
+sys_modify_ldt read_list: [(struct mm_context_t)->ldt, (struct user_desc)->entry_number, (struct user_desc)->contents, (struct user_desc)->seg_not_present, (struct user_desc)->base_addr, (struct user_desc)->limit, (struct user_desc)->read_exec_only, (struct user_desc)->seg_32bit, (struct user_desc)->limit_in_pages, (struct user_desc)->useable, ]
+SyS_mmap read_list: []
+SYSC_mmap read_list: []
+sys_ioperm read_list: [(struct thread_struct)->io_bitmap_ptr, ]
+SyS_iopl read_list: []
+SyS_arch_prctl read_list: []
+compat_SyS_arch_prctl read_list: []
+C_SYSC_arch_prctl read_list: []
+SYSC_arch_prctl read_list: []
+compat_SyS_keyctl read_list: []
+C_SYSC_keyctl read_list: []
+SyS_add_key read_list: []
+SyS_request_key read_list: []
+SyS_keyctl read_list: []
+SYSC_keyctl read_list: [(struct key_type)->read, (struct key_user)->qnkeys, (struct key_user)->qnbytes, (struct key)->quotalen, (struct task_struct)->cred, (struct task_struct)->cred, (struct task_struct)->cred, (struct task_struct)->pid, (struct task_struct)->mm, (struct task_struct)->cred, (struct task_struct)->real_cred, (struct task_struct)->real_cred, (struct cred)->session_keyring, (struct task_struct)->cred, (struct key)->serial, ]
+SYSC_request_key read_list: []
+SYSC_add_key read_list: []
+SyS_msgget read_list: []
+SyS_msgctl read_list: []
+SyS_msgsnd read_list: []
+SyS_msgrcv read_list: []
+SYSC_msgrcv read_list: [(struct msg_msg)->m_ts, ]
+SYSC_msgsnd read_list: [(struct ipc_namespace)->msg_ctlmax, ]
+SYSC_msgctl read_list: [(struct msqid64_ds)->msg_qbytes, (struct ipc_namespace)->msg_ctlmnb, ]
+SYSC_msgget read_list: []
+SyS_mq_open read_list: []
+SyS_mq_unlink read_list: []
+SyS_mq_timedsend read_list: []
+SyS_mq_timedreceive read_list: []
+SyS_mq_notify read_list: []
+SyS_mq_getsetattr read_list: []
+compat_SyS_mq_open read_list: []
+compat_SyS_mq_timedsend read_list: []
+compat_SyS_mq_timedreceive read_list: []
+compat_SyS_mq_notify read_list: []
+compat_SyS_mq_getsetattr read_list: []
+C_SYSC_mq_getsetattr read_list: [(struct mq_attr)->mq_flags, (struct fd)->file, (struct file)->f_op, ]
+C_SYSC_mq_notify read_list: [(struct sigevent)->sigev_notify, (struct fd)->file, (struct file)->f_op, (struct mqueue_inode_info)->notify_owner, ]
+C_SYSC_mq_timedreceive read_list: [(struct fd)->file, (struct file)->f_op, (struct file)->f_mode, (struct mq_attr)->mq_msgsize, (struct mqueue_inode_info)->node_cache, (struct mq_attr)->mq_curmsgs, (struct file)->f_flags, ]
+C_SYSC_mq_timedsend read_list: [(struct fd)->file, (struct file)->f_op, (struct file)->f_mode, (struct mq_attr)->mq_msgsize, (struct mqueue_inode_info)->node_cache, (struct mq_attr)->mq_curmsgs, (struct mq_attr)->mq_maxmsg, (struct file)->f_flags, ]
+C_SYSC_mq_open read_list: []
+SYSC_mq_getsetattr read_list: [(struct mq_attr)->mq_flags, (struct fd)->file, (struct file)->f_op, ]
+SYSC_mq_notify read_list: [(struct sigevent)->sigev_notify, (struct fd)->file, (struct file)->f_op, (struct mqueue_inode_info)->notify_owner, ]
+SYSC_mq_timedreceive read_list: [(struct fd)->file, (struct file)->f_op, (struct file)->f_mode, (struct mq_attr)->mq_msgsize, (struct mqueue_inode_info)->node_cache, (struct mq_attr)->mq_curmsgs, (struct file)->f_flags, ]
+SYSC_mq_timedsend read_list: [(struct fd)->file, (struct file)->f_op, (struct file)->f_mode, (struct mq_attr)->mq_msgsize, (struct mqueue_inode_info)->node_cache, (struct mq_attr)->mq_curmsgs, (struct mq_attr)->mq_maxmsg, (struct file)->f_flags, ]
+SYSC_mq_unlink read_list: []
+SYSC_mq_open read_list: []
+compat_SyS_ipc read_list: []
+compat_SyS_semctl read_list: []
+compat_SyS_msgsnd read_list: []
+compat_SyS_msgrcv read_list: []
+compat_SyS_msgctl read_list: []
+compat_SyS_shmat read_list: []
+compat_SyS_shmctl read_list: []
+compat_SyS_semtimedop read_list: []
+C_SYSC_semtimedop read_list: []
+C_SYSC_shmctl read_list: [(struct shminfo64)->shmmax, ]
+C_SYSC_shmat read_list: []
+C_SYSC_msgctl read_list: []
+C_SYSC_msgrcv read_list: []
+C_SYSC_msgsnd read_list: []
+C_SYSC_semctl read_list: []
+C_SYSC_ipc read_list: []
+SyS_semget read_list: []
+SyS_semctl read_list: []
+SyS_semtimedop read_list: []
+SyS_semop read_list: []
+SYSC_semop read_list: []
+SYSC_semtimedop read_list: [(struct timespec)->tv_sec, (struct timespec)->tv_nsec, (struct sembuf)->sem_num, (struct sembuf)->sem_flg, (struct sembuf)->sem_op, (struct sem_array)->sem_nsems, (struct sem_array)->use_global_lock, (struct kern_ipc_perm)->deleted, (struct sem_undo)->semid, (struct sem_queue)->dupsop, (struct sem_array)->complex_count, (struct sem_queue)->nsops, ]
+SYSC_semctl read_list: [(struct sem_array)->sem_nsems, ]
+SYSC_semget read_list: []
+SyS_shmget read_list: []
+SyS_shmctl read_list: []
+SyS_shmat read_list: []
+SyS_shmdt read_list: []
+SYSC_shmdt read_list: [(struct vm_area_struct)->vm_ops, (struct vm_area_struct)->vm_pgoff, (struct vm_area_struct)->vm_file, ]
+SYSC_shmat read_list: []
+SYSC_shmctl read_list: [(struct kern_ipc_perm)->deleted, (struct task_struct)->cred, (struct task_struct)->cred, (struct file)->f_op, (struct task_struct)->cred, (struct kern_ipc_perm)->mode, ]
+SYSC_shmget read_list: []
+SyS_quotactl read_list: []
+SYSC_quotactl read_list: [(struct super_block)->s_qcop, (struct super_block)->s_quota_types, (struct quotactl_ops)->quota_sync, (struct super_block)->s_flags, ]
+SyS_vmsplice read_list: []
+compat_SyS_vmsplice read_list: []
+SyS_splice read_list: []
+SyS_tee read_list: []
+SYSC_tee read_list: [(struct fd)->file, (struct file)->f_mode, (struct fd)->flags, ]
+SYSC_splice read_list: [(struct fd)->file, (struct file)->f_mode, (struct file)->f_flags, (struct fd)->flags, ]
+C_SYSC_vmsplice read_list: []
+SYSC_vmsplice read_list: [(struct fd)->file, (struct file)->f_mode, (struct splice_desc)->total_len, (struct fd)->flags, ]
+SyS_io_setup read_list: []
+compat_SyS_io_setup read_list: []
+SyS_io_destroy read_list: []
+SyS_io_submit read_list: []
+compat_SyS_io_submit read_list: []
+SyS_io_cancel read_list: []
+SyS_io_getevents read_list: []
+compat_SyS_io_getevents read_list: []
+C_SYSC_io_getevents read_list: []
+SYSC_io_getevents read_list: [(struct mm_struct)->ioctx_table, (struct mm_struct)->ioctx_table, (struct kioctx_table)->nr, (struct kioctx)->user_id, (struct hrtimer_sleeper)->task, ]
+SYSC_io_cancel read_list: [(struct mm_struct)->ioctx_table, (struct mm_struct)->ioctx_table, (struct kioctx_table)->nr, (struct kioctx)->user_id, (struct aio_kiocb)->ki_user_iocb, ]
+C_SYSC_io_submit read_list: []
+SYSC_io_submit read_list: []
+SYSC_io_destroy read_list: [(struct mm_struct)->ioctx_table, (struct mm_struct)->ioctx_table, (struct kioctx_table)->nr, (struct kioctx)->user_id, (struct kioctx)->mmap_size, ]
+C_SYSC_io_setup read_list: [(struct kioctx)->cpu, (struct kioctx)->req_batch, (struct kioctx)->mmap_size, ]
+SYSC_io_setup read_list: [(struct kioctx)->cpu, (struct kioctx)->req_batch, (struct kioctx)->mmap_size, ]
+SyS_name_to_handle_at read_list: []
+SyS_open_by_handle_at read_list: []
+compat_SyS_open_by_handle_at read_list: []
+C_SYSC_open_by_handle_at read_list: []
+SYSC_open_by_handle_at read_list: []
+SYSC_name_to_handle_at read_list: [(struct super_block)->s_export_op, (struct export_operations)->fh_to_dentry, (struct file_handle)->handle_bytes, ]
+SyS_ioctl read_list: []
+SYSC_ioctl read_list: [(struct fd)->file, (struct fd)->flags, ]
+SyS_sysfs read_list: []
+SYSC_sysfs read_list: []
+SyS_signalfd4 read_list: []
+SyS_signalfd read_list: []
+compat_SyS_signalfd4 read_list: []
+compat_SyS_signalfd read_list: []
+C_SYSC_signalfd read_list: []
+C_SYSC_signalfd4 read_list: []
+SYSC_signalfd read_list: []
+SYSC_signalfd4 read_list: [(struct fd)->file, (struct file)->f_op, (struct fd)->flags, ]
+SyS_pipe2 read_list: []
+SyS_pipe read_list: []
+SYSC_pipe read_list: []
+SYSC_pipe2 read_list: []
+SyS_getcwd read_list: []
+SYSC_getcwd read_list: [(struct dentry)->d_parent, (struct path)->dentry, (struct path)->mnt, (struct vfsmount)->mnt_root, ]
+SyS_stat read_list: []
+SyS_lstat read_list: []
+SyS_fstat read_list: []
+SyS_newstat read_list: []
+SyS_newlstat read_list: []
+SyS_newfstatat read_list: []
+SyS_newfstat read_list: []
+SyS_readlinkat read_list: []
+SyS_readlink read_list: []
+SyS_statx read_list: []
+compat_SyS_newstat read_list: []
+compat_SyS_newlstat read_list: []
+compat_SyS_newfstatat read_list: []
+compat_SyS_newfstat read_list: []
+C_SYSC_newfstat read_list: [(struct compat_stat)->st_ino, (struct kstat)->ino, (struct compat_stat)->st_nlink, (struct kstat)->nlink, (struct kstat)->size, ]
+C_SYSC_newfstatat read_list: [(struct compat_stat)->st_ino, (struct kstat)->ino, (struct compat_stat)->st_nlink, (struct kstat)->nlink, (struct kstat)->size, ]
+C_SYSC_newlstat read_list: [(struct compat_stat)->st_ino, (struct kstat)->ino, (struct compat_stat)->st_nlink, (struct kstat)->nlink, (struct kstat)->size, ]
+C_SYSC_newstat read_list: [(struct compat_stat)->st_ino, (struct kstat)->ino, (struct compat_stat)->st_nlink, (struct kstat)->nlink, (struct kstat)->size, ]
+SYSC_statx read_list: []
+SYSC_readlink read_list: []
+SYSC_readlinkat read_list: [(struct inode_operations)->readlink, ]
+SYSC_newfstat read_list: [(struct stat)->st_ino, (struct kstat)->ino, (struct stat)->st_nlink, (struct kstat)->nlink, ]
+SYSC_newfstatat read_list: [(struct stat)->st_ino, (struct kstat)->ino, (struct stat)->st_nlink, (struct kstat)->nlink, ]
+SYSC_newlstat read_list: [(struct stat)->st_ino, (struct kstat)->ino, (struct stat)->st_nlink, (struct kstat)->nlink, ]
+SYSC_newstat read_list: [(struct stat)->st_ino, (struct kstat)->ino, (struct stat)->st_nlink, (struct kstat)->nlink, ]
+SYSC_fstat read_list: [(struct __old_kernel_stat)->st_ino, (struct kstat)->ino, (struct __old_kernel_stat)->st_nlink, (struct kstat)->nlink, ]
+SYSC_lstat read_list: [(struct __old_kernel_stat)->st_ino, (struct kstat)->ino, (struct __old_kernel_stat)->st_nlink, (struct kstat)->nlink, ]
+SYSC_stat read_list: [(struct __old_kernel_stat)->st_ino, (struct kstat)->ino, (struct __old_kernel_stat)->st_nlink, (struct kstat)->nlink, ]
+SyS_old_readdir read_list: []
+SyS_getdents read_list: []
+SyS_getdents64 read_list: []
+compat_SyS_old_readdir read_list: []
+compat_SyS_getdents read_list: []
+C_SYSC_getdents read_list: [(struct fd)->file, (struct fd)->flags, ]
+C_SYSC_old_readdir read_list: [(struct fd)->file, (struct compat_readdir_callback)->result, (struct fd)->flags, ]
+SYSC_getdents64 read_list: [(struct fd)->file, (struct fd)->flags, ]
+SYSC_getdents read_list: [(struct fd)->file, (struct fd)->flags, ]
+SYSC_old_readdir read_list: [(struct fd)->file, (struct readdir_callback)->result, (struct fd)->flags, ]
+SyS_dup3 read_list: []
+SyS_dup2 read_list: []
+SyS_dup read_list: []
+SYSC_dup read_list: []
+SYSC_dup2 read_list: []
+SYSC_dup3 read_list: [(struct files_struct)->fdt, (struct files_struct)->fdt, (struct fdtable)->max_fds, (struct files_struct)->resize_in_progress, (struct files_struct)->fdt, ]
+SyS_bdflush read_list: []
+SYSC_bdflush read_list: []
+SyS_setxattr read_list: []
+SyS_lsetxattr read_list: []
+SyS_fsetxattr read_list: []
+SyS_getxattr read_list: []
+SyS_lgetxattr read_list: []
+SyS_fgetxattr read_list: []
+SyS_listxattr read_list: []
+SyS_llistxattr read_list: []
+SyS_flistxattr read_list: []
+SyS_removexattr read_list: []
+SyS_lremovexattr read_list: []
+SyS_fremovexattr read_list: []
+SYSC_fremovexattr read_list: [(struct fd)->file, (struct fd)->flags, ]
+SYSC_lremovexattr read_list: []
+SYSC_removexattr read_list: []
+SYSC_flistxattr read_list: [(struct fd)->file, (struct fd)->flags, ]
+SYSC_llistxattr read_list: []
+SYSC_listxattr read_list: []
+SYSC_fgetxattr read_list: [(struct fd)->file, (struct fd)->flags, ]
+SYSC_lgetxattr read_list: []
+SYSC_getxattr read_list: []
+SYSC_fsetxattr read_list: [(struct fd)->file, (struct fd)->flags, ]
+SYSC_lsetxattr read_list: []
+SYSC_setxattr read_list: []
+SyS_uselib read_list: []
+SyS_execve read_list: []
+SyS_execveat read_list: []
+compat_SyS_execve read_list: []
+compat_SyS_execveat read_list: []
+C_SYSC_execveat read_list: []
+C_SYSC_execve read_list: []
+SYSC_execveat read_list: []
+SYSC_execve read_list: []
+SYSC_uselib read_list: [(struct vfsmount)->mnt_flags, (struct super_block)->s_iflags, (struct linux_binfmt)->load_shlib, ]
+SyS_umount read_list: []
+SyS_oldumount read_list: []
+SyS_mount read_list: []
+SyS_pivot_root read_list: []
+SYSC_pivot_root read_list: [(struct vfsmount)->mnt_flags, (struct mount)->mnt_ns, (struct nsproxy)->mnt_ns, (struct dentry)->d_parent, (struct vfsmount)->mnt_root, (struct path)->dentry, (struct mount)->mnt_parent, (struct path)->mnt, ]
+SYSC_mount read_list: [(struct task_struct)->personality, ]
+SYSC_oldumount read_list: []
+SYSC_umount read_list: [(struct path)->dentry, (struct vfsmount)->mnt_root, (struct mount)->mnt_ns, (struct nsproxy)->mnt_ns, (struct vfsmount)->mnt_flags, (struct path)->mnt, (struct super_operations)->umount_begin, (struct super_block)->s_flags, (struct task_struct)->flags, ]
+compat_SyS_mount read_list: []
+C_SYSC_mount read_list: []
+SyS_lseek read_list: []
+compat_SyS_lseek read_list: []
+SyS_llseek read_list: []
+SyS_read read_list: []
+SyS_write read_list: []
+SyS_pread64 read_list: []
+SyS_pwrite64 read_list: []
+SyS_readv read_list: []
+SyS_writev read_list: []
+SyS_preadv read_list: []
+SyS_preadv2 read_list: []
+SyS_pwritev read_list: []
+SyS_pwritev2 read_list: []
+compat_SyS_readv read_list: []
+compat_SyS_preadv64 read_list: []
+compat_SyS_preadv read_list: []
+compat_SyS_preadv64v2 read_list: []
+compat_SyS_preadv2 read_list: []
+compat_SyS_writev read_list: []
+compat_SyS_pwritev64 read_list: []
+compat_SyS_pwritev read_list: []
+compat_SyS_pwritev64v2 read_list: []
+compat_SyS_pwritev2 read_list: []
+SyS_sendfile read_list: []
+SyS_sendfile64 read_list: []
+compat_SyS_sendfile read_list: []
+compat_SyS_sendfile64 read_list: []
+SyS_copy_file_range read_list: []
+SYSC_copy_file_range read_list: [(struct fd)->file, (struct fd)->flags, ]
+C_SYSC_sendfile64 read_list: [(struct fd)->file, (struct file)->f_mode, ]
+C_SYSC_sendfile read_list: [(struct fd)->file, (struct file)->f_mode, ]
+SYSC_sendfile64 read_list: [(struct fd)->file, (struct file)->f_mode, ]
+SYSC_sendfile read_list: [(struct fd)->file, (struct file)->f_mode, ]
+C_SYSC_pwritev2 read_list: [(struct fd)->file, (struct file)->f_mode, ]
+C_SYSC_pwritev64v2 read_list: [(struct fd)->file, (struct file)->f_mode, ]
+C_SYSC_pwritev read_list: [(struct fd)->file, (struct file)->f_mode, ]
+C_SYSC_pwritev64 read_list: [(struct fd)->file, (struct file)->f_mode, ]
+C_SYSC_writev read_list: [(struct fd)->file, ]
+C_SYSC_preadv2 read_list: [(struct fd)->file, (struct file)->f_mode, ]
+C_SYSC_preadv64v2 read_list: [(struct fd)->file, (struct file)->f_mode, ]
+C_SYSC_preadv read_list: [(struct fd)->file, (struct file)->f_mode, ]
+C_SYSC_preadv64 read_list: [(struct fd)->file, (struct file)->f_mode, ]
+C_SYSC_readv read_list: [(struct fd)->file, ]
+SYSC_pwritev2 read_list: [(struct fd)->file, (struct file)->f_mode, ]
+SYSC_pwritev read_list: [(struct fd)->file, (struct file)->f_mode, ]
+SYSC_preadv2 read_list: [(struct fd)->file, (struct file)->f_mode, ]
+SYSC_preadv read_list: [(struct fd)->file, (struct file)->f_mode, ]
+SYSC_writev read_list: [(struct fd)->file, ]
+SYSC_readv read_list: [(struct fd)->file, ]
+SYSC_pwrite64 read_list: [(struct fd)->file, (struct file)->f_mode, (struct fd)->flags, ]
+SYSC_pread64 read_list: [(struct fd)->file, (struct file)->f_mode, (struct fd)->flags, ]
+SYSC_write read_list: [(struct fd)->file, (struct fd)->flags, ]
+SYSC_read read_list: [(struct fd)->file, (struct fd)->flags, ]
+SYSC_llseek read_list: [(struct fd)->file, (struct fd)->flags, ]
+C_SYSC_lseek read_list: []
+SYSC_lseek read_list: [(struct fd)->file, (struct fd)->flags, ]
+SyS_timerfd_create read_list: []
+SyS_timerfd_settime read_list: []
+SyS_timerfd_gettime read_list: []
+compat_SyS_timerfd_settime read_list: []
+compat_SyS_timerfd_gettime read_list: []
+C_SYSC_timerfd_gettime read_list: [(struct timerfd_ctx)->expired, (struct timerfd_ctx)->tintv, ]
+C_SYSC_timerfd_settime read_list: [(struct timerfd_ctx)->expired, (struct timerfd_ctx)->tintv, ]
+SYSC_timerfd_gettime read_list: [(struct timerfd_ctx)->expired, (struct timerfd_ctx)->tintv, ]
+SYSC_timerfd_settime read_list: [(struct timerfd_ctx)->expired, (struct timerfd_ctx)->tintv, ]
+SYSC_timerfd_create read_list: [(struct timerfd_ctx)->clockid, ]
+SyS_eventfd2 read_list: []
+SyS_eventfd read_list: []
+SYSC_eventfd read_list: []
+SYSC_eventfd2 read_list: []
+SyS_select read_list: []
+SyS_pselect6 read_list: []
+SyS_poll read_list: []
+SyS_ppoll read_list: []
+compat_SyS_select read_list: []
+compat_SyS_old_select read_list: []
+compat_SyS_pselect6 read_list: []
+compat_SyS_ppoll read_list: []
+C_SYSC_ppoll read_list: [(struct poll_list)->len, (struct task_struct)->personality, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+C_SYSC_pselect6 read_list: []
+C_SYSC_old_select read_list: []
+C_SYSC_select read_list: [(struct files_struct)->fdt, (struct files_struct)->fdt, (struct task_struct)->personality, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+SYSC_ppoll read_list: [(struct poll_list)->len, (struct task_struct)->personality, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+SYSC_poll read_list: [(struct poll_list)->len, ]
+SYSC_pselect6 read_list: []
+SYSC_select read_list: [(struct files_struct)->fdt, (struct files_struct)->fdt, (struct task_struct)->personality, (struct timespec)->tv_sec, (struct timespec)->tv_nsec, ]
+sys_sync read_list: []
+SyS_syncfs read_list: []
+SyS_fsync read_list: []
+SyS_fdatasync read_list: []
+SyS_sync_file_range read_list: []
+SyS_sync_file_range2 read_list: []
+SYSC_sync_file_range2 read_list: []
+SYSC_sync_file_range read_list: [(struct fd)->file, (struct fd)->flags, ]
+SYSC_fdatasync read_list: [(struct fd)->file, ]
+SYSC_fsync read_list: [(struct fd)->file, ]
+SYSC_syncfs read_list: [(struct fd)->file, (struct fd)->flags, ]
+SyS_truncate read_list: []
+compat_SyS_truncate read_list: []
+SyS_ftruncate read_list: []
+compat_SyS_ftruncate read_list: []
+SyS_fallocate read_list: []
+SyS_faccessat read_list: []
+SyS_access read_list: []
+SyS_chdir read_list: []
+SyS_fchdir read_list: []
+SyS_chroot read_list: []
+SyS_fchmod read_list: []
+SyS_fchmodat read_list: []
+SyS_chmod read_list: []
+SyS_fchownat read_list: []
+SyS_chown read_list: []
+SyS_lchown read_list: []
+SyS_fchown read_list: []
+SyS_open read_list: []
+SyS_openat read_list: []
+compat_SyS_open read_list: []
+compat_SyS_openat read_list: []
+SyS_creat read_list: []
+SyS_close read_list: []
+sys_vhangup read_list: []
+SYSC_close read_list: []
+SYSC_creat read_list: []
+C_SYSC_openat read_list: []
+C_SYSC_open read_list: []
+SYSC_openat read_list: []
+SYSC_open read_list: []
+SYSC_fchown read_list: [(struct fd)->file, (struct fd)->flags, ]
+SYSC_lchown read_list: []
+SYSC_chown read_list: []
+SYSC_fchownat read_list: []
+SYSC_chmod read_list: []
+SYSC_fchmodat read_list: []
+SYSC_fchmod read_list: [(struct fd)->file, (struct fd)->flags, ]
+SYSC_chroot read_list: []
+SYSC_fchdir read_list: [(struct fd)->file, (struct fd)->flags, ]
+SYSC_chdir read_list: []
+SYSC_access read_list: []
+SYSC_faccessat read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+SYSC_fallocate read_list: [(struct fd)->file, (struct fd)->flags, ]
+C_SYSC_ftruncate read_list: [(struct fd)->file, (struct file)->f_flags, (struct file)->f_mode, (struct inode)->i_flags, ]
+SYSC_ftruncate read_list: [(struct fd)->file, (struct file)->f_flags, (struct file)->f_mode, (struct inode)->i_flags, ]
+C_SYSC_truncate read_list: []
+SYSC_truncate read_list: []
+SyS_utime read_list: []
+SyS_utimensat read_list: []
+SyS_futimesat read_list: []
+SyS_utimes read_list: []
+compat_SyS_utime read_list: []
+compat_SyS_utimensat read_list: []
+compat_SyS_futimesat read_list: []
+compat_SyS_utimes read_list: []
+C_SYSC_utimes read_list: []
+C_SYSC_futimesat read_list: [(struct timespec)->tv_nsec, (struct fd)->file, ]
+C_SYSC_utimensat read_list: [(struct timespec)->tv_nsec, (struct fd)->file, ]
+C_SYSC_utime read_list: [(struct fd)->file, ]
+SYSC_utimes read_list: []
+SYSC_futimesat read_list: [(struct timeval)->tv_usec, (struct fd)->file, ]
+SYSC_utimensat read_list: [(struct timespec)->tv_nsec, (struct fd)->file, ]
+SYSC_utime read_list: []
+SyS_flock read_list: []
+SYSC_flock read_list: [(struct fd)->file, (struct file)->f_mode, (struct file_operations)->flock, (struct super_block)->s_flags, (struct fd)->flags, ]
+SyS_epoll_create1 read_list: []
+SyS_epoll_create read_list: []
+SyS_epoll_ctl read_list: []
+SyS_epoll_wait read_list: []
+SyS_epoll_pwait read_list: []
+compat_SyS_epoll_pwait read_list: []
+C_SYSC_epoll_pwait read_list: []
+SYSC_epoll_pwait read_list: []
+SYSC_epoll_wait read_list: [(struct fd)->file, (struct file)->f_op, (struct fd)->flags, ]
+SYSC_epoll_ctl read_list: [(struct fd)->file, (struct file_operations)->poll, (struct epoll_event)->events, (struct file)->f_op, (struct epitem)->ws, (struct epitem)->ws, (struct epitem)->nwait, (struct fd)->flags, ]
+SYSC_epoll_create read_list: []
+SYSC_epoll_create1 read_list: [(struct task_struct)->cred, (struct task_struct)->cred, ]
+SyS_statfs read_list: []
+SyS_statfs64 read_list: []
+SyS_fstatfs read_list: []
+SyS_fstatfs64 read_list: []
+SyS_ustat read_list: []
+compat_SyS_statfs read_list: []
+compat_SyS_fstatfs read_list: []
+compat_SyS_statfs64 read_list: []
+compat_SyS_fstatfs64 read_list: []
+compat_SyS_ustat read_list: []
+C_SYSC_ustat read_list: []
+C_SYSC_fstatfs64 read_list: [(struct fd)->file, (struct kstatfs)->f_files, (struct kstatfs)->f_ffree, ]
+C_SYSC_statfs64 read_list: [(struct kstatfs)->f_files, (struct kstatfs)->f_ffree, ]
+C_SYSC_fstatfs read_list: [(struct fd)->file, (struct kstatfs)->f_files, (struct kstatfs)->f_ffree, ]
+C_SYSC_statfs read_list: [(struct kstatfs)->f_files, (struct kstatfs)->f_ffree, ]
+SYSC_ustat read_list: []
+SYSC_fstatfs64 read_list: [(struct fd)->file, ]
+SYSC_fstatfs read_list: [(struct fd)->file, ]
+SYSC_statfs64 read_list: []
+SYSC_statfs read_list: []
+SyS_fcntl read_list: []
+compat_SyS_fcntl64 read_list: []
+compat_SyS_fcntl read_list: []
+C_SYSC_fcntl read_list: []
+C_SYSC_fcntl64 read_list: [(struct fd)->file, (struct file)->f_mode, (struct flock)->l_start, (struct flock)->l_len, (struct fd)->flags, ]
+SYSC_fcntl read_list: [(struct fd)->file, (struct file)->f_mode, (struct fd)->flags, ]
+SyS_mknodat read_list: []
+SyS_mknod read_list: []
+SyS_mkdirat read_list: []
+SyS_mkdir read_list: []
+SyS_rmdir read_list: []
+SyS_unlinkat read_list: []
+SyS_unlink read_list: []
+SyS_symlinkat read_list: []
+SyS_symlink read_list: []
+SyS_linkat read_list: []
+SyS_link read_list: []
+SyS_renameat2 read_list: []
+SyS_renameat read_list: []
+SyS_rename read_list: []
+SYSC_rename read_list: []
+SYSC_renameat read_list: []
+SYSC_renameat2 read_list: [(struct path)->mnt, (struct filename)->refcnt, (struct filename)->name, (struct filename)->iname, ]
+SYSC_link read_list: []
+SYSC_linkat read_list: [(struct path)->mnt, ]
+SYSC_symlink read_list: []
+SYSC_symlinkat read_list: [(struct filename)->refcnt, (struct filename)->name, (struct filename)->iname, ]
+SYSC_unlink read_list: []
+SYSC_unlinkat read_list: [(struct dentry)->d_inode, ]
+SYSC_rmdir read_list: [(struct dentry)->d_inode, ]
+SYSC_mkdir read_list: []
+SYSC_mkdirat read_list: [(struct super_block)->s_flags, ]
+SYSC_mknod read_list: []
+SYSC_mknodat read_list: [(struct super_block)->s_flags, ]
+SyS_lookup_dcookie read_list: []
+compat_SyS_lookup_dcookie read_list: []
+C_SYSC_lookup_dcookie read_list: []
+SYSC_lookup_dcookie read_list: []
+compat_SyS_ioctl read_list: []
+C_SYSC_ioctl read_list: [(struct fd)->file, (struct file_operations)->compat_ioctl, (struct file_operations)->unlocked_ioctl, (struct fd)->flags, ]
+SyS_inotify_init1 read_list: []
+sys_inotify_init read_list: []
+SyS_inotify_add_watch read_list: []
+SyS_inotify_rm_watch read_list: []
+SYSC_inotify_rm_watch read_list: [(struct fd)->file, (struct file)->f_op, (struct fd)->flags, ]
+SYSC_inotify_add_watch read_list: [(struct fd)->file, (struct file)->f_op, (struct fd)->flags, ]
+SYSC_inotify_init1 read_list: [(struct task_struct)->cred, (struct task_struct)->cred, (struct inotify_group_private_data)->ucounts, ]
+sys_dmi_field_show read_list: []
+sys_dmi_modalias_show read_list: [(struct mafield)->prefix, ]
+sys_copyarea read_list: [(struct fb_info)->state, (struct fb_ops)->fb_sync, ]
+sys_fillrect read_list: [(struct fb_info)->state, (struct fb_fix_screeninfo)->visual, (struct fb_ops)->fb_sync, ]
+sys_imageblit read_list: [(struct fb_info)->state, (struct fb_ops)->fb_sync, (struct fb_image)->depth, (struct fb_fix_screeninfo)->visual, ]
+sys_get_curr_temp read_list: []
+sys_get_trip_temp read_list: []
+sys_set_trip_temp read_list: [(struct pkg_device)->tj_max, ]
+sys_get_trip_type read_list: []
+SyS_getrandom read_list: []
+SYSC_getrandom read_list: []
--- /dev/null	Fri Dec 21 15:00:22 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.ioctls	Fri Dec 21 15:00:22 2018
@@ -0,0 +1,246 @@
+aac_cfg_ioctl
+ac_ioctl
+acq_ioctl
+adpt_unlocked_ioctl
+adsp_ioctl
+advwdt_ioctl
+adx_wdt_ioctl
+agp_ioctl
+ali_ioctl
+anslcd_ioctl
+apm_ioctl
+ar7_wdt_ioctl
+asr_ioctl
+at32_wdt_ioctl
+at91_wdt_ioctl
+audamrnb_ioctl
+audevrc_ioctl
+audio_in_ioctl
+audio_ioctl
+audpp_ioctl
+audpre_ioctl
+audqcelp_ioctl
+autofs_root_ioctl
+bcm47xx_wdt_ioctl
+bcm_char_ioctl
+bfin_otp_ioctl
+bfin_wdt_ioctl
+booke_wdt_ioctl
+bridge_ioctl
+capi_unlocked_ioctl
+chd_dec_ioctl
+ch_ioctl
+chsc_ioctl
+cmm_ioctl
+coh901327_ioctl
+comedi_unlocked_ioctl
+cosa_chardev_ioctl
+cpu5wdt_ioctl
+cpwd_ioctl
+_ctl_ioctl
+ctrl_cdev_ioctl
+d7s_ioctl
+dabusb_ioctl
+davinci_wdt_ioctl
+dev_ioctl
+dm_ctl_ioctl
+drm_ioctl
+ds1620_unlocked_ioctl
+dsp56k_ioctl
+dst_ca_ioctl
+dtlk_ioctl
+dv1394_ioctl
+dvb_ca_en50221_io_ioctl
+dvb_demux_ioctl
+dvb_dvr_ioctl
+dvb_generic_ioctl
+dvb_net_ioctl
+easycap_ioctl
+easysnd_ioctl
+efi_rtc_ioctl
+envctrl_ioctl
+ep93xx_wdt_ioctl
+ep_ioctl
+epx_c3_ioctl
+erst_dbg_ioctl
+esb_ioctl
+eurwdt_ioctl
+evdev_ioctl
+evtchn_ioctl
+fb_ioctl
+ffs_ep0_ioctl
+ffs_epfile_ioctl
+fitpc2_wdt_ioctl
+flash_ioctl
+fop_ioctl
+fs3270_ioctlioctl
+ft1000_ChIoctl
+fw_device_op_ioctl
+gdth_unlocked_ioctl
+gef_wdt_ioctl
+gen_rtc_unlocked_ioctl
+geodewdt_ioctl
+GLOB_SBD_unlocked_ioctl
+gru_file_unlocked_ioctl
+hiddev_ioctl
+hidraw_ioctl
+hpet_ioctl
+hp_sdc_rtc_unlocked_ioctl
+hpwdt_ioctl
+hub_ioctl
+hung_up_tty_ioctl
+i2cdev_ioctl
+i2o_cfg_ioctl
+i810_ioctl
+i830_ioctl
+i8k_ioctl
+ib_umad_ioctl
+ibwdt_ioctl
+idetape_chrdev_ioctl
+imx2_wdt_ioctl
+indydog_ioctl
+intel_sst_ioctl
+ioctl
+ioctl_rio
+iop_wdt_ioctl
+iowarrior_ioctl
+ip2_ipl_ioctl
+ipmi_unlocked_ioctl
+ir_lirc_ioctl
+isdn_divert_ioctl
+isdn_unlocked_ioctl
+it8712f_wdt_ioctl
+iTCO_wdt_ioctl
+ivtv_v4l2_ioctl
+ixj_ioctl
+ixp2000_wdt_ioctl
+ixp4xx_wdt_ioctl
+joydev_ioctl
+jsf_ioctl
+ks8695_wdt_ioctl
+lcd_ioctl
+lirc_dev_fop_ioctl
+lirc_ioctl
+lp_ioctl
+macvtap_ioctl
+max63xx_wdt_ioctl
+megadev_unlocked_ioctl
+megasas_mgmt_ioctl
+memrar_ioctl
+mISDN_ioctl
+mixcomwd_ioctl
+mmtimer_ioctl
+mon_bin_ioctl
+mon_stat_ioctl
+mpc8xxx_wdt_ioctl
+mpcore_wdt_ioctl
+mptctl_ioctl
+mraid_mm_unlocked_ioctl
+msm_ioctl_config
+msm_ioctl_control
+msm_ioctl_frame
+mtd_unlocked_ioctl
+mtx1_wdt_ioctl
+mv64x60_wdt_ioctl
+mwave_ioctl
+nosy_ioctl
+nuc900_wdt_ioctl
+nvram_ioctl
+nvram_unlocked_ioctl
+octeon_wdt_ioctl
+omap_wdt_ioctl
+openprom_ioctl
+orion_wdt_ioctl
+osd_uld_ioctl
+osst_ioctl
+pc87413_ioctl
+pcipcwd_ioctl
+pcwd_ioctl
+phantom_ioctl
+pikawdt_ioctl
+pkt_ctl_ioctl
+pmcraid_chr_ioctl
+pmem_ioctl
+pmu_unlocked_ioctl
+pnx4008_wdt_ioctl
+pnx833x_wdt_ioctl
+pp_ioctl
+ppp_ioctl
+pps_cdev_ioctl
+printer_ioctl
+proc_bus_pci_ioctl
+pt_ioctl
+random_ioctl
+raw1394_ioctl
+raw_ctl_ioctl
+raw_ioctl
+rc32434_wdt_ioctl
+rdc321x_wdt_ioctl
+rio_fw_ioctl
+riowd_ioctl
+rtc_dev_ioctl
+rtc_ioctl
+s3c2410wdt_ioctl
+sa1100dog_ioctl
+sbwdog_ioctl
+sc1200wdt_ioctl
+sch311x_wdt_ioctl
+scx200_wdt_ioctl
+sg_unlocked_ioctl
+sh_wdt_ioctl
+smb_ioctl
+snd_ioctl
+softdog_ioctl
+sonypi_misc_ioctl
+sp805_wdt_ioctl
+spidev_ioctl
+st_ioctl
+stli_memioctl
+stl_memioctl
+stmp3xxx_wdt_ioctl
+sx_fw_ioctl
+tapechar_ioctl
+tosh_ioctl
+ts72xx_wdt_ioctl
+tty_ioctl
+tun_chr_ioctl
+twa_chrdev_ioctl
+tw_chrdev_ioctl
+twl4030_wdt_ioctl
+twl_chrdev_ioctl
+txx9wdt_ioctl
+ubi_cdev_ioctl
+uctrl_ioctl
+uinput_ioctl
+usbdev_ioctl
+usblp_ioctl
+usb_pcwd_ioctl
+usbtest_ioctl
+usbtmc_ioctl
+uv_mmtimer_ioctl
+v4l2_ioctl
+vfd_ioctl
+vhost_net_ioctl
+video1394_ioctl
+video_ioctl2
+video_ioctl2V4L2ioctlhandler
+vino_ioctl
+viotap_unlocked_ioctl
+vmcp_ioctl
+vme_user_unlocked_ioctl
+vmwdt_ioctl
+vmw_unlocked_ioctl
+vol_cdev_ioctl
+wafwdt_ioctl
+watchdog_ioctl
+wb_smsc_wdt_ioctl
+wdrtas_ioctl
+wdt977_ioctl
+wdt_ioctl
+wdtpci_ioctl
+wdt_unlocked_ioctl
+wm831x_wdt_ioctl
+wm8350_wdt_ioctl
+zcrypt_unlocked_ioctl
+zfcp_cfdc_dev_ioctl
+zf_ioctl
--- /dev/null	Fri Dec 21 15:00:22 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.macro_takes_sizeof_argument	Fri Dec 21 15:00:22 2018
@@ -0,0 +1,4 @@
+BNX2FC_RQ_BUF_LOG_SZ
+BNX2FC_NUM_MAX_SESS_LOG
+ilog2
+FP_XSTATE_MAGIC2_SIZE
--- /dev/null	Fri Dec 21 15:00:22 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.must_check_funcs	Fri Dec 21 15:00:22 2018
@@ -0,0 +1,5 @@
+ERR_PTR
+PTR_ERR
+IS_ERR
+IS_ERR_OR_NULL
+ERR_CAST
--- /dev/null	Fri Dec 21 15:00:23 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.no_inline_functions	Fri Dec 21 15:00:23 2018
@@ -0,0 +1,12 @@
+__fswab16
+__fswab32
+__fswab64
+__builtin_bswap16
+__builtin_bswap32
+__builtin_bswap64
+__arch_hweight8
+__arch_hweight16
+__arch_hweight32
+__arch_hweight64
+__write_once_size
+atomic_set
--- /dev/null	Fri Dec 21 15:00:23 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.no_return_funcs	Fri Dec 21 15:00:23 2018
@@ -0,0 +1,103 @@
+// list of functions which don't return.
+// generated by `gen_no_return_funcs.sh`
+__assert_fail
+exit
+__builtin_unreachable
+ahd_handle_hwerrint
+aic7xxx_panic_abort
+assfail
+ast_gem_init_object
+audit_tree_handle_event
+backref_tree_panic
+bnep_session
+cafe_nand_bug
+cifs_demultiplex_thread
+cirrus_gem_init_object
+cmtp_session
+complete_and_exit
+cpu_bringup_and_idle
+cpu_idle_loop
+cpu_startup_entry
+cryptomgr_probe
+cryptomgr_test
+denali_ecc_calculate
+denali_ecc_correct
+denali_ecc_hwctl
+df_debug
+die_kmmio_nesting_error
+do_double_fault
+do_exit
+do_group_exit
+drm_framebuffer_free_bug
+drm_gem_object_ref_bug
+dummy_handler
+early_panic
+extent_io_tree_panic
+fsnotify_mark_destroy
+gru_abort
+hidp_session_thread
+hlt_play_dead
+hugetlbfs_write_end
+hugetlb_vm_op_fault
+i915_gem_init_object
+i915_gem_object_get_pages_stolen
+__invalid_creds
+jffs2_garbage_collect_thread
+kdb_reboot
+kgdboc_reset_disconnect
+kthread
+kthreadd
+kvm_spurious_fault
+logfs_mark_segment_bad
+machine_real_restart
+mgag200_gem_init_object
+mpt_halt_firmware
+native_machine_emergency_restart
+native_machine_halt
+netlink_data_ready
+nfs4_run_state_manager
+nfsd
+nfs_proc_commit_rpc_prepare
+nfs_proc_commit_setup
+__ocfs2_recovery_thread
+ordered_data_tree_panic
+panic
+panic_smp_self_stop
+ping_hash
+prio_changed_idle
+prio_changed_stop
+r100_semaphore_ring_emit
+r8712_cmd_thread
+radeon_gem_object_init
+rcu_gp_kthread
+rcu_nocb_kthread
+__reiserfs_panic
+report_instruction_timeout
+rest_init
+retu_power_off
+skb_over_panic
+skb_panic
+skb_under_panic
+__stack_chk_fail
+start_kernel
+start_secondary
+stop_self
+stop_this_cpu
+svc_udp_accept
+switched_to_idle
+switched_to_stop
+SYSC_exit
+SYSC_exit_group
+SyS_exit
+SyS_exit_group
+task_tick_rt
+ttm_bo_ref_bug
+txd_chain
+udl_gem_init_object
+usbatm_do_heavy_init
+vdump_bucket_and_panic
+wait_for_helper
+wait_for_panic
+x86_64_start_kernel
+x86_64_start_reservations
+yield_task_stop
--- /dev/null	Fri Dec 21 15:00:23 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.no_return_funcs.remove	Fri Dec 21 15:00:23 2018
@@ -0,0 +1,1 @@
+watchdog
--- /dev/null	Fri Dec 21 15:00:23 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.parameter_implications.add	Fri Dec 21 15:00:23 2018
@@ -0,0 +1,15 @@
+/*
+ * It's pretty common that the return value implies something about a parameter.
+ * This gives you a way to tell Smatch about it.
+ *
+ * The format is:
+ * function "return range" parameter "implied value range list of parameter"
+ *
+ * You have to specify at least two return ranges for a function.  The implied
+ * value is a range list, but the return range is just a range and we only care
+ * about the min and the max.  We start counting the first parameter at zero.
+ *
+ */
+
+rw_verify_area "0-1000000" 3 "0-1000000"
+rw_verify_area "-4095-(-1)" 3 "min-max"
--- /dev/null	Fri Dec 21 15:00:23 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.puts_argument	Fri Dec 21 15:00:23 2018
@@ -0,0 +1,9 @@
+// list of functions and the argument they decrement the ref of.
+// generated by `gen_puts_list.sh`
+batadv_sysfs_del_hardif 0
+class_compat_unregister 0
+cleanup_glue_dir 1
+hugepage_exit_sysfs 0
+hugepage_init_sysfs 0
+ib_device_unregister_sysfs 0
+uio_dev_del_attributes 0
--- /dev/null	Fri Dec 21 15:00:23 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.returns_err_ptr	Fri Dec 21 15:00:23 2018
@@ -0,0 +1,1627 @@
+// list of functions that return a new allocation.
+// generated by `gen_err_ptr_list.sh`
+aa_dfa_unpack
+aa_simple_write_to_buffer
+aa_unpack
+acer_rfkill_register
+acquire_group
+ad714x_probe
+ad7606_probe
+ad7879_probe
+add_inode
+add_numbered_child
+add_partition
+add_qgroup_rb
+addrconf_add_dev
+addrconf_dst_alloc
+add_tracepoint
+add_volume
+adfs_lookup
+ads7846_probe_dt
+adxl34x_probe
+aead_geniv_alloc
+affs_alloc_extblock
+affs_bread_ino
+affs_find_entry
+affs_getemptyblk_ino
+affs_get_extblock_slow
+affs_getzeroblk_ino
+affs_iget
+afs_cell_alloc
+afs_cell_create
+afs_cell_lookup
+afs_dir_get_page
+afs_iget
+afs_iget_autocell
+afs_lookup
+afs_lookup_server
+afs_mntpt_do_automount
+afs_mntpt_lookup
+afs_mount
+afs_try_auto_mntpt
+afs_vlocation_lookup
+afs_volume_lookup
+afs_volume_pick_fileserver
+alg_get_type
+alloc
+allocate_fake_cpuc
+allocate_partition
+alloc_cmd
+alloc_cmd_box
+alloc_counters
+alloc_huge_page
+alloc_log_tree
+alloc_mnt_ns
+alloc_msg
+alloc_nfs_open_context
+alloc_nfs_open_dir_context
+alloc_param_target
+alloc_rbio
+alloc_sdesc
+alloc_swap_info
+alloc_trace_uprobe
+alloc_ts_config
+alloc_upcall
+alloc_vmap_area
+anon_inode_getfile
+anon_inode_mkinode
+applesmc_get_entry_by_index
+applesmc_get_entry_by_key
+arpt_register_table
+ast_user_framebuffer_create
+ath10k_fetch_fw_file
+ath10k_htc_create
+ath5k_txq_setup
+ath6kl_cfg80211_add_iface
+atk_ggrp
+atk_gitm
+atk_sitm
+audit_data_to_entry
+audit_dupe_rule
+audit_dupe_watch
+audit_init_parent
+audit_init_watch
+audit_to_entry_common
+audit_unpack_string
+auo_pixcir_parse_dt
+autofs4_d_automount
+autofs4_lookup
+b43_wireless_init
+backlight_device_register
+bad_inode_lookup
+balloon_devinfo_alloc
+balloon_mapping_alloc
+bar_init
+bch_btree_node_alloc
+bch_btree_node_get
+bclean
+bcma_hcd_create_pdev
+bd_start_claiming
+befs_iget
+befs_lookup
+beiscsi_ep_connect
+bfs_iget
+bfs_lookup
+bio_copy_user_iov
+__bio_map_kern
+bio_map_kern
+__bio_map_user_iov
+bl_alloc_lseg
+bl_find_get_zeroing_page
+blkcg_css_alloc
+blkdev_get_by_dev
+blkdev_get_by_path
+blkg_create
+blkg_lookup_create
+blk_make_request
+bnx2i_ep_connect
+brcmf_add_if
+brcmf_alloc_vif
+brcmf_bus_gettxq
+brcmf_cfg80211_add_iface
+brcmf_fws_macdesc_lookup
+brcmf_p2p_add_vif
+brcmf_p2p_create_p2pdev
+brcmf_setup_wiphy
+brd_probe
+br_multicast_get_group
+br_multicast_new_group
+bsg_add_device
+bsg_alloc_command
+bsg_get_device
+bsg_get_done_cmd
+bsg_map_hdr
+btree_get_extent
+btrfs_alloc_free_block
+btrfs_create_tree
+btrfs_get_acl
+btrfs_get_dentry
+btrfs_get_extent
+btrfs_get_extent_fiemap
+btrfs_get_or_create_delayed_node
+btrfs_get_parent
+btrfs_iget
+btrfs_init_new_buffer
+btrfs_lookup_csum
+btrfs_lookup_dentry
+btrfs_lookup_dir_index_item
+btrfs_lookup_dir_item
+btrfs_lookup_inode_extref
+btrfs_lookup_inode_ref
+btrfs_lookup_xattr
+btrfs_mount
+btrfs_new_extent_direct
+btrfs_new_inode
+btrfs_reada_add
+btrfs_read_fs_root_no_name
+btrfs_read_tree_root
+btrfs_ref_to_path
+btrfs_search_dir_index_item
+bu21013_parse_dt
+build_backref_tree
+build_map_info
+build_unc_path_to_root
+c2_ah_create
+c2_alloc_pd
+c2_alloc_ucontext
+c2_create_cq
+c2_create_qp
+c2port_device_register
+c2_reg_phys_mr
+c2_reg_user_mr
+c4iw_ah_create
+c4iw_alloc
+c4iw_allocate_pd
+c4iw_alloc_fast_reg_mr
+c4iw_alloc_fastreg_pbl
+c4iw_alloc_mw
+c4iw_alloc_ucontext
+c4iw_create_cq
+c4iw_create_qp
+c4iw_get_dma_mr
+c4iw_register_phys_mem
+c4iw_reg_user_mr
+c4iw_uld_add
+cache_create_net
+cachefiles_alloc_object
+cachefiles_check_active
+cachefiles_get_directory
+carl9170_alloc
+cciss_seq_start
+ceph_alloc_page_vector
+ceph_auth_init
+ceph_create_client
+ceph_create_snap_realm
+ceph_extract_encoded_string
+ceph_fh_to_parent
+ceph_finish_lookup
+ceph_get_direct_page_vector
+ceph_get_inode
+ceph_lookup
+ceph_mdsc_build_path
+ceph_mdsc_create_request
+ceph_mdsmap_decode
+ceph_monmap_decode
+ceph_mount
+ceph_osdc_new_request
+ceph_parse_options
+ceph_real_mount
+cfg80211_get_dev_from_ifindex
+__cfg80211_rdev_from_attrs
+__cfg80211_wdev_from_attrs
+__cfh_to_dentry
+cgroup_css_from_dir
+cgroup_lookup
+cgroup_mount
+cgroup_root_from_opts
+cgrp_css_alloc
+chainiv_alloc
+check_partition
+check_range
+cifs_build_devname
+cifs_compose_mount_options
+cifs_construct_tcon
+cifs_dfs_do_automount
+cifs_do_mount
+cifs_get_root
+cifs_get_smb_ses
+cifs_get_spnego_key
+cifs_get_tcon
+cifs_get_tcp_session
+cifs_get_volume_info
+cifs_lookup
+cifs_root_iget
+cifs_sb_tlink
+cifs_setup_async_request
+cifs_setup_request
+ci_hdrc_add_device
+cirrus_user_framebuffer_create
+__class_create
+__clk_register
+clk_register
+clk_register_composite
+clk_register_fixed_factor
+clk_register_fixed_rate
+clk_register_gate
+clk_register_mux_table
+clone_fs_devices
+clone_mnt
+clone_uts_ns
+clusterip_seq_start
+cma3000_init
+cm_copy_private_data
+cm_create_timewait_info
+coda_cnode_make
+coda_cnode_makectl
+coda_iget
+coda_lookup
+config_desc_make
+configfs_lookup
+configfs_new_dirent
+construct_key_and_link
+context_alloc
+copy_dev_ioctl
+copy_gadget_strings
+copy_msg
+copy_net_ns
+copy_pid_ns
+copy_process
+copy_tree
+copy_znode
+core_alloc_hba
+core_alloc_port
+core_alua_allocate_lu_gp
+core_alua_allocate_lu_gp_mem
+core_alua_allocate_tg_pt_gp_mem
+core_dev_add_lun
+core_tpg_add_initiator_node_acl
+core_tpg_pre_addlun
+core_tpg_pre_dellun
+cpuacct_css_alloc
+cpu_cgroup_css_alloc
+cpufreq_cooling_register
+cpuset_css_alloc
+cpuset_mount
+create_and_register_pcpu
+create_empty_lvol
+create_entry
+create_fs_client
+create_hw_context
+create_iboe_ah
+create_ipc_ns
+create_new_namespaces
+create_pid_namespace
+create_pinned_em
+create_reloc_inode
+create_request_message
+_create_sg_bios
+create_xattr_datum
+create_xattr_ref
+crush_decode
+cryptd_alloc_ablkcipher
+cryptd_alloc_aead
+cryptd_alloc_ahash
+cryptd_alloc_instance
+crypto_alg_mod_lookup
+crypto_alloc_ablkcipher
+crypto_alloc_aead
+crypto_alloc_base
+crypto_alloc_instance
+crypto_alloc_instance2
+__crypto_alloc_tfm
+crypto_alloc_tfm
+crypto_attr_alg_name
+crypto_authenc_ahash
+crypto_authenc_ahash_fb
+crypto_authenc_alloc
+crypto_authenc_esn_ahash
+crypto_authenc_esn_alloc
+crypto_cbc_alloc
+crypto_ccm_alloc
+crypto_ccm_alloc_common
+crypto_ccm_base_alloc
+crypto_create_tfm
+crypto_ctr_alloc
+crypto_cts_alloc
+crypto_ecb_alloc
+crypto_fpu_alloc
+crypto_gcm_alloc
+crypto_gcm_alloc_common
+crypto_gcm_base_alloc
+crypto_get_attr_type
+crypto_larval_alloc
+crypto_larval_lookup
+crypto_larval_wait
+crypto_lookup_aead
+crypto_lookup_skcipher
+crypto_pcbc_alloc
+crypto_rfc3686_alloc
+crypto_rfc4106_alloc
+crypto_rfc4309_alloc
+crypto_rfc4543_alloc
+crypto_spawn_alg
+crypto_spawn_tfm
+crypto_user_aead_alg
+crypto_user_skcipher_alg
+ctnetlink_create_conntrack
+ctrl_build_family_msg
+ctrl_build_mcgrp_msg
+cxgbi_check_route
+cxgbi_ep_connect
+cyttsp4_probe
+cyttsp_probe
+d_absolute_path
+d_add_ci
+db9_probe
+debug_css_alloc
+dentry_open
+__dentry_path
+dentry_path
+devcgroup_css_alloc
+devfreq_add_device
+device_create_vargs
+devm_backlight_device_register
+devm_clk_get
+devm_clk_register
+devm_ioremap_resource
+devm_lcd_device_register
+devm_of_pwm_get
+devm_pinctrl_get_select
+devm_pwm_get
+devm_regmap_field_alloc
+devm_regmap_init
+devm_regulator_get
+devm_reset_control_get
+devm_rtc_device_register
+devm_usb_get_phy_by_phandle
+devpts_mount
+devpts_pty_new
+d_hash_and_lookup
+dio_get_page
+dirty_cow_bottom_up
+dirty_cow_nnode
+dirty_cow_pnode
+dirty_cow_znode
+disk_seqf_start
+dlm_register_domain
+dl_seq_start
+dma_buf_attach
+dma_buf_export_named
+dma_buf_get
+dma_buf_map_attachment
+d_materialise_unique
+dm_block_manager_create
+dm_bufio_client_create
+dm_build_path_uevent
+dm_cache_metadata_open
+dm_hash_rename
+dm_io_client_create
+dm_kcopyd_client_create
+dm_pool_metadata_open
+dm_region_hash_create
+dm_sm_disk_create
+dm_sm_disk_open
+dm_sm_metadata_init
+dm_swap_table
+dm_tm_create
+do_add_page_to_bio
+d_obtain_alias
+doc_probe_device
+do_create
+do_file_open_root
+do_find_free_space
+do_open
+do_read_cache_page
+__d_path
+d_path
+drbd_nla_find_nested
+drbd_request_prepare
+drm_gem_map_dma_buf
+drm_gem_prime_import
+drm_prime_pages_to_sg
+drm_sysfs_create
+ds620_update_client
+dsa_switch_setup
+dummy_allocate_iso_context
+__d_unalias
+dwc3_alloc_one_event_buffer
+dw_dma_cyclic_prep
+dynamic_dname
+e100_request_firmware
+ebt_register_table
+ecm_alloc
+ecm_alloc_inst
+ecryptfs_do_create
+__ecryptfs_get_inode
+ecryptfs_lookup
+ecryptfs_mount
+edid_load
+eem_alloc
+eem_alloc_inst
+efivarfs_alloc_dentry
+efivarfs_lookup
+efs_get_parent
+efs_iget
+efs_nfs_get_inode
+emergency_read_begin
+enclosure_component_register
+enclosure_register
+encrypted_key_alloc
+eseqiv_alloc
+eventfd_ctx_fileget
+eventfd_fget
+eventfd_file_create
+exofs_get_page
+exofs_get_parent
+exofs_iget
+exofs_lookup
+exofs_mount
+exofs_new_inode
+exofs_nfs_get_inode
+exp_find_key
+exp_get_by_name
+exportfs_decode_fh
+ext2_acl_from_disk
+ext2_acl_to_disk
+ext2_get_acl
+ext2_get_inode
+ext2_get_page
+ext2_get_parent
+ext2_iget
+ext2_lookup
+ext2_new_inode
+ext2_nfs_get_inode
+ext3_acl_from_disk
+ext3_acl_to_disk
+ext3_get_acl
+ext3_get_parent
+ext3_iget
+ext3_journal_start_sb
+ext3_lookup
+ext3_new_inode
+ext3_nfs_get_inode
+ext3_orphan_get
+ext4_acl_from_disk
+ext4_acl_to_disk
+ext4_append
+ext4_ext_find_extent
+ext4_get_acl
+ext4_get_parent
+ext4_iget
+__ext4_journal_start_reserved
+__ext4_journal_start_sb
+ext4_lookup
+__ext4_new_inode
+ext4_nfs_get_inode
+ext4_orphan_get
+__ext4_read_dirblock
+extract_hostname
+extract_sharename
+f2fs_acl_from_disk
+f2fs_acl_to_disk
+f2fs_get_acl
+f2fs_get_parent
+f2fs_iget
+f2fs_lookup
+f2fs_new_inode
+f2fs_nfs_get_inode
+fanotify_add_new_mark
+fanotify_merge
+fat_build_inode
+fault_create_debugfs_attr
+fcoe_if_create
+fcoe_interface_create
+ff_dev_create
+__fh_to_dentry
+fib6_add_1
+fib_create_info
+fib_rules_register
+__file_cft
+file_open_root
+find_alloc_undo
+find_data_page
+find_devfreq_governor
+find_device_devfreq
+find_get_context
+find_hosted_bus
+find_keyring_by_name
+find_lively_task_by_vpid
+find_msg
+find_nfs_version
+find_subdir
+__flow_tbl_rehash
+__fmc_scan_sdb_tree
+follow_huge_addr
+follow_page_mask
+follow_trans_huge_pmd
+freeze_bdev
+freezer_css_alloc
+freq_reg_info_regd
+frontswap_register_ops
+__fscache_lookup_cache_tag
+fsm_init
+fsnotify_add_notify_event
+fsnotify_alloc_group
+fs_set_subtype
+ft_add_acl
+function_make
+fuse_d_add_directory
+fuse_get_dentry
+fuse_get_parent
+__fuse_get_req
+fuse_lookup
+fw_create_instance
+fwserial_claim_port
+g762_update_client
+gadget_config_name_strings_make
+gadgets_make
+gadget_strings_strings_make
+gc_probe
+generic_create_cred
+get_authorizer
+get_buffer
+get_cifs_acl_by_fid
+get_cifs_acl_by_path
+get_connect_authorizer
+get_cramfs_inode
+get_default_root
+__get_device_from_cb
+get_device_pmkids
+get_domain
+get_empty_filp
+get_fb_info
+get_free_i2c_dev
+geth_alloc
+geth_alloc_inst
+gether_connect
+gether_setup_name
+gether_setup_name_default
+get_highmem_page_buffer
+get_i2c
+get_key
+get_ldops
+get_lock_data_page
+get_mtd_device
+get_mtd_device_nm
+getname_flags
+get_net_ns_by_fd
+get_net_ns_by_pid
+get_new_cssid
+get_new_data_page
+get_node_page
+get_node_page_ra
+get_one_event
+__get_or_create_frag
+get_phy_device
+__get_policy_once
+_get_posix_acl
+get_raw_socket
+get_socket
+get_subdir
+get_sysctl
+get_tap_socket
+get_ticket_handler
+__get_txreq
+get_user_arg_ptr
+get_vfsmount_from_fd
+get_vlan
+gfs2_dirent_scan
+gfs2_dirent_search
+gfs2_dir_get_hash_table
+gfs2_dir_search
+gfs2_get_acl
+gfs2_get_dentry
+gfs2_inode_lookup
+__gfs2_lookup
+gfs2_lookup_by_inum
+gfs2_lookupi
+gfs2_lookup_simple
+gfs2_mount
+gfs2_mount_meta
+ghes_new
+gpio_keys_get_devtree_pdata
+gpio_leds_create_of
+gre_create
+gre_gso_segment
+gre_handle_offloads
+gru_alloc_gts
+gru_alloc_locked_gts
+gru_register_mmu_notifier
+gss_alloc_msg
+gss_create
+gss_create_cred
+gss_fill_context
+gss_setup_upcall
+halve
+hbcall_from_type
+__hci_cmd_sync_ev
+hci_connect
+hci_connect_acl
+hci_connect_le
+hci_connect_sco
+hci_get_cmd_complete
+hdlcdrv_register
+hfs_bmap_alloc
+hfs_bnode_create
+hfs_bnode_find
+hfs_bnode_split
+hfs_file_lookup
+hfs_lookup
+hfsplus_bmap_alloc
+hfsplus_bnode_create
+hfsplus_bnode_find
+hfsplus_file_lookup
+hfsplus_iget
+hfsplus_lookup
+hid_allocate_device
+hpfs_lookup
+hugetlb_cgroup_css_alloc
+hugetlb_file_setup
+hvc_alloc
+hwmon_device_register
+i2400m_get_device_info
+i2400m_msg_to_dev
+i2o_block_device_alloc
+i2o_block_request_alloc
+i2o_device_alloc
+i2o_iop_alloc
+i2o_msg_get
+i2o_msg_get_wait
+i2o_scsi_host_alloc
+i915_gem_context_get_hang_stats
+i915_gem_dmabuf_vmap
+i915_gem_map_dma_buf
+i915_gem_prime_import
+ialloc
+ib_alloc_fast_reg_mr
+ib_alloc_fast_reg_page_list
+ib_alloc_fmr
+ib_alloc_mw
+ib_alloc_xrcd
+ib_create_ah_from_wc
+ib_create_cm_id
+ib_create_fmr_pool
+ib_create_send_mad
+ib_create_srq
+ib_fmr_pool_map_phys
+__ib_open_qp
+ib_open_qp
+ib_redirect_mad_qp
+ib_register_mad_agent
+ib_register_mad_snoop
+ib_reg_phys_mr
+ib_sa_join_multicast
+ib_ucm_ctx_get
+ib_umem_get
+ib_uverbs_alloc_event_file
+ib_uverbs_unmarshall_recv
+icmp6_dst_alloc
+icmp_route_lookup
+icmpv6_route_lookup
+idle_thread_get
+id_map_alloc
+idr_replace
+ieee80211_add_iface
+ieee80211_key_alloc
+ieee80211_new_chanctx
+iget_xattr
+iio_channel_get_all
+iio_channel_get_all_cb
+iio_channel_get_sys
+ina209_update_device
+ina2xx_update_device
+inet_diag_lock_handler
+inet_frag_find
+inet_gso_segment
+inflate
+init_data_container
+init_desc
+init_inode_metadata
+init_ipath
+init_sdesc
+inotify_new_group
+input_devices_seq_start
+input_handlers_seq_start
+insert_with_overflow
+instance_create
+intel_framebuffer_create
+intel_framebuffer_create_for_mode
+intel_modeset_pipe_config
+intel_user_framebuffer_create
+internal_dev_create
+ioctx_alloc
+iommu_group_alloc
+ip6addrlbl_alloc
+ip6_dst_lookup_flow
+ip6mr_vif_seq_start
+ip6_sk_dst_lookup_flow
+ip6t_register_table
+ipath_alloc_devdata
+ipath_alloc_fmr
+ipath_alloc_pd
+ipath_alloc_ucontext
+ipath_create_ah
+ipath_create_cq
+ipath_create_qp
+ipath_create_srq
+ipath_get_dma_mr
+ipath_reg_phys_mr
+ipath_reg_user_mr
+ipcctl_pre_down_nolock
+ipc_lock
+ipc_lock_check
+ipc_obtain_object
+ipc_obtain_object_check
+ipddp_init
+ip_make_skb
+ipmr_mfc_seq_start
+ipmr_rt_fib_lookup
+ipmr_vif_seq_start
+ipoib_add_port
+ipoib_create_ah
+__ip_route_output_key
+ipt_register_table
+__ip_tunnel_create
+ipv6_add_addr
+ipv6_gso_segment
+ipv6_renew_options
+iscsi_iser_ep_connect
+iscsit_add_np
+iscsit_add_tiqn
+iscsit_tpg_add_network_portal
+isert_device_find_by_ib_dev
+isofs_export_get_parent
+isofs_export_iget
+isofs_iget
+isofs_lookup
+isp1760_register
+iwch_ah_create
+iwch_allocate_pd
+iwch_alloc_fast_reg_mr
+iwch_alloc_fastreg_pbl
+iwch_alloc_mw
+iwch_alloc_ucontext
+iwch_create_cq
+iwch_create_qp
+iwch_register_phys_mem
+iwch_reg_user_mr
+iw_create_cm_id
+iwl_drv_start
+jbd2__journal_start
+jc42_update_device
+jffs2_acl_from_medium
+jffs2_acl_to_medium
+jffs2_add_physical_node_ref
+jffs2_gc_fetch_inode
+jffs2_get_acl
+jffs2_iget
+jffs2_lookup
+jffs2_new_inode
+jffs2_setup_xattr_datum
+jffs2_write_dirent
+jffs2_write_dnode
+jfs_get_acl
+jfs_iget
+jfs_lookup
+jfs_nfs_get_inode
+journal_start
+kern_path_create
+kern_path_locked
+key_alloc
+key_create_or_update
+key_get_instantiation_authkey
+key_lookup
+keyring_alloc
+keyring_search
+keyring_search_aux
+__keyring_search_one
+key_type_lookup
+kmemleak_seq_start
+kvm_create_vm
+kvm_pfn_to_page
+l2cap_create_basic_pdu
+l2cap_create_connless_pdu
+l2cap_create_iframe_pdu
+l2cap_create_sframe_pdu
+l2cap_sock_alloc_skb_cb
+lbs_cfg_alloc
+__lbs_cmd_async
+__lbtf_cmd_async
+lcd_device_register
+lease_alloc
+lio_target_call_addnptotpg
+lio_target_call_coreaddtiqn
+lio_target_make_nodeacl
+lm75_update_device
+lm80_update_device
+load_msg
+lockd_create_svc
+lock_mount
+logfs_get_dd_page
+logfs_get_sb_device
+__logfs_iget
+logfs_mount
+logfs_new_inode
+logfs_new_meta_inode
+logfs_read_meta_inode
+lookup_bdev
+lookup_dcache
+__lookup_free_space_inode
+lookup_one_len
+lookup_real
+lookup_user_key
+lookup_vport
+lookup_znode
+loop_probe
+ltc4151_update_device
+ltc4261_update_device
+ltree_add_entry
+lzo_alloc_workspace
+lzo_init
+mac802154_add_iface
+macvtap_get_socket
+make_blackhole
+make_cluster
+make_comm
+make_netconsole_target
+make_node
+make_receive_sock
+_make_request
+make_send_sock
+make_space
+map_extent_mft_record
+map_mft_record_page
+matrix_keypad_parse_dt
+max1668_update_device
+max6639_update_device
+max6697_update_device
+max77686_get_regmap
+max77693_get_regmap
+max8998_i2c_parse_dt_pdata
+maybe_deliver
+__mb_cache_entry_find
+mca_cannibalize
+md_import_device
+mem_cgroup_css_alloc
+memdup_user
+mesh_path_add
+mgag200_user_framebuffer_create
+minix_iget
+minix_lookup
+__mkroute_output
+mlx4_alloc_cmd_mailbox
+mlx4_ib_alloc_fast_reg_mr
+mlx4_ib_alloc_fast_reg_page_list
+mlx4_ib_alloc_mw
+mlx4_ib_alloc_pd
+mlx4_ib_alloc_ucontext
+mlx4_ib_alloc_xrcd
+mlx4_ib_create_ah
+mlx4_ib_create_cq
+mlx4_ib_create_qp
+mlx4_ib_create_srq
+mlx4_ib_fmr_alloc
+mlx4_ib_get_dma_mr
+mlx4_ib_reg_user_mr
+mlx5_alloc_cmd_msg
+mlx5_ib_alloc_fast_reg_mr
+mlx5_ib_alloc_fast_reg_page_list
+mlx5_ib_alloc_pd
+mlx5_ib_alloc_ucontext
+mlx5_ib_alloc_xrcd
+mlx5_ib_create_ah
+mlx5_ib_create_cq
+mlx5_ib_create_qp
+mlx5_ib_create_srq
+mlx5_ib_get_dma_mr
+mlx5_ib_reg_user_mr
+mm_access
+mmc_alloc_card
+mmc_blk_alloc_req
+mmc_blk_ioctl_copy_from_user
+mon_text_read_wait
+mount_bdev
+mount_fs
+mount_mtd
+mount_mtd_aux
+mount_nodev
+mount_ns
+mount_pseudo
+mount_single
+mount_subtree
+mount_subvol
+mousedev_create
+mpls_gso_segment
+__mpol_dup
+mpol_new
+mqueue_get_inode
+mqueue_mount
+m_start
+mthca_ah_create
+mthca_alloc_fmr
+mthca_alloc_mailbox
+__mthca_alloc_mtt
+mthca_alloc_pd
+mthca_alloc_ucontext
+mthca_create_cq
+mthca_create_qp
+mthca_create_srq
+mthca_get_dma_mr
+mthca_init_user_db_tab
+mthca_reg_phys_mr
+mthca_reg_user_mr
+mwifiex_add_virtual_intf
+nand_get_flash_type
+nbd_find_request
+ncp_lookup
+__neigh_create
+nes_alloc_fast_reg_mr
+nes_alloc_fast_reg_page_list
+nes_alloc_mw
+nes_alloc_pd
+nes_alloc_ucontext
+nes_create_ah
+nes_create_cq
+nes_create_qp
+nes_reg_phys_mr
+nes_reg_user_mr
+net2272_probe_init
+netdev_create
+netlink_getsockbyfilp
+netlink_getsockbyportid
+new_mountpoint
+new_nbp
+new_node_page
+newpart
+new_read
+new_simple_dir
+new_vmap_block
+nfc_llcp_allocate_snl
+__nf_conntrack_alloc
+nfcsim_init_dev
+nfs3_get_cached_acl
+nfs3_proc_getacl
+_nfs41_free_stateid
+_nfs41_proc_sequence
+nfs4_acl_posix_to_nfsv4
+nfs4_alloc_client
+nfs4_alloc_slot
+nfs4_blk_decode_device
+nfs4_blk_get_deviceinfo
+nfs4blocklayout_register_sb
+nfs4_create_referral_server
+nfs4_create_sec_client
+nfs4_create_server
+nfs4_do_open
+nfs4_do_unlck
+nfs4_find_or_create_slot
+nfs4_init_client
+nfs4_insert_state_owner_locked
+nfs4_label_alloc
+_nfs4_opendata_reclaim_to_nfs4_state
+_nfs4_opendata_to_nfs4_state
+nfs4_open_recoverdata_alloc
+nfs4_pathname_string
+nfs4_proc_layoutget
+nfs4_proc_lookup_mountpoint
+nfs4_remote_referral_mount
+nfs4_state_find_open_context
+nfs4_try_open_cached
+nfs_alloc_client
+nfs_async_rename
+nfs_callback_create_svc
+nfs_clone_server
+nfs_create_request
+nfs_create_server
+nfsd4_cld_register_sb
+nfs_d_automount
+nfsd_get_posix_acl
+nfs_do_refmount
+nfs_do_root_mount
+nfs_do_submount
+nfs_find_and_lock_request
+nfs_follow_referral
+nfs_follow_remote_path
+nfs_found_client
+nfs_fs_mount
+nfs_get_lock_context
+nfs_get_root
+nfs_idmap_request_key
+nfs_init_client
+nfs_lookup
+nf_sockopt_find
+nfs_path
+nfs_readdir_get_array
+nfs_submount
+nfs_try_mount_request
+nfs_try_to_update_request
+nilfs_get_dentry
+nilfs_get_page
+nilfs_get_parent
+nilfs_iget
+nilfs_iget_for_gc
+nilfs_lookup
+nilfs_mount
+nilfs_new_inode
+nl80211_parse_connkeys
+__nlm_async_call
+nlmclnt_init
+nnode_lookup
+notifier_err_inject_init
+nouveau_connector_create
+nouveau_gem_prime_import_sg_table
+nouveau_gem_prime_vmap
+nouveau_user_framebuffer_create
+ntfs_attr_find_vcn_nolock
+ntfs_attr_iget
+ntfs_cluster_alloc
+ntfs_get_parent
+ntfs_iget
+ntfs_index_iget
+ntfs_lookup
+ntfs_map_page
+ntfs_mapping_pairs_decompress
+ntfs_mft_record_alloc
+ntfs_nfs_get_inode
+ntfs_rl_realloc
+ntfs_runlists_merge
+nv04_pm_clocks_pre
+nv40_pm_clocks_pre
+nv50_pm_clocks_pre
+nva3_pm_clocks_pre
+nvc0_pm_clocks_pre
+nvme_create_queue
+nvme_map_user_pages
+o2hb_heartbeat_group_make_item
+o2hb_setup_one_bio
+o2nm_cluster_group_make_group
+o2nm_node_group_make_item
+oaktrail_rfkill_new
+objlayout_alloc_lseg
+ocfs2_acl_from_xattr
+ocfs2_acl_to_xattr
+ocfs2_begin_quota_recovery
+ocfs2_extend_local_quota_file
+ocfs2_find_free_entry
+ocfs2_get_acl
+ocfs2_get_acl_nolock
+ocfs2_get_dentry
+ocfs2_get_parent
+ocfs2_iget
+ocfs2_iop_get_acl
+ocfs2_local_quota_add_chunk
+ocfs2_lookup
+ocfs2_start_trans
+ocfs2_zero_start_ordered_transaction
+ocrdma_alloc_lkey
+ocrdma_alloc_pd
+ocrdma_alloc_ucontext
+ocrdma_create_ah
+ocrdma_create_cq
+ocrdma_create_qp
+ocrdma_create_srq
+ocrdma_reg_user_mr
+of_clk_get_by_name
+of_get_fixed_voltage_config
+of_get_gpio_regulator_config
+of_node_to_pwmchip
+of_pwm_get
+of_pwm_simple_xlate
+of_pwm_xlate_with_flags
+__of_usb_find_phy
+ohci_allocate_iso_context
+omap_get_control_dev
+omfs_find_entry
+omfs_iget
+omfs_lookup
+omfs_new_inode
+omfs_scan_list
+open_exec
+open_mtd_by_chdev
+open_root_dentry
+open_ubi
+open_xa_dir
+open_xa_root
+opp_find_freq_ceil
+opp_find_freq_floor
+opp_get_notifier
+osdmap_apply_incremental
+osdmap_decode
+osduld_info_lookup
+osduld_path_lookup
+ovs_dp_cmd_build_info
+ovs_flow_actions_alloc
+ovs_flow_alloc
+ovs_flow_cmd_build_info
+ovs_vport_add
+ovs_vport_alloc
+ovs_vport_cmd_build_info
+oxu_create
+p9_client_attach
+p9_client_create
+p9_client_getattr_dotl
+p9_client_prepare_req
+p9_client_rpc
+p9_client_stat
+p9_client_walk
+p9_client_xattrwalk
+p9_client_zc_rpc
+p9_conn_create
+p9_fid_create
+p9_idpool_create
+p9_tag_alloc
+padata_get_next
+parse_acl_data
+parse_path
+parse_priority_group
+path_openat
+pciserial_init_ports
+pcpu_build_alloc_info
+pcrypt_alloc
+pcrypt_alloc_instance
+pem_update_device
+perf_cgroup_css_alloc
+perf_event_alloc
+perf_event_create_kernel_counter
+perf_init_event
+persistent_ram_new
+pfkey_msg2xfrm_state
+pfkey_xfrm_policy2msg_prep
+__pfkey_xfrm_state2msg
+phy_attach
+phy_connect
+platform_create_bundle
+platform_device_register_full
+pm_ctrl_init
+pn533_send_cmd_sync
+pnfs_layout_process
+pnode_lookup
+pool_create
+__pool_find
+posix_acl_from_disk
+posix_acl_from_mode
+posix_acl_from_xattr
+posix_acl_to_disk
+posix_state_to_acl
+process_lvol
+proc_lookup_de
+proc_lookupfd_common
+proc_map_files_lookup
+proc_mount
+proc_ns_dir_lookup
+proc_ns_fget
+proc_ns_follow_link
+proc_ns_get_dentry
+proc_pident_lookup
+proc_pid_follow_link
+proc_pid_lookup
+proc_sys_lookup
+proc_task_lookup
+proc_tgid_net_lookup
+psb_framebuffer_create
+psb_user_framebuffer_create
+pt1_alloc_adapter
+ptm_unix98_lookup
+ptp_clock_register
+ptrace_get_task_struct
+ptrace_register_breakpoint
+pts_unix98_lookup
+pwm_get
+pwm_request
+pwm_request_from_chip
+qdisc_alloc
+qdisc_get_stab
+qib_alloc_devdata
+qib_alloc_fast_reg_page_list
+qib_alloc_pd
+qib_alloc_ucontext
+qib_create_ah
+qib_create_cq
+qib_create_qp
+qib_create_qp0_ah
+qib_create_srq
+qib_init_iba6120_funcs
+qib_init_iba7220_funcs
+qib_init_iba7322_funcs
+qib_reg_user_mr
+qla1280_request_firmware
+qla4xxx_ep_connect
+qnx4_iget
+qnx6_iget
+qnx6_lookup
+quotactl_block
+r2hb_hb_group_make_item
+r2nm_cluster_group_make_group
+r2nm_node_group_make_item
+radeon_gem_prime_import_sg_table
+radeon_gem_prime_vmap
+radeon_user_framebuffer_create
+raid0_takeover
+raid0_takeover_raid1
+raid0_takeover_raid10
+raid0_takeover_raid45
+raid10_takeover
+raid10_takeover_raid0
+raid1_takeover
+raid45_takeover_raid0
+raid4_takeover
+raid5_takeover
+raid5_takeover_raid1
+raid5_takeover_raid6
+raid6_takeover
+rbd_client_create
+rbd_dev_v2_snap_name
+rb_move_tail
+rdma_alloc_frmr
+rdma_create_id
+__rds_conn_create
+rds_ib_alloc_fmr
+rds_ib_create_mr_pool
+rds_ib_get_mr
+rds_iw_alloc_mr
+rds_iw_create_mr_pool
+rds_iw_get_mr
+rds_iw_map_scatterlist
+rds_message_map_pages
+read_add_inode
+__read_cache_page
+read_link
+reg_copy_regd
+reg_create
+__register_chrdev_region
+_register_divider
+register_ip_vs_app
+register_session
+register_wide_hw_breakpoint
+regmap_field_alloc
+regmap_init
+regmap_mmio_gen_context
+_regulator_get
+regulator_register
+reg_umr
+reiserfs_get_acl
+reiserfs_get_page
+reiserfs_get_parent
+reiserfs_iget
+reiserfs_lookup
+remove_pmkid
+request_asymmetric_key
+request_key
+request_key_and_link
+request_key_auth_new
+request_key_with_auxdata
+reserve_sfa_size
+reset_control_get
+resolv_usage_page
+rndis_alloc
+rndis_alloc_inst
+romfs_iget
+romfs_lookup
+romfs_mount
+rom_init
+__root_device_register
+rpcauth_create
+rpcauth_lookup_credcache
+rpcb_create
+rpc_bind_new_program
+__rpc_clone_client
+rpc_create
+rpc_lookup
+__rpc_lookup_create_exclusive
+rpc_mkpipe_data
+rpc_new_client
+rpc_new_task
+rpcrdma_create_id
+rpc_verify_header
+rp_find_vq
+rqst_exp_find
+rqst_exp_get_by_name
+rtc_device_register
+rtl8139_init_board
+rtm_to_ifaddr
+rtnl_create_link
+rxrpc_accept_call
+rxrpc_alloc_client_call
+rxrpc_find_peer
+rxrpc_get_bundle
+rxrpc_get_client_call
+rxrpc_get_null_key
+rxrpc_get_peer
+rxrpc_get_transport
+rxrpc_incoming_call
+rxrpc_incoming_connection
+rxrpc_kernel_begin_call
+rxrpc_lookup_local
+rxrpc_name_to_transport
+sbp_get_lun_from_tpg
+sbp_make_nodeacl
+sbp_make_tpg
+sbp_make_tport
+sbp_management_agent_register
+sbp_session_create
+sbp_target_agent_register
+scan_for_dirty
+scan_for_leb_for_idx
+scan_get_nnode
+scan_get_pnode
+sch5627_update_device
+sch5636_update_device
+sched_create_group
+scrub_setup_ctx
+__scsi_add_device
+scsi_devinfo_lookup_by_key
+sctp_datamsg_from_user
+sdhci_alloc_host
+sdhci_pci_probe_slot
+sdhci_pltfm_init
+sdio_alloc_func
+search_process_keyrings
+securityfs_create_file
+select_bad_process
+select_one_root
+sel_make_dir
+sem_obtain_lock
+seqiv_alloc
+setup_conf
+setup_essiv_cpu
+setup_vq
+sfi_check_table
+sg_alloc
+sget
+sg_get_dev
+shmem_file_setup
+shmem_get_parent
+shmem_read_mapping_page_gfp
+simple_get_bytes
+simple_get_netobj
+simple_lookup
+simple_transaction_get
+__skb_gso_segment
+skb_mac_gso_segment
+skb_segment
+skb_udp_tunnel_segment
+skcipher_geniv_alloc
+smb2_setup_async_request
+smb2_setup_request
+sm_get_zone
+smm665_update_device
+sock_alloc_file
+solo_enc_alloc
+split
+split_token_from_name
+squashfs_decompressor_init
+squashfs_export_iget
+squashfs_iget
+squashfs_read_fragment_index_table
+squashfs_read_id_index_table
+squashfs_read_inode_lookup_table
+squashfs_read_table
+squashfs_read_xattr_id_table
+squashfs_xz_init
+srp_rport_add
+srpt_make_nodeacl
+srpt_make_tpg
+srpt_make_tport
+ssb_hcd_create_pdev
+ssc_request
+s_start
+start_transaction
+stmpe_keypad_of_probe
+strndup_user
+svc_bc_create_socket
+svc_create_socket
+svc_get_next_xprt
+svc_prepare_thread
+svc_rdma_create
+svc_setup_socket
+__svc_xpo_create
+svm_create_vcpu
+syscon_node_to_regmap
+syscon_regmap_lookup_by_compatible
+syscon_regmap_lookup_by_pdevname
+syscon_regmap_lookup_by_phandle
+sysctl_getname
+sysctl_head_grab
+sysfs_lookup
+sysfs_mount
+sysv_iget
+sysv_lookup
+sysv_new_inode
+t4_uld_add
+target_core_call_addhbatotarget
+target_core_make_subdev
+target_core_mappedlun_stat_mkdir
+target_core_port_stat_mkdir
+target_core_register_fabric
+target_core_stat_mkdir
+target_fabric_configfs_init
+target_fabric_make_lun
+target_fabric_make_mappedlun
+target_fabric_make_nodeacl
+target_fabric_make_np
+target_fabric_make_tpg
+target_fabric_make_wwn
+tca6507_led_dt_init
+tcf_action_get_1
+tcf_action_init
+tcf_action_init_1
+tcf_hash_create
+tcm_loop_make_naa_tpg
+tcm_loop_make_scsi_hba
+tcm_qla2xxx_make_lport
+tcm_qla2xxx_make_nodeacl
+tcm_qla2xxx_make_tpg
+tcm_qla2xxx_npiv_make_lport
+tcm_qla2xxx_npiv_make_tpg
+tcp_tso_segment
+textsearch_prepare
+tgfx_probe
+thermal_cooling_device_register
+thermal_zone_device_register
+thermal_zone_get_zone_by_name
+timers_start
+tipc_alloc_conn
+tmp401_update_device
+tomoyo_get_absolute_path
+tomoyo_get_dentry_path
+tomoyo_get_local_path
+tracepoint_entry_add_probe
+tracepoint_entry_remove_probe
+tracepoint_remove_probe
+__tracing_open
+transport_init_session
+try_get_usb_function_instance
+try_location
+ttm_dma_pool_init
+__tty_alloc_driver
+tty_init_dev
+tty_ldisc_get
+tty_lookup_driver
+tty_open_current_tty
+tty_register_device_attr
+tun_alloc_skb
+tun_get_socket
+ubi_early_get_peb
+ubifs_get_nnode
+ubifs_get_pnode
+ubifs_iget
+ubifs_load_znode
+ubifs_lookup
+ubifs_lpt_lookup
+ubifs_lpt_lookup_dirty
+ubifs_mount
+ubifs_new_inode
+ubifs_read_sb_node
+ubifs_recover_leb
+ubifs_recover_log_leb
+ubifs_scan
+ubifs_start_scan
+ubifs_tnc_next_ent
+ubi_open_volume
+ubi_open_volume_nm
+ubi_open_volume_path
+_ucma_find_context
+udf_get_parent
+udf_lookup
+udf_nfs_get_inode
+udl_fb_user_fb_create
+udl_gem_prime_import
+udp4_ufo_fragment
+udp6_ufo_fragment
+ufs_get_locked_page
+ufs_get_page
+ufs_get_parent
+ufs_iget
+ufs_lookup
+ufs_new_inode
+ufs_nfs_get_inode
+u_memcpya
+unix_gid_find
+__unlink_start_trans
+unpack_dfa
+unpack_profile
+unx_create_cred
+update_pmkid
+usb_cdc_wdm_register
+__usb_find_phy
+__usb_find_phy_dev
+usb_get_function_instance
+usb_gstrings_attach
+use_block_rsv
+user_path_parent
+uvesafb_vbe_state_save
+uwb_rc_neh_add
+V1_minix_iget
+V2_minix_iget
+v4l2_clk_find
+v4l2_clk_register
+v4l2_m2m_ctx_init
+v4l2_m2m_init
+v9fs_create
+v9fs_fid_lookup_with_uid
+__v9fs_get_acl
+v9fs_get_inode
+v9fs_mount
+v9fs_qid_iget
+v9fs_qid_iget_dotl
+v9fs_session_init
+v9fs_vfs_lookup
+v9fs_writeback_fid
+vb2_dc_alloc
+vb2_dc_attach_dmabuf
+vb2_dc_dmabuf_ops_map
+vb2_dc_get_userptr
+vb2_dma_contig_init_ctx
+vb2_vmalloc_attach_dmabuf
+verdict_instance_lookup
+vfat_lookup
+vfio_create_group
+vfio_group_create_device
+vfio_iommu_type1_open
+vfs_kern_mount
+vhost_net_ubuf_alloc
+video_output_register
+virtio_find_single_vq
+vma_to_resize
+vmci_ctx_create
+vm_setup_vq
+vmstat_start
+vmw_kms_fb_create
+vmx_create_vcpu
+vxfs_get_page
+__vxfs_iget
+vxfs_iget
+vxfs_lookup
+vxlan_socket_create
+wait_on_page_read
+wakelock_lookup_add
+wil_cfg80211_init
+wil_if_alloc
+wimax_gnl_re_state_change_alloc
+wimax_msg_alloc
+wl1251_alloc_hw
+wl12xx_get_platform_data
+wlcore_alloc_hw
+x509_cert_parse
+xattr_lookup
+xen_blkif_alloc
+xenbus_dev_request_and_reply
+xen_copy_pss_data
+xennet_create_dev
+xenvif_alloc
+xfrm6_dst_lookup
+xfrm_alloc_dst
+xfrm_bundle_lookup
+__xfrm_dst_lookup
+xfrm_lookup
+xfrm_policy_lookup_bytype
+xfrm_policy_netlink
+xfrm_resolve_and_create_bundle
+xfrm_sk_policy_lookup
+xfrm_state_netlink
+xfs_acl_from_disk
+xfs_fs_get_parent
+xfs_get_acl
+xfs_handle_to_dentry
+xfs_nfs_get_inode
+xfs_vn_ci_lookup
+xfs_vn_lookup
+xlog_alloc_log
+xpc_create_gru_mq_uv
+xprt_create_transport
+xprt_dynamic_alloc_slot
+xprt_setup_rdma
+xs_create_sock
+xs_setup_bc_tcp
+xs_setup_local
+xs_setup_tcp
+xs_setup_udp
+xs_setup_xprt
+xs_talkv
+xt_find_match
+xt_find_table_lock
+xt_find_target
+xt_hook_link
+xt_register_table
+zlib_alloc_workspace
+zlib_init
--- /dev/null	Fri Dec 21 15:00:23 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.returns_err_ptr.remove	Fri Dec 21 15:00:23 2018
@@ -0,0 +1,3 @@
+jedec_probe
+find_inode
+lookup_extent_mapping
--- /dev/null	Fri Dec 21 15:00:23 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.returns_held_funcs	Fri Dec 21 15:00:23 2018
@@ -0,0 +1,23 @@
+// list of functions that return a held device.
+// generated by `gen_returns_held.sh`
+dev_get_by_index
+dev_get_by_macvtap_minor
+dev_get_by_name
+dev_to_net_device
+dn_dev_get_default
+find_lec_by_itfnum
+get_vlan
+ieee802154_get_dev
+ieee802154_nl_get_dev
+ip6mr_reg_vif
+__ip_dev_find
+ipmr_new_tunnel
+ipmr_reg_vif
+mac802154_add_iface
+nr_ax25_dev_get
+nr_dev_first
+nr_dev_get
+phonet_device_get
+phonet_route_output
+rose_dev_get
+x25_dev_get
--- /dev/null	Fri Dec 21 15:00:23 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.rosenberg_funcs	Fri Dec 21 15:00:23 2018
@@ -0,0 +1,73 @@
+// list of copy_to_user function and buffer parameters.
+// generated by `gen_rosenberg_funcs.sh`
+bits_to_user 0
+cfs_trace_copyout_string 2
+compat_copy_entry_to_user 0
+compat_filldir 1
+compat_filldir64 1
+copy_gctl_to_user 2
+copy_msqid_to_user 1
+copy_semid_to_user 1
+copy_shmid_to_user 1
+copy_shminfo_to_user 1
+copy_to 1
+__copy_to_user 1
+copy_to_user 1
+crystalhd_user_data 1
+csum_partial_copy_to_user 1
+diva_os_copy_to_user 1
+diva_os_copy_to_user 2
+divas_maint_read 1
+divas_maint_write 1
+divas_um_idi_copy_to_user 1
+drm_copy_field 2
+echo_copyout_lsm 0
+fat_compat_ioctl_filldir 1
+fat_ioctl_filldir 1
+fd_copyout 1
+filldir 1
+filldir64 1
+gnet_stats_copy 2
+gnet_stats_copy_app 1
+gnet_stats_copy_queue 1
+gru_user_copy_handle 1
+ib_copy_to_udata 1
+kernel_termios_to_user_termios 1
+kernel_termios_to_user_termios_1 1
+kfifo_copy_to_user 1
+__kfifo_to_user 1
+libcfs_ioctl_popdata 1
+maint_read_write 0
+memcpy_toiovec 1
+memcpy_toiovecend 1
+mic_virtio_copy_to_user 1
+mic_vringh_copy 2
+nla_put 3
+nla_put_string 2
+nvme_trans_copy_to_user 1
+nvme_trans_supported_vpd_pages 2
+nvme_trans_unit_serial_page 2
+obd_ioctl_popdata 1
+putused_user 1
+put_v4l2_input32 0
+put_v4l2_pix_format 0
+put_v4l2_pix_format_mplane 0
+put_v4l2_sliced_vbi_format 0
+put_v4l2_vbi_format 0
+seq_copy_in_user 1
+set_arg 1
+set_fd_set 2
+str_to_user 0
+uinput_str_to_user 1
+__videobuf_copy_stream 1
+__videobuf_copy_to_user 1
+xdi_copy_to_user 1
+xdi_copy_to_user 2
+xfer_to_user 1
+xfrm_mark_put 1
+xfs_bulkstat_one_fmt 3
+xfs_getbmap_format 1
+xfs_getbmapx_format 1
+xfs_inumbers_fmt 1
+xt_compat_match_to_user 0
+xt_compat_target_to_user 0
--- /dev/null	Fri Dec 21 15:00:23 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.silenced_functions	Fri Dec 21 15:00:23 2018
@@ -0,0 +1,12 @@
+/* Don't print anything from these functions */
+atomic_dec_and_test
+atomic_inc_and_test
+atomic64_dec_and_test
+atomic_sub_and_test
+test_and_clear_bit
+test_and_set_bit
+__copy_to_user_nocheck
+__copy_from_user_nocheck
+arch_static_branch
+__static_cpu_has
+__read_once_size
--- /dev/null	Fri Dec 21 15:00:23 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.sizeof_param	Fri Dec 21 15:00:23 2018
@@ -0,0 +1,472 @@
+// list of function parameters that are the size of a buffer.
+// generated by `gen_sizeof_param.sh`
+access_process_vm 3 2
+acpi_os_unmap_memory 1 0
+add_device_randomness 1 0
+add_numbered_child 4 3
+adpt_i2o_post_wait 2 1
+adpt_i2o_query_scalar 5 4
+adv7170_write_block 2 1
+adv7175_write_block 2 1
+af9013_write_ofsm_regs 3 2
+af9015_read_regs 3 2
+af9033_rd_regs 3 2
+anysee_ctrl_msg 2 1
+anysee_ctrl_msg 4 3
+asd_read_flash_seg 3 1
+asd_read_ocm_seg 3 1
+async_set_registers 2 3
+at76_get_mib 3 2
+ata_dev_config_ncq 2 1
+ata_exec_internal 5 4
+ata_id_c_string 3 1
+ath10k_dbg_dump 4 3
+ath10k_pci_diag_write_mem 3 2
+ath6kl_init_get_fwcaps 2 1
+ath6kl_wmi_add_wow_pattern_cmd 3 5
+ath9k_hw_name 2 1
+atmel_copy_to_card 3 2
+bch_bkey_to_text 1 0
+bch_btree_to_text 1 0
+be_roce_mcc_cmd 2 1
+be_wrb_cmd_hdr_prepare 3 0
+be_wrb_hdr_prepare 1 0
+bitmap_scnprintf 1 0
+blkg_path 2 1
+bluecard_read 3 2
+bnep_send 2 1
+bnx2fc_initiate_els 3 2
+brcmf_fil_bsscfg_data_set 3 2
+brcmf_fil_iovar_data_get 3 2
+bt819_write_block 2 1
+bt_get_result 2 1
+btrfs_insert_item 4 3
+bt_start_transaction 2 1
+__builtin_memset 2 0
+bulk_w 3 2
+calc_hmac 2 1
+calc_mic_tx_frag 2 1
+ceph_osdmap_state_str 1 0
+ceph_x_encrypt 4 3
+cfg80211_get_p2p_attr 4 3
+cfg80211_tx_mlme_mgmt 2 1
+ckhdid_printf 1 0
+__clear_user 1 0
+clear_user 1 0
+cmd_complete 5 4
+cmsghdr_from_user_compat_to_kern 3 2
+_config_request 5 4
+console_cont_flush 1 0
+__copy_from_user 2 0
+copy_from_user 2 0
+__copy_from_user_inatomic 2 0
+copy_from_user_nmi 2 0
+copy_in_user 2 0
+copy_in_user 2 1
+__copy_to_user 2 1
+copy_to_user 2 1
+cpulist_scnprintf 1 0
+cpumask_scnprintf 1 0
+create_syslog_header 2 1
+csio_enqueue_evt 3 2
+csio_hostname 1 0
+csio_osname 1 0
+csum_partial 1 0
+cx18_eeprom_dump 2 1
+cxd2820r_rd_regs 3 2
+cxusb_ctrl_msg 3 2
+cyapa_i2c_reg_write_block 2 3
+cyttsp4_adap_read 2 3
+dbg_chgconf 2 1
+dbg_chgstat 1 0
+dbg_command_buf 1 0
+dbg_intr_buf 1 0
+dbg_port_buf 1 0
+dbg_regstat 1 0
+dbg_status_buf 1 0
+derived_key_decrypt 2 1
+derived_key_encrypt 2 1
+dgrp_dpa 2 1
+dgrp_monitor 2 1
+__d_head 1 0
+digsig_verify_rsa 4 3
+DIVA_DIDD_Read 1 0
+dma_free_attrs 1 2
+dma_map_single_attrs 2 1
+dmi_format_ids 1 0
+domain_flush_cache 2 1
+d_path 2 1
+ds2780_battery_io 3 1
+ds2780_write 3 1
+ds2781_battery_io 3 1
+ds2781_write 3 1
+ds_recv_data 2 1
+ds_recv_status_nodump 3 2
+dst_put_ci 2 1
+dump_emit 2 1
+dvb_play_kernel 2 1
+early_iounmap 1 0
+ec_transaction 2 1
+edac_dimm_info_location 2 1
+edt_ft5x06_ts_readwrite 1 2
+edt_ft5x06_ts_readwrite 3 4
+efx_mcdi_rpc 3 2
+efx_mcdi_rpc 5 4
+efx_mcdi_rpc_finish 4 3
+enc28j60_mem_read 2 3
+evergreen_hdmi_update_avi_infoframe 2 1
+fast_mix 2 1
+fcoe_wwn_to_str 2 1
+fill_note 3 4
+frag_safe_skb_hp 2 3
+fw_csr_string 3 2
+garmin_write_bulk 2 1
+get_atrandom_bytes 1 0
+get_fw_name 2 1
+get_jack_mode_name 3 2
+get_modalias 2 1
+get_name 3 1
+get_random_bytes 1 0
+get_registers 2 3
+get_rhf_errstring 2 1
+gnet_stats_copy 3 2
+gru_get_cb_exception_detail_str 3 2
+gru_send_message_gpa 2 1
+gspca_frame_add 3 2
+h5_link_control 2 1
+__hci_cmd_sync 2 3
+hci_req_add 2 3
+hdmi_audio_infoframe_pack 2 1
+hdmi_avi_infoframe_pack 2 1
+hdmi_print_pcm_rates 2 1
+hex_dump_to_buffer 1 0
+hex_dump_to_buffer 5 4
+hfa384x_from_aux 2 3
+hfa384x_from_bap 3 2
+hfa384x_to_aux 2 3
+hp_wmi_perform_query 3 2
+__hw_addr_add 2 1
+i2400m_bm_cmd 2 1
+i2400m_msg_check_status 2 1
+i2400m_msg_to_dev 2 1
+__i2400mu_send_barker 2 1
+i2c_master_recv 2 1
+i2c_master_send 2 1
+i2c_read_demod_bytes 3 2
+i2c_read_eeprom 4 3
+i2c_smbus_read_i2c_block_data 2 3
+i2c_smbus_write_i2c_block_data 2 3
+i2c_w 3 2
+i2c_write_demod_bytes 2 1
+i2o_parm_issue 3 2
+i2o_parm_table_get 7 6
+ib_copy_to_udata 2 1
+ic_bootp_string 3 0
+init_cdrom_command 2 1
+input_bits_to_string 1 0
+intel_sdvo_get_value 3 2
+intel_sdvo_write_infoframe 4 3
+__iommu_flush_cache 2 1
+ipath_decode_err 2 1
+__ipr_format_res_path 2 1
+ipr_format_res_path 3 2
+ip_vs_dbg_addr 2 1
+ip_vs_dbg_callid 1 0
+ipw2100_get_fwversion 2 1
+ipw2100_get_ucodeversion 2 1
+ipw_send_cmd_pdu 2 3
+irnet_read_discovery_log 2 1
+iscsi_if_send_reply 6 5
+isdn_tty_getdial 2 1
+isl12022_read_regs 3 2
+it913x_io 7 6
+it913x_read_reg 3 2
+iwl_dvm_send_cmd_pdu 3 4
+iwl_mvm_send_cmd_pdu 3 4
+jdvbt90502_reg_read 3 2
+kdb_getstr 1 0
+key_get_type_from_user 2 0
+kmemcheck_mark_initialized 1 0
+kmemdup 1 0
+kmsg_dump_get_line_nolock 3 2
+ks8995_read 3 1
+kvm_read_guest_cached 3 2
+kvm_read_guest_page_mmu 5 3
+kvm_read_nested_guest_page 4 2
+l2cap_send_cmd 3 4
+ldm_get_vstr 2 1
+line6_read_data 3 2
+lme2510_usb_talk 2 1
+lme2510_usb_talk 4 1
+lme2510_usb_talk 4 3
+logfs_crc32 1 0
+logfs_inode_write 2 1
+lpfc_nlp_state_name 1 0
+match_strlcpy 2 0
+mce_async_out 2 1
+memchr 2 0
+memcmp 2 0
+memcmp 2 1
+memcpy 2 0
+memcpy 2 1
+memcpy_fromio 2 0
+memcpy_toio 2 1
+memdup_user 1 0
+memmove 2 0
+memmove 2 1
+memset 2 0
+memset_io 2 0
+mgmt_event 3 2
+mgmt_exec_nonemb_cmd 3 2
+mgmt_pending_add 4 3
+mlx5_cmd_exec 2 1
+mlx5_cmd_exec 4 3
+mlx5_core_create_mkey 3 2
+mlx5_core_eq_query 3 2
+mlx5_core_qp_modify 4 3
+mlx5_core_qp_query 3 2
+mma8450_read_block 3 2
+modecpy 2 1
+mpol_to_str 1 0
+msg_print_text 4 3
+mt2060_writeregs 2 1
+mt2131_writeregs 2 1
+mt2266_writeregs 2 1
+mt312_read 3 2
+mt312_write 3 2
+_mt352_write 2 1
+mt352_write 2 1
+musb_write_fifo 1 2
+mwifiex_copy_rates 3 2
+mwl8k_cmd_name 2 1
+mwl8k_send_fw_load_cmd 2 1
+__mxt_read_reg 2 3
+my_hd 1 0
+ncp_add_mem 2 1
+next_entry 2 0
+nf_nat_ftp_fmt_cmd 3 2
+nla_memcmp 2 1
+nla_put 2 3
+nla_strlcpy 2 0
+nlmsg_perm 3 2
+nouveau_pm_perflvl_info 2 1
+o2hb_debug_create 5 7
+o2hb_fill_node_map 1 0
+o2hb_fill_node_map_from_callback 1 0
+o2net_fill_node_map 1 0
+o2net_sendpage 2 1
+o2nm_configured_node_map 1 0
+ocfs2_sprintf_system_inode_name 1 0
+ocrdma_copy_cpu_to_le32 2 0
+ocrdma_le32_to_cpu 1 0
+or51132_writebuf 2 1
+orinoco_get_wpa_ie 1 0
+oz_get_next_device_name 2 1
+p54spi_spi_read 3 2
+PC4500_readrid 3 2
+PC4500_writerid 3 2
+pcan_usb_pro_send_req 4 3
+pci_free_consistent 1 2
+pci_map_single 2 1
+pci_read_vpd 2 3
+pdu_read 2 1
+pep_reply 4 3
+persistent_ram_decode_rs8 2 1
+picolcd_send_and_wait 3 2
+pidff_find_fields 3 1
+pidff_find_special_keys 3 2
+platform_device_add_data 2 1
+pn_raw_send 1 0
+print_hex_dump 6 5
+print_hex_dump_bytes 3 2
+printvalue 2 1
+proc_get_long 5 4
+psb_intel_sdvo_get_value 3 2
+put_frag 2 1
+pvr2_hdw_report_clients 2 1
+pvr2_hdw_report_unlocked 3 2
+pvr2_ioread_set_sync_key 2 1
+pvr2_std_id_to_str 1 0
+qlt_sched_sess_work 3 2
+ql_write_cfg 2 1
+queue_event 3 2
+qword_get 2 1
+r2hb_fill_node_map_from_callback 1 0
+r2net_sendpage 2 1
+r600_hdmi_update_audio_infoframe 2 1
+r600_hdmi_update_avi_infoframe 2 1
+r820t_read 3 2
+r820t_write 3 2
+rdcat 3 2
+read_rom 2 3
+_recv 2 1
+reg_w 3 2
+reg_wb 4 3
+reg_w_buf 2 1
+reg_w_ixbuf 3 2
+reg_w_var 3 2
+rndis_set_oid 3 2
+root_nfs_cat 2 0
+rpc_ntop 2 1
+rpc_ntop4 2 1
+rpc_ntop6_noscopeid 2 1
+rsxx_creg_read 2 3
+rtl8723ae_fill_h2c_cmd 2 3
+rtl88e_fill_h2c_cmd 2 3
+rtl92c_fill_h2c_cmd 2 3
+rtl92d_fill_h2c_cmd 2 3
+rtn_scope 1 0
+rtn_type 1 0
+s35390a_get_reg 3 2
+s35390a_set_reg 3 2
+saa7110_write_block 2 1
+saa712x_write_regs 3 1
+saa7185_write_block 2 1
+scnprintf 1 0
+scnprint_id 2 1
+scsi_execute_req 4 3
+scsi_mode_sense 4 3
+scsi_sg_copy_from_buffer 2 1
+sctp_addto_chunk 1 2
+sctp_sf_abort_violation 6 5
+_send 2 1
+send_bulk_static_data 2 1
+sendcmd_withirq 3 2
+seq_write 2 1
+set_registers 2 3
+sg_copy_from_buffer 3 2
+sg_copy_to_buffer 3 2
+sg_init_one 2 1
+sg_set_buf 2 1
+si476x_cmd_tune_seek_freq 3 2
+si476x_cmd_tune_seek_freq 5 4
+si476x_core_i2c_xfer 3 2
+simple_read_from_buffer 4 3
+sirdev_raw_write 2 1
+skb_copy_to_linear_data 2 1
+skb_header_pointer 2 3
+sky2_name 2 1
+smp_send_cmd 2 3
+snd_hda_get_pin_label 4 3
+snd_info_get_line 2 1
+snd_info_get_str 2 0
+snd_midi_event_decode 2 1
+snd_mixart_send_msg 2 3
+snd_pcm_debug_name 2 1
+snd_print_channel_allocation 2 1
+snd_print_pcm_bits 2 1
+snd_rawmidi_kernel_read 2 1
+snd_rawmidi_transmit_peek 2 1
+snd_seq_expand_var_event 1 2
+snd_task_name 2 1
+snd_usb_caiaq_send_command 3 2
+snd_usb_ctl_msg 7 6
+snprint_line 1 0
+snprint_time 1 0
+sock_kfree_s 2 1
+solo_p2m_dma 4 2
+sort 2 0
+spi_read 2 1
+spi_write 2 1
+spi_write_then_read 2 1
+spi_write_then_read 4 3
+sprint_oid 3 2
+squashfs_read_metadata 4 1
+string_get_size 3 2
+stringify_lockname 3 2
+strlcat 2 0
+strlcpy 2 0
+strncat 2 0
+strncmp 2 0
+strncmp 2 1
+strncpy 2 0
+strncpy_from_user 2 0
+__svc_print_addr 2 1
+svc_print_addr 2 1
+svc_print_xprts 1 0
+sw_3dp_id 2 1
+swap_dws 1 0
+__sym_mfree 2 1
+synaptics_rmi4_i2c_block_read 3 2
+t4_wr_mbox 3 2
+tcp_fastopen_reset_cipher 1 0
+tda1004x_write_buf 3 2
+tda18212_wr_regs 3 2
+tda8083_readregs 3 2
+textify_hooks 1 0
+tipc_media_addr_printf 1 0
+tomoyo_addprintf 1 0
+tomoyo_print_ip 1 0
+tomoyo_print_ipv4 1 0
+tomoyo_print_ipv6 1 0
+tomoyo_print_ulong 1 0
+to_shortname_char 2 1
+tpm_inf_send 2 1
+tps6586x_reads 2 3
+tps6586x_writes 2 3
+trace_brcms_txdesc 2 1
+trace_i915_reg_rw 3 2
+trace_note 4 3
+ttsp_write_block_data 2 3
+ttusb2_msg 5 4
+ttusb_cmd 2 1
+ttusb_dec_send_command 2 3
+ttusb_result 2 1
+tuner_i2c_xfer_send 2 1
+tveeprom_read 2 1
+tw_transfer_internal 3 2
+ubi_io_read 4 1
+unicode_to_ascii 1 0
+usb_bulk_msg 3 2
+usb_control_msg 7 6
+usb_fill_bulk_urb 4 3
+usb_get_descriptor 4 3
+usb_make_path 2 1
+usbnet_read_cmd 6 5
+usb_stor_set_xfer_buf 1 0
+usb_string 3 2
+uwb_dev_addr_print 1 0
+uwb_mac_addr_print 1 0
+uwb_rc_cmd 3 2
+uwb_rc_vcmd 3 2
+valid_stack_ptr 2 1
+vic_provinfo_add_tlv 2 3
+vpx3220_write_block 2 1
+vscnprintf 1 0
+w1_ds2760_write 3 1
+w1_write_block 2 1
+wbuf_read 2 3
+wiimote_cmd_write 3 2
+wiimote_queue 2 1
+wil_memcpy_fromio_32 2 0
+wimax_addr_scnprint 1 0
+wl1251_cmd_configure 3 2
+wl1251_cmd_interrogate 3 2
+wl1251_cmd_send 3 2
+wl1251_mem_read 3 2
+wl1251_read_eeprom 3 2
+wl1271_cmd_configure 3 2
+wl1271_cmd_interrogate 3 2
+wl1271_cmd_send 3 2
+wl1271_cmd_template_set 4 3
+wl1271_cmd_test 2 1
+wl3501_set_to_wla 3 2
+wlcore_cmd_configure_failsafe 3 2
+wlcore_read 3 2
+wlcore_write 3 2
+write_extent_buffer 3 1
+write_rom 2 3
+wsm_read_mib 3 2
+wsm_write_mib 3 2
+wusb_key_dump 1 0
+wusb_prf_256 1 0
+wusb_prf_256 6 5
+xc_send_i2c_data 2 1
+xfrm_dst_alloc_copy 2 1
+xor8_buf 1 0
+yealink_set_ringtone 2 1
+zl10036_write 2 1
+zl10039_write 3 2
+zl10353_write 2 1
+zr36050_pushit 2 3
+zr36060_pushit 2 3
--- /dev/null	Fri Dec 21 15:00:23 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.sizeof_param.remove	Fri Dec 21 15:00:23 2018
@@ -0,0 +1,13 @@
+printk
+find_first_zero_bit
+dvb_usb_generic_rw
+__dynamic_pr_debug
+strncmp
+strncpy 2 1
+strlcpy 2 1
+strncat 2 1
+snprintf
+copy_from_user 2 1
+copy_to_user 2 0
+read_rom 2 3
+skb_pull 1 -1
--- /dev/null	Fri Dec 21 15:00:24 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.unconstant_macros	Fri Dec 21 15:00:24 2018
@@ -0,0 +1,10 @@
+X86_VM_MASK
+VM_GROWSUP
+VM_SOFTDIRTY
+UBIFS_BLOCKS_PER_PAGE
+DYNTICK_TASK_NEST_MASK
+ARCH_SHF_SMALL
+SLAB_NOTRACK
+FAULT_FLAG_TRANSHUGE
+_PAGE_NX
+MAP_UNINITIALIZED
--- /dev/null	Fri Dec 21 15:00:24 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.unreachable.ignore	Fri Dec 21 15:00:24 2018
@@ -0,0 +1,25 @@
+list_for_each
+list_for_each_entry
+list_for_each_entry_safe
+list_for_each_entry_rcu
+list_for_each_entry_continue
+list_for_each_entry_continue_rcu
+hlist_for_each_entry
+hlist_for_each_entry_safe
+ax25_uid_for_each
+inet_twsk_for_each_inmate
+udp_portaddr_for_each_entry_rcu
+hlist_for_each_safe
+hlist_for_each_entry_rcu
+snd_pcm_group_for_each_entry
+DLM_ASSERT
+ata_for_each_dev
+netlbl_af4list_foreach_rcu
+netlbl_af6list_foreach_rcu
+for_primary_ifa
+sk_nulls_for_each
+unreachable
+iterate_all_kinds
+netdev_for_each_lower_dev
+for_each_clear_bit_from
+idr_for_each_entry_continue
--- /dev/null	Fri Dec 21 15:00:24 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.unreachable.turn_off	Fri Dec 21 15:00:24 2018
@@ -0,0 +1,4 @@
+BUG
+panic
+LBUG
+ASSERT
--- /dev/null	Fri Dec 21 15:00:24 2018
+++ new/usr/src/tools/smatch/src/smatch_data/kernel.unwind_functions	Fri Dec 21 15:00:24 2018
@@ -0,0 +1,632 @@
+// list of unwind functions.
+// generated by `gen_unwind_functions.sh`
+_aac_reset_adapter
+aac_sa_init
+__aac_shutdown
+ace_init_cleanup
+acpi_os_remove_interrupt_handler
+ad5421_probe
+ad5421_remove
+ad5504_probe
+ad5504_remove
+ad714x_remove
+ad7150_probe
+ad7150_remove
+ad7280_remove
+ad7291_probe
+ad7291_remove
+ad7606_probe
+ad7606_remove
+ad7816_probe
+ad7816_remove
+ad7877_probe
+ad7879_remove
+ad799x_probe
+ad799x_remove
+adapter_down
+adapter_init
+adapter_uninit
+adis_probe_trigger
+adis_remove_trigger
+adm8211_probe
+adm8211_remove
+adp5588_irq_teardown
+adp5588_probe
+adp5588_remove
+adp5589_probe
+adp5589_remove
+adpt_i2o_delete_hba
+ads7846_probe
+adt7x10_remove
+adv7180_remove
+adxl34x_remove
+aer_remove
+ahc_platform_free
+ahd_platform_free
+airo_close
+ali_ircc_close
+altera_jtaguart_shutdown
+altera_uart_shutdown
+amd8111e_close
+amd8111e_open
+apds990x_remove
+arcmsr_remove
+arcrimi_found
+arizona_free_irq
+arizona_irq_exit
+ark_pci_probe
+ark_pci_remove
+asd_pci_probe
+asd_pci_remove
+ast_driver_unload
+at86rf230_probe
+at86rf230_remove
+ath10k_pci_probe
+ath10k_pci_remove
+ath5k_deinit_ah
+ath5k_init_ah
+ath5k_pci_probe
+ath5k_pci_remove
+atl1c_free_irq
+atl1_down
+atl1e_free_irq
+atl1_probe
+atl1_remove
+atl2_free_irq
+atp870u_probe
+aty_disable_irq
+axnet_close
+azx_free
+b43legacy_wireless_core_stop
+b43_wireless_core_stop
+b44_close
+bcma_host_pci_probe
+bcma_host_pci_remove
+bdx_hw_stop
+beiscsi_quiesce
+be_unmap_pci_bars
+bfad_pci_uninit
+bfad_remove_intr
+bh1770_remove
+blogic_relres
+bma150_remove
+bnx2i_free_hba
+bnx2_init_board
+bnx2_init_one
+bnx2x_free_irq
+__bnx2x_remove
+brcmf_sdio_intr_unregister
+brcms_free
+bu21013_free_irq
+c2_probe
+c2_register_device
+c2_remove
+c2_unregister_device
+c4_add_dev
+ca91cx42_irq_exit
+cafe_nand_probe
+cafe_nand_remove
+cafe_pci_probe
+cafe_shutdown
+carm_init_one
+carm_remove_one
+cas_init_one
+cas_remove_one
+cb710_suspend
+cc770_close
+c_can_close
+c_can_pci_probe
+c_can_pci_remove
+chd_dec_disable_int
+cleanup_dev
+cma3000_exit
+cma3000_init
+cmos_do_probe
+com20020_found
+com90io_found
+cp_tm1217_probe
+cp_tm1217_remove
+cros_ec_register
+cros_ec_remove
+csio_intr_disable
+cw1200_sdio_irq_unsubscribe
+cw1200_spi_irq_subscribe
+cw1200_spi_irq_unsubscribe
+cx23885_finidev
+cx25821_finidev
+cx8800_finidev
+cx8800_initdev
+cx8802_fini_common
+cxgb_down
+cy8ctmg110_probe
+cy8ctmg110_remove
+cyttsp4_remove
+cyttsp_remove
+da9052_free_irq
+DAC960_DetectCleanup
+dc390_probe_one
+de4x5_close
+deassign_host_irq
+deinit_card
+denali_irq_cleanup
+device_irq_exit
+devm_free_irq
+__devm_release_region
+dfx_close
+dfx_open
+disable_igfx_irq
+diva_os_remove_irq
+dm1105_probe
+dm1105_remove
+dmfe_init_one
+ds1307_remove
+dt3155_probe
+dt3155_remove
+dw_spi_add_host
+dw_spi_remove_host
+e1000_free_irq
+e1000_test_msi_interrupt
+e100_down
+e100_probe
+e100_remove
+eata2x_release
+edt_ft5x06_ts_probe
+edt_ft5x06_ts_remove
+efx_nic_fini_interrupt
+ems_pcmcia_del_card
+enc28j60_probe
+enc28j60_remove
+enic_free_intr
+epic_init_one
+epic_remove_one
+ess_dsp_init
+ethoc_stop
+fcpcipnp_release
+fdomain_16x0_release
+fealnx_init_one
+fealnx_remove_one
+flexcop_pci_exit
+flexcop_pci_init
+fnic_free_intr
+fore200e_shutdown
+fpga_probe
+fpga_remove
+free_dmar_iommu
+free_irq_resources
+free_region
+fsa9480_probe
+fsa9480_remove
+gether_cleanup
+goku_remove
+gp2a_probe
+gp2a_remove
+gpio_remove_key
+hdlcdrv_unregister
+he_stop
+hostap_remove_interface
+hp100_close
+hpc_release_ctlr
+hpet_ioctl_common
+hpwdt_exit
+hpwdt_init_one
+hw_card_shutdown
+i2400m_release
+i2c_hid_probe
+i2c_hid_remove
+i2o_pci_irq_disable
+i740fb_probe
+i740fb_remove
+i801_probe
+i801_remove
+i82092aa_pci_probe
+i82092aa_pci_remove
+i915_driver_load
+i915_driver_unload
+ide_unregister
+if_cs_release
+if_spi_probe
+igb_free_irq
+iio_trigger_detach_poll_func
+il3945_pci_remove
+ili210x_i2c_probe
+ilo_map_device
+ilo_probe
+ilo_remove
+ilo_unmap_device
+init_card
+initio_probe_one
+initio_remove_one
+init_irq
+inv_mpu6050_remove_trigger
+ioh_gpio_probe
+ioh_gpio_remove
+ipath_ht_free_irq
+ipg_probe
+ipg_remove
+ipr_test_msi
+ipw2100_pci_init_one
+ipw2100_pci_remove_one
+ipw_pci_probe
+ipw_pci_remove
+ipw_prom_free
+isdn_net_realrm
+isl1208_probe
+isl1208_remove
+ixgb_down
+ixgbe_free_irq
+ixgbe_sfp_detection_subtask
+jme_free_irq
+ks8851_remove
+ks_net_stop
+kvaser_pci_init_one
+kxtj9_probe
+kxtj9_remove
+libertas_spi_remove
+lis3lv02d_joystick_disable
+lm8323_remove
+lm8333_probe
+lm8333_remove
+lmc_ifdown
+lola_free
+lp8727_release_irq
+lp8788_irq_exit
+lpfc_sli4_disable_intr
+lpfc_sli4_disable_msi
+lpfc_sli_disable_intr
+lpfc_sli_disable_msi
+marvell_pata_active
+matroxfb_disable_irq
+max11801_ts_probe
+max11801_ts_remove
+max17042_remove
+max732x_irq_teardown
+max7359_probe
+max7359_remove
+max77686_irq_exit
+max77693_irq_exit
+max8925_device_exit
+max8997_irq_exit
+max8998_irq_exit
+mc13xxx_common_cleanup
+mcs5000_ts_probe
+mcs5000_ts_remove
+mcs_touchkey_probe
+mcs_touchkey_remove
+megaraid_fini_mbox
+megaraid_init_mbox
+__megaraid_shutdown
+mei_me_probe
+mei_me_remove
+mga_vram_init
+mgsl_release_resources
+microread_i2c_probe
+microread_i2c_remove
+middma_shutdown
+mid_setup_dma
+mlx4_en_destroy_netdev
+mlx4_free_irqs
+mm_pci_remove
+mpr_touchkey_probe
+mpr_touchkey_remove
+mpt_adapter_dispose
+mpu3050_probe
+mpu3050_remove
+mrf24j40_remove
+mthca_free_irqs
+musb_free
+mvumi_unmap_pci_addr
+mwl8k_probe
+mwl8k_remove
+mxser_board_remove
+mxt_probe
+ne2k_pci_close
+nes_probe
+nes_remove
+net2272_probe_fin
+net2272_remove
+net2280_remove
+net_close
+netdev_close
+netdev_free
+ngene_start
+ngene_stop
+nj_release
+notifier_del_irq
+nozomi_card_exit
+ns83820_init_one
+nsc_ircc_close
+ns_init_card_error
+oaktrail_hdmi_i2c_exit
+ohci_stop
+orinoco_nortel_init_one
+orinoco_nortel_remove_one
+orinoco_pci_init_one
+orinoco_pci_remove_one
+orinoco_pci_suspend
+orinoco_plx_init_one
+orinoco_plx_remove_one
+orinoco_tmd_init_one
+orinoco_tmd_remove_one
+parport_pc_unregister_port
+pcan_free
+pcf50633_irq_free
+pcf8574_kp_probe
+pcf8574_kp_remove
+pcf857x_irq_domain_cleanup
+pch_can_probe
+pch_can_remove
+pch_dma_probe
+pch_dma_remove
+pch_gbe_free_irq
+pch_gpio_probe
+pch_gpio_remove
+pch_i2c_probe
+pch_i2c_remove
+pch_phub_probe
+pch_phub_remove
+pch_remove
+pch_udc_remove
+pch_vbus_gpio_free
+pcie_pme_remove
+pcim_iounmap
+pci_oxsemi_tornado_init
+pci_probe
+pci_remove
+pcmcia_disable_device
+pcmcia_release_window
+pcnet32_close
+pcnet32_open
+pcnet_close
+pcxhr_free
+pd6729_check_irq
+pd6729_pci_probe
+pd6729_pci_remove
+peak_pci_probe
+peak_pci_remove
+phantom_probe
+phantom_remove
+phy_stop_interrupts
+piix_disable_ahci
+pixcir_i2c_ts_probe
+pixcir_i2c_ts_remove
+pluto2_probe
+pluto2_remove
+plx_pci_del_card
+plx_pci_reset_marathon
+pn544_hci_i2c_probe
+pn544_hci_i2c_remove
+ppp_shutdown_interface
+prism54_remove
+probe
+pt1_probe
+pt1_remove
+pvscsi_release_resources
+pvscsi_shutdown_intr
+qib_6120_free_irq
+qib_7220_free_irq
+qib_7322_free_irq
+qla1280_probe_one
+qla1280_remove_one
+qla25xx_free_rsp_que
+qla4xxx_free_irqs
+ql_adapter_down
+ql_adapter_up
+ql_free_irq
+qt1070_probe
+qt1070_remove
+qt2160_probe
+qt2160_remove
+r6040_close
+r6040_init_one
+r6040_open
+r6040_remove_one
+r852_probe
+r852_remove
+radeon_device_fini
+rc5t583_irq_exit
+regmap_del_irq_chip
+release_and_free_resource
+release_card
+release_cis_mem
+release_io_space
+release_memory_resource
+release_resources
+remove_inta_isr
+reset_ivb_igd
+rhine_init_one
+rhine_remove_one
+rio_probe1
+rio_release_outb_dbell
+rio_remove1
+rr_init_one
+rr_remove_one
+rsxx_pci_probe
+rsxx_pci_remove
+rt2x00mmio_uninitialize
+rtl8180_remove
+rtl_pci_disconnect
+rtl_pci_probe
+rx8025_probe
+rx8025_remove
+s3_pci_probe
+s3_pci_remove
+saa7134_finidev
+saa7134_initdev
+saa7146_init_one
+saa7146_remove_one
+saa7164_finidev
+sb1000_close
+sbni_close
+sc92031_probe
+sc92031_remove
+sca3000_probe
+sca3000_remove
+sdhci_add_host
+sdhci_pci_remove_own_cd
+sdhci_remove_host
+sdhci_suspend_host
+sdricoh_init_mmc
+sep_probe
+ser12_close
+serial_hsu_remove
+serial_unlink_irq_chain
+setup_instance
+sh_eth_close
+sh_eth_open
+si4713_probe
+si4713_remove
+sirdev_put_instance
+sis900_probe
+sis900_remove
+sja1000_close
+skfp_close
+skge_remove
+sky2_remove
+slic_init_cleanup
+smb347_remove
+smsc_ircc_close
+snd_ad1889_free
+snd_ali_free
+snd_als300_free
+snd_atiixp_free
+snd_azf3328_free
+snd_bt87x_free
+snd_ca0106_free
+snd_cmipci_free
+snd_cs4281_free
+snd_cs46xx_free
+snd_cs5535audio_free
+snd_cx88_free
+snd_echo_free
+snd_emu10k1_free
+snd_emu10k1x_free
+snd_ensoniq_free
+snd_es1938_free
+snd_es1968_free
+snd_fm801_free
+snd_hdsp_free
+snd_hdspm_free
+snd_ice1712_free
+snd_intel8x0_free
+snd_intel8x0m_free
+snd_korg1212_free
+snd_lx6464es_create
+snd_lx6464es_free
+snd_m3_free
+snd_mixart_free
+snd_nm256_free
+snd_nm256_release_irq
+snd_riptide_free
+snd_rme9652_free
+snd_sbdsp_free
+snd_sonicvibes_free
+snd_trident_free
+snd_uart16550_free
+snd_via82xx_free
+snd_vt1724_free
+snd_vx222_free
+snd_ymfpci_free
+softing_card_shutdown
+softing_enable_irq
+ssb_iounmap
+std_irq_cleanup
+stmmac_dvr_remove
+stmmac_open
+stmmac_pci_remove
+stmmac_release
+stop_airo_card
+stop_atmel_card
+stop_ft1000_card
+sundance_probe1
+sundance_remove1
+sym_free_resources
+sym_iounmap_device
+synaptics_i2c_remove
+synaptics_rmi4_probe
+synaptics_rmi4_remove
+tifm_7xx1_probe
+tifm_7xx1_remove
+timbuart_shutdown
+tlan_close
+tpci200_unregister
+tps65010_remove
+tps6586x_i2c_probe
+tps6586x_i2c_remove
+tps65912_irq_exit
+tsc2005_probe
+tsi148_irq_exit
+tsl2563_probe
+tsl2563_remove
+tsl2x7x_probe
+tsl2x7x_remove
+tulip_init_one
+tulip_remove_one
+__twa_shutdown
+twl6030_init_irq
+__twl_shutdown
+__tw_shutdown
+typhoon_close
+typhoon_init_one
+typhoon_open
+typhoon_remove_one
+typhoon_test_mmio
+udc_pci_remove
+uio_unregister_device
+uli526x_init_one
+uli526x_remove_one
+ulite_shutdown
+unbind_from_irqhandler
+unload_mpu401
+unload_pas
+unload_uart6850
+unregister_candev
+unregister_networkdev
+unregister_wlandev
+usb_add_hcd
+usb_remove_hcd
+velocity_close
+via_sd_remove
+virtio_pci_probe
+virtio_pci_remove
+vlsi_close
+vlsi_open
+vmbus_bus_init
+vmxnet3_free_irqs
+vortex_close
+vortex_init_one
+vortex_open
+vortex_remove_one
+vt8623_pci_probe
+vt8623_pci_remove
+vxge_rem_isr
+w83977af_close
+w840_probe1
+w840_remove1
+wacom_i2c_probe
+wacom_i2c_remove
+wbsd_release_irq
+whci_n_caps
+whci_probe
+whci_remove
+wil6210_fini_irq
+wil6210_request_3msi
+wil_pcie_probe
+wil_pcie_remove
+wl3501_reset
+wm2200_i2c_remove
+wm5100_i2c_probe
+wm5100_i2c_remove
+wm831x_irq_exit
+wm8350_irq_exit
+wm8903_i2c_remove
+wm8993_i2c_probe
+wm8993_i2c_remove
+xenvif_disconnect
+xhci_try_enable_msi
+xircom_probe
+xircom_remove
+xpc_destroy_gru_mq_uv
+yam_close
+yellowfin_init_one
+yellowfin_remove_one
+yenta_probe_cb_irq
--- /dev/null	Fri Dec 21 15:00:24 2018
+++ new/usr/src/tools/smatch/src/smatch_data/no_return_funcs	Fri Dec 21 15:00:24 2018
@@ -0,0 +1,3 @@
+__assert_fail
+exit
+__builtin_unreachable
--- /dev/null	Fri Dec 21 15:00:24 2018
+++ new/usr/src/tools/smatch/src/smatch_data/no_return_funcs.remove	Fri Dec 21 15:00:24 2018
@@ -0,0 +1,5 @@
+main
+reserve_bootmem
+reserve_bootmem_node
+smp_reboot_interrupt
+xfs_fs_alloc_inode
--- /dev/null	Fri Dec 21 15:00:24 2018
+++ new/usr/src/tools/smatch/src/smatch_data/smatch.common_functions	Fri Dec 21 15:00:24 2018
@@ -0,0 +1,17 @@
+get_type
+sm_prefix
+add_hook
+strcmp
+snprintf
+get_filename
+get_argument_from_call_expr
+printf
+INT_PTR
+get_function
+free_string
+print_implied_debug_msg
+strip_expr
+get_lineno
+add_function_hook
+is_silenced_function
+fprintf
--- /dev/null	Fri Dec 21 15:00:24 2018
+++ new/usr/src/tools/smatch/src/smatch_data/smatch_generic.common_functions	Fri Dec 21 15:00:24 2018
@@ -0,0 +1,1 @@
+printf
--- /dev/null	Fri Dec 21 15:00:24 2018
+++ new/usr/src/tools/smatch/src/smatch_data/wine.bit_shifters	Fri Dec 21 15:00:24 2018
@@ -0,0 +1,51 @@
+// list of macros used as shifters.
+// generated by `gen_bit_shifters.sh`
+BANDID_FORMATBAR 3
+BANDID_RULER 0
+BANDID_STATUSBAR 1
+BANDID_TOOLBAR 2
+BWRITERVS_SWIZZLE_SHIFT 16
+CANCEL_MSG_LINE 2
+CERT_ALT_NAME_ENTRY_ERR_INDEX_SHIFT 16
+CPU_ARM64 4
+CPU_x86_64 1
+D3DFVF_TEXCOUNT_SHIFT 8
+D3DSI_INSTLENGTH_SHIFT 24
+D3DSP_DCL_USAGEINDEX_SHIFT 16
+D3DSP_DCL_USAGE_SHIFT 0
+D3DSP_DSTSHIFT_SHIFT 24
+D3DSP_REGTYPE_SHIFT 28
+D3DSP_REGTYPE_SHIFT2 8
+DIGIT_BIT 28
+HASHTABLE_FLAG_BITS 6
+INSTALLSTATE_LOCAL 3
+JSSTR_LENGTH_SHIFT 4
+MAX_TEXTURES 8
+NET_WM_STATE_ABOVE 1
+NET_WM_STATE_FULLSCREEN 0
+NET_WM_STATE_MAXIMIZED 2
+NET_WM_STATE_SKIP_PAGER 3
+NET_WM_STATE_SKIP_TASKBAR 4
+RESERVED_SHIFT 26
+WINED3D_FFP_ATTRIBS_COUNT 15
+WINED3D_FFP_BLENDINDICES 2
+WINED3D_FFP_BLENDWEIGHT 1
+WINED3D_FFP_DIFFUSE 5
+WINED3D_FFP_NORMAL 3
+WINED3D_FFP_POSITION 0
+WINED3D_FFP_PSIZE 4
+WINED3D_FFP_SPECULAR 6
+WINED3D_SHADER_TYPE_COMPUTE 5
+WINED3D_SHADER_TYPE_DOMAIN 4
+WINED3D_SHADER_TYPE_GEOMETRY 2
+WINED3D_SHADER_TYPE_HULL 3
+WINED3D_SHADER_TYPE_PIXEL 0
+WINED3D_SHADER_TYPE_VERTEX 1
+WINED3D_SM1_REGISTER_TYPE_SHIFT 28
+WINED3D_SM1_REGISTER_TYPE_SHIFT2 8
+WINED3D_SM1_SWIZZLE_SHIFT 16
+__WINE_DBCL_ERR 1
+__WINE_DBCL_FIXME 0
+__WINE_DBCL_INIT 7
+__WINE_DBCL_TRACE 3
+__WINE_DBCL_WARN 2
--- /dev/null	Fri Dec 21 15:00:24 2018
+++ new/usr/src/tools/smatch/src/smatch_data/wine.ignored_macros	Fri Dec 21 15:00:24 2018
@@ -0,0 +1,5 @@
+/*
+ * These macros are actively misleading to smatch so
+ * it's best to ignore them.
+ */
+ok
--- /dev/null	Fri Dec 21 15:00:24 2018
+++ new/usr/src/tools/smatch/src/smatch_data/wine.no_return_funcs	Fri Dec 21 15:00:24 2018
@@ -0,0 +1,91 @@
+// list of functions which don't return.
+// generated by `gen_no_return_funcs.sh`
+RaiseException
+__assert_fail
+exit
+__builtin_unreachable
+ExitProcess
+_beginthread_trampoline
+callback_exception
+call_thread_func
+close_socket_timeout
+coff_process_info
+collect_connections_proc
+collect_query_thread
+CorExitProcess
+_CxxThrowException
+debug_usage
+DelayLoadFailureHook
+do_sigsegv
+do_usage
+emfpathdrv_CreateDC
+error
+error_exit_fn
+error_loc
+error_loc_info
+event_client
+__ExceptionPtrRethrow
+exit_on_signal
+ExitProcess
+exit_thread
+fatal
+fatal_error
+fatal_perror
+fatal_string_error
+guiFatal
+internal_error
+iocp_poller
+main
+MSVCRT_abort
+MSVCRT__wassert
+nulldrv_CreateDC
+nulldrv_DeleteDC
+oob_client
+oob_server
+packet_kill
+parser_error
+pp_internal_error
+ProvStore_releaseContext
+PullPin_Thread_Main
+raise_status
+read_res16
+REGPROC_print_error
+relay_call_regs
+RpcRaiseException
+rpcrt4_ncacn_http_handoff
+RtlExitUserProcess
+__security_error_handler
+segvhandler
+select_server
+server_connect_error
+sigterm_callback
+sigterm_handler
+simple_client
+simple_mixed_client
+simple_server
+start_process
+start_thread
+stub_entry_point
+terminate_thread
+test_thread_func_ex
+textFatal
+throw_bad_alloc
+TIME_MMSysTimeThread
+unwind_frame
+unwind_target
+user_error_fn
+_vcomp_fork_worker
+__widl_unwind_target
+__wine_process_init
+__wine_rtl_unwind
+__wine_spec_exe_wentry
+__wine_spec_unimplemented_stub
+wine_switch_to_stack
+WINMM_DevicesThreadProc
+wmain
+wpp_default_error
+write_po_files
+write_pot_file
+wWinMain
+xyyerror
+yy_fatal_error
--- /dev/null	Fri Dec 21 15:00:24 2018
+++ new/usr/src/tools/smatch/src/smatch_data/wine.no_return_funcs.add	Fri Dec 21 15:00:24 2018
@@ -0,0 +1,2 @@
+ExitProcess
+RaiseException
--- /dev/null	Fri Dec 21 15:00:24 2018
+++ new/usr/src/tools/smatch/src/smatch_data/wine.no_return_funcs.remove	Fri Dec 21 15:00:24 2018
@@ -0,0 +1,1 @@
+usage
--- /dev/null	Fri Dec 21 15:00:25 2018
+++ new/usr/src/tools/smatch/src/smatch_data/wine.sizeof_param	Fri Dec 21 15:00:25 2018
@@ -0,0 +1,445 @@
+// list of function parameters that are the size of a buffer.
+// generated by `gen_sizeof_param.sh`
+AddJobW 3 2
+alloc_utf8_text 1 0
+append 2 1
+BCryptFinishHash 2 1
+BCryptGenRandom 2 1
+BCryptGetProperty 3 2
+bsearch 3 1
+call_minidriver 5 4
+CertAddEncodedCertificateToStore 3 2
+CertAddEncodedCRLToStore 3 2
+CertAddEncodedCTLToStore 3 2
+CertAddSerializedElementToStore 2 1
+CertCreateCertificateContext 2 1
+CertCreateCRLContext 2 1
+CertCreateCTLContext 2 1
+CertGetIntendedKeyUsage 3 2
+CertNameToStrA 4 3
+CertRDNValueToStrA 3 2
+checkCRLHash 1 0
+checkHash 1 0
+check_index_buffer_ 4 2
+check_param 4 3
+CommitUrlCacheEntryW 6 5
+compare_emf_bits 2 1
+compare_file_data 2 1
+compare_mf_bits 2 1
+compare_mf_disk_bits 2 1
+compareStore 3 2
+CompareStringA 3 2
+CompareStringA 5 2
+convert_old_args 5 4
+convert_str 1 4
+copy_param 3 2
+create_buffer_ 3 4
+create_decoder 1 0
+create_file 2 1
+create_source_file 2 1
+create_source_fileA 2 1
+create_source_fileW 2 1
+create_stream 1 0
+create_stream_on_data 1 0
+create_test_icon 6 5
+CryptEncrypt 6 4
+CryptEncryptMessage 4 3
+CryptGenRandom 1 2
+CryptGetMessageSignerCount 2 1
+CryptHashCertificate 4 3
+CryptHashData 2 1
+CryptHashToBeSigned 3 2
+CryptImportKey 2 1
+CryptMsgUpdate 2 1
+CryptVerifyDetachedMessageHash 2 1
+CryptVerifyDetachedMessageSignature 3 2
+CryptVerifyMessageHash 2 1
+CryptVerifyMessageSignature 3 2
+CryptVerifySignatureA 2 1
+cstr_length 1 0
+D3DXCreateCubeTextureFromFileInMemory 2 1
+D3DXCreateCubeTextureFromFileInMemoryEx 2 1
+D3DXCreateEffect 2 1
+D3DXCreateEffectCompiler 1 0
+D3DXCreateTextureFromFileInMemory 2 1
+D3DXCreateTextureFromFileInMemoryEx 2 1
+D3DXCreateVolumeTextureFromFileInMemory 2 1
+D3DXGetImageInfoFromFileInMemory 1 0
+D3DXLoadSurfaceFromFileInMemory 4 3
+D3DXLoadSurfaceFromMemory 5 3
+D3DXLoadVolumeFromFileInMemory 4 3
+D3DXLoadVolumeFromMemory 6 3
+dbg_read_memory 2 1
+DdeCreateDataHandle 2 1
+DeviceIoControl 3 2
+DeviceIoControl 5 4
+DIALOG_BrowsePrograms 2 1
+DIALOG_BrowseSymbols 2 1
+dns_ns_name_uncompress 4 3
+dns_ns_name_unpack 4 3
+doit 5 4
+DragQueryFileA 3 2
+DRIVER_GetLibName 3 2
+ExpandEnvironmentStringsA 2 1
+ExtEscape 2 3
+ExtEscape 4 5
+fgets 1 0
+fill_sym_lvalue 4 3
+format_exception_msg 2 1
+format_hash 1 0
+FormatMessageA 5 4
+fread 1 0
+fread 2 0
+func_ptr 4 1
+func_ptr 4 3
+fwrite 1 0
+fwrite 2 0
+get_alsa_name_by_guid 2 1
+GetAtomNameA 2 1
+GetBitmapBits 1 2
+get_buffer 1 0
+get_builtin_path 3 2
+GetClassNameA 2 1
+GetClipboardFormatNameA 2 1
+get_commands 3 2
+get_config_key 4 3
+GetCurrentDirectoryA 0 1
+GetCurrentThemeName 1 0
+GetCurrentThemeName 3 0
+GetCurrentThemeName 5 4
+GetDateFormatA 5 4
+get_display_device_reg_key 1 0
+GetDlgItemTextA 3 2
+GetEnvironmentVariableA 2 1
+GetFontData 4 3
+GetFullPathNameA 1 2
+GetGlyphOutlineA 4 5
+GetGlyphOutlineW 4 5
+gethostname 1 0
+GetKeyNameTextA 2 1
+get_line 1 0
+GetLocaleInfoA 3 2
+get_long_path_name 2 1
+GetLongPathNameA 2 0
+GetLongPathNameA 2 1
+GetMetaFileBitsEx 1 2
+GetModuleFileNameA 2 1
+getnameinfo 3 2
+getnameinfo 5 4
+GetObjectA 1 2
+GetObjectW 1 2
+GetPrivateProfileSectionA 2 1
+GetPrivateProfileStringA 4 3
+get_process_info 2 1
+GetProfileStringA 4 3
+get_reg_value 4 3
+GetRoleTextA 2 1
+GetShortPathNameA 2 0
+GetShortPathNameA 2 1
+GetSystemDirectoryA 1 0
+get_system_proxy_autoconfig_url 1 0
+GetTempPathA 0 1
+GetTextExtentExPointA 2 1
+GetTextExtentPoint32A 2 1
+GetTextFaceA 1 2
+get_thread_info 3 2
+GetTimeFormatA 5 4
+GetTokenInformation 3 2
+get_ttf_nametable_entry 3 2
+GetUserObjectInformationA 3 2
+GetUserObjectInformationW 3 2
+GetWindowsDirectoryA 1 0
+GetWindowTextA 2 1
+GlobalGetAtomNameA 2 1
+HCR_GetExecuteCommandW 4 3
+HTTPREQ_Read 2 1
+HttpSendRequestA 4 3
+_hwrite 2 1
+IContextMenu_GetCommandString 5 4
+ID2D1Bitmap_CopyFromMemory 3 2
+ID3D10Device_CreateGeometryShader 2 1
+ID3D10Device_CreateInputLayout 4 3
+ID3D10Device_CreatePixelShader 2 1
+ID3D10Device_CreateVertexShader 2 1
+ID3D10Device_UpdateSubresource 5 4
+ID3D11DeviceContext_UpdateSubresource 5 4
+ID3D11Device_CreateGeometryShader 2 1
+ID3D11Device_CreateInputLayout 4 3
+ID3D11Device_CreatePixelShader 2 1
+ID3D11Device_CreateVertexShader 2 1
+IDataConvert_DataConvert 3 5
+IDataConvert_DataConvert 7 6
+IDWriteGlyphRunAnalysis_CreateAlphaTexture 4 3
+IHtmlLoadOptions_SetOption 3 2
+IInternetProtocolEx_Read 2 1
+IInternetProtocolInfo_QueryInfo 5 4
+IInternetProtocol_Read 2 1
+ILockBytes_ReadAt 3 2
+ImmGetCompositionStringA 3 2
+ImmSetCompositionStringA 3 2
+ImmSetCompositionStringW 3 2
+inet_ntop 3 2
+initFileFromData 2 1
+input_read_line 2 1
+InternetReadFile 2 1
+InternetSetOptionA 3 2
+InternetTimeFromSystemTimeW 3 2
+IoBuildDeviceIoControlRequest 5 4
+IROTData_GetComparisonData 2 1
+IsBadReadPtr 1 0
+IsBadWritePtr 1 0
+ISequentialStream_Read 2 1
+IShellLinkA_GetArguments 2 1
+IShellLinkA_GetDescription 2 1
+IShellLinkA_GetIconLocation 2 1
+IShellLinkA_GetPath 2 1
+IShellLinkA_GetWorkingDirectory 2 1
+IStream_Read 2 1
+IStream_Write 2 1
+IWICBitmapClipper_CopyPixels 3 4
+IWICBitmap_CopyPixels 3 4
+IWICBitmapFrameDecode_CopyPixels 3 4
+IWICImagingFactory_CreateBitmapFromMemory 5 6
+IWICStream_InitializeFromMemory 2 1
+IWICStream_Write 2 1
+LCMapStringA 5 2
+LCMapStringA 5 4
+load_entry 2 1
+load_face 4 3
+load_image 1 0
+load_stream 2 1
+LoadStringA 3 2
+_lwrite 2 1
+MCI_GetDevTypeFromFileName 2 1
+mciGetErrorStringA 2 1
+mciSendStringA 2 1
+memcmp 2 0
+memcmp 2 1
+memcpy 2 0
+memcpy 2 1
+memory_get_string 5 4
+memory_read_value 1 2
+memset 2 0
+mmioRead 2 1
+MSFT_ReadLEWords 1 0
+MSVCRT_asctime_s 1 0
+MSVCRT__fwrite_nolock 1 0
+MSVCRT__snwprintf 1 0
+MultiByteToWideChar 3 2
+NdrCorrelationInitialize 2 1
+NetBTNameReq 5 4
+NETCON_recv 2 1
+NLS_RegEnumValue 3 2
+NLS_RegEnumValue 5 4
+NTDLL__vsnprintf 1 0
+NtEnumerateKey 4 3
+NtEnumerateValueKey 4 3
+NtQueryDirectoryFile 6 5
+NtQueryInformationProcess 3 2
+NtQueryInformationThread 3 2
+NtQueryKey 3 2
+NtQueryValueKey 4 3
+NtReadFile 6 5
+NtSetInformationThread 3 2
+NtSetValueKey 5 4
+output 2 1
+pBCryptHash 6 5
+pCertNameToStrA 4 3
+pCertRDNValueToStrA 3 2
+pCertRDNValueToStrW 3 2
+pCoInternetQueryInfo 4 3
+pCryptDecodeObjectEx 3 2
+pCryptFormatObject 6 5
+pCryptVerifySignatureW 2 1
+PeekNamedPipe 2 1
+p_fgets 1 0
+p_fread_s 1 0
+pGetCalendarInfoA 4 3
+pGetCalendarInfoW 4 3
+pGetFileInformationByHandleEx 3 2
+pGetFontFileData 4 3
+pGetLongPathNameA 2 0
+pGetLongPathNameA 2 1
+pGetMappedFileNameA 3 2
+pGetModuleBaseNameA 3 2
+pGetModuleFileNameExA 3 2
+pGetProcessImageFileNameA 2 1
+pGetProcessImageFileNameW 2 1
+pGetShortPathNameA 2 1
+pGetSystemWow64DirectoryA 1 0
+pGetVolumeNameForVolumeMountPointA 2 1
+pGetVolumePathNamesForVolumeNameA 2 1
+pGetVolumePathNamesForVolumeNameW 2 1
+pGetWindowModuleFileNameA 2 1
+pGetWsChanges 2 1
+pHexFromBin 1 0
+pIcmpSendEcho 3 2
+pIdnToAscii 4 3
+pIdnToUnicode 4 3
+pInetNtop 3 2
+pInternetGetConnectedStateExA 2 1
+pInternetTimeFromSystemTimeA 3 2
+pInternetTimeFromSystemTimeW 3 2
+p_itoa_s 2 1
+pK32GetProcessImageFileNameA 2 1
+pLcidToRfc1766A 2 1
+p_mbscat_s 1 0
+p__mbscpy_s 1 0
+p_mbslwr_s 1 0
+p_mbsnbcat_s 1 0
+p_mbsnbcat_s 3 2
+p_mbsnbcpy_s 1 0
+p_mbsnbcpy_s 3 2
+p_mbsupr_s 1 0
+pNtNotifyChangeDirectoryFile 6 5
+pNtQueryDirectoryFile 6 5
+pNtQueryInformationFile 3 2
+pNtQueryInformationProcess 3 2
+pNtQueryKey 3 2
+pNtQueryLicenseValue 3 2
+pNtQueryObject 3 2
+pNtQueryVolumeInformationFile 3 2
+pNtReadFile 6 5
+pNtWriteFile 6 5
+pPathUnExpandEnvStringsA 2 1
+pQueryInformationJobObject 3 2
+pReadDirectoryChangesW 2 1
+pRegSetKeyValueW 5 4
+printBytes 2 1
+pRtlCompressBuffer 2 1
+pRtlCompressBuffer 4 3
+pRtlDecompressBuffer 2 1
+pRtlDecompressFragment 2 1
+pRtlIsTextUnicode 1 0
+pRtlMultiByteToUnicodeN 1 0
+pRtlUnicodeToUTF8N 1 0
+pRtlUTF8ToUnicodeN 1 0
+pSetupDiGetDeviceInstanceIdA 3 2
+pSetupEnumInfSectionsA 3 2
+pSetupGetFileCompressionInfoExA 2 1
+pSHFormatDateTimeA 3 2
+pSHGetIniStringW 3 2
+pSHLWAPI_184 2 1
+pSHLWAPI_212 2 1
+pstrcat_s 1 0
+pstrcpy_s 1 0
+pstrerror_s 1 0
+pStringTableLookUpStringEx 4 3
+p_strlwr_s 1 0
+p__strnset_s 1 0
+p_ultoa_s 2 1
+push_data 2 1
+put_data 1 0
+pXcvDataPort 5 4
+qsort 2 0
+QueryDosDeviceA 2 1
+_read 2 1
+read 2 1
+read_bytes 1 0
+read_bytes 2 1
+ReadCharMetrics 2 1
+read_data 2 1
+ReadFile 2 1
+ReadFileEx 2 1
+ReadFontMetrics 2 1
+read_func 2 1
+ReadProcessMemory 3 2
+read_stream 3 2
+ReadString 2 1
+RealGetWindowClassA 2 1
+_receive_simple_request 3 2
+recv 2 1
+recvfrom 2 1
+RegEnumKeyA 3 2
+RegSetValueA 4 3
+RegSetValueExA 5 4
+RegSetValueExW 5 1
+RegSetValueW 4 3
+__res_query 4 3
+reverse_lookup 2 1
+rpcrt4_http_async_read 4 3
+RtlGetCurrentDirectory_U 0 1
+RtlMultiByteToUnicodeN 1 0
+r_verify_reg_binary 5 4
+SearchPathA 3 4
+send 2 1
+sendto 2 1
+SetEnhMetaFileBits 0 1
+SetMetaFileBitsEx 0 1
+set_profile_device_key 2 1
+SetupGetFileCompressionInfoExA 2 1
+SetupGetLineTextA 5 4
+SetupGetSourceFileLocationA 5 4
+SetupGetSourceInfoA 4 3
+SetupGetStringFieldA 3 2
+SetupGetTargetPathA 4 3
+setvbuf 3 1
+SHELL_FindExecutableByVerb 4 3
+snprintf 1 0
+sock_recv 2 1
+stab_strcpy 1 0
+strftime 1 0
+_Strftime 1 0
+strncmp 2 0
+strncmp 2 1
+strncpyWtoA 2 0
+sw_read_mem 3 2
+SysAllocStringByteLen 1 0
+SystemFunction036 1 0
+test_add_certificate 1 0
+test_buffer_object 2 1
+test_font_metrics 5 4
+_test_hkey_main_Value_A 3 2
+_test_hkey_main_Value_W 3 2
+test_LoadImageFile 2 1
+test_LoadMeshFromX_ 9 7
+test_moniker 3 2
+test_moniker 5 4
+test_moniker 7 6
+test_output 3 2
+test_persist_save_data 3 2
+test_persist_save_data 5 2
+test_persist_save_data 5 4
+test_pic 1 0
+test_preshader_op 2 1
+unicode_expect_ 4 3
+UpdateResourceA 5 4
+UrlMkSetSessionOption 2 1
+utf8_expect_ 4 3
+VarTokenizeFormatString 2 1
+vsnprintf 1 0
+vsnprintfW 1 0
+_vsprintf_p_wrapper 1 0
+vsprintf_wrapper 2 1
+vswprintf_wrapper 2 1
+waveInAddBuffer 2 1
+waveInGetErrorTextA 2 1
+waveInPrepareHeader 2 1
+waveInUnprepareHeader 2 1
+waveOutGetErrorTextA 2 1
+waveOutPrepareHeader 2 1
+waveOutUnprepareHeader 2 1
+waveOutWrite 2 1
+WideCharToMultiByte 5 4
+WINECON_GetConsoleTitle 2 1
+wined3d_private_store_set_private_data 3 2
+wine_dll_load 2 1
+wine_dlopen 3 2
+wine_dlsym 3 2
+wine_init 3 2
+wine_server_set_reply 2 1
+WinHttpReadData 2 1
+wld_read 2 1
+_write 2 1
+write 2 1
+write_file 2 1
+WriteFile 2 1
+WriteFileEx 2 1
+WriteProcessMemory 3 2
+write_stream_data 3 2
+WSAIoctl 3 2
+WS_inet_ntop 3 2
+WsWriteType 6 5
+X11DRV_XDND_DescribeClipboardFormat 2 1
+XLookupString 2 1
+XmbLookupString 3 2
--- /dev/null	Fri Dec 21 15:00:25 2018
+++ new/usr/src/tools/smatch/src/smatch_data_source.c	Fri Dec 21 15:00:25 2018
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2013 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+static char *get_source_parameter(struct expression *expr)
+{
+	struct expression *tmp;
+	struct symbol *sym;
+	char *name;
+	int param;
+	char *ret = NULL;
+	char buf[32];
+	int cnt = 0;
+
+	tmp = expr;
+	while ((tmp = get_assigned_expr(tmp))) {
+		expr = tmp;
+		if (cnt++ > 3)
+			break;
+	}
+
+	expr = strip_expr(expr);
+	if (expr->type != EXPR_SYMBOL)
+		return NULL;
+
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+	param = get_param_num_from_sym(sym);
+	if (param < 0)
+		goto free;
+	if (param_was_set(expr))
+		goto free;
+
+	snprintf(buf, sizeof(buf), "p %d", param);
+	ret = alloc_string(buf);
+
+free:
+	free_string(name);
+	return ret;
+}
+
+static char *get_source_assignment(struct expression *expr)
+{
+	struct expression *right;
+	char *name;
+	char buf[64];
+	char *ret;
+
+	right = get_assigned_expr(expr);
+	right = strip_expr(right);
+	if (!right)
+		return NULL;
+	if (right->type != EXPR_CALL || right->fn->type != EXPR_SYMBOL)
+		return NULL;
+	if (is_fake_call(right))
+		return NULL;
+	name = expr_to_str(right->fn);
+	if (!name)
+		return NULL;
+	snprintf(buf, sizeof(buf), "r %s", name);
+	ret = alloc_string(buf);
+	free_string(name);
+	return ret;
+}
+
+static char *get_source_str(struct expression *arg)
+{
+	char *source;
+
+	source = get_source_parameter(arg);
+	if (source)
+		return source;
+	return get_source_assignment(arg);
+}
+
+static void match_caller_info(struct expression *expr)
+{
+	struct expression *arg;
+	char *source;
+	int i;
+
+	i = -1;
+	FOR_EACH_PTR(expr->args, arg) {
+		i++;
+		source = get_source_str(arg);
+		if (!source)
+			continue;
+		sql_insert_caller_info(expr, DATA_SOURCE, i, "$", source);
+		free_string(source);
+	} END_FOR_EACH_PTR(arg);
+}
+
+void register_data_source(int id)
+{
+//	if (!option_info)
+//		return;
+	my_id = id;
+	add_hook(&match_caller_info, FUNCTION_CALL_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:25 2018
+++ new/usr/src/tools/smatch/src/smatch_db.c	Fri Dec 21 15:00:25 2018
@@ -0,0 +1,2586 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include <string.h>
+#include <errno.h>
+#include <unistd.h>
+#include <ctype.h>
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+struct sqlite3 *smatch_db;
+struct sqlite3 *mem_db;
+struct sqlite3 *cache_db;
+
+static int return_id;
+
+#define SQLITE_CACHE_PAGES 1000
+
+struct def_callback {
+	int hook_type;
+	void (*callback)(const char *name, struct symbol *sym, char *key, char *value);
+};
+ALLOCATOR(def_callback, "definition db hook callbacks");
+DECLARE_PTR_LIST(callback_list, struct def_callback);
+static struct callback_list *select_caller_info_callbacks;
+
+struct member_info_callback {
+	int owner;
+	void (*callback)(struct expression *call, int param, char *printed_name, struct sm_state *sm);
+};
+ALLOCATOR(member_info_callback, "caller_info callbacks");
+DECLARE_PTR_LIST(member_info_cb_list, struct member_info_callback);
+static struct member_info_cb_list *member_callbacks;
+
+struct returned_state_callback {
+	void (*callback)(int return_id, char *return_ranges, struct expression *return_expr);
+};
+ALLOCATOR(returned_state_callback, "returned state callbacks");
+DECLARE_PTR_LIST(returned_state_cb_list, struct returned_state_callback);
+static struct returned_state_cb_list *returned_state_callbacks;
+
+struct returned_member_callback {
+	int owner;
+	void (*callback)(int return_id, char *return_ranges, struct expression *expr, char *printed_name, struct smatch_state *state);
+};
+ALLOCATOR(returned_member_callback, "returned member callbacks");
+DECLARE_PTR_LIST(returned_member_cb_list, struct returned_member_callback);
+static struct returned_member_cb_list *returned_member_callbacks;
+
+struct db_implies_callback {
+	int type;
+	void (*callback)(struct expression *call, struct expression *arg, char *key, char *value);
+};
+ALLOCATOR(db_implies_callback, "return_implies callbacks");
+DECLARE_PTR_LIST(db_implies_cb_list, struct db_implies_callback);
+static struct db_implies_cb_list *return_implies_cb_list;
+static struct db_implies_cb_list *call_implies_cb_list;
+
+/* silently truncates if needed. */
+char *escape_newlines(const char *str)
+{
+	char buf[1024] = "";
+	bool found = false;
+	int i, j;
+
+	for (i = 0, j = 0; str[i] != '\0' && j != sizeof(buf); i++, j++) {
+		if (str[i] != '\n') {
+			buf[j] = str[i];
+			continue;
+		}
+
+		found = true;
+		buf[j++] = '\\';
+		if (j == sizeof(buf))
+			 break;
+		buf[j] = 'n';
+	}
+
+	if (!found)
+		return alloc_sname(str);
+
+	if (j == sizeof(buf))
+		buf[j - 1] = '\0';
+	return alloc_sname(buf);
+}
+
+static int print_sql_output(void *unused, int argc, char **argv, char **azColName)
+{
+	int i;
+
+	for (i = 0; i < argc; i++) {
+		if (i != 0)
+			printf(", ");
+		sm_printf("%s", argv[i]);
+	}
+	sm_printf("\n");
+	return 0;
+}
+
+void sql_exec(struct sqlite3 *db, int (*callback)(void*, int, char**, char**), void *data, const char *sql)
+{
+	char *err = NULL;
+	int rc;
+
+	if (!db)
+		return;
+
+	if (option_debug) {
+		sm_msg("%s", sql);
+		if (strncasecmp(sql, "select", strlen("select")) == 0)
+			sqlite3_exec(db, sql, print_sql_output, NULL, NULL);
+	}
+
+	rc = sqlite3_exec(db, sql, callback, data, &err);
+	if (rc != SQLITE_OK && !parse_error) {
+		sm_ierror("%s:%d SQL error #2: %s\n", get_filename(), get_lineno(), err);
+		sm_ierror("%s:%d SQL: '%s'\n", get_filename(), get_lineno(), sql);
+		parse_error = 1;
+	}
+}
+
+static int replace_count;
+static char **replace_table;
+static const char *replace_return_ranges(const char *return_ranges)
+{
+	int i;
+
+	if (!get_function()) {
+		/* I have no idea why EXPORT_SYMBOL() is here */
+		return return_ranges;
+	}
+	for (i = 0; i < replace_count; i += 3) {
+		if (strcmp(replace_table[i + 0], get_function()) == 0) {
+			if (strcmp(replace_table[i + 1], return_ranges) == 0)
+				return replace_table[i + 2];
+		}
+	}
+	return return_ranges;
+}
+
+
+static char *use_states;
+static int get_db_state_count(void)
+{
+	struct sm_state *sm;
+	int count = 0;
+
+	FOR_EACH_SM(__get_cur_stree(), sm) {
+		if (sm->owner == USHRT_MAX)
+			continue;
+		if (use_states[sm->owner])
+			count++;
+	} END_FOR_EACH_SM(sm);
+	return count;
+}
+
+void db_ignore_states(int id)
+{
+	use_states[id] = 0;
+}
+
+void sql_insert_return_states(int return_id, const char *return_ranges,
+		int type, int param, const char *key, const char *value)
+{
+	if (key && strlen(key) >= 80)
+		return;
+	return_ranges = replace_return_ranges(return_ranges);
+	sql_insert(return_states, "'%s', '%s', %lu, %d, '%s', %d, %d, %d, '%s', '%s'",
+		   get_base_file(), get_function(), (unsigned long)__inline_fn,
+		   return_id, return_ranges, fn_static(), type, param, key, value);
+}
+
+static struct string_list *common_funcs;
+static int is_common_function(const char *fn)
+{
+	char *tmp;
+
+	if (!fn)
+		return 0;
+
+	if (strncmp(fn, "__builtin_", 10) == 0)
+		return 1;
+
+	FOR_EACH_PTR(common_funcs, tmp) {
+		if (strcmp(tmp, fn) == 0)
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+
+	return 0;
+}
+
+static char *function_signature(void)
+{
+	return type_to_str(get_real_base_type(cur_func_sym));
+}
+
+void sql_insert_caller_info(struct expression *call, int type,
+		int param, const char *key, const char *value)
+{
+	FILE *tmp_fd = sm_outfd;
+	char *fn;
+
+	if (!option_info && !__inline_call)
+		return;
+
+	if (key && strlen(key) >= 80)
+		return;
+
+	fn = get_fnptr_name(call->fn);
+	if (!fn)
+		return;
+
+	if (__inline_call) {
+		mem_sql(NULL, NULL,
+			"insert into caller_info values ('%s', '%s', '%s', %lu, %d, %d, %d, '%s', '%s');",
+			get_base_file(), get_function(), fn, (unsigned long)call,
+			is_static(call->fn), type, param, key, value);
+	}
+
+	if (!option_info)
+		return;
+
+	if (strncmp(fn, "__builtin_", 10) == 0)
+		return;
+	if (type != INTERNAL && is_common_function(fn))
+		return;
+
+	sm_outfd = caller_info_fd;
+	sm_msg("SQL_caller_info: insert into caller_info values ("
+	       "'%s', '%s', '%s', %%CALL_ID%%, %d, %d, %d, '%s', '%s');",
+	       get_base_file(), get_function(), fn, is_static(call->fn),
+	       type, param, key, value);
+	sm_outfd = tmp_fd;
+
+	free_string(fn);
+}
+
+void sql_insert_function_ptr(const char *fn, const char *struct_name)
+{
+	sql_insert(function_ptr, "'%s', '%s', '%s', 0", get_base_file(), fn,
+		   struct_name);
+}
+
+void sql_insert_return_implies(int type, int param, const char *key, const char *value)
+{
+	sql_insert_or_ignore(return_implies, "'%s', '%s', %lu, %d, %d, %d, '%s', '%s'",
+		get_base_file(), get_function(), (unsigned long)__inline_fn,
+		fn_static(), type, param, key, value);
+}
+
+void sql_insert_call_implies(int type, int param, const char *key, const char *value)
+{
+	sql_insert_or_ignore(call_implies, "'%s', '%s', %lu, %d, %d, %d, '%s', '%s'",
+		get_base_file(), get_function(), (unsigned long)__inline_fn,
+		fn_static(), type, param, key, value);
+}
+
+void sql_insert_function_type_size(const char *member, const char *ranges)
+{
+	sql_insert(function_type_size, "'%s', '%s', '%s', '%s'", get_base_file(), get_function(), member, ranges);
+}
+
+void sql_insert_function_type_info(int type, const char *struct_type, const char *member, const char *value)
+{
+	sql_insert(function_type_info, "'%s', '%s', %d, '%s', '%s', '%s'", get_base_file(), get_function(), type, struct_type, member, value);
+}
+
+void sql_insert_type_info(int type, const char *member, const char *value)
+{
+	sql_insert_cache(type_info, "'%s', %d, '%s', '%s'", get_base_file(), type, member, value);
+}
+
+void sql_insert_local_values(const char *name, const char *value)
+{
+	sql_insert(local_values, "'%s', '%s', '%s'", get_base_file(), name, value);
+}
+
+void sql_insert_function_type_value(const char *type, const char *value)
+{
+	sql_insert(function_type_value, "'%s', '%s', '%s', '%s'", get_base_file(), get_function(), type, value);
+}
+
+void sql_insert_function_type(int param, const char *value)
+{
+	sql_insert(function_type, "'%s', '%s', %d, %d, '%s'",
+		   get_base_file(), get_function(), fn_static(), param, value);
+}
+
+void sql_insert_parameter_name(int param, const char *value)
+{
+	sql_insert(parameter_name, "'%s', '%s', %d, %d, '%s'",
+		   get_base_file(), get_function(), fn_static(), param, value);
+}
+
+void sql_insert_data_info(struct expression *data, int type, const char *value)
+{
+	char *data_name;
+
+	data_name = get_data_info_name(data);
+	if (!data_name)
+		return;
+	sql_insert(data_info, "'%s', '%s', %d, '%s'",
+		   is_static(data) ? get_base_file() : "extern",
+		   data_name, type, value);
+}
+
+void sql_insert_data_info_var_sym(const char *var, struct symbol *sym, int type, const char *value)
+{
+	sql_insert(data_info, "'%s', '%s', %d, '%s'",
+		   (sym->ctype.modifiers & MOD_STATIC) ? get_base_file() : "extern",
+		   var, type, value);
+}
+
+void sql_save_constraint(const char *con)
+{
+	if (!option_info)
+		return;
+
+        sm_msg("SQL: insert or ignore into constraints (str) values('%s');", con);
+}
+
+void sql_save_constraint_required(const char *data, int op, const char *limit)
+{
+	sql_insert_or_ignore(constraints_required, "'%s', '%s', '%s'", data, show_special(op), limit);
+}
+
+void sql_copy_constraint_required(const char *new_limit, const char *old_limit)
+{
+	if (!option_info)
+		return;
+
+	sm_msg("SQL_late: insert or ignore into constraints_required (data, op, bound) "
+		"select constraints_required.data, constraints_required.op, '%s' from "
+		"constraints_required where bound = '%s';", new_limit, old_limit);
+}
+
+void sql_insert_fn_ptr_data_link(const char *ptr, const char *data)
+{
+	sql_insert_or_ignore(fn_ptr_data_link, "'%s', '%s'", ptr, data);
+}
+
+void sql_insert_fn_data_link(struct expression *fn, int type, int param, const char *key, const char *value)
+{
+	if (fn->type != EXPR_SYMBOL || !fn->symbol->ident)
+		return;
+
+	sql_insert(fn_data_link, "'%s', '%s', %d, %d, %d, '%s', '%s'",
+		   (fn->symbol->ctype.modifiers & MOD_STATIC) ? get_base_file() : "extern",
+		   fn->symbol->ident->name,
+		   !!(fn->symbol->ctype.modifiers & MOD_STATIC),
+		   type, param, key, value);
+}
+
+void sql_insert_mtag_about(mtag_t tag, const char *left_name, const char *right_name)
+{
+	sql_insert(mtag_about, "%lld, '%s', '%s', %d, '%s', '%s'",
+		   tag, get_filename(), get_function(), get_lineno(), left_name, right_name);
+}
+
+void sql_insert_mtag_data(mtag_t tag, const char *var, int offset, int type, const char *value)
+{
+	sql_insert(mtag_data, "%lld, '%s', %d, %d, '%s'", tag, var, offset, type, value);
+}
+
+void sql_insert_mtag_map(mtag_t tag, int offset, mtag_t container)
+{
+	sql_insert(mtag_map, "%lld, %d, %lld", tag, offset, container);
+}
+
+void sql_insert_mtag_alias(mtag_t orig, mtag_t alias)
+{
+	sql_insert(mtag_alias, "%lld, %lld", orig, alias);
+}
+
+static int save_mtag(void *_tag, int argc, char **argv, char **azColName)
+{
+	mtag_t *saved_tag = _tag;
+	mtag_t new_tag;
+
+	new_tag = strtoll(argv[0], NULL, 10);
+
+	if (!*saved_tag)
+		*saved_tag = new_tag;
+	else if (*saved_tag != new_tag)
+		*saved_tag = -1ULL;
+
+	return 0;
+}
+
+int mtag_map_select_container(mtag_t tag, int offset, mtag_t *container)
+{
+	mtag_t tmp = 0;
+
+	run_sql(save_mtag, &tmp,
+		"select container from mtag_map where tag = %lld and offset = %d;",
+		tag, offset);
+
+	if (tmp == 0 || tmp == -1ULL)
+		return 0;
+	*container = tmp;
+	return 1;
+}
+
+int mtag_map_select_tag(mtag_t container, int offset, mtag_t *tag)
+{
+	mtag_t tmp = 0;
+
+	run_sql(save_mtag, &tmp,
+		"select tag from mtag_map where container = %lld and offset = %d;",
+		container, offset);
+
+	if (tmp == 0 || tmp == -1ULL)
+		return 0;
+	*tag = tmp;
+	return 1;
+}
+
+char *get_static_filter(struct symbol *sym)
+{
+	static char sql_filter[1024];
+
+	/* This can only happen on buggy code.  Return invalid SQL. */
+	if (!sym) {
+		sql_filter[0] = '\0';
+		return sql_filter;
+	}
+
+	if (sym->ctype.modifiers & MOD_STATIC) {
+		snprintf(sql_filter, sizeof(sql_filter),
+			 "file = '%s' and function = '%s' and static = '1'",
+			 get_base_file(), sym->ident->name);
+	} else {
+		snprintf(sql_filter, sizeof(sql_filter),
+			 "function = '%s' and static = '0'", sym->ident->name);
+	}
+
+	return sql_filter;
+}
+
+static int get_row_count(void *_row_count, int argc, char **argv, char **azColName)
+{
+	int *row_count = _row_count;
+
+	*row_count = 0;
+	if (argc != 1)
+		return 0;
+	*row_count = atoi(argv[0]);
+	return 0;
+}
+
+static void mark_call_params_untracked(struct expression *call)
+{
+	struct expression *arg;
+	int i = 0;
+
+	FOR_EACH_PTR(call->args, arg) {
+		mark_untracked(call, i++, "$", NULL);
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void sql_select_return_states_pointer(const char *cols,
+	struct expression *call, int (*callback)(void*, int, char**, char**), void *info)
+{
+	char *ptr;
+	int return_count = 0;
+
+	ptr = get_fnptr_name(call->fn);
+	if (!ptr)
+		return;
+
+	run_sql(get_row_count, &return_count,
+		"select count(*) from return_states join function_ptr "
+		"where return_states.function == function_ptr.function and "
+		"ptr = '%s' and searchable = 1 and type = %d;", ptr, INTERNAL);
+	/* The magic number 100 is just from testing on the kernel. */
+	if (return_count > 100) {
+		mark_call_params_untracked(call);
+		return;
+	}
+
+	run_sql(callback, info,
+		"select %s from return_states join function_ptr where "
+		"return_states.function == function_ptr.function and ptr = '%s' "
+		"and searchable = 1 "
+		"order by function_ptr.file, return_states.file, return_id, type;",
+		cols, ptr);
+}
+
+static int is_local_symbol(struct expression *expr)
+{
+	if (expr->type != EXPR_SYMBOL)
+		return 0;
+	if (expr->symbol->ctype.modifiers & (MOD_NONLOCAL | MOD_STATIC | MOD_ADDRESSABLE))
+		return 0;
+	return 1;
+}
+
+void sql_select_return_states(const char *cols, struct expression *call,
+	int (*callback)(void*, int, char**, char**), void *info)
+{
+	int row_count = 0;
+
+	if (is_fake_call(call))
+		return;
+
+	if (call->fn->type != EXPR_SYMBOL || !call->fn->symbol || is_local_symbol(call->fn)) {
+		sql_select_return_states_pointer(cols, call, callback, info);
+		return;
+	}
+
+	if (inlinable(call->fn)) {
+		mem_sql(callback, info,
+			"select %s from return_states where call_id = '%lu' order by return_id, type;",
+			cols, (unsigned long)call);
+		return;
+	}
+
+	run_sql(get_row_count, &row_count, "select count(*) from return_states where %s;",
+		get_static_filter(call->fn->symbol));
+	if (row_count > 3000)
+		return;
+
+	run_sql(callback, info, "select %s from return_states where %s order by file, return_id, type;",
+		cols, get_static_filter(call->fn->symbol));
+}
+
+#define CALL_IMPLIES 0
+#define RETURN_IMPLIES 1
+
+struct implies_info {
+	int type;
+	struct db_implies_cb_list *cb_list;
+	struct expression *expr;
+	struct symbol *sym;
+};
+
+void sql_select_implies(const char *cols, struct implies_info *info,
+	int (*callback)(void*, int, char**, char**))
+{
+	if (info->type == RETURN_IMPLIES && inlinable(info->expr->fn)) {
+		mem_sql(callback, info,
+			"select %s from return_implies where call_id = '%lu';",
+			cols, (unsigned long)info->expr);
+		return;
+	}
+
+	run_sql(callback, info, "select %s from %s_implies where %s;",
+		cols,
+		info->type == CALL_IMPLIES ? "call" : "return",
+		get_static_filter(info->sym));
+}
+
+struct select_caller_info_data {
+	struct stree *final_states;
+	struct timeval start_time;
+	int prev_func_id;
+	int ignore;
+	int results;
+};
+
+static int caller_info_callback(void *_data, int argc, char **argv, char **azColName);
+
+static void sql_select_caller_info(struct select_caller_info_data *data,
+	const char *cols, struct symbol *sym)
+{
+	if (__inline_fn) {
+		mem_sql(caller_info_callback, data,
+			"select %s from caller_info where call_id = %lu;",
+			cols, (unsigned long)__inline_fn);
+		return;
+	}
+
+	if (sym->ident->name && is_common_function(sym->ident->name))
+		return;
+	run_sql(caller_info_callback, data,
+		"select %s from common_caller_info where %s order by call_id;",
+		cols, get_static_filter(sym));
+	if (data->results)
+		return;
+
+	run_sql(caller_info_callback, data,
+		"select %s from caller_info where %s order by call_id;",
+		cols, get_static_filter(sym));
+}
+
+void select_caller_info_hook(void (*callback)(const char *name, struct symbol *sym, char *key, char *value), int type)
+{
+	struct def_callback *def_callback = __alloc_def_callback(0);
+
+	def_callback->hook_type = type;
+	def_callback->callback = callback;
+	add_ptr_list(&select_caller_info_callbacks, def_callback);
+}
+
+/*
+ * These call backs are used when the --info option is turned on to print struct
+ * member information.  For example foo->bar could have a state in
+ * smatch_extra.c and also check_user.c.
+ */
+void add_member_info_callback(int owner, void (*callback)(struct expression *call, int param, char *printed_name, struct sm_state *sm))
+{
+	struct member_info_callback *member_callback = __alloc_member_info_callback(0);
+
+	member_callback->owner = owner;
+	member_callback->callback = callback;
+	add_ptr_list(&member_callbacks, member_callback);
+}
+
+void add_split_return_callback(void (*fn)(int return_id, char *return_ranges, struct expression *returned_expr))
+{
+	struct returned_state_callback *callback = __alloc_returned_state_callback(0);
+
+	callback->callback = fn;
+	add_ptr_list(&returned_state_callbacks, callback);
+}
+
+void add_returned_member_callback(int owner, void (*callback)(int return_id, char *return_ranges, struct expression *expr, char *printed_name, struct smatch_state *state))
+{
+	struct returned_member_callback *member_callback = __alloc_returned_member_callback(0);
+
+	member_callback->owner = owner;
+	member_callback->callback = callback;
+	add_ptr_list(&returned_member_callbacks, member_callback);
+}
+
+void select_call_implies_hook(int type, void (*callback)(struct expression *call, struct expression *arg, char *key, char *value))
+{
+	struct db_implies_callback *cb = __alloc_db_implies_callback(0);
+
+	cb->type = type;
+	cb->callback = callback;
+	add_ptr_list(&call_implies_cb_list, cb);
+}
+
+void select_return_implies_hook(int type, void (*callback)(struct expression *call, struct expression *arg, char *key, char *value))
+{
+	struct db_implies_callback *cb = __alloc_db_implies_callback(0);
+
+	cb->type = type;
+	cb->callback = callback;
+	add_ptr_list(&return_implies_cb_list, cb);
+}
+
+struct return_info {
+	struct expression *static_returns_call;
+	struct symbol *return_type;
+	struct range_list *return_range_list;
+};
+
+static int db_return_callback(void *_ret_info, int argc, char **argv, char **azColName)
+{
+	struct return_info *ret_info = _ret_info;
+	struct range_list *rl;
+	struct expression *call_expr = ret_info->static_returns_call;
+
+	if (argc != 1)
+		return 0;
+	call_results_to_rl(call_expr, ret_info->return_type, argv[0], &rl);
+	ret_info->return_range_list = rl_union(ret_info->return_range_list, rl);
+	return 0;
+}
+
+struct range_list *db_return_vals(struct expression *expr)
+{
+	struct return_info ret_info = {};
+	char buf[64];
+	struct sm_state *sm;
+
+	if (is_fake_call(expr))
+		return NULL;
+
+	snprintf(buf, sizeof(buf), "return %p", expr);
+	sm = get_sm_state(SMATCH_EXTRA, buf, NULL);
+	if (sm)
+		return clone_rl(estate_rl(sm->state));
+	ret_info.static_returns_call = expr;
+	ret_info.return_type = get_type(expr);
+	if (!ret_info.return_type)
+		return NULL;
+
+	if (expr->fn->type != EXPR_SYMBOL || !expr->fn->symbol)
+		return NULL;
+
+	ret_info.return_range_list = NULL;
+	if (inlinable(expr->fn)) {
+		mem_sql(db_return_callback, &ret_info,
+			"select distinct return from return_states where call_id = '%lu';",
+			(unsigned long)expr);
+	} else {
+		run_sql(db_return_callback, &ret_info,
+			"select distinct return from return_states where %s;",
+			get_static_filter(expr->fn->symbol));
+	}
+	return ret_info.return_range_list;
+}
+
+struct range_list *db_return_vals_from_str(const char *fn_name)
+{
+	struct return_info ret_info;
+
+	ret_info.static_returns_call = NULL;
+	ret_info.return_type = &llong_ctype;
+	ret_info.return_range_list = NULL;
+
+	run_sql(db_return_callback, &ret_info,
+		"select distinct return from return_states where function = '%s';",
+		fn_name);
+	return ret_info.return_range_list;
+}
+
+static void match_call_marker(struct expression *expr)
+{
+	struct symbol *type;
+
+	type = get_type(expr->fn);
+	if (type && type->type == SYM_PTR)
+		type = get_real_base_type(type);
+
+	/*
+	 * we just want to record something in the database so that if we have
+	 * two calls like:  frob(4); frob(some_unkown); then on the receiving
+	 * side we know that sometimes frob is called with unknown parameters.
+	 */
+
+	sql_insert_caller_info(expr, INTERNAL, -1, "%call_marker%", type_to_str(type));
+}
+
+static char *show_offset(int offset)
+{
+	static char buf[64];
+
+	buf[0] = '\0';
+	if (offset != -1)
+		snprintf(buf, sizeof(buf), "(-%d)", offset);
+	return buf;
+}
+
+static void print_struct_members(struct expression *call, struct expression *expr, int param, int offset, struct stree *stree,
+	void (*callback)(struct expression *call, int param, char *printed_name, struct sm_state *sm))
+{
+	struct sm_state *sm;
+	char *name;
+	struct symbol *sym;
+	int len;
+	char printed_name[256];
+	int is_address = 0;
+	struct symbol *type;
+
+	expr = strip_expr(expr);
+	if (!expr)
+		return;
+	if (expr->type == EXPR_PREOP && expr->op == '&') {
+		expr = strip_expr(expr->unop);
+		is_address = 1;
+	}
+
+	type = get_type(expr);
+	if (type && type_bits(type) < type_bits(&ulong_ctype))
+		return;
+
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+
+	len = strlen(name);
+	FOR_EACH_SM(stree, sm) {
+		if (sm->sym != sym)
+			continue;
+		if (strcmp(name, sm->name) == 0) {
+			if (is_address)
+				snprintf(printed_name, sizeof(printed_name), "*$%s", show_offset(offset));
+			else /* these are already handled. fixme: handle them here */
+				continue;
+		} else if (sm->name[0] == '*' && strcmp(name, sm->name + 1) == 0) {
+			snprintf(printed_name, sizeof(printed_name), "*$%s", show_offset(offset));
+		} else if (strncmp(name, sm->name, len) == 0) {
+			if (isalnum(sm->name[len]))
+				continue;
+			if (is_address)
+				snprintf(printed_name, sizeof(printed_name), "$%s->%s", show_offset(offset), sm->name + len + 1);
+			else
+				snprintf(printed_name, sizeof(printed_name), "$%s%s", show_offset(offset), sm->name + len);
+		} else {
+			continue;
+		}
+		callback(call, param, printed_name, sm);
+	} END_FOR_EACH_SM(sm);
+free:
+	free_string(name);
+}
+
+static int param_used_callback(void *_container, int argc, char **argv, char **azColName)
+{
+	char **container = _container;
+	static char buf[256];
+
+	snprintf(buf, sizeof(buf), "%s", argv[0]);
+	*container = buf;
+	return 0;
+}
+
+static void print_container_struct_members(struct expression *call, struct expression *expr, int param, struct stree *stree,
+	void (*callback)(struct expression *call, int param, char *printed_name, struct sm_state *sm))
+{
+	struct expression *tmp;
+	char *container = NULL;
+	int offset;
+	int holder_offset;
+	char *p;
+
+	if (!call->fn || call->fn->type != EXPR_SYMBOL || !call->fn->symbol)
+		return;
+
+	/*
+	 * We can't use the in-mem DB because we have to parse the function
+	 * first, then we know if it takes a container, then we know to pass it
+	 * the container data.
+	 *
+	 */
+	run_sql(&param_used_callback, &container,
+		"select key from return_implies where %s and type = %d and key like '%%$(%%' and parameter = %d limit 1;",
+		get_static_filter(call->fn->symbol), CONTAINER, param);
+	if (!container)
+		return;
+
+	p = strchr(container, '-');
+	if (!p)
+		return;
+	offset = atoi(p);
+	p = strchr(p, ')');
+	if (!p)
+		return;
+	p++;
+
+	tmp = get_assigned_expr(expr);
+	if (tmp)
+		expr = tmp;
+
+	if (expr->type != EXPR_PREOP || expr->op != '&')
+		return;
+	expr = strip_expr(expr->unop);
+	holder_offset = get_member_offset_from_deref(expr);
+	if (-holder_offset != offset)
+		return;
+
+	expr = strip_expr(expr->deref);
+	if (expr->type == EXPR_PREOP && expr->op == '*')
+		expr = strip_expr(expr->unop);
+
+	print_struct_members(call, expr, param, holder_offset, stree, callback);
+}
+
+static void match_call_info(struct expression *call)
+{
+	struct member_info_callback *cb;
+	struct expression *arg;
+	struct stree *stree;
+	char *name;
+	int i;
+
+	name = get_fnptr_name(call->fn);
+	if (!name)
+		return;
+
+	FOR_EACH_PTR(member_callbacks, cb) {
+		stree = get_all_states_stree(cb->owner);
+		i = 0;
+		FOR_EACH_PTR(call->args, arg) {
+			print_struct_members(call, arg, i, -1, stree, cb->callback);
+			print_container_struct_members(call, arg, i, stree, cb->callback);
+			i++;
+		} END_FOR_EACH_PTR(arg);
+		free_stree(&stree);
+	} END_FOR_EACH_PTR(cb);
+
+	free_string(name);
+}
+
+static int get_param(int param, char **name, struct symbol **sym)
+{
+	struct symbol *arg;
+	int i;
+
+	i = 0;
+	FOR_EACH_PTR(cur_func_sym->ctype.base_type->arguments, arg) {
+		/*
+		 * this is a temporary hack to work around a bug (I think in sparse?)
+		 * 2.6.37-rc1:fs/reiserfs/journal.o
+		 * If there is a function definition without parameter name found
+		 * after a function implementation then it causes a crash.
+		 * int foo() {}
+		 * int bar(char *);
+		 */
+		if (arg->ident->name < (char *)100)
+			continue;
+		if (i == param) {
+			*name = arg->ident->name;
+			*sym = arg;
+			return TRUE;
+		}
+		i++;
+	} END_FOR_EACH_PTR(arg);
+
+	return FALSE;
+}
+
+static int function_signature_matches(const char *sig)
+{
+	char *my_sig;
+
+	my_sig = function_signature();
+	if (!sig || !my_sig)
+		return 1;  /* default to matching */
+	if (strcmp(my_sig, sig) == 0)
+		  return 1;
+	return 0;
+}
+
+static int caller_info_callback(void *_data, int argc, char **argv, char **azColName)
+{
+	struct select_caller_info_data *data = _data;
+	int func_id;
+	long type;
+	long param;
+	char *key;
+	char *value;
+	char *name = NULL;
+	struct symbol *sym = NULL;
+	struct def_callback *def_callback;
+	struct stree *stree;
+	struct timeval cur_time;
+
+	data->results = 1;
+
+	if (argc != 5)
+		return 0;
+
+	gettimeofday(&cur_time, NULL);
+	if (cur_time.tv_sec - data->start_time.tv_sec > 10)
+		return 0;
+
+	func_id = atoi(argv[0]);
+	errno = 0;
+	type = strtol(argv[1], NULL, 10);
+	param = strtol(argv[2], NULL, 10);
+	if (errno)
+		return 0;
+	key = argv[3];
+	value = argv[4];
+
+	if (data->prev_func_id == -1)
+		data->prev_func_id = func_id;
+	if (func_id != data->prev_func_id) {
+		stree = __pop_fake_cur_stree();
+		if (!data->ignore)
+			merge_stree(&data->final_states, stree);
+		free_stree(&stree);
+		__push_fake_cur_stree();
+		__unnullify_path();
+		data->prev_func_id = func_id;
+		data->ignore = 0;
+	}
+
+	if (data->ignore)
+		return 0;
+	if (type == INTERNAL &&
+	    !function_signature_matches(value)) {
+		data->ignore = 1;
+		return 0;
+	}
+
+	if (param >= 0 && !get_param(param, &name, &sym))
+		return 0;
+
+	FOR_EACH_PTR(select_caller_info_callbacks, def_callback) {
+		if (def_callback->hook_type == type)
+			def_callback->callback(name, sym, key, value);
+	} END_FOR_EACH_PTR(def_callback);
+
+	return 0;
+}
+
+static struct string_list *ptr_names_done;
+static struct string_list *ptr_names;
+
+static int get_ptr_name(void *unused, int argc, char **argv, char **azColName)
+{
+	insert_string(&ptr_names, alloc_string(argv[0]));
+	return 0;
+}
+
+static char *get_next_ptr_name(void)
+{
+	char *ptr;
+
+	FOR_EACH_PTR(ptr_names, ptr) {
+		if (list_has_string(ptr_names_done, ptr))
+			continue;
+		insert_string(&ptr_names_done, ptr);
+		return ptr;
+	} END_FOR_EACH_PTR(ptr);
+	return NULL;
+}
+
+static void get_ptr_names(const char *file, const char *name)
+{
+	char sql_filter[1024];
+	int before, after;
+
+	if (file) {
+		snprintf(sql_filter, 1024, "file = '%s' and function = '%s';",
+			 file, name);
+	} else {
+		snprintf(sql_filter, 1024, "function = '%s';", name);
+	}
+
+	before = ptr_list_size((struct ptr_list *)ptr_names);
+
+	run_sql(get_ptr_name, NULL,
+		"select distinct ptr from function_ptr where %s",
+		sql_filter);
+
+	after = ptr_list_size((struct ptr_list *)ptr_names);
+	if (before == after)
+		return;
+
+	while ((name = get_next_ptr_name()))
+		get_ptr_names(NULL, name);
+}
+
+static void match_data_from_db(struct symbol *sym)
+{
+	struct select_caller_info_data data = { .prev_func_id = -1 };
+	struct sm_state *sm;
+	struct stree *stree;
+	struct timeval end_time;
+
+	if (!sym || !sym->ident)
+		return;
+
+	gettimeofday(&data.start_time, NULL);
+
+	__push_fake_cur_stree();
+	__unnullify_path();
+
+	if (!__inline_fn) {
+		char *ptr;
+
+		if (sym->ctype.modifiers & MOD_STATIC)
+			get_ptr_names(get_base_file(), sym->ident->name);
+		else
+			get_ptr_names(NULL, sym->ident->name);
+
+		if (ptr_list_size((struct ptr_list *)ptr_names) > 20) {
+			__free_ptr_list((struct ptr_list **)&ptr_names);
+			__free_ptr_list((struct ptr_list **)&ptr_names_done);
+			stree = __pop_fake_cur_stree();
+			free_stree(&stree);
+			return;
+		}
+
+		sql_select_caller_info(&data,
+				       "call_id, type, parameter, key, value",
+				       sym);
+
+
+		stree = __pop_fake_cur_stree();
+		if (!data.ignore)
+			merge_stree(&data.final_states, stree);
+		free_stree(&stree);
+		__push_fake_cur_stree();
+		__unnullify_path();
+		data.prev_func_id = -1;
+		data.ignore = 0;
+
+		FOR_EACH_PTR(ptr_names, ptr) {
+			run_sql(caller_info_callback, &data,
+				"select call_id, type, parameter, key, value"
+				" from common_caller_info where function = '%s' order by call_id",
+				ptr);
+		} END_FOR_EACH_PTR(ptr);
+
+		if (data.results) {
+			FOR_EACH_PTR(ptr_names, ptr) {
+				free_string(ptr);
+			} END_FOR_EACH_PTR(ptr);
+			goto free_ptr_names;
+		}
+
+		FOR_EACH_PTR(ptr_names, ptr) {
+			run_sql(caller_info_callback, &data,
+				"select call_id, type, parameter, key, value"
+				" from caller_info where function = '%s' order by call_id",
+				ptr);
+			free_string(ptr);
+		} END_FOR_EACH_PTR(ptr);
+
+free_ptr_names:
+		__free_ptr_list((struct ptr_list **)&ptr_names);
+		__free_ptr_list((struct ptr_list **)&ptr_names_done);
+	} else {
+		sql_select_caller_info(&data,
+				       "call_id, type, parameter, key, value",
+				       sym);
+	}
+
+	stree = __pop_fake_cur_stree();
+	if (!data.ignore)
+		merge_stree(&data.final_states, stree);
+	free_stree(&stree);
+
+	gettimeofday(&end_time, NULL);
+	if (end_time.tv_sec - data.start_time.tv_sec <= 10) {
+		FOR_EACH_SM(data.final_states, sm) {
+			__set_sm(sm);
+		} END_FOR_EACH_SM(sm);
+	}
+
+	free_stree(&data.final_states);
+}
+
+static int return_implies_callbacks(void *_info, int argc, char **argv, char **azColName)
+{
+	struct implies_info *info = _info;
+	struct db_implies_callback *cb;
+	struct expression *arg = NULL;
+	int type;
+	int param;
+
+	if (argc != 5)
+		return 0;
+
+	type = atoi(argv[1]);
+	param = atoi(argv[2]);
+
+	FOR_EACH_PTR(info->cb_list, cb) {
+		if (cb->type != type)
+			continue;
+		if (param != -1) {
+			arg = get_argument_from_call_expr(info->expr->args, param);
+			if (!arg)
+				continue;
+		}
+		cb->callback(info->expr, arg, argv[3], argv[4]);
+	} END_FOR_EACH_PTR(cb);
+
+	return 0;
+}
+
+static int call_implies_callbacks(void *_info, int argc, char **argv, char **azColName)
+{
+	struct implies_info *info = _info;
+	struct db_implies_callback *cb;
+	struct expression *arg;
+	struct symbol *sym;
+	char *name;
+	int type;
+	int param;
+
+	if (argc != 5)
+		return 0;
+
+	type = atoi(argv[1]);
+	param = atoi(argv[2]);
+
+	if (!get_param(param, &name, &sym))
+		return 0;
+	arg = symbol_expression(sym);
+	if (!arg)
+		return 0;
+
+	FOR_EACH_PTR(info->cb_list, cb) {
+		if (cb->type != type)
+			continue;
+		cb->callback(info->expr, arg, argv[3], argv[4]);
+	} END_FOR_EACH_PTR(cb);
+
+	return 0;
+}
+
+static void match_return_implies(struct expression *expr)
+{
+	struct implies_info info = {
+		.type = RETURN_IMPLIES,
+		.cb_list = return_implies_cb_list,
+	};
+
+	if (expr->fn->type != EXPR_SYMBOL ||
+	    !expr->fn->symbol)
+		return;
+	info.expr = expr;
+	info.sym = expr->fn->symbol;
+	sql_select_implies("function, type, parameter, key, value", &info,
+			   return_implies_callbacks);
+}
+
+static void match_call_implies(struct symbol *sym)
+{
+	struct implies_info info = {
+		.type = CALL_IMPLIES,
+		.cb_list = call_implies_cb_list,
+	};
+
+	if (!sym || !sym->ident)
+		return;
+
+	info.sym = sym;
+	sql_select_implies("function, type, parameter, key, value", &info,
+			   call_implies_callbacks);
+}
+
+static void print_initializer_list(struct expression_list *expr_list,
+		struct symbol *struct_type)
+{
+	struct expression *expr;
+	struct symbol *base_type;
+	char struct_name[256];
+
+	FOR_EACH_PTR(expr_list, expr) {
+		if (expr->type == EXPR_INDEX && expr->idx_expression && expr->idx_expression->type == EXPR_INITIALIZER) {
+			print_initializer_list(expr->idx_expression->expr_list, struct_type);
+			continue;
+		}
+		if (expr->type != EXPR_IDENTIFIER)
+			continue;
+		if (!expr->expr_ident)
+			continue;
+		if (!expr->ident_expression || !expr->ident_expression->symbol_name)
+			continue;
+		base_type = get_type(expr->ident_expression);
+		if (!base_type || base_type->type != SYM_FN)
+			continue;
+		snprintf(struct_name, sizeof(struct_name), "(struct %s)->%s",
+			 struct_type->ident->name, expr->expr_ident->name);
+		sql_insert_function_ptr(expr->ident_expression->symbol_name->name,
+				        struct_name);
+	} END_FOR_EACH_PTR(expr);
+}
+
+static void global_variable(struct symbol *sym)
+{
+	struct symbol *struct_type;
+
+	if (!sym->ident)
+		return;
+	if (!sym->initializer || sym->initializer->type != EXPR_INITIALIZER)
+		return;
+	struct_type = get_base_type(sym);
+	if (!struct_type)
+		return;
+	if (struct_type->type == SYM_ARRAY) {
+		struct_type = get_base_type(struct_type);
+		if (!struct_type)
+			return;
+	}
+	if (struct_type->type != SYM_STRUCT || !struct_type->ident)
+		return;
+	print_initializer_list(sym->initializer->expr_list, struct_type);
+}
+
+static void match_return_info(int return_id, char *return_ranges, struct expression *expr)
+{
+	sql_insert_return_states(return_id, return_ranges, INTERNAL, -1, "", function_signature());
+}
+
+static void call_return_state_hooks_conditional(struct expression *expr)
+{
+	struct returned_state_callback *cb;
+	struct range_list *rl;
+	char *return_ranges;
+	int final_pass_orig = final_pass;
+
+	__push_fake_cur_stree();
+
+	final_pass = 0;
+	__split_whole_condition(expr->conditional);
+	final_pass = final_pass_orig;
+
+	if (get_implied_rl(expr->cond_true, &rl))
+		rl = cast_rl(cur_func_return_type(), rl);
+	else
+		rl = cast_rl(cur_func_return_type(), alloc_whole_rl(get_type(expr->cond_true)));
+	return_ranges = show_rl(rl);
+	set_state(RETURN_ID, "return_ranges", NULL, alloc_estate_rl(rl));
+
+	return_id++;
+	FOR_EACH_PTR(returned_state_callbacks, cb) {
+		cb->callback(return_id, return_ranges, expr->cond_true);
+	} END_FOR_EACH_PTR(cb);
+
+	__push_true_states();
+	__use_false_states();
+
+	if (get_implied_rl(expr->cond_false, &rl))
+		rl = cast_rl(cur_func_return_type(), rl);
+	else
+		rl = cast_rl(cur_func_return_type(), alloc_whole_rl(get_type(expr->cond_false)));
+	return_ranges = show_rl(rl);
+	set_state(RETURN_ID, "return_ranges", NULL, alloc_estate_rl(rl));
+
+	return_id++;
+	FOR_EACH_PTR(returned_state_callbacks, cb) {
+		cb->callback(return_id, return_ranges, expr->cond_false);
+	} END_FOR_EACH_PTR(cb);
+
+	__merge_true_states();
+	__free_fake_cur_stree();
+}
+
+static void call_return_state_hooks_compare(struct expression *expr)
+{
+	struct returned_state_callback *cb;
+	char *return_ranges;
+	int final_pass_orig = final_pass;
+	sval_t sval = { .type = &int_ctype };
+	sval_t ret;
+
+	if (!get_implied_value(expr, &ret))
+		ret.value = -1;
+
+	__push_fake_cur_stree();
+
+	final_pass = 0;
+	__split_whole_condition(expr);
+	final_pass = final_pass_orig;
+
+	if (ret.value != 0) {
+		return_ranges = alloc_sname("1");
+		sval.value = 1;
+		set_state(RETURN_ID, "return_ranges", NULL, alloc_estate_sval(sval));
+
+		return_id++;
+		FOR_EACH_PTR(returned_state_callbacks, cb) {
+			cb->callback(return_id, return_ranges, expr);
+		} END_FOR_EACH_PTR(cb);
+	}
+
+	__push_true_states();
+	__use_false_states();
+
+	if (ret.value != 1) {
+		return_ranges = alloc_sname("0");
+		sval.value = 0;
+		set_state(RETURN_ID, "return_ranges", NULL, alloc_estate_sval(sval));
+
+		return_id++;
+		FOR_EACH_PTR(returned_state_callbacks, cb) {
+			cb->callback(return_id, return_ranges, expr);
+		} END_FOR_EACH_PTR(cb);
+	}
+
+	__merge_true_states();
+	__free_fake_cur_stree();
+}
+
+static int ptr_in_list(struct sm_state *sm, struct state_list *slist)
+{
+	struct sm_state *tmp;
+
+	FOR_EACH_PTR(slist, tmp) {
+		if (strcmp(tmp->state->name, sm->state->name) == 0)
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+
+	return 0;
+}
+
+static char *get_return_compare_str(struct expression *expr)
+{
+	char *compare_str;
+	char *var;
+	char buf[256];
+	int comparison;
+	int param;
+
+	compare_str = expr_lte_to_param(expr, -1);
+	if (compare_str)
+		return compare_str;
+	param = get_param_num(expr);
+	if (param < 0)
+		return NULL;
+
+	var = expr_to_var(expr);
+	if (!var)
+		return NULL;
+	snprintf(buf, sizeof(buf), "%s orig", var);
+	comparison = get_comparison_strings(var, buf);
+	free_string(var);
+
+	if (!comparison)
+		return NULL;
+
+	snprintf(buf, sizeof(buf), "[%s$%d]", show_special(comparison), param);
+	return alloc_sname(buf);
+}
+
+static int split_possible_helper(struct sm_state *sm, struct expression *expr)
+{
+	struct returned_state_callback *cb;
+	struct range_list *rl;
+	char *return_ranges;
+	struct sm_state *tmp;
+	int ret = 0;
+	int nr_possible, nr_states;
+	char *compare_str = NULL;
+	char buf[128];
+	struct state_list *already_handled = NULL;
+
+	if (!sm || !sm->merged)
+		return 0;
+
+	if (too_many_possible(sm))
+		return 0;
+
+	/* bail if it gets too complicated */
+	nr_possible = ptr_list_size((struct ptr_list *)sm->possible);
+	nr_states = get_db_state_count();
+	if (nr_states * nr_possible >= 2000)
+		return 0;
+
+	FOR_EACH_PTR(sm->possible, tmp) {
+		if (tmp->merged)
+			continue;
+		if (ptr_in_list(tmp, already_handled))
+			continue;
+		add_ptr_list(&already_handled, tmp);
+
+		ret = 1;
+		__push_fake_cur_stree();
+
+		overwrite_states_using_pool(sm, tmp);
+
+		rl = cast_rl(cur_func_return_type(), estate_rl(tmp->state));
+		return_ranges = show_rl(rl);
+		set_state(RETURN_ID, "return_ranges", NULL, alloc_estate_rl(clone_rl(rl)));
+		compare_str = get_return_compare_str(expr);
+		if (compare_str) {
+			snprintf(buf, sizeof(buf), "%s%s", return_ranges, compare_str);
+			return_ranges = alloc_sname(buf);
+		}
+
+		return_id++;
+		FOR_EACH_PTR(returned_state_callbacks, cb) {
+			cb->callback(return_id, return_ranges, expr);
+		} END_FOR_EACH_PTR(cb);
+
+		__free_fake_cur_stree();
+	} END_FOR_EACH_PTR(tmp);
+
+	free_slist(&already_handled);
+
+	return ret;
+}
+
+static int call_return_state_hooks_split_possible(struct expression *expr)
+{
+	struct sm_state *sm;
+
+	if (!expr || expr_equal_to_param(expr, -1))
+		return 0;
+
+	sm = get_sm_state_expr(SMATCH_EXTRA, expr);
+	return split_possible_helper(sm, expr);
+}
+
+static const char *get_return_ranges_str(struct expression *expr, struct range_list **rl_p)
+{
+	struct range_list *rl;
+	char *return_ranges;
+	sval_t sval;
+	char *compare_str;
+	char *math_str;
+	char buf[128];
+
+	*rl_p = NULL;
+
+	if (!expr)
+		return alloc_sname("");
+
+	if (get_implied_value(expr, &sval)) {
+		sval = sval_cast(cur_func_return_type(), sval);
+		*rl_p = alloc_rl(sval, sval);
+		return sval_to_str(sval);
+	}
+
+	compare_str = expr_equal_to_param(expr, -1);
+	math_str = get_value_in_terms_of_parameter_math(expr);
+
+	if (get_implied_rl(expr, &rl)) {
+		rl = cast_rl(cur_func_return_type(), rl);
+		return_ranges = show_rl(rl);
+	} else if (get_imaginary_absolute(expr, &rl)){
+		rl = cast_rl(cur_func_return_type(), rl);
+		return alloc_sname(show_rl(rl));
+	} else {
+		rl = cast_rl(cur_func_return_type(), alloc_whole_rl(get_type(expr)));
+		return_ranges = show_rl(rl);
+	}
+	*rl_p = rl;
+
+	if (compare_str) {
+		snprintf(buf, sizeof(buf), "%s%s", return_ranges, compare_str);
+		return alloc_sname(buf);
+	}
+	if (math_str) {
+		snprintf(buf, sizeof(buf), "%s[%s]", return_ranges, math_str);
+		return alloc_sname(buf);
+	}
+	compare_str = get_return_compare_str(expr);
+	if (compare_str) {
+		snprintf(buf, sizeof(buf), "%s%s", return_ranges, compare_str);
+		return alloc_sname(buf);
+	}
+
+	return return_ranges;
+}
+
+static bool has_possible_negative(struct sm_state *sm)
+{
+	struct sm_state *tmp;
+
+	FOR_EACH_PTR(sm->possible, tmp) {
+		if (!estate_rl(tmp->state))
+			continue;
+		if (sval_is_negative(estate_min(tmp->state)) &&
+		    sval_is_negative(estate_max(tmp->state)))
+			return true;
+	} END_FOR_EACH_PTR(tmp);
+
+	return false;
+}
+
+static bool has_possible_zero_null(struct sm_state *sm)
+{
+	struct sm_state *tmp;
+	sval_t sval;
+
+	FOR_EACH_PTR(sm->possible, tmp) {
+		if (!estate_get_single_value(tmp->state, &sval))
+			continue;
+		if (sval.value == 0)
+			return true;
+	} END_FOR_EACH_PTR(tmp);
+
+	return false;
+}
+
+static int split_positive_from_negative(struct expression *expr)
+{
+	struct sm_state *sm;
+	struct returned_state_callback *cb;
+	struct range_list *rl;
+	const char *return_ranges;
+	struct range_list *ret_rl;
+	int undo;
+
+	/* We're going to print the states 3 times */
+	if (get_db_state_count() > 10000 / 3)
+		return 0;
+
+	if (!get_implied_rl(expr, &rl) || !rl)
+		return 0;
+	if (is_whole_rl(rl) || is_whole_rl_non_zero(rl))
+		return 0;
+	/* Forget about INT_MAX and larger */
+	if (rl_max(rl).value <= 0)
+		return 0;
+	if (!sval_is_negative(rl_min(rl)))
+		return 0;
+
+	sm = get_sm_state_expr(SMATCH_EXTRA, expr);
+	if (!sm)
+		return 0;
+	if (!has_possible_negative(sm))
+		return 0;
+
+	if (!assume(compare_expression(expr, '>', zero_expr())))
+		return 0;
+
+	return_id++;
+	return_ranges = get_return_ranges_str(expr, &ret_rl);
+	set_state(RETURN_ID, "return_ranges", NULL, alloc_estate_rl(ret_rl));
+	FOR_EACH_PTR(returned_state_callbacks, cb) {
+		cb->callback(return_id, (char *)return_ranges, expr);
+	} END_FOR_EACH_PTR(cb);
+
+	end_assume();
+
+	if (rl_has_sval(rl, sval_type_val(rl_type(rl), 0))) {
+		undo = assume(compare_expression(expr, SPECIAL_EQUAL, zero_expr()));
+
+		return_id++;
+		return_ranges = get_return_ranges_str(expr, &ret_rl);
+		set_state(RETURN_ID, "return_ranges", NULL, alloc_estate_rl(ret_rl));
+		FOR_EACH_PTR(returned_state_callbacks, cb) {
+			cb->callback(return_id, (char *)return_ranges, expr);
+		} END_FOR_EACH_PTR(cb);
+
+		if (undo)
+			end_assume();
+	}
+
+	undo = assume(compare_expression(expr, '<', zero_expr()));
+
+	return_id++;
+	return_ranges = get_return_ranges_str(expr, &ret_rl);
+	set_state(RETURN_ID, "return_ranges", NULL, alloc_estate_rl(ret_rl));
+	FOR_EACH_PTR(returned_state_callbacks, cb) {
+		cb->callback(return_id, (char *)return_ranges, expr);
+	} END_FOR_EACH_PTR(cb);
+
+	if (undo)
+		end_assume();
+
+	return 1;
+}
+
+static int call_return_state_hooks_split_null_non_null(struct expression *expr)
+{
+	struct returned_state_callback *cb;
+	struct range_list *rl;
+	struct range_list *nonnull_rl;
+	sval_t null_sval;
+	struct range_list *null_rl = NULL;
+	char *return_ranges;
+	struct sm_state *sm;
+	struct smatch_state *state;
+	int nr_states;
+	int final_pass_orig = final_pass;
+
+	if (!expr || expr_equal_to_param(expr, -1))
+		return 0;
+	if (expr->type == EXPR_CALL)
+		return 0;
+	if (!is_pointer(expr))
+		return 0;
+
+	sm = get_sm_state_expr(SMATCH_EXTRA, expr);
+	if (!sm)
+		return 0;
+	if (ptr_list_size((struct ptr_list *)sm->possible) == 1)
+		return 0;
+	state = sm->state;
+	if (!estate_rl(state))
+		return 0;
+	if (estate_min(state).value == 0 && estate_max(state).value == 0)
+		return 0;
+	if (!has_possible_zero_null(sm))
+		return 0;
+
+	nr_states = get_db_state_count();
+	if (option_info && nr_states >= 1500)
+		return 0;
+
+	rl = estate_rl(state);
+
+	__push_fake_cur_stree();
+
+	final_pass = 0;
+	__split_whole_condition(expr);
+	final_pass = final_pass_orig;
+
+	nonnull_rl = rl_filter(rl, rl_zero());
+	return_ranges = show_rl(nonnull_rl);
+	set_state(RETURN_ID, "return_ranges", NULL, alloc_estate_rl(nonnull_rl));
+
+	return_id++;
+	FOR_EACH_PTR(returned_state_callbacks, cb) {
+		cb->callback(return_id, return_ranges, expr);
+	} END_FOR_EACH_PTR(cb);
+
+	__push_true_states();
+	__use_false_states();
+
+	return_ranges = alloc_sname("0");
+	null_sval = sval_type_val(rl_type(rl), 0);
+	add_range(&null_rl, null_sval, null_sval);
+	set_state(RETURN_ID, "return_ranges", NULL, alloc_estate_rl(null_rl));
+	return_id++;
+	FOR_EACH_PTR(returned_state_callbacks, cb) {
+		cb->callback(return_id, return_ranges, expr);
+	} END_FOR_EACH_PTR(cb);
+
+	__merge_true_states();
+	__free_fake_cur_stree();
+
+	return 1;
+}
+
+static int call_return_state_hooks_split_success_fail(struct expression *expr)
+{
+	struct sm_state *sm;
+	struct range_list *rl;
+	struct range_list *nonzero_rl;
+	sval_t zero_sval;
+	struct range_list *zero_rl = NULL;
+	int nr_states;
+	struct returned_state_callback *cb;
+	char *return_ranges;
+	int final_pass_orig = final_pass;
+
+	if (option_project != PROJ_KERNEL)
+		return 0;
+
+	nr_states = get_db_state_count();
+	if (nr_states > 1500)
+		return 0;
+
+	sm = get_sm_state_expr(SMATCH_EXTRA, expr);
+	if (!sm)
+		return 0;
+	if (ptr_list_size((struct ptr_list *)sm->possible) == 1)
+		return 0;
+
+	rl = estate_rl(sm->state);
+	if (!rl)
+		return 0;
+
+	if (rl_min(rl).value < -4095 || rl_min(rl).value >= 0)
+		return 0;
+	if (rl_max(rl).value != 0)
+		return 0;
+	if (!has_possible_zero_null(sm))
+		return 0;
+
+	__push_fake_cur_stree();
+
+	final_pass = 0;
+	__split_whole_condition(expr);
+	final_pass = final_pass_orig;
+
+	nonzero_rl = rl_filter(rl, rl_zero());
+	nonzero_rl = cast_rl(cur_func_return_type(), nonzero_rl);
+	return_ranges = show_rl(nonzero_rl);
+	set_state(RETURN_ID, "return_ranges", NULL, alloc_estate_rl(nonzero_rl));
+
+	return_id++;
+	FOR_EACH_PTR(returned_state_callbacks, cb) {
+		cb->callback(return_id, return_ranges, expr);
+	} END_FOR_EACH_PTR(cb);
+
+	__push_true_states();
+	__use_false_states();
+
+	return_ranges = alloc_sname("0");
+	zero_sval = sval_type_val(rl_type(rl), 0);
+	add_range(&zero_rl, zero_sval, zero_sval);
+	set_state(RETURN_ID, "return_ranges", NULL, alloc_estate_rl(zero_rl));
+	return_id++;
+	FOR_EACH_PTR(returned_state_callbacks, cb) {
+		cb->callback(return_id, return_ranges, expr);
+	} END_FOR_EACH_PTR(cb);
+
+	__merge_true_states();
+	__free_fake_cur_stree();
+
+	return 1;
+}
+
+static int is_boolean(struct expression *expr)
+{
+	struct range_list *rl;
+
+	if (!get_implied_rl(expr, &rl))
+		return 0;
+	if (rl_min(rl).value == 0 && rl_max(rl).value == 1)
+		return 1;
+	return 0;
+}
+
+static int is_conditional(struct expression *expr)
+{
+	if (!expr)
+		return 0;
+	if (expr->type == EXPR_CONDITIONAL || expr->type == EXPR_SELECT)
+		return 1;
+	return 0;
+}
+
+static int splitable_function_call(struct expression *expr)
+{
+	struct sm_state *sm;
+	char buf[64];
+
+	if (!expr || expr->type != EXPR_CALL)
+		return 0;
+	snprintf(buf, sizeof(buf), "return %p", expr);
+	sm = get_sm_state(SMATCH_EXTRA, buf, NULL);
+	return split_possible_helper(sm, expr);
+}
+
+static struct sm_state *find_bool_param(void)
+{
+	struct stree *start_states;
+	struct symbol *arg;
+	struct sm_state *sm, *tmp;
+	sval_t sval;
+
+	start_states = get_start_states();
+
+	FOR_EACH_PTR_REVERSE(cur_func_sym->ctype.base_type->arguments, arg) {
+		if (!arg->ident)
+			continue;
+		sm = get_sm_state_stree(start_states, SMATCH_EXTRA, arg->ident->name, arg);
+		if (!sm)
+			continue;
+		if (rl_min(estate_rl(sm->state)).value != 0 ||
+		    rl_max(estate_rl(sm->state)).value != 1)
+			continue;
+		goto found;
+	} END_FOR_EACH_PTR_REVERSE(arg);
+
+	return NULL;
+
+found:
+	/*
+	 * Check if it's splitable.  If not, then splitting it up is likely not
+	 * useful for the callers.
+	 */
+	FOR_EACH_PTR(sm->possible, tmp) {
+		if (is_merged(tmp))
+			continue;
+		if (!estate_get_single_value(tmp->state, &sval))
+			return NULL;
+	} END_FOR_EACH_PTR(tmp);
+
+	return sm;
+}
+
+static int split_on_bool_sm(struct sm_state *sm, struct expression *expr)
+{
+	struct returned_state_callback *cb;
+	struct range_list *ret_rl;
+	const char *return_ranges;
+	struct sm_state *tmp;
+	int ret = 0;
+	int nr_possible, nr_states;
+	char *compare_str = NULL;
+	char buf[128];
+	struct state_list *already_handled = NULL;
+
+	if (!sm || !sm->merged)
+		return 0;
+
+	if (too_many_possible(sm))
+		return 0;
+
+	/* bail if it gets too complicated */
+	nr_possible = ptr_list_size((struct ptr_list *)sm->possible);
+	nr_states = get_db_state_count();
+	if (nr_states * nr_possible >= 2000)
+		return 0;
+
+	FOR_EACH_PTR(sm->possible, tmp) {
+		if (tmp->merged)
+			continue;
+		if (ptr_in_list(tmp, already_handled))
+			continue;
+		add_ptr_list(&already_handled, tmp);
+
+		ret = 1;
+		__push_fake_cur_stree();
+
+		overwrite_states_using_pool(sm, tmp);
+
+		return_ranges = get_return_ranges_str(expr, &ret_rl);
+		set_state(RETURN_ID, "return_ranges", NULL, alloc_estate_rl(ret_rl));
+		compare_str = get_return_compare_str(expr);
+		if (compare_str) {
+			snprintf(buf, sizeof(buf), "%s%s", return_ranges, compare_str);
+			return_ranges = alloc_sname(buf);
+		}
+
+		return_id++;
+		FOR_EACH_PTR(returned_state_callbacks, cb) {
+			cb->callback(return_id, (char *)return_ranges, expr);
+		} END_FOR_EACH_PTR(cb);
+
+		__free_fake_cur_stree();
+	} END_FOR_EACH_PTR(tmp);
+
+	free_slist(&already_handled);
+
+	return ret;
+}
+
+static int split_by_bool_param(struct expression *expr)
+{
+	struct sm_state *start_sm, *sm;
+	sval_t sval;
+
+	start_sm = find_bool_param();
+	if (!start_sm)
+		return 0;
+	sm = get_sm_state(SMATCH_EXTRA, start_sm->name, start_sm->sym);
+	if (!sm || estate_get_single_value(sm->state, &sval))
+		return 0;
+	return split_on_bool_sm(sm, expr);
+}
+
+static int split_by_null_nonnull_param(struct expression *expr)
+{
+	struct symbol *arg;
+	struct sm_state *sm;
+	sval_t zero = {
+		.type = &ulong_ctype,
+	};
+
+	/* function must only take one pointer */
+	if (ptr_list_size((struct ptr_list *)cur_func_sym->ctype.base_type->arguments) != 1)
+		return 0;
+	arg = first_ptr_list((struct ptr_list *)cur_func_sym->ctype.base_type->arguments);
+	if (!arg->ident)
+		return 0;
+	if (get_real_base_type(arg)->type != SYM_PTR)
+		return 0;
+
+	if (param_was_set_var_sym(arg->ident->name, arg))
+		return 0;
+	sm = get_sm_state(SMATCH_EXTRA, arg->ident->name, arg);
+	if (!sm)
+		return 0;
+
+	if (!rl_has_sval(estate_rl(sm->state), zero))
+		return 0;
+
+	return split_on_bool_sm(sm, expr);
+}
+
+struct expression *strip_expr_statement(struct expression *expr)
+{
+	struct expression *orig = expr;
+	struct statement *stmt, *last_stmt;
+
+	if (!expr)
+		return NULL;
+	if (expr->type == EXPR_PREOP && expr->op == '(')
+		expr = expr->unop;
+	if (expr->type != EXPR_STATEMENT)
+		return orig;
+	stmt = expr->statement;
+	if (!stmt || stmt->type != STMT_COMPOUND)
+		return orig;
+
+	last_stmt = last_ptr_list((struct ptr_list *)stmt->stmts);
+	if (!last_stmt || last_stmt->type == STMT_LABEL)
+		last_stmt = last_stmt->label_statement;
+	if (!last_stmt || last_stmt->type != STMT_EXPRESSION)
+		return orig;
+	return strip_expr(last_stmt->expression);
+}
+
+static void call_return_state_hooks(struct expression *expr)
+{
+	struct returned_state_callback *cb;
+	struct range_list *ret_rl;
+	const char *return_ranges;
+	int nr_states;
+	sval_t sval;
+
+	if (__path_is_null())
+		return;
+
+	expr = strip_expr(expr);
+	expr = strip_expr_statement(expr);
+
+	if (is_impossible_path())
+		goto vanilla;
+
+	if (expr && (expr->type == EXPR_COMPARE ||
+		     !get_implied_value(expr, &sval)) &&
+	    (is_condition(expr) || is_boolean(expr))) {
+		call_return_state_hooks_compare(expr);
+		return;
+	} else if (is_conditional(expr)) {
+		call_return_state_hooks_conditional(expr);
+		return;
+	} else if (call_return_state_hooks_split_possible(expr)) {
+		return;
+	} else if (call_return_state_hooks_split_null_non_null(expr)) {
+		return;
+	} else if (call_return_state_hooks_split_success_fail(expr)) {
+		return;
+	} else if (splitable_function_call(expr)) {
+		return;
+	} else if (split_positive_from_negative(expr)) {
+		return;
+	} else if (split_by_bool_param(expr)) {
+	} else if (split_by_null_nonnull_param(expr)) {
+		return;
+	}
+
+vanilla:
+	return_ranges = get_return_ranges_str(expr, &ret_rl);
+	set_state(RETURN_ID, "return_ranges", NULL, alloc_estate_rl(ret_rl));
+
+	return_id++;
+	nr_states = get_db_state_count();
+	if (nr_states >= 10000) {
+		match_return_info(return_id, (char *)return_ranges, expr);
+		mark_all_params_untracked(return_id, (char *)return_ranges, expr);
+		return;
+	}
+	FOR_EACH_PTR(returned_state_callbacks, cb) {
+		cb->callback(return_id, (char *)return_ranges, expr);
+	} END_FOR_EACH_PTR(cb);
+}
+
+static void print_returned_struct_members(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct returned_member_callback *cb;
+	struct stree *stree;
+	struct sm_state *sm;
+	struct symbol *type;
+	char *name;
+	char member_name[256];
+	int len;
+
+	type = get_type(expr);
+	if (!type || type->type != SYM_PTR)
+		return;
+	name = expr_to_var(expr);
+	if (!name)
+		return;
+
+	member_name[sizeof(member_name) - 1] = '\0';
+	strcpy(member_name, "$");
+
+	len = strlen(name);
+	FOR_EACH_PTR(returned_member_callbacks, cb) {
+		stree = __get_cur_stree();
+		FOR_EACH_MY_SM(cb->owner, stree, sm) {
+			if (sm->name[0] == '*' && strcmp(sm->name + 1, name) == 0) {
+				strcpy(member_name, "*$");
+				cb->callback(return_id, return_ranges, expr, member_name, sm->state);
+				continue;
+			}
+			if (strncmp(sm->name, name, len) != 0)
+				continue;
+			if (strncmp(sm->name + len, "->", 2) != 0)
+				continue;
+			snprintf(member_name, sizeof(member_name), "$%s", sm->name + len);
+			cb->callback(return_id, return_ranges, expr, member_name, sm->state);
+		} END_FOR_EACH_SM(sm);
+	} END_FOR_EACH_PTR(cb);
+
+	free_string(name);
+}
+
+static void reset_memdb(struct symbol *sym)
+{
+	mem_sql(NULL, NULL, "delete from caller_info;");
+	mem_sql(NULL, NULL, "delete from return_states;");
+	mem_sql(NULL, NULL, "delete from call_implies;");
+	mem_sql(NULL, NULL, "delete from return_implies;");
+}
+
+static void match_end_func_info(struct symbol *sym)
+{
+	if (__path_is_null())
+		return;
+	call_return_state_hooks(NULL);
+}
+
+static void match_after_func(struct symbol *sym)
+{
+	if (!__inline_fn)
+		reset_memdb(sym);
+}
+
+static void init_memdb(void)
+{
+	char *err = NULL;
+	int rc;
+	const char *schema_files[] = {
+		"db/db.schema",
+		"db/caller_info.schema",
+		"db/common_caller_info.schema",
+		"db/return_states.schema",
+		"db/function_type_size.schema",
+		"db/type_size.schema",
+		"db/function_type_info.schema",
+		"db/type_info.schema",
+		"db/call_implies.schema",
+		"db/return_implies.schema",
+		"db/function_ptr.schema",
+		"db/local_values.schema",
+		"db/function_type_value.schema",
+		"db/type_value.schema",
+		"db/function_type.schema",
+		"db/data_info.schema",
+		"db/parameter_name.schema",
+		"db/constraints.schema",
+		"db/constraints_required.schema",
+		"db/fn_ptr_data_link.schema",
+		"db/fn_data_link.schema",
+		"db/mtag_about.schema",
+		"db/mtag_map.schema",
+		"db/mtag_data.schema",
+		"db/mtag_alias.schema",
+	};
+	static char buf[4096];
+	int fd;
+	int ret;
+	int i;
+
+	rc = sqlite3_open(":memory:", &mem_db);
+	if (rc != SQLITE_OK) {
+		sm_ierror("starting In-Memory database.");
+		return;
+	}
+
+	for (i = 0; i < ARRAY_SIZE(schema_files); i++) {
+		fd = open_schema_file(schema_files[i]);
+		if (fd < 0)
+			continue;
+		ret = read(fd, buf, sizeof(buf));
+		if (ret < 0) {
+			sm_ierror("failed to read: %s", schema_files[i]);
+			continue;
+		}
+		close(fd);
+		if (ret == sizeof(buf)) {
+			sm_ierror("Schema file too large:  %s (limit %zd bytes)",
+			       schema_files[i], sizeof(buf));
+			continue;
+		}
+		buf[ret] = '\0';
+		rc = sqlite3_exec(mem_db, buf, NULL, NULL, &err);
+		if (rc != SQLITE_OK) {
+			sm_ierror("SQL error #2: %s", err);
+			sm_ierror("%s", buf);
+		}
+	}
+}
+
+static void init_cachedb(void)
+{
+	char *err = NULL;
+	int rc;
+	const char *schema_files[] = {
+		"db/call_implies.schema",
+		"db/return_implies.schema",
+		"db/type_info.schema",
+		"db/mtag_data.schema",
+		"db/sink_info.schema",
+	};
+	static char buf[4096];
+	int fd;
+	int ret;
+	int i;
+
+	rc = sqlite3_open(":memory:", &cache_db);
+	if (rc != SQLITE_OK) {
+		sm_ierror("starting In-Memory database.");
+		return;
+	}
+
+	for (i = 0; i < ARRAY_SIZE(schema_files); i++) {
+		fd = open_schema_file(schema_files[i]);
+		if (fd < 0)
+			continue;
+		ret = read(fd, buf, sizeof(buf));
+		if (ret < 0) {
+			sm_ierror("failed to read: %s", schema_files[i]);
+			continue;
+		}
+		close(fd);
+		if (ret == sizeof(buf)) {
+			sm_ierror("Schema file too large:  %s (limit %zd bytes)",
+			       schema_files[i], sizeof(buf));
+			continue;
+		}
+		buf[ret] = '\0';
+		rc = sqlite3_exec(cache_db, buf, NULL, NULL, &err);
+		if (rc != SQLITE_OK) {
+			sm_ierror("SQL error #2: %s", err);
+			sm_ierror("%s", buf);
+		}
+	}
+}
+
+static int save_cache_data(void *_table, int argc, char **argv, char **azColName)
+{
+	static char buf[4096];
+	char tmp[256];
+	char *p = buf;
+	char *table = _table;
+	int i;
+
+
+	p += snprintf(p, 4096 - (p - buf), "insert or ignore into %s values (", table);
+	for (i = 0; i < argc; i++) {
+		if (i)
+			p += snprintf(p, 4096 - (p - buf), ", ");
+		sqlite3_snprintf(sizeof(tmp), tmp, "%q", argv[i]);
+		p += snprintf(p, 4096 - (p - buf), "'%s'", tmp);
+
+	}
+	p += snprintf(p, 4096 - (p - buf), ");");
+	if (p - buf > 4096)
+		return 0;
+
+	sm_msg("SQL: %s", buf);
+	return 0;
+}
+
+static void dump_cache(struct symbol_list *sym_list)
+{
+	if (!option_info)
+		return;
+	cache_sql(&save_cache_data, (char *)"type_info", "select * from type_info;");
+	cache_sql(&save_cache_data, (char *)"return_implies", "select * from return_implies;");
+	cache_sql(&save_cache_data, (char *)"call_implies", "select * from call_implies;");
+	cache_sql(&save_cache_data, (char *)"mtag_data", "select * from mtag_data;");
+	cache_sql(&save_cache_data, (char *)"sink_info", "select * from sink_info;");
+}
+
+void open_smatch_db(char *db_file)
+{
+	int rc;
+
+	if (option_no_db)
+		return;
+
+	use_states = malloc(num_checks + 1);
+	memset(use_states, 0xff, num_checks + 1);
+
+	init_memdb();
+	init_cachedb();
+
+	rc = sqlite3_open_v2(db_file, &smatch_db, SQLITE_OPEN_READONLY, NULL);
+	if (rc != SQLITE_OK) {
+		option_no_db = 1;
+		return;
+	}
+	run_sql(NULL, NULL,
+		"PRAGMA cache_size = %d;", SQLITE_CACHE_PAGES);
+	return;
+}
+
+static void register_common_funcs(void)
+{
+	struct token *token;
+	char *func;
+	char filename[256];
+
+	if (option_project == PROJ_NONE)
+		strcpy(filename, "common_functions");
+	else
+		snprintf(filename, 256, "%s.common_functions", option_project_str);
+
+	token = get_tokens_file(filename);
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		func = alloc_string(show_ident(token->ident));
+		add_ptr_list(&common_funcs, func);
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+static char *get_next_string(char **str)
+{
+	static char string[256];
+	char *start;
+	char *p = *str;
+	int len;
+
+	if (*p == '\0')
+		return NULL;
+	start = p;
+
+	while (*p != '\0' && *p != ' ' && *p != '\n')
+		p++;
+
+	len = p - start;
+	if (len > 256) {
+		memcpy(string, start, 255);
+		string[255] = '\0';
+		sm_ierror("return_fix: '%s' too long", string);
+		**str = '\0';
+		return NULL;
+	}
+	memcpy(string, start, len);
+	string[len] = '\0';
+	if (*p != '\0')
+		p++;
+	*str = p;
+	return string;
+}
+
+static void register_return_replacements(void)
+{
+	char *func, *orig, *new;
+	char filename[256];
+	char buf[4096];
+	int fd, ret, i;
+	char *p;
+
+	snprintf(filename, 256, "db/%s.return_fixes", option_project_str);
+	fd = open_schema_file(filename);
+	if (fd < 0)
+		return;
+	ret = read(fd, buf, sizeof(buf));
+	close(fd);
+	if (ret < 0)
+		return;
+	if (ret == sizeof(buf)) {
+		sm_ierror("file too large:  %s (limit %zd bytes)",
+		       filename, sizeof(buf));
+		return;
+	}
+	buf[ret] = '\0';
+
+	p = buf;
+	while (*p) {
+		get_next_string(&p);
+		replace_count++;
+	}
+	if (replace_count == 0 || replace_count % 3 != 0) {
+		replace_count = 0;
+		return;
+	}
+	replace_table = malloc(replace_count * sizeof(char *));
+
+	p = buf;
+	i = 0;
+	while (*p) {
+		func = alloc_string(get_next_string(&p));
+		orig = alloc_string(get_next_string(&p));
+		new  = alloc_string(get_next_string(&p));
+
+		replace_table[i++] = func;
+		replace_table[i++] = orig;
+		replace_table[i++] = new;
+	}
+}
+
+void register_definition_db_callbacks(int id)
+{
+	add_hook(&match_call_info, FUNCTION_CALL_HOOK);
+	add_hook(&global_variable, BASE_HOOK);
+	add_hook(&global_variable, DECLARATION_HOOK);
+	add_split_return_callback(match_return_info);
+	add_split_return_callback(print_returned_struct_members);
+	add_hook(&call_return_state_hooks, RETURN_HOOK);
+	add_hook(&match_end_func_info, END_FUNC_HOOK);
+	add_hook(&match_after_func, AFTER_FUNC_HOOK);
+
+	add_hook(&match_data_from_db, FUNC_DEF_HOOK);
+	add_hook(&match_call_implies, FUNC_DEF_HOOK);
+	add_hook(&match_return_implies, CALL_HOOK_AFTER_INLINE);
+
+	register_common_funcs();
+	register_return_replacements();
+
+	add_hook(&dump_cache, END_FILE_HOOK);
+}
+
+void register_db_call_marker(int id)
+{
+	add_hook(&match_call_marker, FUNCTION_CALL_HOOK);
+}
+
+char *return_state_to_var_sym(struct expression *expr, int param, const char *key, struct symbol **sym)
+{
+	struct expression *arg;
+	char *name = NULL;
+	char member_name[256];
+
+	*sym = NULL;
+
+	if (param == -1) {
+		const char *star = "";
+
+		if (expr->type != EXPR_ASSIGNMENT)
+			return NULL;
+		name = expr_to_var_sym(expr->left, sym);
+		if (!name)
+			return NULL;
+		if (key[0] == '*') {
+			star = "*";
+			key++;
+		}
+		if (strncmp(key, "$", 1) != 0)
+			return name;
+		snprintf(member_name, sizeof(member_name), "%s%s%s", star, name, key + 1);
+		free_string(name);
+		return alloc_string(member_name);
+	}
+
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+	if (expr->type != EXPR_CALL)
+		return NULL;
+
+	arg = get_argument_from_call_expr(expr->args, param);
+	if (!arg)
+		return NULL;
+
+	return get_variable_from_key(arg, key, sym);
+}
+
+char *get_variable_from_key(struct expression *arg, const char *key, struct symbol **sym)
+{
+	char buf[256];
+	char *tmp;
+
+	if (!arg)
+		return NULL;
+
+	arg = strip_expr(arg);
+
+	if (strcmp(key, "$") == 0)
+		return expr_to_var_sym(arg, sym);
+
+	if (strcmp(key, "*$") == 0) {
+		if (arg->type == EXPR_PREOP && arg->op == '&') {
+			arg = strip_expr(arg->unop);
+			return expr_to_var_sym(arg, sym);
+		} else {
+			tmp = expr_to_var_sym(arg, sym);
+			if (!tmp)
+				return NULL;
+			snprintf(buf, sizeof(buf), "*%s", tmp);
+			free_string(tmp);
+			return alloc_string(buf);
+		}
+	}
+
+	if (arg->type == EXPR_PREOP && arg->op == '&') {
+		arg = strip_expr(arg->unop);
+		tmp = expr_to_var_sym(arg, sym);
+		if (!tmp)
+			return NULL;
+		snprintf(buf, sizeof(buf), "%s.%s", tmp, key + 3);
+		return alloc_string(buf);
+	}
+
+	tmp = expr_to_var_sym(arg, sym);
+	if (!tmp)
+		return NULL;
+	snprintf(buf, sizeof(buf), "%s%s", tmp, key + 1);
+	free_string(tmp);
+	return alloc_string(buf);
+}
+
+char *get_chunk_from_key(struct expression *arg, char *key, struct symbol **sym, struct var_sym_list **vsl)
+{
+	*vsl = NULL;
+
+	if (strcmp("$", key) == 0)
+		return expr_to_chunk_sym_vsl(arg, sym, vsl);
+	return get_variable_from_key(arg, key, sym);
+}
+
+const char *state_name_to_param_name(const char *state_name, const char *param_name)
+{
+	int name_len;
+	static char buf[256];
+
+	name_len = strlen(param_name);
+
+	if (strcmp(state_name, param_name) == 0) {
+		return "$";
+	} else if (state_name[name_len] == '-' && /* check for '-' from "->" */
+	    strncmp(state_name, param_name, name_len) == 0) {
+		snprintf(buf, sizeof(buf), "$%s", state_name + name_len);
+		return buf;
+	} else if (state_name[0] == '*' && strcmp(state_name + 1, param_name) == 0) {
+		return "*$";
+	}
+	return NULL;
+}
+
+const char *get_param_name_var_sym(const char *name, struct symbol *sym)
+{
+	if (!sym || !sym->ident)
+		return NULL;
+
+	return state_name_to_param_name(name, sym->ident->name);
+}
+
+const char *get_mtag_name_var_sym(const char *state_name, struct symbol *sym)
+{
+	struct symbol *type;
+	const char *sym_name;
+	int name_len;
+	static char buf[256];
+
+	/*
+	 * mtag_name is different from param_name because mtags can be a struct
+	 * instead of a struct pointer.  But we want to treat it like a pointer
+	 * because really an mtag is a pointer.  Or in other words, if you pass
+	 * a struct foo then you want to talk about foo.bar but with an mtag
+	 * you want to refer to it as foo->bar.
+	 *
+	 */
+
+	if (!sym || !sym->ident)
+		return NULL;
+
+	type = get_real_base_type(sym);
+	if (type && type->type == SYM_BASETYPE)
+		return "*$";
+
+	sym_name = sym->ident->name;
+	name_len = strlen(sym_name);
+
+	if (state_name[name_len] == '.' && /* check for '-' from "->" */
+	    strncmp(state_name, sym_name, name_len) == 0) {
+		snprintf(buf, sizeof(buf), "$->%s", state_name + name_len + 1);
+		return buf;
+	}
+
+	return state_name_to_param_name(state_name, sym_name);
+}
+
+const char *get_mtag_name_expr(struct expression *expr)
+{
+	char *name;
+	struct symbol *sym;
+	const char *ret = NULL;
+
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+
+	ret = get_mtag_name_var_sym(name, sym);
+free:
+	free_string(name);
+	return ret;
+}
+
+const char *get_param_name(struct sm_state *sm)
+{
+	return get_param_name_var_sym(sm->name, sm->sym);
+}
+
+char *get_data_info_name(struct expression *expr)
+{
+	struct symbol *sym;
+	char *name;
+	char buf[256];
+	char *ret = NULL;
+
+	expr = strip_expr(expr);
+	name = get_member_name(expr);
+	if (name)
+		return name;
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+	if (!(sym->ctype.modifiers & MOD_TOPLEVEL))
+		goto free;
+	if (sym->ctype.modifiers & MOD_STATIC)
+		snprintf(buf, sizeof(buf), "static %s", name);
+	else
+		snprintf(buf, sizeof(buf), "global %s", name);
+	ret = alloc_sname(buf);
+free:
+	free_string(name);
+	return ret;
+}
--- /dev/null	Fri Dec 21 15:00:25 2018
+++ new/usr/src/tools/smatch/src/smatch_equiv.c	Fri Dec 21 15:00:25 2018
@@ -0,0 +1,271 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * smatch_equiv.c is for tracking how variables are the same
+ *
+ * if (a == b) {
+ * Or
+ * x = y;
+ *
+ * When a variable gets modified all the old relationships are
+ * deleted.  remove_equiv(expr);
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+ALLOCATOR(relation, "related variables");
+
+static struct relation *alloc_relation(const char *name, struct symbol *sym)
+{
+	struct relation *tmp;
+
+	tmp = __alloc_relation(0);
+	tmp->name = alloc_string(name);
+	tmp->sym = sym;
+	return tmp;
+}
+
+struct related_list *clone_related_list(struct related_list *related)
+{
+	struct relation *rel;
+	struct related_list *to_list = NULL;
+
+	FOR_EACH_PTR(related, rel) {
+		add_ptr_list(&to_list, rel);
+	} END_FOR_EACH_PTR(rel);
+
+	return to_list;
+}
+
+static int cmp_relation(struct relation *a, struct relation *b)
+{
+	int ret;
+
+	if (a == b)
+		return 0;
+
+	if (a->sym > b->sym)
+		return -1;
+	if (a->sym < b->sym)
+		return 1;
+
+	ret = strcmp(a->name, b->name);
+	if (ret)
+		return ret;
+
+	return 0;
+}
+
+struct related_list *get_shared_relations(struct related_list *one,
+					      struct related_list *two)
+{
+	struct related_list *ret = NULL;
+	struct relation *one_rel;
+	struct relation *two_rel;
+
+	PREPARE_PTR_LIST(one, one_rel);
+	PREPARE_PTR_LIST(two, two_rel);
+	for (;;) {
+		if (!one_rel || !two_rel)
+			break;
+		if (cmp_relation(one_rel, two_rel) < 0) {
+			NEXT_PTR_LIST(one_rel);
+		} else if (cmp_relation(one_rel, two_rel) == 0) {
+			add_ptr_list(&ret, one_rel);
+			NEXT_PTR_LIST(one_rel);
+			NEXT_PTR_LIST(two_rel);
+		} else {
+			NEXT_PTR_LIST(two_rel);
+		}
+	}
+	FINISH_PTR_LIST(two_rel);
+	FINISH_PTR_LIST(one_rel);
+
+	return ret;
+}
+
+static void debug_addition(struct related_list *rlist, const char *name)
+{
+	struct relation *tmp;
+
+	if (!option_debug_related)
+		return;
+
+	sm_prefix();
+	sm_printf("(");
+	FOR_EACH_PTR(rlist, tmp) {
+		sm_printf("%s ", tmp->name);
+	} END_FOR_EACH_PTR(tmp);
+	sm_printf(") <-- %s\n", name);
+}
+
+static void add_related(struct related_list **rlist, const char *name, struct symbol *sym)
+{
+	struct relation *rel;
+	struct relation *new;
+	struct relation tmp = {
+		.name = (char *)name,
+		.sym = sym
+	};
+
+	debug_addition(*rlist, name);
+
+	FOR_EACH_PTR(*rlist, rel) {
+		if (cmp_relation(rel, &tmp) < 0)
+			continue;
+		if (cmp_relation(rel, &tmp) == 0)
+			return;
+		new = alloc_relation(name, sym);
+		INSERT_CURRENT(new, rel);
+		return;
+	} END_FOR_EACH_PTR(rel);
+	new = alloc_relation(name, sym);
+	add_ptr_list(rlist, new);
+}
+
+static struct related_list *del_related(struct smatch_state *state, const char *name, struct symbol *sym)
+{
+	struct relation *tmp;
+	struct relation remove = {
+		.name = (char *)name,
+		.sym = sym,
+	};
+	struct related_list *ret = NULL;
+
+	FOR_EACH_PTR(estate_related(state), tmp) {
+		if (cmp_relation(tmp, &remove) != 0)
+			add_ptr_list(&ret, tmp);
+	} END_FOR_EACH_PTR(tmp);
+
+	return ret;
+}
+
+void remove_from_equiv(const char *name, struct symbol *sym)
+{
+	struct sm_state *orig_sm;
+	struct relation *rel;
+	struct smatch_state *state;
+	struct related_list *to_update;
+
+	orig_sm = get_sm_state(SMATCH_EXTRA, name, sym);
+	if (!orig_sm || !get_dinfo(orig_sm->state)->related)
+		return;
+
+	state = clone_estate(orig_sm->state);
+	to_update = del_related(state, name, sym);
+
+	FOR_EACH_PTR(to_update, rel) {
+		struct sm_state *old_sm, *new_sm;
+
+		old_sm = get_sm_state(SMATCH_EXTRA, rel->name, rel->sym);
+		if (!old_sm)
+			continue;
+
+		new_sm = clone_sm(old_sm);
+		get_dinfo(new_sm->state)->related = to_update;
+		__set_sm(new_sm);
+	} END_FOR_EACH_PTR(rel);
+}
+
+void remove_from_equiv_expr(struct expression *expr)
+{
+	char *name;
+	struct symbol *sym;
+
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+	remove_from_equiv(name, sym);
+free:
+	free_string(name);
+}
+
+void set_related(struct smatch_state *estate, struct related_list *rlist)
+{
+	if (!estate_related(estate) && !rlist)
+		return;
+	get_dinfo(estate)->related = rlist;
+}
+
+/*
+ * set_equiv() is only used for assignments where we set one variable
+ * equal to the other.  a = b;.  It's not used for if conditions where
+ * a == b.
+ */
+void set_equiv(struct expression *left, struct expression *right)
+{
+	struct sm_state *right_sm, *left_sm;
+	struct relation *rel;
+	char *left_name;
+	struct symbol *left_sym;
+	struct related_list *rlist;
+
+	left_name = expr_to_var_sym(left, &left_sym);
+	if (!left_name || !left_sym)
+		goto free;
+
+	right_sm = get_sm_state_expr(SMATCH_EXTRA, right);
+	if (!right_sm)
+		right_sm = set_state_expr(SMATCH_EXTRA, right, alloc_estate_whole(get_type(right)));
+	if (!right_sm)
+		goto free;
+
+	/* This block is because we want to preserve the implications. */
+	left_sm = clone_sm(right_sm);
+	left_sm->name = alloc_string(left_name);
+	left_sm->sym = left_sym;
+	left_sm->state = clone_estate_cast(get_type(left), right_sm->state);
+	set_extra_mod_helper(left_name, left_sym, left, left_sm->state);
+	__set_sm(left_sm);
+
+	rlist = clone_related_list(estate_related(right_sm->state));
+	add_related(&rlist, right_sm->name, right_sm->sym);
+	add_related(&rlist, left_name, left_sym);
+
+	FOR_EACH_PTR(rlist, rel) {
+		struct sm_state *old_sm, *new_sm;
+
+		old_sm = get_sm_state(SMATCH_EXTRA, rel->name, rel->sym);
+		if (!old_sm)  /* shouldn't happen */
+			continue;
+		new_sm = clone_sm(old_sm);
+		new_sm->state = clone_estate(old_sm->state);
+		get_dinfo(new_sm->state)->related = rlist;
+		__set_sm(new_sm);
+	} END_FOR_EACH_PTR(rel);
+free:
+	free_string(left_name);
+}
+
+void set_equiv_state_expr(int id, struct expression *expr, struct smatch_state *state)
+{
+	struct relation *rel;
+	struct smatch_state *estate;
+
+	estate = get_state_expr(SMATCH_EXTRA, expr);
+
+	if (!estate)
+		return;
+
+	FOR_EACH_PTR(get_dinfo(estate)->related, rel) {
+		set_state(id, rel->name, rel->sym, state);
+	} END_FOR_EACH_PTR(rel);
+}
--- /dev/null	Fri Dec 21 15:00:25 2018
+++ new/usr/src/tools/smatch/src/smatch_estate.c	Fri Dec 21 15:00:25 2018
@@ -0,0 +1,418 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * smatch_dinfo.c has helper functions for handling data_info structs
+ *
+ */
+
+#include <stdlib.h>
+#ifndef __USE_ISOC99
+#define __USE_ISOC99
+#endif
+#include <limits.h>
+#include "parse.h"
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+struct smatch_state *merge_estates(struct smatch_state *s1, struct smatch_state *s2)
+{
+	struct smatch_state *tmp;
+	struct range_list *value_ranges;
+	struct related_list *rlist;
+
+	if (estates_equiv(s1, s2))
+		return s1;
+
+	value_ranges = rl_union(estate_rl(s1), estate_rl(s2));
+	tmp = alloc_estate_rl(value_ranges);
+	rlist = get_shared_relations(estate_related(s1), estate_related(s2));
+	set_related(tmp, rlist);
+	if (estate_has_hard_max(s1) && estate_has_hard_max(s2))
+		estate_set_hard_max(tmp);
+
+	estate_set_fuzzy_max(tmp, sval_max(estate_get_fuzzy_max(s1), estate_get_fuzzy_max(s2)));
+
+	return tmp;
+}
+
+struct data_info *get_dinfo(struct smatch_state *state)
+{
+	if (!state)
+		return NULL;
+	return (struct data_info *)state->data;
+}
+
+struct range_list *estate_rl(struct smatch_state *state)
+{
+	if (!state)
+		return NULL;
+	return get_dinfo(state)->value_ranges;
+}
+
+struct related_list *estate_related(struct smatch_state *state)
+{
+	if (!state)
+		return NULL;
+	return get_dinfo(state)->related;
+}
+
+sval_t estate_get_fuzzy_max(struct smatch_state *state)
+{
+	sval_t empty = {};
+
+	if (!state || !get_dinfo(state))
+		return empty;
+	return get_dinfo(state)->fuzzy_max;
+}
+
+int estate_has_fuzzy_max(struct smatch_state *state)
+{
+	if (estate_get_fuzzy_max(state).type)
+		return 1;
+	return 0;
+}
+
+void estate_set_fuzzy_max(struct smatch_state *state, sval_t fuzzy_max)
+{
+	if (!rl_has_sval(estate_rl(state), fuzzy_max))
+		return;
+	get_dinfo(state)->fuzzy_max = fuzzy_max;
+}
+
+void estate_copy_fuzzy_max(struct smatch_state *new, struct smatch_state *old)
+{
+	if (!estate_has_fuzzy_max(old))
+		return;
+	estate_set_fuzzy_max(new, estate_get_fuzzy_max(old));
+}
+
+void estate_clear_fuzzy_max(struct smatch_state *state)
+{
+	sval_t empty = {};
+
+	get_dinfo(state)->fuzzy_max = empty;
+}
+
+int estate_has_hard_max(struct smatch_state *state)
+{
+	if (!state)
+		return 0;
+	return get_dinfo(state)->hard_max;
+}
+
+void estate_set_hard_max(struct smatch_state *state)
+{
+	get_dinfo(state)->hard_max = 1;
+}
+
+void estate_clear_hard_max(struct smatch_state *state)
+{
+	get_dinfo(state)->hard_max = 0;
+}
+
+int estate_get_hard_max(struct smatch_state *state, sval_t *sval)
+{
+	if (!state || !get_dinfo(state)->hard_max || !estate_rl(state))
+		return 0;
+	*sval = rl_max(estate_rl(state));
+	return 1;
+}
+
+sval_t estate_min(struct smatch_state *state)
+{
+	return rl_min(estate_rl(state));
+}
+
+sval_t estate_max(struct smatch_state *state)
+{
+	return rl_max(estate_rl(state));
+}
+
+struct symbol *estate_type(struct smatch_state *state)
+{
+	return rl_max(estate_rl(state)).type;
+}
+
+static int rlists_equiv(struct related_list *one, struct related_list *two)
+{
+	struct relation *one_rel;
+	struct relation *two_rel;
+
+	PREPARE_PTR_LIST(one, one_rel);
+	PREPARE_PTR_LIST(two, two_rel);
+	for (;;) {
+		if (!one_rel && !two_rel)
+			return 1;
+		if (!one_rel || !two_rel)
+			return 0;
+		if (one_rel->sym != two_rel->sym)
+			return 0;
+		if (strcmp(one_rel->name, two_rel->name))
+			return 0;
+		NEXT_PTR_LIST(one_rel);
+		NEXT_PTR_LIST(two_rel);
+	}
+	FINISH_PTR_LIST(two_rel);
+	FINISH_PTR_LIST(one_rel);
+
+	return 1;
+}
+
+int estates_equiv(struct smatch_state *one, struct smatch_state *two)
+{
+	if (!one || !two)
+		return 0;
+	if (one == two)
+		return 1;
+	if (!rlists_equiv(estate_related(one), estate_related(two)))
+		return 0;
+	if (strcmp(one->name, two->name) == 0)
+		return 1;
+	return 0;
+}
+
+int estate_is_whole(struct smatch_state *state)
+{
+	return is_whole_rl(estate_rl(state));
+}
+
+int estate_is_empty(struct smatch_state *state)
+{
+	return state && !estate_rl(state);
+}
+
+int estate_is_unknown(struct smatch_state *state)
+{
+	if (!estate_is_whole(state))
+		return 0;
+	if (estate_related(state))
+		return 0;
+	if (estate_has_fuzzy_max(state))
+		return 0;
+	return 1;
+}
+
+int estate_get_single_value(struct smatch_state *state, sval_t *sval)
+{
+	sval_t min, max;
+
+	min = rl_min(estate_rl(state));
+	max = rl_max(estate_rl(state));
+	if (sval_cmp(min, max) != 0)
+		return 0;
+	*sval = min;
+	return 1;
+}
+
+static struct data_info *alloc_dinfo(void)
+{
+	struct data_info *ret;
+
+	ret = __alloc_data_info(0);
+	memset(ret, 0, sizeof(*ret));
+	return ret;
+}
+
+static struct data_info *alloc_dinfo_range(sval_t min, sval_t max)
+{
+	struct data_info *ret;
+
+	ret = alloc_dinfo();
+	add_range(&ret->value_ranges, min, max);
+	return ret;
+}
+
+static struct data_info *alloc_dinfo_range_list(struct range_list *rl)
+{
+	struct data_info *ret;
+
+	ret = alloc_dinfo();
+	ret->value_ranges = rl;
+	return ret;
+}
+
+static struct data_info *clone_dinfo(struct data_info *dinfo)
+{
+	struct data_info *ret;
+
+	ret = alloc_dinfo();
+	ret->related = clone_related_list(dinfo->related);
+	ret->value_ranges = clone_rl(dinfo->value_ranges);
+	ret->hard_max = dinfo->hard_max;
+	ret->fuzzy_max = dinfo->fuzzy_max;
+	return ret;
+}
+
+struct smatch_state *clone_estate(struct smatch_state *state)
+{
+	struct smatch_state *ret;
+
+	if (!state)
+		return NULL;
+
+	ret = __alloc_smatch_state(0);
+	ret->name = state->name;
+	ret->data = clone_dinfo(get_dinfo(state));
+	return ret;
+}
+
+struct smatch_state *alloc_estate_empty(void)
+{
+	struct smatch_state *state;
+	struct data_info *dinfo;
+
+	dinfo = alloc_dinfo();
+	state = __alloc_smatch_state(0);
+	state->data = dinfo;
+	state->name = "";
+	return state;
+}
+
+struct smatch_state *alloc_estate_whole(struct symbol *type)
+{
+	return alloc_estate_rl(alloc_whole_rl(type));
+}
+
+struct smatch_state *extra_empty(void)
+{
+	struct smatch_state *ret;
+
+	ret = __alloc_smatch_state(0);
+	ret->name = "empty";
+	ret->data = alloc_dinfo();
+	return ret;
+}
+
+struct smatch_state *alloc_estate_sval(sval_t sval)
+{
+	struct smatch_state *state;
+
+	state = __alloc_smatch_state(0);
+	state->data = alloc_dinfo_range(sval, sval);
+	state->name = show_rl(get_dinfo(state)->value_ranges);
+	estate_set_hard_max(state);
+	estate_set_fuzzy_max(state, sval);
+	return state;
+}
+
+struct smatch_state *alloc_estate_range(sval_t min, sval_t max)
+{
+	struct smatch_state *state;
+
+	state = __alloc_smatch_state(0);
+	state->data = alloc_dinfo_range(min, max);
+	state->name = show_rl(get_dinfo(state)->value_ranges);
+	return state;
+}
+
+struct smatch_state *alloc_estate_rl(struct range_list *rl)
+{
+	struct smatch_state *state;
+
+	if (!rl)
+		return extra_empty();
+
+	state = __alloc_smatch_state(0);
+	state->data = alloc_dinfo_range_list(rl);
+	state->name = show_rl(rl);
+	return state;
+}
+
+struct smatch_state *clone_estate_cast(struct symbol *type, struct smatch_state *state)
+{
+	struct smatch_state *ret;
+	struct data_info *dinfo;
+
+	if (!state)
+		return NULL;
+
+	dinfo = alloc_dinfo();
+	dinfo->value_ranges = clone_rl(cast_rl(type, estate_rl(state)));
+
+	ret = __alloc_smatch_state(0);
+	ret->name = show_rl(dinfo->value_ranges);
+	ret->data = dinfo;
+
+	return ret;
+}
+
+struct smatch_state *get_implied_estate(struct expression *expr)
+{
+	struct smatch_state *state;
+	struct range_list *rl;
+
+	state = get_state_expr(SMATCH_EXTRA, expr);
+	if (state)
+		return state;
+	if (!get_implied_rl(expr, &rl))
+		rl = alloc_whole_rl(get_type(expr));
+	return alloc_estate_rl(rl);
+}
+
+struct smatch_state *estate_filter_range(struct smatch_state *orig,
+				 sval_t filter_min, sval_t filter_max)
+{
+	struct range_list *rl;
+	struct smatch_state *state;
+
+	if (!orig)
+		orig = alloc_estate_whole(filter_min.type);
+
+	rl = remove_range(estate_rl(orig), filter_min, filter_max);
+	state = alloc_estate_rl(rl);
+	if (estate_has_hard_max(orig))
+		estate_set_hard_max(state);
+	if (estate_has_fuzzy_max(orig))
+		estate_set_fuzzy_max(state, estate_get_fuzzy_max(orig));
+	return state;
+}
+
+struct smatch_state *estate_filter_sval(struct smatch_state *orig, sval_t sval)
+{
+	return estate_filter_range(orig, sval, sval);
+}
+
+/*
+ * One of the complications is that smatch tries to free a bunch of data at the
+ * end of every function.
+ */
+struct data_info *clone_dinfo_perm(struct data_info *dinfo)
+{
+	struct data_info *ret;
+
+	ret = malloc(sizeof(*ret));
+	memset(ret, 0, sizeof(*ret));
+	ret->related = NULL;
+	ret->value_ranges = clone_rl_permanent(dinfo->value_ranges);
+	ret->hard_max = 0;
+	ret->fuzzy_max = dinfo->fuzzy_max;
+	return ret;
+}
+
+struct smatch_state *clone_estate_perm(struct smatch_state *state)
+{
+	struct smatch_state *ret;
+
+	ret = malloc(sizeof(*ret));
+	ret->name = alloc_string(state->name);
+	ret->data = clone_dinfo_perm(get_dinfo(state));
+	return ret;
+}
+
+
--- /dev/null	Fri Dec 21 15:00:25 2018
+++ new/usr/src/tools/smatch/src/smatch_expression_stacks.c	Fri Dec 21 15:00:25 2018
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_expression_stacks.h"
+
+void push_expression(struct expression_list **estack, struct expression *expr)
+{
+	add_ptr_list(estack, expr);
+}
+
+struct expression *pop_expression(struct expression_list **estack)
+{
+	struct expression *expr;
+
+	expr = last_ptr_list((struct ptr_list *)*estack);
+	delete_ptr_list_last((struct ptr_list **)estack);
+	return expr;
+}
+
+struct expression *top_expression(struct expression_list *estack)
+{
+	struct expression *expr;
+
+	expr = last_ptr_list((struct ptr_list *)estack);
+	return expr;
+}
+
+void free_expression_stack(struct expression_list **estack)
+{
+	__free_ptr_list((struct ptr_list **)estack);
+}
--- /dev/null	Fri Dec 21 15:00:25 2018
+++ new/usr/src/tools/smatch/src/smatch_expression_stacks.h	Fri Dec 21 15:00:25 2018
@@ -0,0 +1,4 @@
+void push_expression(struct expression_list **estack, struct expression *expr);
+struct expression *pop_expression(struct expression_list **estack);
+struct expression *top_expression(struct expression_list *estack);
+void free_expression_stack(struct expression_list **estack);
--- /dev/null	Fri Dec 21 15:00:25 2018
+++ new/usr/src/tools/smatch/src/smatch_expressions.c	Fri Dec 21 15:00:25 2018
@@ -0,0 +1,241 @@
+#include "smatch.h"
+#include "smatch_extra.h"
+
+DECLARE_ALLOCATOR(sname);
+__ALLOCATOR(struct expression, "temporary expr", tmp_expression);
+
+static struct position get_cur_pos(void)
+{
+	static struct position pos;
+	static struct position none;
+	struct expression *expr;
+	struct statement *stmt;
+
+	expr = last_ptr_list((struct ptr_list *)big_expression_stack);
+	stmt = last_ptr_list((struct ptr_list *)big_statement_stack);
+	if (expr)
+		pos = expr->pos;
+	else if (stmt)
+		pos = stmt->pos;
+	else
+		pos = none;
+	return pos;
+}
+
+struct expression *alloc_tmp_expression(struct position pos, int type)
+{
+	struct expression *expr;
+
+	expr = __alloc_tmp_expression(0);
+	expr->smatch_flags |= Fake;
+	expr->type = type;
+	expr->pos = pos;
+	return expr;
+}
+
+void free_tmp_expressions(void)
+{
+	clear_tmp_expression_alloc();
+}
+
+struct expression *zero_expr(void)
+{
+	struct expression *zero;
+
+	zero = alloc_tmp_expression(get_cur_pos(), EXPR_VALUE);
+	zero->value = 0;
+	zero->ctype = &int_ctype;
+	return zero;
+}
+
+struct expression *value_expr(long long val)
+{
+	struct expression *expr;
+
+	if (!val)
+		return zero_expr();
+
+	expr = alloc_tmp_expression(get_cur_pos(), EXPR_VALUE);
+	expr->value = val;
+	expr->ctype = &llong_ctype;
+	return expr;
+}
+
+struct expression *member_expression(struct expression *deref, int op, struct ident *member)
+{
+	struct expression *expr;
+
+	expr = alloc_tmp_expression(deref->pos, EXPR_DEREF);
+	expr->op = op;
+	expr->deref = deref;
+	expr->member = member;
+	expr->member_offset = -1;
+	return expr;
+}
+
+struct expression *preop_expression(struct expression *expr, int op)
+{
+	struct expression *preop;
+
+	preop = alloc_tmp_expression(expr->pos, EXPR_PREOP);
+	preop->unop = expr;
+	preop->op = op;
+	return preop;
+}
+
+struct expression *deref_expression(struct expression *expr)
+{
+	return preop_expression(expr, '*');
+}
+
+struct expression *assign_expression(struct expression *left, int op, struct expression *right)
+{
+	struct expression *expr;
+
+	if (!right)
+		return NULL;
+
+	/* FIXME: make this a tmp expression. */
+	expr = alloc_expression(right->pos, EXPR_ASSIGNMENT);
+	expr->op = op;
+	expr->left = left;
+	expr->right = right;
+	return expr;
+}
+
+struct expression *binop_expression(struct expression *left, int op, struct expression *right)
+{
+	struct expression *expr;
+
+	expr = alloc_tmp_expression(right->pos, EXPR_BINOP);
+	expr->op = op;
+	expr->left = left;
+	expr->right = right;
+	return expr;
+}
+
+struct expression *array_element_expression(struct expression *array, struct expression *offset)
+{
+	struct expression *expr;
+
+	expr = binop_expression(array, '+', offset);
+	return deref_expression(expr);
+}
+
+struct expression *symbol_expression(struct symbol *sym)
+{
+	struct expression *expr;
+
+	expr = alloc_tmp_expression(sym->pos, EXPR_SYMBOL);
+	expr->symbol = sym;
+	expr->symbol_name = sym->ident;
+	return expr;
+}
+
+struct expression *compare_expression(struct expression *left, int op, struct expression *right)
+{
+	struct expression *expr;
+
+	expr = alloc_tmp_expression(get_cur_pos(), EXPR_COMPARE);
+	expr->op = op;
+	expr->left = left;
+	expr->right = right;
+	return expr;
+}
+
+struct expression *string_expression(char *str)
+{
+	struct expression *ret;
+	struct string *string;
+	int len;
+
+	len = strlen(str) + 1;
+	string = (void *)__alloc_sname(4 + len);
+	string->length = len;
+	string->immutable = 0;
+	memcpy(string->data, str, len);
+
+	ret = alloc_tmp_expression(get_cur_pos(), EXPR_STRING);
+	ret->wide = 0;
+	ret->string = string;
+
+	return ret;
+}
+
+struct expression *gen_expression_from_key(struct expression *arg, const char *key)
+{
+	struct expression *ret;
+	struct token *token, *end;
+	const char *p = key;
+	char buf[4095];
+	char *alloc;
+	size_t len;
+
+	/* The idea is that we can parse either $0->foo or $->foo */
+	if (key[0] != '$')
+		return NULL;
+	p++;
+	while (*p >= '0' && *p <= '9')
+		p++;
+	len = snprintf(buf, sizeof(buf), "%s\n", p);
+	alloc = alloc_string(buf);
+
+	token = tokenize_buffer(alloc, len, &end);
+	if (!token)
+		return NULL;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return NULL;
+	token = token->next;
+
+	ret = arg;
+	while (token_type(token) == TOKEN_SPECIAL &&
+	       token->special == SPECIAL_DEREFERENCE) {
+		token = token->next;
+		if (token_type(token) != TOKEN_IDENT)
+			return NULL;
+		ret = deref_expression(ret);
+		ret = member_expression(ret, '*', token->ident);
+		token = token->next;
+	}
+
+	if (token_type(token) != TOKEN_STREAMEND)
+		return NULL;
+
+	return ret;
+}
+
+void expr_set_parent_expr(struct expression *expr, struct expression *parent)
+{
+	if (!expr)
+		return;
+	if (parent->smatch_flags & Fake)
+		return;
+
+	expr->parent = (unsigned long)parent | 0x1UL;
+}
+
+void expr_set_parent_stmt(struct expression *expr, struct statement *parent)
+{
+	if (!expr)
+		return;
+	expr->parent = (unsigned long)parent;
+}
+
+struct expression *expr_get_parent_expr(struct expression *expr)
+{
+	if (!expr)
+		return NULL;
+	if (!(expr->parent & 0x1UL))
+		return NULL;
+	return (struct expression *)(expr->parent & ~0x1UL);
+}
+
+struct statement *expr_get_parent_stmt(struct expression *expr)
+{
+	if (!expr)
+		return NULL;
+	if (expr->parent & 0x1UL)
+		return NULL;
+	return (struct statement *)expr->parent;
+}
+
--- /dev/null	Fri Dec 21 15:00:25 2018
+++ new/usr/src/tools/smatch/src/smatch_extra.c	Fri Dec 21 15:00:25 2018
@@ -0,0 +1,2686 @@
+/*
+ * Copyright (C) 2008 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * smatch_extra.c is supposed to track the value of every variable.
+ *
+ */
+
+#define _GNU_SOURCE
+#include <string.h>
+
+#include <stdlib.h>
+#include <errno.h>
+#ifndef __USE_ISOC99
+#define __USE_ISOC99
+#endif
+#include <limits.h>
+#include "parse.h"
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+static int link_id;
+
+static void match_link_modify(struct sm_state *sm, struct expression *mod_expr);
+
+struct string_list *__ignored_macros = NULL;
+static int in_warn_on_macro(void)
+{
+	struct statement *stmt;
+	char *tmp;
+	char *macro;
+
+	stmt = get_current_statement();
+	if (!stmt)
+		return 0;
+	macro = get_macro_name(stmt->pos);
+	if (!macro)
+		return 0;
+
+	FOR_EACH_PTR(__ignored_macros, tmp) {
+		if (!strcmp(tmp, macro))
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+	return 0;
+}
+
+typedef void (mod_hook)(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state);
+DECLARE_PTR_LIST(void_fn_list, mod_hook *);
+static struct void_fn_list *extra_mod_hooks;
+static struct void_fn_list *extra_nomod_hooks;
+
+void add_extra_mod_hook(mod_hook *fn)
+{
+	mod_hook **p = malloc(sizeof(mod_hook *));
+	*p = fn;
+	add_ptr_list(&extra_mod_hooks, p);
+}
+
+void add_extra_nomod_hook(mod_hook *fn)
+{
+	mod_hook **p = malloc(sizeof(mod_hook *));
+	*p = fn;
+	add_ptr_list(&extra_nomod_hooks, p);
+}
+
+void call_extra_hooks(struct void_fn_list *hooks, const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state)
+{
+	mod_hook **fn;
+
+	FOR_EACH_PTR(hooks, fn) {
+		(*fn)(name, sym, expr, state);
+	} END_FOR_EACH_PTR(fn);
+}
+
+void call_extra_mod_hooks(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state)
+{
+	call_extra_hooks(extra_mod_hooks, name, sym, expr, state);
+}
+
+void call_extra_nomod_hooks(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state)
+{
+	call_extra_hooks(extra_nomod_hooks, name, sym, expr, state);
+}
+
+static bool in_param_set;
+void set_extra_mod_helper(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state)
+{
+	remove_from_equiv(name, sym);
+	call_extra_mod_hooks(name, sym, expr, state);
+	if ((__in_fake_assign || in_param_set) &&
+	    estate_is_unknown(state) && !get_state(SMATCH_EXTRA, name, sym))
+		return;
+	set_state(SMATCH_EXTRA, name, sym, state);
+}
+
+static void set_extra_nomod_helper(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state)
+{
+	call_extra_nomod_hooks(name, sym, expr, state);
+	set_state(SMATCH_EXTRA, name, sym, state);
+}
+
+static char *get_pointed_at(const char *name, struct symbol *sym, struct symbol **new_sym)
+{
+	struct expression *assigned;
+
+	if (name[0] != '*')
+		return NULL;
+	if (strcmp(name + 1, sym->ident->name) != 0)
+		return NULL;
+
+	assigned = get_assigned_expr_name_sym(sym->ident->name, sym);
+	if (!assigned)
+		return NULL;
+	assigned = strip_parens(assigned);
+	if (assigned->type != EXPR_PREOP || assigned->op != '&')
+		return NULL;
+
+	return expr_to_var_sym(assigned->unop, new_sym);
+}
+
+char *get_other_name_sym(const char *name, struct symbol *sym, struct symbol **new_sym)
+{
+	struct expression *assigned;
+	char *orig_name = NULL;
+	char buf[256];
+	char *ret = NULL;
+	int skip;
+
+	*new_sym = NULL;
+
+	if (!sym || !sym->ident)
+		return NULL;
+
+	ret = get_pointed_at(name, sym, new_sym);
+	if (ret)
+		return ret;
+
+	skip = strlen(sym->ident->name);
+	if (name[skip] != '-' || name[skip + 1] != '>')
+		return NULL;
+	skip += 2;
+
+	assigned = get_assigned_expr_name_sym(sym->ident->name, sym);
+	if (!assigned)
+		return NULL;
+	if (assigned->type == EXPR_CALL)
+		return map_call_to_other_name_sym(name, sym, new_sym);
+	if (assigned->type == EXPR_PREOP || assigned->op == '&') {
+
+		orig_name = expr_to_var_sym(assigned, new_sym);
+		if (!orig_name || !*new_sym)
+			goto free;
+
+		snprintf(buf, sizeof(buf), "%s.%s", orig_name + 1, name + skip);
+		ret = alloc_string(buf);
+		free_string(orig_name);
+		return ret;
+	}
+
+	if (assigned->type != EXPR_DEREF)
+		goto free;
+
+	orig_name = expr_to_var_sym(assigned, new_sym);
+	if (!orig_name || !*new_sym)
+		goto free;
+
+	snprintf(buf, sizeof(buf), "%s->%s", orig_name, name + skip);
+	ret = alloc_string(buf);
+	free_string(orig_name);
+	return ret;
+
+free:
+	free_string(orig_name);
+	return NULL;
+}
+
+void set_extra_mod(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state)
+{
+	char *new_name;
+	struct symbol *new_sym;
+
+	set_extra_mod_helper(name, sym, expr, state);
+	new_name = get_other_name_sym(name, sym, &new_sym);
+	if (new_name && new_sym)
+		set_extra_mod_helper(new_name, new_sym, expr, state);
+	free_string(new_name);
+}
+
+static struct expression *chunk_get_array_base(struct expression *expr)
+{
+	/*
+	 * The problem with is_array() is that it only returns true for things
+	 * like foo[1] but not for foo[1].bar.
+	 *
+	 */
+	expr = strip_expr(expr);
+	while (expr && expr->type == EXPR_DEREF)
+		expr = strip_expr(expr->deref);
+	return get_array_base(expr);
+}
+
+static int chunk_has_array(struct expression *expr)
+{
+	return !!chunk_get_array_base(expr);
+}
+
+static void clear_array_states(struct expression *array)
+{
+	struct sm_state *sm;
+
+	sm = get_sm_state_expr(link_id, array);
+	if (sm)
+		match_link_modify(sm, NULL);
+}
+
+static void set_extra_array_mod(struct expression *expr, struct smatch_state *state)
+{
+	struct expression *array;
+	struct var_sym_list *vsl;
+	struct var_sym *vs;
+	char *name;
+	struct symbol *sym;
+
+	array = chunk_get_array_base(expr);
+
+	name = expr_to_chunk_sym_vsl(expr, &sym, &vsl);
+	if (!name || !vsl) {
+		clear_array_states(array);
+		goto free;
+	}
+
+	FOR_EACH_PTR(vsl, vs) {
+		store_link(link_id, vs->var, vs->sym, name, sym);
+	} END_FOR_EACH_PTR(vs);
+
+	call_extra_mod_hooks(name, sym, expr, state);
+	set_state(SMATCH_EXTRA, name, sym, state);
+free:
+	free_string(name);
+}
+
+void set_extra_expr_mod(struct expression *expr, struct smatch_state *state)
+{
+	struct symbol *sym;
+	char *name;
+
+	if (chunk_has_array(expr)) {
+		set_extra_array_mod(expr, state);
+		return;
+	}
+
+	expr = strip_expr(expr);
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+	set_extra_mod(name, sym, expr, state);
+free:
+	free_string(name);
+}
+
+void set_extra_nomod(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state)
+{
+	char *new_name;
+	struct symbol *new_sym;
+	struct relation *rel;
+	struct smatch_state *orig_state;
+
+	orig_state = get_state(SMATCH_EXTRA, name, sym);
+
+	/* don't save unknown states if leaving it blank is the same */
+	if (!orig_state && estate_is_unknown(state))
+		return;
+
+	new_name = get_other_name_sym(name, sym, &new_sym);
+	if (new_name && new_sym)
+		set_extra_nomod_helper(new_name, new_sym, expr, state);
+	free_string(new_name);
+
+	if (!estate_related(orig_state)) {
+		set_extra_nomod_helper(name, sym, expr, state);
+		return;
+	}
+
+	set_related(state, estate_related(orig_state));
+	FOR_EACH_PTR(estate_related(orig_state), rel) {
+		struct smatch_state *estate;
+
+		if (option_debug_related)
+			sm_msg("%s updating related %s to %s", name, rel->name, state->name);
+		estate = get_state(SMATCH_EXTRA, rel->name, rel->sym);
+		if (!estate)
+			continue;
+		set_extra_nomod_helper(rel->name, rel->sym, expr, clone_estate_cast(estate_type(estate), state));
+	} END_FOR_EACH_PTR(rel);
+}
+
+void set_extra_nomod_vsl(const char *name, struct symbol *sym, struct var_sym_list *vsl, struct expression *expr, struct smatch_state *state)
+{
+	struct var_sym *vs;
+
+	FOR_EACH_PTR(vsl, vs) {
+		store_link(link_id, vs->var, vs->sym, name, sym);
+	} END_FOR_EACH_PTR(vs);
+
+	set_extra_nomod(name, sym, expr, state);
+}
+
+/*
+ * This is for return_implies_state() hooks which modify a SMATCH_EXTRA state
+ */
+void set_extra_expr_nomod(struct expression *expr, struct smatch_state *state)
+{
+	struct var_sym_list *vsl;
+	struct var_sym *vs;
+	char *name;
+	struct symbol *sym;
+
+	name = expr_to_chunk_sym_vsl(expr, &sym, &vsl);
+	if (!name || !vsl)
+		goto free;
+	FOR_EACH_PTR(vsl, vs) {
+		store_link(link_id, vs->var, vs->sym, name, sym);
+	} END_FOR_EACH_PTR(vs);
+
+	set_extra_nomod(name, sym, expr, state);
+free:
+	free_string(name);
+}
+
+static void set_extra_true_false(const char *name, struct symbol *sym,
+			struct smatch_state *true_state,
+			struct smatch_state *false_state)
+{
+	char *new_name;
+	struct symbol *new_sym;
+	struct relation *rel;
+	struct smatch_state *orig_state;
+
+	if (!true_state && !false_state)
+		return;
+
+	if (in_warn_on_macro())
+		return;
+
+	new_name = get_other_name_sym(name, sym, &new_sym);
+	if (new_name && new_sym)
+		set_true_false_states(SMATCH_EXTRA, new_name, new_sym, true_state, false_state);
+	free_string(new_name);
+
+	orig_state = get_state(SMATCH_EXTRA, name, sym);
+
+	if (!estate_related(orig_state)) {
+		set_true_false_states(SMATCH_EXTRA, name, sym, true_state, false_state);
+		return;
+	}
+
+	if (true_state)
+		set_related(true_state, estate_related(orig_state));
+	if (false_state)
+		set_related(false_state, estate_related(orig_state));
+
+	FOR_EACH_PTR(estate_related(orig_state), rel) {
+		set_true_false_states(SMATCH_EXTRA, rel->name, rel->sym,
+				true_state, false_state);
+	} END_FOR_EACH_PTR(rel);
+}
+
+static void set_extra_chunk_true_false(struct expression *expr,
+				       struct smatch_state *true_state,
+				       struct smatch_state *false_state)
+{
+	struct var_sym_list *vsl;
+	struct var_sym *vs;
+	struct symbol *type;
+	char *name;
+	struct symbol *sym;
+
+	if (in_warn_on_macro())
+		return;
+
+	type = get_type(expr);
+	if (!type)
+		return;
+
+	name = expr_to_chunk_sym_vsl(expr, &sym, &vsl);
+	if (!name || !vsl)
+		goto free;
+	FOR_EACH_PTR(vsl, vs) {
+		store_link(link_id, vs->var, vs->sym, name, sym);
+	} END_FOR_EACH_PTR(vs);
+
+	set_true_false_states(SMATCH_EXTRA, name, sym,
+			      clone_estate(true_state),
+			      clone_estate(false_state));
+free:
+	free_string(name);
+}
+
+static void set_extra_expr_true_false(struct expression *expr,
+		struct smatch_state *true_state,
+		struct smatch_state *false_state)
+{
+	char *name;
+	struct symbol *sym;
+	sval_t sval;
+
+	if (!true_state && !false_state)
+		return;
+
+	if (get_value(expr, &sval))
+		return;
+
+	expr = strip_expr(expr);
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym) {
+		free_string(name);
+		set_extra_chunk_true_false(expr, true_state, false_state);
+		return;
+	}
+	set_extra_true_false(name, sym, true_state, false_state);
+	free_string(name);
+}
+
+static int get_countdown_info(struct expression *condition, struct expression **unop, int *op, sval_t *right)
+{
+	struct expression *unop_expr;
+	int comparison;
+	sval_t limit;
+
+	right->type = &int_ctype;
+	right->value = 0;
+
+	condition = strip_expr(condition);
+
+	if (condition->type == EXPR_COMPARE) {
+		comparison = remove_unsigned_from_comparison(condition->op);
+
+		if (comparison != SPECIAL_GTE && comparison != '>')
+			return 0;
+		if (!get_value(condition->right, &limit))
+			return 0;
+
+		unop_expr = condition->left;
+		if (unop_expr->type != EXPR_PREOP && unop_expr->type != EXPR_POSTOP)
+			return 0;
+		if (unop_expr->op != SPECIAL_DECREMENT)
+			return 0;
+
+		*unop = unop_expr;
+		*op = comparison;
+		*right = limit;
+
+		return 1;
+	}
+
+	if (condition->type != EXPR_PREOP && condition->type != EXPR_POSTOP)
+		return 0;
+	if (condition->op != SPECIAL_DECREMENT)
+		return 0;
+
+	*unop = condition;
+	*op = '>';
+
+	return 1;
+}
+
+static struct sm_state *handle_canonical_while_count_down(struct statement *loop)
+{
+	struct expression *iter_var;
+	struct expression *condition, *unop;
+	struct sm_state *sm;
+	struct smatch_state *estate;
+	int op;
+	sval_t start, right;
+
+	right.type = &int_ctype;
+	right.value = 0;
+
+	condition = strip_expr(loop->iterator_pre_condition);
+	if (!condition)
+		return NULL;
+
+	if (!get_countdown_info(condition, &unop, &op, &right))
+		return NULL;
+
+	iter_var = unop->unop;
+
+	sm = get_sm_state_expr(SMATCH_EXTRA, iter_var);
+	if (!sm)
+		return NULL;
+	if (sval_cmp(estate_min(sm->state), right) < 0)
+		return NULL;
+	start = estate_max(sm->state);
+	if  (sval_cmp(start, right) <= 0)
+		return NULL;
+	if (!sval_is_max(start))
+		start.value--;
+
+	if (op == SPECIAL_GTE)
+		right.value--;
+
+	if (unop->type == EXPR_PREOP) {
+		right.value++;
+		estate = alloc_estate_range(right, start);
+		if (estate_has_hard_max(sm->state))
+			estate_set_hard_max(estate);
+		estate_copy_fuzzy_max(estate, sm->state);
+		set_extra_expr_mod(iter_var, estate);
+	}
+	if (unop->type == EXPR_POSTOP) {
+		estate = alloc_estate_range(right, start);
+		if (estate_has_hard_max(sm->state))
+			estate_set_hard_max(estate);
+		estate_copy_fuzzy_max(estate, sm->state);
+		set_extra_expr_mod(iter_var, estate);
+	}
+	return get_sm_state_expr(SMATCH_EXTRA, iter_var);
+}
+
+static struct sm_state *handle_canonical_for_inc(struct expression *iter_expr,
+						struct expression *condition)
+{
+	struct expression *iter_var;
+	struct sm_state *sm;
+	struct smatch_state *estate;
+	sval_t start, end, max;
+
+	iter_var = iter_expr->unop;
+	sm = get_sm_state_expr(SMATCH_EXTRA, iter_var);
+	if (!sm)
+		return NULL;
+	if (!estate_get_single_value(sm->state, &start))
+		return NULL;
+	if (get_implied_max(condition->right, &end))
+		end = sval_cast(get_type(iter_var), end);
+	else
+		end = sval_type_max(get_type(iter_var));
+
+	if (get_sm_state_expr(SMATCH_EXTRA, condition->left) != sm)
+		return NULL;
+
+	switch (condition->op) {
+	case SPECIAL_UNSIGNED_LT:
+	case SPECIAL_NOTEQUAL:
+	case '<':
+		if (!sval_is_min(end))
+			end.value--;
+		break;
+	case SPECIAL_UNSIGNED_LTE:
+	case SPECIAL_LTE:
+		break;
+	default:
+		return NULL;
+	}
+	if (sval_cmp(end, start) < 0)
+		return NULL;
+	estate = alloc_estate_range(start, end);
+	if (get_hard_max(condition->right, &max)) {
+		estate_set_hard_max(estate);
+		if (condition->op == '<' ||
+		    condition->op == SPECIAL_UNSIGNED_LT ||
+		    condition->op == SPECIAL_NOTEQUAL)
+			max.value--;
+		estate_set_fuzzy_max(estate, max);
+	}
+	set_extra_expr_mod(iter_var, estate);
+	return get_sm_state_expr(SMATCH_EXTRA, iter_var);
+}
+
+static struct sm_state *handle_canonical_for_dec(struct expression *iter_expr,
+						struct expression *condition)
+{
+	struct expression *iter_var;
+	struct sm_state *sm;
+	struct smatch_state *estate;
+	sval_t start, end;
+
+	iter_var = iter_expr->unop;
+	sm = get_sm_state_expr(SMATCH_EXTRA, iter_var);
+	if (!sm)
+		return NULL;
+	if (!estate_get_single_value(sm->state, &start))
+		return NULL;
+	if (!get_implied_min(condition->right, &end))
+		end = sval_type_min(get_type(iter_var));
+	if (get_sm_state_expr(SMATCH_EXTRA, condition->left) != sm)
+		return NULL;
+
+	switch (condition->op) {
+	case SPECIAL_NOTEQUAL:
+	case '>':
+		if (!sval_is_min(end) && !sval_is_max(end))
+			end.value++;
+		break;
+	case SPECIAL_GTE:
+		break;
+	default:
+		return NULL;
+	}
+	if (sval_cmp(end, start) > 0)
+		return NULL;
+	estate = alloc_estate_range(end, start);
+	estate_set_hard_max(estate);
+	estate_set_fuzzy_max(estate, estate_get_fuzzy_max(estate));
+	set_extra_expr_mod(iter_var, estate);
+	return get_sm_state_expr(SMATCH_EXTRA, iter_var);
+}
+
+static struct sm_state *handle_canonical_for_loops(struct statement *loop)
+{
+	struct expression *iter_expr;
+	struct expression *condition;
+
+	if (!loop->iterator_post_statement)
+		return NULL;
+	if (loop->iterator_post_statement->type != STMT_EXPRESSION)
+		return NULL;
+	iter_expr = loop->iterator_post_statement->expression;
+	if (!loop->iterator_pre_condition)
+		return NULL;
+	if (loop->iterator_pre_condition->type != EXPR_COMPARE)
+		return NULL;
+	condition = loop->iterator_pre_condition;
+
+	if (iter_expr->op == SPECIAL_INCREMENT)
+		return handle_canonical_for_inc(iter_expr, condition);
+	if (iter_expr->op == SPECIAL_DECREMENT)
+		return handle_canonical_for_dec(iter_expr, condition);
+	return NULL;
+}
+
+struct sm_state *__extra_handle_canonical_loops(struct statement *loop, struct stree **stree)
+{
+	struct sm_state *ret;
+
+	/*
+	 * Canonical loops are a hack.  The proper way to handle this is to
+	 * use two passes, but unfortunately, doing two passes makes parsing
+	 * code twice as slow.
+	 *
+	 * What we do is we set the inside state here, which overwrites whatever
+	 * __extra_match_condition() does.  Then we set the outside state in
+	 * __extra_pre_loop_hook_after().
+	 *
+	 */
+	__push_fake_cur_stree();
+	if (!loop->iterator_post_statement)
+		ret = handle_canonical_while_count_down(loop);
+	else
+		ret = handle_canonical_for_loops(loop);
+	*stree = __pop_fake_cur_stree();
+	return ret;
+}
+
+int __iterator_unchanged(struct sm_state *sm)
+{
+	if (!sm)
+		return 0;
+	if (get_sm_state(my_id, sm->name, sm->sym) == sm)
+		return 1;
+	return 0;
+}
+
+static void while_count_down_after(struct sm_state *sm, struct expression *condition)
+{
+	struct expression *unop;
+	int op;
+	sval_t limit, after_value;
+
+	if (!get_countdown_info(condition, &unop, &op, &limit))
+		return;
+	after_value = estate_min(sm->state);
+	after_value.value--;
+	set_extra_mod(sm->name, sm->sym, condition->unop, alloc_estate_sval(after_value));
+}
+
+void __extra_pre_loop_hook_after(struct sm_state *sm,
+				struct statement *iterator,
+				struct expression *condition)
+{
+	struct expression *iter_expr;
+	sval_t limit;
+	struct smatch_state *state;
+
+	if (!iterator) {
+		while_count_down_after(sm, condition);
+		return;
+	}
+
+	iter_expr = iterator->expression;
+
+	if (condition->type != EXPR_COMPARE)
+		return;
+	if (iter_expr->op == SPECIAL_INCREMENT) {
+		limit = sval_binop(estate_max(sm->state), '+',
+				   sval_type_val(estate_type(sm->state), 1));
+	} else {
+		limit = sval_binop(estate_min(sm->state), '-',
+				   sval_type_val(estate_type(sm->state), 1));
+	}
+	if (!estate_has_hard_max(sm->state) && !__has_breaks()) {
+		if (iter_expr->op == SPECIAL_INCREMENT)
+			state = alloc_estate_range(estate_min(sm->state), limit);
+		else
+			state = alloc_estate_range(limit, estate_max(sm->state));
+	} else {
+		state = alloc_estate_sval(limit);
+	}
+	if (!estate_has_hard_max(sm->state)) {
+		estate_clear_hard_max(state);
+	}
+	if (estate_has_fuzzy_max(sm->state)) {
+		sval_t hmax = estate_get_fuzzy_max(sm->state);
+		sval_t max = estate_max(sm->state);
+
+		if (sval_cmp(hmax, max) != 0)
+			estate_clear_fuzzy_max(state);
+	} else if (!estate_has_fuzzy_max(sm->state)) {
+		estate_clear_fuzzy_max(state);
+	}
+
+	set_extra_mod(sm->name, sm->sym, iter_expr, state);
+}
+
+static struct stree *unmatched_stree;
+static struct smatch_state *unmatched_state(struct sm_state *sm)
+{
+	struct smatch_state *state;
+
+	if (unmatched_stree) {
+		state = get_state_stree(unmatched_stree, SMATCH_EXTRA, sm->name, sm->sym);
+		if (state)
+			return state;
+	}
+	if (parent_is_gone_var_sym(sm->name, sm->sym))
+		return alloc_estate_empty();
+	return alloc_estate_whole(estate_type(sm->state));
+}
+
+static void clear_the_pointed_at(struct expression *expr)
+{
+	struct stree *stree;
+	char *name;
+	struct symbol *sym;
+	struct sm_state *tmp;
+
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+
+	stree = __get_cur_stree();
+	FOR_EACH_MY_SM(SMATCH_EXTRA, stree, tmp) {
+		if (tmp->name[0] != '*')
+			continue;
+		if (tmp->sym != sym)
+			continue;
+		if (strcmp(tmp->name + 1, name) != 0)
+			continue;
+		set_extra_mod(tmp->name, tmp->sym, expr, alloc_estate_whole(estate_type(tmp->state)));
+	} END_FOR_EACH_SM(tmp);
+
+free:
+	free_string(name);
+}
+
+static int is_const_param(struct expression *expr, int param)
+{
+	struct symbol *type;
+
+	type = get_arg_type(expr, param);
+	if (!type)
+		return 0;
+	if (type->ctype.modifiers & MOD_CONST)
+		return 1;
+	return 0;
+}
+
+static void match_function_call(struct expression *expr)
+{
+	struct expression *arg;
+	struct expression *tmp;
+	int param = -1;
+
+	/* if we have the db this is handled in smatch_function_hooks.c */
+	if (!option_no_db)
+		return;
+	if (inlinable(expr->fn))
+		return;
+
+	FOR_EACH_PTR(expr->args, arg) {
+		param++;
+		if (is_const_param(expr->fn, param))
+			continue;
+		tmp = strip_expr(arg);
+		if (tmp->type == EXPR_PREOP && tmp->op == '&')
+			set_extra_expr_mod(tmp->unop, alloc_estate_whole(get_type(tmp->unop)));
+		else
+			clear_the_pointed_at(tmp);
+	} END_FOR_EACH_PTR(arg);
+}
+
+static int values_fit_type(struct expression *left, struct expression *right)
+{
+	struct range_list *rl;
+	struct symbol *type;
+
+	type = get_type(left);
+	if (!type)
+		return 0;
+	get_absolute_rl(right, &rl);
+	if (type_unsigned(type) && sval_is_negative(rl_min(rl)))
+		return 0;
+	if (sval_cmp(sval_type_min(type), rl_min(rl)) > 0)
+		return 0;
+	if (sval_cmp(sval_type_max(type), rl_max(rl)) < 0)
+		return 0;
+	return 1;
+}
+
+static void save_chunk_info(struct expression *left, struct expression *right)
+{
+	struct var_sym_list *vsl;
+	struct var_sym *vs;
+	struct expression *add_expr;
+	struct symbol *type;
+	sval_t sval;
+	char *name;
+	struct symbol *sym;
+
+	if (right->type != EXPR_BINOP || right->op != '-')
+		return;
+	if (!get_value(right->left, &sval))
+		return;
+	if (!expr_to_sym(right->right))
+		return;
+
+	add_expr = binop_expression(left, '+', right->right);
+	type = get_type(add_expr);
+	if (!type)
+		return;
+	name = expr_to_chunk_sym_vsl(add_expr, &sym, &vsl);
+	if (!name || !vsl)
+		goto free;
+	FOR_EACH_PTR(vsl, vs) {
+		store_link(link_id, vs->var, vs->sym, name, sym);
+	} END_FOR_EACH_PTR(vs);
+
+	set_state(SMATCH_EXTRA, name, sym, alloc_estate_sval(sval_cast(type, sval)));
+free:
+	free_string(name);
+}
+
+static void do_array_assign(struct expression *left, int op, struct expression *right)
+{
+	struct range_list *rl;
+
+	if (op == '=') {
+		get_absolute_rl(right, &rl);
+		rl = cast_rl(get_type(left), rl);
+	} else {
+		rl = alloc_whole_rl(get_type(left));
+	}
+
+	set_extra_array_mod(left, alloc_estate_rl(rl));
+}
+
+static void match_vanilla_assign(struct expression *left, struct expression *right)
+{
+	struct range_list *orig_rl = NULL;
+	struct range_list *rl = NULL;
+	struct symbol *right_sym;
+	struct symbol *left_type;
+	struct symbol *right_type;
+	char *right_name = NULL;
+	struct symbol *sym;
+	char *name;
+	sval_t sval, max;
+	struct smatch_state *state;
+	int comparison;
+
+	if (is_struct(left))
+		return;
+
+	save_chunk_info(left, right);
+
+	name = expr_to_var_sym(left, &sym);
+	if (!name) {
+		if (chunk_has_array(left))
+			do_array_assign(left, '=', right);
+		return;
+	}
+
+	left_type = get_type(left);
+	right_type = get_type(right);
+
+	right_name = expr_to_var_sym(right, &right_sym);
+
+	if (!__in_fake_assign &&
+	    !(right->type == EXPR_PREOP && right->op == '&') &&
+	    right_name && right_sym &&
+	    values_fit_type(left, strip_expr(right)) &&
+	    !has_symbol(right, sym)) {
+		set_equiv(left, right);
+		goto free;
+	}
+
+	if (is_pointer(right) && get_address_rl(right, &rl)) {
+		state = alloc_estate_rl(rl);
+		goto done;
+	}
+
+	if (get_implied_value(right, &sval)) {
+		state = alloc_estate_sval(sval_cast(left_type, sval));
+		goto done;
+	}
+
+	if (__in_fake_assign) {
+		struct smatch_state *right_state;
+		sval_t sval;
+
+		if (get_value(right, &sval)) {
+			sval = sval_cast(left_type, sval);
+			state = alloc_estate_sval(sval);
+			goto done;
+		}
+
+		right_state = get_state(SMATCH_EXTRA, right_name, right_sym);
+		if (right_state) {
+			/* simple assignment */
+			state = clone_estate(right_state);
+			goto done;
+		}
+
+		state = alloc_estate_rl(alloc_whole_rl(left_type));
+		goto done;
+	}
+
+	comparison = get_comparison(left, right);
+	if (comparison) {
+		comparison = flip_comparison(comparison);
+		get_implied_rl(left, &orig_rl);
+	}
+
+	if (get_implied_rl(right, &rl)) {
+		rl = cast_rl(left_type, rl);
+		if (orig_rl)
+			filter_by_comparison(&rl, comparison, orig_rl);
+		state = alloc_estate_rl(rl);
+		if (get_hard_max(right, &max)) {
+			estate_set_hard_max(state);
+			estate_set_fuzzy_max(state, max);
+		}
+	} else {
+		rl = alloc_whole_rl(right_type);
+		rl = cast_rl(left_type, rl);
+		if (orig_rl)
+			filter_by_comparison(&rl, comparison, orig_rl);
+		state = alloc_estate_rl(rl);
+	}
+
+done:
+	set_extra_mod(name, sym, left, state);
+free:
+	free_string(right_name);
+}
+
+static int op_remove_assign(int op)
+{
+	switch (op) {
+	case SPECIAL_ADD_ASSIGN:
+		return '+';
+	case SPECIAL_SUB_ASSIGN:
+		return '-';
+	case SPECIAL_MUL_ASSIGN:
+		return '*';
+	case SPECIAL_DIV_ASSIGN:
+		return '/';
+	case SPECIAL_MOD_ASSIGN:
+		return '%';
+	case SPECIAL_AND_ASSIGN:
+		return '&';
+	case SPECIAL_OR_ASSIGN:
+		return '|';
+	case SPECIAL_XOR_ASSIGN:
+		return '^';
+	case SPECIAL_SHL_ASSIGN:
+		return SPECIAL_LEFTSHIFT;
+	case SPECIAL_SHR_ASSIGN:
+		return SPECIAL_RIGHTSHIFT;
+	default:
+		return op;
+	}
+}
+
+static void match_assign(struct expression *expr)
+{
+	struct range_list *rl = NULL;
+	struct expression *left;
+	struct expression *right;
+	struct expression *binop_expr;
+	struct symbol *left_type;
+	struct symbol *sym;
+	char *name;
+	sval_t left_min, left_max;
+	sval_t right_min, right_max;
+	sval_t res_min, res_max;
+
+	left = strip_expr(expr->left);
+
+	right = strip_parens(expr->right);
+	if (right->type == EXPR_CALL && sym_name_is("__builtin_expect", right->fn))
+		right = get_argument_from_call_expr(right->args, 0);
+	while (right->type == EXPR_ASSIGNMENT && right->op == '=')
+		right = strip_parens(right->left);
+
+	if (expr->op == '=' && is_condition(expr->right))
+		return; /* handled in smatch_condition.c */
+	if (expr->op == '=' && right->type == EXPR_CALL)
+		return; /* handled in smatch_function_hooks.c */
+	if (expr->op == '=') {
+		match_vanilla_assign(left, right);
+		return;
+	}
+
+	name = expr_to_var_sym(left, &sym);
+	if (!name)
+		return;
+
+	left_type = get_type(left);
+
+	res_min = sval_type_min(left_type);
+	res_max = sval_type_max(left_type);
+
+	switch (expr->op) {
+	case SPECIAL_ADD_ASSIGN:
+		get_absolute_max(left, &left_max);
+		get_absolute_max(right, &right_max);
+		if (sval_binop_overflows(left_max, '+', sval_cast(left_type, right_max)))
+			break;
+		if (get_implied_min(left, &left_min) &&
+		    !sval_is_negative_min(left_min) &&
+		    get_implied_min(right, &right_min) &&
+		    !sval_is_negative_min(right_min)) {
+			res_min = sval_binop(left_min, '+', right_min);
+			res_min = sval_cast(left_type, res_min);
+		}
+		if (inside_loop())  /* we are assuming loops don't lead to wrapping */
+			break;
+		res_max = sval_binop(left_max, '+', right_max);
+		res_max = sval_cast(left_type, res_max);
+		break;
+	case SPECIAL_SUB_ASSIGN:
+		if (get_implied_max(left, &left_max) &&
+		    !sval_is_max(left_max) &&
+		    get_implied_min(right, &right_min) &&
+		    !sval_is_min(right_min)) {
+			res_max = sval_binop(left_max, '-', right_min);
+			res_max = sval_cast(left_type, res_max);
+		}
+		if (inside_loop())
+			break;
+		if (get_implied_min(left, &left_min) &&
+		    !sval_is_min(left_min) &&
+		    get_implied_max(right, &right_max) &&
+		    !sval_is_max(right_max)) {
+			res_min = sval_binop(left_min, '-', right_max);
+			res_min = sval_cast(left_type, res_min);
+		}
+		break;
+	case SPECIAL_AND_ASSIGN:
+	case SPECIAL_MOD_ASSIGN:
+	case SPECIAL_SHL_ASSIGN:
+	case SPECIAL_SHR_ASSIGN:
+	case SPECIAL_OR_ASSIGN:
+	case SPECIAL_XOR_ASSIGN:
+	case SPECIAL_MUL_ASSIGN:
+	case SPECIAL_DIV_ASSIGN:
+		binop_expr = binop_expression(expr->left,
+					      op_remove_assign(expr->op),
+					      expr->right);
+		if (get_absolute_rl(binop_expr, &rl)) {
+			rl = cast_rl(left_type, rl);
+			set_extra_mod(name, sym, left, alloc_estate_rl(rl));
+			goto free;
+		}
+		break;
+	}
+	rl = cast_rl(left_type, alloc_rl(res_min, res_max));
+	set_extra_mod(name, sym, left, alloc_estate_rl(rl));
+free:
+	free_string(name);
+}
+
+static struct smatch_state *increment_state(struct smatch_state *state)
+{
+	sval_t min = estate_min(state);
+	sval_t max = estate_max(state);
+
+	if (!estate_rl(state))
+		return NULL;
+
+	if (inside_loop())
+		max = sval_type_max(max.type);
+
+	if (!sval_is_min(min) && !sval_is_max(min))
+		min.value++;
+	if (!sval_is_min(max) && !sval_is_max(max))
+		max.value++;
+	return alloc_estate_range(min, max);
+}
+
+static struct smatch_state *decrement_state(struct smatch_state *state)
+{
+	sval_t min = estate_min(state);
+	sval_t max = estate_max(state);
+
+	if (!estate_rl(state))
+		return NULL;
+
+	if (inside_loop())
+		min = sval_type_min(min.type);
+
+	if (!sval_is_min(min) && !sval_is_max(min))
+		min.value--;
+	if (!sval_is_min(max) && !sval_is_max(max))
+		max.value--;
+	return alloc_estate_range(min, max);
+}
+
+static void clear_pointed_at_state(struct expression *expr)
+{
+	struct symbol *type;
+
+	/*
+         * ALERT: This is sort of a mess.  If it's is a struct assigment like
+	 * "foo = bar;", then that's handled by smatch_struct_assignment.c.
+	 * the same thing for p++ where "p" is a struct.  Most modifications
+	 * are handled by the assignment hook or the db.  Smatch_extra.c doesn't
+	 * use smatch_modification.c because we have to get the ordering right
+	 * or something.  So if you have p++ where p is a pointer to a standard
+	 * c type then we handle that here.  What a mess.
+	 */
+	expr = strip_expr(expr);
+	type = get_type(expr);
+	if (!type || type->type != SYM_PTR)
+		return;
+	type = get_real_base_type(type);
+	if (!type || type->type != SYM_BASETYPE)
+		return;
+	set_extra_expr_nomod(deref_expression(expr), alloc_estate_whole(type));
+}
+
+static void unop_expr(struct expression *expr)
+{
+	struct smatch_state *state;
+
+	if (expr->smatch_flags & Handled)
+		return;
+
+	switch (expr->op) {
+	case SPECIAL_INCREMENT:
+		state = get_state_expr(SMATCH_EXTRA, expr->unop);
+		state = increment_state(state);
+		if (!state)
+			state = alloc_estate_whole(get_type(expr));
+		set_extra_expr_mod(expr->unop, state);
+		clear_pointed_at_state(expr->unop);
+		break;
+	case SPECIAL_DECREMENT:
+		state = get_state_expr(SMATCH_EXTRA, expr->unop);
+		state = decrement_state(state);
+		if (!state)
+			state = alloc_estate_whole(get_type(expr));
+		set_extra_expr_mod(expr->unop, state);
+		clear_pointed_at_state(expr->unop);
+		break;
+	default:
+		return;
+	}
+}
+
+static void asm_expr(struct statement *stmt)
+{
+
+	struct expression *expr;
+	struct symbol *type;
+	int state = 0;
+
+	FOR_EACH_PTR(stmt->asm_outputs, expr) {
+		switch (state) {
+		case 0: /* identifier */
+		case 1: /* constraint */
+			state++;
+			continue;
+		case 2: /* expression */
+			state = 0;
+			type = get_type(strip_expr(expr));
+			set_extra_expr_mod(expr, alloc_estate_whole(type));
+			continue;
+		}
+	} END_FOR_EACH_PTR(expr);
+}
+
+static void check_dereference(struct expression *expr)
+{
+	struct smatch_state *state;
+
+	if (__in_fake_assign)
+		return;
+	if (outside_of_function())
+		return;
+	state = get_extra_state(expr);
+	if (state) {
+		struct range_list *rl;
+
+		rl = rl_intersection(estate_rl(state), valid_ptr_rl);
+		if (rl_equiv(rl, estate_rl(state)))
+			return;
+		set_extra_expr_nomod(expr, alloc_estate_rl(rl));
+	} else {
+		set_extra_expr_nomod(expr, alloc_estate_range(valid_ptr_min_sval, valid_ptr_max_sval));
+	}
+}
+
+static void match_dereferences(struct expression *expr)
+{
+	if (expr->type != EXPR_PREOP)
+		return;
+	/* it's saying that foo[1] = bar dereferences foo[1] */
+	if (is_array(expr))
+		return;
+	check_dereference(expr->unop);
+}
+
+static void match_pointer_as_array(struct expression *expr)
+{
+	if (!is_array(expr))
+		return;
+	check_dereference(get_array_base(expr));
+}
+
+static void find_dereferences(struct expression *expr)
+{
+	while (expr->type == EXPR_PREOP) {
+		if (expr->op == '*')
+			check_dereference(expr->unop);
+		expr = strip_expr(expr->unop);
+	}
+}
+
+static void set_param_dereferenced(struct expression *call, struct expression *arg, char *key, char *unused)
+{
+	struct symbol *sym;
+	char *name;
+
+	name = get_variable_from_key(arg, key, &sym);
+	if (name && sym) {
+		struct smatch_state *orig, *new;
+		struct range_list *rl;
+
+		orig = get_state(SMATCH_EXTRA, name, sym);
+		if (orig) {
+			rl = rl_intersection(estate_rl(orig),
+					     alloc_rl(valid_ptr_min_sval,
+						      valid_ptr_max_sval));
+			new = alloc_estate_rl(rl);
+		} else {
+			new = alloc_estate_range(valid_ptr_min_sval, valid_ptr_max_sval);
+		}
+
+		set_extra_nomod(name, sym, NULL, new);
+	}
+	free_string(name);
+
+	find_dereferences(arg);
+}
+
+static sval_t add_one(sval_t sval)
+{
+	sval.value++;
+	return sval;
+}
+
+static int handle_postop_inc(struct expression *left, int op, struct expression *right)
+{
+	struct statement *stmt;
+	struct expression *cond;
+	struct smatch_state *true_state, *false_state;
+	sval_t start;
+	sval_t limit;
+
+	/*
+	 * If we're decrementing here then that's a canonical while count down
+	 * so it's handled already.  We're only handling loops like:
+	 * i = 0;
+	 * do { ... } while (i++ < 3);
+	 */
+
+	if (left->type != EXPR_POSTOP || left->op != SPECIAL_INCREMENT)
+		return 0;
+
+	stmt = __cur_stmt->parent;
+	if (!stmt)
+		return 0;
+	if (stmt->type == STMT_COMPOUND)
+		stmt = stmt->parent;
+	if (!stmt || stmt->type != STMT_ITERATOR || !stmt->iterator_post_condition)
+		return 0;
+
+	cond = strip_expr(stmt->iterator_post_condition);
+	if (cond->type != EXPR_COMPARE || cond->op != op)
+		return 0;
+	if (left != strip_expr(cond->left) || right != strip_expr(cond->right))
+		return 0;
+
+	if (!get_implied_value(left->unop, &start))
+		return 0;
+	if (!get_implied_value(right, &limit))
+		return 0;
+
+	if (sval_cmp(start, limit) > 0)
+		return 0;
+
+	switch (op) {
+	case '<':
+	case SPECIAL_UNSIGNED_LT:
+		break;
+	case SPECIAL_LTE:
+	case SPECIAL_UNSIGNED_LTE:
+		limit = add_one(limit);
+	default:
+		return 0;
+
+	}
+
+	true_state = alloc_estate_range(add_one(start), limit);
+	false_state = alloc_estate_range(add_one(limit), add_one(limit));
+
+	/* Currently we just discard the false state but when two passes is
+	 * implimented correctly then it will use it.
+	 */
+
+	set_extra_expr_true_false(left->unop, true_state, false_state);
+
+	return 1;
+}
+
+bool is_impossible_variable(struct expression *expr)
+{
+	struct smatch_state *state;
+
+	state = get_extra_state(expr);
+	if (state && !estate_rl(state))
+		return true;
+	return false;
+}
+
+static void handle_comparison(struct symbol *type, struct expression *left, int op, struct expression *right)
+{
+	struct range_list *left_orig;
+	struct range_list *left_true;
+	struct range_list *left_false;
+	struct range_list *right_orig;
+	struct range_list *right_true;
+	struct range_list *right_false;
+	struct smatch_state *left_true_state;
+	struct smatch_state *left_false_state;
+	struct smatch_state *right_true_state;
+	struct smatch_state *right_false_state;
+	sval_t dummy, hard_max;
+	int left_postop = 0;
+	int right_postop = 0;
+
+	if (left->op == SPECIAL_INCREMENT || left->op == SPECIAL_DECREMENT) {
+		if (left->type == EXPR_POSTOP) {
+			left->smatch_flags |= Handled;
+			left_postop = left->op;
+			if (handle_postop_inc(left, op, right))
+				return;
+		}
+		left = strip_parens(left->unop);
+	}
+	while (left->type == EXPR_ASSIGNMENT)
+		left = strip_parens(left->left);
+
+	if (right->op == SPECIAL_INCREMENT || right->op == SPECIAL_DECREMENT) {
+		if (right->type == EXPR_POSTOP) {
+			right->smatch_flags |= Handled;
+			right_postop = right->op;
+		}
+		right = strip_parens(right->unop);
+	}
+
+	if (is_impossible_variable(left) || is_impossible_variable(right))
+		return;
+
+	get_real_absolute_rl(left, &left_orig);
+	left_orig = cast_rl(type, left_orig);
+
+	get_real_absolute_rl(right, &right_orig);
+	right_orig = cast_rl(type, right_orig);
+
+	split_comparison_rl(left_orig, op, right_orig, &left_true, &left_false, &right_true, &right_false);
+
+	left_true = rl_truncate_cast(get_type(strip_expr(left)), left_true);
+	left_false = rl_truncate_cast(get_type(strip_expr(left)), left_false);
+	right_true = rl_truncate_cast(get_type(strip_expr(right)), right_true);
+	right_false = rl_truncate_cast(get_type(strip_expr(right)), right_false);
+
+	if (!left_true || !left_false) {
+		struct range_list *tmp_true, *tmp_false;
+
+		split_comparison_rl(alloc_whole_rl(type), op, right_orig, &tmp_true, &tmp_false, NULL, NULL);
+		tmp_true = rl_truncate_cast(get_type(strip_expr(left)), tmp_true);
+		tmp_false = rl_truncate_cast(get_type(strip_expr(left)), tmp_false);
+		if (tmp_true && tmp_false)
+			__save_imaginary_state(left, tmp_true, tmp_false);
+	}
+
+	if (!right_true || !right_false) {
+		struct range_list *tmp_true, *tmp_false;
+
+		split_comparison_rl(alloc_whole_rl(type), op, right_orig, NULL, NULL, &tmp_true, &tmp_false);
+		tmp_true = rl_truncate_cast(get_type(strip_expr(right)), tmp_true);
+		tmp_false = rl_truncate_cast(get_type(strip_expr(right)), tmp_false);
+		if (tmp_true && tmp_false)
+			__save_imaginary_state(right, tmp_true, tmp_false);
+	}
+
+	left_true_state = alloc_estate_rl(left_true);
+	left_false_state = alloc_estate_rl(left_false);
+	right_true_state = alloc_estate_rl(right_true);
+	right_false_state = alloc_estate_rl(right_false);
+
+	switch (op) {
+	case '<':
+	case SPECIAL_UNSIGNED_LT:
+	case SPECIAL_UNSIGNED_LTE:
+	case SPECIAL_LTE:
+		if (get_hard_max(right, &dummy))
+			estate_set_hard_max(left_true_state);
+		if (get_hard_max(left, &dummy))
+			estate_set_hard_max(right_false_state);
+		break;
+	case '>':
+	case SPECIAL_UNSIGNED_GT:
+	case SPECIAL_UNSIGNED_GTE:
+	case SPECIAL_GTE:
+		if (get_hard_max(left, &dummy))
+			estate_set_hard_max(right_true_state);
+		if (get_hard_max(right, &dummy))
+			estate_set_hard_max(left_false_state);
+		break;
+	}
+
+	switch (op) {
+	case '<':
+	case SPECIAL_UNSIGNED_LT:
+	case SPECIAL_UNSIGNED_LTE:
+	case SPECIAL_LTE:
+		if (get_hard_max(right, &hard_max)) {
+			if (op == '<' || op == SPECIAL_UNSIGNED_LT)
+				hard_max.value--;
+			estate_set_fuzzy_max(left_true_state, hard_max);
+		}
+		if (get_implied_value(right, &hard_max)) {
+			if (op == SPECIAL_UNSIGNED_LTE ||
+			    op == SPECIAL_LTE)
+				hard_max.value++;
+			estate_set_fuzzy_max(left_false_state, hard_max);
+		}
+		if (get_hard_max(left, &hard_max)) {
+			if (op == SPECIAL_UNSIGNED_LTE ||
+			    op == SPECIAL_LTE)
+				hard_max.value--;
+			estate_set_fuzzy_max(right_false_state, hard_max);
+		}
+		if (get_implied_value(left, &hard_max)) {
+			if (op == '<' || op == SPECIAL_UNSIGNED_LT)
+				hard_max.value++;
+			estate_set_fuzzy_max(right_true_state, hard_max);
+		}
+		break;
+	case '>':
+	case SPECIAL_UNSIGNED_GT:
+	case SPECIAL_UNSIGNED_GTE:
+	case SPECIAL_GTE:
+		if (get_hard_max(left, &hard_max)) {
+			if (op == '>' || op == SPECIAL_UNSIGNED_GT)
+				hard_max.value--;
+			estate_set_fuzzy_max(right_true_state, hard_max);
+		}
+		if (get_implied_value(left, &hard_max)) {
+			if (op == SPECIAL_UNSIGNED_GTE ||
+			    op == SPECIAL_GTE)
+				hard_max.value++;
+			estate_set_fuzzy_max(right_false_state, hard_max);
+		}
+		if (get_hard_max(right, &hard_max)) {
+			if (op == SPECIAL_UNSIGNED_LTE ||
+			    op == SPECIAL_LTE)
+				hard_max.value--;
+			estate_set_fuzzy_max(left_false_state, hard_max);
+		}
+		if (get_implied_value(right, &hard_max)) {
+			if (op == '>' ||
+			    op == SPECIAL_UNSIGNED_GT)
+				hard_max.value++;
+			estate_set_fuzzy_max(left_true_state, hard_max);
+		}
+		break;
+	case SPECIAL_EQUAL:
+		if (get_hard_max(left, &hard_max))
+			estate_set_fuzzy_max(right_true_state, hard_max);
+		if (get_hard_max(right, &hard_max))
+			estate_set_fuzzy_max(left_true_state, hard_max);
+		break;
+	}
+
+	if (get_hard_max(left, &hard_max)) {
+		estate_set_hard_max(left_true_state);
+		estate_set_hard_max(left_false_state);
+	}
+	if (get_hard_max(right, &hard_max)) {
+		estate_set_hard_max(right_true_state);
+		estate_set_hard_max(right_false_state);
+	}
+
+	if (left_postop == SPECIAL_INCREMENT) {
+		left_true_state = increment_state(left_true_state);
+		left_false_state = increment_state(left_false_state);
+	}
+	if (left_postop == SPECIAL_DECREMENT) {
+		left_true_state = decrement_state(left_true_state);
+		left_false_state = decrement_state(left_false_state);
+	}
+	if (right_postop == SPECIAL_INCREMENT) {
+		right_true_state = increment_state(right_true_state);
+		right_false_state = increment_state(right_false_state);
+	}
+	if (right_postop == SPECIAL_DECREMENT) {
+		right_true_state = decrement_state(right_true_state);
+		right_false_state = decrement_state(right_false_state);
+	}
+
+	if (estate_rl(left_true_state) && estates_equiv(left_true_state, left_false_state)) {
+		left_true_state = NULL;
+		left_false_state = NULL;
+	}
+
+	if (estate_rl(right_true_state) && estates_equiv(right_true_state, right_false_state)) {
+		right_true_state = NULL;
+		right_false_state = NULL;
+	}
+
+	/* Don't introduce new states for known true/false conditions */
+	if (rl_equiv(left_orig, estate_rl(left_true_state)))
+		left_true_state = NULL;
+	if (rl_equiv(left_orig, estate_rl(left_false_state)))
+		left_false_state = NULL;
+	if (rl_equiv(right_orig, estate_rl(right_true_state)))
+		right_true_state = NULL;
+	if (rl_equiv(right_orig, estate_rl(right_false_state)))
+		right_false_state = NULL;
+
+	set_extra_expr_true_false(left, left_true_state, left_false_state);
+	set_extra_expr_true_false(right, right_true_state, right_false_state);
+}
+
+static int is_simple_math(struct expression *expr)
+{
+	if (!expr)
+		return 0;
+	if (expr->type != EXPR_BINOP)
+		return 0;
+	switch (expr->op) {
+	case '+':
+	case '-':
+	case '*':
+		return 1;
+	}
+	return 0;
+}
+
+static void move_known_values(struct expression **left_p, struct expression **right_p)
+{
+	struct expression *left = *left_p;
+	struct expression *right = *right_p;
+	sval_t sval, dummy;
+
+	if (get_implied_value(left, &sval)) {
+		if (!is_simple_math(right))
+			return;
+		if (get_implied_value(right, &dummy))
+			return;
+		if (right->op == '*') {
+			sval_t divisor;
+
+			if (!get_value(right->right, &divisor))
+				return;
+			if (divisor.value == 0)
+				return;
+			*left_p = binop_expression(left, invert_op(right->op), right->right);
+			*right_p = right->left;
+			return;
+		}
+		if (right->op == '+' && get_value(right->left, &sval)) {
+			*left_p = binop_expression(left, invert_op(right->op), right->left);
+			*right_p = right->right;
+			return;
+		}
+		if (get_value(right->right, &sval)) {
+			*left_p = binop_expression(left, invert_op(right->op), right->right);
+			*right_p = right->left;
+			return;
+		}
+		return;
+	}
+	if (get_implied_value(right, &sval)) {
+		if (!is_simple_math(left))
+			return;
+		if (get_implied_value(left, &dummy))
+			return;
+		if (left->op == '*') {
+			sval_t divisor;
+
+			if (!get_value(left->right, &divisor))
+				return;
+			if (divisor.value == 0)
+				return;
+			*right_p = binop_expression(right, invert_op(left->op), left->right);
+			*left_p = left->left;
+			return;
+		}
+		if (left->op == '+' && get_value(left->left, &sval)) {
+			*right_p = binop_expression(right, invert_op(left->op), left->left);
+			*left_p = left->right;
+			return;
+		}
+
+		if (get_value(left->right, &sval)) {
+			*right_p = binop_expression(right, invert_op(left->op), left->right);
+			*left_p = left->left;
+			return;
+		}
+		return;
+	}
+}
+
+/*
+ * The reason for do_simple_algebra() is to solve things like:
+ * if (foo > 66 || foo + bar > 64) {
+ * "foo" is not really a known variable so it won't be handled by
+ * move_known_variables() but it's a super common idiom.
+ *
+ */
+static int do_simple_algebra(struct expression **left_p, struct expression **right_p)
+{
+	struct expression *left = *left_p;
+	struct expression *right = *right_p;
+	struct range_list *rl;
+	sval_t tmp;
+
+	if (left->type != EXPR_BINOP || left->op != '+')
+		return 0;
+	if (can_integer_overflow(get_type(left), left))
+		return 0;
+	if (!get_implied_value(right, &tmp))
+		return 0;
+
+	if (!get_implied_value(left->left, &tmp) &&
+	    get_implied_rl(left->left, &rl) &&
+	    !is_whole_rl(rl)) {
+		*right_p = binop_expression(right, '-', left->left);
+		*left_p = left->right;
+		return 1;
+	}
+	if (!get_implied_value(left->right, &tmp) &&
+	    get_implied_rl(left->right, &rl) &&
+	    !is_whole_rl(rl)) {
+		*right_p = binop_expression(right, '-', left->right);
+		*left_p = left->left;
+		return 1;
+	}
+
+	return 0;
+}
+
+static int match_func_comparison(struct expression *expr)
+{
+	struct expression *left = strip_expr(expr->left);
+	struct expression *right = strip_expr(expr->right);
+	sval_t sval;
+
+	/*
+	 * fixme: think about this harder. We should always be trying to limit
+	 * the non-call side as well.  If we can't determine the limitter does
+	 * that mean we aren't querying the database and are missing important
+	 * information?
+	 */
+
+	if (left->type == EXPR_CALL) {
+		if (get_implied_value(left, &sval)) {
+			handle_comparison(get_type(expr), left, expr->op, right);
+			return 1;
+		}
+		function_comparison(left, expr->op, right);
+		return 1;
+	}
+
+	if (right->type == EXPR_CALL) {
+		if (get_implied_value(right, &sval)) {
+			handle_comparison(get_type(expr), left, expr->op, right);
+			return 1;
+		}
+		function_comparison(left, expr->op, right);
+		return 1;
+	}
+
+	return 0;
+}
+
+/* Handle conditions like "if (foo + bar < foo) {" */
+static int handle_integer_overflow_test(struct expression *expr)
+{
+	struct expression *left, *right;
+	struct symbol *type;
+	sval_t left_min, right_min, min, max;
+
+	if (expr->op != '<' && expr->op != SPECIAL_UNSIGNED_LT)
+		return 0;
+
+	left = strip_parens(expr->left);
+	right = strip_parens(expr->right);
+
+	if (left->op != '+')
+		return 0;
+
+	type = get_type(expr);
+	if (!type)
+		return 0;
+	if (type_positive_bits(type) == 32) {
+		max.type = &uint_ctype;
+		max.uvalue = (unsigned int)-1;
+	} else if (type_positive_bits(type) == 64) {
+		max.type = &ulong_ctype;
+		max.value = (unsigned long long)-1;
+	} else {
+		return 0;
+	}
+
+	if (!expr_equiv(left->left, right) && !expr_equiv(left->right, right))
+		return 0;
+
+	get_absolute_min(left->left, &left_min);
+	get_absolute_min(left->right, &right_min);
+	min = sval_binop(left_min, '+', right_min);
+
+	set_extra_chunk_true_false(left, NULL, alloc_estate_range(min, max));
+	return 1;
+}
+
+static void match_comparison(struct expression *expr)
+{
+	struct expression *left_orig = strip_parens(expr->left);
+	struct expression *right_orig = strip_parens(expr->right);
+	struct expression *left, *right, *tmp;
+	struct expression *prev;
+	struct symbol *type;
+	int redo, count;
+
+	if (match_func_comparison(expr))
+		return;
+
+	type = get_type(expr);
+	if (!type)
+		type = &llong_ctype;
+
+	if (handle_integer_overflow_test(expr))
+		return;
+
+	left = left_orig;
+	right = right_orig;
+	move_known_values(&left, &right);
+	handle_comparison(type, left, expr->op, right);
+
+	left = left_orig;
+	right = right_orig;
+	if (do_simple_algebra(&left, &right))
+		handle_comparison(type, left, expr->op, right);
+
+	prev = get_assigned_expr(left_orig);
+	if (is_simple_math(prev) && has_variable(prev, left_orig) == 0) {
+		left = prev;
+		right = right_orig;
+		move_known_values(&left, &right);
+		handle_comparison(type, left, expr->op, right);
+	}
+
+	prev = get_assigned_expr(right_orig);
+	if (is_simple_math(prev) && has_variable(prev, right_orig) == 0) {
+		left = left_orig;
+		right = prev;
+		move_known_values(&left, &right);
+		handle_comparison(type, left, expr->op, right);
+	}
+
+	redo = 0;
+	left = left_orig;
+	right = right_orig;
+	if (get_last_expr_from_expression_stmt(left_orig)) {
+		left = get_last_expr_from_expression_stmt(left_orig);
+		redo = 1;
+	}
+	if (get_last_expr_from_expression_stmt(right_orig)) {
+		right = get_last_expr_from_expression_stmt(right_orig);
+		redo = 1;
+	}
+
+	if (!redo)
+		return;
+
+	count = 0;
+	while ((tmp = get_assigned_expr(left))) {
+		if (count++ > 3)
+			break;
+		left = strip_expr(tmp);
+	}
+	count = 0;
+	while ((tmp = get_assigned_expr(right))) {
+		if (count++ > 3)
+			break;
+		right = strip_expr(tmp);
+	}
+
+	handle_comparison(type, left, expr->op, right);
+}
+
+static sval_t get_high_mask(sval_t known)
+{
+	sval_t ret;
+	int i;
+
+	ret = known;
+	ret.value = 0;
+
+	for (i = type_bits(known.type) - 1; i >= 0; i--) {
+		if (known.uvalue & (1ULL << i))
+			ret.uvalue |= (1ULL << i);
+		else
+			return ret;
+
+	}
+	return ret;
+}
+
+static void handle_AND_op(struct expression *var, sval_t known)
+{
+	struct range_list *orig_rl;
+	struct range_list *true_rl = NULL;
+	struct range_list *false_rl = NULL;
+	int bit;
+	sval_t low_mask = known;
+	sval_t high_mask;
+	sval_t max;
+
+	get_absolute_rl(var, &orig_rl);
+
+	if (known.value > 0) {
+		bit = ffsll(known.value) - 1;
+		low_mask.uvalue = (1ULL << bit) - 1;
+		true_rl = remove_range(orig_rl, sval_type_val(known.type, 0), low_mask);
+	}
+	high_mask = get_high_mask(known);
+	if (high_mask.value) {
+		bit = ffsll(high_mask.value) - 1;
+		low_mask.uvalue = (1ULL << bit) - 1;
+
+		false_rl = orig_rl;
+		if (sval_is_negative(rl_min(orig_rl)))
+			false_rl = remove_range(false_rl, sval_type_min(known.type), sval_type_val(known.type, -1));
+		false_rl = remove_range(false_rl, low_mask, sval_type_max(known.type));
+		if (type_signed(high_mask.type) && type_unsigned(rl_type(false_rl))) {
+			false_rl = remove_range(false_rl,
+						sval_type_val(rl_type(false_rl), sval_type_max(known.type).uvalue),
+					sval_type_val(rl_type(false_rl), -1));
+		}
+	} else if (known.value == 1 &&
+		   get_hard_max(var, &max) &&
+		   sval_cmp(max, rl_max(orig_rl)) == 0 &&
+		   max.value & 1) {
+		false_rl = remove_range(orig_rl, max, max);
+	}
+	set_extra_expr_true_false(var,
+				  true_rl ? alloc_estate_rl(true_rl) : NULL,
+				  false_rl ? alloc_estate_rl(false_rl) : NULL);
+}
+
+static void handle_AND_condition(struct expression *expr)
+{
+	sval_t known;
+
+	if (get_implied_value(expr->left, &known))
+		handle_AND_op(expr->right, known);
+	else if (get_implied_value(expr->right, &known))
+		handle_AND_op(expr->left, known);
+}
+
+static void handle_MOD_condition(struct expression *expr)
+{
+	struct range_list *orig_rl;
+	struct range_list *true_rl;
+	struct range_list *false_rl = NULL;
+	sval_t right;
+	sval_t zero;
+
+	if (!get_implied_value(expr->right, &right) || right.value == 0)
+		return;
+	get_absolute_rl(expr->left, &orig_rl);
+
+	zero.value = 0;
+	zero.type = rl_type(orig_rl);
+
+	/* We're basically dorking around the min and max here */
+	true_rl = remove_range(orig_rl, zero, zero);
+	if (!sval_is_max(rl_max(true_rl)) &&
+	    !(rl_max(true_rl).value % right.value))
+		true_rl = remove_range(true_rl, rl_max(true_rl), rl_max(true_rl));
+
+	if (rl_equiv(true_rl, orig_rl))
+		true_rl = NULL;
+
+	if (sval_is_positive(rl_min(orig_rl)) &&
+	    (rl_max(orig_rl).value - rl_min(orig_rl).value) / right.value < 5) {
+		sval_t add;
+		int i;
+
+		add = rl_min(orig_rl);
+		add.value += right.value - (add.value % right.value);
+		add.value -= right.value;
+
+		for (i = 0; i < 5; i++) {
+			add.value += right.value;
+			if (add.value > rl_max(orig_rl).value)
+				break;
+			add_range(&false_rl, add, add);
+		}
+	} else {
+		if (rl_min(orig_rl).uvalue != 0 &&
+		    rl_min(orig_rl).uvalue < right.uvalue) {
+			sval_t chop = right;
+			chop.value--;
+			false_rl = remove_range(orig_rl, zero, chop);
+		}
+
+		if (!sval_is_max(rl_max(orig_rl)) &&
+		    (rl_max(orig_rl).value % right.value)) {
+			sval_t chop = rl_max(orig_rl);
+			chop.value -= chop.value % right.value;
+			chop.value++;
+			if (!false_rl)
+				false_rl = clone_rl(orig_rl);
+			false_rl = remove_range(false_rl, chop, rl_max(orig_rl));
+		}
+	}
+
+	set_extra_expr_true_false(expr->left,
+				  true_rl ? alloc_estate_rl(true_rl) : NULL,
+				  false_rl ? alloc_estate_rl(false_rl) : NULL);
+}
+
+/* this is actually hooked from smatch_implied.c...  it's hacky, yes */
+void __extra_match_condition(struct expression *expr)
+{
+	struct smatch_state *pre_state;
+	struct smatch_state *true_state;
+	struct smatch_state *false_state;
+	struct range_list *pre_rl;
+
+	expr = strip_expr(expr);
+	switch (expr->type) {
+	case EXPR_CALL:
+		function_comparison(expr, SPECIAL_NOTEQUAL, zero_expr());
+		return;
+	case EXPR_PREOP:
+	case EXPR_SYMBOL:
+	case EXPR_DEREF: {
+		sval_t zero;
+
+		zero = sval_blank(expr);
+		zero.value = 0;
+
+		pre_state = get_extra_state(expr);
+		if (estate_is_empty(pre_state))
+			return;
+		if (pre_state)
+			pre_rl = estate_rl(pre_state);
+		else
+			get_absolute_rl(expr, &pre_rl);
+		if (possibly_true_rl(pre_rl, SPECIAL_EQUAL, rl_zero()))
+			false_state = alloc_estate_sval(zero);
+		else
+			false_state = alloc_estate_empty();
+		true_state = alloc_estate_rl(remove_range(pre_rl, zero, zero));
+		set_extra_expr_true_false(expr, true_state, false_state);
+		return;
+	}
+	case EXPR_COMPARE:
+		match_comparison(expr);
+		return;
+	case EXPR_ASSIGNMENT:
+		__extra_match_condition(expr->left);
+		return;
+	case EXPR_BINOP:
+		if (expr->op == '&')
+			handle_AND_condition(expr);
+		if (expr->op == '%')
+			handle_MOD_condition(expr);
+		return;
+	}
+}
+
+static void assume_indexes_are_valid(struct expression *expr)
+{
+	struct expression *array_expr;
+	int array_size;
+	struct expression *offset;
+	struct symbol *offset_type;
+	struct range_list *rl_before;
+	struct range_list *rl_after;
+	struct range_list *filter = NULL;
+	sval_t size;
+
+	expr = strip_expr(expr);
+	if (!is_array(expr))
+		return;
+
+	offset = get_array_offset(expr);
+	offset_type = get_type(offset);
+	if (offset_type && type_signed(offset_type)) {
+		filter = alloc_rl(sval_type_min(offset_type),
+				  sval_type_val(offset_type, -1));
+	}
+
+	array_expr = get_array_base(expr);
+	array_size = get_real_array_size(array_expr);
+	if (array_size > 1) {
+		size = sval_type_val(offset_type, array_size);
+		add_range(&filter, size, sval_type_max(offset_type));
+	}
+
+	if (!filter)
+		return;
+	get_absolute_rl(offset, &rl_before);
+	rl_after = rl_filter(rl_before, filter);
+	if (rl_equiv(rl_before, rl_after))
+		return;
+	set_extra_expr_nomod(offset, alloc_estate_rl(rl_after));
+}
+
+/* returns 1 if it is not possible for expr to be value, otherwise returns 0 */
+int implied_not_equal(struct expression *expr, long long val)
+{
+	return !possibly_false(expr, SPECIAL_NOTEQUAL, value_expr(val));
+}
+
+int implied_not_equal_name_sym(char *name, struct symbol *sym, long long val)
+{
+	struct smatch_state *estate;
+
+	estate = get_state(SMATCH_EXTRA, name, sym);
+	if (!estate)
+		return 0;
+	if (!rl_has_sval(estate_rl(estate), sval_type_val(estate_type(estate), 0)))
+		return 1;
+	return 0;
+}
+
+int parent_is_null_var_sym(const char *name, struct symbol *sym)
+{
+	char buf[256];
+	char *start;
+	char *end;
+	struct smatch_state *state;
+
+	strncpy(buf, name, sizeof(buf) - 1);
+	buf[sizeof(buf) - 1] = '\0';
+
+	start = &buf[0];
+	while (*start == '*') {
+		start++;
+		state = get_state(SMATCH_EXTRA, start, sym);
+		if (!state)
+			continue;
+		if (!estate_rl(state))
+			return 1;
+		if (estate_min(state).value == 0 &&
+		    estate_max(state).value == 0)
+			return 1;
+	}
+
+	start = &buf[0];
+	while (*start == '&')
+		start++;
+
+	while ((end = strrchr(start, '-'))) {
+		*end = '\0';
+		state = __get_state(SMATCH_EXTRA, start, sym);
+		if (!state)
+			continue;
+		if (estate_min(state).value == 0 &&
+		    estate_max(state).value == 0)
+			return 1;
+	}
+	return 0;
+}
+
+int parent_is_null(struct expression *expr)
+{
+	struct symbol *sym;
+	char *var;
+	int ret = 0;
+
+	expr = strip_expr(expr);
+	var = expr_to_var_sym(expr, &sym);
+	if (!var || !sym)
+		goto free;
+	ret = parent_is_null_var_sym(var, sym);
+free:
+	free_string(var);
+	return ret;
+}
+
+static int param_used_callback(void *found, int argc, char **argv, char **azColName)
+{
+	*(int *)found = 1;
+	return 0;
+}
+
+static int filter_unused_kzalloc_info(struct expression *call, int param, char *printed_name, struct sm_state *sm)
+{
+	sval_t sval;
+	int found = 0;
+
+	/* for function pointers assume everything is used */
+	if (call->fn->type != EXPR_SYMBOL)
+		return 0;
+
+	/*
+	 * This is to handle __builtin_mul_overflow().  In an ideal world we
+	 * would only need this for invalid code.
+	 *
+	 */
+	if (!call->fn->symbol)
+		return 0;
+
+	/*
+	 * kzalloc() information is treated as special because so there is just
+	 * a lot of stuff initialized to zero and it makes building the database
+	 * take hours and hours.
+	 *
+	 * In theory, we should just remove this line and not pass any unused
+	 * information, but I'm not sure enough that this code works so I want
+	 * to hold off on that for now.
+	 */
+	if (!estate_get_single_value(sm->state, &sval) || sval.value != 0)
+		return 0;
+
+	run_sql(&param_used_callback, &found,
+		"select * from return_implies where %s and type = %d and parameter = %d and key = '%s';",
+		get_static_filter(call->fn->symbol), PARAM_USED, param, printed_name);
+	if (found)
+		return 0;
+
+	/* If the database is not built yet, then assume everything is used */
+	run_sql(&param_used_callback, &found,
+		"select * from return_implies where %s and type = %d;",
+		get_static_filter(call->fn->symbol), PARAM_USED);
+	if (!found)
+		return 0;
+
+	return 1;
+}
+
+struct range_list *intersect_with_real_abs_var_sym(const char *name, struct symbol *sym, struct range_list *start)
+{
+	struct smatch_state *state;
+
+	/*
+	 * Here is the difference between implied value and real absolute, say
+	 * you have:
+	 *
+	 *	int a = (u8)x;
+	 *
+	 * Then you know that a is 0-255.  That's real absolute.  But you don't
+	 * know for sure that it actually goes up to 255.  So it's not implied.
+	 * Implied indicates a degree of certainty.
+	 *
+	 * But then say you cap "a" at 8.  That means you know it goes up to
+	 * 8.  So now the implied value is s32min-8.  But you can combine it
+	 * with the real absolute to say that actually it's 0-8.
+	 *
+	 * We are combining it here.  But now that I think about it, this is
+	 * probably not the ideal place to combine it because it should proably
+	 * be done earlier.  Oh well, this is an improvement on what was there
+	 * before so I'm going to commit this code.
+	 *
+	 */
+
+	state = get_real_absolute_state_var_sym(name, sym);
+	if (!state || !estate_rl(state))
+		return start;
+
+	return rl_intersection(estate_rl(state), start);
+}
+
+struct range_list *intersect_with_real_abs_expr(struct expression *expr, struct range_list *start)
+{
+	struct smatch_state *state;
+	struct range_list *abs_rl;
+
+	state = get_real_absolute_state(expr);
+	if (!state || !estate_rl(state))
+		return start;
+
+	abs_rl = cast_rl(rl_type(start), estate_rl(state));
+	return rl_intersection(abs_rl, start);
+}
+
+static void struct_member_callback(struct expression *call, int param, char *printed_name, struct sm_state *sm)
+{
+	struct range_list *rl;
+
+	if (estate_is_whole(sm->state))
+		return;
+	if (filter_unused_kzalloc_info(call, param, printed_name, sm))
+		return;
+	rl = estate_rl(sm->state);
+	rl = intersect_with_real_abs_var_sym(sm->name, sm->sym, rl);
+	sql_insert_caller_info(call, PARAM_VALUE, param, printed_name, show_rl(rl));
+	if (estate_has_fuzzy_max(sm->state))
+		sql_insert_caller_info(call, FUZZY_MAX, param, printed_name,
+				       sval_to_str(estate_get_fuzzy_max(sm->state)));
+}
+
+static void returned_struct_members(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct symbol *returned_sym;
+	struct sm_state *sm;
+	const char *param_name;
+	char *compare_str;
+	char buf[256];
+
+	returned_sym = expr_to_sym(expr);
+	if (!returned_sym)
+		return;
+
+	FOR_EACH_MY_SM(my_id, __get_cur_stree(), sm) {
+		if (!estate_rl(sm->state))
+			continue;
+		if (returned_sym != sm->sym)
+			continue;
+
+		param_name = get_param_name(sm);
+		if (!param_name)
+			continue;
+		if (strcmp(param_name, "$") == 0)
+			continue;
+		compare_str = name_sym_to_param_comparison(sm->name, sm->sym);
+		if (!compare_str && estate_is_whole(sm->state))
+			continue;
+		snprintf(buf, sizeof(buf), "%s%s", sm->state->name, compare_str ?: "");
+
+		sql_insert_return_states(return_id, return_ranges, PARAM_VALUE,
+					 -1, param_name, buf);
+	} END_FOR_EACH_SM(sm);
+}
+
+static void db_limited_before(void)
+{
+	unmatched_stree = clone_stree(__get_cur_stree());
+}
+
+static void db_limited_after(void)
+{
+	free_stree(&unmatched_stree);
+}
+
+static int rl_fits_in_type(struct range_list *rl, struct symbol *type)
+{
+	if (type_bits(rl_type(rl)) <= type_bits(type))
+		return 1;
+	if (sval_cmp(rl_max(rl), sval_type_max(type)) > 0)
+		return 0;
+	if (sval_is_negative(rl_min(rl)) &&
+	    sval_cmp(rl_min(rl), sval_type_min(type)) < 0)
+		return 0;
+	return 1;
+}
+
+static int basically_the_same(struct range_list *orig, struct range_list *new)
+{
+	if (rl_equiv(orig, new))
+		return 1;
+
+	/*
+	 * The whole range is essentially the same as 0,4096-27777777777 so
+	 * don't overwrite the implications just to store that.
+	 *
+	 */
+	if (rl_type(orig)->type == SYM_PTR &&
+	    is_whole_rl(orig) &&
+	    rl_min(new).value == 0 &&
+	    rl_max(new).value == valid_ptr_max)
+		return 1;
+	return 0;
+}
+
+static void db_param_limit_binops(struct expression *arg, char *key, struct range_list *rl)
+{
+	struct range_list *left_rl;
+	sval_t zero = {	.type = rl_type(rl), };
+	sval_t sval;
+
+	if (arg->op != '*')
+		return;
+	if (!get_implied_value(arg->right, &sval))
+		return;
+	if (can_integer_overflow(get_type(arg), arg))
+		return;
+
+	left_rl = rl_binop(rl, '/', alloc_rl(sval, sval));
+	if (!rl_has_sval(rl, zero))
+		left_rl = remove_range(left_rl, zero, zero);
+
+	set_extra_expr_nomod(arg->left, alloc_estate_rl(left_rl));
+}
+
+static void db_param_limit_filter(struct expression *expr, int param, char *key, char *value, enum info_type op)
+{
+	struct expression *arg;
+	char *name;
+	struct symbol *sym;
+	struct var_sym_list *vsl = NULL;
+	struct sm_state *sm;
+	struct symbol *compare_type, *var_type;
+	struct range_list *rl;
+	struct range_list *limit;
+	struct range_list *new;
+	char *tmp_name;
+	struct symbol *tmp_sym;
+
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+	if (expr->type != EXPR_CALL)
+		return;
+
+	arg = get_argument_from_call_expr(expr->args, param);
+	if (!arg)
+		return;
+
+	name = get_chunk_from_key(arg, key, &sym, &vsl);
+	if (!name)
+		return;
+	if (op != PARAM_LIMIT && !sym)
+		goto free;
+
+	if (strcmp(key, "$") == 0)
+		compare_type = get_arg_type(expr->fn, param);
+	else
+		compare_type = get_member_type_from_key(arg, key);
+
+	sm = get_sm_state(SMATCH_EXTRA, name, sym);
+	if (sm)
+		rl = estate_rl(sm->state);
+	else
+		rl = alloc_whole_rl(compare_type);
+
+	if (op == PARAM_LIMIT && !rl_fits_in_type(rl, compare_type))
+		goto free;
+
+	call_results_to_rl(expr, compare_type, value, &limit);
+	new = rl_intersection(rl, limit);
+
+	var_type = get_member_type_from_key(arg, key);
+	new = cast_rl(var_type, new);
+
+	/* We want to preserve the implications here */
+	if (sm && basically_the_same(estate_rl(sm->state), new))
+		goto free;
+	tmp_name = map_long_to_short_name_sym(name, sym, &tmp_sym);
+	if (tmp_name && tmp_sym) {
+		free_string(name);
+		name = tmp_name;
+		sym = tmp_sym;
+	}
+
+	if (op == PARAM_LIMIT)
+		set_extra_nomod_vsl(name, sym, vsl, NULL, alloc_estate_rl(new));
+	else
+		set_extra_mod(name, sym, NULL, alloc_estate_rl(new));
+
+	if (op == PARAM_LIMIT && arg->type == EXPR_BINOP)
+		db_param_limit_binops(arg, key, new);
+free:
+	free_string(name);
+}
+
+static void db_param_limit(struct expression *expr, int param, char *key, char *value)
+{
+	db_param_limit_filter(expr, param, key, value, PARAM_LIMIT);
+}
+
+static void db_param_filter(struct expression *expr, int param, char *key, char *value)
+{
+	db_param_limit_filter(expr, param, key, value, PARAM_FILTER);
+}
+
+static void db_param_add_set(struct expression *expr, int param, char *key, char *value, enum info_type op)
+{
+	struct expression *arg;
+	char *name, *tmp_name;
+	struct symbol *sym, *tmp_sym;
+	struct symbol *param_type, *arg_type;
+	struct smatch_state *state;
+	struct range_list *new = NULL;
+	struct range_list *added = NULL;
+
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+	if (expr->type != EXPR_CALL)
+		return;
+
+	arg = get_argument_from_call_expr(expr->args, param);
+	if (!arg)
+		return;
+
+	arg_type = get_arg_type_from_key(expr->fn, param, arg, key);
+	param_type = get_member_type_from_key(arg, key);
+	name = get_variable_from_key(arg, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	state = get_state(SMATCH_EXTRA, name, sym);
+	if (state)
+		new = estate_rl(state);
+
+	call_results_to_rl(expr, arg_type, value, &added);
+	added = cast_rl(param_type, added);
+	if (op == PARAM_SET)
+		new = added;
+	else
+		new = rl_union(new, added);
+
+	tmp_name = map_long_to_short_name_sym_nostack(name, sym, &tmp_sym);
+	if (tmp_name && tmp_sym) {
+		free_string(name);
+		name = tmp_name;
+		sym = tmp_sym;
+	}
+	set_extra_mod(name, sym, NULL, alloc_estate_rl(new));
+free:
+	free_string(name);
+}
+
+static void db_param_add(struct expression *expr, int param, char *key, char *value)
+{
+	in_param_set = true;
+	db_param_add_set(expr, param, key, value, PARAM_ADD);
+	in_param_set = false;
+}
+
+static void db_param_set(struct expression *expr, int param, char *key, char *value)
+{
+	in_param_set = true;
+	db_param_add_set(expr, param, key, value, PARAM_SET);
+	in_param_set = false;
+}
+
+static void db_param_value(struct expression *expr, int param, char *key, char *value)
+{
+	struct expression *call;
+	char *name;
+	struct symbol *sym;
+	struct symbol *type;
+	struct range_list *rl = NULL;
+
+	if (param != -1)
+		return;
+
+	call = expr;
+	while (call->type == EXPR_ASSIGNMENT)
+		call = strip_expr(call->right);
+	if (call->type != EXPR_CALL)
+		return;
+
+	type = get_member_type_from_key(expr->left, key);
+	name = get_variable_from_key(expr->left, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	call_results_to_rl(call, type, value, &rl);
+
+	set_extra_mod(name, sym, NULL, alloc_estate_rl(rl));
+free:
+	free_string(name);
+}
+
+static void match_call_info(struct expression *expr)
+{
+	struct smatch_state *state;
+	struct range_list *rl = NULL;
+	struct expression *arg;
+	struct symbol *type;
+	int i = 0;
+
+	FOR_EACH_PTR(expr->args, arg) {
+		type = get_arg_type(expr->fn, i);
+
+		get_absolute_rl(arg, &rl);
+		rl = cast_rl(type, rl);
+
+		if (!is_whole_rl(rl)) {
+			rl = intersect_with_real_abs_expr(arg, rl);
+			sql_insert_caller_info(expr, PARAM_VALUE, i, "$", show_rl(rl));
+		}
+		state = get_state_expr(SMATCH_EXTRA, arg);
+		if (estate_has_fuzzy_max(state)) {
+			sql_insert_caller_info(expr, FUZZY_MAX, i, "$",
+					       sval_to_str(estate_get_fuzzy_max(state)));
+		}
+		i++;
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void set_param_value(const char *name, struct symbol *sym, char *key, char *value)
+{
+	struct range_list *rl = NULL;
+	struct smatch_state *state;
+	struct symbol *type;
+	char fullname[256];
+	sval_t dummy;
+
+	if (strcmp(key, "*$") == 0)
+		snprintf(fullname, sizeof(fullname), "*%s", name);
+	else if (strncmp(key, "$", 1) == 0)
+		snprintf(fullname, 256, "%s%s", name, key + 1);
+	else
+		return;
+
+	type = get_member_type_from_key(symbol_expression(sym), key);
+	str_to_rl(type, value, &rl);
+	state = alloc_estate_rl(rl);
+	if (estate_get_single_value(state, &dummy))
+		estate_set_hard_max(state);
+	set_state(SMATCH_EXTRA, fullname, sym, state);
+}
+
+static void set_param_hard_max(const char *name, struct symbol *sym, char *key, char *value)
+{
+	struct range_list *rl = NULL;
+	struct smatch_state *state;
+	struct symbol *type;
+	char fullname[256];
+	sval_t max;
+
+	if (strcmp(key, "*$") == 0)
+		snprintf(fullname, sizeof(fullname), "*%s", name);
+	else if (strncmp(key, "$", 1) == 0)
+		snprintf(fullname, 256, "%s%s", name, key + 1);
+	else
+		return;
+
+	state = get_state(SMATCH_EXTRA, fullname, sym);
+	if (!state)
+		return;
+	type = get_member_type_from_key(symbol_expression(sym), key);
+	str_to_rl(type, value, &rl);
+	if (!rl_to_sval(rl, &max))
+		return;
+	estate_set_fuzzy_max(state, max);
+}
+
+struct sm_state *get_extra_sm_state(struct expression *expr)
+{
+	char *name;
+	struct symbol *sym;
+	struct sm_state *ret = NULL;
+
+	name = expr_to_known_chunk_sym(expr, &sym);
+	if (!name)
+		goto free;
+
+	ret = get_sm_state(SMATCH_EXTRA, name, sym);
+free:
+	free_string(name);
+	return ret;
+}
+
+struct smatch_state *get_extra_state(struct expression *expr)
+{
+	struct sm_state *sm;
+
+	sm = get_extra_sm_state(expr);
+	if (!sm)
+		return NULL;
+	return sm->state;
+}
+
+void register_smatch_extra(int id)
+{
+	my_id = id;
+
+	add_merge_hook(my_id, &merge_estates);
+	add_unmatched_state_hook(my_id, &unmatched_state);
+	select_caller_info_hook(set_param_value, PARAM_VALUE);
+	select_caller_info_hook(set_param_hard_max, FUZZY_MAX);
+	select_return_states_before(&db_limited_before);
+	select_return_states_hook(PARAM_LIMIT, &db_param_limit);
+	select_return_states_hook(PARAM_FILTER, &db_param_filter);
+	select_return_states_hook(PARAM_ADD, &db_param_add);
+	select_return_states_hook(PARAM_SET, &db_param_set);
+	select_return_states_hook(PARAM_VALUE, &db_param_value);
+	select_return_states_after(&db_limited_after);
+}
+
+static void match_link_modify(struct sm_state *sm, struct expression *mod_expr)
+{
+	struct var_sym_list *links;
+	struct var_sym *tmp;
+	struct smatch_state *state;
+
+	links = sm->state->data;
+
+	FOR_EACH_PTR(links, tmp) {
+		if (sm->sym == tmp->sym &&
+		    strcmp(sm->name, tmp->var) == 0)
+			continue;
+		state = get_state(SMATCH_EXTRA, tmp->var, tmp->sym);
+		if (!state)
+			continue;
+		set_state(SMATCH_EXTRA, tmp->var, tmp->sym, alloc_estate_whole(estate_type(state)));
+	} END_FOR_EACH_PTR(tmp);
+	set_state(link_id, sm->name, sm->sym, &undefined);
+}
+
+void register_smatch_extra_links(int id)
+{
+	link_id = id;
+}
+
+void register_smatch_extra_late(int id)
+{
+	add_merge_hook(link_id, &merge_link_states);
+	add_modification_hook(link_id, &match_link_modify);
+	add_hook(&match_dereferences, DEREF_HOOK);
+	add_hook(&match_pointer_as_array, OP_HOOK);
+	select_return_implies_hook(DEREFERENCE, &set_param_dereferenced);
+	add_hook(&match_function_call, FUNCTION_CALL_HOOK);
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+	add_hook(&match_assign, GLOBAL_ASSIGNMENT_HOOK);
+	add_hook(&unop_expr, OP_HOOK);
+	add_hook(&asm_expr, ASM_HOOK);
+
+	add_hook(&match_call_info, FUNCTION_CALL_HOOK);
+	add_member_info_callback(my_id, struct_member_callback);
+	add_split_return_callback(&returned_struct_members);
+
+//	add_hook(&assume_indexes_are_valid, OP_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:25 2018
+++ new/usr/src/tools/smatch/src/smatch_extra.h	Fri Dec 21 15:00:25 2018
@@ -0,0 +1,226 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+DECLARE_PTR_LIST(range_list, struct data_range);
+DECLARE_PTR_LIST(range_list_stack, struct range_list);
+
+struct relation {
+	char *name;
+	struct symbol *sym;
+};
+
+DECLARE_PTR_LIST(related_list, struct relation);
+
+struct data_info {
+	struct related_list *related;
+	struct range_list *value_ranges;
+	sval_t fuzzy_max;
+	unsigned int hard_max:1;
+};
+DECLARE_ALLOCATOR(data_info);
+
+extern struct string_list *__ignored_macros;
+
+/* these are implemented in smatch_ranges.c */
+struct range_list *rl_zero(void);
+struct range_list *rl_one(void);
+char *show_rl(struct range_list *list);
+int str_to_comparison_arg(const char *c, struct expression *call, int *comparison, struct expression **arg);
+void str_to_rl(struct symbol *type, char *value, struct range_list **rl);
+void call_results_to_rl(struct expression *call, struct symbol *type, char *value, struct range_list **rl);
+
+struct data_range *alloc_range(sval_t min, sval_t max);
+struct data_range *alloc_range_perm(sval_t min, sval_t max);
+
+struct range_list *alloc_rl(sval_t min, sval_t max);
+struct range_list *clone_rl(struct range_list *list);
+struct range_list *clone_rl_permanent(struct range_list *list);
+struct range_list *alloc_whole_rl(struct symbol *type);
+
+void add_range(struct range_list **list, sval_t min, sval_t max);
+struct range_list *remove_range(struct range_list *list, sval_t min, sval_t max);
+void tack_on(struct range_list **list, struct data_range *drange);
+
+int true_comparison_range(struct data_range *left, int comparison, struct data_range *right);
+int true_comparison_range_LR(int comparison, struct data_range *var, struct data_range *val, int left);
+int false_comparison_range_LR(int comparison, struct data_range *var, struct data_range *val, int left);
+
+int possibly_true(struct expression *left, int comparison, struct expression *right);
+int possibly_true_rl(struct range_list *left_ranges, int comparison, struct range_list *right_ranges);
+int possibly_true_rl_LR(int comparison, struct range_list *a, struct range_list *b, int left);
+
+int possibly_false(struct expression *left, int comparison, struct expression *right);
+int possibly_false_rl(struct range_list *left_ranges, int comparison, struct range_list *right_ranges);
+int possibly_false_rl_LR(int comparison, struct range_list *a, struct range_list *b, int left);
+
+int rl_has_sval(struct range_list *rl, sval_t sval);
+int ranges_equiv(struct data_range *one, struct data_range *two);
+
+int rl_equiv(struct range_list *one, struct range_list *two);
+int is_whole_rl(struct range_list *rl);
+int is_whole_rl_non_zero(struct range_list *rl);
+int estate_is_unknown(struct smatch_state *state);
+
+sval_t rl_min(struct range_list *rl);
+sval_t rl_max(struct range_list *rl);
+int rl_to_sval(struct range_list *rl, sval_t *sval);
+struct symbol *rl_type(struct range_list *rl);
+
+struct range_list *rl_invert(struct range_list *orig);
+struct range_list *rl_filter(struct range_list *rl, struct range_list *filter);
+struct range_list *rl_intersection(struct range_list *one, struct range_list *two);
+struct range_list *rl_union(struct range_list *one, struct range_list *two);
+struct range_list *rl_binop(struct range_list *left, int op, struct range_list *right);
+
+void push_rl(struct range_list_stack **rl_stack, struct range_list *rl);
+struct range_list *pop_rl(struct range_list_stack **rl_stack);
+struct range_list *top_rl(struct range_list_stack *rl_stack);
+void filter_top_rl(struct range_list_stack **rl_stack, struct range_list *filter);
+
+struct range_list *rl_truncate_cast(struct symbol *type, struct range_list *rl);
+struct range_list *cast_rl(struct symbol *type, struct range_list *rl);
+int get_implied_rl(struct expression *expr, struct range_list **rl);
+int get_absolute_rl(struct expression *expr, struct range_list **rl);
+int get_real_absolute_rl(struct expression *expr, struct range_list **rl);
+struct range_list *var_to_absolute_rl(struct expression *expr);
+int custom_get_absolute_rl(struct expression *expr,
+			   struct range_list *(*fn)(struct expression *expr),
+			   struct range_list **rl);
+int get_implied_rl_var_sym(const char *var, struct symbol *sym, struct range_list **rl);
+void split_comparison_rl(struct range_list *left_orig, int op, struct range_list *right_orig,
+		struct range_list **left_true_rl, struct range_list **left_false_rl,
+		struct range_list **right_true_rl, struct range_list **right_false_rl);
+
+void free_data_info_allocs(void);
+void free_all_rl(void);
+
+/* smatch_estate.c */
+
+struct smatch_state *alloc_estate_empty(void);
+struct smatch_state *alloc_estate_sval(sval_t sval);
+struct smatch_state *alloc_estate_range(sval_t min, sval_t max);
+struct smatch_state *alloc_estate_rl(struct range_list *rl);
+struct smatch_state *alloc_estate_whole(struct symbol *type);
+struct smatch_state *clone_estate(struct smatch_state *state);
+struct smatch_state *clone_estate_cast(struct symbol *type, struct smatch_state *state);
+
+struct smatch_state *merge_estates(struct smatch_state *s1, struct smatch_state *s2);
+
+int estates_equiv(struct smatch_state *one, struct smatch_state *two);
+int estate_is_whole(struct smatch_state *state);
+int estate_is_empty(struct smatch_state *state);
+
+struct range_list *estate_rl(struct smatch_state *state);
+struct related_list *estate_related(struct smatch_state *state);
+
+sval_t estate_min(struct smatch_state *state);
+sval_t estate_max(struct smatch_state *state);
+struct symbol *estate_type(struct smatch_state *state);
+
+int estate_has_fuzzy_max(struct smatch_state *state);
+sval_t estate_get_fuzzy_max(struct smatch_state *state);
+void estate_set_fuzzy_max(struct smatch_state *state, sval_t max);
+void estate_copy_fuzzy_max(struct smatch_state *new, struct smatch_state *old);
+void estate_clear_fuzzy_max(struct smatch_state *state);
+int estate_has_hard_max(struct smatch_state *state);
+void estate_set_hard_max(struct smatch_state *state);
+void estate_clear_hard_max(struct smatch_state *state);
+int estate_get_hard_max(struct smatch_state *state, sval_t *sval);
+
+int estate_get_single_value(struct smatch_state *state, sval_t *sval);
+struct smatch_state *get_implied_estate(struct expression *expr);
+
+struct smatch_state *estate_filter_sval(struct smatch_state *orig, sval_t filter);
+struct smatch_state *estate_filter_range(struct smatch_state *orig, sval_t filter_min, sval_t filter_max);
+struct data_info *clone_dinfo_perm(struct data_info *dinfo);
+struct smatch_state *clone_estate_perm(struct smatch_state *state);
+
+/* smatch_extra.c */
+bool is_impossible_variable(struct expression *expr);
+struct sm_state *get_extra_sm_state(struct expression *expr);
+struct smatch_state *get_extra_state(struct expression *expr);
+void call_extra_mod_hooks(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state);
+void set_extra_mod(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state);
+void set_extra_expr_mod(struct expression *expr, struct smatch_state *state);
+void set_extra_nomod(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state);
+void set_extra_nomod_vsl(const char *name, struct symbol *sym, struct var_sym_list *vsl, struct expression *expr, struct smatch_state *state);
+void set_extra_expr_nomod(struct expression *expr, struct smatch_state *state);
+void set_extra_mod_helper(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state);
+
+struct data_info *get_dinfo(struct smatch_state *state);
+
+void add_extra_mod_hook(void (*fn)(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state));
+void add_extra_nomod_hook(void (*fn)(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state));
+int implied_not_equal(struct expression *expr, long long val);
+int implied_not_equal_name_sym(char *name, struct symbol *sym, long long val);
+int parent_is_null_var_sym(const char *name, struct symbol *sym);
+int parent_is_null(struct expression *expr);
+int parent_is_free_var_sym_strict(const char *name, struct symbol *sym);
+int parent_is_free_var_sym(const char *name, struct symbol *sym);
+int parent_is_free(struct expression *expr);
+
+struct sm_state *__extra_handle_canonical_loops(struct statement *loop, struct stree **stree);
+int __iterator_unchanged(struct sm_state *sm);
+void __extra_pre_loop_hook_after(struct sm_state *sm,
+				struct statement *iterator,
+				struct expression *condition);
+
+/* smatch_equiv.c */
+void set_equiv(struct expression *left, struct expression *right);
+void set_related(struct smatch_state *estate, struct related_list *rlist);
+struct related_list *get_shared_relations(struct related_list *one,
+					      struct related_list *two);
+struct related_list *clone_related_list(struct related_list *related);
+void remove_from_equiv(const char *name, struct symbol *sym);
+void remove_from_equiv_expr(struct expression *expr);
+void set_equiv_state_expr(int id, struct expression *expr, struct smatch_state *state);
+
+/* smatch_function_hooks.c */
+void function_comparison(struct expression *left, int comparison, struct expression *right);
+
+/* smatch_expressions.c */
+struct expression *zero_expr();
+struct expression *value_expr(long long val);
+struct expression *member_expression(struct expression *deref, int op, struct ident *member);
+struct expression *preop_expression(struct expression *expr, int op);
+struct expression *deref_expression(struct expression *expr);
+struct expression *assign_expression(struct expression *left, int op, struct expression *right);
+struct expression *binop_expression(struct expression *left, int op, struct expression *right);
+struct expression *array_element_expression(struct expression *array, struct expression *offset);
+struct expression *symbol_expression(struct symbol *sym);
+struct expression *string_expression(char *str);
+struct expression *compare_expression(struct expression *left, int op, struct expression *right);
+struct expression *unknown_value_expression(struct expression *expr);
+int is_fake_call(struct expression *expr);
+struct expression *gen_expression_from_key(struct expression *arg, const char *key);
+void free_tmp_expressions(void);
+void expr_set_parent_expr(struct expression *expr, struct expression *parent);
+void expr_set_parent_stmt(struct expression *expr, struct statement *parent);
+struct expression *expr_get_parent_expr(struct expression *expr);
+struct statement *expr_get_parent_stmt(struct expression *expr);
+
+/* smatch_param_limit.c */
+struct smatch_state *get_orig_estate(const char *name, struct symbol *sym);
+
+/* smatch_real_absolute.c */
+struct smatch_state *get_real_absolute_state(struct expression *expr);
+struct smatch_state *get_real_absolute_state_var_sym(const char *name, struct symbol *sym);
+
+/* smatch_imaginary_absolute.c */
+void __save_imaginary_state(struct expression *expr, struct range_list *true_rl, struct range_list *false_rl);
+int get_imaginary_absolute(struct expression *expr, struct range_list **rl);
+
--- /dev/null	Fri Dec 21 15:00:25 2018
+++ new/usr/src/tools/smatch/src/smatch_files.c	Fri Dec 21 15:00:25 2018
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include "parse.h"
+#include "smatch.h"
+
+int open_data_file(const char *filename)
+{
+	char buf[256];
+	int fd;
+
+	fd = open(filename, O_RDONLY);
+	if (fd >= 0)
+		return fd;
+	if (!data_dir)
+		return -1;
+	snprintf(buf, 256, "%s/%s", data_dir, filename);
+	return open(buf, O_RDONLY);
+}
+
+int open_schema_file(const char *schema)
+{
+	char buf[256];
+	int fd;
+
+	fd = open_data_file(schema);
+	if (fd >= 0)
+		return fd;
+	snprintf(buf, 256, "%s/smatch_data/%s", bin_dir, schema);
+	return open(buf, O_RDONLY);
+}
+
+struct token *get_tokens_file(const char *filename)
+{
+	int fd;
+	struct token *token;
+
+	if (option_no_data)
+		return NULL;
+	fd = open_data_file(filename);
+	if (fd < 0)
+		return NULL;
+	token = tokenize(filename, fd, NULL, NULL);
+	close(fd);
+	return token;
+}
--- /dev/null	Fri Dec 21 15:00:26 2018
+++ new/usr/src/tools/smatch/src/smatch_flow.c	Fri Dec 21 15:00:26 2018
@@ -0,0 +1,1947 @@
+/*
+ * Copyright (C) 2006,2008 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#define _GNU_SOURCE 1
+#include <unistd.h>
+#include <stdio.h>
+#include "token.h"
+#include "scope.h"
+#include "smatch.h"
+#include "smatch_expression_stacks.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+int __in_fake_assign;
+int __in_fake_struct_assign;
+int in_fake_env;
+int final_pass;
+int __inline_call;
+struct expression  *__inline_fn;
+
+static int __smatch_lineno = 0;
+
+static char *base_file;
+static const char *filename;
+static char *pathname;
+static char *full_filename;
+static char *full_base_file;
+static char *cur_func;
+static unsigned int loop_count;
+static int last_goto_statement_handled;
+int __expr_stmt_count;
+int __in_function_def;
+static struct expression_list *switch_expr_stack = NULL;
+static struct expression_list *post_op_stack = NULL;
+
+static struct ptr_list *backup;
+
+struct expression_list *big_expression_stack;
+struct statement_list *big_statement_stack;
+struct statement *__prev_stmt;
+struct statement *__cur_stmt;
+struct statement *__next_stmt;
+int __in_pre_condition = 0;
+int __bail_on_rest_of_function = 0;
+static struct timeval fn_start_time;
+static struct timeval outer_fn_start_time;
+char *get_function(void) { return cur_func; }
+int get_lineno(void) { return __smatch_lineno; }
+int inside_loop(void) { return !!loop_count; }
+int definitely_inside_loop(void) { return !!(loop_count & ~0x08000000); }
+struct expression *get_switch_expr(void) { return top_expression(switch_expr_stack); }
+int in_expression_statement(void) { return !!__expr_stmt_count; }
+
+static void split_symlist(struct symbol_list *sym_list);
+static void split_declaration(struct symbol_list *sym_list);
+static void split_expr_list(struct expression_list *expr_list, struct expression *parent);
+static void add_inline_function(struct symbol *sym);
+static void parse_inline(struct expression *expr);
+
+int option_assume_loops = 0;
+int option_two_passes = 0;
+struct symbol *cur_func_sym = NULL;
+struct stree *global_states;
+
+long long valid_ptr_min = 4096;
+long long valid_ptr_max = 2117777777;
+sval_t valid_ptr_min_sval = {
+	.type = &ptr_ctype,
+	{.value = 4096},
+};
+sval_t valid_ptr_max_sval = {
+	.type = &ptr_ctype,
+	{.value = LONG_MAX - 100000},
+};
+struct range_list *valid_ptr_rl;
+
+static void set_valid_ptr_max(void)
+{
+	if (type_bits(&ptr_ctype) == 32)
+		valid_ptr_max = 2117777777;
+	else if (type_bits(&ptr_ctype) == 64)
+		valid_ptr_max = 2117777777777777777LL;
+
+	valid_ptr_max_sval.value = valid_ptr_max;
+}
+
+static void alloc_valid_ptr_rl(void)
+{
+	valid_ptr_rl = alloc_rl(valid_ptr_min_sval, valid_ptr_max_sval);
+	valid_ptr_rl = cast_rl(&ptr_ctype, valid_ptr_rl);
+	valid_ptr_rl = clone_rl_permanent(valid_ptr_rl);
+}
+
+int outside_of_function(void)
+{
+	return cur_func_sym == NULL;
+}
+
+const char *get_filename(void)
+{
+	if (option_info && option_full_path)
+		return full_base_file;
+	if (option_info)
+		return base_file;
+	if (option_full_path)
+		return full_filename;
+	return filename;
+}
+
+const char *get_base_file(void)
+{
+	if (option_full_path)
+		return full_base_file;
+	return base_file;
+}
+
+static void set_position(struct position pos)
+{
+	int len;
+	static int prev_stream = -1;
+
+	if (in_fake_env)
+		return;
+
+	if (pos.stream == 0 && pos.line == 0)
+		return;
+
+	__smatch_lineno = pos.line;
+
+	if (pos.stream == prev_stream)
+		return;
+
+	filename = stream_name(pos.stream);
+
+	free(full_filename);
+	pathname = getcwd(NULL, 0);
+	if (pathname) {
+		len = strlen(pathname) + 1 + strlen(filename) + 1;
+		full_filename = malloc(len);
+		snprintf(full_filename, len, "%s/%s", pathname, filename);
+	} else {
+		full_filename = alloc_string(filename);
+	}
+	free(pathname);
+}
+
+int is_assigned_call(struct expression *expr)
+{
+	struct expression *parent = expr_get_parent_expr(expr);
+
+	if (parent &&
+	    parent->type == EXPR_ASSIGNMENT &&
+	    parent->op == '=' &&
+	    strip_expr(parent->right) == expr)
+		return 1;
+
+	return 0;
+}
+
+static int is_inline_func(struct expression *expr)
+{
+	if (expr->type != EXPR_SYMBOL || !expr->symbol)
+		return 0;
+	if (expr->symbol->ctype.modifiers & MOD_INLINE)
+		return 1;
+	return 0;
+}
+
+static int is_noreturn_func(struct expression *expr)
+{
+	if (expr->type != EXPR_SYMBOL || !expr->symbol)
+		return 0;
+	if (expr->symbol->ctype.modifiers & MOD_NORETURN)
+		return 1;
+	return 0;
+}
+
+static int inline_budget = 20;
+
+int inlinable(struct expression *expr)
+{
+	struct symbol *sym;
+	struct statement *last_stmt = NULL;
+
+	if (__inline_fn)  /* don't nest */
+		return 0;
+
+	if (expr->type != EXPR_SYMBOL || !expr->symbol)
+		return 0;
+	if (is_no_inline_function(expr->symbol->ident->name))
+		return 0;
+	sym = get_base_type(expr->symbol);
+	if (sym->stmt && sym->stmt->type == STMT_COMPOUND) {
+		if (ptr_list_size((struct ptr_list *)sym->stmt->stmts) > 10)
+			return 0;
+		if (sym->stmt->type != STMT_COMPOUND)
+			return 0;
+		last_stmt = last_ptr_list((struct ptr_list *)sym->stmt->stmts);
+	}
+	if (sym->inline_stmt && sym->inline_stmt->type == STMT_COMPOUND) {
+		if (ptr_list_size((struct ptr_list *)sym->inline_stmt->stmts) > 10)
+			return 0;
+		if (sym->inline_stmt->type != STMT_COMPOUND)
+			return 0;
+		last_stmt = last_ptr_list((struct ptr_list *)sym->inline_stmt->stmts);
+	}
+
+	if (!last_stmt)
+		return 0;
+
+	/* the magic numbers in this function are pulled out of my bum. */
+	if (last_stmt->pos.line > sym->pos.line + inline_budget)
+		return 0;
+
+	return 1;
+}
+
+void __process_post_op_stack(void)
+{
+	struct expression *expr;
+
+	FOR_EACH_PTR(post_op_stack, expr) {
+		__pass_to_client(expr, OP_HOOK);
+	} END_FOR_EACH_PTR(expr);
+
+	__free_ptr_list((struct ptr_list **)&post_op_stack);
+}
+
+static int handle_comma_assigns(struct expression *expr)
+{
+	struct expression *right;
+	struct expression *assign;
+
+	right = strip_expr(expr->right);
+	if (right->type != EXPR_COMMA)
+		return 0;
+
+	__split_expr(right->left);
+	__process_post_op_stack();
+
+	assign = assign_expression(expr->left, '=', right->right);
+	__split_expr(assign);
+
+	return 1;
+}
+
+/* This is to handle *p++ = foo; assignments */
+static int handle_postop_assigns(struct expression *expr)
+{
+	struct expression *left, *fake_left;
+	struct expression *assign;
+
+	left = strip_expr(expr->left);
+	if (left->type != EXPR_PREOP || left->op != '*')
+		return 0;
+	left = strip_expr(left->unop);
+	if (left->type != EXPR_POSTOP)
+		return 0;
+
+	fake_left = deref_expression(strip_expr(left->unop));
+	assign = assign_expression(fake_left, '=', expr->right);
+
+	__split_expr(assign);
+	__split_expr(expr->left);
+
+	return 1;
+}
+
+static int prev_expression_is_getting_address(struct expression *expr)
+{
+	struct expression *parent;
+
+	do {
+		parent = expr_get_parent_expr(expr);
+
+		if (!parent)
+			return 0;
+		if (parent->type == EXPR_PREOP && parent->op == '&')
+			return 1;
+		if (parent->type == EXPR_PREOP && parent->op == '(')
+			goto next;
+		if (parent->type == EXPR_DEREF && parent->op == '.')
+			goto next;
+
+		return 0;
+next:
+		expr = parent;
+	} while (1);
+}
+
+static void handle_builtin_overflow_func(struct expression *expr)
+{
+	struct expression *a, *b, *res, *assign;
+	int op;
+
+	if (sym_name_is("__builtin_add_overflow", expr->fn))
+		op = '+';
+	else if (sym_name_is("__builtin_sub_overflow", expr->fn))
+		op = '-';
+	else if (sym_name_is("__builtin_mul_overflow", expr->fn))
+		op = '*';
+	else
+		return;
+
+	a = get_argument_from_call_expr(expr->args, 0);
+	b = get_argument_from_call_expr(expr->args, 1);
+	res = get_argument_from_call_expr(expr->args, 2);
+
+	assign = assign_expression(deref_expression(res), '=', binop_expression(a, op, b));
+	__split_expr(assign);
+}
+
+static int handle__builtin_choose_expr(struct expression *expr)
+{
+	struct expression *const_expr, *expr1, *expr2;
+	sval_t sval;
+
+	if (!sym_name_is("__builtin_choose_expr", expr->fn))
+		return 0;
+
+	const_expr = get_argument_from_call_expr(expr->args, 0);
+	expr1 = get_argument_from_call_expr(expr->args, 1);
+	expr2 = get_argument_from_call_expr(expr->args, 2);
+
+	if (!get_value(const_expr, &sval) || !expr1 || !expr2)
+		return 0;
+	if (sval.value)
+		__split_expr(expr1);
+	else
+		__split_expr(expr2);
+	return 1;
+}
+
+static int handle__builtin_choose_expr_assigns(struct expression *expr)
+{
+	struct expression *const_expr, *right, *expr1, *expr2, *fake;
+	sval_t sval;
+
+	right = strip_expr(expr->right);
+	if (right->type != EXPR_CALL)
+		return 0;
+	if (!sym_name_is("__builtin_choose_expr", right->fn))
+		return 0;
+
+	const_expr = get_argument_from_call_expr(right->args, 0);
+	expr1 = get_argument_from_call_expr(right->args, 1);
+	expr2 = get_argument_from_call_expr(right->args, 2);
+
+	if (!get_value(const_expr, &sval) || !expr1 || !expr2)
+		return 0;
+
+	fake = assign_expression(expr->left, '=', sval.value ? expr1 : expr2);
+	__split_expr(fake);
+	return 1;
+}
+
+void __split_expr(struct expression *expr)
+{
+	if (!expr)
+		return;
+
+	// sm_msg(" Debug expr_type %d %s", expr->type, show_special(expr->op));
+
+	if (__in_fake_assign && expr->type != EXPR_ASSIGNMENT)
+		return;
+	if (__in_fake_assign >= 4)  /* don't allow too much nesting */
+		return;
+
+	push_expression(&big_expression_stack, expr);
+	set_position(expr->pos);
+	__pass_to_client(expr, EXPR_HOOK);
+
+	switch (expr->type) {
+	case EXPR_PREOP:
+		expr_set_parent_expr(expr->unop, expr);
+
+		if (expr->op == '*' &&
+		    !prev_expression_is_getting_address(expr))
+			__pass_to_client(expr, DEREF_HOOK);
+		__split_expr(expr->unop);
+		__pass_to_client(expr, OP_HOOK);
+		break;
+	case EXPR_POSTOP:
+		expr_set_parent_expr(expr->unop, expr);
+
+		__split_expr(expr->unop);
+		push_expression(&post_op_stack, expr);
+		break;
+	case EXPR_STATEMENT:
+		__expr_stmt_count++;
+		if (expr->statement && !expr->statement) {
+			stmt_set_parent_stmt(expr->statement,
+					last_ptr_list((struct ptr_list *)big_statement_stack));
+		}
+		__split_stmt(expr->statement);
+		__expr_stmt_count--;
+		break;
+	case EXPR_LOGICAL:
+	case EXPR_COMPARE:
+		expr_set_parent_expr(expr->left, expr);
+		expr_set_parent_expr(expr->right, expr);
+
+		__pass_to_client(expr, LOGIC_HOOK);
+		__handle_logic(expr);
+		break;
+	case EXPR_BINOP:
+		expr_set_parent_expr(expr->left, expr);
+		expr_set_parent_expr(expr->right, expr);
+
+		__pass_to_client(expr, BINOP_HOOK);
+	case EXPR_COMMA:
+		expr_set_parent_expr(expr->left, expr);
+		expr_set_parent_expr(expr->right, expr);
+
+		__split_expr(expr->left);
+		__process_post_op_stack();
+		__split_expr(expr->right);
+		break;
+	case EXPR_ASSIGNMENT: {
+		struct expression *right;
+
+		expr_set_parent_expr(expr->left, expr);
+		expr_set_parent_expr(expr->right, expr);
+
+		right = strip_expr(expr->right);
+		if (!right)
+			break;
+
+		__pass_to_client(expr, RAW_ASSIGNMENT_HOOK);
+
+		/* foo = !bar() */
+		if (__handle_condition_assigns(expr))
+			break;
+		/* foo = (x < 5 ? foo : 5); */
+		if (__handle_select_assigns(expr))
+			break;
+		/* foo = ({frob(); frob(); frob(); 1;}) */
+		if (__handle_expr_statement_assigns(expr))
+			break;
+		/* foo = (3, 4); */
+		if (handle_comma_assigns(expr))
+			break;
+		if (handle_postop_assigns(expr))
+			break;
+		if (handle__builtin_choose_expr_assigns(expr))
+			break;
+
+		__split_expr(expr->right);
+		if (outside_of_function())
+			__pass_to_client(expr, GLOBAL_ASSIGNMENT_HOOK);
+		else
+			__pass_to_client(expr, ASSIGNMENT_HOOK);
+
+		__fake_struct_member_assignments(expr);
+
+		if (expr->op == '=' && right->type == EXPR_CALL)
+			__pass_to_client(expr, CALL_ASSIGNMENT_HOOK);
+
+		if (get_macro_name(right->pos) &&
+		    get_macro_name(expr->pos) != get_macro_name(right->pos))
+			__pass_to_client(expr, MACRO_ASSIGNMENT_HOOK);
+
+		__pass_to_client(expr, ASSIGNMENT_HOOK_AFTER);
+
+		__split_expr(expr->left);
+		break;
+	}
+	case EXPR_DEREF:
+		expr_set_parent_expr(expr->deref, expr);
+
+		__pass_to_client(expr, DEREF_HOOK);
+		__split_expr(expr->deref);
+		break;
+	case EXPR_SLICE:
+		expr_set_parent_expr(expr->base, expr);
+
+		__split_expr(expr->base);
+		break;
+	case EXPR_CAST:
+	case EXPR_FORCE_CAST:
+		expr_set_parent_expr(expr->cast_expression, expr);
+
+		__pass_to_client(expr, CAST_HOOK);
+		__split_expr(expr->cast_expression);
+		break;
+	case EXPR_SIZEOF:
+		if (expr->cast_expression)
+			__pass_to_client(strip_parens(expr->cast_expression),
+					 SIZEOF_HOOK);
+		break;
+	case EXPR_OFFSETOF:
+	case EXPR_ALIGNOF:
+		evaluate_expression(expr);
+		break;
+	case EXPR_CONDITIONAL:
+	case EXPR_SELECT:
+		expr_set_parent_expr(expr->conditional, expr);
+		expr_set_parent_expr(expr->cond_true, expr);
+		expr_set_parent_expr(expr->cond_false, expr);
+
+		if (known_condition_true(expr->conditional)) {
+			__split_expr(expr->cond_true);
+			break;
+		}
+		if (known_condition_false(expr->conditional)) {
+			__split_expr(expr->cond_false);
+			break;
+		}
+		__pass_to_client(expr, SELECT_HOOK);
+		__split_whole_condition(expr->conditional);
+		__split_expr(expr->cond_true);
+		__push_true_states();
+		__use_false_states();
+		__split_expr(expr->cond_false);
+		__merge_true_states();
+		break;
+	case EXPR_CALL:
+		expr_set_parent_expr(expr->fn, expr);
+
+		if (sym_name_is("__builtin_constant_p", expr->fn))
+			break;
+		if (handle__builtin_choose_expr(expr))
+			break;
+		split_expr_list(expr->args, expr);
+		__split_expr(expr->fn);
+		if (is_inline_func(expr->fn))
+			add_inline_function(expr->fn->symbol);
+		if (inlinable(expr->fn))
+			__inline_call = 1;
+		__process_post_op_stack();
+		__pass_to_client(expr, FUNCTION_CALL_HOOK_BEFORE);
+		__pass_to_client(expr, FUNCTION_CALL_HOOK);
+		__inline_call = 0;
+		if (inlinable(expr->fn)) {
+			parse_inline(expr);
+		}
+		__pass_to_client(expr, CALL_HOOK_AFTER_INLINE);
+		if (is_noreturn_func(expr->fn))
+			nullify_path();
+		handle_builtin_overflow_func(expr);
+		break;
+	case EXPR_INITIALIZER:
+		split_expr_list(expr->expr_list, expr);
+		break;
+	case EXPR_IDENTIFIER:
+		expr_set_parent_expr(expr->ident_expression, expr);
+		__split_expr(expr->ident_expression);
+		break;
+	case EXPR_INDEX:
+		expr_set_parent_expr(expr->idx_expression, expr);
+		__split_expr(expr->idx_expression);
+		break;
+	case EXPR_POS:
+		expr_set_parent_expr(expr->init_expr, expr);
+		__split_expr(expr->init_expr);
+		break;
+	case EXPR_SYMBOL:
+		__pass_to_client(expr, SYM_HOOK);
+		break;
+	case EXPR_STRING:
+		__pass_to_client(expr, STRING_HOOK);
+		break;
+	default:
+		break;
+	};
+	pop_expression(&big_expression_stack);
+}
+
+static int is_forever_loop(struct statement *stmt)
+{
+	struct expression *expr;
+	sval_t sval;
+
+	expr = strip_expr(stmt->iterator_pre_condition);
+	if (!expr)
+		expr = stmt->iterator_post_condition;
+	if (!expr) {
+		/* this is a for(;;) loop... */
+		return 1;
+	}
+
+	if (get_value(expr, &sval) && sval.value != 0)
+		return 1;
+
+	return 0;
+}
+
+static int loop_num;
+static char *get_loop_name(int num)
+{
+	char buf[256];
+
+	snprintf(buf, 255, "-loop%d", num);
+	buf[255] = '\0';
+	return alloc_sname(buf);
+}
+
+/*
+ * Pre Loops are while and for loops.
+ */
+static void handle_pre_loop(struct statement *stmt)
+{
+	int once_through; /* we go through the loop at least once */
+	struct sm_state *extra_sm = NULL;
+	int unchanged = 0;
+	char *loop_name;
+	struct stree *stree = NULL;
+	struct sm_state *sm = NULL;
+
+	loop_name = get_loop_name(loop_num);
+	loop_num++;
+
+	__split_stmt(stmt->iterator_pre_statement);
+	__prev_stmt = stmt->iterator_pre_statement;
+
+	once_through = implied_condition_true(stmt->iterator_pre_condition);
+
+	loop_count++;
+	__push_continues();
+	__push_breaks();
+
+	__merge_gotos(loop_name, NULL);
+
+	extra_sm = __extra_handle_canonical_loops(stmt, &stree);
+	__in_pre_condition++;
+	__pass_to_client(stmt, PRELOOP_HOOK);
+	__split_whole_condition(stmt->iterator_pre_condition);
+	__in_pre_condition--;
+	FOR_EACH_SM(stree, sm) {
+		set_state(sm->owner, sm->name, sm->sym, sm->state);
+	} END_FOR_EACH_SM(sm);
+	free_stree(&stree);
+	if (extra_sm)
+		extra_sm = get_sm_state(extra_sm->owner, extra_sm->name, extra_sm->sym);
+
+	if (option_assume_loops)
+		once_through = 1;
+
+	__split_stmt(stmt->iterator_statement);
+	if (is_forever_loop(stmt)) {
+		__merge_continues();
+		__save_gotos(loop_name, NULL);
+
+		__push_fake_cur_stree();
+		__split_stmt(stmt->iterator_post_statement);
+		stree = __pop_fake_cur_stree();
+
+		__discard_false_states();
+		__use_breaks();
+
+		if (!__path_is_null())
+			__merge_stree_into_cur(stree);
+		free_stree(&stree);
+	} else {
+		__merge_continues();
+		unchanged = __iterator_unchanged(extra_sm);
+		__split_stmt(stmt->iterator_post_statement);
+		__prev_stmt = stmt->iterator_post_statement;
+		__cur_stmt = stmt;
+
+		__save_gotos(loop_name, NULL);
+		__in_pre_condition++;
+		__split_whole_condition(stmt->iterator_pre_condition);
+		__in_pre_condition--;
+		nullify_path();
+		__merge_false_states();
+		if (once_through)
+			__discard_false_states();
+		else
+			__merge_false_states();
+
+		if (extra_sm && unchanged)
+			__extra_pre_loop_hook_after(extra_sm,
+						stmt->iterator_post_statement,
+						stmt->iterator_pre_condition);
+		__merge_breaks();
+	}
+	loop_count--;
+}
+
+/*
+ * Post loops are do {} while();
+ */
+static void handle_post_loop(struct statement *stmt)
+{
+	char *loop_name;
+
+	loop_name = get_loop_name(loop_num);
+	loop_num++;
+	loop_count++;
+
+	__push_continues();
+	__push_breaks();
+	__merge_gotos(loop_name, NULL);
+	__split_stmt(stmt->iterator_statement);
+	__merge_continues();
+	if (!is_zero(stmt->iterator_post_condition))
+		__save_gotos(loop_name, NULL);
+
+	if (is_forever_loop(stmt)) {
+		__use_breaks();
+	} else {
+		__split_whole_condition(stmt->iterator_post_condition);
+		__use_false_states();
+		__merge_breaks();
+	}
+	loop_count--;
+}
+
+static int empty_statement(struct statement *stmt)
+{
+	if (!stmt)
+		return 0;
+	if (stmt->type == STMT_EXPRESSION && !stmt->expression)
+		return 1;
+	return 0;
+}
+
+static int last_stmt_on_same_line(void)
+{
+	struct statement *stmt;
+	int i = 0;
+
+	FOR_EACH_PTR_REVERSE(big_statement_stack, stmt) {
+		if (!i++)
+			continue;
+		if  (stmt->pos.line == get_lineno())
+			return 1;
+		return 0;
+	} END_FOR_EACH_PTR_REVERSE(stmt);
+	return 0;
+}
+
+static void split_asm_constraints(struct expression_list *expr_list)
+{
+	struct expression *expr;
+	int state = 0;
+
+	FOR_EACH_PTR(expr_list, expr) {
+		switch (state) {
+		case 0: /* identifier */
+		case 1: /* constraint */
+			state++;
+			continue;
+		case 2: /* expression */
+			state = 0;
+			__split_expr(expr);
+			continue;
+		}
+	} END_FOR_EACH_PTR(expr);
+}
+
+static int is_case_val(struct statement *stmt, sval_t sval)
+{
+	sval_t case_sval;
+
+	if (stmt->type != STMT_CASE)
+		return 0;
+	if (!stmt->case_expression) {
+		__set_default();
+		return 1;
+	}
+	if (!get_value(stmt->case_expression, &case_sval))
+		return 0;
+	if (case_sval.value == sval.value)
+		return 1;
+	return 0;
+}
+
+static struct range_list *get_case_rl(struct expression *switch_expr,
+				      struct expression *case_expr,
+				      struct expression *case_to)
+{
+	sval_t start, end;
+	struct range_list *rl = NULL;
+	struct symbol *switch_type;
+
+	switch_type = get_type(switch_expr);
+	if (get_value(case_to, &end) && get_value(case_expr, &start)) {
+		start = sval_cast(switch_type, start);
+		end = sval_cast(switch_type, end);
+		add_range(&rl, start, end);
+	} else if (get_value(case_expr, &start)) {
+		start = sval_cast(switch_type, start);
+		add_range(&rl, start, start);
+	}
+
+	return rl;
+}
+
+static void split_known_switch(struct statement *stmt, sval_t sval)
+{
+	struct statement *tmp;
+	struct range_list *rl;
+
+	__split_expr(stmt->switch_expression);
+	sval = sval_cast(get_type(stmt->switch_expression), sval);
+
+	push_expression(&switch_expr_stack, stmt->switch_expression);
+	__save_switch_states(top_expression(switch_expr_stack));
+	nullify_path();
+	__push_default();
+	__push_breaks();
+
+	stmt = stmt->switch_statement;
+
+	__push_scope_hooks();
+	FOR_EACH_PTR(stmt->stmts, tmp) {
+		__smatch_lineno = tmp->pos.line;
+		if (is_case_val(tmp, sval)) {
+			rl = alloc_rl(sval, sval);
+			__merge_switches(top_expression(switch_expr_stack), rl);
+			__pass_case_to_client(top_expression(switch_expr_stack), rl);
+		}
+		if (__path_is_null())
+			continue;
+		__split_stmt(tmp);
+		if (__path_is_null()) {
+			__set_default();
+			goto out;
+		}
+	} END_FOR_EACH_PTR(tmp);
+out:
+	__call_scope_hooks();
+	if (!__pop_default())
+		__merge_switches(top_expression(switch_expr_stack), NULL);
+	__discard_switches();
+	__merge_breaks();
+	pop_expression(&switch_expr_stack);
+}
+
+static void split_case(struct statement *stmt)
+{
+	struct range_list *rl = NULL;
+
+	expr_set_parent_stmt(stmt->case_expression, stmt);
+	expr_set_parent_stmt(stmt->case_to, stmt);
+
+	rl = get_case_rl(top_expression(switch_expr_stack),
+			 stmt->case_expression, stmt->case_to);
+	while (stmt->case_statement->type == STMT_CASE) {
+		struct range_list *tmp;
+
+		tmp = get_case_rl(top_expression(switch_expr_stack),
+				  stmt->case_statement->case_expression,
+				  stmt->case_statement->case_to);
+		if (!tmp)
+			break;
+		rl = rl_union(rl, tmp);
+		if (!stmt->case_expression)
+			__set_default();
+		stmt = stmt->case_statement;
+	}
+
+	__merge_switches(top_expression(switch_expr_stack), rl);
+
+	if (!stmt->case_expression)
+		__set_default();
+	__split_stmt(stmt->case_statement);
+}
+
+int time_parsing_function(void)
+{
+	return ms_since(&fn_start_time) / 1000;
+}
+
+static int taking_too_long(void)
+{
+	if ((ms_since(&outer_fn_start_time) / 1000) > 60 * 5) /* five minutes */
+		return 1;
+	return 0;
+}
+
+static int is_last_stmt(struct statement *cur_stmt)
+{
+	struct symbol *fn;
+	struct statement *stmt;
+
+	if (!cur_func_sym)
+		return 0;
+	fn = get_base_type(cur_func_sym);
+	if (!fn)
+		return 0;
+	stmt = fn->stmt;
+	if (!stmt)
+		stmt = fn->inline_stmt;
+	if (!stmt || stmt->type != STMT_COMPOUND)
+		return 0;
+	stmt = last_ptr_list((struct ptr_list *)stmt->stmts);
+	if (stmt && stmt->type == STMT_LABEL)
+		stmt = stmt->label_statement;
+	if (stmt == cur_stmt)
+		return 1;
+	return 0;
+}
+
+static void handle_backward_goto(struct statement *goto_stmt)
+{
+	const char *goto_name, *label_name;
+	struct statement *func_stmt;
+	struct symbol *base_type = get_base_type(cur_func_sym);
+	struct statement *tmp;
+	int found = 0;
+
+	if (!option_info)
+		return;
+	if (last_goto_statement_handled)
+		return;
+	last_goto_statement_handled = 1;
+
+	if (!goto_stmt->goto_label ||
+	    goto_stmt->goto_label->type != SYM_LABEL ||
+	    !goto_stmt->goto_label->ident)
+		return;
+	goto_name = goto_stmt->goto_label->ident->name;
+
+	func_stmt = base_type->stmt;
+	if (!func_stmt)
+		func_stmt = base_type->inline_stmt;
+	if (!func_stmt)
+		return;
+	if (func_stmt->type != STMT_COMPOUND)
+		return;
+
+	FOR_EACH_PTR(func_stmt->stmts, tmp) {
+		if (!found) {
+			if (tmp->type != STMT_LABEL)
+				continue;
+			if (!tmp->label_identifier ||
+			    tmp->label_identifier->type != SYM_LABEL ||
+			    !tmp->label_identifier->ident)
+				continue;
+			label_name = tmp->label_identifier->ident->name;
+			if (strcmp(goto_name, label_name) != 0)
+				continue;
+			found = 1;
+		}
+		__split_stmt(tmp);
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void fake_a_return(void)
+{
+	struct symbol *return_type;
+
+	nullify_path();
+	__unnullify_path();
+
+	return_type = get_real_base_type(cur_func_sym);
+	return_type = get_real_base_type(return_type);
+	if (return_type != &void_ctype) {
+		__pass_to_client(unknown_value_expression(NULL), RETURN_HOOK);
+		nullify_path();
+	}
+}
+
+static void fake_an_empty_default(struct position pos)
+{
+	static struct statement none = {};
+
+	none.pos = pos;
+	none.type = STMT_NONE;
+	__merge_switches(top_expression(switch_expr_stack), NULL);
+	__split_stmt(&none);
+}
+
+static void split_compound(struct statement *stmt)
+{
+	struct statement *prev = NULL;
+	struct statement *cur = NULL;
+	struct statement *next;
+
+	__push_scope_hooks();
+
+	FOR_EACH_PTR(stmt->stmts, next) {
+		/* just set them all ahead of time */
+		stmt_set_parent_stmt(next, stmt);
+
+		if (cur) {
+			__prev_stmt = prev;
+			__next_stmt = next;
+			__cur_stmt = cur;
+			__split_stmt(cur);
+		}
+		prev = cur;
+		cur = next;
+	} END_FOR_EACH_PTR(next);
+	if (cur) {
+		__prev_stmt = prev;
+		__cur_stmt = cur;
+		__next_stmt = NULL;
+		__split_stmt(cur);
+	}
+
+	/*
+	 * For function scope, then delay calling the scope hooks until the
+	 * end of function hooks can run.  I'm not positive this is the right
+	 * thing...
+	 */
+	if (!is_last_stmt(cur))
+		__call_scope_hooks();
+}
+
+/*
+ * This is a hack, work around for detecting empty functions.
+ */
+static int need_delayed_scope_hooks(void)
+{
+	struct symbol *fn = get_base_type(cur_func_sym);
+	struct statement *stmt;
+
+	if (!fn)
+		return 0;
+	stmt = fn->stmt;
+	if (!stmt)
+		stmt = fn->inline_stmt;
+	if (stmt && stmt->type == STMT_COMPOUND)
+		return 1;
+	return 0;
+}
+
+void __split_label_stmt(struct statement *stmt)
+{
+	if (stmt->label_identifier &&
+	    stmt->label_identifier->type == SYM_LABEL &&
+	    stmt->label_identifier->ident) {
+		loop_count |= 0x0800000;
+		__merge_gotos(stmt->label_identifier->ident->name, stmt->label_identifier);
+	}
+}
+
+static void find_asm_gotos(struct statement *stmt)
+{
+	struct symbol *sym;
+
+	FOR_EACH_PTR(stmt->asm_labels, sym) {
+		__save_gotos(sym->ident->name, sym);
+	} END_FOR_EACH_PTR(sym);
+}
+
+void __split_stmt(struct statement *stmt)
+{
+	sval_t sval;
+
+	if (!stmt)
+		goto out;
+
+	if (!__in_fake_assign)
+		__silence_warnings_for_stmt = false;
+
+	if (__bail_on_rest_of_function || is_skipped_function())
+		return;
+
+	if (out_of_memory() || taking_too_long()) {
+		struct timeval stop;
+
+		gettimeofday(&stop, NULL);
+
+		__bail_on_rest_of_function = 1;
+		final_pass = 1;
+		sm_perror("Function too hairy.  Giving up. %lu seconds",
+		       stop.tv_sec - fn_start_time.tv_sec);
+		fake_a_return();
+		final_pass = 0;  /* turn off sm_msg() from here */
+		return;
+	}
+
+	add_ptr_list(&big_statement_stack, stmt);
+	free_expression_stack(&big_expression_stack);
+	set_position(stmt->pos);
+	__pass_to_client(stmt, STMT_HOOK);
+
+	switch (stmt->type) {
+	case STMT_DECLARATION:
+		split_declaration(stmt->declaration);
+		break;
+	case STMT_RETURN:
+		expr_set_parent_stmt(stmt->ret_value, stmt);
+
+		__split_expr(stmt->ret_value);
+		__pass_to_client(stmt->ret_value, RETURN_HOOK);
+		__process_post_op_stack();
+		nullify_path();
+		break;
+	case STMT_EXPRESSION:
+		expr_set_parent_stmt(stmt->expression, stmt);
+		expr_set_parent_stmt(stmt->context, stmt);
+
+		__split_expr(stmt->expression);
+		break;
+	case STMT_COMPOUND:
+		split_compound(stmt);
+		break;
+	case STMT_IF:
+		stmt_set_parent_stmt(stmt->if_true, stmt);
+		stmt_set_parent_stmt(stmt->if_false, stmt);
+		expr_set_parent_stmt(stmt->if_conditional, stmt);
+
+		if (known_condition_true(stmt->if_conditional)) {
+			__split_stmt(stmt->if_true);
+			break;
+		}
+		if (known_condition_false(stmt->if_conditional)) {
+			__split_stmt(stmt->if_false);
+			break;
+		}
+		__split_whole_condition(stmt->if_conditional);
+		__split_stmt(stmt->if_true);
+		if (empty_statement(stmt->if_true) &&
+			last_stmt_on_same_line() &&
+			!get_macro_name(stmt->if_true->pos))
+			sm_warning("if();");
+		__push_true_states();
+		__use_false_states();
+		__split_stmt(stmt->if_false);
+		__merge_true_states();
+		break;
+	case STMT_ITERATOR:
+		stmt_set_parent_stmt(stmt->iterator_pre_statement, stmt);
+		stmt_set_parent_stmt(stmt->iterator_statement, stmt);
+		stmt_set_parent_stmt(stmt->iterator_post_statement, stmt);
+		expr_set_parent_stmt(stmt->iterator_pre_condition, stmt);
+		expr_set_parent_stmt(stmt->iterator_post_condition, stmt);
+
+		if (stmt->iterator_pre_condition)
+			handle_pre_loop(stmt);
+		else if (stmt->iterator_post_condition)
+			handle_post_loop(stmt);
+		else {
+			// these are for(;;) type loops.
+			handle_pre_loop(stmt);
+		}
+		break;
+	case STMT_SWITCH:
+		stmt_set_parent_stmt(stmt->switch_statement, stmt);
+		expr_set_parent_stmt(stmt->switch_expression, stmt);
+
+		if (get_value(stmt->switch_expression, &sval)) {
+			split_known_switch(stmt, sval);
+			break;
+		}
+		__split_expr(stmt->switch_expression);
+		push_expression(&switch_expr_stack, stmt->switch_expression);
+		__save_switch_states(top_expression(switch_expr_stack));
+		nullify_path();
+		__push_default();
+		__push_breaks();
+		__split_stmt(stmt->switch_statement);
+		if (!__pop_default() && have_remaining_cases())
+			fake_an_empty_default(stmt->pos);
+		__discard_switches();
+		__merge_breaks();
+		pop_expression(&switch_expr_stack);
+		break;
+	case STMT_CASE:
+		split_case(stmt);
+		break;
+	case STMT_LABEL:
+		__split_label_stmt(stmt);
+		__split_stmt(stmt->label_statement);
+		break;
+	case STMT_GOTO:
+		expr_set_parent_stmt(stmt->goto_expression, stmt);
+
+		__split_expr(stmt->goto_expression);
+		if (stmt->goto_label && stmt->goto_label->type == SYM_NODE) {
+			if (!strcmp(stmt->goto_label->ident->name, "break")) {
+				__process_breaks();
+			} else if (!strcmp(stmt->goto_label->ident->name,
+					   "continue")) {
+				__process_continues();
+			}
+		} else if (stmt->goto_label &&
+			   stmt->goto_label->type == SYM_LABEL &&
+			   stmt->goto_label->ident) {
+			__save_gotos(stmt->goto_label->ident->name, stmt->goto_label);
+		}
+		nullify_path();
+		if (is_last_stmt(stmt))
+			handle_backward_goto(stmt);
+		break;
+	case STMT_NONE:
+		break;
+	case STMT_ASM:
+		expr_set_parent_stmt(stmt->asm_string, stmt);
+
+		find_asm_gotos(stmt);
+		__pass_to_client(stmt, ASM_HOOK);
+		__split_expr(stmt->asm_string);
+		split_asm_constraints(stmt->asm_outputs);
+		split_asm_constraints(stmt->asm_inputs);
+		split_asm_constraints(stmt->asm_clobbers);
+		break;
+	case STMT_CONTEXT:
+		break;
+	case STMT_RANGE:
+		__split_expr(stmt->range_expression);
+		__split_expr(stmt->range_low);
+		__split_expr(stmt->range_high);
+		break;
+	}
+	__pass_to_client(stmt, STMT_HOOK_AFTER);
+out:
+	__process_post_op_stack();
+}
+
+static void split_expr_list(struct expression_list *expr_list, struct expression *parent)
+{
+	struct expression *expr;
+
+	FOR_EACH_PTR(expr_list, expr) {
+		expr_set_parent_expr(expr, parent);
+		__split_expr(expr);
+		__process_post_op_stack();
+	} END_FOR_EACH_PTR(expr);
+}
+
+static void split_sym(struct symbol *sym)
+{
+	if (!sym)
+		return;
+	if (!(sym->namespace & NS_SYMBOL))
+		return;
+
+	__split_stmt(sym->stmt);
+	__split_expr(sym->array_size);
+	split_symlist(sym->arguments);
+	split_symlist(sym->symbol_list);
+	__split_stmt(sym->inline_stmt);
+	split_symlist(sym->inline_symbol_list);
+}
+
+static void split_symlist(struct symbol_list *sym_list)
+{
+	struct symbol *sym;
+
+	FOR_EACH_PTR(sym_list, sym) {
+		split_sym(sym);
+	} END_FOR_EACH_PTR(sym);
+}
+
+typedef void (fake_cb)(struct expression *expr);
+
+static int member_to_number(struct expression *expr, struct ident *member)
+{
+	struct symbol *type, *tmp;
+	char *name;
+	int i;
+
+	if (!member)
+		return -1;
+	name = member->name;
+
+	type = get_type(expr);
+	if (!type || type->type != SYM_STRUCT)
+		return -1;
+
+	i = -1;
+	FOR_EACH_PTR(type->symbol_list, tmp) {
+		i++;
+		if (!tmp->ident)
+			continue;
+		if (strcmp(name, tmp->ident->name) == 0)
+			return i;
+	} END_FOR_EACH_PTR(tmp);
+	return -1;
+}
+
+static struct ident *number_to_member(struct expression *expr, int num)
+{
+	struct symbol *type, *member;
+	int i = 0;
+
+	type = get_type(expr);
+	if (!type || type->type != SYM_STRUCT)
+		return NULL;
+
+	FOR_EACH_PTR(type->symbol_list, member) {
+		if (i == num)
+			return member->ident;
+		i++;
+	} END_FOR_EACH_PTR(member);
+	return NULL;
+}
+
+static void fake_element_assigns_helper(struct expression *array, struct expression_list *expr_list, fake_cb *fake_cb);
+
+static void set_inner_struct_members(struct expression *expr, struct symbol *member)
+{
+	struct expression *edge_member, *assign;
+	struct symbol *base = get_real_base_type(member);
+	struct symbol *tmp;
+
+	if (member->ident)
+		expr = member_expression(expr, '.', member->ident);
+
+	FOR_EACH_PTR(base->symbol_list, tmp) {
+		struct symbol *type;
+
+		type = get_real_base_type(tmp);
+		if (!type)
+			continue;
+
+		edge_member = member_expression(expr, '.', tmp->ident);
+		if (get_extra_state(edge_member))
+			continue;
+
+		if (type->type == SYM_UNION || type->type == SYM_STRUCT) {
+			set_inner_struct_members(expr, tmp);
+			continue;
+		}
+
+		if (!tmp->ident)
+			continue;
+
+		assign = assign_expression(edge_member, '=', zero_expr());
+		__split_expr(assign);
+	} END_FOR_EACH_PTR(tmp);
+
+
+}
+
+static void set_unset_to_zero(struct symbol *type, struct expression *expr)
+{
+	struct symbol *tmp;
+	struct expression *member = NULL;
+	struct expression *assign;
+	int op = '*';
+
+	if (expr->type == EXPR_PREOP && expr->op == '&') {
+		expr = strip_expr(expr->unop);
+		op = '.';
+	}
+
+	FOR_EACH_PTR(type->symbol_list, tmp) {
+		type = get_real_base_type(tmp);
+		if (!type)
+			continue;
+
+		if (tmp->ident) {
+			member = member_expression(expr, op, tmp->ident);
+			if (get_extra_state(member))
+				continue;
+		}
+
+		if (type->type == SYM_UNION || type->type == SYM_STRUCT) {
+			set_inner_struct_members(expr, tmp);
+			continue;
+		}
+		if (type->type == SYM_ARRAY)
+			continue;
+		if (!tmp->ident)
+			continue;
+
+		assign = assign_expression(member, '=', zero_expr());
+		__split_expr(assign);
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void fake_member_assigns_helper(struct expression *symbol, struct expression_list *members, fake_cb *fake_cb)
+{
+	struct expression *deref, *assign, *tmp, *right;
+	struct symbol *struct_type, *type;
+	struct ident *member;
+	int member_idx;
+
+	struct_type = get_type(symbol);
+	if (!struct_type ||
+	    (struct_type->type != SYM_STRUCT && struct_type->type != SYM_UNION))
+		return;
+
+	/*
+	 * We're parsing an initializer that could look something like this:
+	 * struct foo foo = {
+	 *	42,
+	 *	.whatever.xxx = 11,
+	 *	.zzz = 12,
+	 * };
+	 *
+	 * So what we have here is a list with 42, .whatever, and .zzz.  We need
+	 * to break it up into left and right sides of the assignments.
+	 *
+	 */
+	member_idx = 0;
+	FOR_EACH_PTR(members, tmp) {
+		deref = NULL;
+		if (tmp->type == EXPR_IDENTIFIER) {
+			member_idx = member_to_number(symbol, tmp->expr_ident);
+			while (tmp->type == EXPR_IDENTIFIER) {
+				member = tmp->expr_ident;
+				tmp = tmp->ident_expression;
+				if (deref)
+					deref = member_expression(deref, '.', member);
+				else
+					deref = member_expression(symbol, '.', member);
+			}
+		} else {
+			member = number_to_member(symbol, member_idx);
+			deref = member_expression(symbol, '.', member);
+		}
+		right = tmp;
+		member_idx++;
+		if (right->type == EXPR_INITIALIZER) {
+			type = get_type(deref);
+			if (type && type->type == SYM_ARRAY)
+				fake_element_assigns_helper(deref, right->expr_list, fake_cb);
+			else
+				fake_member_assigns_helper(deref, right->expr_list, fake_cb);
+		} else {
+			assign = assign_expression(deref, '=', right);
+			fake_cb(assign);
+		}
+	} END_FOR_EACH_PTR(tmp);
+
+	set_unset_to_zero(struct_type, symbol);
+}
+
+static void fake_member_assigns(struct symbol *sym, fake_cb *fake_cb)
+{
+	fake_member_assigns_helper(symbol_expression(sym),
+				   sym->initializer->expr_list, fake_cb);
+}
+
+static void fake_element_assigns_helper(struct expression *array, struct expression_list *expr_list, fake_cb *fake_cb)
+{
+	struct expression *offset, *binop, *assign, *tmp;
+	struct symbol *type;
+	int idx;
+
+	if (ptr_list_size((struct ptr_list *)expr_list) > 1000)
+		return;
+
+	idx = 0;
+	FOR_EACH_PTR(expr_list, tmp) {
+		if (tmp->type == EXPR_INDEX) {
+			if (tmp->idx_from != tmp->idx_to)
+				return;
+			idx = tmp->idx_from;
+			if (!tmp->idx_expression)
+				goto next;
+			tmp = tmp->idx_expression;
+		}
+		offset = value_expr(idx);
+		binop = array_element_expression(array, offset);
+		if (tmp->type == EXPR_INITIALIZER) {
+			type = get_type(binop);
+			if (type && type->type == SYM_ARRAY)
+				fake_element_assigns_helper(binop, tmp->expr_list, fake_cb);
+			else
+				fake_member_assigns_helper(binop, tmp->expr_list, fake_cb);
+		} else {
+			assign = assign_expression(binop, '=', tmp);
+			fake_cb(assign);
+		}
+next:
+		idx++;
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void fake_element_assigns(struct symbol *sym, fake_cb *fake_cb)
+{
+	fake_element_assigns_helper(symbol_expression(sym), sym->initializer->expr_list, fake_cb);
+}
+
+static void fake_assign_expr(struct symbol *sym)
+{
+	struct expression *assign, *symbol;
+
+	symbol = symbol_expression(sym);
+	assign = assign_expression(symbol, '=', sym->initializer);
+	__split_expr(assign);
+}
+
+static void do_initializer_stuff(struct symbol *sym)
+{
+	if (!sym->initializer)
+		return;
+
+	if (sym->initializer->type == EXPR_INITIALIZER) {
+		if (get_real_base_type(sym)->type == SYM_ARRAY)
+			fake_element_assigns(sym, __split_expr);
+		else
+			fake_member_assigns(sym, __split_expr);
+	} else {
+		fake_assign_expr(sym);
+	}
+}
+
+static void split_declaration(struct symbol_list *sym_list)
+{
+	struct symbol *sym;
+
+	FOR_EACH_PTR(sym_list, sym) {
+		__pass_to_client(sym, DECLARATION_HOOK);
+		do_initializer_stuff(sym);
+		split_sym(sym);
+	} END_FOR_EACH_PTR(sym);
+}
+
+static void call_global_assign_hooks(struct expression *assign)
+{
+	__pass_to_client(assign, GLOBAL_ASSIGNMENT_HOOK);
+}
+
+static void fake_global_assign(struct symbol *sym)
+{
+	struct expression *assign, *symbol;
+
+	if (get_real_base_type(sym)->type == SYM_ARRAY) {
+		if (sym->initializer && sym->initializer->type == EXPR_INITIALIZER) {
+			fake_element_assigns(sym, call_global_assign_hooks);
+		} else if (sym->initializer) {
+			symbol = symbol_expression(sym);
+			assign = assign_expression(symbol, '=', sym->initializer);
+			__pass_to_client(assign, GLOBAL_ASSIGNMENT_HOOK);
+		} else {
+			fake_element_assigns_helper(symbol_expression(sym), NULL, call_global_assign_hooks);
+		}
+	} else if (get_real_base_type(sym)->type == SYM_STRUCT) {
+		if (sym->initializer && sym->initializer->type == EXPR_INITIALIZER) {
+			fake_member_assigns(sym, call_global_assign_hooks);
+		} else if (sym->initializer) {
+			symbol = symbol_expression(sym);
+			assign = assign_expression(symbol, '=', sym->initializer);
+			__pass_to_client(assign, GLOBAL_ASSIGNMENT_HOOK);
+		} else {
+			fake_member_assigns_helper(symbol_expression(sym), NULL, call_global_assign_hooks);
+		}
+	} else {
+		symbol = symbol_expression(sym);
+		if (sym->initializer) {
+			assign = assign_expression(symbol, '=', sym->initializer);
+			__split_expr(assign);
+		} else {
+			assign = assign_expression(symbol, '=', zero_expr());
+		}
+		__pass_to_client(assign, GLOBAL_ASSIGNMENT_HOOK);
+	}
+}
+
+static void start_function_definition(struct symbol *sym)
+{
+	__in_function_def = 1;
+	__pass_to_client(sym, FUNC_DEF_HOOK);
+	__in_function_def = 0;
+	__pass_to_client(sym, AFTER_DEF_HOOK);
+
+}
+
+static void split_function(struct symbol *sym)
+{
+	struct symbol *base_type = get_base_type(sym);
+	struct timeval stop;
+
+	if (!base_type->stmt && !base_type->inline_stmt)
+		return;
+
+	gettimeofday(&outer_fn_start_time, NULL);
+	gettimeofday(&fn_start_time, NULL);
+	cur_func_sym = sym;
+	if (sym->ident)
+		cur_func = sym->ident->name;
+	set_position(sym->pos);
+	loop_count = 0;
+	last_goto_statement_handled = 0;
+	sm_debug("new function:  %s\n", cur_func);
+	__stree_id = 0;
+	if (option_two_passes) {
+		__unnullify_path();
+		loop_num = 0;
+		final_pass = 0;
+		start_function_definition(sym);
+		__split_stmt(base_type->stmt);
+		__split_stmt(base_type->inline_stmt);
+		nullify_path();
+	}
+	__unnullify_path();
+	loop_num = 0;
+	final_pass = 1;
+	start_function_definition(sym);
+	__split_stmt(base_type->stmt);
+	__split_stmt(base_type->inline_stmt);
+	__pass_to_client(sym, END_FUNC_HOOK);
+	if (need_delayed_scope_hooks())
+		__call_scope_hooks();
+	__pass_to_client(sym, AFTER_FUNC_HOOK);
+
+	clear_all_states();
+
+	gettimeofday(&stop, NULL);
+	if (option_time && stop.tv_sec - fn_start_time.tv_sec > 2) {
+		final_pass++;
+		sm_msg("func_time: %lu", stop.tv_sec - fn_start_time.tv_sec);
+		final_pass--;
+	}
+	cur_func_sym = NULL;
+	cur_func = NULL;
+	free_data_info_allocs();
+	free_expression_stack(&switch_expr_stack);
+	__free_ptr_list((struct ptr_list **)&big_statement_stack);
+	__bail_on_rest_of_function = 0;
+}
+
+static void save_flow_state(void)
+{
+	__add_ptr_list(&backup, INT_PTR(loop_num << 2), 0);
+	__add_ptr_list(&backup, INT_PTR(loop_count << 2), 0);
+	__add_ptr_list(&backup, INT_PTR(final_pass << 2), 0);
+
+	__add_ptr_list(&backup, big_statement_stack, 0);
+	__add_ptr_list(&backup, big_expression_stack, 0);
+	__add_ptr_list(&backup, big_condition_stack, 0);
+	__add_ptr_list(&backup, switch_expr_stack, 0);
+
+	__add_ptr_list(&backup, cur_func_sym, 0);
+
+	__add_ptr_list(&backup, __prev_stmt, 0);
+	__add_ptr_list(&backup, __cur_stmt, 0);
+	__add_ptr_list(&backup, __next_stmt, 0);
+
+}
+
+static void *pop_backup(void)
+{
+	void *ret;
+
+	ret = last_ptr_list(backup);
+	delete_ptr_list_last(&backup);
+	return ret;
+}
+
+static void restore_flow_state(void)
+{
+	__next_stmt = pop_backup();
+	__cur_stmt = pop_backup();
+	__prev_stmt = pop_backup();
+
+	cur_func_sym = pop_backup();
+	switch_expr_stack = pop_backup();
+	big_condition_stack = pop_backup();
+	big_expression_stack = pop_backup();
+	big_statement_stack = pop_backup();
+	final_pass = PTR_INT(pop_backup()) >> 2;
+	loop_count = PTR_INT(pop_backup()) >> 2;
+	loop_num = PTR_INT(pop_backup()) >> 2;
+}
+
+static void parse_inline(struct expression *call)
+{
+	struct symbol *base_type;
+	char *cur_func_bak = cur_func;  /* not aligned correctly for backup */
+	struct timeval time_backup = fn_start_time;
+	struct expression *orig_inline = __inline_fn;
+	int orig_budget;
+
+	if (out_of_memory() || taking_too_long())
+		return;
+
+	save_flow_state();
+
+	__pass_to_client(call, INLINE_FN_START);
+	final_pass = 0;  /* don't print anything */
+	__inline_fn = call;
+	orig_budget = inline_budget;
+	inline_budget = inline_budget - 5;
+
+	base_type = get_base_type(call->fn->symbol);
+	cur_func_sym = call->fn->symbol;
+	if (call->fn->symbol->ident)
+		cur_func = call->fn->symbol->ident->name;
+	else
+		cur_func = NULL;
+	set_position(call->fn->symbol->pos);
+
+	save_all_states();
+	big_statement_stack = NULL;
+	big_expression_stack = NULL;
+	big_condition_stack = NULL;
+	switch_expr_stack = NULL;
+
+	sm_debug("inline function:  %s\n", cur_func);
+	__unnullify_path();
+	loop_num = 0;
+	loop_count = 0;
+	start_function_definition(call->fn->symbol);
+	__split_stmt(base_type->stmt);
+	__split_stmt(base_type->inline_stmt);
+	__pass_to_client(call->fn->symbol, END_FUNC_HOOK);
+	__pass_to_client(call->fn->symbol, AFTER_FUNC_HOOK);
+
+	free_expression_stack(&switch_expr_stack);
+	__free_ptr_list((struct ptr_list **)&big_statement_stack);
+	nullify_path();
+	free_goto_stack();
+
+	restore_flow_state();
+	fn_start_time = time_backup;
+	cur_func = cur_func_bak;
+
+	restore_all_states();
+	set_position(call->pos);
+	__inline_fn = orig_inline;
+	inline_budget = orig_budget;
+	__pass_to_client(call, INLINE_FN_END);
+}
+
+static struct symbol_list *inlines_called;
+static void add_inline_function(struct symbol *sym)
+{
+	static struct symbol_list *already_added;
+	struct symbol *tmp;
+
+	FOR_EACH_PTR(already_added, tmp) {
+		if (tmp == sym)
+			return;
+	} END_FOR_EACH_PTR(tmp);
+
+	add_ptr_list(&already_added, sym);
+	add_ptr_list(&inlines_called, sym);
+}
+
+static void process_inlines(void)
+{
+	struct symbol *tmp;
+
+	FOR_EACH_PTR(inlines_called, tmp) {
+		split_function(tmp);
+	} END_FOR_EACH_PTR(tmp);
+	free_ptr_list(&inlines_called);
+}
+
+static struct symbol *get_last_scoped_symbol(struct symbol_list *big_list, int use_static)
+{
+	struct symbol *sym;
+
+	FOR_EACH_PTR_REVERSE(big_list, sym) {
+		if (!sym->scope)
+			continue;
+		if (use_static && sym->ctype.modifiers & MOD_STATIC)
+			return sym;
+		if (!use_static && !(sym->ctype.modifiers & MOD_STATIC))
+			return sym;
+	} END_FOR_EACH_PTR_REVERSE(sym);
+
+	return NULL;
+}
+
+static bool interesting_function(struct symbol *sym)
+{
+	static int prev_stream = -1;
+	static bool prev_answer;
+	const char *filename;
+	int len;
+
+	if (!(sym->ctype.modifiers & MOD_INLINE))
+		return true;
+
+	if (sym->pos.stream == prev_stream)
+		return prev_answer;
+
+	prev_stream = sym->pos.stream;
+	prev_answer = false;
+
+	filename = stream_name(sym->pos.stream);
+	len = strlen(filename);
+	if (len > 0 && filename[len - 1] == 'c')
+		prev_answer = true;
+	return prev_answer;
+}
+
+static void split_inlines_in_scope(struct symbol *sym)
+{
+	struct symbol *base;
+	struct symbol_list *scope_list;
+	int stream;
+
+	scope_list = sym->scope->symbols;
+	stream = sym->pos.stream;
+
+	/* find the last static symbol in the file */
+	FOR_EACH_PTR_REVERSE(scope_list, sym) {
+		if (sym->pos.stream != stream)
+			continue;
+		if (sym->type != SYM_NODE)
+			continue;
+		base = get_base_type(sym);
+		if (!base)
+			continue;
+		if (base->type != SYM_FN)
+			continue;
+		if (!base->inline_stmt)
+			continue;
+		if (!interesting_function(sym))
+			continue;
+		add_inline_function(sym);
+	} END_FOR_EACH_PTR_REVERSE(sym);
+
+	process_inlines();
+}
+
+static void split_inlines(struct symbol_list *sym_list)
+{
+	struct symbol *sym;
+
+	sym = get_last_scoped_symbol(sym_list, 0);
+	if (sym)
+		split_inlines_in_scope(sym);
+	sym = get_last_scoped_symbol(sym_list, 1);
+	if (sym)
+		split_inlines_in_scope(sym);
+}
+
+static struct stree *clone_estates_perm(struct stree *orig)
+{
+	struct stree *ret = NULL;
+	struct sm_state *tmp;
+
+	FOR_EACH_SM(orig, tmp) {
+		set_state_stree_perm(&ret, tmp->owner, tmp->name, tmp->sym, clone_estate_perm(tmp->state));
+	} END_FOR_EACH_SM(tmp);
+
+	return ret;
+}
+
+struct position last_pos;
+static void split_c_file_functions(struct symbol_list *sym_list)
+{
+	struct symbol *sym;
+
+	__unnullify_path();
+	FOR_EACH_PTR(sym_list, sym) {
+		set_position(sym->pos);
+		if (sym->type != SYM_NODE || get_base_type(sym)->type != SYM_FN) {
+			__pass_to_client(sym, BASE_HOOK);
+			fake_global_assign(sym);
+		}
+	} END_FOR_EACH_PTR(sym);
+	global_states = clone_estates_perm(get_all_states_stree(SMATCH_EXTRA));
+	nullify_path();
+
+	FOR_EACH_PTR(sym_list, sym) {
+		set_position(sym->pos);
+		last_pos = sym->pos;
+		if (!interesting_function(sym))
+			continue;
+		if (sym->type == SYM_NODE && get_base_type(sym)->type == SYM_FN) {
+			split_function(sym);
+			process_inlines();
+		}
+		last_pos = sym->pos;
+	} END_FOR_EACH_PTR(sym);
+	split_inlines(sym_list);
+	__pass_to_client(sym_list, END_FILE_HOOK);
+}
+
+static int final_before_fake;
+void init_fake_env(void)
+{
+	if (!in_fake_env)
+		final_before_fake = final_pass;
+	in_fake_env++;
+	__push_fake_cur_stree();
+	final_pass = 0;
+}
+
+void end_fake_env(void)
+{
+	__pop_fake_cur_stree();
+	in_fake_env--;
+	if (!in_fake_env)
+		final_pass = final_before_fake;
+}
+
+static void open_output_files(char *base_file)
+{
+	char buf[256];
+
+	snprintf(buf, sizeof(buf), "%s.smatch", base_file);
+	sm_outfd = fopen(buf, "w");
+	if (!sm_outfd)
+		sm_fatal("Cannot open %s", buf);
+
+	if (!option_info)
+		return;
+
+	snprintf(buf, sizeof(buf), "%s.smatch.sql", base_file);
+	sql_outfd = fopen(buf, "w");
+	if (!sql_outfd)
+		sm_fatal("Error:  Cannot open %s", buf);
+
+	snprintf(buf, sizeof(buf), "%s.smatch.caller_info", base_file);
+	caller_info_fd = fopen(buf, "w");
+	if (!caller_info_fd)
+		sm_fatal("Error:  Cannot open %s", buf);
+}
+
+void smatch(int argc, char **argv)
+{
+	struct string_list *filelist = NULL;
+	struct symbol_list *sym_list;
+	struct timeval stop, start;
+	char *path;
+	int len;
+
+	gettimeofday(&start, NULL);
+
+	sparse_initialize(argc, argv, &filelist);
+	set_valid_ptr_max();
+	alloc_valid_ptr_rl();
+	FOR_EACH_PTR_NOTAG(filelist, base_file) {
+		path = getcwd(NULL, 0);
+		free(full_base_file);
+		if (path) {
+			len = strlen(path) + 1 + strlen(base_file) + 1;
+			full_base_file = malloc(len);
+			snprintf(full_base_file, len, "%s/%s", path, base_file);
+		} else {
+			full_base_file = alloc_string(base_file);
+		}
+		if (option_file_output)
+			open_output_files(base_file);
+		sym_list = sparse_keep_tokens(base_file);
+		split_c_file_functions(sym_list);
+	} END_FOR_EACH_PTR_NOTAG(base_file);
+
+	gettimeofday(&stop, NULL);
+
+	set_position(last_pos);
+	if (option_time)
+		sm_msg("time: %lu", stop.tv_sec - start.tv_sec);
+	if (option_mem)
+		sm_msg("mem: %luKb", get_max_memory());
+}
--- /dev/null	Fri Dec 21 15:00:26 2018
+++ new/usr/src/tools/smatch/src/smatch_fn_arg_link.c	Fri Dec 21 15:00:26 2018
@@ -0,0 +1,212 @@
+/*
+ * Copyright (C) 2016 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * What we're trying to do here is record links between function pointers and
+ * function data.  If you have foo->function(foo->data); that's very easy.  But
+ * the problem is maybe when you pass the function and the data as parameters.
+ *
+ */
+
+#include "smatch.h"
+#include <ctype.h>
+
+static int my_id;
+
+static void save_in_fn_ptr_data_link_table(struct expression *fn, struct expression *arg)
+{
+	struct symbol *fn_sym, *arg_sym;
+	struct symbol *type;
+	char *fn_name, *arg_name;
+	int sym_len;
+	char fn_buf[128];
+	char arg_buf[128];
+
+	fn_name = expr_to_var_sym(fn, &fn_sym);
+	arg_name = expr_to_var_sym(arg, &arg_sym);
+	if (!fn_sym || !fn_sym->ident || !arg_sym || !fn_name || !arg_name)
+		goto free;
+	if (fn_sym != arg_sym)
+		goto free;
+
+	sym_len = fn_sym->ident->len;
+
+	/* This is ignoring
+	 * net/mac80211/driver-ops.h:482 drv_sta_remove() FN: local->ops->sta_remove ARG: &local->hw
+	 * but ideally the restriction can be removed later.
+	 */
+	if (strncmp(fn_name, arg_name, sym_len) != 0)
+		goto free;
+
+	type = get_real_base_type(fn_sym);
+	if (!type)
+		goto free;
+	if (type->type != SYM_PTR)
+		goto free;
+	type = get_real_base_type(type);
+	if (!type || type->type != SYM_STRUCT || !type->ident)
+		goto free;
+
+	snprintf(fn_buf, sizeof(fn_buf), "(struct %s)%s", type->ident->name,
+		 fn_name + sym_len);
+
+	snprintf(arg_buf, sizeof(arg_buf), "(struct %s)%s", type->ident->name,
+		 arg_name + sym_len);
+
+	sql_insert_fn_ptr_data_link(fn_buf, arg_buf);
+free:
+	free_string(arg_name);
+	free_string(fn_name);
+}
+
+static int print_calls_parameter(struct expression *call)
+{
+	struct expression *arg;
+	int fn_param, arg_param;
+	char buf[32];
+
+	fn_param = get_param_num(call->fn);
+	if (fn_param < 0)
+		return 0;
+
+	arg = get_argument_from_call_expr(call->args, 0);
+	if (!arg)
+		return 0;
+
+	arg_param = get_param_num(arg);
+	if (arg_param < 0)
+		return 0;
+
+	snprintf(buf, sizeof(buf), "%d", arg_param);
+	sql_insert_return_implies(FN_ARG_LINK, fn_param, "$", buf);
+	return 0;
+}
+
+static int print_call_is_linked(struct expression *call)
+{
+	struct expression *fn, *tmp;
+	struct expression *arg;
+	struct symbol *fn_sym;
+	struct symbol *arg_sym = NULL;
+	int i;
+
+	fn = strip_expr(call->fn);
+	tmp = get_assigned_expr(fn);
+	if (tmp)
+		fn = tmp;
+	if (fn->type != EXPR_DEREF || !fn->member)
+		return 0;
+
+	fn_sym = expr_to_sym(fn);
+	if (!fn_sym)
+		return 0;
+
+	i = -1;
+	FOR_EACH_PTR(call->args, arg) {
+		i++;
+		tmp = get_assigned_expr(arg);
+		if (tmp)
+			arg = tmp;
+		arg_sym = expr_to_sym(arg);
+		if (arg_sym == fn_sym) {
+			save_in_fn_ptr_data_link_table(fn, arg);
+			return 1;
+		}
+	} END_FOR_EACH_PTR(arg);
+
+	return 0;
+}
+
+static int is_recursive_call(struct expression *call)
+{
+	if (call->fn->type != EXPR_SYMBOL)
+		return 0;
+	if (call->fn->symbol == cur_func_sym)
+		return 1;
+	return 0;
+}
+
+static void check_passes_fn_and_data(struct expression *call, struct expression *fn, char *key, char *value)
+{
+	struct expression *arg;
+	struct expression *tmp;
+	struct symbol *fn_sym, *arg_sym;
+	struct symbol *type;
+	int data_nr;
+	int fn_param, arg_param;
+
+	if (is_recursive_call(call))
+		return;
+
+	type = get_type(fn);
+	if (!type || type->type != SYM_PTR)
+		return;
+	type = get_real_base_type(type);
+	if (!type || type->type != SYM_FN)
+		return;
+	tmp = get_assigned_expr(fn);
+	if (tmp)
+		fn = tmp;
+
+	if (!isdigit(value[0]))
+		return;
+	data_nr = atoi(value);
+	arg = get_argument_from_call_expr(call->args, data_nr);
+	if (!arg)
+		return;
+	tmp = get_assigned_expr(arg);
+	if (tmp)
+		arg = tmp;
+
+	fn_param = get_param_num(fn);
+	arg_param = get_param_num(arg);
+	if (fn_param >= 0 && arg_param >= 0) {
+		char buf[32];
+
+		snprintf(buf, sizeof(buf), "%d", arg_param);
+		sql_insert_return_implies(FN_ARG_LINK, fn_param, "$", buf);
+		return;
+	}
+
+	fn_sym = expr_to_sym(fn);
+	if (!fn_sym)
+		return;
+	arg_sym = expr_to_sym(arg);
+	if (arg_sym != fn_sym)
+		return;
+	save_in_fn_ptr_data_link_table(fn, tmp);
+}
+
+static void match_call_info(struct expression *call)
+{
+	if (print_calls_parameter(call))
+		return;
+	if (print_call_is_linked(call))
+		return;
+}
+
+void register_fn_arg_link(int id)
+{
+	my_id = id;
+
+	if (!option_info)
+		return;
+
+	add_hook(&match_call_info, FUNCTION_CALL_HOOK);
+	select_return_implies_hook(FN_ARG_LINK, &check_passes_fn_and_data);
+}
+
--- /dev/null	Fri Dec 21 15:00:26 2018
+++ new/usr/src/tools/smatch/src/smatch_function_hashtable.h	Fri Dec 21 15:00:26 2018
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "smatch.h"
+#include "cwchash/hashtable.h"
+
+static inline unsigned int djb2_hash(void *ky)
+{
+	char *str = (char *)ky;
+	unsigned long hash = 5381;
+	int c;
+
+	while ((c = *str++))
+		hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
+
+        return hash;
+}
+
+static inline int equalkeys(void *k1, void *k2)
+{
+	return !strcmp((char *)k1, (char *)k2);
+}
+
+#define DEFINE_FUNCTION_ADD_HOOK(_name, _item_type, _list_type) \
+void add_##_name(struct hashtable *table, const char *look_for, _item_type *value) \
+{                                                               \
+	_list_type *list;                                       \
+	char *key;                                              \
+                                                                \
+	key = alloc_string(look_for);                           \
+	list = search_##_name(table, key);                      \
+	if (!list) {                                            \
+		add_ptr_list(&list, value);                     \
+	} else {                                                \
+		remove_##_name(table, key);                     \
+		add_ptr_list(&list, value);                     \
+	}                                                       \
+	insert_##_name(table, key, list);                       \
+}
+
+static inline struct hashtable *create_function_hashtable(int size)
+{
+	return create_hashtable(size, djb2_hash, equalkeys);
+}
+
+static inline void destroy_function_hashtable(struct hashtable *table)
+{
+	hashtable_destroy(table, 0);
+}
+
+#define DEFINE_FUNCTION_HASHTABLE(_name, _item_type, _list_type)   \
+	DEFINE_HASHTABLE_INSERT(insert_##_name, char, _list_type); \
+	DEFINE_HASHTABLE_SEARCH(search_##_name, char, _list_type); \
+	DEFINE_HASHTABLE_REMOVE(remove_##_name, char, _list_type); \
+	DEFINE_FUNCTION_ADD_HOOK(_name, _item_type, _list_type);
+
+#define DEFINE_FUNCTION_HASHTABLE_STATIC(_name, _item_type, _list_type)   \
+	static DEFINE_HASHTABLE_INSERT(insert_##_name, char, _list_type); \
+	static DEFINE_HASHTABLE_SEARCH(search_##_name, char, _list_type); \
+	static DEFINE_HASHTABLE_REMOVE(remove_##_name, char, _list_type); \
+	static DEFINE_FUNCTION_ADD_HOOK(_name, _item_type, _list_type);
+
+#define DEFINE_STRING_HASHTABLE_STATIC(_name)   \
+	static DEFINE_HASHTABLE_INSERT(insert_##_name, char, int); \
+	static DEFINE_HASHTABLE_SEARCH(search_##_name, char, int); \
+	static struct hashtable *_name
+
+static inline void load_hashtable_helper(const char *file, int (*insert_func)(struct hashtable *, char *, int *), struct hashtable *table)
+{
+	char filename[256];
+	struct token *token;
+	char *name;
+
+	snprintf(filename, sizeof(filename), "%s.%s", option_project_str, file);
+	token = get_tokens_file(filename);
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		name = alloc_string(show_ident(token->ident));
+		insert_func(table, name, (void *)1);
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+#define load_strings(file, _table) load_hashtable_helper(file, insert_##_table, _table)
--- /dev/null	Fri Dec 21 15:00:26 2018
+++ new/usr/src/tools/smatch/src/smatch_function_hooks.c	Fri Dec 21 15:00:26 2018
@@ -0,0 +1,1206 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * There are several types of function hooks:
+ * add_function_hook()        - For any time a function is called.
+ * add_function_assign_hook() - foo = the_function().
+ * add_implied_return_hook()  - Calculates the implied return value.
+ * add_macro_assign_hook()    - foo = the_macro().
+ * return_implies_state()     - For when a return value of 1 implies locked
+ *                              and 0 implies unlocked. etc. etc.
+ *
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+#include "smatch_function_hashtable.h"
+
+struct fcall_back {
+	int type;
+	struct data_range *range;
+	union {
+		func_hook *call_back;
+		implication_hook *ranged;
+		implied_return_hook *implied_return;
+	} u;
+	void *info;
+};
+
+ALLOCATOR(fcall_back, "call backs");
+DECLARE_PTR_LIST(call_back_list, struct fcall_back);
+
+DEFINE_FUNCTION_HASHTABLE_STATIC(callback, struct fcall_back, struct call_back_list);
+static struct hashtable *func_hash;
+
+int __in_fake_parameter_assign;
+
+#define REGULAR_CALL       0
+#define RANGED_CALL        1
+#define ASSIGN_CALL        2
+#define IMPLIED_RETURN     3
+#define MACRO_ASSIGN       4
+#define MACRO_ASSIGN_EXTRA 5
+
+struct return_implies_callback {
+	int type;
+	return_implies_hook *callback;
+};
+ALLOCATOR(return_implies_callback, "return_implies callbacks");
+DECLARE_PTR_LIST(db_implies_list, struct return_implies_callback);
+static struct db_implies_list *db_return_states_list;
+
+typedef void (void_fn)(void);
+DECLARE_PTR_LIST(void_fn_list, void_fn *);
+static struct void_fn_list *return_states_before;
+static struct void_fn_list *return_states_after;
+
+static struct fcall_back *alloc_fcall_back(int type, void *call_back,
+					   void *info)
+{
+	struct fcall_back *cb;
+
+	cb = __alloc_fcall_back(0);
+	cb->type = type;
+	cb->u.call_back = call_back;
+	cb->info = info;
+	return cb;
+}
+
+void add_function_hook(const char *look_for, func_hook *call_back, void *info)
+{
+	struct fcall_back *cb;
+
+	cb = alloc_fcall_back(REGULAR_CALL, call_back, info);
+	add_callback(func_hash, look_for, cb);
+}
+
+void add_function_assign_hook(const char *look_for, func_hook *call_back,
+			      void *info)
+{
+	struct fcall_back *cb;
+
+	cb = alloc_fcall_back(ASSIGN_CALL, call_back, info);
+	add_callback(func_hash, look_for, cb);
+}
+
+void add_implied_return_hook(const char *look_for,
+			     implied_return_hook *call_back,
+			     void *info)
+{
+	struct fcall_back *cb;
+
+	cb = alloc_fcall_back(IMPLIED_RETURN, call_back, info);
+	add_callback(func_hash, look_for, cb);
+}
+
+void add_macro_assign_hook(const char *look_for, func_hook *call_back,
+			void *info)
+{
+	struct fcall_back *cb;
+
+	cb = alloc_fcall_back(MACRO_ASSIGN, call_back, info);
+	add_callback(func_hash, look_for, cb);
+}
+
+void add_macro_assign_hook_extra(const char *look_for, func_hook *call_back,
+			void *info)
+{
+	struct fcall_back *cb;
+
+	cb = alloc_fcall_back(MACRO_ASSIGN_EXTRA, call_back, info);
+	add_callback(func_hash, look_for, cb);
+}
+
+void return_implies_state(const char *look_for, long long start, long long end,
+			 implication_hook *call_back, void *info)
+{
+	struct fcall_back *cb;
+
+	cb = alloc_fcall_back(RANGED_CALL, call_back, info);
+	cb->range = alloc_range_perm(ll_to_sval(start), ll_to_sval(end));
+	add_callback(func_hash, look_for, cb);
+}
+
+void select_return_states_hook(int type, return_implies_hook *callback)
+{
+	struct return_implies_callback *cb = __alloc_return_implies_callback(0);
+
+	cb->type = type;
+	cb->callback = callback;
+	add_ptr_list(&db_return_states_list, cb);
+}
+
+void select_return_states_before(void_fn *fn)
+{
+	void_fn **p = malloc(sizeof(void_fn *));
+	*p = fn;
+	add_ptr_list(&return_states_before, p);
+}
+
+void select_return_states_after(void_fn *fn)
+{
+	void_fn **p = malloc(sizeof(void_fn *));
+	*p = fn;
+	add_ptr_list(&return_states_after, p);
+}
+
+static void call_return_states_before_hooks(void)
+{
+	void_fn **fn;
+
+	FOR_EACH_PTR(return_states_before, fn) {
+		(*fn)();
+	} END_FOR_EACH_PTR(fn);
+}
+
+static void call_return_states_after_hooks(struct expression *expr)
+{
+	void_fn **fn;
+
+	FOR_EACH_PTR(return_states_after, fn) {
+		(*fn)();
+	} END_FOR_EACH_PTR(fn);
+	__pass_to_client(expr, FUNCTION_CALL_HOOK_AFTER_DB);
+}
+
+static int call_call_backs(struct call_back_list *list, int type,
+			    const char *fn, struct expression *expr)
+{
+	struct fcall_back *tmp;
+	int handled = 0;
+
+	FOR_EACH_PTR(list, tmp) {
+		if (tmp->type == type) {
+			(tmp->u.call_back)(fn, expr, tmp->info);
+			handled = 1;
+		}
+	} END_FOR_EACH_PTR(tmp);
+
+	return handled;
+}
+
+static void call_ranged_call_backs(struct call_back_list *list,
+				const char *fn, struct expression *call_expr,
+				struct expression *assign_expr)
+{
+	struct fcall_back *tmp;
+
+	FOR_EACH_PTR(list, tmp) {
+		(tmp->u.ranged)(fn, call_expr, assign_expr, tmp->info);
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static struct call_back_list *get_same_ranged_call_backs(struct call_back_list *list,
+						struct data_range *drange)
+{
+	struct call_back_list *ret = NULL;
+	struct fcall_back *tmp;
+
+	FOR_EACH_PTR(list, tmp) {
+		if (tmp->type != RANGED_CALL)
+			continue;
+		if (ranges_equiv(tmp->range, drange))
+			add_ptr_list(&ret, tmp);
+	} END_FOR_EACH_PTR(tmp);
+	return ret;
+}
+
+static int in_list_exact_sval(struct range_list *list, struct data_range *drange)
+{
+	struct data_range *tmp;
+
+	FOR_EACH_PTR(list, tmp) {
+		if (ranges_equiv(tmp, drange))
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+	return 0;
+}
+
+static int assign_ranged_funcs(const char *fn, struct expression *expr,
+				 struct call_back_list *call_backs)
+{
+	struct fcall_back *tmp;
+	struct sm_state *sm;
+	char *var_name;
+	struct symbol *sym;
+	struct smatch_state *estate;
+	struct stree *tmp_stree;
+	struct stree *final_states = NULL;
+	struct range_list *handled_ranges = NULL;
+	struct call_back_list *same_range_call_backs = NULL;
+	int handled = 0;
+
+	if (!call_backs)
+		return 0;
+
+	var_name = expr_to_var_sym(expr->left, &sym);
+	if (!var_name || !sym)
+		goto free;
+
+	FOR_EACH_PTR(call_backs, tmp) {
+		if (tmp->type != RANGED_CALL)
+			continue;
+
+		if (in_list_exact_sval(handled_ranges, tmp->range))
+			continue;
+		__push_fake_cur_stree();
+		tack_on(&handled_ranges, tmp->range);
+
+		same_range_call_backs = get_same_ranged_call_backs(call_backs, tmp->range);
+		call_ranged_call_backs(same_range_call_backs, fn, expr->right, expr);
+		__free_ptr_list((struct ptr_list **)&same_range_call_backs);
+
+		estate = alloc_estate_range(tmp->range->min, tmp->range->max);
+		set_extra_mod(var_name, sym, expr->left, estate);
+
+		tmp_stree = __pop_fake_cur_stree();
+		merge_fake_stree(&final_states, tmp_stree);
+		free_stree(&tmp_stree);
+		handled = 1;
+	} END_FOR_EACH_PTR(tmp);
+
+	FOR_EACH_SM(final_states, sm) {
+		__set_sm(sm);
+	} END_FOR_EACH_SM(sm);
+
+	free_stree(&final_states);
+free:
+	free_string(var_name);
+	return handled;
+}
+
+static void call_implies_callbacks(int comparison, struct expression *expr, sval_t sval, int left, struct stree **implied_true, struct stree **implied_false)
+{
+	struct call_back_list *call_backs;
+	struct fcall_back *tmp;
+	const char *fn;
+	struct data_range *value_range;
+	struct stree *true_states = NULL;
+	struct stree *false_states = NULL;
+	struct stree *tmp_stree;
+
+	*implied_true = NULL;
+	*implied_false = NULL;
+	if (expr->fn->type != EXPR_SYMBOL || !expr->fn->symbol)
+		return;
+	fn = expr->fn->symbol->ident->name;
+	call_backs = search_callback(func_hash, (char *)expr->fn->symbol->ident->name);
+	if (!call_backs)
+		return;
+	value_range = alloc_range(sval, sval);
+
+	/* set true states */
+	__push_fake_cur_stree();
+	FOR_EACH_PTR(call_backs, tmp) {
+		if (tmp->type != RANGED_CALL)
+			continue;
+		if (!true_comparison_range_LR(comparison, tmp->range, value_range, left))
+			continue;
+		(tmp->u.ranged)(fn, expr, NULL, tmp->info);
+	} END_FOR_EACH_PTR(tmp);
+	tmp_stree = __pop_fake_cur_stree();
+	merge_fake_stree(&true_states, tmp_stree);
+	free_stree(&tmp_stree);
+
+	/* set false states */
+	__push_fake_cur_stree();
+	FOR_EACH_PTR(call_backs, tmp) {
+		if (tmp->type != RANGED_CALL)
+			continue;
+		if (!false_comparison_range_LR(comparison, tmp->range, value_range, left))
+			continue;
+		(tmp->u.ranged)(fn, expr, NULL, tmp->info);
+	} END_FOR_EACH_PTR(tmp);
+	tmp_stree = __pop_fake_cur_stree();
+	merge_fake_stree(&false_states, tmp_stree);
+	free_stree(&tmp_stree);
+
+	*implied_true = true_states;
+	*implied_false = false_states;
+}
+
+struct db_callback_info {
+	int true_side;
+	int comparison;
+	struct expression *expr;
+	struct range_list *rl;
+	int left;
+	struct stree *stree;
+	struct db_implies_list *callbacks;
+	int prev_return_id;
+	int cull;
+	int has_states;
+	char *ret_str;
+	struct smatch_state *ret_state;
+	struct expression *var_expr;
+	int handled;
+};
+
+static void store_return_state(struct db_callback_info *db_info, const char *ret_str, struct smatch_state *state)
+{
+	db_info->ret_str = alloc_sname(ret_str),
+	db_info->ret_state = state;
+}
+
+static bool fake_a_param_assignment(struct expression *expr, const char *return_str)
+{
+	struct expression *arg, *left, *right, *fake_assign;
+	char *p;
+	int param;
+	char buf[256];
+	char *str;
+
+	if (expr->type != EXPR_ASSIGNMENT || expr->op != '=')
+		return false;
+	left = expr->left;
+	right = expr->right;
+
+	while (right->type == EXPR_ASSIGNMENT)
+		right = strip_expr(right->right);
+	if (!right || right->type != EXPR_CALL)
+		return false;
+
+	p = strchr(return_str, '[');
+	if (!p)
+		return false;
+
+	p++;
+	if (p[0] == '=' && p[1] == '=')
+		p += 2;
+	if (p[0] != '$')
+		return false;
+
+	snprintf(buf, sizeof(buf), "%s", p);
+
+	p = buf;
+	p += 1;
+	param = strtol(p, &p, 10);
+
+	p = strchr(p, ']');
+	if (!p || *p != ']')
+		return false;
+	*p = '\0';
+
+	arg = get_argument_from_call_expr(right->args, param);
+	if (!arg)
+		return false;
+	/*
+	 * This is a sanity check to prevent side effects from evaluating stuff
+	 * twice.
+	 */
+	str = expr_to_chunk_sym_vsl(arg, NULL, NULL);
+	if (!str)
+		return false;
+	free_string(str);
+
+	right = gen_expression_from_key(arg, buf);
+	if (!right)  /* Mostly fails for binops like [$0 + 4032] */
+		return false;
+	fake_assign = assign_expression(left, '=', right);
+	__in_fake_parameter_assign++;
+	__split_expr(fake_assign);
+	__in_fake_parameter_assign--;
+	return true;
+}
+
+static void set_return_state(struct expression *expr, struct db_callback_info *db_info)
+{
+	struct smatch_state *state;
+
+	if (!db_info->ret_state)
+		return;
+
+	state = alloc_estate_rl(cast_rl(get_type(expr), clone_rl(estate_rl(db_info->ret_state))));
+	set_extra_expr_mod(expr, state);
+	db_info->ret_state = NULL;
+	fake_a_param_assignment(db_info->expr, db_info->ret_str);
+	db_info->ret_str = NULL;
+}
+
+static void handle_ret_equals_param(char *ret_string, struct range_list *rl, struct expression *call)
+{
+	char *str;
+	long long param;
+	struct expression *arg;
+	struct range_list *orig;
+
+	str = strstr(ret_string, "==$");
+	if (!str)
+		return;
+	str += 3;
+	param = strtoll(str, NULL, 10);
+	arg = get_argument_from_call_expr(call->args, param);
+	if (!arg)
+		return;
+	get_absolute_rl(arg, &orig);
+	rl = rl_intersection(orig, rl);
+	if (!rl)
+		return;
+	set_extra_expr_nomod(arg, alloc_estate_rl(rl));
+}
+
+static int impossible_limit(struct expression *expr, int param, char *key, char *value)
+{
+	struct expression *arg;
+	struct smatch_state *state;
+	struct range_list *passed;
+	struct range_list *limit;
+	struct symbol *compare_type;
+
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+	if (expr->type != EXPR_CALL)
+		return 0;
+
+	arg = get_argument_from_call_expr(expr->args, param);
+	if (!arg)
+		return 0;
+
+	if (strcmp(key, "$") == 0) {
+		if (!get_implied_rl(arg, &passed))
+			return 0;
+
+		compare_type = get_arg_type(expr->fn, param);
+	} else {
+		char *name;
+		struct symbol *sym;
+
+		name = get_variable_from_key(arg, key, &sym);
+		if (!name || !sym)
+			return 0;
+
+		state = get_state(SMATCH_EXTRA, name, sym);
+		if (!state) {
+			free_string(name);
+			return 0;
+		}
+		passed = estate_rl(state);
+		if (!passed || is_whole_rl(passed)) {
+			free_string(name);
+			return 0;
+		}
+
+		compare_type = get_member_type_from_key(arg, key);
+	}
+
+	passed = cast_rl(compare_type, passed);
+	call_results_to_rl(expr, compare_type, value, &limit);
+	if (!limit || is_whole_rl(limit))
+		return 0;
+	if (possibly_true_rl(passed, SPECIAL_EQUAL, limit))
+		return 0;
+	if (option_debug || local_debug)
+		sm_msg("impossible: %d '%s' limit '%s' == '%s'", param, key, show_rl(passed), value);
+	return 1;
+}
+
+static int is_impossible_data(int type, struct expression *expr, int param, char *key, char *value)
+{
+	if (type == PARAM_LIMIT && impossible_limit(expr, param, key, value))
+		return 1;
+	if (type == COMPARE_LIMIT && param_compare_limit_is_impossible(expr, param, key, value)) {
+		if (local_debug)
+			sm_msg("param_compare_limit_is_impossible: %d %s %s", param, key, value);
+		return 1;
+	}
+	return 0;
+}
+
+static int func_type_mismatch(struct expression *expr, const char *value)
+{
+	struct symbol *type;
+
+	/* This makes faking returns easier */
+	if (!value || value[0] == '\0')
+		return 0;
+
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+
+	/*
+	 * Short cut:  We only care about function pointers that are struct
+	 * members.
+	 *
+	 */
+	if (expr->fn->type == EXPR_SYMBOL)
+		return 0;
+
+	type = get_type(expr->fn);
+	if (!type)
+		return 0;
+	if (type->type == SYM_PTR)
+		type = get_real_base_type(type);
+
+	if (strcmp(type_to_str(type), value) == 0)
+		return 0;
+
+	return 1;
+}
+
+static int db_compare_callback(void *_info, int argc, char **argv, char **azColName)
+{
+	struct db_callback_info *db_info = _info;
+	struct range_list *var_rl = db_info->rl;
+	struct range_list *ret_range;
+	int type, param;
+	char *key, *value;
+	struct return_implies_callback *tmp;
+	struct stree *stree;
+	int return_id;
+	int comparison;
+
+	if (argc != 6)
+		return 0;
+
+	return_id = atoi(argv[0]);
+	type = atoi(argv[2]);
+	param = atoi(argv[3]);
+	key = argv[4];
+	value = argv[5];
+
+	db_info->has_states = 1;
+	if (db_info->prev_return_id != -1 && type == INTERNAL) {
+		set_return_state(db_info->var_expr, db_info);
+		stree = __pop_fake_cur_stree();
+
+		if (!db_info->cull)
+			merge_fake_stree(&db_info->stree, stree);
+		free_stree(&stree);
+		__push_fake_cur_stree();
+		db_info->cull = 0;
+	}
+	db_info->prev_return_id = return_id;
+
+	if (type == INTERNAL && func_type_mismatch(db_info->expr, value))
+		db_info->cull = 1;
+	if (db_info->cull)
+		return 0;
+	if (type == CULL_PATH) {
+		db_info->cull = 1;
+		return 0;
+	}
+
+	if (is_impossible_data(type, db_info->expr, param, key, value)) {
+		db_info->cull = 1;
+		return 0;
+	}
+
+	call_results_to_rl(db_info->expr, get_type(strip_expr(db_info->expr)), argv[1], &ret_range);
+	ret_range = cast_rl(get_type(db_info->expr), ret_range);
+	if (!ret_range)
+		ret_range = alloc_whole_rl(get_type(db_info->expr));
+
+	comparison = db_info->comparison;
+	if (db_info->left)
+		comparison = flip_comparison(comparison);
+
+	if (db_info->true_side) {
+		if (!possibly_true_rl(var_rl, comparison, ret_range))
+			return 0;
+		if (type == PARAM_LIMIT)
+			param_limit_implications(db_info->expr, param, key, value);
+		filter_by_comparison(&var_rl, comparison, ret_range);
+		filter_by_comparison(&ret_range, flip_comparison(comparison), var_rl);
+	} else {
+		if (!possibly_false_rl(var_rl, comparison, ret_range))
+			return 0;
+		if (type == PARAM_LIMIT)
+			param_limit_implications(db_info->expr, param, key, value);
+		filter_by_comparison(&var_rl, negate_comparison(comparison), ret_range);
+		filter_by_comparison(&ret_range, flip_comparison(negate_comparison(comparison)), var_rl);
+	}
+
+	handle_ret_equals_param(argv[1], ret_range, db_info->expr);
+
+	if (type == INTERNAL) {
+		set_state(-1, "unnull_path", NULL, &true_state);
+		__add_return_comparison(strip_expr(db_info->expr), argv[1]);
+		__add_return_to_param_mapping(db_info->expr, argv[1]);
+		store_return_state(db_info, argv[1], alloc_estate_rl(clone_rl(var_rl)));
+	}
+
+	FOR_EACH_PTR(db_info->callbacks, tmp) {
+		if (tmp->type == type)
+			tmp->callback(db_info->expr, param, key, value);
+	} END_FOR_EACH_PTR(tmp);
+
+	return 0;
+}
+
+static void compare_db_return_states_callbacks(struct expression *left, int comparison, struct expression *right, struct stree *implied_true, struct stree *implied_false)
+{
+	struct stree *orig_states;
+	struct stree *stree;
+	struct stree *true_states;
+	struct stree *false_states;
+	struct sm_state *sm;
+	struct db_callback_info db_info = {};
+	struct expression *var_expr;
+	struct expression *call_expr;
+	struct range_list *rl;
+	int call_on_left;
+
+	orig_states = clone_stree(__get_cur_stree());
+
+	/* legacy cruft.  need to fix call_implies_callbacks(). */
+	call_on_left = 1;
+	call_expr = left;
+	var_expr = right;
+	if (left->type != EXPR_CALL) {
+		call_on_left = 0;
+		call_expr = right;
+		var_expr = left;
+	}
+
+	get_absolute_rl(var_expr, &rl);
+
+	db_info.comparison = comparison;
+	db_info.expr = call_expr;
+	db_info.rl = rl;
+	db_info.left = call_on_left;
+	db_info.callbacks = db_return_states_list;
+	db_info.var_expr = var_expr;
+
+	call_return_states_before_hooks();
+
+	db_info.true_side = 1;
+	db_info.stree = NULL;
+	db_info.prev_return_id = -1;
+	__push_fake_cur_stree();
+	sql_select_return_states("return_id, return, type, parameter, key, value",
+				 call_expr, db_compare_callback, &db_info);
+	set_return_state(db_info.var_expr, &db_info);
+	stree = __pop_fake_cur_stree();
+	if (!db_info.cull) {
+		set_return_state(db_info.var_expr, &db_info);
+		merge_fake_stree(&db_info.stree, stree);
+	}
+	free_stree(&stree);
+	true_states = db_info.stree;
+	if (!true_states && db_info.has_states) {
+		__push_fake_cur_stree();
+		set_path_impossible();
+		true_states = __pop_fake_cur_stree();
+	}
+
+	nullify_path();
+	__unnullify_path();
+	FOR_EACH_SM(orig_states, sm) {
+		__set_sm_cur_stree(sm);
+	} END_FOR_EACH_SM(sm);
+
+	db_info.true_side = 0;
+	db_info.stree = NULL;
+	db_info.prev_return_id = -1;
+	db_info.cull = 0;
+	__push_fake_cur_stree();
+	sql_select_return_states("return_id, return, type, parameter, key, value", call_expr,
+			db_compare_callback, &db_info);
+	stree = __pop_fake_cur_stree();
+	if (!db_info.cull) {
+		set_return_state(db_info.var_expr, &db_info);
+		merge_fake_stree(&db_info.stree, stree);
+	}
+	free_stree(&stree);
+	false_states = db_info.stree;
+	if (!false_states && db_info.has_states) {
+		__push_fake_cur_stree();
+		set_path_impossible();
+		false_states = __pop_fake_cur_stree();
+	}
+
+	nullify_path();
+	__unnullify_path();
+	FOR_EACH_SM(orig_states, sm) {
+		__set_sm_cur_stree(sm);
+	} END_FOR_EACH_SM(sm);
+
+	free_stree(&orig_states);
+
+	FOR_EACH_SM(true_states, sm) {
+		__set_true_false_sm(sm, NULL);
+	} END_FOR_EACH_SM(sm);
+	FOR_EACH_SM(false_states, sm) {
+		__set_true_false_sm(NULL, sm);
+	} END_FOR_EACH_SM(sm);
+
+	free_stree(&true_states);
+	free_stree(&false_states);
+
+	call_return_states_after_hooks(call_expr);
+
+	FOR_EACH_SM(implied_true, sm) {
+		__set_true_false_sm(sm, NULL);
+	} END_FOR_EACH_SM(sm);
+	FOR_EACH_SM(implied_false, sm) {
+		__set_true_false_sm(NULL, sm);
+	} END_FOR_EACH_SM(sm);
+}
+
+void function_comparison(struct expression *left, int comparison, struct expression *right)
+{
+	struct expression *var_expr;
+	struct expression *call_expr;
+	struct stree *implied_true = NULL;
+	struct stree *implied_false = NULL;
+	struct range_list *rl;
+	sval_t sval;
+	int call_on_left;
+
+	if (unreachable())
+		return;
+
+	/* legacy cruft.  need to fix call_implies_callbacks(). */
+	call_on_left = 1;
+	call_expr = left;
+	var_expr = right;
+	if (left->type != EXPR_CALL) {
+		call_on_left = 0;
+		call_expr = right;
+		var_expr = left;
+	}
+
+	get_absolute_rl(var_expr, &rl);
+
+	if (rl_to_sval(rl, &sval))
+		call_implies_callbacks(comparison, call_expr, sval, call_on_left, &implied_true, &implied_false);
+
+	compare_db_return_states_callbacks(left, comparison, right, implied_true, implied_false);
+	free_stree(&implied_true);
+	free_stree(&implied_false);
+}
+
+static void call_ranged_return_hooks(struct db_callback_info *db_info)
+{
+	struct call_back_list *call_backs;
+	struct expression *expr;
+	struct fcall_back *tmp;
+	char *fn;
+
+	expr = strip_expr(db_info->expr);
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+	if (expr->type != EXPR_CALL ||
+	    expr->fn->type != EXPR_SYMBOL)
+		return;
+
+	fn = expr->fn->symbol_name->name;
+
+	call_backs = search_callback(func_hash, fn);
+	FOR_EACH_PTR(call_backs, tmp) {
+		struct range_list *range_rl = NULL;
+
+		if (tmp->type != RANGED_CALL)
+			continue;
+		add_range(&range_rl, tmp->range->min, tmp->range->max);
+		range_rl = cast_rl(estate_type(db_info->ret_state), range_rl);
+		if (possibly_true_rl(range_rl, SPECIAL_EQUAL, estate_rl(db_info->ret_state))) {
+			if (!possibly_true_rl(rl_invert(range_rl), SPECIAL_EQUAL, estate_rl(db_info->ret_state)))
+				(tmp->u.ranged)(fn, expr, db_info->expr, tmp->info);
+			else
+				db_info->handled = -1;
+		}
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static int db_assign_return_states_callback(void *_info, int argc, char **argv, char **azColName)
+{
+	struct db_callback_info *db_info = _info;
+	struct range_list *ret_range;
+	int type, param;
+	char *key, *value;
+	struct return_implies_callback *tmp;
+	struct stree *stree;
+	int return_id;
+
+	if (argc != 6)
+		return 0;
+
+	return_id = atoi(argv[0]);
+	type = atoi(argv[2]);
+	param = atoi(argv[3]);
+	key = argv[4];
+	value = argv[5];
+
+	if (db_info->prev_return_id != -1 && type == INTERNAL) {
+		call_ranged_return_hooks(db_info);
+		set_return_state(db_info->expr->left, db_info);
+		stree = __pop_fake_cur_stree();
+		if (!db_info->cull)
+			merge_fake_stree(&db_info->stree, stree);
+		free_stree(&stree);
+		__push_fake_cur_stree();
+		db_info->cull = 0;
+	}
+	db_info->prev_return_id = return_id;
+
+	if (type == INTERNAL && func_type_mismatch(db_info->expr, value))
+		db_info->cull = 1;
+	if (db_info->cull)
+		return 0;
+	if (type == CULL_PATH) {
+		db_info->cull = 1;
+		return 0;
+	}
+	if (is_impossible_data(type, db_info->expr, param, key, value)) {
+		db_info->cull = 1;
+		return 0;
+	}
+
+	if (type == PARAM_LIMIT)
+		param_limit_implications(db_info->expr, param, key, value);
+
+	db_info->handled = 1;
+	call_results_to_rl(db_info->expr->right, get_type(strip_expr(db_info->expr->right)), argv[1], &ret_range);
+	if (!ret_range)
+		ret_range = alloc_whole_rl(get_type(strip_expr(db_info->expr->right)));
+	ret_range = cast_rl(get_type(db_info->expr->right), ret_range);
+
+	if (type == INTERNAL) {
+		set_state(-1, "unnull_path", NULL, &true_state);
+		__add_return_comparison(strip_expr(db_info->expr->right), argv[1]);
+		__add_comparison_info(db_info->expr->left, strip_expr(db_info->expr->right), argv[1]);
+		__add_return_to_param_mapping(db_info->expr, argv[1]);
+		store_return_state(db_info, argv[1], alloc_estate_rl(ret_range));
+	}
+
+	FOR_EACH_PTR(db_return_states_list, tmp) {
+		if (tmp->type == type)
+			tmp->callback(db_info->expr, param, key, value);
+	} END_FOR_EACH_PTR(tmp);
+
+	return 0;
+}
+
+static int db_return_states_assign(struct expression *expr)
+{
+	struct expression *right;
+	struct sm_state *sm;
+	struct stree *stree;
+	struct db_callback_info db_info = {};
+
+	right = strip_expr(expr->right);
+
+	db_info.prev_return_id = -1;
+	db_info.expr = expr;
+	db_info.stree = NULL;
+	db_info.handled = 0;
+
+	call_return_states_before_hooks();
+
+	__push_fake_cur_stree();
+	sql_select_return_states("return_id, return, type, parameter, key, value",
+			right, db_assign_return_states_callback, &db_info);
+	if (option_debug) {
+		sm_msg("%s return_id %d return_ranges %s",
+			db_info.cull ? "culled" : "merging",
+			db_info.prev_return_id,
+			db_info.ret_state ? db_info.ret_state->name : "'<empty>'");
+	}
+	if (db_info.handled)
+		call_ranged_return_hooks(&db_info);
+	set_return_state(db_info.expr->left, &db_info);
+	stree = __pop_fake_cur_stree();
+	if (!db_info.cull)
+		merge_fake_stree(&db_info.stree, stree);
+	free_stree(&stree);
+
+	if (!db_info.stree && db_info.cull) { /* this means we culled everything */
+		set_extra_expr_mod(expr->left, alloc_estate_whole(get_type(expr->left)));
+		set_path_impossible();
+	}
+	FOR_EACH_SM(db_info.stree, sm) {
+		__set_sm(sm);
+	} END_FOR_EACH_SM(sm);
+
+	free_stree(&db_info.stree);
+	call_return_states_after_hooks(right);
+
+	return db_info.handled;
+}
+
+static int handle_implied_return(struct expression *expr)
+{
+	struct range_list *rl;
+
+	if (!get_implied_return(expr->right, &rl))
+		return 0;
+	rl = cast_rl(get_type(expr->left), rl);
+	set_extra_expr_mod(expr->left, alloc_estate_rl(rl));
+	return 1;
+}
+
+static void match_assign_call(struct expression *expr)
+{
+	struct call_back_list *call_backs;
+	const char *fn;
+	struct expression *right;
+	int handled = 0;
+	struct range_list *rl;
+
+	if (expr->op != '=')
+		return;
+
+	right = strip_expr(expr->right);
+	if (right->fn->type != EXPR_SYMBOL || !right->fn->symbol) {
+		handled |= db_return_states_assign(expr);
+		if (!handled)
+			goto assigned_unknown;
+		return;
+	}
+	if (is_fake_call(right)) {
+		set_extra_expr_mod(expr->left, alloc_estate_whole(get_type(expr->left)));
+		return;
+	}
+
+	fn = right->fn->symbol->ident->name;
+	call_backs = search_callback(func_hash, (char *)fn);
+
+	/*
+	 * The ordering here is sort of important.
+	 * One example, of how this matters is that when we do:
+	 *
+	 * 	len = strlen(str);
+	 *
+	 * That is handled by smatch_common_functions.c and smatch_strlen.c.
+	 * They use implied_return and function_assign_hook respectively.
+	 * We want to get the implied return first before we do the function
+	 * assignment hook otherwise we end up writing the wrong thing for len
+	 * in smatch_extra.c because we assume that it already holds the
+	 * strlen() when we haven't set it yet.
+	 */
+
+	if (db_return_states_assign(expr) == 1)
+		handled = 1;
+	else
+		handled = assign_ranged_funcs(fn, expr, call_backs);
+	handled |= handle_implied_return(expr);
+
+
+	call_call_backs(call_backs, ASSIGN_CALL, fn, expr);
+
+	if (handled)
+		return;
+
+assigned_unknown:
+	get_absolute_rl(expr->right, &rl);
+	rl = cast_rl(get_type(expr->left), rl);
+	set_extra_expr_mod(expr->left, alloc_estate_rl(rl));
+}
+
+static int db_return_states_callback(void *_info, int argc, char **argv, char **azColName)
+{
+	struct db_callback_info *db_info = _info;
+	struct range_list *ret_range;
+	int type, param;
+	char *key, *value;
+	struct return_implies_callback *tmp;
+	struct stree *stree;
+	int return_id;
+	char buf[64];
+
+	if (argc != 6)
+		return 0;
+
+	return_id = atoi(argv[0]);
+	type = atoi(argv[2]);
+	param = atoi(argv[3]);
+	key = argv[4];
+	value = argv[5];
+
+	if (db_info->prev_return_id != -1 && type == INTERNAL) {
+		stree = __pop_fake_cur_stree();
+		if (!db_info->cull)
+			merge_fake_stree(&db_info->stree, stree);
+		free_stree(&stree);
+		__push_fake_cur_stree();
+		__unnullify_path();
+		db_info->cull = 0;
+	}
+	db_info->prev_return_id = return_id;
+
+	if (type == INTERNAL && func_type_mismatch(db_info->expr, value))
+		db_info->cull = 1;
+	if (db_info->cull)
+		return 0;
+	if (type == CULL_PATH) {
+		db_info->cull = 1;
+		return 0;
+	}
+	if (is_impossible_data(type, db_info->expr, param, key, value)) {
+		db_info->cull = 1;
+		return 0;
+	}
+
+	if (type == PARAM_LIMIT)
+		param_limit_implications(db_info->expr, param, key, value);
+
+	call_results_to_rl(db_info->expr, get_type(strip_expr(db_info->expr)), argv[1], &ret_range);
+	ret_range = cast_rl(get_type(db_info->expr), ret_range);
+
+	if (type == INTERNAL) {
+		set_state(-1, "unnull_path", NULL, &true_state);
+		__add_return_comparison(strip_expr(db_info->expr), argv[1]);
+		__add_return_to_param_mapping(db_info->expr, argv[1]);
+	}
+
+
+	FOR_EACH_PTR(db_return_states_list, tmp) {
+		if (tmp->type == type)
+			tmp->callback(db_info->expr, param, key, value);
+	} END_FOR_EACH_PTR(tmp);
+
+	/*
+	 * We want to store the return values so that we can split the strees
+	 * in smatch_db.c.  This uses set_state() directly because it's not a
+	 * real smatch_extra state.
+	 */
+	snprintf(buf, sizeof(buf), "return %p", db_info->expr);
+	set_state(SMATCH_EXTRA, buf, NULL, alloc_estate_rl(ret_range));
+
+	return 0;
+}
+
+static void db_return_states(struct expression *expr)
+{
+	struct sm_state *sm;
+	struct stree *stree;
+	struct db_callback_info db_info = {};
+
+	if (!__get_cur_stree())  /* no return functions */
+		return;
+
+	db_info.prev_return_id = -1;
+	db_info.expr = expr;
+	db_info.stree = NULL;
+
+	call_return_states_before_hooks();
+
+	__push_fake_cur_stree();
+	__unnullify_path();
+	sql_select_return_states("return_id, return, type, parameter, key, value",
+			expr, db_return_states_callback, &db_info);
+	stree = __pop_fake_cur_stree();
+	if (!db_info.cull)
+		merge_fake_stree(&db_info.stree, stree);
+	free_stree(&stree);
+
+	FOR_EACH_SM(db_info.stree, sm) {
+		__set_sm(sm);
+	} END_FOR_EACH_SM(sm);
+
+	free_stree(&db_info.stree);
+	call_return_states_after_hooks(expr);
+}
+
+static int is_condition_call(struct expression *expr)
+{
+	struct expression *tmp;
+
+	FOR_EACH_PTR_REVERSE(big_condition_stack, tmp) {
+		if (expr == tmp || expr_get_parent_expr(expr) == tmp)
+			return 1;
+		if (tmp->pos.line < expr->pos.line)
+			return 0;
+	} END_FOR_EACH_PTR_REVERSE(tmp);
+
+	return 0;
+}
+
+static void db_return_states_call(struct expression *expr)
+{
+	if (unreachable())
+		return;
+
+	if (is_assigned_call(expr))
+		return;
+	if (is_condition_call(expr))
+		return;
+	db_return_states(expr);
+}
+
+static void match_function_call(struct expression *expr)
+{
+	struct call_back_list *call_backs;
+
+	if (expr->fn->type == EXPR_SYMBOL && expr->fn->symbol) {
+		call_backs = search_callback(func_hash, (char *)expr->fn->symbol->ident->name);
+		if (call_backs)
+			call_call_backs(call_backs, REGULAR_CALL,
+					expr->fn->symbol->ident->name, expr);
+	}
+	db_return_states_call(expr);
+}
+
+static void match_macro_assign(struct expression *expr)
+{
+	struct call_back_list *call_backs;
+	const char *macro;
+	struct expression *right;
+
+	right = strip_expr(expr->right);
+	macro = get_macro_name(right->pos);
+	call_backs = search_callback(func_hash, (char *)macro);
+	if (!call_backs)
+		return;
+	call_call_backs(call_backs, MACRO_ASSIGN, macro, expr);
+	call_call_backs(call_backs, MACRO_ASSIGN_EXTRA, macro, expr);
+}
+
+int get_implied_return(struct expression *expr, struct range_list **rl)
+{
+	struct call_back_list *call_backs;
+	struct fcall_back *tmp;
+	int handled = 0;
+	char *fn;
+
+	*rl = NULL;
+
+	expr = strip_expr(expr);
+	fn = expr_to_var(expr->fn);
+	if (!fn)
+		goto out;
+
+	call_backs = search_callback(func_hash, fn);
+
+	FOR_EACH_PTR(call_backs, tmp) {
+		if (tmp->type == IMPLIED_RETURN) {
+			(tmp->u.implied_return)(expr, tmp->info, rl);
+			handled = 1;
+		}
+	} END_FOR_EACH_PTR(tmp);
+
+out:
+	free_string(fn);
+	return handled;
+}
+
+void create_function_hook_hash(void)
+{
+	func_hash = create_function_hashtable(5000);
+}
+
+void register_function_hooks(int id)
+{
+	add_hook(&match_function_call, CALL_HOOK_AFTER_INLINE);
+	add_hook(&match_assign_call, CALL_ASSIGNMENT_HOOK);
+	add_hook(&match_macro_assign, MACRO_ASSIGNMENT_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:26 2018
+++ new/usr/src/tools/smatch/src/smatch_function_info.c	Fri Dec 21 15:00:26 2018
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Record parameter types in the database.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+static void match_def(struct symbol *sym)
+{
+	struct symbol *arg;
+	int i;
+
+	i = -1;
+	FOR_EACH_PTR(sym->ctype.base_type->arguments, arg) {
+		i++;
+		sql_insert_function_type(i, type_to_str(get_real_base_type(arg)));
+	} END_FOR_EACH_PTR(arg);
+}
+
+void register_function_info(int id)
+{
+	my_id = id;
+	add_hook(match_def, FUNC_DEF_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:26 2018
+++ new/usr/src/tools/smatch/src/smatch_function_ptrs.c	Fri Dec 21 15:00:26 2018
@@ -0,0 +1,359 @@
+/*
+ * Copyright (C) 2013 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Track how functions are saved as various struct members or passed as
+ * parameters.
+ *
+ */
+
+#include "scope.h"
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+static char *get_from__symbol_get(struct expression *expr)
+{
+	struct expression *arg;
+
+	/*
+	 * typeof(&dib0070_attach) __a =
+	 * ((((typeof(&dib0070_attach)) (__symbol_get("dib0070_attach")))) ?:
+	 *  (__request_module(true, "symbol:" "dib0070_attach"), (((typeof(&dib0070_attach))(__symbol_get("dib0070_attach"))))));
+	 */
+
+	expr = strip_expr(expr);
+
+	if (expr->type != EXPR_CALL)
+		return NULL;
+	if (!sym_name_is("__symbol_get", expr->fn))
+		return NULL;
+	arg = get_argument_from_call_expr(expr->args, 0);
+	if (!arg || arg->type != EXPR_STRING)
+		return NULL;
+
+	return alloc_string(arg->string->data);
+}
+
+static char *get_array_ptr(struct expression *expr)
+{
+	struct expression *array;
+	struct symbol *type;
+	char *name;
+	char buf[256];
+
+	array = get_array_base(expr);
+
+	if (array) {
+		name = get_member_name(array);
+		if (name)
+			return name;
+	}
+
+	/* FIXME:  is_array() should probably be is_array_element() */
+	type = get_type(expr);
+	if (!array && type && type->type == SYM_ARRAY)
+		array = expr;
+	if (array) {
+		name = expr_to_var(array);
+		if (!name)
+			return NULL;
+		snprintf(buf, sizeof(buf), "%s[]", name);
+		return alloc_string(buf);
+	}
+
+	expr = get_assigned_expr(expr);
+	array = get_array_base(expr);
+	if (!array)
+		return NULL;
+	name = expr_to_var(array);
+	if (!name)
+		return NULL;
+	snprintf(buf, sizeof(buf), "%s[]", name);
+	free_string(name);
+	return alloc_string(buf);
+}
+
+static int is_local_symbol(struct symbol *sym)
+{
+	if (!sym ||
+	    !(sym->ctype.modifiers & MOD_TOPLEVEL))
+		return 1;
+	return 0;
+}
+
+static char *ptr_prefix(struct symbol *sym)
+{
+	static char buf[128];
+
+
+	if (is_local_symbol(sym))
+		snprintf(buf, sizeof(buf), "%s ptr", get_function());
+	else if (sym && toplevel(sym->scope))
+		snprintf(buf, sizeof(buf), "%s ptr", get_base_file());
+	else
+		snprintf(buf, sizeof(buf), "ptr");
+
+	return buf;
+}
+
+char *get_returned_ptr(struct expression *expr)
+{
+	struct symbol *type;
+	char *name;
+	char buf[256];
+
+	if (expr->type != EXPR_CALL)
+		return NULL;
+	if (!expr->fn || expr->fn->type != EXPR_SYMBOL)
+		return NULL;
+
+	type = get_type(expr);
+	if (type && type->type == SYM_PTR)
+		type = get_real_base_type(type);
+	if (!type || type->type != SYM_FN)
+		return NULL;
+
+	name = expr_to_var(expr->fn);
+	if (!name)
+		return NULL;
+	snprintf(buf, sizeof(buf), "r %s()", name);
+	free_string(name);
+	return alloc_string(buf);
+}
+
+char *get_fnptr_name(struct expression *expr)
+{
+	char *name;
+
+	expr = strip_expr(expr);
+
+	/* (*ptrs[0])(a, b, c) is the same as ptrs[0](a, b, c); */
+	if (expr->type == EXPR_PREOP && expr->op == '*')
+		expr = strip_expr(expr->unop);
+
+	name = get_from__symbol_get(expr);
+	if (name)
+		return name;
+
+	name = get_array_ptr(expr);
+	if (name)
+		return name;
+
+	name = get_returned_ptr(expr);
+	if (name)
+		return name;
+
+	name = get_member_name(expr);
+	if (name)
+		return name;
+
+	if (expr->type == EXPR_SYMBOL) {
+		int param;
+		char buf[256];
+		struct symbol *sym;
+		struct symbol *type;
+
+		param = get_param_num_from_sym(expr->symbol);
+		if (param >= 0) {
+			snprintf(buf, sizeof(buf), "%s param %d", get_function(), param);
+			return alloc_string(buf);
+		}
+
+		name =  expr_to_var_sym(expr, &sym);
+		if (!name)
+			return NULL;
+		type = get_type(expr);
+		if (type && type->type == SYM_PTR) {
+			snprintf(buf, sizeof(buf), "%s %s", ptr_prefix(sym), name);
+			free_string(name);
+			return alloc_string(buf);
+		}
+		return name;
+	}
+	return expr_to_var(expr);
+}
+
+static void match_passes_function_pointer(struct expression *expr)
+{
+	struct expression *arg, *tmp;
+	struct symbol *type;
+	char *called_name;
+	char *fn_name;
+	char ptr_name[256];
+	int i;
+
+
+	i = -1;
+	FOR_EACH_PTR(expr->args, arg) {
+		i++;
+
+		tmp = strip_expr(arg);
+		if (tmp->type == EXPR_PREOP && tmp->op == '&')
+			tmp = strip_expr(tmp->unop);
+
+		type = get_type(tmp);
+		if (type && type->type == SYM_PTR)
+			type = get_real_base_type(type);
+		if (!type || type->type != SYM_FN)
+			continue;
+
+		called_name = expr_to_var(expr->fn);
+		if (!called_name)
+			return;
+		fn_name = get_fnptr_name(tmp);
+		if (!fn_name)
+			goto free;
+
+		snprintf(ptr_name, sizeof(ptr_name), "%s param %d", called_name, i);
+		sql_insert_function_ptr(fn_name, ptr_name);
+free:
+		free_string(fn_name);
+		free_string(called_name);
+	} END_FOR_EACH_PTR(arg);
+
+}
+
+static int get_row_count(void *_row_count, int argc, char **argv, char **azColName)
+{
+	int *row_count = _row_count;
+
+	*row_count = 0;
+	if (argc != 1)
+		return 0;
+	*row_count = atoi(argv[0]);
+	return 0;
+}
+
+static int can_hold_function_ptr(struct expression *expr)
+{
+	struct symbol *type;
+
+	type = get_type(expr);
+	if (!type)
+		return 0;
+	if (type->type == SYM_PTR || type->type == SYM_ARRAY) {
+		type = get_real_base_type(type);
+		if (!type)
+			return 0;
+	}
+	if (type->type == SYM_FN)
+		return 1;
+	if (type == &ulong_ctype && expr->type == EXPR_DEREF)
+		return 1;
+	if (type == &void_ctype)
+		return 1;
+	return 0;
+}
+
+static void match_function_assign(struct expression *expr)
+{
+	struct expression *right;
+	struct symbol *type;
+	char *fn_name;
+	char *ptr_name;
+
+	if (__in_fake_assign)
+		return;
+
+	right = strip_expr(expr->right);
+	if (right->type == EXPR_PREOP && right->op == '&')
+		right = strip_expr(right->unop);
+
+	if (right->type != EXPR_SYMBOL &&
+	    right->type != EXPR_DEREF)
+		return;
+
+	if (!can_hold_function_ptr(right) ||
+	    !can_hold_function_ptr(expr->left))
+		return;
+
+	fn_name = get_fnptr_name(right);
+	ptr_name = get_fnptr_name(expr->left);
+	if (!fn_name || !ptr_name)
+		goto free;
+	if (strcmp(fn_name, ptr_name) == 0)
+		goto free;
+
+
+	type = get_type(right);
+	if (!type)
+		return;
+	if (type->type == SYM_PTR || type->type == SYM_ARRAY) {
+		type = get_real_base_type(type);
+		if (!type)
+			return;
+	}
+	if (type->type != SYM_FN) {
+		int count = 0;
+
+		/* look it up in function_ptr */
+		run_sql(get_row_count, &count,
+			"select count(*) from function_ptr where ptr = '%s'",
+			fn_name);
+		if (count == 0)
+			goto free;
+	}
+
+	sql_insert_function_ptr(fn_name, ptr_name);
+free:
+	free_string(fn_name);
+	free_string(ptr_name);
+}
+
+static void match_returns_function_pointer(struct expression *expr)
+{
+	struct symbol *type;
+	char *fn_name;
+	char ptr_name[256];
+
+	if (__inline_fn)
+		return;
+
+	type = get_real_base_type(cur_func_sym);
+	if (!type || type->type != SYM_FN)
+		return;
+	type = get_real_base_type(type);
+	if (!type || type->type != SYM_PTR)
+		return;
+	type = get_real_base_type(type);
+	if (!type || type->type != SYM_FN)
+		return;
+
+	if (expr->type == EXPR_PREOP && expr->op == '&')
+		expr = strip_expr(expr->unop);
+
+	fn_name = get_fnptr_name(expr);
+	if (!fn_name)
+		return;
+	snprintf(ptr_name, sizeof(ptr_name), "r %s()", get_function());
+	sql_insert_function_ptr(fn_name, ptr_name);
+}
+
+void register_function_ptrs(int id)
+{
+	my_id = id;
+
+	if (!option_info)
+		return;
+
+	add_hook(&match_passes_function_pointer, FUNCTION_CALL_HOOK);
+	add_hook(&match_returns_function_pointer, RETURN_HOOK);
+	add_hook(&match_function_assign, ASSIGNMENT_HOOK);
+	add_hook(&match_function_assign, GLOBAL_ASSIGNMENT_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:26 2018
+++ new/usr/src/tools/smatch/src/smatch_helper.c	Fri Dec 21 15:00:26 2018
@@ -0,0 +1,1118 @@
+/*
+ * Copyright (C) 2006 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Miscellaneous helper functions.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "allocate.h"
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+#define VAR_LEN 512
+
+char *alloc_string(const char *str)
+{
+	char *tmp;
+
+	if (!str)
+		return NULL;
+	tmp = malloc(strlen(str) + 1);
+	strcpy(tmp, str);
+	return tmp;
+}
+
+void free_string(char *str)
+{
+	free(str);
+}
+
+void remove_parens(char *str)
+{
+	char *src, *dst;
+
+	dst = src = str;
+	while (*src != '\0') {
+		if (*src == '(' || *src == ')') {
+			src++;
+			continue;
+		}
+		*dst++ = *src++;
+	}
+	*dst = *src;
+}
+
+struct smatch_state *alloc_state_num(int num)
+{
+	struct smatch_state *state;
+	static char buff[256];
+
+	state = __alloc_smatch_state(0);
+	snprintf(buff, 255, "%d", num);
+	buff[255] = '\0';
+	state->name = alloc_string(buff);
+	state->data = INT_PTR(num);
+	return state;
+}
+
+struct smatch_state *alloc_state_str(const char *name)
+{
+	struct smatch_state *state;
+
+	state = __alloc_smatch_state(0);
+	state->name = alloc_string(name);
+	return state;
+}
+
+struct smatch_state *alloc_state_expr(struct expression *expr)
+{
+	struct smatch_state *state;
+	char *name;
+
+	state = __alloc_smatch_state(0);
+	expr = strip_expr(expr);
+	name = expr_to_str(expr);
+	state->name = alloc_sname(name);
+	free_string(name);
+	state->data = expr;
+	return state;
+}
+
+void append(char *dest, const char *data, int buff_len)
+{
+	strncat(dest, data, buff_len - strlen(dest) - 1);
+}
+
+/*
+ * If you have "foo(a, b, 1);" then use
+ * get_argument_from_call_expr(expr, 0) to return the expression for
+ * a.  Yes, it does start counting from 0.
+ */
+struct expression *get_argument_from_call_expr(struct expression_list *args,
+					       int num)
+{
+	struct expression *expr;
+	int i = 0;
+
+	if (!args)
+		return NULL;
+
+	FOR_EACH_PTR(args, expr) {
+		if (i == num)
+			return expr;
+		i++;
+	} END_FOR_EACH_PTR(expr);
+	return NULL;
+}
+
+static struct expression *get_array_expr(struct expression *expr)
+{
+	struct expression *parent;
+	struct symbol *type;
+
+	if (expr->type != EXPR_BINOP || expr->op != '+')
+		return NULL;
+
+	type = get_type(expr->left);
+	if (!type)
+		return NULL;
+	if (type->type == SYM_ARRAY)
+		return expr->left;
+	if (type->type != SYM_PTR)
+		return NULL;
+
+	parent = expr_get_parent_expr(expr);
+	if (!parent)  /* Sometimes we haven't set up the ->parent yet. FIXME!! */
+		return expr->left;
+	if (parent->type == EXPR_PREOP && parent->op == '*')
+		return expr->left;
+
+	return NULL;
+}
+
+static void __get_variable_from_expr(struct symbol **sym_ptr, char *buf,
+				     struct expression *expr, int len,
+				     int *complicated, int no_parens)
+{
+
+
+	if (!expr) {
+		/* can't happen on valid code */
+		*complicated = 1;
+		return;
+	}
+
+	switch (expr->type) {
+	case EXPR_DEREF: {
+		struct expression *deref;
+		int op;
+
+		deref = expr->deref;
+		op = deref->op;
+		if (op == '*') {
+			struct expression *unop = strip_expr(deref->unop);
+
+			if (unop->type == EXPR_PREOP && unop->op == '&') {
+				deref = unop->unop;
+				op = '.';
+			} else {
+				deref = deref->unop;
+				if (!is_pointer(deref))
+					op = '.';
+			}
+		}
+
+		__get_variable_from_expr(sym_ptr, buf, deref, len, complicated, no_parens);
+
+		if (op == '*')
+			append(buf, "->", len);
+		else
+			append(buf, ".", len);
+
+		if (expr->member)
+			append(buf, expr->member->name, len);
+		else
+			append(buf, "unknown_member", len);
+
+		return;
+	}
+	case EXPR_SYMBOL:
+		if (expr->symbol_name)
+			append(buf, expr->symbol_name->name, len);
+		if (sym_ptr) {
+			if (*sym_ptr)
+				*complicated = 1;
+			*sym_ptr = expr->symbol;
+		}
+		return;
+	case EXPR_PREOP: {
+		const char *tmp;
+
+		if (get_expression_statement(expr)) {
+			*complicated = 2;
+			return;
+		}
+
+		if (expr->op == '(') {
+			if (!no_parens && expr->unop->type != EXPR_SYMBOL)
+				append(buf, "(", len);
+		} else if (expr->op != '*' || !get_array_expr(expr->unop)) {
+			tmp = show_special(expr->op);
+			append(buf, tmp, len);
+		}
+		__get_variable_from_expr(sym_ptr, buf, expr->unop,
+						 len, complicated, no_parens);
+
+		if (expr->op == '(' && !no_parens && expr->unop->type != EXPR_SYMBOL)
+			append(buf, ")", len);
+
+		if (expr->op == SPECIAL_DECREMENT ||
+				expr->op == SPECIAL_INCREMENT)
+			*complicated = 1;
+
+		return;
+	}
+	case EXPR_POSTOP: {
+		const char *tmp;
+
+		__get_variable_from_expr(sym_ptr, buf, expr->unop,
+						 len, complicated, no_parens);
+		tmp = show_special(expr->op);
+		append(buf, tmp, len);
+
+		if (expr->op == SPECIAL_DECREMENT || expr->op == SPECIAL_INCREMENT)
+			*complicated = 1;
+		return;
+	}
+	case EXPR_ASSIGNMENT:
+	case EXPR_COMPARE:
+	case EXPR_LOGICAL:
+	case EXPR_BINOP: {
+		char tmp[10];
+		struct expression *array_expr;
+
+		*complicated = 1;
+		array_expr = get_array_expr(expr);
+		if (array_expr) {
+			__get_variable_from_expr(sym_ptr, buf, array_expr, len, complicated, no_parens);
+			append(buf, "[", len);
+		} else {
+			__get_variable_from_expr(sym_ptr, buf, expr->left, len, complicated, no_parens);
+			snprintf(tmp, sizeof(tmp), " %s ", show_special(expr->op));
+			append(buf, tmp, len);
+		}
+		__get_variable_from_expr(NULL, buf, expr->right, len, complicated, no_parens);
+		if (array_expr)
+			append(buf, "]", len);
+		return;
+	}
+	case EXPR_VALUE: {
+		char tmp[25];
+
+		*complicated = 1;
+		snprintf(tmp, 25, "%lld", expr->value);
+		append(buf, tmp, len);
+		return;
+	}
+	case EXPR_STRING:
+		append(buf, "\"", len);
+		if (expr->string)
+			append(buf, expr->string->data, len);
+		append(buf, "\"", len);
+		return;
+	case EXPR_CALL: {
+		struct expression *tmp;
+		int i;
+
+		*complicated = 1;
+		__get_variable_from_expr(NULL, buf, expr->fn, len, complicated, no_parens);
+		append(buf, "(", len);
+		i = 0;
+		FOR_EACH_PTR(expr->args, tmp) {
+			if (i++)
+				append(buf, ", ", len);
+			__get_variable_from_expr(NULL, buf, tmp, len, complicated, no_parens);
+		} END_FOR_EACH_PTR(tmp);
+		append(buf, ")", len);
+		return;
+	}
+	case EXPR_CAST:
+	case EXPR_FORCE_CAST:
+		__get_variable_from_expr(sym_ptr, buf,
+					 expr->cast_expression, len,
+					 complicated, no_parens);
+		return;
+	case EXPR_SIZEOF: {
+		sval_t sval;
+		int size;
+		char tmp[25];
+
+		if (expr->cast_type && get_base_type(expr->cast_type)) {
+			size = type_bytes(get_base_type(expr->cast_type));
+			snprintf(tmp, 25, "%d", size);
+			append(buf, tmp, len);
+		} else if (get_value(expr, &sval)) {
+			snprintf(tmp, 25, "%s", sval_to_str(sval));
+			append(buf, tmp, len);
+		}
+		return;
+	}
+	case EXPR_IDENTIFIER:
+		*complicated = 1;
+		if (expr->expr_ident)
+			append(buf, expr->expr_ident->name, len);
+		return;
+	default:
+		*complicated = 1;
+		//printf("unknown type = %d\n", expr->type);
+		return;
+	}
+}
+
+struct expr_str_cache_results {
+	struct expression *expr;
+	int no_parens;
+	char str[VAR_LEN];
+	struct symbol *sym;
+	int complicated;
+};
+
+static void get_variable_from_expr(struct symbol **sym_ptr, char *buf,
+				     struct expression *expr, int len,
+				     int *complicated, int no_parens)
+{
+	static struct expr_str_cache_results cached[8];
+	struct symbol *tmp_sym = NULL;
+	static int idx;
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(cached); i++) {
+		if (expr == cached[i].expr &&
+		    no_parens == cached[i].no_parens) {
+			strncpy(buf, cached[i].str, len);
+			if (sym_ptr)
+				*sym_ptr = cached[i].sym;
+			*complicated = cached[i].complicated;
+			return;
+		}
+	}
+
+	__get_variable_from_expr(&tmp_sym, buf, expr, len, complicated, no_parens);
+	if (sym_ptr)
+		*sym_ptr = tmp_sym;
+
+	cached[idx].expr = expr;
+	cached[idx].no_parens = no_parens;
+	strncpy(cached[idx].str, buf, VAR_LEN);
+	cached[idx].sym = tmp_sym;
+	cached[idx].complicated = *complicated;
+
+	idx = (idx + 1) % ARRAY_SIZE(cached);
+}
+
+/*
+ * This is returns a stylized "c looking" representation of the
+ * variable name.
+ *
+ * It uses the same buffer every time so you have to save the result
+ * yourself if you want to keep it.
+ *
+ */
+
+char *expr_to_str_sym(struct expression *expr, struct symbol **sym_ptr)
+{
+	static char var_name[VAR_LEN];
+	int complicated = 0;
+
+	if (sym_ptr)
+		*sym_ptr = NULL;
+	var_name[0] = '\0';
+
+	if (!expr)
+		return NULL;
+	get_variable_from_expr(sym_ptr, var_name, expr, sizeof(var_name),
+				 &complicated, 0);
+	if (complicated < 2)
+		return alloc_string(var_name);
+	else
+		return NULL;
+}
+
+char *expr_to_str(struct expression *expr)
+{
+	return expr_to_str_sym(expr, NULL);
+}
+
+/*
+ * get_variable_from_expr_simple() only returns simple variables.
+ * If it's a complicated variable like a->foo[x] instead of just 'a->foo'
+ * then it returns NULL.
+ */
+char *expr_to_var_sym(struct expression *expr,
+				    struct symbol **sym_ptr)
+{
+	static char var_name[VAR_LEN];
+	int complicated = 0;
+
+	if (sym_ptr)
+		*sym_ptr = NULL;
+	var_name[0] = '\0';
+
+	if (!expr)
+		return NULL;
+	expr = strip_expr(expr);
+	get_variable_from_expr(sym_ptr, var_name, expr, sizeof(var_name),
+				 &complicated, 1);
+
+	if (complicated) {
+		if (sym_ptr)
+			*sym_ptr = NULL;
+		return NULL;
+	}
+	return alloc_string(var_name);
+}
+
+char *expr_to_var(struct expression *expr)
+{
+	return expr_to_var_sym(expr, NULL);
+}
+
+struct symbol *expr_to_sym(struct expression *expr)
+{
+	struct symbol *sym;
+	char *name;
+
+	name = expr_to_var_sym(expr, &sym);
+	free_string(name);
+	return sym;
+}
+
+int get_complication_score(struct expression *expr)
+{
+	expr = strip_expr(expr);
+
+	/*
+	 * Don't forget to keep get_complication_score() and store_all_links()
+	 * in sync.
+	 *
+	 */
+
+	if (!expr)
+		return 990;
+
+	switch (expr->type) {
+	case EXPR_CALL:
+		return 991;
+	case EXPR_COMPARE:
+	case EXPR_BINOP:
+		return get_complication_score(expr->left) +
+		       get_complication_score(expr->right);
+	case EXPR_SYMBOL:
+		return 1;
+	case EXPR_PREOP:
+		if (expr->op == '*' || expr->op == '(')
+			return get_complication_score(expr->unop);
+		return 993;
+	case EXPR_DEREF:
+		return get_complication_score(expr->deref);
+	case EXPR_VALUE:
+	case EXPR_SIZEOF:
+		return 0;
+	default:
+		return 994;
+	}
+}
+
+struct expression *reorder_expr_alphabetically(struct expression *expr)
+{
+	struct expression *ret;
+	char *left, *right;
+
+	if (expr->type != EXPR_BINOP)
+		return expr;
+	if (expr->op != '+' && expr->op != '*')
+		return expr;
+
+	left = expr_to_var(expr->left);
+	right = expr_to_var(expr->right);
+	ret = expr;
+	if (!left || !right)
+		goto free;
+	if (strcmp(left, right) <= 0)
+		goto free;
+
+	ret = binop_expression(expr->right, expr->op, expr->left);
+free:
+	free_string(left);
+	free_string(right);
+
+	return ret;
+}
+
+char *expr_to_chunk_helper(struct expression *expr, struct symbol **sym, struct var_sym_list **vsl)
+{
+	struct var_sym_list *tmp_vsl;
+	char *name;
+	struct symbol *tmp;
+	int score;
+
+	if (vsl)
+		*vsl = NULL;
+	if (sym)
+		*sym = NULL;
+
+	expr = strip_parens(expr);
+	if (!expr)
+		return NULL;
+
+	name = expr_to_var_sym(expr, &tmp);
+	if (name && tmp) {
+		if (sym)
+			*sym = tmp;
+		if (vsl)
+			*vsl = expr_to_vsl(expr);
+		return name;
+	}
+	free_string(name);
+
+	score = get_complication_score(expr);
+	if (score <= 0 || score > 2)
+		return NULL;
+
+	tmp_vsl = expr_to_vsl(expr);
+	if (vsl) {
+		*vsl = tmp_vsl;
+		if (!*vsl)
+			return NULL;
+	}
+	if (sym) {
+		if (ptr_list_size((struct ptr_list *)tmp_vsl) == 1) {
+			struct var_sym *vs;
+
+			vs = first_ptr_list((struct ptr_list *)tmp_vsl);
+			*sym = vs->sym;
+		}
+	}
+
+	expr = reorder_expr_alphabetically(expr);
+
+	return expr_to_str(expr);
+}
+
+char *expr_to_known_chunk_sym(struct expression *expr, struct symbol **sym)
+{
+	return expr_to_chunk_helper(expr, sym, NULL);
+}
+
+char *expr_to_chunk_sym_vsl(struct expression *expr, struct symbol **sym, struct var_sym_list **vsl)
+{
+	return expr_to_chunk_helper(expr, sym, vsl);
+}
+
+int sym_name_is(const char *name, struct expression *expr)
+{
+	if (!expr)
+		return 0;
+	if (expr->type != EXPR_SYMBOL)
+		return 0;
+	if (!strcmp(expr->symbol_name->name, name))
+		return 1;
+	return 0;
+}
+
+int is_zero(struct expression *expr)
+{
+	sval_t sval;
+
+	if (get_value(expr, &sval) && sval.value == 0)
+		return 1;
+	return 0;
+}
+
+int is_array(struct expression *expr)
+{
+	struct symbol *type;
+
+	expr = strip_expr(expr);
+	if (!expr)
+		return 0;
+
+	if (expr->type == EXPR_PREOP && expr->op == '*') {
+		expr = strip_expr(expr->unop);
+		if (!expr)
+			return 0;
+		if (expr->type == EXPR_BINOP && expr->op == '+')
+			return 1;
+	}
+
+	if (expr->type != EXPR_BINOP || expr->op != '+')
+		return 0;
+
+	type = get_type(expr->left);
+	if (!type || type->type != SYM_ARRAY)
+		return 0;
+
+	return 1;
+}
+
+struct expression *get_array_base(struct expression *expr)
+{
+	if (!is_array(expr))
+		return NULL;
+	expr = strip_expr(expr);
+	if (expr->type == EXPR_PREOP && expr->op == '*')
+		expr = strip_expr(expr->unop);
+	if (expr->type != EXPR_BINOP || expr->op != '+')
+		return NULL;
+	return strip_parens(expr->left);
+}
+
+struct expression *get_array_offset(struct expression *expr)
+{
+	if (!is_array(expr))
+		return NULL;
+	expr = strip_expr(expr);
+	if (expr->type == EXPR_PREOP && expr->op == '*')
+		expr = strip_expr(expr->unop);
+	if (expr->type != EXPR_BINOP || expr->op != '+')
+		return NULL;
+	return strip_parens(expr->right);
+}
+
+const char *show_state(struct smatch_state *state)
+{
+	if (!state)
+		return NULL;
+	return state->name;
+}
+
+struct statement *get_expression_statement(struct expression *expr)
+{
+	/* What are those things called? if (({....; ret;})) { ...*/
+
+	if (expr->type != EXPR_PREOP)
+		return NULL;
+	if (expr->op != '(')
+		return NULL;
+	if (!expr->unop)
+		return NULL;
+	if (expr->unop->type != EXPR_STATEMENT)
+		return NULL;
+	if (expr->unop->statement->type != STMT_COMPOUND)
+		return NULL;
+	return expr->unop->statement;
+}
+
+struct expression *strip_parens(struct expression *expr)
+{
+	if (!expr)
+		return NULL;
+
+	if (expr->type == EXPR_PREOP) {
+		if (!expr->unop)
+			return expr;  /* parsing invalid code */
+
+		if (expr->op == '(' && expr->unop->type == EXPR_STATEMENT &&
+			expr->unop->statement->type == STMT_COMPOUND)
+			return expr;
+		if (expr->op == '(')
+			return strip_parens(expr->unop);
+	}
+	return expr;
+}
+
+static struct expression *strip_expr_helper(struct expression *expr, bool set_parent)
+{
+	if (!expr)
+		return NULL;
+
+	switch (expr->type) {
+	case EXPR_FORCE_CAST:
+	case EXPR_CAST:
+		if (set_parent)
+			expr_set_parent_expr(expr->cast_expression, expr);
+
+		if (!expr->cast_expression)
+			return expr;
+		return strip_expr_helper(expr->cast_expression, set_parent);
+	case EXPR_PREOP: {
+		struct expression *unop;
+
+		if (!expr->unop)  /* parsing invalid code */
+			return expr;
+		if (set_parent)
+			expr_set_parent_expr(expr->unop, expr);
+
+
+		if (expr->op == '(' && expr->unop->type == EXPR_STATEMENT &&
+			expr->unop->statement->type == STMT_COMPOUND)
+			return expr;
+
+		unop = strip_expr_helper(expr->unop, set_parent);
+
+		if (expr->op == '*' && unop &&
+		    unop->type == EXPR_PREOP && unop->op == '&') {
+			struct symbol *type = get_type(unop->unop);
+
+			if (type && type->type == SYM_ARRAY)
+				return expr;
+			return strip_expr_helper(unop->unop, set_parent);
+		}
+
+		if (expr->op == '(')
+			return unop;
+
+		return expr;
+	}
+	case EXPR_CONDITIONAL:
+		if (known_condition_true(expr->conditional)) {
+			if (expr->cond_true) {
+				if (set_parent)
+					expr_set_parent_expr(expr->cond_true, expr);
+				return strip_expr_helper(expr->cond_true, set_parent);
+			}
+			if (set_parent)
+				expr_set_parent_expr(expr->conditional, expr);
+			return strip_expr_helper(expr->conditional, set_parent);
+		}
+		if (known_condition_false(expr->conditional)) {
+			if (set_parent)
+				expr_set_parent_expr(expr->cond_false, expr);
+			return strip_expr_helper(expr->cond_false, set_parent);
+		}
+		return expr;
+	case EXPR_CALL:
+		if (sym_name_is("__builtin_expect", expr->fn) ||
+		    sym_name_is("__builtin_bswap16", expr->fn) ||
+		    sym_name_is("__builtin_bswap32", expr->fn) ||
+		    sym_name_is("__builtin_bswap64", expr->fn)) {
+			expr = get_argument_from_call_expr(expr->args, 0);
+			return strip_expr_helper(expr, set_parent);
+		}
+		return expr;
+	}
+	return expr;
+}
+
+struct expression *strip_expr(struct expression *expr)
+{
+	return strip_expr_helper(expr, false);
+}
+
+struct expression *strip_expr_set_parent(struct expression *expr)
+{
+	return strip_expr_helper(expr, true);
+}
+
+static void delete_state_tracker(struct tracker *t)
+{
+	delete_state(t->owner, t->name, t->sym);
+	__free_tracker(t);
+}
+
+void scoped_state(int my_id, const char *name, struct symbol *sym)
+{
+	struct tracker *t;
+
+	t = alloc_tracker(my_id, name, sym);
+	add_scope_hook((scope_hook *)&delete_state_tracker, t);
+}
+
+int is_error_return(struct expression *expr)
+{
+	struct symbol *cur_func = cur_func_sym;
+	struct range_list *rl;
+	sval_t sval;
+
+	if (!expr)
+		return 0;
+	if (cur_func->type != SYM_NODE)
+		return 0;
+	cur_func = get_base_type(cur_func);
+	if (cur_func->type != SYM_FN)
+		return 0;
+	cur_func = get_base_type(cur_func);
+	if (cur_func == &void_ctype)
+		return 0;
+	if (option_project == PROJ_KERNEL &&
+	    get_implied_rl(expr, &rl) &&
+	    rl_type(rl) == &int_ctype &&
+	    sval_is_negative(rl_min(rl)) &&
+	    rl_max(rl).value == -1)
+		return 1;
+	if (!get_implied_value(expr, &sval))
+		return 0;
+	if (sval.value < 0)
+		return 1;
+	if (cur_func->type == SYM_PTR && sval.value == 0)
+		return 1;
+	return 0;
+}
+
+int getting_address(void)
+{
+	struct expression *tmp;
+	int i = 0;
+	int dot_ops = 0;
+
+	FOR_EACH_PTR_REVERSE(big_expression_stack, tmp) {
+		if (!i++)
+			continue;
+		if (tmp->type == EXPR_PREOP && tmp->op == '(')
+			continue;
+		if (tmp->op == '.' && !dot_ops++)
+			continue;
+		if (tmp->op == '&')
+			return 1;
+		return 0;
+	} END_FOR_EACH_PTR_REVERSE(tmp);
+	return 0;
+}
+
+int get_struct_and_member(struct expression *expr, const char **type, const char **member)
+{
+	struct symbol *sym;
+
+	expr = strip_expr(expr);
+	if (expr->type != EXPR_DEREF)
+		return 0;
+	if (!expr->member)
+		return 0;
+
+	sym = get_type(expr->deref);
+	if (!sym)
+		return 0;
+	if (sym->type == SYM_UNION)
+		return 0;
+	if (!sym->ident)
+		return 0;
+
+	*type = sym->ident->name;
+	*member = expr->member->name;
+	return 1;
+}
+
+char *get_member_name(struct expression *expr)
+{
+	char buf[256];
+	struct symbol *sym;
+
+	expr = strip_expr(expr);
+	if (!expr || expr->type != EXPR_DEREF)
+		return NULL;
+	if (!expr->member)
+		return NULL;
+
+	sym = get_type(expr->deref);
+	if (!sym)
+		return NULL;
+	if (sym->type == SYM_UNION) {
+		snprintf(buf, sizeof(buf), "(union %s)->%s",
+			 sym->ident ? sym->ident->name : "anonymous",
+			 expr->member->name);
+		return alloc_string(buf);
+	}
+	if (!sym->ident)
+		return NULL;
+	snprintf(buf, sizeof(buf), "(struct %s)->%s", sym->ident->name, expr->member->name);
+	return alloc_string(buf);
+}
+
+int cmp_pos(struct position pos1, struct position pos2)
+{
+	/* the stream position is ... */
+	if (pos1.stream > pos2.stream)
+		return -1;
+	if (pos1.stream < pos2.stream)
+		return 1;
+
+	if (pos1.line < pos2.line)
+		return -1;
+	if (pos1.line > pos2.line)
+		return 1;
+
+	if (pos1.pos < pos2.pos)
+		return -1;
+	if (pos1.pos > pos2.pos)
+		return 1;
+
+	return 0;
+}
+
+int positions_eq(struct position pos1, struct position pos2)
+{
+	if (pos1.line != pos2.line)
+		return 0;
+	if (pos1.pos != pos2.pos)
+		return 0;
+	if (pos1.stream != pos2.stream)
+		return 0;
+	return 1;
+}
+
+struct statement *get_current_statement(void)
+{
+	struct statement *prev, *tmp;
+
+	prev = last_ptr_list((struct ptr_list *)big_statement_stack);
+
+	if (!prev || !get_macro_name(prev->pos))
+		return prev;
+
+	FOR_EACH_PTR_REVERSE(big_statement_stack, tmp) {
+		if (positions_eq(tmp->pos, prev->pos))
+			continue;
+		if (prev->pos.line > tmp->pos.line)
+			return prev;
+		return tmp;
+	} END_FOR_EACH_PTR_REVERSE(tmp);
+	return prev;
+}
+
+struct statement *get_prev_statement(void)
+{
+	struct statement *tmp;
+	int i;
+
+	i = 0;
+	FOR_EACH_PTR_REVERSE(big_statement_stack, tmp) {
+		if (i++ == 1)
+			return tmp;
+	} END_FOR_EACH_PTR_REVERSE(tmp);
+	return NULL;
+}
+
+struct expression *get_last_expr_from_expression_stmt(struct expression *expr)
+{
+	struct statement *stmt;
+	struct statement *last_stmt;
+
+	while (expr->type == EXPR_PREOP && expr->op == '(')
+		expr = expr->unop;
+	if (expr->type != EXPR_STATEMENT)
+		return NULL;
+	stmt = expr->statement;
+	if (!stmt)
+		return NULL;
+	if (stmt->type == STMT_COMPOUND) {
+		last_stmt = last_ptr_list((struct ptr_list *)stmt->stmts);
+		if (!last_stmt)
+			return NULL;
+		if (last_stmt->type == STMT_LABEL)
+			last_stmt = last_stmt->label_statement;
+		if (last_stmt->type != STMT_EXPRESSION)
+			return NULL;
+		return last_stmt->expression;
+	}
+	if (stmt->type == STMT_EXPRESSION)
+		return stmt->expression;
+	return NULL;
+}
+
+int get_param_num_from_sym(struct symbol *sym)
+{
+	struct symbol *tmp;
+	int i;
+
+	if (!cur_func_sym)
+		return -1;
+
+	i = 0;
+	FOR_EACH_PTR(cur_func_sym->ctype.base_type->arguments, tmp) {
+		if (tmp == sym)
+			return i;
+		i++;
+	} END_FOR_EACH_PTR(tmp);
+	return -1;
+}
+
+int get_param_num(struct expression *expr)
+{
+	struct symbol *sym;
+	char *name;
+
+	if (!cur_func_sym)
+		return -1;
+	name = expr_to_var_sym(expr, &sym);
+	free_string(name);
+	if (!sym)
+		return -1;
+	return get_param_num_from_sym(sym);
+}
+
+int ms_since(struct timeval *start)
+{
+	struct timeval end;
+	double diff;
+
+	gettimeofday(&end, NULL);
+	diff = (end.tv_sec - start->tv_sec) * 1000.0;
+	diff += (end.tv_usec - start->tv_usec) / 1000.0;
+	return (int)diff;
+}
+
+int parent_is_gone_var_sym(const char *name, struct symbol *sym)
+{
+	if (!name || !sym)
+		return 0;
+
+	if (parent_is_null_var_sym(name, sym) ||
+	    parent_is_free_var_sym(name, sym))
+		return 1;
+	return 0;
+}
+
+int parent_is_gone(struct expression *expr)
+{
+	struct symbol *sym;
+	char *var;
+	int ret = 0;
+
+	expr = strip_expr(expr);
+	var = expr_to_var_sym(expr, &sym);
+	if (!var || !sym)
+		goto free;
+	ret = parent_is_gone_var_sym(var, sym);
+free:
+	free_string(var);
+	return ret;
+}
+
+int invert_op(int op)
+{
+	switch (op) {
+	case '*':
+		return '/';
+	case '/':
+		return '*';
+	case '+':
+		return '-';
+	case '-':
+		return '+';
+	case SPECIAL_LEFTSHIFT:
+		return SPECIAL_RIGHTSHIFT;
+	case SPECIAL_RIGHTSHIFT:
+		return SPECIAL_LEFTSHIFT;
+	}
+	return 0;
+}
+
+int expr_equiv(struct expression *one, struct expression *two)
+{
+	struct symbol *one_sym = NULL;
+	struct symbol *two_sym = NULL;
+	char *one_name = NULL;
+	char *two_name = NULL;
+	int ret = 0;
+
+	if (!one || !two)
+		return 0;
+	if (one->type != two->type)
+		return 0;
+	if (is_fake_call(one) || is_fake_call(two))
+		return 0;
+
+	one_name = expr_to_str_sym(one, &one_sym);
+	if (!one_name)
+		goto free;
+	two_name = expr_to_str_sym(two, &two_sym);
+	if (!two_name)
+		goto free;
+	if (one_sym != two_sym)
+		goto free;
+	/*
+	 * This is a terrible hack because expr_to_str() sometimes gives up in
+	 * the middle and just returns what it has.  If you see a () you know
+	 * the string is bogus.
+	 */
+	if (strstr(one_name, "()"))
+		goto free;
+	if (strcmp(one_name, two_name) == 0)
+		ret = 1;
+free:
+	free_string(one_name);
+	free_string(two_name);
+	return ret;
+}
+
+void push_int(struct int_stack **stack, int num)
+{
+	int *munged;
+
+	/*
+	 * Just put the int on directly instead of a pointer to the int.
+	 * Shift it to the left because Sparse uses the last two bits.
+	 * This is sort of a dirty hack, yes.
+	 */
+
+	munged = INT_PTR(num << 2);
+
+	add_ptr_list(stack, munged);
+}
+
+int pop_int(struct int_stack **stack)
+{
+	int *num;
+
+	num = last_ptr_list((struct ptr_list *)*stack);
+	delete_ptr_list_last((struct ptr_list **)stack);
+
+	return PTR_INT(num) >> 2;
+}
--- /dev/null	Fri Dec 21 15:00:26 2018
+++ new/usr/src/tools/smatch/src/smatch_hooks.c	Fri Dec 21 15:00:26 2018
@@ -0,0 +1,368 @@
+/*
+ * Copyright (C) 2006 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+enum data_type {
+	EXPR_PTR,
+	STMT_PTR,
+	SYMBOL_PTR,
+	SYM_LIST_PTR,
+};
+
+struct hook_container {
+	int hook_type;
+	enum data_type data_type;
+	void *fn;
+};
+ALLOCATOR(hook_container, "hook functions");
+DECLARE_PTR_LIST(hook_func_list, struct hook_container);
+static struct hook_func_list *merge_funcs;
+static struct hook_func_list *unmatched_state_funcs;
+static struct hook_func_list *hook_array[NUM_HOOKS] = {};
+void (**pre_merge_hooks)(struct sm_state *sm);
+
+struct scope_container {
+	void *fn;
+	void *data;
+};
+ALLOCATOR(scope_container, "scope hook functions");
+DECLARE_PTR_LIST(scope_hook_list, struct scope_container);
+DECLARE_PTR_LIST(scope_hook_stack, struct scope_hook_list);
+static struct scope_hook_stack *scope_hooks;
+
+void add_hook(void *func, enum hook_type type)
+{
+	struct hook_container *container = __alloc_hook_container(0);
+
+	container->hook_type = type;
+	container->fn = func;
+	switch (type) {
+	case EXPR_HOOK:
+		container->data_type = EXPR_PTR;
+		break;
+	case STMT_HOOK:
+		container->data_type = STMT_PTR;
+		break;
+	case STMT_HOOK_AFTER:
+		container->data_type = STMT_PTR;
+		break;
+	case SYM_HOOK:
+		container->data_type = EXPR_PTR;
+		break;
+	case STRING_HOOK:
+		container->data_type = EXPR_PTR;
+		break;
+	case DECLARATION_HOOK:
+		container->data_type = SYMBOL_PTR;
+		break;
+	case ASSIGNMENT_HOOK:
+		container->data_type = EXPR_PTR;
+		break;
+	case ASSIGNMENT_HOOK_AFTER:
+		container->data_type = EXPR_PTR;
+		break;
+	case RAW_ASSIGNMENT_HOOK:
+		container->data_type = EXPR_PTR;
+		break;
+	case GLOBAL_ASSIGNMENT_HOOK:
+		container->data_type = EXPR_PTR;
+		break;
+	case CALL_ASSIGNMENT_HOOK:
+		container->data_type = EXPR_PTR;
+		break;
+	case MACRO_ASSIGNMENT_HOOK:
+		container->data_type = EXPR_PTR;
+		break;
+	case BINOP_HOOK:
+		container->data_type = EXPR_PTR;
+		break;
+	case OP_HOOK:
+		container->data_type = EXPR_PTR;
+		break;
+	case LOGIC_HOOK:
+		container->data_type = EXPR_PTR;
+		break;
+	case PRELOOP_HOOK:
+		container->data_type = STMT_PTR;
+		break;
+	case CONDITION_HOOK:
+		container->data_type = EXPR_PTR;
+		break;
+	case SELECT_HOOK:
+		container->data_type = EXPR_PTR;
+		break;
+	case WHOLE_CONDITION_HOOK:
+		container->data_type = EXPR_PTR;
+		break;
+	case FUNCTION_CALL_HOOK:
+		container->data_type = EXPR_PTR;
+		break;
+	case CALL_HOOK_AFTER_INLINE:
+		container->data_type = EXPR_PTR;
+		break;
+	case FUNCTION_CALL_HOOK_AFTER_DB:
+		container->data_type = EXPR_PTR;
+		break;
+	case DEREF_HOOK:
+		container->data_type = EXPR_PTR;
+		break;
+	case CASE_HOOK:
+		/* nothing needed */
+		break;
+	case ASM_HOOK:
+		container->data_type = STMT_PTR;
+		break;
+	case CAST_HOOK:
+		container->data_type = EXPR_PTR;
+		break;
+	case SIZEOF_HOOK:
+		container->data_type = EXPR_PTR;
+		break;
+	case BASE_HOOK:
+		container->data_type = SYMBOL_PTR;
+		break;
+	case FUNC_DEF_HOOK:
+		container->data_type = SYMBOL_PTR;
+		break;
+	case AFTER_DEF_HOOK:
+		container->data_type = SYMBOL_PTR;
+		break;
+	case END_FUNC_HOOK:
+		container->data_type = SYMBOL_PTR;
+		break;
+	case AFTER_FUNC_HOOK:
+		container->data_type = SYMBOL_PTR;
+		break;
+	case RETURN_HOOK:
+		container->data_type = EXPR_PTR;
+		break;
+	case INLINE_FN_START:
+		container->data_type = EXPR_PTR;
+		break;
+	case INLINE_FN_END:
+		container->data_type = EXPR_PTR;
+		break;
+	case END_FILE_HOOK:
+		container->data_type = SYM_LIST_PTR;
+		break;
+	}
+	add_ptr_list(&hook_array[type], container);
+}
+
+void add_merge_hook(int client_id, merge_func_t *func)
+{
+	struct hook_container *container = __alloc_hook_container(0);
+	container->data_type = client_id;
+	container->fn = func;
+	add_ptr_list(&merge_funcs, container);
+}
+
+void add_unmatched_state_hook(int client_id, unmatched_func_t *func)
+{
+	struct hook_container *container = __alloc_hook_container(0);
+	container->data_type = client_id;
+	container->fn = func;
+	add_ptr_list(&unmatched_state_funcs, container);
+}
+
+void add_pre_merge_hook(int client_id, void (*hook)(struct sm_state *sm))
+{
+	pre_merge_hooks[client_id] = hook;
+}
+
+static void pass_to_client(void *fn)
+{
+	typedef void (expr_func)();
+	((expr_func *) fn)();
+}
+
+static void pass_expr_to_client(void *fn, void *data)
+{
+	typedef void (expr_func)(struct expression *expr);
+	((expr_func *) fn)((struct expression *) data);
+}
+
+static void pass_stmt_to_client(void *fn, void *data)
+{
+	typedef void (stmt_func)(struct statement *stmt);
+	((stmt_func *) fn)((struct statement *) data);
+}
+
+static void pass_sym_to_client(void *fn, void *data)
+{
+	typedef void (sym_func)(struct symbol *sym);
+	((sym_func *) fn)((struct symbol *) data);
+}
+
+static void pass_sym_list_to_client(void *fn, void *data)
+{
+	typedef void (sym_func)(struct symbol_list *sym_list);
+	((sym_func *) fn)((struct symbol_list *) data);
+}
+
+void __pass_to_client(void *data, enum hook_type type)
+{
+	struct hook_container *container;
+
+
+	FOR_EACH_PTR(hook_array[type], container) {
+		switch (container->data_type) {
+		case EXPR_PTR:
+			pass_expr_to_client(container->fn, data);
+			break;
+		case STMT_PTR:
+			pass_stmt_to_client(container->fn, data);
+			break;
+		case SYMBOL_PTR:
+			pass_sym_to_client(container->fn, data);
+			break;
+		case SYM_LIST_PTR:
+			pass_sym_list_to_client(container->fn, data);
+			break;
+		}
+	} END_FOR_EACH_PTR(container);
+}
+
+void __pass_to_client_no_data(enum hook_type type)
+{
+	struct hook_container *container;
+
+	FOR_EACH_PTR(hook_array[type], container) {
+		pass_to_client(container->fn);
+	} END_FOR_EACH_PTR(container);
+}
+
+void __pass_case_to_client(struct expression *switch_expr,
+			   struct range_list *rl)
+{
+	typedef void (case_func)(struct expression *switch_expr,
+				 struct range_list *rl);
+	struct hook_container *container;
+
+	FOR_EACH_PTR(hook_array[CASE_HOOK], container) {
+		((case_func *) container->fn)(switch_expr, rl);
+	} END_FOR_EACH_PTR(container);
+}
+
+int __has_merge_function(int client_id)
+{
+	struct hook_container *tmp;
+
+	FOR_EACH_PTR(merge_funcs, tmp) {
+		if (tmp->data_type == client_id)
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+	return 0;
+}
+
+struct smatch_state *__client_merge_function(int owner,
+					     struct smatch_state *s1,
+					     struct smatch_state *s2)
+{
+	struct smatch_state *tmp_state;
+	struct hook_container *tmp;
+
+	/* Pass NULL states first and the rest alphabetically by name */
+	if (!s2 || (s1 && strcmp(s2->name, s1->name) < 0)) {
+		tmp_state = s1;
+		s1 = s2;
+		s2 = tmp_state;
+	}
+
+	FOR_EACH_PTR(merge_funcs, tmp) {
+		if (tmp->data_type == owner)
+			return ((merge_func_t *) tmp->fn)(s1, s2);
+	} END_FOR_EACH_PTR(tmp);
+	return &undefined;
+}
+
+struct smatch_state *__client_unmatched_state_function(struct sm_state *sm)
+{
+	struct hook_container *tmp;
+
+	FOR_EACH_PTR(unmatched_state_funcs, tmp) {
+		if (tmp->data_type == sm->owner)
+			return ((unmatched_func_t *) tmp->fn)(sm);
+	} END_FOR_EACH_PTR(tmp);
+	return &undefined;
+}
+
+void call_pre_merge_hook(struct sm_state *sm)
+{
+	if (sm->owner >= num_checks)
+		return;
+
+	if (pre_merge_hooks[sm->owner])
+		pre_merge_hooks[sm->owner](sm);
+}
+
+static struct scope_hook_list *pop_scope_hook_list(struct scope_hook_stack **stack)
+{
+	struct scope_hook_list *hook_list;
+
+	hook_list = last_ptr_list((struct ptr_list *)*stack);
+	delete_ptr_list_last((struct ptr_list **)stack);
+	return hook_list;
+}
+
+static void push_scope_hook_list(struct scope_hook_stack **stack, struct scope_hook_list *l)
+{
+	add_ptr_list(stack, l);
+}
+
+void add_scope_hook(scope_hook *fn, void *data)
+{
+	struct scope_hook_list *hook_list;
+	struct scope_container *new;
+
+	if (!scope_hooks)
+		return;
+	hook_list = pop_scope_hook_list(&scope_hooks);
+	new = __alloc_scope_container(0);
+	new->fn = fn;
+	new->data = data;
+	add_ptr_list(&hook_list, new);
+	push_scope_hook_list(&scope_hooks, hook_list);
+}
+
+void __push_scope_hooks(void)
+{
+	push_scope_hook_list(&scope_hooks, NULL);
+}
+
+void __call_scope_hooks(void)
+{
+	struct scope_hook_list *hook_list;
+	struct scope_container *tmp;
+
+	if (!scope_hooks)
+		return;
+
+	hook_list = pop_scope_hook_list(&scope_hooks);
+	FOR_EACH_PTR(hook_list, tmp) {
+		((scope_hook *) tmp->fn)(tmp->data);
+		__free_scope_container(tmp);
+	} END_FOR_EACH_PTR(tmp);
+}
+
+void allocate_hook_memory(void)
+{
+	pre_merge_hooks = malloc(num_checks * sizeof(*pre_merge_hooks));
+	memset(pre_merge_hooks, 0, num_checks * sizeof(*pre_merge_hooks));
+}
+
--- /dev/null	Fri Dec 21 15:00:26 2018
+++ new/usr/src/tools/smatch/src/smatch_ignore.c	Fri Dec 21 15:00:26 2018
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+STATE(ignore);
+static struct stree *ignored;
+
+void add_ignore(int owner, const char *name, struct symbol *sym)
+{
+	set_state_stree(&ignored, owner, name, sym, &ignore);
+}
+
+int is_ignored(int owner, const char *name, struct symbol *sym)
+{
+	return !!get_state_stree(ignored, owner, name, sym);
+}
+
+void add_ignore_expr(int owner, struct expression *expr)
+{
+	struct symbol *sym;
+	char *name;
+
+	name = expr_to_str_sym(expr, &sym);
+	if (!name || !sym)
+		return;
+	add_ignore(owner, name, sym);
+	free_string(name);
+}
+
+int is_ignored_expr(int owner, struct expression *expr)
+{
+	struct symbol *sym;
+	char *name;
+	int ret;
+
+	name = expr_to_str_sym(expr, &sym);
+	if (!name && !sym)
+		return 0;
+	ret = is_ignored(owner, name, sym);
+	free_string(name);
+	return ret;
+}
+
+static void clear_ignores(void)
+{
+	if (__inline_fn)
+		return;
+	free_stree(&ignored);
+}
+
+void register_smatch_ignore(int id)
+{
+	add_hook(&clear_ignores, AFTER_FUNC_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:26 2018
+++ new/usr/src/tools/smatch/src/smatch_imaginary_absolute.c	Fri Dec 21 15:00:26 2018
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2016 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Say you have a condition like:
+ *
+ *     if (foo < 0)
+ *         return foo;
+ *
+ * But we actually know that foo is zero.  Then in smatch_extra.c we set "foo"
+ * to the empty state and then for the return statement we say that "foo" is
+ * s32min-s32max because we can't return the empty state.
+ *
+ * This file is supposed to provide an alternative to say that actually "foo" is
+ * less than zero.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+static struct smatch_state *empty_state(struct sm_state *sm)
+{
+	return alloc_estate_empty();
+}
+
+struct smatch_state *merge_is_empty(struct smatch_state *s1, struct smatch_state *s2)
+{
+	return alloc_estate_empty();
+}
+
+static void reset(struct sm_state *sm, struct expression *mod_expr)
+{
+	set_state(my_id, sm->name, sm->sym, alloc_estate_empty());
+}
+
+void __save_imaginary_state(struct expression *expr, struct range_list *true_rl, struct range_list *false_rl)
+{
+	set_true_false_states_expr(my_id, expr, alloc_estate_rl(true_rl), alloc_estate_rl(false_rl));
+}
+
+int get_imaginary_absolute(struct expression *expr, struct range_list **rl)
+{
+	struct smatch_state *state;
+
+	*rl = NULL;
+
+	state = get_state_expr(my_id, expr);
+	if (!state || !estate_rl(state))
+		return 0;
+
+	*rl = estate_rl(state);
+	return 1;
+}
+
+void register_imaginary_absolute(int id)
+{
+	my_id = id;
+
+	add_unmatched_state_hook(my_id, &empty_state);
+	add_merge_hook(my_id, &merge_is_empty);
+	add_modification_hook(my_id, &reset);
+}
+
--- /dev/null	Fri Dec 21 15:00:26 2018
+++ new/usr/src/tools/smatch/src/smatch_implied.c	Fri Dec 21 15:00:26 2018
@@ -0,0 +1,1116 @@
+/*
+ * Copyright (C) 2008 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Imagine we have this code:
+ * foo = 1;
+ * if (bar)
+ *         foo = 99;
+ * else
+ *         frob();
+ *                   //  <-- point #1
+ * if (foo == 99)    //  <-- point #2
+ *         bar->baz; //  <-- point #3
+ *
+ *
+ * At point #3 bar is non null and can be dereferenced.
+ *
+ * It's smatch_implied.c which sets bar to non null at point #2.
+ *
+ * At point #1 merge_slist() stores the list of states from both
+ * the true and false paths.  On the true path foo == 99 and on
+ * the false path foo == 1.  merge_slist() sets their pool
+ * list to show the other states which were there when foo == 99.
+ *
+ * When it comes to the if (foo == 99) the smatch implied hook
+ * looks for all the pools where foo was not 99.  It makes a list
+ * of those.
+ *
+ * Then for bar (and all the other states) it says, ok bar is a
+ * merged state that came from these previous states.  We'll
+ * chop out all the states where it came from a pool where
+ * foo != 99 and merge it all back together.
+ *
+ * That is the implied state of bar.
+ *
+ * merge_slist() sets up ->pool.  An sm_state only has one ->pool and
+ *    that is the pool where it was first set.  The my pool gets set when
+ *    code paths merge.  States that have been set since the last merge do
+ *    not have a ->pool.
+ * merge_sm_state() sets ->left and ->right.  (These are the states which were
+ *    merged to form the current state.)
+ * a pool:  a pool is an slist that has been merged with another slist.
+ */
+
+#include <sys/time.h>
+#include <time.h>
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+char *implied_debug_msg;
+#define DIMPLIED(msg...) do { if (option_debug_implied || option_debug) printf(msg); } while (0)
+
+int option_debug_implied = 0;
+
+/*
+ * tmp_range_list():
+ * It messes things up to free range list allocations.  This helper fuction
+ * lets us reuse memory instead of doing new allocations.
+ */
+static struct range_list *tmp_range_list(struct symbol *type, long long num)
+{
+	static struct range_list *my_list = NULL;
+	static struct data_range *my_range;
+
+	__free_ptr_list((struct ptr_list **)&my_list);
+	my_range = alloc_range(ll_to_sval(num), ll_to_sval(num));
+	add_ptr_list(&my_list, my_range);
+	return my_list;
+}
+
+static void print_debug_tf(struct sm_state *sm, int istrue, int isfalse)
+{
+	if (!option_debug_implied && !option_debug)
+		return;
+
+	if (istrue && isfalse) {
+		printf("%s: %d: does not exist.\n", show_sm(sm), sm->line);
+	} else if (istrue) {
+		printf("'%s = %s' from %d is true. %s[stree %d]\n", sm->name, show_state(sm->state),
+			sm->line, sm->merged ? "[merged]" : "[leaf]",
+			get_stree_id(sm->pool));
+	} else if (isfalse) {
+		printf("'%s = %s' from %d is false. %s[stree %d]\n", sm->name, show_state(sm->state),
+			sm->line,
+			sm->merged ? "[merged]" : "[leaf]",
+			get_stree_id(sm->pool));
+	} else {
+		printf("'%s = %s' from %d could be true or false. %s[stree %d]\n", sm->name,
+			show_state(sm->state), sm->line,
+			sm->merged ? "[merged]" : "[leaf]",
+			get_stree_id(sm->pool));
+	}
+}
+
+static int create_fake_history(struct sm_state *sm, int comparison, struct range_list *rl)
+{
+	struct range_list *orig_rl;
+	struct range_list *true_rl, *false_rl;
+	struct stree *true_stree, *false_stree;
+	struct sm_state *true_sm, *false_sm;
+	sval_t sval;
+
+	if (is_merged(sm) || sm->left || sm->right)
+		return 0;
+	if (!rl_to_sval(rl, &sval))
+		return 0;
+	if (!estate_rl(sm->state))
+		return 0;
+
+	orig_rl = cast_rl(rl_type(rl), estate_rl(sm->state));
+	split_comparison_rl(orig_rl, comparison, rl, &true_rl, &false_rl, NULL, NULL);
+
+	true_rl = rl_truncate_cast(estate_type(sm->state), true_rl);
+	false_rl = rl_truncate_cast(estate_type(sm->state), false_rl);
+	if (is_whole_rl(true_rl) || is_whole_rl(false_rl) ||
+	    !true_rl || !false_rl ||
+	    rl_equiv(orig_rl, true_rl) || rl_equiv(orig_rl, false_rl) ||
+	    rl_equiv(estate_rl(sm->state), true_rl) || rl_equiv(estate_rl(sm->state), false_rl))
+		return 0;
+
+	if (rl_intersection(true_rl, false_rl)) {
+		sm_perror("parsing (%s (%s) %s %s)",
+			sm->name, sm->state->name, show_special(comparison), show_rl(rl));
+		sm_msg("true_rl = %s false_rl = %s intersection = %s",
+		       show_rl(true_rl), show_rl(false_rl), show_rl(rl_intersection(true_rl, false_rl)));
+		return 0;
+	}
+
+	if (option_debug)
+		sm_info("fake_history: %s vs %s.  %s %s %s. --> T: %s F: %s",
+		       sm->name, show_rl(rl), sm->state->name, show_special(comparison), show_rl(rl),
+		       show_rl(true_rl), show_rl(false_rl));
+
+	true_sm = clone_sm(sm);
+	false_sm = clone_sm(sm);
+
+	true_sm->state = alloc_estate_rl(cast_rl(estate_type(sm->state), true_rl));
+	free_slist(&true_sm->possible);
+	add_possible_sm(true_sm, true_sm);
+	false_sm->state = alloc_estate_rl(cast_rl(estate_type(sm->state), false_rl));
+	free_slist(&false_sm->possible);
+	add_possible_sm(false_sm, false_sm);
+
+	true_stree = clone_stree(sm->pool);
+	false_stree = clone_stree(sm->pool);
+
+	overwrite_sm_state_stree(&true_stree, true_sm);
+	overwrite_sm_state_stree(&false_stree, false_sm);
+
+	true_sm->pool = true_stree;
+	false_sm->pool = false_stree;
+
+	sm->merged = 1;
+	sm->left = true_sm;
+	sm->right = false_sm;
+
+	return 1;
+}
+
+/*
+ * add_pool() adds a slist to *pools. If the slist has already been
+ * added earlier then it doesn't get added a second time.
+ */
+void add_pool(struct state_list **pools, struct sm_state *new)
+{
+	struct sm_state *tmp;
+
+	FOR_EACH_PTR(*pools, tmp) {
+		if (tmp->pool < new->pool)
+			continue;
+		else if (tmp->pool == new->pool) {
+			return;
+		} else {
+			INSERT_CURRENT(new, tmp);
+			return;
+		}
+	} END_FOR_EACH_PTR(tmp);
+	add_ptr_list(pools, new);
+}
+
+static int pool_in_pools(struct stree *pool,
+			 const struct state_list *slist)
+{
+	struct sm_state *tmp;
+
+	FOR_EACH_PTR(slist, tmp) {
+		if (!tmp->pool)
+			continue;
+		if (tmp->pool == pool)
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+	return 0;
+}
+
+static int remove_pool(struct state_list **pools, struct stree *remove)
+{
+	struct sm_state *tmp;
+	int ret = 0;
+
+	FOR_EACH_PTR(*pools, tmp) {
+		if (tmp->pool == remove) {
+			DELETE_CURRENT_PTR(tmp);
+			ret = 1;
+		}
+	} END_FOR_EACH_PTR(tmp);
+
+	return ret;
+}
+
+/*
+ * If 'foo' == 99 add it that pool to the true pools.  If it's false, add it to
+ * the false pools.  If we're not sure, then we don't add it to either.
+ */
+static void do_compare(struct sm_state *sm, int comparison, struct range_list *rl,
+			struct state_list **true_stack,
+			struct state_list **maybe_stack,
+			struct state_list **false_stack,
+			int *mixed, struct sm_state *gate_sm)
+{
+	int istrue;
+	int isfalse;
+	struct range_list *var_rl;
+
+	if (!sm->pool)
+		return;
+
+	var_rl = cast_rl(rl_type(rl), estate_rl(sm->state));
+
+	istrue = !possibly_false_rl(var_rl, comparison, rl);
+	isfalse = !possibly_true_rl(var_rl, comparison, rl);
+
+	print_debug_tf(sm, istrue, isfalse);
+
+	/* give up if we have borrowed implications (smatch_equiv.c) */
+	if (sm->sym != gate_sm->sym ||
+	    strcmp(sm->name, gate_sm->name) != 0) {
+		if (mixed)
+			*mixed = 1;
+	}
+
+	if (mixed && !*mixed && !is_merged(sm) && !istrue && !isfalse) {
+		if (!create_fake_history(sm, comparison, rl))
+			*mixed = 1;
+	}
+
+	if (istrue)
+		add_pool(true_stack, sm);
+	else if (isfalse)
+		add_pool(false_stack, sm);
+	else
+		add_pool(maybe_stack, sm);
+
+}
+
+static int is_checked(struct state_list *checked, struct sm_state *sm)
+{
+	struct sm_state *tmp;
+
+	FOR_EACH_PTR(checked, tmp) {
+		if (tmp == sm)
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+	return 0;
+}
+
+/*
+ * separate_pools():
+ * Example code:  if (foo == 99) {
+ *
+ * Say 'foo' is a merged state that has many possible values.  It is the combination
+ * of merges.  separate_pools() iterates through the pools recursively and calls
+ * do_compare() for each time 'foo' was set.
+ */
+static void __separate_pools(struct sm_state *sm, int comparison, struct range_list *rl,
+			struct state_list **true_stack,
+			struct state_list **maybe_stack,
+			struct state_list **false_stack,
+			struct state_list **checked, int *mixed, struct sm_state *gate_sm)
+{
+	int free_checked = 0;
+	struct state_list *checked_states = NULL;
+
+	if (!sm)
+		return;
+
+	/*
+	 * If it looks like this is going to take too long as-is, then don't
+	 * create even more fake history.
+	 */
+	if (mixed && sm->nr_children > 100)
+		*mixed = 1;
+
+	/*
+	   Sometimes the implications are just too big to deal with
+	   so we bail.  Theoretically, bailing out here can cause more false
+	   positives but won't hide actual bugs.
+	*/
+	if (sm->nr_children > 4000) {
+		if (option_debug || option_debug_implied) {
+			static char buf[1028];
+			snprintf(buf, sizeof(buf), "debug: %s: nr_children over 4000 (%d). (%s %s)",
+				 __func__, sm->nr_children, sm->name, show_state(sm->state));
+			implied_debug_msg = buf;
+		}
+		return;
+	}
+
+	if (checked == NULL) {
+		checked = &checked_states;
+		free_checked = 1;
+	}
+	if (is_checked(*checked, sm))
+		return;
+	add_ptr_list(checked, sm);
+
+	do_compare(sm, comparison, rl, true_stack, maybe_stack, false_stack, mixed, gate_sm);
+
+	__separate_pools(sm->left, comparison, rl, true_stack, maybe_stack, false_stack, checked, mixed, gate_sm);
+	__separate_pools(sm->right, comparison, rl, true_stack, maybe_stack, false_stack, checked, mixed, gate_sm);
+	if (free_checked)
+		free_slist(checked);
+}
+
+static void separate_pools(struct sm_state *sm, int comparison, struct range_list *rl,
+			struct state_list **true_stack,
+			struct state_list **false_stack,
+			struct state_list **checked, int *mixed)
+{
+	struct state_list *maybe_stack = NULL;
+	struct sm_state *tmp;
+
+	__separate_pools(sm, comparison, rl, true_stack, &maybe_stack, false_stack, checked, mixed, sm);
+
+	if (option_debug) {
+		struct sm_state *sm;
+
+		FOR_EACH_PTR(*true_stack, sm) {
+			sm_msg("TRUE %s [stree %d]", show_sm(sm), get_stree_id(sm->pool));
+		} END_FOR_EACH_PTR(sm);
+
+		FOR_EACH_PTR(maybe_stack, sm) {
+			sm_msg("MAYBE %s [stree %d]", show_sm(sm), get_stree_id(sm->pool));
+		} END_FOR_EACH_PTR(sm);
+
+		FOR_EACH_PTR(*false_stack, sm) {
+			sm_msg("FALSE %s [stree %d]", show_sm(sm), get_stree_id(sm->pool));
+		} END_FOR_EACH_PTR(sm);
+	}
+	/* if it's a maybe then remove it */
+	FOR_EACH_PTR(maybe_stack, tmp) {
+		remove_pool(false_stack, tmp->pool);
+		remove_pool(true_stack, tmp->pool);
+	} END_FOR_EACH_PTR(tmp);
+
+	/* if it's both true and false remove it from both */
+	FOR_EACH_PTR(*true_stack, tmp) {
+		if (remove_pool(false_stack, tmp->pool))
+			DELETE_CURRENT_PTR(tmp);
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static int sm_in_keep_leafs(struct sm_state *sm, const struct state_list *keep_gates)
+{
+	struct sm_state *tmp, *old;
+
+	FOR_EACH_PTR(keep_gates, tmp) {
+		if (is_merged(tmp))
+			continue;
+		old = get_sm_state_stree(tmp->pool, sm->owner, sm->name, sm->sym);
+		if (!old)
+			continue;
+		if (old == sm)
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+	return 0;
+}
+
+static int taking_too_long(void)
+{
+	static void *printed;
+
+	if (out_of_memory())
+		return 1;
+
+	if (time_parsing_function() < 60)
+		return 0;
+
+	if (!__inline_fn && printed != cur_func_sym) {
+		if (!is_skipped_function())
+			sm_perror("turning off implications after 60 seconds");
+		printed = cur_func_sym;
+	}
+	return 1;
+}
+
+/*
+ * NOTE: If a state is in both the keep stack and the remove stack then that is
+ * a bug.  Only add states which are definitely true or definitely false.  If
+ * you have a leaf state that could be both true and false, then create a fake
+ * split history where one side is true and one side is false.  Otherwise, if
+ * you can't do that, then don't add it to either list.
+ */
+struct sm_state *filter_pools(struct sm_state *sm,
+			      const struct state_list *remove_stack,
+			      const struct state_list *keep_stack,
+			      int *modified, int *recurse_cnt,
+			      struct timeval *start)
+{
+	struct sm_state *ret = NULL;
+	struct sm_state *left;
+	struct sm_state *right;
+	int removed = 0;
+	struct timeval now;
+
+	if (!sm)
+		return NULL;
+	if (sm->skip_implications)
+		return sm;
+	if (taking_too_long())
+		return sm;
+
+	gettimeofday(&now, NULL);
+	if ((*recurse_cnt)++ > 1000 || now.tv_sec - start->tv_sec > 5) {
+		if (local_debug || option_debug_implied) {
+			static char buf[1028];
+			snprintf(buf, sizeof(buf), "debug: %s: nr_children over 4000 (%d). (%s %s)",
+				 __func__, sm->nr_children, sm->name, show_state(sm->state));
+			implied_debug_msg = buf;
+		}
+		sm->skip_implications = 1;
+		return sm;
+	}
+
+	if (pool_in_pools(sm->pool, remove_stack)) {
+		DIMPLIED("removed [stree %d] %s from %d\n", get_stree_id(sm->pool), show_sm(sm), sm->line);
+		*modified = 1;
+		return NULL;
+	}
+
+	if (!is_merged(sm) || pool_in_pools(sm->pool, keep_stack) || sm_in_keep_leafs(sm, keep_stack)) {
+		DIMPLIED("kept [stree %d] %s from %d. %s. %s. %s.\n", get_stree_id(sm->pool), show_sm(sm), sm->line,
+			is_merged(sm) ? "merged" : "not merged",
+			pool_in_pools(sm->pool, keep_stack) ? "not in keep pools" : "in keep pools",
+			sm_in_keep_leafs(sm, keep_stack) ? "reachable keep leaf" : "no keep leaf");
+		return sm;
+	}
+
+	DIMPLIED("checking [stree %d] %s from %d (%d) left = %s [stree %d] right = %s [stree %d]\n",
+		 get_stree_id(sm->pool),
+		 show_sm(sm), sm->line, sm->nr_children,
+		 sm->left ? sm->left->state->name : "<none>", sm->left ? get_stree_id(sm->left->pool) : -1,
+		 sm->right ? sm->right->state->name : "<none>", sm->right ? get_stree_id(sm->right->pool) : -1);
+	left = filter_pools(sm->left, remove_stack, keep_stack, &removed, recurse_cnt, start);
+	right = filter_pools(sm->right, remove_stack, keep_stack, &removed, recurse_cnt, start);
+	if (!removed) {
+		DIMPLIED("kept [stree %d] %s from %d\n", get_stree_id(sm->pool), show_sm(sm), sm->line);
+		return sm;
+	}
+	*modified = 1;
+	if (!left && !right) {
+		DIMPLIED("removed [stree %d] %s from %d <none>\n", get_stree_id(sm->pool), show_sm(sm), sm->line);
+		return NULL;
+	}
+
+	if (!left) {
+		ret = clone_sm(right);
+		ret->merged = 1;
+		ret->right = right;
+		ret->left = NULL;
+	} else if (!right) {
+		ret = clone_sm(left);
+		ret->merged = 1;
+		ret->left = left;
+		ret->right = NULL;
+	} else {
+		if (left->sym != sm->sym || strcmp(left->name, sm->name) != 0) {
+			left = clone_sm(left);
+			left->sym = sm->sym;
+			left->name = sm->name;
+		}
+		if (right->sym != sm->sym || strcmp(right->name, sm->name) != 0) {
+			right = clone_sm(right);
+			right->sym = sm->sym;
+			right->name = sm->name;
+		}
+		ret = merge_sm_states(left, right);
+	}
+
+	ret->pool = sm->pool;
+
+	DIMPLIED("partial %s => ", show_sm(sm));
+	DIMPLIED("%s from %d [stree %d]\n", show_sm(ret), sm->line, get_stree_id(sm->pool));
+	return ret;
+}
+
+static struct stree *filter_stack(struct sm_state *gate_sm,
+				       struct stree *pre_stree,
+				       const struct state_list *remove_stack,
+				       const struct state_list *keep_stack)
+{
+	struct stree *ret = NULL;
+	struct sm_state *tmp;
+	struct sm_state *filtered_sm;
+	int modified;
+	int recurse_cnt;
+	struct timeval start;
+
+	if (!remove_stack)
+		return NULL;
+
+	if (taking_too_long())
+		return NULL;
+
+	FOR_EACH_SM(pre_stree, tmp) {
+		if (option_debug)
+			sm_msg("%s: %s", __func__, show_sm(tmp));
+		if (!tmp->merged)
+			continue;
+		if (sm_in_keep_leafs(tmp, keep_stack))
+			continue;
+		modified = 0;
+		recurse_cnt = 0;
+		gettimeofday(&start, NULL);
+		filtered_sm = filter_pools(tmp, remove_stack, keep_stack, &modified, &recurse_cnt, &start);
+		if (!filtered_sm || !modified)
+			continue;
+		/* the assignments here are for borrowed implications */
+		filtered_sm->name = tmp->name;
+		filtered_sm->sym = tmp->sym;
+		avl_insert(&ret, filtered_sm);
+		if (out_of_memory() || taking_too_long())
+			return NULL;
+
+	} END_FOR_EACH_SM(tmp);
+	return ret;
+}
+
+static void separate_and_filter(struct sm_state *sm, int comparison, struct range_list *rl,
+		struct stree *pre_stree,
+		struct stree **true_states,
+		struct stree **false_states,
+		int *mixed)
+{
+	struct state_list *true_stack = NULL;
+	struct state_list *false_stack = NULL;
+	struct timeval time_before;
+	struct timeval time_after;
+	int sec;
+
+	gettimeofday(&time_before, NULL);
+
+	if (!is_merged(sm)) {
+		DIMPLIED("%d '%s' is not merged.\n", get_lineno(), sm->name);
+		return;
+	}
+
+	if (option_debug_implied || option_debug) {
+		sm_msg("checking implications: (%s %s %s)",
+		       sm->name, show_special(comparison), show_rl(rl));
+	}
+
+	separate_pools(sm, comparison, rl, &true_stack, &false_stack, NULL, mixed);
+
+	DIMPLIED("filtering true stack.\n");
+	*true_states = filter_stack(sm, pre_stree, false_stack, true_stack);
+	DIMPLIED("filtering false stack.\n");
+	*false_states = filter_stack(sm, pre_stree, true_stack, false_stack);
+	free_slist(&true_stack);
+	free_slist(&false_stack);
+	if (option_debug_implied || option_debug) {
+		printf("These are the implied states for the true path: (%s %s %s)\n",
+		       sm->name, show_special(comparison), show_rl(rl));
+		__print_stree(*true_states);
+		printf("These are the implied states for the false path: (%s %s %s)\n",
+		       sm->name, show_special(comparison), show_rl(rl));
+		__print_stree(*false_states);
+	}
+
+	gettimeofday(&time_after, NULL);
+	sec = time_after.tv_sec - time_before.tv_sec;
+	if (sec > 20) {
+		sm->nr_children = 4000;
+		sm_perror("Function too hairy.  Ignoring implications after %d seconds.", sec);
+	}
+}
+
+static struct expression *get_last_expr(struct statement *stmt)
+{
+	struct statement *last;
+
+	last = last_ptr_list((struct ptr_list *)stmt->stmts);
+	if (last->type == STMT_EXPRESSION)
+		return last->expression;
+
+	if (last->type == STMT_LABEL) {
+		if (last->label_statement &&
+		    last->label_statement->type == STMT_EXPRESSION)
+			return last->label_statement->expression;
+	}
+
+	return NULL;
+}
+
+static struct expression *get_left_most_expr(struct expression *expr)
+{
+	struct statement *compound;
+
+	compound = get_expression_statement(expr);
+	if (compound)
+		return get_last_expr(compound);
+
+	expr = strip_parens(expr);
+	if (expr->type == EXPR_ASSIGNMENT)
+		return get_left_most_expr(expr->left);
+	return expr;
+}
+
+static int is_merged_expr(struct expression  *expr)
+{
+	struct sm_state *sm;
+	sval_t dummy;
+
+	if (get_value(expr, &dummy))
+		return 0;
+	sm = get_sm_state_expr(SMATCH_EXTRA, expr);
+	if (!sm)
+		return 0;
+	if (is_merged(sm))
+		return 1;
+	return 0;
+}
+
+static void delete_gate_sm_equiv(struct stree **stree, const char *name, struct symbol *sym)
+{
+	struct smatch_state *state;
+	struct relation *rel;
+
+	state = get_state(SMATCH_EXTRA, name, sym);
+	if (!state)
+		return;
+	FOR_EACH_PTR(estate_related(state), rel) {
+		delete_state_stree(stree, SMATCH_EXTRA, rel->name, rel->sym);
+	} END_FOR_EACH_PTR(rel);
+}
+
+static void delete_gate_sm(struct stree **stree, const char *name, struct symbol *sym)
+{
+	delete_state_stree(stree, SMATCH_EXTRA, name, sym);
+}
+
+static int handle_comparison(struct expression *expr,
+			      struct stree **implied_true,
+			      struct stree **implied_false)
+{
+	struct sm_state *sm = NULL;
+	struct range_list *rl = NULL;
+	struct expression *left;
+	struct expression *right;
+	struct symbol *type;
+	int comparison = expr->op;
+	int mixed = 0;
+
+	left = get_left_most_expr(expr->left);
+	right = get_left_most_expr(expr->right);
+
+	if (is_merged_expr(left)) {
+		sm = get_sm_state_expr(SMATCH_EXTRA, left);
+		get_implied_rl(right, &rl);
+	} else if (is_merged_expr(right)) {
+		sm = get_sm_state_expr(SMATCH_EXTRA, right);
+		get_implied_rl(left, &rl);
+		comparison = flip_comparison(comparison);
+	}
+
+	if (!rl || !sm)
+		return 0;
+
+	type = get_type(expr);
+	if (!type)
+		return 0;
+	if (type_positive_bits(rl_type(rl)) > type_positive_bits(type))
+		type = rl_type(rl);
+	if (type_positive_bits(type) < 31)
+		type = &int_ctype;
+	rl = cast_rl(type, rl);
+
+	separate_and_filter(sm, comparison, rl, __get_cur_stree(), implied_true, implied_false, &mixed);
+
+	delete_gate_sm_equiv(implied_true, sm->name, sm->sym);
+	delete_gate_sm_equiv(implied_false, sm->name, sm->sym);
+	if (mixed) {
+		delete_gate_sm(implied_true, sm->name, sm->sym);
+		delete_gate_sm(implied_false, sm->name, sm->sym);
+	}
+
+	return 1;
+}
+
+static int handle_zero_comparison(struct expression *expr,
+				struct stree **implied_true,
+				struct stree **implied_false)
+{
+	struct symbol *sym;
+	char *name;
+	struct sm_state *sm;
+	int mixed = 0;
+	int ret = 0;
+
+	if (expr->type == EXPR_POSTOP)
+		expr = strip_expr(expr->unop);
+
+	if (expr->type == EXPR_ASSIGNMENT) {
+		/* most of the time ->pools will be empty here because we
+		   just set the state, but if have assigned a conditional
+		   function there are implications. */
+		expr = expr->left;
+	}
+
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+	sm = get_sm_state(SMATCH_EXTRA, name, sym);
+	if (!sm)
+		goto free;
+
+	separate_and_filter(sm, SPECIAL_NOTEQUAL, tmp_range_list(estate_type(sm->state), 0), __get_cur_stree(), implied_true, implied_false, &mixed);
+	delete_gate_sm_equiv(implied_true, sm->name, sm->sym);
+	delete_gate_sm_equiv(implied_false, sm->name, sm->sym);
+	if (mixed) {
+		delete_gate_sm(implied_true, sm->name, sm->sym);
+		delete_gate_sm(implied_false, sm->name, sm->sym);
+	}
+
+	ret = 1;
+free:
+	free_string(name);
+	return ret;
+}
+
+static int handled_by_comparison_hook(struct expression *expr,
+				   struct stree **implied_true,
+				   struct stree **implied_false)
+{
+	struct state_list *true_stack = NULL;
+	struct state_list *false_stack = NULL;
+	struct stree *pre_stree;
+	struct sm_state *sm;
+
+	sm = comparison_implication_hook(expr, &true_stack, &false_stack);
+	if (!sm)
+		return 0;
+
+	pre_stree = clone_stree(__get_cur_stree());
+
+	*implied_true = filter_stack(sm, pre_stree, false_stack, true_stack);
+	*implied_false = filter_stack(sm, pre_stree, true_stack, false_stack);
+
+	free_stree(&pre_stree);
+	free_slist(&true_stack);
+	free_slist(&false_stack);
+
+	return 1;
+}
+
+static int handled_by_extra_states(struct expression *expr,
+				   struct stree **implied_true,
+				   struct stree **implied_false)
+{
+	if (expr->type == EXPR_COMPARE)
+		return handle_comparison(expr, implied_true, implied_false);
+	else
+		return handle_zero_comparison(expr, implied_true, implied_false);
+}
+
+static int handled_by_stored_conditions(struct expression *expr,
+					struct stree **implied_true,
+					struct stree **implied_false)
+{
+	struct state_list *true_stack = NULL;
+	struct state_list *false_stack = NULL;
+	struct stree *pre_stree;
+	struct sm_state *sm;
+
+	sm = stored_condition_implication_hook(expr, &true_stack, &false_stack);
+	if (!sm)
+		return 0;
+
+	pre_stree = clone_stree(__get_cur_stree());
+
+	*implied_true = filter_stack(sm, pre_stree, false_stack, true_stack);
+	*implied_false = filter_stack(sm, pre_stree, true_stack, false_stack);
+
+	free_stree(&pre_stree);
+	free_slist(&true_stack);
+	free_slist(&false_stack);
+
+	return 1;
+}
+
+static int found_implications;
+static struct stree *saved_implied_true;
+static struct stree *saved_implied_false;
+static struct stree *extra_saved_implied_true;
+static struct stree *extra_saved_implied_false;
+
+static void separate_extra_states(struct stree **implied_true,
+				  struct stree **implied_false)
+{
+	struct sm_state *sm;
+
+	/* We process extra states later to preserve the implications. */
+	FOR_EACH_SM(*implied_true, sm) {
+		if (sm->owner == SMATCH_EXTRA)
+			overwrite_sm_state_stree(&extra_saved_implied_true, sm);
+	} END_FOR_EACH_SM(sm);
+	FOR_EACH_SM(extra_saved_implied_true, sm) {
+		delete_state_stree(implied_true, sm->owner, sm->name, sm->sym);
+	} END_FOR_EACH_SM(sm);
+
+	FOR_EACH_SM(*implied_false, sm) {
+		if (sm->owner == SMATCH_EXTRA)
+			overwrite_sm_state_stree(&extra_saved_implied_false, sm);
+	} END_FOR_EACH_SM(sm);
+	FOR_EACH_SM(extra_saved_implied_false, sm) {
+		delete_state_stree(implied_false, sm->owner, sm->name, sm->sym);
+	} END_FOR_EACH_SM(sm);
+}
+
+static void get_tf_states(struct expression *expr,
+			  struct stree **implied_true,
+			  struct stree **implied_false)
+{
+	if (handled_by_comparison_hook(expr, implied_true, implied_false))
+		goto found;
+
+	if (handled_by_extra_states(expr, implied_true, implied_false)) {
+		separate_extra_states(implied_true, implied_false);
+		goto found;
+	}
+
+	if (handled_by_stored_conditions(expr, implied_true, implied_false))
+		goto found;
+
+	return;
+found:
+	found_implications = 1;
+}
+
+static void save_implications_hook(struct expression *expr)
+{
+	if (taking_too_long())
+		return;
+	get_tf_states(expr, &saved_implied_true, &saved_implied_false);
+}
+
+static void set_implied_states(struct expression *expr)
+{
+	struct sm_state *sm;
+
+	FOR_EACH_SM(saved_implied_true, sm) {
+		__set_true_false_sm(sm, NULL);
+	} END_FOR_EACH_SM(sm);
+	free_stree(&saved_implied_true);
+
+	FOR_EACH_SM(saved_implied_false, sm) {
+		__set_true_false_sm(NULL, sm);
+	} END_FOR_EACH_SM(sm);
+	free_stree(&saved_implied_false);
+}
+
+static void set_extra_implied_states(struct expression *expr)
+{
+	saved_implied_true = extra_saved_implied_true;
+	saved_implied_false = extra_saved_implied_false;
+	extra_saved_implied_true = NULL;
+	extra_saved_implied_false = NULL;
+	set_implied_states(NULL);
+}
+
+void param_limit_implications(struct expression *expr, int param, char *key, char *value)
+{
+	struct expression *arg;
+	struct symbol *compare_type;
+	char *name;
+	struct symbol *sym;
+	struct sm_state *sm;
+	struct sm_state *tmp;
+	struct stree *implied_true = NULL;
+	struct stree *implied_false = NULL;
+	struct range_list *orig, *limit;
+
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+	if (expr->type != EXPR_CALL)
+		return;
+
+	arg = get_argument_from_call_expr(expr->args, param);
+	if (!arg)
+		return;
+
+	arg = strip_parens(arg);
+	while (arg->type == EXPR_ASSIGNMENT && arg->op == '=')
+		arg = strip_parens(arg->left);
+
+	name = get_variable_from_key(arg, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	sm = get_sm_state(SMATCH_EXTRA, name, sym);
+	if (!sm || !sm->merged)
+		goto free;
+
+	if (strcmp(key, "$") == 0)
+		compare_type = get_arg_type(expr->fn, param);
+	else
+		compare_type = get_member_type_from_key(arg, key);
+
+	orig = estate_rl(sm->state);
+	orig = cast_rl(compare_type, orig);
+
+	call_results_to_rl(expr, compare_type, value, &limit);
+
+	separate_and_filter(sm, SPECIAL_EQUAL, limit, __get_cur_stree(), &implied_true, &implied_false, NULL);
+
+	FOR_EACH_SM(implied_true, tmp) {
+		__set_sm_fake_stree(tmp);
+	} END_FOR_EACH_SM(tmp);
+
+	free_stree(&implied_true);
+	free_stree(&implied_false);
+free:
+	free_string(name);
+}
+
+struct stree *__implied_case_stree(struct expression *switch_expr,
+				   struct range_list *rl,
+				   struct range_list_stack **remaining_cases,
+				   struct stree **raw_stree)
+{
+	char *name;
+	struct symbol *sym;
+	struct var_sym_list *vsl;
+	struct sm_state *sm;
+	struct stree *true_states = NULL;
+	struct stree *false_states = NULL;
+	struct stree *extra_states;
+	struct stree *ret = clone_stree(*raw_stree);
+
+	name = expr_to_chunk_sym_vsl(switch_expr, &sym, &vsl);
+
+	if (rl)
+		filter_top_rl(remaining_cases, rl);
+	else
+		rl = clone_rl(top_rl(*remaining_cases));
+
+	if (name) {
+		sm = get_sm_state_stree(*raw_stree, SMATCH_EXTRA, name, sym);
+		if (sm)
+			separate_and_filter(sm, SPECIAL_EQUAL, rl, *raw_stree, &true_states, &false_states, NULL);
+	}
+
+	__push_fake_cur_stree();
+	__unnullify_path();
+	if (name)
+		set_extra_nomod_vsl(name, sym, vsl, NULL, alloc_estate_rl(rl));
+	__pass_case_to_client(switch_expr, rl);
+	extra_states = __pop_fake_cur_stree();
+	overwrite_stree(extra_states, &true_states);
+	overwrite_stree(true_states, &ret);
+	free_stree(&extra_states);
+	free_stree(&true_states);
+	free_stree(&false_states);
+
+	free_string(name);
+	return ret;
+}
+
+static void match_end_func(struct symbol *sym)
+{
+	if (__inline_fn)
+		return;
+	implied_debug_msg = NULL;
+}
+
+static void get_tf_stacks_from_pool(struct sm_state *gate_sm,
+				    struct sm_state *pool_sm,
+				    struct state_list **true_stack,
+				    struct state_list **false_stack)
+{
+	struct sm_state *tmp;
+	int possibly_true = 0;
+
+	if (!gate_sm)
+		return;
+
+	if (strcmp(gate_sm->state->name, pool_sm->state->name) == 0) {
+		add_ptr_list(true_stack, pool_sm);
+		return;
+	}
+
+	FOR_EACH_PTR(gate_sm->possible, tmp) {
+		if (strcmp(tmp->state->name, pool_sm->state->name) == 0) {
+			possibly_true = 1;
+			break;
+		}
+	} END_FOR_EACH_PTR(tmp);
+
+	if (!possibly_true) {
+		add_ptr_list(false_stack, gate_sm);
+		return;
+	}
+
+	get_tf_stacks_from_pool(gate_sm->left, pool_sm, true_stack, false_stack);
+	get_tf_stacks_from_pool(gate_sm->right, pool_sm, true_stack, false_stack);
+}
+
+/*
+ * The situation is we have a SMATCH_EXTRA state and we want to break it into
+ * each of the ->possible states and find the implications of each.  The caller
+ * has to use __push_fake_cur_stree() to preserve the correct states so they
+ * can be restored later.
+ */
+void overwrite_states_using_pool(struct sm_state *gate_sm, struct sm_state *pool_sm)
+{
+	struct state_list *true_stack = NULL;
+	struct state_list *false_stack = NULL;
+	struct stree *pre_stree;
+	struct stree *implied_true;
+	struct sm_state *tmp;
+
+	if (!pool_sm->pool)
+		return;
+
+	get_tf_stacks_from_pool(gate_sm, pool_sm, &true_stack, &false_stack);
+
+	pre_stree = clone_stree(__get_cur_stree());
+
+	implied_true = filter_stack(gate_sm, pre_stree, false_stack, true_stack);
+
+	free_stree(&pre_stree);
+	free_slist(&true_stack);
+	free_slist(&false_stack);
+
+	FOR_EACH_SM(implied_true, tmp) {
+		set_state(tmp->owner, tmp->name, tmp->sym, tmp->state);
+	} END_FOR_EACH_SM(tmp);
+
+	free_stree(&implied_true);
+}
+
+int assume(struct expression *expr)
+{
+	int orig_final_pass = final_pass;
+
+	in_fake_env++;
+	final_pass = 0;
+	__push_fake_cur_stree();
+	found_implications = 0;
+	__split_whole_condition(expr);
+	final_pass = orig_final_pass;
+	in_fake_env--;
+
+	return 1;
+}
+
+void end_assume(void)
+{
+	__discard_false_states();
+	__free_fake_cur_stree();
+}
+
+int impossible_assumption(struct expression *left, int op, sval_t sval)
+{
+	struct expression *value;
+	struct expression *comparison;
+	int ret;
+
+	value = value_expr(sval.value);
+	comparison = compare_expression(left, op, value);
+
+	if (!assume(comparison))
+		return 0;
+	ret = is_impossible_path();
+	end_assume();
+
+	return ret;
+}
+
+void __extra_match_condition(struct expression *expr);
+void __comparison_match_condition(struct expression *expr);
+void __stored_condition(struct expression *expr);
+void register_implications(int id)
+{
+	add_hook(&save_implications_hook, CONDITION_HOOK);
+	add_hook(&set_implied_states, CONDITION_HOOK);
+	add_hook(&__extra_match_condition, CONDITION_HOOK);
+	add_hook(&set_extra_implied_states, CONDITION_HOOK);
+	add_hook(&__comparison_match_condition, CONDITION_HOOK);
+	add_hook(&__stored_condition, CONDITION_HOOK);
+	add_hook(&match_end_func, END_FUNC_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:26 2018
+++ new/usr/src/tools/smatch/src/smatch_impossible.c	Fri Dec 21 15:00:26 2018
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+
+static int my_id;
+static int my_return_id;
+
+STATE(impossible);
+
+int is_impossible_path(void)
+{
+	if (get_state(my_id, "impossible", NULL) == &impossible)
+		return 1;
+	return 0;
+}
+
+static void handle_compare(struct expression *left, int op, struct expression *right)
+{
+	int true_impossible = 0;
+	int false_impossible = 0;
+
+	left = strip_expr(left);
+	while (left && left->type == EXPR_ASSIGNMENT)
+		left = strip_expr(left->left);
+
+	if (!possibly_true(left, op, right))
+		true_impossible = 1;
+	if (!possibly_false(left, op, right))
+		false_impossible = 1;
+
+	if (!true_impossible && !false_impossible)
+		return;
+
+	set_true_false_states(my_id, "impossible", NULL,
+			      true_impossible ? &impossible : NULL,
+			      false_impossible ? &impossible : NULL);
+
+	if (inside_loop())
+		return;
+
+	set_true_false_states(my_return_id, "impossible", NULL,
+			      true_impossible ? &impossible : NULL,
+			      false_impossible ? &impossible : NULL);
+}
+
+static void match_condition(struct expression *expr)
+{
+	if (expr->type == EXPR_COMPARE)
+		handle_compare(expr->left, expr->op, expr->right);
+	else
+		handle_compare(expr, SPECIAL_NOTEQUAL, zero_expr());
+}
+
+void set_path_impossible(void)
+{
+	set_state(my_id, "impossible", NULL, &impossible);
+
+	if (inside_loop())
+		return;
+
+	set_state(my_return_id, "impossible", NULL, &impossible);
+}
+
+static void match_case(struct expression *expr, struct range_list *rl)
+{
+	if (rl)
+		return;
+	set_path_impossible();
+}
+
+static void print_impossible_return(int return_id, char *return_ranges, struct expression *expr)
+{
+	if (get_state(my_return_id, "impossible", NULL) == &impossible) {
+		if (option_debug)
+			sm_msg("impossible return.  return_id = %d return ranges = %s", return_id, return_ranges);
+		sql_insert_return_states(return_id, return_ranges, CULL_PATH, -1, "", "");
+	}
+}
+
+void register_impossible(int id)
+{
+	my_id = id;
+
+	add_hook(&match_condition, CONDITION_HOOK);
+	add_hook(&match_case, CASE_HOOK);
+}
+
+void register_impossible_return(int id)
+{
+	my_return_id = id;
+
+	add_split_return_callback(&print_impossible_return);
+}
--- /dev/null	Fri Dec 21 15:00:27 2018
+++ new/usr/src/tools/smatch/src/smatch_kernel_user_data.c	Fri Dec 21 15:00:27 2018
@@ -0,0 +1,1259 @@
+/*
+ * Copyright (C) 2011 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * There are a couple checks that try to see if a variable
+ * comes from the user.  It would be better to unify them
+ * into one place.  Also it we should follow the data down
+ * the call paths.  Hence this file.
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+static int my_call_id;
+
+STATE(called);
+static bool func_gets_user_data;
+
+static const char * kstr_funcs[] = {
+	"kstrtoull", "kstrtoll", "kstrtoul", "kstrtol", "kstrtouint",
+	"kstrtoint", "kstrtou64", "kstrtos64", "kstrtou32", "kstrtos32",
+	"kstrtou16", "kstrtos16", "kstrtou8", "kstrtos8", "kstrtoull_from_user"
+	"kstrtoll_from_user", "kstrtoul_from_user", "kstrtol_from_user",
+	"kstrtouint_from_user", "kstrtoint_from_user", "kstrtou16_from_user",
+	"kstrtos16_from_user", "kstrtou8_from_user", "kstrtos8_from_user",
+	"kstrtou64_from_user", "kstrtos64_from_user", "kstrtou32_from_user",
+	"kstrtos32_from_user",
+};
+
+static const char *returns_user_data[] = {
+	"simple_strtol", "simple_strtoll", "simple_strtoul", "simple_strtoull",
+	"kvm_register_read", "nlmsg_data", "nla_data", "memdup_user",
+	"kmap_atomic", "skb_network_header",
+};
+
+static void set_points_to_user_data(struct expression *expr);
+
+static struct stree *start_states;
+static struct stree_stack *saved_stack;
+static void save_start_states(struct statement *stmt)
+{
+	start_states = clone_stree(__get_cur_stree());
+}
+
+static void free_start_states(void)
+{
+	free_stree(&start_states);
+}
+
+static void match_save_states(struct expression *expr)
+{
+	push_stree(&saved_stack, start_states);
+	start_states = NULL;
+}
+
+static void match_restore_states(struct expression *expr)
+{
+	free_stree(&start_states);
+	start_states = pop_stree(&saved_stack);
+}
+
+static struct smatch_state *empty_state(struct sm_state *sm)
+{
+	return alloc_estate_empty();
+}
+
+static void pre_merge_hook(struct sm_state *sm)
+{
+	struct smatch_state *user;
+	struct smatch_state *extra;
+	struct range_list *rl;
+	sval_t dummy;
+	sval_t sval_100;
+
+	sval_100.value = 100;
+	sval_100.type = &int_ctype;
+
+	user = get_state(my_id, sm->name, sm->sym);
+	if (!user)
+		return;
+	if (!__in_function_def && !estate_rl(sm->state)) {
+		/*
+		 * If the one side is capped and the other side is empty then
+		 * let's just mark it as not-user data because the information
+		 * isn't going to be useful.  How this looks is:
+		 *
+		 * if (user_var > trusted)
+		 *	user_var = trusted;  <-- empty state
+		 * else
+		 *	<-- capped
+		 *
+		 * The problem is that sometimes things are capped to a literal
+		 * and we'd like to keep the state in that case...  Ugh.  I've
+		 * added a check which assumes that everything less than 100 is
+		 * probably capped against a literal.
+		 *
+		 */
+		if (is_capped_var_sym(sm->name, sm->sym) &&
+		    sval_cmp(estate_max(user), sval_100) > 0)
+			set_state(my_id, sm->name, sm->sym, alloc_estate_empty());
+		return;
+	}
+	extra = get_state(SMATCH_EXTRA, sm->name, sm->sym);
+	if (!extra || !estate_rl(extra))
+		return;
+	rl = rl_intersection(estate_rl(user), estate_rl(extra));
+	if (rl_to_sval(rl, &dummy))
+		rl = NULL;
+	set_state(my_id, sm->name, sm->sym, alloc_estate_rl(clone_rl(rl)));
+}
+
+static void extra_nomod_hook(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state)
+{
+	struct smatch_state *user;
+	struct range_list *rl;
+
+	user = get_state(my_id, name, sym);
+	if (!user)
+		return;
+	rl = rl_intersection(estate_rl(user), estate_rl(state));
+	if (rl_equiv(rl, estate_rl(user)))
+		return;
+	set_state(my_id, name, sym, alloc_estate_rl(rl));
+}
+
+static void tag_inner_struct_members(struct expression *expr, struct symbol *member)
+{
+	struct expression *edge_member;
+	struct symbol *base = get_real_base_type(member);
+	struct symbol *tmp;
+
+	if (member->ident)
+		expr = member_expression(expr, '.', member->ident);
+
+	FOR_EACH_PTR(base->symbol_list, tmp) {
+		struct symbol *type;
+
+		type = get_real_base_type(tmp);
+		if (!type)
+			continue;
+
+		if (type->type == SYM_UNION || type->type == SYM_STRUCT) {
+			tag_inner_struct_members(expr, tmp);
+			continue;
+		}
+
+		if (!tmp->ident)
+			continue;
+
+		edge_member = member_expression(expr, '.', tmp->ident);
+		set_state_expr(my_id, edge_member, alloc_estate_whole(type));
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void tag_struct_members(struct symbol *type, struct expression *expr)
+{
+	struct symbol *tmp;
+	struct expression *member;
+	int op = '*';
+
+	if (expr->type == EXPR_PREOP && expr->op == '&') {
+		expr = strip_expr(expr->unop);
+		op = '.';
+	}
+
+	FOR_EACH_PTR(type->symbol_list, tmp) {
+		type = get_real_base_type(tmp);
+		if (!type)
+			continue;
+
+		if (type->type == SYM_UNION || type->type == SYM_STRUCT) {
+			tag_inner_struct_members(expr, tmp);
+			continue;
+		}
+
+		if (!tmp->ident)
+			continue;
+
+		member = member_expression(expr, op, tmp->ident);
+		set_state_expr(my_id, member, alloc_estate_whole(get_type(member)));
+
+		if (type->type == SYM_ARRAY)
+			set_points_to_user_data(member);
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void tag_base_type(struct expression *expr)
+{
+	if (expr->type == EXPR_PREOP && expr->op == '&')
+		expr = strip_expr(expr->unop);
+	else
+		expr = deref_expression(expr);
+	set_state_expr(my_id, expr, alloc_estate_whole(get_type(expr)));
+}
+
+static void tag_as_user_data(struct expression *expr)
+{
+	struct symbol *type;
+
+	expr = strip_expr(expr);
+
+	type = get_type(expr);
+	if (!type || type->type != SYM_PTR)
+		return;
+	type = get_real_base_type(type);
+	if (!type)
+		return;
+	if (type == &void_ctype) {
+		set_state_expr(my_id, deref_expression(expr), alloc_estate_whole(&ulong_ctype));
+		return;
+	}
+	if (type->type == SYM_BASETYPE)
+		tag_base_type(expr);
+	if (type->type == SYM_STRUCT || type->type == SYM_UNION) {
+		if (expr->type != EXPR_PREOP || expr->op != '&')
+			expr = deref_expression(expr);
+		else
+			set_state_expr(my_id, deref_expression(expr), alloc_estate_whole(&ulong_ctype));
+		tag_struct_members(type, expr);
+	}
+}
+
+static void match_user_copy(const char *fn, struct expression *expr, void *_param)
+{
+	int param = PTR_INT(_param);
+	struct expression *dest;
+
+	func_gets_user_data = true;
+
+	dest = get_argument_from_call_expr(expr->args, param);
+	dest = strip_expr(dest);
+	if (!dest)
+		return;
+	tag_as_user_data(dest);
+}
+
+static int is_dev_attr_name(struct expression *expr)
+{
+	char *name;
+	int ret = 0;
+
+	name = expr_to_str(expr);
+	if (!name)
+		return 0;
+	if (strstr(name, "->attr.name"))
+		ret = 1;
+	free_string(name);
+	return ret;
+}
+
+static int ends_in_n(struct expression *expr)
+{
+	struct string *str;
+
+	if (!expr)
+		return 0;
+	if (expr->type != EXPR_STRING || !expr->string)
+		return 0;
+
+	str = expr->string;
+	if (str->length < 3)
+		return 0;
+
+	if (str->data[str->length - 3] == '%' &&
+	    str->data[str->length - 2] == 'n')
+		return 1;
+	return 0;
+}
+
+static void match_sscanf(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *str, *format, *arg;
+	int i, last;
+
+	func_gets_user_data = true;
+
+	str = get_argument_from_call_expr(expr->args, 0);
+	if (is_dev_attr_name(str))
+		return;
+
+	format = get_argument_from_call_expr(expr->args, 1);
+	if (is_dev_attr_name(format))
+		return;
+
+	last = ptr_list_size((struct ptr_list *)expr->args) - 1;
+
+	i = -1;
+	FOR_EACH_PTR(expr->args, arg) {
+		i++;
+		if (i < 2)
+			continue;
+		if (i == last && ends_in_n(format))
+			continue;
+		tag_as_user_data(arg);
+	} END_FOR_EACH_PTR(arg);
+}
+
+static int is_skb_data(struct expression *expr)
+{
+	struct symbol *sym;
+
+	if (!expr)
+		return 0;
+
+	if (expr->type == EXPR_BINOP && expr->op == '+')
+		return is_skb_data(expr->left);
+
+	expr = strip_expr(expr);
+	if (!expr)
+		return 0;
+	if (expr->type != EXPR_DEREF || expr->op != '.')
+		return 0;
+
+	if (!expr->member)
+		return 0;
+	if (strcmp(expr->member->name, "data") != 0)
+		return 0;
+
+	sym = expr_to_sym(expr->deref);
+	if (!sym)
+		return 0;
+	sym = get_real_base_type(sym);
+	if (!sym || sym->type != SYM_PTR)
+		return 0;
+	sym = get_real_base_type(sym);
+	if (!sym || sym->type != SYM_STRUCT || !sym->ident)
+		return 0;
+	if (strcmp(sym->ident->name, "sk_buff") != 0)
+		return 0;
+
+	return 1;
+}
+
+static int get_rl_from_function(struct expression *expr, struct range_list **rl)
+{
+	int i;
+
+	if (expr->type != EXPR_CALL || expr->fn->type != EXPR_SYMBOL ||
+	    !expr->fn->symbol_name || !expr->fn->symbol_name->name)
+		return 0;
+
+	for (i = 0; i < ARRAY_SIZE(returns_user_data); i++) {
+		if (strcmp(expr->fn->symbol_name->name, returns_user_data[i]) == 0) {
+			*rl = alloc_whole_rl(get_type(expr));
+			return 1;
+		}
+	}
+	return 0;
+}
+
+int points_to_user_data(struct expression *expr)
+{
+	struct smatch_state *state;
+	struct range_list *rl;
+	char buf[256];
+	struct symbol *sym;
+	char *name;
+	int ret = 0;
+
+	expr = strip_expr(expr);
+	if (!expr)
+		return 0;
+	if (is_skb_data(expr))
+		return 1;
+	if (get_rl_from_function(expr, &rl))
+		return 1;
+
+	if (expr->type == EXPR_BINOP && expr->op == '+') {
+		if (points_to_user_data(expr->left))
+			return 1;
+		if (points_to_user_data(expr->right))
+			return 1;
+		return 0;
+	}
+
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+	snprintf(buf, sizeof(buf), "*%s", name);
+	state = get_state(my_id, buf, sym);
+	if (state && estate_rl(state))
+		ret = 1;
+free:
+	free_string(name);
+	return ret;
+}
+
+static void set_points_to_user_data(struct expression *expr)
+{
+	char *name;
+	struct symbol *sym;
+	char buf[256];
+
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+	snprintf(buf, sizeof(buf), "*%s", name);
+	set_state(my_id, buf, sym, alloc_estate_whole(&llong_ctype));
+free:
+	free_string(name);
+}
+
+static int comes_from_skb_data(struct expression *expr)
+{
+	expr = strip_expr(expr);
+	if (!expr || expr->type != EXPR_PREOP || expr->op != '*')
+		return 0;
+
+	expr = strip_expr(expr->unop);
+	if (!expr)
+		return 0;
+	if (expr->type == EXPR_BINOP && expr->op == '+')
+		expr = strip_expr(expr->left);
+
+	return is_skb_data(expr);
+}
+
+static int handle_struct_assignment(struct expression *expr)
+{
+	struct expression *right;
+	struct symbol *left_type, *right_type;
+
+	left_type = get_type(expr->left);
+	if (!left_type || left_type->type != SYM_PTR)
+		return 0;
+	left_type = get_real_base_type(left_type);
+	if (!left_type)
+		return 0;
+	if (left_type->type != SYM_STRUCT &&
+	    left_type->type != SYM_UNION)
+		return 0;
+
+	/*
+	 * Ignore struct to struct assignments because for those we look at the
+	 * individual members.
+	 */
+	right = strip_expr(expr->right);
+	right_type = get_type(right);
+	if (!right_type || right_type->type != SYM_PTR)
+		return 0;
+
+	/* If we are assigning struct members then normally that is handled
+	 * by fake assignments, however if we cast one struct to a different
+	 * of struct then we handle that here.
+	 */
+	right_type = get_real_base_type(right_type);
+	if (right_type == left_type)
+		return 0;
+
+	if (!points_to_user_data(right))
+		return 0;
+
+	tag_as_user_data(expr->left);
+	return 1;
+}
+
+static int handle_get_user(struct expression *expr)
+{
+	char *name;
+	int ret = 0;
+
+	name = get_macro_name(expr->pos);
+	if (!name || strcmp(name, "get_user") != 0)
+		return 0;
+
+	name = expr_to_var(expr->right);
+	if (!name || strcmp(name, "__val_gu") != 0)
+		goto free;
+	set_state_expr(my_id, expr->left, alloc_estate_whole(get_type(expr->left)));
+	ret = 1;
+free:
+	free_string(name);
+	return ret;
+}
+
+static void match_assign(struct expression *expr)
+{
+	struct range_list *rl;
+
+	if (is_fake_call(expr->right))
+		goto clear_old_state;
+	if (handle_get_user(expr))
+		return;
+	if (points_to_user_data(expr->right))
+		set_points_to_user_data(expr->left);
+	if (handle_struct_assignment(expr))
+		return;
+
+	if (!get_user_rl(expr->right, &rl))
+		goto clear_old_state;
+
+	rl = cast_rl(get_type(expr->left), rl);
+	set_state_expr(my_id, expr->left, alloc_estate_rl(rl));
+
+	return;
+
+clear_old_state:
+	if (get_state_expr(my_id, expr->left))
+		set_state_expr(my_id, expr->left, alloc_estate_empty());
+}
+
+static void handle_eq_noteq(struct expression *expr)
+{
+	struct smatch_state *left_orig, *right_orig;
+
+	left_orig = get_state_expr(my_id, expr->left);
+	right_orig = get_state_expr(my_id, expr->right);
+
+	if (!left_orig && !right_orig)
+		return;
+	if (left_orig && right_orig)
+		return;
+
+	if (left_orig) {
+		set_true_false_states_expr(my_id, expr->left,
+				expr->op == SPECIAL_EQUAL ? alloc_estate_empty() : NULL,
+				expr->op == SPECIAL_EQUAL ? NULL : alloc_estate_empty());
+	} else {
+		set_true_false_states_expr(my_id, expr->right,
+				expr->op == SPECIAL_EQUAL ? alloc_estate_empty() : NULL,
+				expr->op == SPECIAL_EQUAL ? NULL : alloc_estate_empty());
+	}
+}
+
+static void handle_unsigned_lt_gt(struct expression *expr)
+{
+	struct symbol *type;
+	struct range_list *left;
+	struct range_list *right;
+	struct range_list *non_negative;
+	sval_t min, minus_one;
+
+	/*
+	 * conditions are mostly handled by smatch_extra.c.  The special case
+	 * here is that say you have if (user_int < unknown_u32) {
+	 * In Smatch extra we say that, We have no idea what value
+	 * unknown_u32 is so the only thin we can say for sure is that
+	 * user_int is not -1 (UINT_MAX).  But in check_user_data2.c we should
+	 * assume that unless unknown_u32 is user data, it's probably less than
+	 * INT_MAX.
+	 *
+	 */
+
+	type = get_type(expr);
+	if (!type_unsigned(type))
+		return;
+
+	/*
+	 * Assume if (user < trusted) { ... because I am lazy and because this
+	 * is the correct way to write code.
+	 */
+	if (!get_user_rl(expr->left, &left))
+		return;
+	if (get_user_rl(expr->right, &right))
+		return;
+
+	if (!sval_is_negative(rl_min(left)))
+		return;
+	min = rl_min(left);
+	minus_one.type = rl_type(left);
+	minus_one.value = -1;
+	non_negative = remove_range(left, min, minus_one);
+
+	switch (expr->op) {
+	case '<':
+	case SPECIAL_UNSIGNED_LT:
+	case SPECIAL_LTE:
+	case SPECIAL_UNSIGNED_LTE:
+		set_true_false_states_expr(my_id, expr->left,
+					   alloc_estate_rl(non_negative), NULL);
+		break;
+	case '>':
+	case SPECIAL_UNSIGNED_GT:
+	case SPECIAL_GTE:
+	case SPECIAL_UNSIGNED_GTE:
+		set_true_false_states_expr(my_id, expr->left,
+					   NULL, alloc_estate_rl(non_negative));
+		break;
+	}
+}
+
+static void match_condition(struct expression *expr)
+{
+	if (expr->type != EXPR_COMPARE)
+		return;
+
+	if (expr->op == SPECIAL_EQUAL ||
+	    expr->op == SPECIAL_NOTEQUAL) {
+		handle_eq_noteq(expr);
+		return;
+	}
+
+	handle_unsigned_lt_gt(expr);
+}
+
+static void match_user_assign_function(const char *fn, struct expression *expr, void *unused)
+{
+	tag_as_user_data(expr->left);
+	set_points_to_user_data(expr->left);
+}
+
+static void match_returns_user_rl(const char *fn, struct expression *expr, void *unused)
+{
+	func_gets_user_data = true;
+}
+
+static int get_user_macro_rl(struct expression *expr, struct range_list **rl)
+{
+	struct expression *parent;
+	char *macro;
+
+	if (!expr)
+		return 0;
+
+	macro = get_macro_name(expr->pos);
+	if (!macro)
+		return 0;
+
+	/* handle ntohl(foo[i]) where "i" is trusted */
+	parent = expr_get_parent_expr(expr);
+	while (parent && parent->type != EXPR_BINOP)
+		parent = expr_get_parent_expr(parent);
+	if (parent && parent->type == EXPR_BINOP) {
+		char *parent_macro = get_macro_name(parent->pos);
+
+		if (parent_macro && strcmp(macro, parent_macro) == 0)
+			return 0;
+	}
+
+	if (strcmp(macro, "ntohl") == 0) {
+		*rl = alloc_whole_rl(&uint_ctype);
+		return 1;
+	}
+	if (strcmp(macro, "ntohs") == 0) {
+		*rl = alloc_whole_rl(&ushort_ctype);
+		return 1;
+	}
+	return 0;
+}
+
+struct db_info {
+	struct range_list *rl;
+	struct expression *call;
+};
+static int returned_rl_callback(void *_info, int argc, char **argv, char **azColName)
+{
+	struct db_info *db_info = _info;
+	struct range_list *rl;
+	char *return_ranges = argv[0];
+	char *user_ranges = argv[1];
+	struct expression *arg;
+	int comparison;
+
+	if (argc != 2)
+		return 0;
+
+	call_results_to_rl(db_info->call, get_type(db_info->call), user_ranges, &rl);
+	if (str_to_comparison_arg(return_ranges, db_info->call, &comparison, &arg) &&
+	    comparison == SPECIAL_EQUAL) {
+		struct range_list *orig_rl;
+
+		if (!get_user_rl(arg, &orig_rl))
+			return 0;
+		rl = rl_intersection(rl, orig_rl);
+		if (!rl)
+			return 0;
+	}
+	db_info->rl = rl_union(db_info->rl, rl);
+
+	return 0;
+}
+
+static int has_user_data(struct symbol *sym)
+{
+	struct sm_state *tmp;
+
+	FOR_EACH_MY_SM(my_id, __get_cur_stree(), tmp) {
+		if (tmp->sym == sym)
+			return 1;
+	} END_FOR_EACH_SM(tmp);
+	return 0;
+}
+
+static int we_pass_user_data(struct expression *call)
+{
+	struct expression *arg;
+	struct symbol *sym;
+
+	FOR_EACH_PTR(call->args, arg) {
+		sym = expr_to_sym(arg);
+		if (!sym)
+			continue;
+		if (has_user_data(sym))
+			return 1;
+	} END_FOR_EACH_PTR(arg);
+
+	return 0;
+}
+
+static int db_returned_user_rl(struct expression *call, struct range_list **rl)
+{
+	struct db_info db_info = {};
+
+	/* for function pointers assume everything is used */
+	if (call->fn->type != EXPR_SYMBOL)
+		return 0;
+	if (is_fake_call(call))
+		return 0;
+
+	db_info.call = call;
+	run_sql(&returned_rl_callback, &db_info,
+		"select return, value from return_states where %s and type = %d and parameter = -1 and key = '$';",
+		get_static_filter(call->fn->symbol), USER_DATA3_SET);
+	if (db_info.rl) {
+		func_gets_user_data = true;
+		*rl = db_info.rl;
+		return 1;
+	}
+
+	run_sql(&returned_rl_callback, &db_info,
+		"select return, value from return_states where %s and type = %d and parameter = -1 and key = '$';",
+		get_static_filter(call->fn->symbol), USER_DATA3);
+	if (db_info.rl) {
+		if (!we_pass_user_data(call))
+			return 0;
+		*rl = db_info.rl;
+		return 1;
+	}
+
+	return 0;
+}
+
+struct stree *get_user_stree(void)
+{
+	return get_all_states_stree(my_id);
+}
+
+static int user_data_flag;
+static int no_user_data_flag;
+static struct range_list *var_user_rl(struct expression *expr)
+{
+	struct smatch_state *state;
+	struct range_list *rl;
+	struct range_list *absolute_rl;
+
+	if (expr->type == EXPR_BINOP && expr->op == '%') {
+		struct range_list *left, *right;
+
+		if (!get_user_rl(expr->right, &right))
+			return NULL;
+		get_absolute_rl(expr->left, &left);
+		rl = rl_binop(left, '%', right);
+		goto found;
+	}
+
+	if (!option_spammy && expr->type == EXPR_BINOP && expr->op == '/') {
+		struct range_list *left = NULL;
+		struct range_list *right = NULL;
+		struct range_list *abs_right;
+
+		/*
+		 * The specific bug I'm dealing with is:
+		 *
+		 * foo = capped_user / unknown;
+		 *
+		 * Instead of just saying foo is now entirely user_rl we should
+		 * probably say instead that it is not at all user data.
+		 *
+		 */
+
+		get_user_rl(expr->left, &left);
+		get_user_rl(expr->right, &right);
+		get_absolute_rl(expr->right, &abs_right);
+
+		if (left && !right) {
+			rl = rl_binop(left, '/', abs_right);
+			if (sval_cmp(rl_max(left), rl_max(rl)) < 0)
+				no_user_data_flag = 1;
+		}
+
+		return NULL;
+	}
+
+	if (get_rl_from_function(expr, &rl))
+		goto found;
+
+	if (get_user_macro_rl(expr, &rl))
+		goto found;
+
+	if (comes_from_skb_data(expr)) {
+		rl = alloc_whole_rl(get_type(expr));
+		goto found;
+	}
+
+	state = get_state_expr(my_id, expr);
+	if (state && estate_rl(state)) {
+		rl = estate_rl(state);
+		goto found;
+	}
+
+	if (expr->type == EXPR_CALL && db_returned_user_rl(expr, &rl))
+		goto found;
+
+	if (is_array(expr)) {
+		struct expression *array = get_array_base(expr);
+
+		if (!get_state_expr(my_id, array)) {
+			no_user_data_flag = 1;
+			return NULL;
+		}
+	}
+
+	if (expr->type == EXPR_PREOP && expr->op == '*' &&
+	    is_user_rl(expr->unop)) {
+		rl = var_to_absolute_rl(expr);
+		goto found;
+	}
+
+	return NULL;
+found:
+	user_data_flag = 1;
+	absolute_rl = var_to_absolute_rl(expr);
+	return clone_rl(rl_intersection(rl, absolute_rl));
+}
+
+int get_user_rl(struct expression *expr, struct range_list **rl)
+{
+	user_data_flag = 0;
+	no_user_data_flag = 0;
+	custom_get_absolute_rl(expr, &var_user_rl, rl);
+	if (!user_data_flag || no_user_data_flag)
+		*rl = NULL;
+
+	return !!*rl;
+}
+
+int get_user_rl_spammy(struct expression *expr, struct range_list **rl)
+{
+	int ret;
+
+	option_spammy++;
+	ret = get_user_rl(expr, rl);
+	option_spammy--;
+
+	return ret;
+}
+
+int is_user_rl(struct expression *expr)
+{
+	struct range_list *tmp;
+
+	return get_user_rl_spammy(expr, &tmp);
+}
+
+int get_user_rl_var_sym(const char *name, struct symbol *sym, struct range_list **rl)
+{
+	struct smatch_state *state;
+
+	state = get_state(my_id, name, sym);
+	if (state && estate_rl(state)) {
+		*rl = estate_rl(state);
+		return 1;
+	}
+	return 0;
+}
+
+static void match_call_info(struct expression *expr)
+{
+	struct range_list *rl;
+	struct expression *arg;
+	struct symbol *type;
+	int i = 0;
+
+	i = -1;
+	FOR_EACH_PTR(expr->args, arg) {
+		i++;
+		type = get_arg_type(expr->fn, i);
+
+		if (!get_user_rl(arg, &rl))
+			continue;
+
+		rl = cast_rl(type, rl);
+		sql_insert_caller_info(expr, USER_DATA3, i, "$", show_rl(rl));
+	} END_FOR_EACH_PTR(arg);
+}
+
+static int is_struct_ptr(struct symbol *sym)
+{
+	struct symbol *type;
+
+	if (!sym)
+		return 0;
+	type = get_real_base_type(sym);
+	if (!type || type->type != SYM_PTR)
+		return 0;
+	type = get_real_base_type(type);
+	if (!type || type->type != SYM_STRUCT)
+		return 0;
+	return 1;
+}
+
+static void struct_member_callback(struct expression *call, int param, char *printed_name, struct sm_state *sm)
+{
+	struct smatch_state *state;
+	struct range_list *rl;
+	struct symbol *type;
+
+	/*
+	 * Smatch uses a hack where if we get an unsigned long we say it's
+	 * both user data and it points to user data.  But if we pass it to a
+	 * function which takes an int, then it's just user data.  There's not
+	 * enough bytes for it to be a pointer.
+	 *
+	 */
+	type = get_arg_type(call->fn, param);
+	if (type && type_bits(type) < type_bits(&ptr_ctype))
+		return;
+
+	if (strcmp(sm->state->name, "") == 0)
+		return;
+
+	if (strcmp(printed_name, "*$") == 0 &&
+	    is_struct_ptr(sm->sym))
+		return;
+
+	state = get_state(SMATCH_EXTRA, sm->name, sm->sym);
+	if (!state || !estate_rl(state))
+		rl = estate_rl(sm->state);
+	else
+		rl = rl_intersection(estate_rl(sm->state), estate_rl(state));
+
+	sql_insert_caller_info(call, USER_DATA3, param, printed_name, show_rl(rl));
+}
+
+static void set_param_user_data(const char *name, struct symbol *sym, char *key, char *value)
+{
+	struct range_list *rl = NULL;
+	struct smatch_state *state;
+	struct symbol *type;
+	char fullname[256];
+
+	if (strcmp(key, "*$") == 0)
+		snprintf(fullname, sizeof(fullname), "*%s", name);
+	else if (strncmp(key, "$", 1) == 0)
+		snprintf(fullname, 256, "%s%s", name, key + 1);
+	else
+		return;
+
+	type = get_member_type_from_key(symbol_expression(sym), key);
+
+	/* if the caller passes a void pointer with user data */
+	if (strcmp(key, "*$") == 0 && type && type != &void_ctype) {
+		struct expression *expr = symbol_expression(sym);
+
+		tag_as_user_data(expr);
+		set_points_to_user_data(expr);
+		return;
+	}
+	str_to_rl(type, value, &rl);
+	state = alloc_estate_rl(rl);
+	set_state(my_id, fullname, sym, state);
+}
+
+static void set_called(const char *name, struct symbol *sym, char *key, char *value)
+{
+	set_state(my_call_id, "this_function", NULL, &called);
+}
+
+static void match_syscall_definition(struct symbol *sym)
+{
+	struct symbol *arg;
+	char *macro;
+	char *name;
+	int is_syscall = 0;
+
+	macro = get_macro_name(sym->pos);
+	if (macro &&
+	    (strncmp("SYSCALL_DEFINE", macro, strlen("SYSCALL_DEFINE")) == 0 ||
+	     strncmp("COMPAT_SYSCALL_DEFINE", macro, strlen("COMPAT_SYSCALL_DEFINE")) == 0))
+		is_syscall = 1;
+
+	name = get_function();
+	if (!option_no_db && get_state(my_call_id, "this_function", NULL) != &called) {
+		if (name && strncmp(name, "sys_", 4) == 0)
+			is_syscall = 1;
+	}
+
+	if (name && strncmp(name, "compat_sys_", 11) == 0)
+		is_syscall = 1;
+
+	if (!is_syscall)
+		return;
+
+	FOR_EACH_PTR(sym->ctype.base_type->arguments, arg) {
+		set_state(my_id, arg->ident->name, arg, alloc_estate_whole(get_real_base_type(arg)));
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void set_to_user_data(struct expression *expr, char *key, char *value)
+{
+	char *name;
+	struct symbol *sym;
+	struct symbol *type;
+	struct range_list *rl = NULL;
+
+	type = get_member_type_from_key(expr, key);
+	name = get_variable_from_key(expr, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	call_results_to_rl(expr, type, value, &rl);
+
+	set_state(my_id, name, sym, alloc_estate_rl(rl));
+free:
+	free_string(name);
+
+}
+
+static void returns_param_user_data(struct expression *expr, int param, char *key, char *value)
+{
+	struct expression *arg;
+	struct expression *call;
+
+	call = expr;
+	while (call->type == EXPR_ASSIGNMENT)
+		call = strip_expr(call->right);
+	if (call->type != EXPR_CALL)
+		return;
+
+	if (!we_pass_user_data(call))
+		return;
+
+	if (param == -1) {
+		if (expr->type != EXPR_ASSIGNMENT)
+			return;
+		set_to_user_data(expr->left, key, value);
+		return;
+	}
+
+	arg = get_argument_from_call_expr(call->args, param);
+	if (!arg)
+		return;
+	set_to_user_data(arg, key, value);
+}
+
+static void returns_param_user_data_set(struct expression *expr, int param, char *key, char *value)
+{
+	struct expression *arg;
+
+	func_gets_user_data = true;
+
+	if (param == -1) {
+		if (expr->type != EXPR_ASSIGNMENT)
+			return;
+		if (strcmp(key, "*$") == 0) {
+			set_points_to_user_data(expr->left);
+			tag_as_user_data(expr->left);
+		} else {
+			set_to_user_data(expr->left, key, value);
+		}
+		return;
+	}
+
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+	if (expr->type != EXPR_CALL)
+		return;
+
+	arg = get_argument_from_call_expr(expr->args, param);
+	if (!arg)
+		return;
+	set_to_user_data(arg, key, value);
+}
+
+static int has_empty_state(struct sm_state *sm)
+{
+	struct sm_state *tmp;
+
+	FOR_EACH_PTR(sm->possible, tmp) {
+		if (!estate_rl(tmp->state))
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+
+	return 0;
+}
+
+static void param_set_to_user_data(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct sm_state *sm;
+	struct smatch_state *start_state;
+	struct range_list *rl;
+	int param;
+	char *return_str;
+	const char *param_name;
+	struct symbol *ret_sym;
+	bool return_found = false;
+
+	expr = strip_expr(expr);
+	return_str = expr_to_str(expr);
+	ret_sym = expr_to_sym(expr);
+
+	FOR_EACH_MY_SM(my_id, __get_cur_stree(), sm) {
+		if (has_empty_state(sm))
+			continue;
+
+		param = get_param_num_from_sym(sm->sym);
+		if (param < 0)
+			continue;
+
+		/* The logic here was that if we were passed in a user data then
+		 * we don't record that.  It's like the difference between
+		 * param_filter and param_set.  When I think about it, I'm not
+		 * sure it actually works.  It's probably harmless because we
+		 * checked earlier that we're not returning a parameter...
+		 * Let's mark this as a TODO.
+		 */
+		start_state = get_state_stree(start_states, my_id, sm->name, sm->sym);
+		if (start_state && rl_equiv(estate_rl(sm->state), estate_rl(start_state)))
+			continue;
+
+		param_name = get_param_name(sm);
+		if (!param_name)
+			continue;
+		if (strcmp(param_name, "$") == 0)  /* The -1 param is handled after the loop */
+			continue;
+
+		sql_insert_return_states(return_id, return_ranges,
+					 func_gets_user_data ? USER_DATA3_SET : USER_DATA3,
+					 param, param_name, show_rl(estate_rl(sm->state)));
+	} END_FOR_EACH_SM(sm);
+
+	if (points_to_user_data(expr)) {
+		sql_insert_return_states(return_id, return_ranges,
+					 (is_skb_data(expr) || !func_gets_user_data) ?
+					 USER_DATA3_SET : USER_DATA3,
+					 -1, "*$", "");
+		goto free_string;
+	}
+
+
+	FOR_EACH_MY_SM(my_id, __get_cur_stree(), sm) {
+		if (!ret_sym)
+			break;
+		if (ret_sym != sm->sym)
+			continue;
+
+		param_name = state_name_to_param_name(sm->name, return_str);
+		if (!param_name)
+			continue;
+		if (strcmp(param_name, "$") == 0)
+			return_found = true;
+		sql_insert_return_states(return_id, return_ranges,
+					 func_gets_user_data ? USER_DATA3_SET : USER_DATA3,
+					 -1, param_name, show_rl(estate_rl(sm->state)));
+	} END_FOR_EACH_SM(sm);
+
+
+	if (!return_found && get_user_rl(expr, &rl)) {
+		sql_insert_return_states(return_id, return_ranges,
+					 func_gets_user_data ? USER_DATA3_SET : USER_DATA3,
+					 -1, "$", show_rl(rl));
+		goto free_string;
+	}
+
+free_string:
+	free_string(return_str);
+}
+
+static struct int_stack *gets_data_stack;
+static void match_function_def(struct symbol *sym)
+{
+	func_gets_user_data = false;
+}
+
+static void match_inline_start(struct expression *expr)
+{
+	push_int(&gets_data_stack, func_gets_user_data);
+}
+
+static void match_inline_end(struct expression *expr)
+{
+	func_gets_user_data = pop_int(&gets_data_stack);
+}
+
+void register_kernel_user_data2(int id)
+{
+	int i;
+
+	my_id = id;
+
+	if (option_project != PROJ_KERNEL)
+		return;
+
+	add_hook(&match_function_def, FUNC_DEF_HOOK);
+	add_hook(&match_inline_start, INLINE_FN_START);
+	add_hook(&match_inline_end, INLINE_FN_END);
+
+	add_hook(&save_start_states, AFTER_DEF_HOOK);
+	add_hook(&free_start_states, AFTER_FUNC_HOOK);
+	add_hook(&match_save_states, INLINE_FN_START);
+	add_hook(&match_restore_states, INLINE_FN_END);
+
+	add_unmatched_state_hook(my_id, &empty_state);
+	add_extra_nomod_hook(&extra_nomod_hook);
+	add_pre_merge_hook(my_id, &pre_merge_hook);
+	add_merge_hook(my_id, &merge_estates);
+
+	add_function_hook("copy_from_user", &match_user_copy, INT_PTR(0));
+	add_function_hook("__copy_from_user", &match_user_copy, INT_PTR(0));
+	add_function_hook("memcpy_fromiovec", &match_user_copy, INT_PTR(0));
+	for (i = 0; i < ARRAY_SIZE(kstr_funcs); i++)
+		add_function_hook(kstr_funcs[i], &match_user_copy, INT_PTR(2));
+	add_function_hook("usb_control_msg", &match_user_copy, INT_PTR(6));
+
+	for (i = 0; i < ARRAY_SIZE(returns_user_data); i++) {
+		add_function_assign_hook(returns_user_data[i], &match_user_assign_function, NULL);
+		add_function_hook(returns_user_data[i], &match_returns_user_rl, NULL);
+	}
+
+	add_function_hook("sscanf", &match_sscanf, NULL);
+
+	add_hook(&match_syscall_definition, AFTER_DEF_HOOK);
+
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+	add_hook(&match_condition, CONDITION_HOOK);
+
+	add_hook(&match_call_info, FUNCTION_CALL_HOOK);
+	add_member_info_callback(my_id, struct_member_callback);
+	select_caller_info_hook(set_param_user_data, USER_DATA3);
+	select_return_states_hook(USER_DATA3, &returns_param_user_data);
+	select_return_states_hook(USER_DATA3_SET, &returns_param_user_data_set);
+	add_split_return_callback(&param_set_to_user_data);
+}
+
+void register_kernel_user_data3(int id)
+{
+	my_call_id = id;
+
+	if (option_project != PROJ_KERNEL)
+		return;
+	select_caller_info_hook(set_called, INTERNAL);
+}
+
--- /dev/null	Fri Dec 21 15:00:27 2018
+++ new/usr/src/tools/smatch/src/smatch_links.c	Fri Dec 21 15:00:27 2018
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Some helper functions for managing links.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static struct smatch_state *alloc_link(struct var_sym_list *links)
+{
+	struct smatch_state *state;
+	static char buf[256];
+	struct var_sym *tmp;
+	int i;
+
+	state = __alloc_smatch_state(0);
+
+	i = 0;
+	FOR_EACH_PTR(links, tmp) {
+		if (!i++) {
+			snprintf(buf, sizeof(buf), "%s", tmp->var);
+		} else {
+			append(buf, ", ", sizeof(buf));
+			append(buf, tmp->var, sizeof(buf));
+		}
+	} END_FOR_EACH_PTR(tmp);
+
+	state->name = alloc_sname(buf);
+	state->data = links;
+	return state;
+}
+
+struct smatch_state *merge_link_states(struct smatch_state *s1, struct smatch_state *s2)
+{
+	struct var_sym_list *new_links;
+
+	if (s1 == &undefined)
+		return s2;
+	if (s2 == &undefined)
+		return s1;
+
+	if (var_sym_lists_equiv(s1->data, s2->data))
+		return s1;
+
+	new_links = clone_var_sym_list(s1->data);
+	merge_var_sym_list(&new_links, s2->data);
+
+	return alloc_link(new_links);
+}
+
+void store_link(int link_id, const char *var, struct symbol *sym, const char *link_name, struct symbol *link_sym)
+{
+
+	struct smatch_state *old_state;
+	struct var_sym_list *links;
+
+	if (!cur_func_sym)
+		return;
+
+	old_state = get_state(link_id, var, sym);
+	if (old_state)
+		links = clone_var_sym_list(old_state->data);
+	else
+		links = NULL;
+
+	add_var_sym(&links, link_name, link_sym);
+	set_state(link_id, var, sym, alloc_link(links));
+}
+
+static void match_link_modify(struct sm_state *sm, struct expression *mod_expr)
+{
+	struct var_sym_list *links;
+	struct var_sym *tmp;
+
+	links = sm->state->data;
+
+	FOR_EACH_PTR(links, tmp) {
+		set_state(sm->owner - 1, tmp->var, tmp->sym, &undefined);
+	} END_FOR_EACH_PTR(tmp);
+	set_state(sm->owner, sm->name, sm->sym, &undefined);
+}
+
+void set_up_link_functions(int id, int link_id)
+{
+	if (id + 1 != link_id)
+		sm_fatal("FATAL ERROR: links need to be registered directly after the check");
+
+	add_merge_hook(link_id, &merge_link_states);
+	add_modification_hook(link_id, &match_link_modify);
+	// free link at the end of function
+}
+
--- /dev/null	Fri Dec 21 15:00:27 2018
+++ new/usr/src/tools/smatch/src/smatch_local_values.c	Fri Dec 21 15:00:27 2018
@@ -0,0 +1,243 @@
+/*
+ * Copyright (C) 2013 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "scope.h"
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+/*
+ * I'm going to store the states of local data at the end of each function.
+ * Then at the end of the file, I'll combine the possible range lists for
+ * each state and store the value in the on-disk database.
+ *
+ * One issue is that when I read the data back from the in-memory database at
+ * the end of the file, then I don't have access to type information.  I'll just
+ * cast everything to "long long" for now, I guess.  We'll see how that works.
+ */
+
+static char *db_vals;
+static int get_vals(void *unused, int argc, char **argv, char **azColName)
+{
+	db_vals = alloc_string(argv[0]);
+	return 0;
+}
+
+static int is_array_symbol(struct expression *expr)
+{
+	struct symbol *type;
+
+	if (!expr || expr->type != EXPR_SYMBOL)
+		return 0;
+	type = get_type(expr);
+	if (!type)
+		return 0;
+	if (type->type == SYM_ARRAY)
+		return 1;
+	return 0;
+}
+
+int get_local_rl(struct expression *expr, struct range_list **rl)
+{
+	char *name;
+	struct range_list *tmp;
+
+	if (!is_static(expr))
+		return 0;
+	if (is_array_symbol(expr))
+		return 0;
+	name = expr_to_var(expr);
+	if (!name)
+		return 0;
+
+	db_vals = NULL;
+	run_sql(get_vals, NULL,
+		"select value from local_values where file = '%s' and variable = '%s';",
+		get_filename(), name);
+	free_string(name);
+	if (!db_vals)
+		return 0;
+	str_to_rl(&llong_ctype, db_vals, &tmp);
+	*rl = cast_rl(get_type(expr), tmp);
+	free_string(db_vals);
+
+	return 1;
+}
+
+int get_local_max_helper(struct expression *expr, sval_t *sval)
+{
+	struct range_list *rl;
+
+	if (!get_local_rl(expr, &rl))
+		return 0;
+	*sval = rl_max(rl);
+	return 1;
+}
+
+int get_local_min_helper(struct expression *expr, sval_t *sval)
+{
+	struct range_list *rl;
+
+	if (!get_local_rl(expr, &rl))
+		return 0;
+	*sval = rl_min(rl);
+	return 1;
+}
+
+static struct smatch_state *unmatched_state(struct sm_state *sm)
+{
+	return alloc_estate_empty();
+}
+
+static void extra_mod_hook(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state)
+{
+	struct smatch_state *old;
+	struct smatch_state *new;
+
+	if (!sym || !(sym->ctype.modifiers & MOD_STATIC))
+		return;
+	old = get_state(my_id, name, sym);
+	if (old)
+		new = merge_estates(old, state);
+	else
+		new = state;
+	set_state(my_id, name, sym, new);
+}
+
+static void process_states(void)
+{
+	struct sm_state *sm;
+	struct smatch_state *extra;
+	struct range_list *rl;
+
+	FOR_EACH_SM(__get_cur_stree(), sm) {
+		if (sm->owner != my_id)
+			continue;
+		extra = get_state(SMATCH_EXTRA, sm->name, sm->sym);
+		if (extra && estate_rl(extra))
+			rl = rl_intersection(estate_rl(sm->state), estate_rl(extra));
+		else
+			rl = estate_rl(sm->state);
+		rl = cast_rl(&llong_ctype, rl);
+		mem_sql(NULL, NULL,
+			"insert into local_values values ('%s', '%s', '%s', %lu);",
+			get_filename(), sm->name, show_rl(rl),
+			(unsigned long)sm->sym);
+	} END_FOR_EACH_SM(sm);
+}
+
+static int get_initial_value_sym(struct symbol *sym, char *name, sval_t *sval)
+{
+	struct expression *expr_symbol, *deref, *tmp;
+	char *member_name;
+
+	if (!sym)
+		return 0;
+
+	if (!sym->initializer) {
+		*sval = sval_type_val(&llong_ctype, 0);
+		return 1;
+	}
+	if (sym->initializer->type != EXPR_INITIALIZER)
+		return get_value(sym->initializer, sval);
+
+	expr_symbol = symbol_expression(sym);
+	FOR_EACH_PTR(sym->initializer->expr_list, tmp) {
+		if (tmp->type != EXPR_IDENTIFIER) /* how to handle arrays?? */
+			continue;
+		deref = member_expression(expr_symbol, '.', tmp->expr_ident);
+		member_name = expr_to_var(deref);
+		if (!member_name)
+			continue;
+		if (strcmp(name, member_name) == 0) {
+			free_string(member_name);
+			return get_value(tmp->ident_expression, sval);
+		}
+		free_string(member_name);
+	} END_FOR_EACH_PTR(tmp);
+
+	return 0;
+}
+
+static char *cur_name;
+static struct symbol *cur_symbol;
+static struct range_list *cur_rl;
+static void add_current_local(void)
+{
+	sval_t initial;
+
+	if (!get_initial_value_sym(cur_symbol, cur_name, &initial)) {
+		free_string(cur_name);
+		cur_name = NULL;
+		cur_rl = NULL;
+		return;
+	}
+	add_range(&cur_rl, initial, initial);
+	if (!is_whole_rl(cur_rl))
+		sql_insert_local_values(cur_name, show_rl(cur_rl));
+	free_string(cur_name);
+	cur_name = NULL;
+	cur_rl = NULL;
+}
+
+static int save_final_values(void *unused, int argc, char **argv, char **azColName)
+{
+	char *name = argv[0];
+	char *sym_str = argv[1];
+	char *value = argv[2];
+	struct range_list *rl;
+
+	if (!cur_name) {
+		cur_name = alloc_string(name);
+		cur_symbol = (struct symbol *)strtoul(sym_str, NULL, 10);
+	} else if (strcmp(cur_name, name) != 0) {
+		add_current_local();
+		cur_name = alloc_string(name);
+		cur_symbol = (struct symbol *)strtoul(sym_str, NULL, 10);
+		cur_rl = NULL;
+	}
+
+	str_to_rl(&llong_ctype, value, &rl);
+	cur_rl = rl_union(cur_rl, rl);
+
+	return 0;
+}
+
+static void match_end_file(struct symbol_list *sym_list)
+{
+	mem_sql(save_final_values, NULL,
+		"select distinct variable, symbol, value from local_values order by variable;");
+	if (cur_name)
+		add_current_local();
+}
+
+void register_local_values(int id)
+{
+	my_id = id;
+
+	if (!option_info)
+		return;
+
+	add_extra_mod_hook(&extra_mod_hook);
+	add_unmatched_state_hook(my_id, &unmatched_state);
+	add_merge_hook(my_id, &merge_estates);
+	all_return_states_hook(&process_states);
+	add_hook(match_end_file, END_FILE_HOOK);
+	mem_sql(NULL, NULL, "alter table local_values add column symbol integer;");
+}
--- /dev/null	Fri Dec 21 15:00:27 2018
+++ new/usr/src/tools/smatch/src/smatch_math.c	Fri Dec 21 15:00:27 2018
@@ -0,0 +1,1597 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "symbol.h"
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static struct range_list *_get_rl(struct expression *expr, int implied, int *recurse_cnt);
+static struct range_list *handle_variable(struct expression *expr, int implied, int *recurse_cnt);
+static struct range_list *(*custom_handle_variable)(struct expression *expr);
+
+static int get_implied_value_internal(struct expression *expr, sval_t *sval, int *recurse_cnt);
+static int get_absolute_rl_internal(struct expression *expr, struct range_list **rl, int *recurse_cnt);
+
+static sval_t zero  = {.type = &int_ctype, {.value = 0} };
+static sval_t one   = {.type = &int_ctype, {.value = 1} };
+
+struct range_list *rl_zero(void)
+{
+	static struct range_list *zero_perm;
+
+	if (!zero_perm)
+		zero_perm = clone_rl_permanent(alloc_rl(zero, zero));
+	return zero_perm;
+}
+
+struct range_list *rl_one(void)
+{
+	static struct range_list *one_perm;
+
+	if (!one_perm)
+		one_perm = clone_rl_permanent(alloc_rl(one, one));
+
+	return one_perm;
+}
+
+enum {
+	RL_EXACT,
+	RL_HARD,
+	RL_FUZZY,
+	RL_IMPLIED,
+	RL_ABSOLUTE,
+	RL_REAL_ABSOLUTE,
+};
+
+static struct range_list *last_stmt_rl(struct statement *stmt, int implied, int *recurse_cnt)
+{
+	struct expression *expr;
+
+	if (!stmt)
+		return NULL;
+
+	stmt = last_ptr_list((struct ptr_list *)stmt->stmts);
+	if (stmt->type == STMT_LABEL) {
+		if (stmt->label_statement &&
+		    stmt->label_statement->type == STMT_EXPRESSION)
+			expr = stmt->label_statement->expression;
+		else
+			return NULL;
+	} else if (stmt->type == STMT_EXPRESSION) {
+		expr = stmt->expression;
+	} else {
+		return NULL;
+	}
+	return _get_rl(expr, implied, recurse_cnt);
+}
+
+static struct range_list *handle_expression_statement_rl(struct expression *expr, int implied, int *recurse_cnt)
+{
+	return last_stmt_rl(get_expression_statement(expr), implied, recurse_cnt);
+}
+
+static struct range_list *handle_ampersand_rl(struct expression *expr, int implied, int *recurse_cnt)
+{
+	struct range_list *rl;
+	sval_t sval;
+
+	if (implied == RL_EXACT || implied == RL_HARD)
+		return NULL;
+	if (get_mtag_sval(expr, &sval))
+		return alloc_rl(sval, sval);
+	if (get_address_rl(expr, &rl))
+		return rl;
+	return alloc_rl(valid_ptr_min_sval, valid_ptr_max_sval);
+}
+
+static struct range_list *handle_negate_rl(struct expression *expr, int implied, int *recurse_cnt)
+{
+	if (known_condition_true(expr->unop))
+		return rl_zero();
+	if (known_condition_false(expr->unop))
+		return rl_one();
+
+	if (implied == RL_EXACT)
+		return NULL;
+
+	if (implied_condition_true(expr->unop))
+		return rl_zero();
+	if (implied_condition_false(expr->unop))
+		return rl_one();
+	return alloc_rl(zero, one);
+}
+
+static struct range_list *handle_bitwise_negate(struct expression *expr, int implied, int *recurse_cnt)
+{
+	struct range_list *rl;
+	sval_t sval;
+
+	rl = _get_rl(expr->unop, implied, recurse_cnt);
+	if (!rl_to_sval(rl, &sval))
+		return NULL;
+	sval = sval_preop(sval, '~');
+	sval_cast(get_type(expr->unop), sval);
+	return alloc_rl(sval, sval);
+}
+
+static struct range_list *handle_minus_preop(struct expression *expr, int implied, int *recurse_cnt)
+{
+	struct range_list *rl;
+	sval_t min, max;
+
+	rl = _get_rl(expr->unop, implied, recurse_cnt);
+	min = sval_preop(rl_max(rl), '-');
+	max = sval_preop(rl_min(rl), '-');
+	return alloc_rl(min, max);
+}
+
+static struct range_list *handle_preop_rl(struct expression *expr, int implied, int *recurse_cnt)
+{
+	switch (expr->op) {
+	case '&':
+		return handle_ampersand_rl(expr, implied, recurse_cnt);
+	case '!':
+		return handle_negate_rl(expr, implied, recurse_cnt);
+	case '~':
+		return handle_bitwise_negate(expr, implied, recurse_cnt);
+	case '-':
+		return handle_minus_preop(expr, implied, recurse_cnt);
+	case '*':
+		return handle_variable(expr, implied, recurse_cnt);
+	case '(':
+		return handle_expression_statement_rl(expr, implied, recurse_cnt);
+	default:
+		return NULL;
+	}
+}
+
+static struct range_list *handle_divide_rl(struct expression *expr, int implied, int *recurse_cnt)
+{
+	struct range_list *left_rl, *right_rl;
+	struct symbol *type;
+
+	type = get_type(expr);
+
+	left_rl = _get_rl(expr->left, implied, recurse_cnt);
+	left_rl = cast_rl(type, left_rl);
+	right_rl = _get_rl(expr->right, implied, recurse_cnt);
+	right_rl = cast_rl(type, right_rl);
+
+	if (!left_rl || !right_rl)
+		return NULL;
+
+	if (implied != RL_REAL_ABSOLUTE) {
+		if (is_whole_rl(left_rl) || is_whole_rl(right_rl))
+			return NULL;
+	}
+
+	return rl_binop(left_rl, '/', right_rl);
+}
+
+static int handle_offset_subtraction(struct expression *expr)
+{
+	struct expression *left, *right;
+	struct symbol *left_sym, *right_sym;
+	struct symbol *type;
+	int left_offset, right_offset;
+
+	type = get_type(expr);
+	if (!type || type->type != SYM_PTR)
+		return -1;
+	type = get_real_base_type(type);
+	if (!type || (type_bits(type) != 8 && (type != &void_ctype)))
+		return -1;
+
+	left = strip_expr(expr->left);
+	right = strip_expr(expr->right);
+
+	if (left->type != EXPR_PREOP || left->op != '&')
+		return -1;
+	left = strip_expr(left->unop);
+
+	left_sym = expr_to_sym(left);
+	right_sym = expr_to_sym(right);
+	if (!left_sym || left_sym != right_sym)
+		return -1;
+
+	left_offset = get_member_offset_from_deref(left);
+	if (right->type == EXPR_SYMBOL)
+		right_offset = 0;
+	else {
+		if (right->type != EXPR_PREOP || right->op != '&')
+			return -1;
+		right = strip_expr(right->unop);
+		right_offset = get_member_offset_from_deref(right);
+	}
+	if (left_offset < 0 || right_offset < 0)
+		return -1;
+
+	return left_offset - right_offset;
+}
+
+static struct range_list *handle_subtract_rl(struct expression *expr, int implied, int *recurse_cnt)
+{
+	struct symbol *type;
+	struct range_list *left_orig, *right_orig;
+	struct range_list *left_rl, *right_rl;
+	sval_t max, min, tmp;
+	int comparison;
+	int offset;
+
+	type = get_type(expr);
+
+	offset = handle_offset_subtraction(expr);
+	if (offset >= 0) {
+		tmp.type = type;
+		tmp.value = offset;
+
+		return alloc_rl(tmp, tmp);
+	}
+
+	comparison = get_comparison(expr->left, expr->right);
+
+	left_orig = _get_rl(expr->left, implied, recurse_cnt);
+	left_rl = cast_rl(type, left_orig);
+	right_orig = _get_rl(expr->right, implied, recurse_cnt);
+	right_rl = cast_rl(type, right_orig);
+
+	if ((!left_rl || !right_rl) &&
+	    (implied == RL_EXACT || implied == RL_HARD || implied == RL_FUZZY))
+		return NULL;
+
+	if (!left_rl)
+		left_rl = alloc_whole_rl(type);
+	if (!right_rl)
+		right_rl = alloc_whole_rl(type);
+
+	/* negative values complicate everything fix this later */
+	if (sval_is_negative(rl_min(right_rl)))
+		return NULL;
+	max = rl_max(left_rl);
+	min = sval_type_min(type);
+
+	switch (comparison) {
+	case '>':
+	case SPECIAL_UNSIGNED_GT:
+		min = sval_type_val(type, 1);
+		max = rl_max(left_rl);
+		break;
+	case SPECIAL_GTE:
+	case SPECIAL_UNSIGNED_GTE:
+		min = sval_type_val(type, 0);
+		max = rl_max(left_rl);
+		break;
+	case SPECIAL_EQUAL:
+		min = sval_type_val(type, 0);
+		max = sval_type_val(type, 0);
+		break;
+	case '<':
+	case SPECIAL_UNSIGNED_LT:
+		max = sval_type_val(type, -1);
+		break;
+	case SPECIAL_LTE:
+	case SPECIAL_UNSIGNED_LTE:
+		max = sval_type_val(type, 0);
+		break;
+	default:
+		if (!left_orig || !right_orig)
+			return NULL;
+		return rl_binop(left_rl, '-', right_rl);
+	}
+
+	if (!sval_binop_overflows(rl_min(left_rl), '-', rl_max(right_rl))) {
+		tmp = sval_binop(rl_min(left_rl), '-', rl_max(right_rl));
+		if (sval_cmp(tmp, min) > 0)
+			min = tmp;
+	}
+
+	if (!sval_is_max(rl_max(left_rl))) {
+		tmp = sval_binop(rl_max(left_rl), '-', rl_min(right_rl));
+		if (sval_cmp(tmp, max) < 0)
+			max = tmp;
+	}
+
+	if (sval_is_min(min) && sval_is_max(max))
+		return NULL;
+
+	return cast_rl(type, alloc_rl(min, max));
+}
+
+static struct range_list *handle_mod_rl(struct expression *expr, int implied, int *recurse_cnt)
+{
+	struct range_list *rl;
+	sval_t left, right, sval;
+
+	if (implied == RL_EXACT) {
+		if (!get_implied_value(expr->right, &right))
+			return NULL;
+		if (!get_implied_value(expr->left, &left))
+			return NULL;
+		sval = sval_binop(left, '%', right);
+		return alloc_rl(sval, sval);
+	}
+	/* if we can't figure out the right side it's probably hopeless */
+	if (!get_implied_value_internal(expr->right, &right, recurse_cnt))
+		return NULL;
+
+	right = sval_cast(get_type(expr), right);
+	right.value--;
+
+	rl = _get_rl(expr->left, implied, recurse_cnt);
+	if (rl && rl_max(rl).uvalue < right.uvalue)
+		right.uvalue = rl_max(rl).uvalue;
+
+	return alloc_rl(sval_cast(right.type, zero), right);
+}
+
+static sval_t sval_lowest_set_bit(sval_t sval)
+{
+	int i;
+	int found = 0;
+
+	for (i = 0; i < 64; i++) {
+		if (sval.uvalue & 1ULL << i) {
+			if (!found++)
+				continue;
+			sval.uvalue &= ~(1ULL << i);
+		}
+	}
+	return sval;
+}
+
+static struct range_list *handle_bitwise_AND(struct expression *expr, int implied, int *recurse_cnt)
+{
+	struct symbol *type;
+	struct range_list *left_rl, *right_rl;
+	sval_t known;
+	int new_recurse;
+
+	if (implied != RL_IMPLIED && implied != RL_ABSOLUTE && implied != RL_REAL_ABSOLUTE)
+		return NULL;
+
+	type = get_type(expr);
+
+	if (get_implied_value_internal(expr->left, &known, recurse_cnt)) {
+		sval_t min;
+
+		min = sval_lowest_set_bit(known);
+		left_rl = alloc_rl(min, known);
+		left_rl = cast_rl(type, left_rl);
+		add_range(&left_rl, sval_type_val(type, 0), sval_type_val(type, 0));
+	} else {
+		left_rl = _get_rl(expr->left, implied, recurse_cnt);
+		if (left_rl) {
+			left_rl = cast_rl(type, left_rl);
+			left_rl = alloc_rl(sval_type_val(type, 0), rl_max(left_rl));
+		} else {
+			if (implied == RL_HARD)
+				return NULL;
+			left_rl = alloc_whole_rl(type);
+		}
+	}
+
+	new_recurse = *recurse_cnt;
+	if (*recurse_cnt >= 200)
+		new_recurse = 100;  /* Let's try super hard to get the mask */
+	if (get_implied_value_internal(expr->right, &known, &new_recurse)) {
+		sval_t min, left_max, mod;
+
+		*recurse_cnt = new_recurse;
+
+		min = sval_lowest_set_bit(known);
+		right_rl = alloc_rl(min, known);
+		right_rl = cast_rl(type, right_rl);
+		add_range(&right_rl, sval_type_val(type, 0), sval_type_val(type, 0));
+
+		if (min.value != 0) {
+			left_max = rl_max(left_rl);
+			mod = sval_binop(left_max, '%', min);
+			if (mod.value) {
+				left_max = sval_binop(left_max, '-', mod);
+				left_max.value++;
+				if (left_max.value > 0 && sval_cmp(left_max, rl_max(left_rl)) < 0)
+					left_rl = remove_range(left_rl, left_max, rl_max(left_rl));
+			}
+		}
+	} else {
+		right_rl = _get_rl(expr->right, implied, recurse_cnt);
+		if (right_rl) {
+			right_rl = cast_rl(type, right_rl);
+			right_rl = alloc_rl(sval_type_val(type, 0), rl_max(right_rl));
+		} else {
+			if (implied == RL_HARD)
+				return NULL;
+			right_rl = alloc_whole_rl(type);
+		}
+	}
+
+	return rl_intersection(left_rl, right_rl);
+}
+
+static struct range_list *use_rl_binop(struct expression *expr, int implied, int *recurse_cnt)
+{
+	struct symbol *type;
+	struct range_list *left_rl, *right_rl;
+
+	if (implied != RL_IMPLIED && implied != RL_ABSOLUTE && implied != RL_REAL_ABSOLUTE)
+		return NULL;
+
+	type = get_type(expr);
+
+	get_absolute_rl_internal(expr->left, &left_rl, recurse_cnt);
+	get_absolute_rl_internal(expr->right, &right_rl, recurse_cnt);
+	left_rl = cast_rl(type, left_rl);
+	right_rl = cast_rl(type, right_rl);
+	if (!left_rl || !right_rl)
+		return NULL;
+
+	return rl_binop(left_rl, expr->op, right_rl);
+}
+
+static struct range_list *handle_right_shift(struct expression *expr, int implied, int *recurse_cnt)
+{
+	struct range_list *left_rl;
+	sval_t right;
+	sval_t min, max;
+
+	if (implied == RL_EXACT || implied == RL_HARD)
+		return NULL;
+
+	left_rl = _get_rl(expr->left, implied, recurse_cnt);
+	if (left_rl) {
+		max = rl_max(left_rl);
+		min = rl_min(left_rl);
+	} else {
+		if (implied == RL_FUZZY)
+			return NULL;
+		max = sval_type_max(get_type(expr->left));
+		min = sval_type_val(get_type(expr->left), 0);
+	}
+
+	if (get_implied_value_internal(expr->right, &right, recurse_cnt)) {
+		min = sval_binop(min, SPECIAL_RIGHTSHIFT, right);
+		max = sval_binop(max, SPECIAL_RIGHTSHIFT, right);
+	} else if (!sval_is_negative(min)) {
+		min.value = 0;
+		max = sval_type_max(max.type);
+	} else {
+		return NULL;
+	}
+
+	return alloc_rl(min, max);
+}
+
+static struct range_list *handle_left_shift(struct expression *expr, int implied, int *recurse_cnt)
+{
+	struct range_list *left_rl, *res;
+	sval_t right;
+	sval_t min, max;
+	int add_zero = 0;
+
+	if (implied == RL_EXACT || implied == RL_HARD)
+		return NULL;
+	/* this is hopeless without the right side */
+	if (!get_implied_value_internal(expr->right, &right, recurse_cnt))
+		return NULL;
+	left_rl = _get_rl(expr->left, implied, recurse_cnt);
+	if (left_rl) {
+		max = rl_max(left_rl);
+		min = rl_min(left_rl);
+		if (min.value == 0) {
+			min.value = 1;
+			add_zero = 1;
+		}
+	} else {
+		if (implied == RL_FUZZY)
+			return NULL;
+		max = sval_type_max(get_type(expr->left));
+		min = sval_type_val(get_type(expr->left), 1);
+		add_zero = 1;
+	}
+
+	max = sval_binop(max, SPECIAL_LEFTSHIFT, right);
+	min = sval_binop(min, SPECIAL_LEFTSHIFT, right);
+	res = alloc_rl(min, max);
+	if (add_zero)
+		res = rl_union(res, rl_zero());
+	return res;
+}
+
+static struct range_list *handle_known_binop(struct expression *expr)
+{
+	sval_t left, right;
+
+	if (!get_value(expr->left, &left))
+		return NULL;
+	if (!get_value(expr->right, &right))
+		return NULL;
+	left = sval_binop(left, expr->op, right);
+	return alloc_rl(left, left);
+}
+
+static int has_actual_ranges(struct range_list *rl)
+{
+	struct data_range *tmp;
+
+	FOR_EACH_PTR(rl, tmp) {
+		if (sval_cmp(tmp->min, tmp->max) != 0)
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+	return 0;
+}
+
+static struct range_list *handle_implied_binop(struct range_list *left_rl, int op, struct range_list *right_rl)
+{
+	struct range_list *res_rl;
+	struct data_range *left_drange, *right_drange;
+	sval_t res;
+
+	if (!left_rl || !right_rl)
+		return NULL;
+	if (has_actual_ranges(left_rl))
+		return NULL;
+	if (has_actual_ranges(right_rl))
+		return NULL;
+
+	if (ptr_list_size((struct ptr_list *)left_rl) * ptr_list_size((struct ptr_list *)right_rl) > 20)
+		return NULL;
+
+	res_rl = NULL;
+
+	FOR_EACH_PTR(left_rl, left_drange) {
+		FOR_EACH_PTR(right_rl, right_drange) {
+			if ((op == '%' || op == '/') &&
+			    right_drange->min.value == 0)
+				return NULL;
+			res = sval_binop(left_drange->min, op, right_drange->min);
+			add_range(&res_rl, res, res);
+		} END_FOR_EACH_PTR(right_drange);
+	} END_FOR_EACH_PTR(left_drange);
+
+	return res_rl;
+}
+
+static struct range_list *handle_binop_rl(struct expression *expr, int implied, int *recurse_cnt)
+{
+	struct smatch_state *state;
+	struct symbol *type;
+	struct range_list *left_rl, *right_rl, *rl;
+	sval_t min, max;
+
+	rl = handle_known_binop(expr);
+	if (rl)
+		return rl;
+	if (implied == RL_EXACT)
+		return NULL;
+
+	if (custom_handle_variable) {
+		rl = custom_handle_variable(expr);
+		if (rl)
+			return rl;
+	}
+
+	state = get_extra_state(expr);
+	if (state && !is_whole_rl(estate_rl(state))) {
+		if (implied != RL_HARD || estate_has_hard_max(state))
+			return clone_rl(estate_rl(state));
+	}
+
+	type = get_type(expr);
+	left_rl = _get_rl(expr->left, implied, recurse_cnt);
+	left_rl = cast_rl(type, left_rl);
+	right_rl = _get_rl(expr->right, implied, recurse_cnt);
+	right_rl = cast_rl(type, right_rl);
+
+	if (!left_rl && !right_rl)
+		return NULL;
+
+	rl = handle_implied_binop(left_rl, expr->op, right_rl);
+	if (rl)
+		return rl;
+
+	switch (expr->op) {
+	case '%':
+		return handle_mod_rl(expr, implied, recurse_cnt);
+	case '&':
+		return handle_bitwise_AND(expr, implied, recurse_cnt);
+	case '|':
+	case '^':
+		return use_rl_binop(expr, implied, recurse_cnt);
+	case SPECIAL_RIGHTSHIFT:
+		return handle_right_shift(expr, implied, recurse_cnt);
+	case SPECIAL_LEFTSHIFT:
+		return handle_left_shift(expr, implied, recurse_cnt);
+	case '-':
+		return handle_subtract_rl(expr, implied, recurse_cnt);
+	case '/':
+		return handle_divide_rl(expr, implied, recurse_cnt);
+	}
+
+	if (!left_rl || !right_rl)
+		return NULL;
+
+	if (sval_binop_overflows(rl_min(left_rl), expr->op, rl_min(right_rl)))
+		return NULL;
+	if (sval_binop_overflows(rl_max(left_rl), expr->op, rl_max(right_rl)))
+		return NULL;
+
+	min = sval_binop(rl_min(left_rl), expr->op, rl_min(right_rl));
+	max = sval_binop(rl_max(left_rl), expr->op, rl_max(right_rl));
+
+	return alloc_rl(min, max);
+}
+
+static int do_comparison(struct expression *expr)
+{
+	struct range_list *left_ranges = NULL;
+	struct range_list *right_ranges = NULL;
+	int poss_true, poss_false;
+	struct symbol *type;
+
+	type = get_type(expr);
+	get_absolute_rl(expr->left, &left_ranges);
+	get_absolute_rl(expr->right, &right_ranges);
+
+	left_ranges = cast_rl(type, left_ranges);
+	right_ranges = cast_rl(type, right_ranges);
+
+	poss_true = possibly_true_rl(left_ranges, expr->op, right_ranges);
+	poss_false = possibly_false_rl(left_ranges, expr->op, right_ranges);
+
+	if (!poss_true && !poss_false)
+		return 0x0;
+	if (poss_true && !poss_false)
+		return 0x1;
+	if (!poss_true && poss_false)
+		return 0x2;
+	return 0x3;
+}
+
+static struct range_list *handle_comparison_rl(struct expression *expr, int implied, int *recurse_cnt)
+{
+	sval_t left, right;
+	int res;
+
+	if (expr->op == SPECIAL_EQUAL && expr->left->type == EXPR_TYPE) {
+		struct symbol *left, *right;
+
+		left = get_real_base_type(expr->left->symbol);
+		right = get_real_base_type(expr->left->symbol);
+		if (left == right)
+			return rl_one();
+		return rl_zero();
+	}
+
+	if (get_value(expr->left, &left) && get_value(expr->right, &right)) {
+		struct data_range tmp_left, tmp_right;
+
+		tmp_left.min = left;
+		tmp_left.max = left;
+		tmp_right.min = right;
+		tmp_right.max = right;
+		if (true_comparison_range(&tmp_left, expr->op, &tmp_right))
+			return rl_one();
+		return rl_zero();
+	}
+
+	if (implied == RL_EXACT)
+		return NULL;
+
+	res = do_comparison(expr);
+	if (res == 1)
+		return rl_one();
+	if (res == 2)
+		return rl_zero();
+
+	return alloc_rl(zero, one);
+}
+
+static struct range_list *handle_logical_rl(struct expression *expr, int implied, int *recurse_cnt)
+{
+	sval_t left, right;
+	int left_known = 0;
+	int right_known = 0;
+
+	if (implied == RL_EXACT) {
+		if (get_value(expr->left, &left))
+			left_known = 1;
+		if (get_value(expr->right, &right))
+			right_known = 1;
+	} else {
+		if (get_implied_value_internal(expr->left, &left, recurse_cnt))
+			left_known = 1;
+		if (get_implied_value_internal(expr->right, &right, recurse_cnt))
+			right_known = 1;
+	}
+
+	switch (expr->op) {
+	case SPECIAL_LOGICAL_OR:
+		if (left_known && left.value)
+			return rl_one();
+		if (right_known && right.value)
+			return rl_one();
+		if (left_known && right_known)
+			return rl_zero();
+		break;
+	case SPECIAL_LOGICAL_AND:
+		if (left_known && right_known) {
+			if (left.value && right.value)
+				return rl_one();
+			return rl_zero();
+		}
+		break;
+	default:
+		return NULL;
+	}
+
+	if (implied == RL_EXACT)
+		return NULL;
+
+	return alloc_rl(zero, one);
+}
+
+static struct range_list *handle_conditional_rl(struct expression *expr, int implied, int *recurse_cnt)
+{
+	struct expression *cond_true;
+	struct range_list *true_rl, *false_rl;
+	struct symbol *type;
+	int final_pass_orig = final_pass;
+
+	cond_true = expr->cond_true;
+	if (!cond_true)
+		cond_true = expr->conditional;
+
+	if (known_condition_true(expr->conditional))
+		return _get_rl(cond_true, implied, recurse_cnt);
+	if (known_condition_false(expr->conditional))
+		return _get_rl(expr->cond_false, implied, recurse_cnt);
+
+	if (implied == RL_EXACT)
+		return NULL;
+
+	if (implied_condition_true(expr->conditional))
+		return _get_rl(cond_true, implied, recurse_cnt);
+	if (implied_condition_false(expr->conditional))
+		return _get_rl(expr->cond_false, implied, recurse_cnt);
+
+
+	/* this becomes a problem with deeply nested conditional statements */
+	if (low_on_memory())
+		return NULL;
+
+	type = get_type(expr);
+
+	__push_fake_cur_stree();
+	final_pass = 0;
+	__split_whole_condition(expr->conditional);
+	true_rl = _get_rl(cond_true, implied, recurse_cnt);
+	__push_true_states();
+	__use_false_states();
+	false_rl = _get_rl(expr->cond_false, implied, recurse_cnt);
+	__merge_true_states();
+	__free_fake_cur_stree();
+	final_pass = final_pass_orig;
+
+	if (!true_rl || !false_rl)
+		return NULL;
+	true_rl = cast_rl(type, true_rl);
+	false_rl = cast_rl(type, false_rl);
+
+	return rl_union(true_rl, false_rl);
+}
+
+static int get_fuzzy_max_helper(struct expression *expr, sval_t *max)
+{
+	struct smatch_state *state;
+	sval_t sval;
+
+	if (get_hard_max(expr, &sval)) {
+		*max = sval;
+		return 1;
+	}
+
+	state = get_extra_state(expr);
+	if (!state || !estate_has_fuzzy_max(state))
+		return 0;
+	*max = sval_cast(get_type(expr), estate_get_fuzzy_max(state));
+	return 1;
+}
+
+static int get_fuzzy_min_helper(struct expression *expr, sval_t *min)
+{
+	struct smatch_state *state;
+	sval_t sval;
+
+	state = get_extra_state(expr);
+	if (!state || !estate_rl(state))
+		return 0;
+
+	sval = estate_min(state);
+	if (sval_is_negative(sval) && sval_is_min(sval))
+		return 0;
+
+	if (sval_is_max(sval))
+		return 0;
+
+	*min = sval_cast(get_type(expr), sval);
+	return 1;
+}
+
+int get_const_value(struct expression *expr, sval_t *sval)
+{
+	struct symbol *sym;
+	sval_t right;
+
+	if (expr->type != EXPR_SYMBOL || !expr->symbol)
+		return 0;
+	sym = expr->symbol;
+	if (!(sym->ctype.modifiers & MOD_CONST))
+		return 0;
+	if (get_value(sym->initializer, &right)) {
+		*sval = sval_cast(get_type(expr), right);
+		return 1;
+	}
+	return 0;
+}
+
+struct range_list *var_to_absolute_rl(struct expression *expr)
+{
+	struct smatch_state *state;
+	struct range_list *rl;
+
+	state = get_extra_state(expr);
+	if (!state || is_whole_rl(estate_rl(state))) {
+		state = get_real_absolute_state(expr);
+		if (state && state->data && !estate_is_whole(state))
+			return clone_rl(estate_rl(state));
+		if (get_local_rl(expr, &rl) && !is_whole_rl(rl))
+			return rl;
+		if (get_mtag_rl(expr, &rl))
+			return rl;
+		if (get_db_type_rl(expr, &rl) && !is_whole_rl(rl))
+			return rl;
+		return alloc_whole_rl(get_type(expr));
+	}
+	/* err on the side of saying things are possible */
+	if (!estate_rl(state))
+		return alloc_whole_rl(get_type(expr));
+	return clone_rl(estate_rl(state));
+}
+
+static struct range_list *handle_variable(struct expression *expr, int implied, int *recurse_cnt)
+{
+	struct smatch_state *state;
+	struct range_list *rl;
+	sval_t sval, min, max;
+	struct symbol *type;
+
+	if (get_const_value(expr, &sval))
+		return alloc_rl(sval, sval);
+
+	if (custom_handle_variable) {
+		rl = custom_handle_variable(expr);
+		if (!rl)
+			return var_to_absolute_rl(expr);
+		return rl;
+	}
+
+	if (implied == RL_EXACT)
+		return NULL;
+
+	if (get_mtag_sval(expr, &sval))
+		return alloc_rl(sval, sval);
+
+	type = get_type(expr);
+	if (type && type->type == SYM_FN)
+		return alloc_rl(fn_ptr_min, fn_ptr_max);
+
+	switch (implied) {
+	case RL_HARD:
+	case RL_IMPLIED:
+	case RL_ABSOLUTE:
+		state = get_extra_state(expr);
+		if (!state || !state->data) {
+			if (implied == RL_HARD)
+				return NULL;
+			if (get_local_rl(expr, &rl))
+				return rl;
+			if (get_mtag_rl(expr, &rl))
+				return rl;
+			if (get_db_type_rl(expr, &rl))
+				return rl;
+			if (is_array(expr) && get_array_rl(expr, &rl))
+				return rl;
+			return NULL;
+		}
+		if (implied == RL_HARD && !estate_has_hard_max(state))
+			return NULL;
+		return clone_rl(estate_rl(state));
+	case RL_REAL_ABSOLUTE: {
+		struct smatch_state *abs_state;
+
+		state = get_extra_state(expr);
+		abs_state = get_real_absolute_state(expr);
+
+		if (estate_rl(state) && estate_rl(abs_state)) {
+			return clone_rl(rl_intersection(estate_rl(state),
+							estate_rl(abs_state)));
+		} else if (estate_rl(state)) {
+			return clone_rl(estate_rl(state));
+		} else if (estate_is_empty(state)) {
+			/*
+			 * FIXME: we don't handle empty extra states correctly.
+			 *
+			 * The real abs rl is supposed to be filtered by the
+			 * extra state if there is one.  We don't bother keeping
+			 * the abs state in sync all the time because we know it
+			 * will be filtered later.
+			 *
+			 * It's not totally obvious to me how they should be
+			 * handled.  Perhaps we should take the whole rl and
+			 * filter by the imaginary states.  Perhaps we should
+			 * just go with the empty state.
+			 *
+			 * Anyway what we currently do is return NULL here and
+			 * that gets translated into the whole range in
+			 * get_real_absolute_rl().
+			 *
+			 */
+			return NULL;
+		} else if (estate_rl(abs_state)) {
+			return clone_rl(estate_rl(abs_state));
+		}
+
+		if (get_local_rl(expr, &rl))
+			return rl;
+		if (get_mtag_rl(expr, &rl))
+			return rl;
+		if (get_db_type_rl(expr, &rl))
+			return rl;
+		if (is_array(expr) && get_array_rl(expr, &rl))
+			return rl;
+		return NULL;
+	}
+	case RL_FUZZY:
+		if (!get_fuzzy_min_helper(expr, &min))
+			min = sval_type_min(get_type(expr));
+		if (!get_fuzzy_max_helper(expr, &max))
+			return NULL;
+		/* fuzzy ranges are often inverted */
+		if (sval_cmp(min, max) > 0) {
+			sval = min;
+			min = max;
+			max = sval;
+		}
+		return alloc_rl(min, max);
+	}
+	return NULL;
+}
+
+static sval_t handle_sizeof(struct expression *expr)
+{
+	struct symbol *sym;
+	sval_t ret;
+
+	ret = sval_blank(expr);
+	sym = expr->cast_type;
+	if (!sym) {
+		sym = evaluate_expression(expr->cast_expression);
+		if (!sym) {
+			__silence_warnings_for_stmt = true;
+			sym = &int_ctype;
+		}
+#if 0
+		/*
+		 * Expressions of restricted types will possibly get
+		 * promoted - check that here.  I'm not sure how this works,
+		 * the problem is that sizeof(le16) shouldn't be promoted and
+		 * the original code did that...  Let's if zero this out and
+		 * see what breaks.
+		 */
+
+		if (is_restricted_type(sym)) {
+			if (type_bits(sym) < bits_in_int)
+				sym = &int_ctype;
+		}
+#endif
+		if (is_fouled_type(sym))
+			sym = &int_ctype;
+	}
+	examine_symbol_type(sym);
+
+	ret.type = size_t_ctype;
+	if (type_bits(sym) <= 0) /* sizeof(void) */ {
+		if (get_real_base_type(sym) == &void_ctype)
+			ret.value = 1;
+		else
+			ret.value = 0;
+	} else
+		ret.value = type_bytes(sym);
+
+	return ret;
+}
+
+static struct range_list *handle_strlen(struct expression *expr, int implied, int *recurse_cnt)
+{
+	struct range_list *rl;
+	struct expression *arg, *tmp;
+	sval_t tag;
+	sval_t ret = { .type = &ulong_ctype };
+
+	if (implied == RL_EXACT)
+		return NULL;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	if (!arg)
+		return NULL;
+	if (arg->type == EXPR_STRING) {
+		ret.value = arg->string->length - 1;
+		return alloc_rl(ret, ret);
+	}
+	if (get_implied_value(arg, &tag) &&
+	    (tmp = fake_string_from_mtag(tag.uvalue))) {
+		ret.value = tmp->string->length - 1;
+		return alloc_rl(ret, ret);
+	}
+
+	if (implied == RL_HARD || implied == RL_FUZZY)
+		return NULL;
+
+	if (get_implied_return(expr, &rl))
+		return rl;
+
+	return NULL;
+}
+
+static struct range_list *handle_builtin_constant_p(struct expression *expr, int implied, int *recurse_cnt)
+{
+	struct expression *arg;
+	struct range_list *rl;
+	sval_t sval;
+
+	arg = get_argument_from_call_expr(expr->args, 0);
+	rl = _get_rl(arg, RL_EXACT, recurse_cnt);
+	if (rl_to_sval(rl, &sval))
+		return rl_one();
+	return rl_zero();
+}
+
+static struct range_list *handle__builtin_choose_expr(struct expression *expr, int implied, int *recurse_cnt)
+{
+	struct expression *const_expr, *expr1, *expr2;
+	sval_t sval;
+
+	const_expr = get_argument_from_call_expr(expr->args, 0);
+	expr1 = get_argument_from_call_expr(expr->args, 1);
+	expr2 = get_argument_from_call_expr(expr->args, 2);
+
+	if (!get_value(const_expr, &sval) || !expr1 || !expr2)
+		return NULL;
+	if (sval.value)
+		return _get_rl(expr1, implied, recurse_cnt);
+	return _get_rl(expr2, implied, recurse_cnt);
+}
+
+static struct range_list *handle_call_rl(struct expression *expr, int implied, int *recurse_cnt)
+{
+	struct range_list *rl;
+
+	if (sym_name_is("__builtin_constant_p", expr->fn))
+		return handle_builtin_constant_p(expr, implied, recurse_cnt);
+
+	if (sym_name_is("__builtin_choose_expr", expr->fn))
+		return handle__builtin_choose_expr(expr, implied, recurse_cnt);
+
+	if (sym_name_is("__builtin_expect", expr->fn) ||
+	    sym_name_is("__builtin_bswap16", expr->fn) ||
+	    sym_name_is("__builtin_bswap32", expr->fn) ||
+	    sym_name_is("__builtin_bswap64", expr->fn)) {
+		struct expression *arg;
+
+		arg = get_argument_from_call_expr(expr->args, 0);
+		return _get_rl(arg, implied, recurse_cnt);
+	}
+
+	if (sym_name_is("strlen", expr->fn))
+		return handle_strlen(expr, implied, recurse_cnt);
+
+	if (implied == RL_EXACT || implied == RL_HARD || implied == RL_FUZZY)
+		return NULL;
+
+	if (custom_handle_variable) {
+		rl = custom_handle_variable(expr);
+		if (rl)
+			return rl;
+	}
+
+	if (get_implied_return(expr, &rl))
+		return rl;
+	return db_return_vals(expr);
+}
+
+static struct range_list *handle_cast(struct expression *expr, int implied, int *recurse_cnt)
+{
+	struct range_list *rl;
+	struct symbol *type;
+
+	type = get_type(expr);
+	rl = _get_rl(expr->cast_expression, implied, recurse_cnt);
+	if (rl)
+		return cast_rl(type, rl);
+	if (implied == RL_ABSOLUTE || implied == RL_REAL_ABSOLUTE)
+		return alloc_whole_rl(type);
+	if (implied == RL_IMPLIED && type &&
+	    type_bits(type) > 0 && type_bits(type) < 32)
+		return alloc_whole_rl(type);
+	return NULL;
+}
+
+static struct range_list *_get_rl(struct expression *expr, int implied, int *recurse_cnt)
+{
+	struct range_list *rl;
+	struct symbol *type;
+	sval_t sval;
+
+	type = get_type(expr);
+	expr = strip_parens(expr);
+	if (!expr)
+		return NULL;
+
+	if (++(*recurse_cnt) >= 200)
+		return NULL;
+
+	switch(expr->type) {
+	case EXPR_CAST:
+	case EXPR_FORCE_CAST:
+	case EXPR_IMPLIED_CAST:
+		rl = handle_cast(expr, implied, recurse_cnt);
+		goto out_cast;
+	}
+
+	expr = strip_expr(expr);
+	if (!expr)
+		return NULL;
+
+	switch (expr->type) {
+	case EXPR_VALUE:
+		sval = sval_from_val(expr, expr->value);
+		rl = alloc_rl(sval, sval);
+		break;
+	case EXPR_PREOP:
+		rl = handle_preop_rl(expr, implied, recurse_cnt);
+		break;
+	case EXPR_POSTOP:
+		rl = _get_rl(expr->unop, implied, recurse_cnt);
+		break;
+	case EXPR_BINOP:
+		rl = handle_binop_rl(expr, implied, recurse_cnt);
+		break;
+	case EXPR_COMPARE:
+		rl = handle_comparison_rl(expr, implied, recurse_cnt);
+		break;
+	case EXPR_LOGICAL:
+		rl = handle_logical_rl(expr, implied, recurse_cnt);
+		break;
+	case EXPR_PTRSIZEOF:
+	case EXPR_SIZEOF:
+		sval = handle_sizeof(expr);
+		rl = alloc_rl(sval, sval);
+		break;
+	case EXPR_SELECT:
+	case EXPR_CONDITIONAL:
+		rl = handle_conditional_rl(expr, implied, recurse_cnt);
+		break;
+	case EXPR_CALL:
+		rl = handle_call_rl(expr, implied, recurse_cnt);
+		break;
+	case EXPR_STRING:
+		rl = NULL;
+		if (get_mtag_sval(expr, &sval))
+			rl = alloc_rl(sval, sval);
+		break;
+	default:
+		rl = handle_variable(expr, implied, recurse_cnt);
+	}
+
+out_cast:
+	if (rl)
+		return rl;
+	if (type && (implied == RL_ABSOLUTE || implied == RL_REAL_ABSOLUTE))
+		return alloc_whole_rl(type);
+	return NULL;
+}
+
+struct {
+	struct expression *expr;
+	struct range_list *rl;
+} cached_results[24];
+static int cache_idx;
+
+void clear_math_cache(void)
+{
+	memset(cached_results, 0, sizeof(cached_results));
+}
+
+/* returns 1 if it can get a value literal or else returns 0 */
+int get_value(struct expression *expr, sval_t *sval)
+{
+	struct range_list *(*orig_custom_fn)(struct expression *expr);
+	struct range_list *rl;
+	int recurse_cnt = 0;
+	sval_t tmp;
+	int i;
+
+	/*
+	 * This only handles RL_EXACT because other expr statements can be
+	 * different at different points.  Like the list iterator, for example.
+	 */
+	for (i = 0; i < ARRAY_SIZE(cached_results); i++) {
+		if (expr == cached_results[i].expr)
+			return rl_to_sval(cached_results[i].rl, sval);
+	}
+
+	orig_custom_fn = custom_handle_variable;
+	custom_handle_variable = NULL;
+	rl = _get_rl(expr, RL_EXACT, &recurse_cnt);
+	if (!rl_to_sval(rl, &tmp))
+		rl = NULL;
+	custom_handle_variable = orig_custom_fn;
+
+	cached_results[cache_idx].expr = expr;
+	cached_results[cache_idx].rl = rl;
+	cache_idx = (cache_idx + 1) % ARRAY_SIZE(cached_results);
+
+	if (!rl)
+		return 0;
+
+	*sval = tmp;
+	return 1;
+}
+
+static int get_implied_value_internal(struct expression *expr, sval_t *sval, int *recurse_cnt)
+{
+	struct range_list *rl;
+
+	rl =  _get_rl(expr, RL_IMPLIED, recurse_cnt);
+	if (!rl_to_sval(rl, sval))
+		return 0;
+	return 1;
+}
+
+int get_implied_value(struct expression *expr, sval_t *sval)
+{
+	struct range_list *rl;
+	int recurse_cnt = 0;
+
+	rl =  _get_rl(expr, RL_IMPLIED, &recurse_cnt);
+	if (!rl_to_sval(rl, sval))
+		return 0;
+	return 1;
+}
+
+int get_implied_min(struct expression *expr, sval_t *sval)
+{
+	struct range_list *rl;
+	int recurse_cnt = 0;
+
+	rl =  _get_rl(expr, RL_IMPLIED, &recurse_cnt);
+	if (!rl)
+		return 0;
+	*sval = rl_min(rl);
+	return 1;
+}
+
+int get_implied_max(struct expression *expr, sval_t *sval)
+{
+	struct range_list *rl;
+	int recurse_cnt = 0;
+
+	rl =  _get_rl(expr, RL_IMPLIED, &recurse_cnt);
+	if (!rl)
+		return 0;
+	*sval = rl_max(rl);
+	return 1;
+}
+
+int get_implied_rl(struct expression *expr, struct range_list **rl)
+{
+	int recurse_cnt = 0;
+
+	*rl = _get_rl(expr, RL_IMPLIED, &recurse_cnt);
+	if (*rl)
+		return 1;
+	return 0;
+}
+
+static int get_absolute_rl_internal(struct expression *expr, struct range_list **rl, int *recurse_cnt)
+{
+	*rl = _get_rl(expr, RL_ABSOLUTE, recurse_cnt);
+	if (!*rl)
+		*rl = alloc_whole_rl(get_type(expr));
+	return 1;
+}
+
+int get_absolute_rl(struct expression *expr, struct range_list **rl)
+{
+	int recurse_cnt = 0;
+
+	*rl = _get_rl(expr, RL_ABSOLUTE, &recurse_cnt);
+	if (!*rl)
+		*rl = alloc_whole_rl(get_type(expr));
+	return 1;
+}
+
+int get_real_absolute_rl(struct expression *expr, struct range_list **rl)
+{
+	int recurse_cnt = 0;
+
+	*rl = _get_rl(expr, RL_REAL_ABSOLUTE, &recurse_cnt);
+	if (!*rl)
+		*rl = alloc_whole_rl(get_type(expr));
+	return 1;
+}
+
+int custom_get_absolute_rl(struct expression *expr,
+			   struct range_list *(*fn)(struct expression *expr),
+			   struct range_list **rl)
+{
+	int recurse_cnt = 0;
+
+	*rl = NULL;
+	custom_handle_variable = fn;
+	*rl = _get_rl(expr, RL_REAL_ABSOLUTE, &recurse_cnt);
+	custom_handle_variable = NULL;
+	return 1;
+}
+
+int get_implied_rl_var_sym(const char *var, struct symbol *sym, struct range_list **rl)
+{
+	struct smatch_state *state;
+
+	state = get_state(SMATCH_EXTRA, var, sym);
+	*rl = estate_rl(state);
+	if (*rl)
+		return 1;
+	return 0;
+}
+
+int get_hard_max(struct expression *expr, sval_t *sval)
+{
+	struct range_list *rl;
+	int recurse_cnt = 0;
+
+	rl =  _get_rl(expr, RL_HARD, &recurse_cnt);
+	if (!rl)
+		return 0;
+	*sval = rl_max(rl);
+	return 1;
+}
+
+int get_fuzzy_min(struct expression *expr, sval_t *sval)
+{
+	struct range_list *rl;
+	sval_t tmp;
+	int recurse_cnt = 0;
+
+	rl =  _get_rl(expr, RL_FUZZY, &recurse_cnt);
+	if (!rl)
+		return 0;
+	tmp = rl_min(rl);
+	if (sval_is_negative(tmp) && sval_is_min(tmp))
+		return 0;
+	*sval = tmp;
+	return 1;
+}
+
+int get_fuzzy_max(struct expression *expr, sval_t *sval)
+{
+	struct range_list *rl;
+	sval_t max;
+	int recurse_cnt = 0;
+
+	rl =  _get_rl(expr, RL_FUZZY, &recurse_cnt);
+	if (!rl)
+		return 0;
+	max = rl_max(rl);
+	if (max.uvalue > INT_MAX - 10000)
+		return 0;
+	*sval = max;
+	return 1;
+}
+
+int get_absolute_min(struct expression *expr, sval_t *sval)
+{
+	struct range_list *rl;
+	struct symbol *type;
+	int recurse_cnt = 0;
+
+	type = get_type(expr);
+	if (!type)
+		type = &llong_ctype;  // FIXME: this is wrong but places assume get type can't fail.
+	rl = _get_rl(expr, RL_REAL_ABSOLUTE, &recurse_cnt);
+	if (rl)
+		*sval = rl_min(rl);
+	else
+		*sval = sval_type_min(type);
+
+	if (sval_cmp(*sval, sval_type_min(type)) < 0)
+		*sval = sval_type_min(type);
+	return 1;
+}
+
+int get_absolute_max(struct expression *expr, sval_t *sval)
+{
+	struct range_list *rl;
+	struct symbol *type;
+	int recurse_cnt = 0;
+
+	type = get_type(expr);
+	if (!type)
+		type = &llong_ctype;
+	rl = _get_rl(expr, RL_REAL_ABSOLUTE, &recurse_cnt);
+	if (rl)
+		*sval = rl_max(rl);
+	else
+		*sval = sval_type_max(type);
+
+	if (sval_cmp(sval_type_max(type), *sval) < 0)
+		*sval = sval_type_max(type);
+	return 1;
+}
+
+int known_condition_true(struct expression *expr)
+{
+	sval_t tmp;
+
+	if (!expr)
+		return 0;
+
+	if (get_value(expr, &tmp) && tmp.value)
+		return 1;
+
+	return 0;
+}
+
+int known_condition_false(struct expression *expr)
+{
+	if (!expr)
+		return 0;
+
+	if (is_zero(expr))
+		return 1;
+
+	return 0;
+}
+
+int implied_condition_true(struct expression *expr)
+{
+	sval_t tmp;
+
+	if (!expr)
+		return 0;
+
+	if (known_condition_true(expr))
+		return 1;
+	if (get_implied_value(expr, &tmp) && tmp.value)
+		return 1;
+
+	if (expr->type == EXPR_POSTOP)
+		return implied_condition_true(expr->unop);
+
+	if (expr->type == EXPR_PREOP && expr->op == SPECIAL_DECREMENT)
+		return implied_not_equal(expr->unop, 1);
+	if (expr->type == EXPR_PREOP && expr->op == SPECIAL_INCREMENT)
+		return implied_not_equal(expr->unop, -1);
+
+	expr = strip_expr(expr);
+	switch (expr->type) {
+	case EXPR_COMPARE:
+		if (do_comparison(expr) == 1)
+			return 1;
+		break;
+	case EXPR_PREOP:
+		if (expr->op == '!') {
+			if (implied_condition_false(expr->unop))
+				return 1;
+			break;
+		}
+		break;
+	default:
+		if (implied_not_equal(expr, 0) == 1)
+			return 1;
+		break;
+	}
+	return 0;
+}
+
+int implied_condition_false(struct expression *expr)
+{
+	struct expression *tmp;
+	sval_t sval;
+
+	if (!expr)
+		return 0;
+
+	if (known_condition_false(expr))
+		return 1;
+
+	switch (expr->type) {
+	case EXPR_COMPARE:
+		if (do_comparison(expr) == 2)
+			return 1;
+	case EXPR_PREOP:
+		if (expr->op == '!') {
+			if (implied_condition_true(expr->unop))
+				return 1;
+			break;
+		}
+		tmp = strip_expr(expr);
+		if (tmp != expr)
+			return implied_condition_false(tmp);
+		break;
+	default:
+		if (get_implied_value(expr, &sval) && sval.value == 0)
+			return 1;
+		break;
+	}
+	return 0;
+}
+
+int can_integer_overflow(struct symbol *type, struct expression *expr)
+{
+	int op;
+	sval_t lmax, rmax, res;
+
+	if (!type)
+		type = &int_ctype;
+
+	expr = strip_expr(expr);
+
+	if (expr->type == EXPR_ASSIGNMENT) {
+		switch(expr->op) {
+		case SPECIAL_MUL_ASSIGN:
+			op = '*';
+			break;
+		case SPECIAL_ADD_ASSIGN:
+			op = '+';
+			break;
+		case SPECIAL_SHL_ASSIGN:
+			op = SPECIAL_LEFTSHIFT;
+			break;
+		default:
+			return 0;
+		}
+	} else if (expr->type == EXPR_BINOP) {
+		if (expr->op != '*' && expr->op != '+' && expr->op != SPECIAL_LEFTSHIFT)
+			return 0;
+		op = expr->op;
+	} else {
+		return 0;
+	}
+
+	get_absolute_max(expr->left, &lmax);
+	get_absolute_max(expr->right, &rmax);
+
+	if (sval_binop_overflows(lmax, op, rmax))
+		return 1;
+
+	res = sval_binop(lmax, op, rmax);
+	if (sval_cmp(res, sval_type_max(type)) > 0)
+		return 1;
+	return 0;
+}
--- /dev/null	Fri Dec 21 15:00:27 2018
+++ new/usr/src/tools/smatch/src/smatch_mem_tracker.c	Fri Dec 21 15:00:27 2018
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2018 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include <unistd.h>
+
+static int my_id;
+
+static unsigned long max_size;
+
+static void match_end_func(struct symbol *sym)
+{
+	FILE *file;
+	char buf[1024];
+	unsigned long size;
+
+	file = fopen("/proc/self/statm", "r");
+	if (!file)
+		return;
+	fread(buf, 1, sizeof(buf), file);
+	fclose(file);
+
+	size = strtoul(buf, NULL, 10);
+	size = size * sysconf(_SC_PAGESIZE) / 1024;
+	if (size > max_size)
+		max_size = size;
+}
+
+unsigned long get_max_memory(void)
+{
+	return max_size;
+}
+
+void register_mem_tracker(int id)
+{
+	my_id = id;
+
+	add_hook(&match_end_func, END_FUNC_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:27 2018
+++ new/usr/src/tools/smatch/src/smatch_modification_hooks.c	Fri Dec 21 15:00:27 2018
@@ -0,0 +1,303 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * There are a number of ways that variables are modified:
+ * 1) assignment
+ * 2) increment/decrement
+ * 3) assembly
+ * 4) inside functions.
+ *
+ * For setting stuff inside a function then, of course, it's more accurate if
+ * you have the cross function database built.  Otherwise we are super
+ * aggressive about marking things as modified and if you have "frob(foo);" then
+ * we assume "foo->bar" is modified.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+enum {
+	EARLY = 0,
+	LATE = 1,
+	BOTH = 2
+};
+
+static modification_hook **hooks;
+static modification_hook **hooks_late;
+
+ALLOCATOR(modification_data, "modification data");
+
+static int my_id;
+static struct smatch_state *alloc_my_state(struct expression *expr, struct smatch_state *prev)
+{
+	struct smatch_state *state;
+	struct modification_data *data;
+	char *name;
+
+	state = __alloc_smatch_state(0);
+	expr = strip_expr(expr);
+	name = expr_to_str(expr);
+	state->name = alloc_sname(name);
+	free_string(name);
+
+	data = __alloc_modification_data(0);
+	data->prev = prev;
+	data->cur = expr;
+	state->data = data;
+
+	return state;
+}
+
+void add_modification_hook(int owner, modification_hook *call_back)
+{
+	if (hooks[owner])
+		sm_fatal("multiple modification hooks for %s", check_name(owner));
+	hooks[owner] = call_back;
+}
+
+void add_modification_hook_late(int owner, modification_hook *call_back)
+{
+	if (hooks_late[owner])
+		sm_fatal("multiple late modification hooks for %s", check_name(owner));
+	hooks_late[owner] = call_back;
+}
+
+static int matches(char *name, struct symbol *sym, struct sm_state *sm)
+{
+	int len;
+
+	if (sym != sm->sym)
+		return false;
+
+	len = strlen(name);
+	if (strncmp(sm->name, name, len) == 0) {
+		if (sm->name[len] == '\0')
+			return true;
+		if (sm->name[len] == '-' || sm->name[len] == '.')
+			return true;
+	}
+	if (sm->name[0] != '*')
+		return false;
+	if (strncmp(sm->name + 1, name, len) == 0) {
+		if (sm->name[len + 1] == '\0')
+			return true;
+		if (sm->name[len + 1] == '-' || sm->name[len + 1] == '.')
+			return true;
+	}
+	return false;
+}
+
+static void call_modification_hooks_name_sym(char *name, struct symbol *sym, struct expression *mod_expr, int late)
+{
+	struct sm_state *sm;
+	struct smatch_state *prev;
+	int match;
+
+	prev = get_state(my_id, name, sym);
+
+	if (cur_func_sym && !__in_fake_assign)
+		set_state(my_id, name, sym, alloc_my_state(mod_expr, prev));
+
+	FOR_EACH_SM(__get_cur_stree(), sm) {
+		if (sm->owner > num_checks)
+			continue;
+		match = matches(name, sym, sm);
+		if (!match)
+			continue;
+
+		if (late == EARLY || late == BOTH) {
+			if (hooks[sm->owner])
+				(hooks[sm->owner])(sm, mod_expr);
+		}
+		if (late == LATE || late == BOTH) {
+			if (hooks_late[sm->owner])
+				(hooks_late[sm->owner])(sm, mod_expr);
+		}
+
+	} END_FOR_EACH_SM(sm);
+}
+
+static void call_modification_hooks(struct expression *expr, struct expression *mod_expr, int late)
+{
+	char *name;
+	struct symbol *sym;
+
+	if (late == LATE)
+		update_mtag_data(expr);
+
+	name = expr_to_known_chunk_sym(expr, &sym);
+	if (!name)
+		goto free;
+	call_modification_hooks_name_sym(name, sym, mod_expr, late);
+free:
+	free_string(name);
+}
+
+static void db_param_add(struct expression *expr, int param, char *key, char *value)
+{
+	struct expression *arg, *gen_expr;
+	char *name, *other_name;
+	struct symbol *sym, *other_sym;
+
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+	if (expr->type != EXPR_CALL)
+		return;
+
+	arg = get_argument_from_call_expr(expr->args, param);
+	if (!arg)
+		return;
+
+	gen_expr = gen_expression_from_key(arg, key);
+	if (gen_expr)
+		update_mtag_data(gen_expr);
+
+	name = get_variable_from_key(arg, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	__in_fake_assign++;
+	call_modification_hooks_name_sym(name, sym, expr, BOTH);
+	__in_fake_assign--;
+
+	other_name = map_long_to_short_name_sym(name, sym, &other_sym);
+	if (other_name) {
+		__in_fake_assign++;
+		call_modification_hooks_name_sym(other_name, other_sym, expr, BOTH);
+		__in_fake_assign--;
+		free_string(other_name);
+	}
+
+free:
+	free_string(name);
+}
+
+static void match_assign(struct expression *expr, int late)
+{
+	call_modification_hooks(expr->left, expr, late);
+}
+
+static void unop_expr(struct expression *expr, int late)
+{
+	if (expr->op != SPECIAL_DECREMENT && expr->op != SPECIAL_INCREMENT)
+		return;
+
+	call_modification_hooks(expr->unop, expr, late);
+}
+
+static void match_call(struct expression *expr)
+{
+	struct expression *arg, *tmp;
+
+	/* If we have the DB then trust the DB */
+	if (!option_no_db)
+		return;
+
+	FOR_EACH_PTR(expr->args, arg) {
+		tmp = strip_expr(arg);
+		if (tmp->type == EXPR_PREOP && tmp->op == '&')
+			call_modification_hooks(tmp->unop, expr, BOTH);
+		else
+			call_modification_hooks(deref_expression(tmp), expr, BOTH);
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void asm_expr(struct statement *stmt, int late)
+{
+	struct expression *expr;
+	int state = 0;
+
+	FOR_EACH_PTR(stmt->asm_outputs, expr) {
+		switch (state) {
+		case 0: /* identifier */
+		case 1: /* constraint */
+			state++;
+			continue;
+		case 2: /* expression */
+			state = 0;
+			call_modification_hooks(expr, NULL, late);
+			continue;
+		}
+	} END_FOR_EACH_PTR(expr);
+}
+
+
+static void match_assign_early(struct expression *expr)
+{
+	match_assign(expr, EARLY);
+}
+
+static void unop_expr_early(struct expression *expr)
+{
+	unop_expr(expr, EARLY);
+}
+
+static void asm_expr_early(struct statement *stmt)
+{
+	asm_expr(stmt, EARLY);
+}
+
+static void match_assign_late(struct expression *expr)
+{
+	match_assign(expr, LATE);
+}
+
+static void unop_expr_late(struct expression *expr)
+{
+	unop_expr(expr, LATE);
+}
+
+static void asm_expr_late(struct statement *stmt)
+{
+	asm_expr(stmt, LATE);
+}
+
+struct smatch_state *get_modification_state(struct expression *expr)
+{
+	return get_state_expr(my_id, expr);
+}
+
+void register_modification_hooks(int id)
+{
+	my_id = id;
+
+	hooks = malloc((num_checks + 1) * sizeof(*hooks));
+	memset(hooks, 0, (num_checks + 1) * sizeof(*hooks));
+	hooks_late = malloc((num_checks + 1) * sizeof(*hooks));
+	memset(hooks_late, 0, (num_checks + 1) * sizeof(*hooks));
+
+	add_hook(&match_assign_early, ASSIGNMENT_HOOK);
+	add_hook(&unop_expr_early, OP_HOOK);
+	add_hook(&asm_expr_early, ASM_HOOK);
+}
+
+void register_modification_hooks_late(int id)
+{
+	add_hook(&match_call, FUNCTION_CALL_HOOK);
+
+	select_return_states_hook(PARAM_ADD, &db_param_add);
+	select_return_states_hook(PARAM_SET, &db_param_add);
+
+	add_hook(&match_assign_late, ASSIGNMENT_HOOK_AFTER);
+	add_hook(&unop_expr_late, OP_HOOK);
+	add_hook(&asm_expr_late, ASM_HOOK);
+}
+
--- /dev/null	Fri Dec 21 15:00:27 2018
+++ new/usr/src/tools/smatch/src/smatch_mtag.c	Fri Dec 21 15:00:27 2018
@@ -0,0 +1,559 @@
+/*
+ * Copyright (C) 2017 Oracle.  All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * One problem that I have is that it's really hard to track how pointers are
+ * passed around.  For example, it would be nice to know that the probe() and
+ * remove() functions get the same pci_dev pointer.  It would be good to know
+ * what pointers we're passing to the open() and close() functions.  But that
+ * information gets lost in a call tree full of function pointer calls.
+ *
+ * I think the first step is to start naming specific pointers.  So when a
+ * pointer is allocated, then it gets a tag.  So calls to kmalloc() generate a
+ * tag.  But we might not use that, because there might be a better name like
+ * framebuffer_alloc(). The framebuffer_alloc() is interesting because there is
+ * one per driver and it's passed around to all the file operations.
+ *
+ * Perhaps we could make a list of functions like framebuffer_alloc() which take
+ * a size and say that those are the interesting alloc functions.
+ *
+ * Another place where we would maybe name the pointer is when they are passed
+ * to the probe().  Because that's an important pointer, since there is one
+ * per driver (sort of).
+ *
+ * My vision is that you could take a pointer and trace it back to a global.  So
+ * I'm going to track that pointer_tag - 28 bytes takes you to another pointer
+ * tag.  You could follow that one back and so on.  Also when we pass a pointer
+ * to a function that would be recorded as sort of a link or path or something.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+#include <openssl/md5.h>
+
+static int my_id;
+
+static struct smatch_state *alloc_tag_state(mtag_t tag)
+{
+	struct smatch_state *state;
+	char buf[64];
+
+	state = __alloc_smatch_state(0);
+	snprintf(buf, sizeof(buf), "%lld", tag);
+	state->name = alloc_sname(buf);
+	state->data = malloc(sizeof(mtag_t));
+	*(mtag_t *)state->data = tag;
+
+	return state;
+}
+
+static mtag_t str_to_tag(const char *str)
+{
+	unsigned char c[MD5_DIGEST_LENGTH];
+	unsigned long long *tag = (unsigned long long *)&c;
+	MD5_CTX mdContext;
+	int len;
+
+	len = strlen(str);
+	MD5_Init(&mdContext);
+	MD5_Update(&mdContext, str, len);
+	MD5_Final(c, &mdContext);
+
+	*tag &= ~MTAG_ALIAS_BIT;
+	*tag &= ~MTAG_OFFSET_MASK;
+
+	return *tag;
+}
+
+static void alloc_assign(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *left, *right;
+	char *left_name, *right_name;
+	struct symbol *left_sym;
+	char buf[256];
+	mtag_t tag;
+
+
+	// FIXME:  This should only happen when the size is not a paramter of
+	// the caller
+	return;
+
+	if (expr->type != EXPR_ASSIGNMENT || expr->op != '=')
+		return;
+	left = strip_expr(expr->left);
+	right = strip_expr(expr->right);
+	if (right->type != EXPR_CALL || right->fn->type != EXPR_SYMBOL)
+		return;
+
+	left_name = expr_to_str_sym(left, &left_sym);
+	right_name = expr_to_str(right);
+
+	snprintf(buf, sizeof(buf), "%s %s %s %s", get_filename(), get_function(),
+		 left_name, right_name);
+	tag = str_to_tag(buf);
+
+	sql_insert_mtag_about(tag, left_name, right_name);
+
+	if (left_name && left_sym)
+		set_state(my_id, left_name, left_sym, alloc_tag_state(tag));
+
+	free_string(left_name);
+	free_string(right_name);
+}
+
+int get_string_mtag(struct expression *expr, mtag_t *tag)
+{
+	mtag_t xor;
+
+	if (expr->type != EXPR_STRING || !expr->string)
+		return 0;
+
+	/* I was worried about collisions so I added a xor */
+	xor = str_to_tag("__smatch string");
+	*tag = str_to_tag(expr->string->data);
+	*tag = *tag ^ xor;
+
+	return 1;
+}
+
+int get_toplevel_mtag(struct symbol *sym, mtag_t *tag)
+{
+	char buf[256];
+
+	if (!sym)
+		return 0;
+
+	if (!sym->ident ||
+	    !(sym->ctype.modifiers & MOD_TOPLEVEL))
+		return 0;
+
+	snprintf(buf, sizeof(buf), "%s %s",
+		 (sym->ctype.modifiers & MOD_STATIC) ? get_filename() : "extern",
+		 sym->ident->name);
+	*tag = str_to_tag(buf);
+	return 1;
+}
+
+int get_deref_mtag(struct expression *expr, mtag_t *tag)
+{
+	mtag_t container_tag, member_tag;
+	int offset;
+
+	/*
+	 * I'm not totally sure what I'm doing...
+	 *
+	 * This is supposed to get something like "global_var->ptr", but I don't
+	 * feel like it's complete at all.
+	 *
+	 */
+
+	if (!get_mtag(expr->unop, &container_tag))
+		return 0;
+
+	offset = get_member_offset_from_deref(expr);
+	if (offset < 0)
+		return 0;
+
+	if (!mtag_map_select_tag(container_tag, -offset, &member_tag))
+		return 0;
+
+	*tag = member_tag;
+	return 1;
+}
+
+static void global_variable(struct symbol *sym)
+{
+	mtag_t tag;
+
+	if (!get_toplevel_mtag(sym, &tag))
+		return;
+
+	sql_insert_mtag_about(tag,
+			      sym->ident->name,
+			      (sym->ctype.modifiers & MOD_STATIC) ? get_filename() : "extern");
+}
+
+static void db_returns_buf_size(struct expression *expr, int param, char *unused, char *math)
+{
+	struct expression *call;
+	struct range_list *rl;
+
+	if (expr->type != EXPR_ASSIGNMENT)
+		return;
+	call = strip_expr(expr->right);
+
+	if (!parse_call_math_rl(call, math, &rl))
+		return;
+//	rl = cast_rl(&int_ctype, rl);
+//	set_state_expr(my_size_id, expr->left, alloc_estate_rl(rl));
+}
+
+static void db_returns_memory_tag(struct expression *expr, int param, char *key, char *value)
+{
+	struct expression *call, *arg;
+	mtag_t tag, alias;
+	char *name;
+	struct symbol *sym;
+
+	call = strip_expr(expr);
+	while (call->type == EXPR_ASSIGNMENT)
+		call = strip_expr(call->right);
+	if (call->type != EXPR_CALL)
+		return;
+
+	tag = strtoul(value, NULL, 10);
+
+	if (!create_mtag_alias(tag, call, &alias))
+		return;
+
+	arg = get_argument_from_call_expr(call->args, param);
+	if (!arg)
+		return;
+
+	name = get_variable_from_key(arg, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	set_state(my_id, name, sym, alloc_tag_state(alias));
+free:
+	free_string(name);
+}
+
+static void match_call_info(struct expression *expr)
+{
+	struct smatch_state *state;
+	struct expression *arg;
+	int i = -1;
+
+	FOR_EACH_PTR(expr->args, arg) {
+		i++;
+		state = get_state_expr(my_id, arg);
+		if (!state || !state->data)
+			continue;
+		sql_insert_caller_info(expr, MEMORY_TAG, i, "$", state->name);
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void save_caller_info(const char *name, struct symbol *sym, char *key, char *value)
+{
+	struct smatch_state *state;
+	char fullname[256];
+	mtag_t tag;
+
+	if (strncmp(key, "$", 1) != 0)
+		return;
+
+	tag = atoll(value);
+	snprintf(fullname, 256, "%s%s", name, key + 1);
+	state = alloc_tag_state(tag);
+	set_state(my_id, fullname, sym, state);
+}
+
+static int get_array_mtag_offset(struct expression *expr, mtag_t *tag, int *offset)
+{
+	struct expression *array, *offset_expr;
+	struct symbol *type;
+	sval_t sval;
+
+	if (!is_array(expr))
+		return 0;
+
+	array = get_array_base(expr);
+	if (!array)
+		return 0;
+	type = get_type(array);
+	if (!type || type->type != SYM_ARRAY)
+		return 0;
+	type = get_real_base_type(type);
+	if (!type_bytes(type))
+		return 0;
+
+	if (!get_mtag(array, tag))
+		return 0;
+
+	offset_expr = get_array_offset(expr);
+	if (!get_value(offset_expr, &sval))
+		return 0;
+	*offset = sval.value * type_bytes(type);
+
+	return 1;
+}
+
+static int get_implied_mtag_offset(struct expression *expr, mtag_t *tag, int *offset)
+{
+	struct smatch_state *state;
+	struct symbol *type;
+	sval_t sval;
+
+	type = get_type(expr);
+	if (!type_is_ptr(type))
+		return 0;
+	state = get_extra_state(expr);
+	if (!state || !estate_get_single_value(state, &sval) || sval.value == 0)
+		return 0;
+
+	*tag = sval.uvalue & ~MTAG_OFFSET_MASK;
+	*offset = sval.uvalue & MTAG_OFFSET_MASK;
+	return 1;
+}
+
+static int get_mtag_cnt;
+int get_mtag(struct expression *expr, mtag_t *tag)
+{
+	struct smatch_state *state;
+	int ret = 0;
+
+	expr = strip_expr(expr);
+	if (!expr)
+		return 0;
+
+	if (get_mtag_cnt > 0)
+		return 0;
+
+	get_mtag_cnt++;
+
+	switch (expr->type) {
+	case EXPR_STRING:
+		if (get_string_mtag(expr, tag)) {
+			ret = 1;
+			goto dec_cnt;
+		}
+		break;
+	case EXPR_SYMBOL:
+		if (get_toplevel_mtag(expr->symbol, tag)) {
+			ret = 1;
+			goto dec_cnt;
+		}
+		break;
+	case EXPR_DEREF:
+		if (get_deref_mtag(expr, tag)) {
+			ret = 1;
+			goto dec_cnt;
+		}
+		break;
+	}
+
+	state = get_state_expr(my_id, expr);
+	if (!state)
+		goto dec_cnt;
+	if (state->data) {
+		*tag = *(mtag_t *)state->data;
+		ret = 1;
+		goto dec_cnt;
+	}
+
+dec_cnt:
+	get_mtag_cnt--;
+	return ret;
+}
+
+int get_mtag_offset(struct expression *expr, mtag_t *tag, int *offset)
+{
+	int val;
+
+	if (!expr)
+		return 0;
+	if (expr->type == EXPR_PREOP && expr->op == '*')
+		return get_mtag_offset(expr->unop, tag, offset);
+	if (get_implied_mtag_offset(expr, tag, offset))
+		return 1;
+	if (!get_mtag(expr, tag))
+		return 0;
+	expr = strip_expr(expr);
+	if (expr->type == EXPR_SYMBOL) {
+		*offset = 0;
+		return 1;
+	}
+	val = get_member_offset_from_deref(expr);
+	if (val < 0)
+		return 0;
+	*offset = val;
+	return 1;
+}
+
+int create_mtag_alias(mtag_t tag, struct expression *expr, mtag_t *new)
+{
+	char buf[256];
+	int lines_from_start;
+	char *str;
+
+	/*
+	 * We need the alias to be unique.  It's not totally required that it
+	 * be the same from one DB build to then next, but it makes debugging
+	 * a bit simpler.
+	 *
+	 */
+
+	if (!cur_func_sym)
+		return 0;
+
+	lines_from_start = expr->pos.line - cur_func_sym->pos.line;
+	str = expr_to_str(expr);
+	snprintf(buf, sizeof(buf), "%lld %d %s", tag, lines_from_start, str);
+	free_string(str);
+
+	*new = str_to_tag(buf);
+	sql_insert_mtag_alias(tag, *new);
+
+	return 1;
+}
+
+int expr_to_mtag_offset(struct expression *expr, mtag_t *tag, int *offset)
+{
+	*offset = 0;
+
+	expr = strip_expr(expr);
+	if (!expr)
+		return 0;
+
+	if (is_array(expr))
+		return get_array_mtag_offset(expr, tag, offset);
+
+	if (expr->type ==  EXPR_DEREF) {
+		*offset = get_member_offset_from_deref(expr);
+		if (*offset < 0)
+			return 0;
+		return get_mtag(expr->deref, tag);
+	}
+
+	if (get_implied_mtag_offset(expr, tag, offset))
+		return 1;
+
+	return get_mtag(expr, tag);
+}
+
+int get_mtag_sval(struct expression *expr, sval_t *sval)
+{
+	struct symbol *type;
+	mtag_t tag;
+	int offset = 0;
+
+	if (bits_in_pointer != 64)
+		return 0;
+
+	expr = strip_expr(expr);
+
+	type = get_type(expr);
+	if (!type_is_ptr(type))
+		return 0;
+	/*
+	 * There are only three options:
+	 *
+	 * 1) An array address:
+	 *    p = array;
+	 * 2) An address like so:
+	 *    p = &my_struct->member;
+	 * 3) A pointer:
+	 *    p = pointer;
+	 *
+	 */
+
+	if (expr->type == EXPR_STRING && get_string_mtag(expr, &tag))
+		goto found;
+
+	if (type->type == SYM_ARRAY && get_toplevel_mtag(expr->symbol, &tag))
+		goto found;
+
+	if (get_implied_mtag_offset(expr, &tag, &offset))
+		goto found;
+
+	if (expr->type != EXPR_PREOP || expr->op != '&')
+		return 0;
+	expr = strip_expr(expr->unop);
+
+	if (!expr_to_mtag_offset(expr, &tag, &offset))
+		return 0;
+	if (offset > MTAG_OFFSET_MASK)
+		offset = MTAG_OFFSET_MASK;
+
+found:
+	sval->type = type;
+	sval->uvalue = tag | offset;
+
+	return 1;
+}
+
+static struct expression *remove_dereference(struct expression *expr)
+{
+	expr = strip_expr(expr);
+
+	if (expr->type == EXPR_PREOP && expr->op == '*')
+		return strip_expr(expr->unop);
+	return preop_expression(expr, '&');
+}
+
+int get_mtag_addr_sval(struct expression *expr, sval_t *sval)
+{
+	return get_mtag_sval(remove_dereference(expr), sval);
+}
+
+static void print_stored_to_mtag(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct sm_state *sm;
+	char buf[256];
+	const char *param_name;
+	int param;
+
+	FOR_EACH_MY_SM(my_id, __get_cur_stree(), sm) {
+		if (!sm->state->data)
+			continue;
+
+		param = get_param_num_from_sym(sm->sym);
+		if (param < 0)
+			continue;
+		param_name = get_param_name(sm);
+		if (!param_name)
+			continue;
+		if (strcmp(param_name, "$") == 0)
+			continue;
+
+		snprintf(buf, sizeof(buf), "%lld", *(mtag_t *)sm->state->data);
+		sql_insert_return_states(return_id, return_ranges, MEMORY_TAG, param, param_name, buf);
+	} END_FOR_EACH_SM(sm);
+}
+
+void register_mtag(int id)
+{
+	my_id = id;
+
+
+	/*
+	 * The mtag stuff only works on 64 systems because we store the
+	 * information in the pointer itself.
+	 * bit 63   : set for alias mtags
+	 * bit 62-12: mtag hash
+	 * bit 11-0 : offset
+	 *
+	 */
+	if (bits_in_pointer != 64)
+		return;
+
+	add_hook(&global_variable, BASE_HOOK);
+
+	add_function_assign_hook("kmalloc", &alloc_assign, NULL);
+	add_function_assign_hook("kzalloc", &alloc_assign, NULL);
+
+	select_return_states_hook(BUF_SIZE, &db_returns_buf_size);
+
+	add_hook(&match_call_info, FUNCTION_CALL_HOOK);
+	select_caller_info_hook(save_caller_info, MEMORY_TAG);
+	add_split_return_callback(&print_stored_to_mtag);
+	select_return_states_hook(MEMORY_TAG, db_returns_memory_tag);
+}
--- /dev/null	Fri Dec 21 15:00:27 2018
+++ new/usr/src/tools/smatch/src/smatch_mtag_data.c	Fri Dec 21 15:00:27 2018
@@ -0,0 +1,257 @@
+/*
+ * Copyright (C) 2016 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * What we're doing here is saving all the possible values for static variables.
+ * Later on we might do globals as well.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+static struct stree *vals;
+
+static int save_rl(void *_rl, int argc, char **argv, char **azColName)
+{
+	unsigned long *rl = _rl;
+
+	*rl = strtoul(argv[0], NULL, 10);
+	return 0;
+}
+
+static struct range_list *select_orig_rl(sval_t sval)
+{
+	struct range_list *rl = NULL;
+	mtag_t tag = sval.uvalue & ~MTAG_OFFSET_MASK;
+	int offset = sval.uvalue & MTAG_OFFSET_MASK;
+
+	mem_sql(&save_rl, &rl, "select value from mtag_data where tag = %lld and offset = %d;",
+		tag, offset);
+	return rl;
+}
+
+static int is_kernel_param(const char *name)
+{
+	struct sm_state *tmp;
+	char buf[256];
+
+	/*
+	 * I'm ignoring these because otherwise Smatch thinks that kernel
+	 * parameters are always set to the default.
+	 *
+	 */
+
+	if (option_project != PROJ_KERNEL)
+		return 0;
+
+	snprintf(buf, sizeof(buf), "__param_%s.arg", name);
+
+	FOR_EACH_SM(vals, tmp) {
+		if (strcmp(tmp->name, buf) == 0)
+			return 1;
+	} END_FOR_EACH_SM(tmp);
+
+	return 0;
+}
+
+void insert_mtag_data(sval_t sval, struct range_list *rl)
+{
+	mtag_t tag = sval.uvalue & ~MTAG_OFFSET_MASK;
+	int offset = sval.uvalue & MTAG_OFFSET_MASK;
+
+	rl = clone_rl_permanent(rl);
+
+	mem_sql(NULL, NULL, "delete from mtag_data where tag = %lld and offset = %d and type = %d",
+		tag, offset, DATA_VALUE);
+	mem_sql(NULL, NULL, "insert into mtag_data values (%lld, %d, %d, '%lu');",
+		tag, offset, DATA_VALUE, (unsigned long)rl);
+}
+
+void update_mtag_data(struct expression *expr)
+{
+	struct range_list *orig, *new, *rl;
+	char *name;
+	sval_t sval;
+
+	name = expr_to_var(expr);
+	if (is_kernel_param(name)) {
+		free_string(name);
+		return;
+	}
+	free_string(name);
+
+	if (!get_mtag_addr_sval(expr, &sval))
+		return;
+
+	get_absolute_rl(expr, &rl);
+
+	orig = select_orig_rl(sval);
+	new = rl_union(orig, rl);
+	insert_mtag_data(sval, new);
+}
+
+static void match_global_assign(struct expression *expr)
+{
+	struct range_list *rl;
+	sval_t sval;
+	char *name;
+
+	name = expr_to_var(expr->left);
+	if (is_kernel_param(name)) {
+		free_string(name);
+		return;
+	}
+	free_string(name);
+
+	if (!get_mtag_addr_sval(expr->left, &sval))
+		return;
+
+	get_absolute_rl(expr->right, &rl);
+	insert_mtag_data(sval, rl);
+}
+
+static int save_mtag_data(void *_unused, int argc, char **argv, char **azColName)
+{
+	struct range_list *rl;
+
+	if (argc != 4) {
+		sm_msg("Error saving mtag data");
+		return 0;
+	}
+	if (!option_info)
+		return 0;
+
+	rl = (struct range_list *)strtoul(argv[3], NULL, 10);
+	sm_msg("SQL: insert into mtag_data values ('%s', '%s', '%s', '%s');",
+	       argv[0], argv[1], argv[2], show_rl(rl));
+
+	return 0;
+}
+
+static void match_end_file(struct symbol_list *sym_list)
+{
+	mem_sql(&save_mtag_data, NULL, "select * from mtag_data where type = %d;",
+		DATA_VALUE);
+}
+
+struct db_info {
+	struct symbol *type;
+	struct range_list *rl;
+};
+
+static int get_vals(void *_db_info, int argc, char **argv, char **azColName)
+{
+	struct db_info *db_info = _db_info;
+	struct range_list *tmp;
+
+	str_to_rl(db_info->type, argv[0], &tmp);
+	if (db_info->rl)
+		db_info->rl = rl_union(db_info->rl, tmp);
+	else
+		db_info->rl = tmp;
+
+	return 0;
+}
+
+struct db_cache_results {
+	sval_t sval;
+	struct range_list *rl;
+};
+static struct db_cache_results cached_results[8];
+
+static int get_rl_from_mtag_sval(sval_t sval, struct symbol *type, struct range_list **rl)
+{
+	struct db_info db_info = {};
+	mtag_t tag;
+	int offset;
+	static int idx;
+	int ret;
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(cached_results); i++) {
+		if (sval.uvalue == cached_results[i].sval.uvalue) {
+			if (cached_results[i].rl) {
+				*rl = cached_results[i].rl;
+				return 1;
+			}
+			return 0;
+		}
+	}
+
+	tag = sval.uvalue & ~MTAG_OFFSET_MASK;
+	offset = sval.uvalue & MTAG_OFFSET_MASK;
+	if (offset == MTAG_OFFSET_MASK) {
+		ret = 0;
+		goto update_cache;
+	}
+	db_info.type = type;
+
+	run_sql(get_vals, &db_info,
+		"select value from mtag_data where tag = %lld and offset = %d and type = %d;",
+		tag, offset, DATA_VALUE);
+	if (!db_info.rl || is_whole_rl(db_info.rl)) {
+		db_info.rl = NULL;
+		ret = 0;
+		goto update_cache;
+	}
+
+	*rl = db_info.rl;
+	ret = 1;
+
+update_cache:
+	cached_results[idx].sval = sval;
+	cached_results[idx].rl = db_info.rl;
+	idx = (idx + 1) % ARRAY_SIZE(cached_results);
+
+	return ret;
+}
+
+static void clear_cache(struct symbol *sym)
+{
+	memset(cached_results, 0, sizeof(cached_results));
+}
+
+int get_mtag_rl(struct expression *expr, struct range_list **rl)
+{
+	struct symbol *type;
+	sval_t sval;
+
+	if (!get_mtag_addr_sval(expr, &sval))
+		return 0;
+
+	type = get_type(expr);
+	if (!type)
+		return 0;
+
+	return get_rl_from_mtag_sval(sval, type, rl);
+}
+
+void register_mtag_data(int id)
+{
+	my_id = id;
+
+	add_hook(&clear_cache, FUNC_DEF_HOOK);
+
+//	if (!option_info)
+//		return;
+	add_hook(&match_global_assign, GLOBAL_ASSIGNMENT_HOOK);
+	add_hook(&match_end_file, END_FILE_HOOK);
+}
+
--- /dev/null	Fri Dec 21 15:00:27 2018
+++ new/usr/src/tools/smatch/src/smatch_mtag_map.c	Fri Dec 21 15:00:27 2018
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2017 Oracle.  All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This basically stores when a pointer is stored as a struct member.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+static void match_assign(struct expression *expr)
+{
+	struct expression *left, *right;
+	mtag_t left_tag, right_tag;
+	int offset;
+
+	if (expr->op != '=')
+		return;
+
+	left = strip_expr(expr->left);
+	right = strip_expr(expr->right);
+
+	if (left->type != EXPR_DEREF)
+		return;
+
+	offset = get_member_offset_from_deref(left);
+	if (offset < 0)
+		return;
+
+	if (!get_mtag(left->deref, &left_tag))
+		return;
+	if (!get_mtag(right, &right_tag))
+		return;
+
+	sql_insert_mtag_map(right_tag, -offset, left_tag);
+}
+
+void register_mtag_map(int id)
+{
+	my_id = id;
+
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+	add_hook(&match_assign, GLOBAL_ASSIGNMENT_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:27 2018
+++ new/usr/src/tools/smatch/src/smatch_nul_terminator.c	Fri Dec 21 15:00:27 2018
@@ -0,0 +1,268 @@
+/*
+ * Copyright (C) 2018 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+static int param_set_id;
+
+STATE(terminated);
+STATE(unterminated);
+STATE(set);
+
+static void set_terminated_var_sym(const char *name, struct symbol *sym, struct smatch_state *state)
+{
+	if (get_param_num_from_sym(sym) >= 0)
+		set_state(param_set_id, name, sym, &set);
+	set_state(my_id, name, sym, state);
+}
+
+static void set_terminated(struct expression *expr, struct smatch_state *state)
+{
+	struct symbol *sym;
+	char *name;
+
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		return;
+	set_terminated_var_sym(name, sym, state);
+	free_string(name);
+}
+
+static void match_nul_assign(struct expression *expr)
+{
+	struct expression *array;
+	struct symbol *type;
+	sval_t sval;
+
+	if (expr->op != '=')
+		return;
+
+	if (!get_value(expr->right, &sval) || sval.value != 0)
+		return;
+
+	array = get_array_base(expr->left);
+	if (!array)
+		return;
+
+	type = get_type(array);
+	if (!type)
+		return;
+	type = get_real_base_type(type);
+	if (type != &char_ctype)
+		return;
+	set_terminated(array, &terminated);
+}
+
+static struct smatch_state *get_terminated_state(struct expression *expr)
+{
+	struct sm_state *sm, *tmp;
+
+	if (!expr)
+		return NULL;
+	if (expr->type == EXPR_STRING)
+		return &terminated;
+	sm = get_sm_state_expr(my_id, expr);
+	if (!sm)
+		return NULL;
+	if (sm->state == &terminated || sm->state == &unterminated)
+		return sm->state;
+
+	FOR_EACH_PTR(sm->possible, tmp) {
+		if (tmp->state == &unterminated)
+			return &unterminated;
+	} END_FOR_EACH_PTR(tmp);
+
+	return NULL;
+}
+
+static void match_string_assign(struct expression *expr)
+{
+	struct smatch_state *state;
+
+	if (expr->op != '=')
+		return;
+	state = get_terminated_state(expr->right);
+	if (!state)
+		return;
+	set_terminated(expr->left, state);
+}
+
+static int sm_to_term(struct sm_state *sm)
+{
+	struct sm_state *tmp;
+
+	if (!sm)
+		return -1;
+	if (sm->state == &terminated)
+		return 1;
+
+	FOR_EACH_PTR(sm->possible, tmp) {
+		if (tmp->state == &unterminated)
+			return 0;
+	} END_FOR_EACH_PTR(tmp);
+
+	return -1;
+}
+
+static void struct_member_callback(struct expression *call, int param, char *printed_name, struct sm_state *sm)
+{
+	int term;
+
+	term = sm_to_term(sm);
+	if (term < 0)
+		return;
+
+	sql_insert_caller_info(call, TERMINATED, param, printed_name, term ? "1" : "0");
+}
+
+static void match_call_info(struct expression *expr)
+{
+	struct smatch_state *state;
+	struct expression *arg;
+	int i;
+
+	i = -1;
+	FOR_EACH_PTR(expr->args, arg) {
+		i++;
+
+		state = get_terminated_state(arg);
+		if (!state)
+			continue;
+		sql_insert_caller_info(expr, TERMINATED, i, "$",
+				       (state == &terminated) ? "1" : "0");
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void caller_info_terminated(const char *name, struct symbol *sym, char *key, char *value)
+{
+	char fullname[256];
+
+	if (strcmp(key, "*$") == 0)
+		snprintf(fullname, sizeof(fullname), "*%s", name);
+	else if (strncmp(key, "$", 1) == 0)
+		snprintf(fullname, 256, "%s%s", name, key + 1);
+	else
+		return;
+
+	set_state(my_id, fullname, sym, (*value == '1') ? &terminated : &unterminated);
+}
+
+static void split_return_info(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct symbol *returned_sym;
+	struct sm_state *tmp, *sm;
+	const char *param_name;
+	int param;
+	int term;
+
+	FOR_EACH_MY_SM(param_set_id, __get_cur_stree(), tmp) {
+		sm = get_sm_state(my_id, tmp->name, tmp->sym);
+		if (!sm)
+			continue;
+		term = sm_to_term(sm);
+		if (term < 0)
+			continue;
+		param = get_param_num_from_sym(tmp->sym);
+		if (param < 0)
+			continue;
+
+		param_name = get_param_name(sm);
+		if (!param_name)
+			continue;
+		if (strcmp(param_name, "$") == 0)
+			continue;
+
+		sql_insert_return_states(return_id, return_ranges, TERMINATED,
+					 param, param_name, term ? "1" : "0");
+	} END_FOR_EACH_SM(tmp);
+
+	returned_sym = expr_to_sym(expr);
+	if (!returned_sym)
+		return;
+
+	FOR_EACH_MY_SM(my_id, __get_cur_stree(), sm) {
+		if (sm->sym != returned_sym)
+			continue;
+		term = sm_to_term(sm);
+		if (term < 0)
+			continue;
+		param_name = get_param_name(sm);
+		if (!param_name)
+			continue;
+		sql_insert_return_states(return_id, return_ranges, TERMINATED,
+					 -1, param_name, term ? "1" : "0");
+	} END_FOR_EACH_SM(sm);
+}
+
+static void return_info_terminated(struct expression *expr, int param, char *key, char *value)
+{
+	struct expression *arg;
+	char *name;
+	struct symbol *sym;
+
+	if (param == -1) {
+		arg = expr->left;
+	} else {
+		struct expression *call = expr;
+
+		while (call->type == EXPR_ASSIGNMENT)
+			call = strip_expr(call->right);
+		if (call->type != EXPR_CALL)
+			return;
+
+		arg = get_argument_from_call_expr(call->args, param);
+		if (!arg)
+			return;
+	}
+
+	name = get_variable_from_key(arg, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	set_terminated_var_sym(name, sym, (*value == '1') ? &terminated : &unterminated);
+free:
+	free_string(name);
+}
+
+bool is_nul_terminated(struct expression *expr)
+{
+	if (get_terminated_state(expr) == &terminated)
+		return 1;
+	return 0;
+}
+
+void register_nul_terminator(int id)
+{
+	my_id = id;
+
+	add_hook(&match_nul_assign, ASSIGNMENT_HOOK);
+	add_hook(&match_string_assign, ASSIGNMENT_HOOK);
+
+	add_hook(&match_call_info, FUNCTION_CALL_HOOK);
+	add_member_info_callback(my_id, struct_member_callback);
+	add_split_return_callback(&split_return_info);
+
+	select_caller_info_hook(caller_info_terminated, TERMINATED);
+	select_return_states_hook(TERMINATED, return_info_terminated);
+}
+
+void register_nul_terminator_param_set(int id)
+{
+	param_set_id = id;
+}
--- /dev/null	Fri Dec 21 15:00:27 2018
+++ new/usr/src/tools/smatch/src/smatch_param_cleared.c	Fri Dec 21 15:00:27 2018
@@ -0,0 +1,205 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This works together with smatch_clear_buffer.c.  This one is only for
+ * tracking the information and smatch_clear_buffer.c changes SMATCH_EXTRA.
+ *
+ * This tracks functions like memset() which clear out a chunk of memory.
+ * It fills in a gap that smatch_param_set.c can't handle.  It only handles
+ * void pointers because smatch_param_set.c should handle the rest.  Oh.  And
+ * also it handles arrays because Smatch sucks at handling arrays.
+ */
+
+#include "scope.h"
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+STATE(cleared);
+STATE(zeroed);
+
+static void db_param_cleared(struct expression *expr, int param, char *key, char *value)
+{
+	struct expression *arg;
+	char *name;
+	struct symbol *sym;
+
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+	if (expr->type != EXPR_CALL)
+		return;
+
+	arg = get_argument_from_call_expr(expr->args, param);
+	arg = strip_expr(arg);
+	name = get_variable_from_key(arg, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	if (strcmp(value, "0") == 0)
+		set_state(my_id, name, sym, &zeroed);
+	else
+		set_state(my_id, name, sym, &cleared);
+free:
+	free_string(name);
+}
+
+static void match_memset(const char *fn, struct expression *expr, void *arg)
+{
+	db_param_cleared(expr, PTR_INT(arg), (char *)"$", (char *)"0");
+}
+
+static void match_memcpy(const char *fn, struct expression *expr, void *arg)
+{
+	db_param_cleared(expr, PTR_INT(arg), (char *)"$", (char *)"");
+}
+
+static void print_return_value_param(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct stree *stree;
+	struct sm_state *sm;
+	int param;
+	const char *param_name;
+
+	stree = __get_cur_stree();
+
+	FOR_EACH_MY_SM(my_id, stree, sm) {
+		param = get_param_num_from_sym(sm->sym);
+		if (param < 0)
+			continue;
+
+		param_name = get_param_name(sm);
+		if (!param_name)
+			continue;
+
+		if (sm->state == &zeroed) {
+			sql_insert_return_states(return_id, return_ranges,
+						 PARAM_CLEARED, param, param_name, "0");
+		}
+
+		if (sm->state == &cleared) {
+			sql_insert_return_states(return_id, return_ranges,
+						 PARAM_CLEARED, param, param_name, "");
+		}
+	} END_FOR_EACH_SM(sm);
+}
+
+static void register_clears_param(void)
+{
+	struct token *token;
+	char name[256];
+	const char *function;
+	int param;
+
+	if (option_project == PROJ_NONE)
+		return;
+
+	snprintf(name, 256, "%s.clears_argument", option_project_str);
+
+	token = get_tokens_file(name);
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		function = show_ident(token->ident);
+		token = token->next;
+		if (token_type(token) != TOKEN_NUMBER)
+			return;
+		param = atoi(token->number);
+		add_function_hook(function, &match_memcpy, INT_PTR(param));
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+#define USB_DIR_IN 0x80
+static void match_usb_control_msg(const char *fn, struct expression *expr, void *_size_arg)
+{
+	struct expression *inout;
+	sval_t sval;
+
+	inout = get_argument_from_call_expr(expr->args, 3);
+
+	if (get_value(inout, &sval) && !(sval.uvalue & USB_DIR_IN))
+		return;
+
+	db_param_cleared(expr, 6, (char *)"$", (char *)"");
+}
+
+static void match_assign(struct expression *expr)
+{
+	struct symbol *type;
+
+	/*
+	 * If we have struct foo x, y; and we say that x = y; then it
+	 * initializes the struct holes.  So we record that here.
+	 */
+	type = get_type(expr->left);
+	if (!type || type->type != SYM_STRUCT)
+		return;
+	set_state_expr(my_id, expr->left, &cleared);
+}
+
+static void match_array_assign(struct expression *expr)
+{
+	struct expression *array_expr;
+
+	if (!is_array(expr->left))
+		return;
+
+	array_expr = get_array_base(expr->left);
+	set_state_expr(my_id, array_expr, &cleared);
+}
+
+void register_param_cleared(int id)
+{
+	my_id = id;
+
+	add_function_hook("memset", &match_memset, INT_PTR(0));
+	add_function_hook("memzero", &match_memset, INT_PTR(0));
+	add_function_hook("__memset", &match_memset, INT_PTR(0));
+	add_function_hook("__memzero", &match_memset, INT_PTR(0));
+
+	add_function_hook("memcpy", &match_memcpy, INT_PTR(0));
+	add_function_hook("memmove", &match_memcpy, INT_PTR(0));
+	add_function_hook("__memcpy", &match_memcpy, INT_PTR(0));
+	add_function_hook("__memmove", &match_memcpy, INT_PTR(0));
+	add_function_hook("strcpy", &match_memcpy, INT_PTR(0));
+	add_function_hook("strncpy", &match_memcpy, INT_PTR(0));
+	add_function_hook("sprintf", &match_memcpy, INT_PTR(0));
+	add_function_hook("snprintf", &match_memcpy, INT_PTR(0));
+
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+	add_hook(&match_array_assign, ASSIGNMENT_HOOK);
+
+	register_clears_param();
+
+	select_return_states_hook(PARAM_CLEARED, &db_param_cleared);
+	add_split_return_callback(&print_return_value_param);
+
+	if (option_project == PROJ_KERNEL) {
+		add_function_hook("usb_control_msg", &match_usb_control_msg, NULL);
+	}
+
+}
+
--- /dev/null	Fri Dec 21 15:00:28 2018
+++ new/usr/src/tools/smatch/src/smatch_param_compare_limit.c	Fri Dec 21 15:00:28 2018
@@ -0,0 +1,373 @@
+/*
+ * Copyright (C) 2016 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * The point here is to store the relationships between two variables.
+ * Ie:  y > x.
+ * To do that we create a state with the two variables in alphabetical order:
+ * ->name = "x vs y" and the state would be "<".  On the false path the state
+ * would be ">=".
+ *
+ * Part of the trick of it is that if x or y is modified then we need to reset
+ * the state.  We need to keep a list of all the states which depend on x and
+ * all the states which depend on y.  The link_id code handles this.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+static int compare_id;
+static int link_id;
+
+static struct smatch_state *alloc_link_state(struct string_list *links)
+{
+	struct smatch_state *state;
+	static char buf[256];
+	char *tmp;
+	int i;
+
+	state = __alloc_smatch_state(0);
+
+	i = 0;
+	FOR_EACH_PTR(links, tmp) {
+		if (!i++) {
+			snprintf(buf, sizeof(buf), "%s", tmp);
+		} else {
+			append(buf, ", ", sizeof(buf));
+			append(buf, tmp, sizeof(buf));
+		}
+	} END_FOR_EACH_PTR(tmp);
+
+	state->name = alloc_sname(buf);
+	state->data = links;
+	return state;
+}
+
+static struct smatch_state *merge_links(struct smatch_state *s1, struct smatch_state *s2)
+{
+	struct smatch_state *ret;
+	struct string_list *links;
+
+	links = combine_string_lists(s1->data, s2->data);
+	ret = alloc_link_state(links);
+	return ret;
+}
+
+static void save_link_var_sym(const char *var, struct symbol *sym, const char *link)
+{
+	struct smatch_state *old_state, *new_state;
+	struct string_list *links;
+	char *new;
+
+	old_state = get_state(link_id, var, sym);
+	if (old_state)
+		links = clone_str_list(old_state->data);
+	else
+		links = NULL;
+
+	new = alloc_sname(link);
+	insert_string(&links, new);
+
+	new_state = alloc_link_state(links);
+	set_state(link_id, var, sym, new_state);
+}
+
+static void add_comparison_var_sym(const char *left_name,
+		struct var_sym_list *left_vsl,
+		int comparison,
+		const char *right_name, struct var_sym_list *right_vsl)
+{
+	struct smatch_state *state;
+	struct var_sym *vs;
+	char state_name[256];
+
+	if (strcmp(left_name, right_name) > 0) {
+		const char *tmp_name = left_name;
+		struct var_sym_list *tmp_vsl = left_vsl;
+
+		left_name = right_name;
+		left_vsl = right_vsl;
+		right_name = tmp_name;
+		right_vsl = tmp_vsl;
+		comparison = flip_comparison(comparison);
+	}
+	snprintf(state_name, sizeof(state_name), "%s vs %s", left_name, right_name);
+	state = alloc_compare_state(NULL, left_name, left_vsl, comparison, NULL, right_name, right_vsl);
+
+	set_state(compare_id, state_name, NULL, state);
+
+	FOR_EACH_PTR(left_vsl, vs) {
+		save_link_var_sym(vs->var, vs->sym, state_name);
+	} END_FOR_EACH_PTR(vs);
+	FOR_EACH_PTR(right_vsl, vs) {
+		save_link_var_sym(vs->var, vs->sym, state_name);
+	} END_FOR_EACH_PTR(vs);
+}
+
+/*
+ * This is quite a bit more limitted, less ambitious, simpler compared to
+ * smatch_camparison.c.
+ */
+void __compare_param_limit_hook(struct expression *left_expr, struct expression *right_expr,
+				const char *state_name,
+				struct smatch_state *true_state, struct smatch_state *false_state)
+{
+	char *left_name = NULL;
+	char *right_name = NULL;
+	char *tmp_name = NULL;
+	struct symbol *left_sym, *right_sym, *tmp_sym;
+
+	left_name = expr_to_var_sym(left_expr, &left_sym);
+	if (!left_name || !left_sym)
+		goto free;
+	right_name = expr_to_var_sym(right_expr, &right_sym);
+	if (!right_name || !right_sym)
+		goto free;
+
+	if (get_param_num_from_sym(left_sym) < 0 ||
+	    get_param_num_from_sym(right_sym) < 0)
+		return;
+
+	tmp_name = get_other_name_sym(left_name, left_sym, &tmp_sym);
+	if (tmp_name) {
+		free_string(left_name);
+		left_name = tmp_name;
+		left_sym = tmp_sym;
+	}
+
+	tmp_name = get_other_name_sym(right_name, right_sym, &tmp_sym);
+	if (tmp_name) {
+		free_string(right_name);
+		right_name = tmp_name;
+		right_sym = tmp_sym;
+	}
+
+	if (param_was_set_var_sym(left_name, left_sym))
+		return;
+	if (param_was_set_var_sym(right_name, right_sym))
+		return;
+
+	set_true_false_states(compare_id, state_name, NULL, true_state, false_state);
+	save_link_var_sym(left_name, left_sym, state_name);
+	save_link_var_sym(right_name, right_sym, state_name);
+free:
+	free_string(left_name);
+	free_string(right_name);
+}
+
+static void print_return_comparison(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct sm_state *tmp;
+	struct string_list *links;
+	char *link;
+	struct sm_state *sm;
+	struct compare_data *data;
+	struct var_sym *left, *right;
+	int left_param, right_param;
+	static char left_buf[256];
+	static char right_buf[256];
+	static char info_buf[256];
+	const char *tmp_name;
+
+	FOR_EACH_MY_SM(link_id, __get_cur_stree(), tmp) {
+		links = tmp->state->data;
+		FOR_EACH_PTR(links, link) {
+			sm = get_sm_state(compare_id, link, NULL);
+			if (!sm)
+				continue;
+			data = sm->state->data;
+			if (!data || !data->comparison)
+				continue;
+			if (ptr_list_size((struct ptr_list *)data->left_vsl) != 1 ||
+			    ptr_list_size((struct ptr_list *)data->right_vsl) != 1)
+				continue;
+			left = first_ptr_list((struct ptr_list *)data->left_vsl);
+			right = first_ptr_list((struct ptr_list *)data->right_vsl);
+			if (left->sym == right->sym &&
+			    strcmp(left->var, right->var) == 0)
+				continue;
+			/*
+			 * Both parameters link to this comparison so only
+			 * record the first one.
+			 */
+			if (left->sym != tmp->sym ||
+			    strcmp(left->var, tmp->name) != 0)
+				continue;
+
+			left_param = get_param_num_from_sym(left->sym);
+			right_param = get_param_num_from_sym(right->sym);
+			if (left_param < 0 || right_param < 0) /* can't happen hopefully */
+				continue;
+
+			tmp_name = get_param_name_var_sym(left->var, left->sym);
+			if (!tmp_name)
+				continue;
+			snprintf(left_buf, sizeof(left_buf), "%s", tmp_name);
+
+			tmp_name = get_param_name_var_sym(right->var, right->sym);
+			if (!tmp_name || tmp_name[0] != '$')
+				continue;
+			snprintf(right_buf, sizeof(right_buf), "$%d%s", right_param, tmp_name + 1);
+
+			snprintf(info_buf, sizeof(info_buf), "%s %s", show_special(data->comparison), right_buf);
+			sql_insert_return_states(return_id, return_ranges,
+					COMPARE_LIMIT, left_param, left_buf, info_buf);
+		} END_FOR_EACH_PTR(link);
+
+	} END_FOR_EACH_SM(tmp);
+}
+
+static int parse_comparison(char **value, int *op)
+{
+
+	*op = **value;
+
+	switch (*op) {
+	case '<':
+		(*value)++;
+		if (**value == '=') {
+			(*value)++;
+			*op = SPECIAL_LTE;
+		}
+		break;
+	case '=':
+		(*value)++;
+		(*value)++;
+		*op = SPECIAL_EQUAL;
+		break;
+	case '!':
+		(*value)++;
+		(*value)++;
+		*op = SPECIAL_NOTEQUAL;
+		break;
+	case '>':
+		(*value)++;
+		if (**value == '=') {
+			(*value)++;
+			*op = SPECIAL_GTE;
+		}
+		break;
+	default:
+		return 0;
+	}
+
+	if (**value != ' ') {
+		sm_perror("parsing comparison.  %s", *value);
+		return 0;
+	}
+
+	(*value)++;
+	return 1;
+}
+
+static int split_op_param_key(char *value, int *op, int *param, char **key)
+{
+	static char buf[256];
+	char *p;
+
+	if (!parse_comparison(&value, op))
+		return 0;
+
+	snprintf(buf, sizeof(buf), value);
+
+	p = buf;
+	if (*p++ != '$')
+		return 0;
+
+	*param = atoi(p);
+	if (*param < 0 || *param > 99)
+		return 0;
+	p++;
+	if (*param > 9)
+		p++;
+	p--;
+	*p = '$';
+	*key = p;
+
+	return 1;
+}
+
+static void db_return_comparison(struct expression *expr, int left_param, char *key, char *value)
+{
+	struct expression *left_arg, *right_arg;
+	char *left_name = NULL;
+	struct symbol *left_sym;
+	char *right_name = NULL;
+	struct symbol *right_sym;
+	int op;
+	int right_param;
+	char *right_key;
+	struct var_sym_list *left_vsl = NULL, *right_vsl = NULL;
+
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+	if (expr->type != EXPR_CALL)
+		return;
+
+	if (!split_op_param_key(value, &op, &right_param, &right_key))
+		return;
+
+	left_arg = get_argument_from_call_expr(expr->args, left_param);
+	if (!left_arg)
+		return;
+
+	right_arg = get_argument_from_call_expr(expr->args, right_param);
+	if (!right_arg)
+		return;
+
+	left_name = get_variable_from_key(left_arg, key, &left_sym);
+	if (!left_name || !left_sym)
+		goto free;
+	if (get_param_num_from_sym(left_sym) < 0)
+		goto free;
+
+	right_name = get_variable_from_key(right_arg, right_key, &right_sym);
+	if (!right_name || !right_sym)
+		goto free;
+	if (get_param_num_from_sym(right_sym) < 0)
+		goto free;
+
+	add_var_sym(&left_vsl, left_name, left_sym);
+	add_var_sym(&right_vsl, right_name, right_sym);
+
+	add_comparison_var_sym(left_name, left_vsl, op, right_name, right_vsl);
+
+free:
+	free_string(left_name);
+	free_string(right_name);
+}
+
+void register_param_compare_limit(int id)
+{
+	compare_id = id;
+
+	add_merge_hook(compare_id, &merge_compare_states);
+	add_split_return_callback(&print_return_comparison);
+
+	select_return_states_hook(COMPARE_LIMIT, &db_return_comparison);
+}
+
+void register_param_compare_limit_links(int id)
+{
+	link_id = id;
+
+	add_merge_hook(link_id, &merge_links);
+
+}
+
--- /dev/null	Fri Dec 21 15:00:28 2018
+++ new/usr/src/tools/smatch/src/smatch_param_filter.c	Fri Dec 21 15:00:28 2018
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This is for functions like:
+ *
+ * void foo(int *x)
+ * {
+ * 	if (*x == 42)
+ *		*x = 0;
+ * }
+ *
+ * The final value of *x depends on the input to the function but with *x == 42
+ * filtered out.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+static struct stree *start_states;
+static struct stree_stack *saved_stack;
+static void save_start_states(struct statement *stmt)
+{
+	start_states = get_all_states_stree(SMATCH_EXTRA);
+}
+
+static void free_start_states(void)
+{
+	free_stree(&start_states);
+}
+
+static void match_save_states(struct expression *expr)
+{
+	push_stree(&saved_stack, start_states);
+	start_states = NULL;
+}
+
+static void match_restore_states(struct expression *expr)
+{
+	free_stree(&start_states);
+	start_states = pop_stree(&saved_stack);
+}
+
+static struct smatch_state *unmatched_state(struct sm_state *sm)
+{
+	struct smatch_state *state;
+
+	if (parent_is_gone_var_sym(sm->name, sm->sym))
+		return alloc_estate_empty();
+
+	state = get_state(SMATCH_EXTRA, sm->name, sm->sym);
+	if (state)
+		return state;
+	return alloc_estate_whole(estate_type(sm->state));
+}
+
+static void pre_merge_hook(struct sm_state *sm)
+{
+	struct smatch_state *extra, *mine;
+	struct range_list *rl;
+
+	if (estate_rl(sm->state))
+		return;
+
+	extra = get_state(SMATCH_EXTRA, sm->name, sm->sym);
+	if (!extra)
+		return;
+	mine = get_state(my_id, sm->name, sm->sym);
+
+	rl = rl_intersection(estate_rl(extra), estate_rl(mine));
+	if (rl_equiv(rl, estate_rl(mine)))
+		return;
+	set_state(my_id, sm->name, sm->sym, alloc_estate_rl(clone_rl(rl)));
+}
+
+static void extra_mod_hook(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state)
+{
+	int param;
+
+	if (__in_fake_assign)
+		return;
+
+	param = get_param_num_from_sym(sym);
+	if (param < 0)
+		return;
+
+	/* on stack parameters are handled in smatch_param_limit.c */
+	if (sym->ident && strcmp(sym->ident->name, name) == 0)
+		return;
+
+	set_state(my_id, name, sym, alloc_estate_empty());
+}
+
+/*
+ * This relies on the fact that these states are stored so that
+ * foo->bar is before foo->bar->baz.
+ */
+static int parent_set(struct string_list *list, const char *name)
+{
+	char *tmp;
+	int len;
+	int ret;
+
+	FOR_EACH_PTR(list, tmp) {
+		len = strlen(tmp);
+		ret = strncmp(tmp, name, len);
+		if (ret < 0)
+			continue;
+		if (ret > 0)
+			return 0;
+		if (name[len] == '-')
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+
+	return 0;
+}
+
+static void print_one_mod_param(int return_id, char *return_ranges,
+			int param, struct sm_state *sm, struct string_list **totally_filtered)
+{
+	const char *param_name;
+
+	param_name = get_param_name(sm);
+	if (!param_name)
+		return;
+	if (is_whole_rl(estate_rl(sm->state)))
+		return;
+	if (!estate_rl(sm->state)) {
+		insert_string(totally_filtered, (char *)sm->name);
+		return;
+	}
+
+	sql_insert_return_states(return_id, return_ranges, PARAM_FILTER, param,
+			param_name, show_rl(estate_rl(sm->state)));
+}
+
+static void print_return_value_param(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct sm_state *tmp;
+	struct sm_state *sm;
+	struct string_list *totally_filtered = NULL;
+	int param;
+
+	FOR_EACH_MY_SM(SMATCH_EXTRA, __get_cur_stree(), tmp) {
+		param = get_param_num_from_sym(tmp->sym);
+		if (param < 0)
+			continue;
+
+		/* on stack parameters are handled in smatch_param_limit.c */
+		if (tmp->sym->ident && strcmp(tmp->sym->ident->name, tmp->name) == 0)
+			continue;
+
+		if (parent_set(totally_filtered, tmp->name))
+			continue;
+
+		sm = get_sm_state(my_id, tmp->name, tmp->sym);
+		if (sm)
+			print_one_mod_param(return_id, return_ranges, param, sm, &totally_filtered);
+	} END_FOR_EACH_SM(tmp);
+
+	free_ptr_list((struct ptr_list **)&totally_filtered);
+}
+
+int param_has_filter_data(struct sm_state *sm)
+{
+	struct smatch_state *state;
+
+	state = get_state(my_id, sm->name, sm->sym);
+	if (!state) {
+		if (get_assigned_expr_name_sym(sm->name, sm->sym))
+			return 0;
+		return 1;
+	}
+	if (estate_rl(state))
+		return 1;
+	return 0;
+}
+
+void register_param_filter(int id)
+{
+	my_id = id;
+
+	add_hook(&save_start_states, AFTER_DEF_HOOK);
+	add_hook(&free_start_states, AFTER_FUNC_HOOK);
+
+	add_extra_mod_hook(&extra_mod_hook);
+	add_unmatched_state_hook(my_id, &unmatched_state);
+	add_pre_merge_hook(my_id, &pre_merge_hook);
+	add_merge_hook(my_id, &merge_estates);
+
+	add_hook(&match_save_states, INLINE_FN_START);
+	add_hook(&match_restore_states, INLINE_FN_END);
+
+	add_split_return_callback(&print_return_value_param);
+}
+
--- /dev/null	Fri Dec 21 15:00:28 2018
+++ new/usr/src/tools/smatch/src/smatch_param_limit.c	Fri Dec 21 15:00:28 2018
@@ -0,0 +1,208 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This is almost the same as smatch_param_filter.c.  The difference is that
+ * this only deals with values passed on the stack and param filter only deals
+ * with values changed so that the caller sees the new value.  It other words
+ * the key for these should always be "$" and the key for param_filter should
+ * never be "$".  Also smatch_param_set() should never use "$" as the key.
+ * Param set should work together with param_filter to determine the value that
+ * the caller sees at the end.
+ *
+ * This is for functions like this:
+ *
+ * int foo(int a)
+ * {
+ *        if (a >= 0 && a < 10) {
+ *                 a = 42;
+ *                 return 1;
+ *        }
+ *        return 0;
+ * }
+ *
+ * If we pass in 5, it returns 1.
+ *
+ * It's a bit complicated because we can't just consider the final value, we
+ * have to always consider the passed in value.
+ *
+ */
+
+#include "scope.h"
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+static struct stree *start_states;
+static struct stree_stack *saved_stack;
+
+static void save_start_states(struct statement *stmt)
+{
+	start_states = get_all_states_stree(SMATCH_EXTRA);
+}
+
+static void free_start_states(void)
+{
+	free_stree(&start_states);
+}
+
+static struct smatch_state *unmatched_state(struct sm_state *sm)
+{
+	struct smatch_state *state;
+
+	state = get_state(SMATCH_EXTRA, sm->name, sm->sym);
+	if (state)
+		return state;
+	return alloc_estate_whole(estate_type(sm->state));
+}
+
+struct smatch_state *get_orig_estate(const char *name, struct symbol *sym)
+{
+	struct smatch_state *state;
+
+	state = get_state(my_id, name, sym);
+	if (state)
+		return state;
+
+	state = get_state(SMATCH_EXTRA, name, sym);
+	if (state)
+		return state;
+	return alloc_estate_rl(alloc_whole_rl(get_real_base_type(sym)));
+}
+
+struct smatch_state *get_orig_estate_type(const char *name, struct symbol *sym, struct symbol *type)
+{
+	struct smatch_state *state;
+
+	state = get_state(my_id, name, sym);
+	if (state)
+		return state;
+
+	state = get_state(SMATCH_EXTRA, name, sym);
+	if (state)
+		return state;
+	return alloc_estate_rl(alloc_whole_rl(type));
+}
+
+static struct range_list *generify_mtag_range(struct smatch_state *state)
+{
+	struct range_list *rl;
+	struct data_range *drange;
+
+	if (!estate_type(state) || estate_type(state)->type != SYM_PTR)
+		return estate_rl(state);
+
+	/*
+	 * The problem is that we get too specific on our param limits when we
+	 * know exactly what pointers are passed to a function.  It gets to the
+	 * point where we say "pointer x will succeed, but everything else will
+	 * fail."  And then we introduce a new caller which passes a different
+	 * pointer and it's like, "Sorry bro, that's not possible."
+	 *
+	 */
+	rl = rl_intersection(estate_rl(state), valid_ptr_rl);
+	if (!rl)
+		return estate_rl(state);
+
+	FOR_EACH_PTR(rl, drange) {
+		if (drange->min.value != drange->max.value)
+			continue;
+		if (drange->min.value > -4096 && drange->min.value <= 0)
+			continue;
+		return rl_union(valid_ptr_rl, rl);
+	} END_FOR_EACH_PTR(drange);
+
+	return estate_rl(state);
+}
+
+static void print_return_value_param(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct smatch_state *state, *old;
+	struct sm_state *tmp;
+	struct range_list *rl;
+	const char *param_name;
+	int param;
+
+	FOR_EACH_MY_SM(SMATCH_EXTRA, __get_cur_stree(), tmp) {
+		param = get_param_num_from_sym(tmp->sym);
+		if (param < 0)
+			continue;
+
+		param_name = get_param_name(tmp);
+		if (!param_name)
+			continue;
+
+		state = __get_state(my_id, tmp->name, tmp->sym);
+		if (!state)
+			state = tmp->state;
+
+		if (estate_is_whole(state) || estate_is_empty(state))
+			continue;
+		old = get_state_stree(start_states, SMATCH_EXTRA, tmp->name, tmp->sym);
+		if (old && rl_equiv(estate_rl(old), estate_rl(state)))
+			continue;
+
+		rl = generify_mtag_range(state);
+		sql_insert_return_states(return_id, return_ranges, PARAM_LIMIT,
+					 param, param_name, show_rl(rl));
+	} END_FOR_EACH_SM(tmp);
+}
+
+static void extra_mod_hook(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state)
+{
+	struct smatch_state *orig_vals;
+	int param;
+
+	param = get_param_num_from_sym(sym);
+	if (param < 0)
+		return;
+
+	orig_vals = get_orig_estate_type(name, sym, estate_type(state));
+	set_state(my_id, name, sym, orig_vals);
+}
+
+static void match_save_states(struct expression *expr)
+{
+	push_stree(&saved_stack, start_states);
+	start_states = NULL;
+}
+
+static void match_restore_states(struct expression *expr)
+{
+	free_stree(&start_states);
+	start_states = pop_stree(&saved_stack);
+}
+
+void register_param_limit(int id)
+{
+	my_id = id;
+
+	add_hook(&save_start_states, AFTER_DEF_HOOK);
+	add_hook(&free_start_states, AFTER_FUNC_HOOK);
+
+	add_extra_mod_hook(&extra_mod_hook);
+	add_unmatched_state_hook(my_id, &unmatched_state);
+	add_merge_hook(my_id, &merge_estates);
+
+	add_hook(&match_save_states, INLINE_FN_START);
+	add_hook(&match_restore_states, INLINE_FN_END);
+
+	add_split_return_callback(&print_return_value_param);
+}
+
--- /dev/null	Fri Dec 21 15:00:28 2018
+++ new/usr/src/tools/smatch/src/smatch_param_set.c	Fri Dec 21 15:00:28 2018
@@ -0,0 +1,269 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This is for functions like:
+ *
+ * int foo(int *x)
+ * {
+ * 	if (*x == 42) {
+ *		*x = 0;
+ *		return 1;
+ *	}
+ * 	return 0;
+ * }
+ *
+ * If we return 1 that means the value of *x has been set to 0.  If we return
+ * 0 then we have left *x alone.
+ *
+ */
+
+#include "scope.h"
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+static struct smatch_state *unmatched_state(struct sm_state *sm)
+{
+	return alloc_estate_empty();
+}
+
+static int parent_is_set(const char *name, struct symbol *sym, struct smatch_state *state)
+{
+	struct expression *faked;
+	char *left_name;
+	int ret = 0;
+	int len;
+
+	if (!__in_fake_assign)
+		return 0;
+	if (!is_whole_rl(estate_rl(state)))
+		return 0;
+	if (get_state(my_id, name, sym))
+		return 0;
+
+	faked = get_faked_expression();
+	if (!faked)
+		return 0;
+	if ((faked->type == EXPR_PREOP || faked->type == EXPR_POSTOP) &&
+	    (faked->op == SPECIAL_INCREMENT || faked->op == SPECIAL_DECREMENT)) {
+		faked = strip_expr(faked->unop);
+		if (faked->type == EXPR_SYMBOL)
+			return 1;
+		return 0;
+	}
+	if (faked->type != EXPR_ASSIGNMENT)
+		return 0;
+
+	left_name = expr_to_var(faked->left);
+	if (!left_name)
+		return 0;
+
+	len = strlen(left_name);
+	if (strncmp(name, left_name, len) == 0 && name[len] == '-')
+		ret = 1;
+	free_string(left_name);
+
+	return ret;
+}
+
+static void extra_mod_hook(const char *name, struct symbol *sym, struct expression *expr, struct smatch_state *state)
+{
+	if (parent_is_set(name, sym, state))
+		return;
+	if (get_param_num_from_sym(sym) < 0)
+		return;
+	set_state(my_id, name, sym, state);
+}
+
+/*
+ * This function is is a dirty hack because extra_mod_hook is giving us a NULL
+ *  sym instead of a vsl.
+ */
+static void match_array_assignment(struct expression *expr)
+{
+	struct expression *array, *offset;
+	char *name;
+	struct symbol *sym;
+	struct range_list *rl;
+	sval_t sval;
+	char buf[256];
+
+	if (__in_fake_assign)
+		return;
+
+	if (!is_array(expr->left))
+		return;
+	array = get_array_base(expr->left);
+	offset = get_array_offset(expr->left);
+
+	/* These are handled by extra_mod_hook() */
+	if (get_value(offset, &sval))
+		return;
+	name = expr_to_var_sym(array, &sym);
+	if (!name || !sym)
+		goto free;
+	if (get_param_num_from_sym(sym) < 0)
+		goto free;
+	get_absolute_rl(expr->right, &rl);
+	rl = cast_rl(get_type(expr->left), rl);
+
+	snprintf(buf, sizeof(buf), "*%s", name);
+	set_state(my_id, buf, sym, alloc_estate_rl(rl));
+free:
+	free_string(name);
+}
+
+/*
+ * This relies on the fact that these states are stored so that
+ * foo->bar is before foo->bar->baz.
+ */
+static int parent_set(struct string_list *list, const char *name)
+{
+	char *tmp;
+	int len;
+	int ret;
+
+	FOR_EACH_PTR(list, tmp) {
+		len = strlen(tmp);
+		ret = strncmp(tmp, name, len);
+		if (ret < 0)
+			continue;
+		if (ret > 0)
+			return 0;
+		if (name[len] == '-')
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+
+	return 0;
+}
+
+static void print_return_value_param(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct sm_state *sm;
+	struct smatch_state *extra;
+	int param;
+	struct range_list *rl;
+	const char *param_name;
+	struct string_list *set_list = NULL;
+	char *math_str;
+	char buf[256];
+	sval_t sval;
+
+	FOR_EACH_MY_SM(my_id, __get_cur_stree(), sm) {
+		if (!estate_rl(sm->state))
+			continue;
+		extra = get_state(SMATCH_EXTRA, sm->name, sm->sym);
+		if (extra) {
+			rl = rl_intersection(estate_rl(sm->state), estate_rl(extra));
+			if (!rl)
+				continue;
+		} else {
+			rl = estate_rl(sm->state);
+		}
+
+		param = get_param_num_from_sym(sm->sym);
+		if (param < 0)
+			continue;
+		param_name = get_param_name(sm);
+		if (!param_name)
+			continue;
+		if (strcmp(param_name, "$") == 0) {
+			insert_string(&set_list, (char *)sm->name);
+			continue;
+		}
+
+		if (rl_to_sval(rl, &sval)) {
+			insert_string(&set_list, (char *)sm->name);
+			sql_insert_return_states(return_id, return_ranges,
+					param_has_filter_data(sm) ? PARAM_ADD : PARAM_SET,
+					param, param_name, show_rl(rl));
+			continue;
+		}
+
+		math_str = get_value_in_terms_of_parameter_math_var_sym(sm->name, sm->sym);
+		if (math_str) {
+			snprintf(buf, sizeof(buf), "%s[%s]", show_rl(rl), math_str);
+			insert_string(&set_list, (char *)sm->name);
+			sql_insert_return_states(return_id, return_ranges,
+					param_has_filter_data(sm) ? PARAM_ADD : PARAM_SET,
+					param, param_name, buf);
+			continue;
+		}
+
+		/* no useful information here. */
+		if (is_whole_rl(rl) && parent_set(set_list, sm->name))
+			continue;
+		insert_string(&set_list, (char *)sm->name);
+
+		sql_insert_return_states(return_id, return_ranges,
+					 param_has_filter_data(sm) ? PARAM_ADD : PARAM_SET,
+					 param, param_name, show_rl(rl));
+
+	} END_FOR_EACH_SM(sm);
+
+	free_ptr_list((struct ptr_list **)&set_list);
+}
+
+int param_was_set_var_sym(const char *name, struct symbol *sym)
+{
+	struct sm_state *sm;
+	int len;
+
+	FOR_EACH_MY_SM(my_id, __get_cur_stree(), sm) {
+		if (sm->sym != sym)
+			continue;
+		len = strlen(sm->name);
+		if (strncmp(sm->name, name, len) != 0)
+			continue;
+		if (name[len] == '\0' ||
+		    name[len] == '-')
+			return 1;
+	} END_FOR_EACH_SM(sm);
+
+	return 0;
+}
+
+int param_was_set(struct expression *expr)
+{
+	char *name;
+	struct symbol *sym;
+	int ret = 0;
+
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+
+	ret = param_was_set_var_sym(name, sym);
+free:
+	free_string(name);
+	return ret;
+}
+
+void register_param_set(int id)
+{
+	my_id = id;
+
+	add_extra_mod_hook(&extra_mod_hook);
+	add_hook(match_array_assignment, ASSIGNMENT_HOOK);
+	add_unmatched_state_hook(my_id, &unmatched_state);
+	add_merge_hook(my_id, &merge_estates);
+	add_split_return_callback(&print_return_value_param);
+}
+
--- /dev/null	Fri Dec 21 15:00:28 2018
+++ new/usr/src/tools/smatch/src/smatch_param_to_mtag_data.c	Fri Dec 21 15:00:28 2018
@@ -0,0 +1,237 @@
+/*
+ * Copyright (C) 2017 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Take a look at request_threaded_irq().  It takes thread_fn and dev_id.  Then
+ * it does:
+ *
+ *	action = kzalloc(sizeof(struct irqaction), GFP_KERNEL);
+ *	action->thread_fn = thread_fn;
+ *	action->dev_id = dev_id;
+ *
+ * It doesn't ever pass action back to the higher levels, but instead registers
+ * it with the lower levels.
+ *
+ * The kzalloc() allocation creates a new mtag.  We don't know at this point
+ * what "thread_fn" and "dev_id" are because they come from many different
+ * sources.
+ *
+ * So what we do is we pass the information back to the callers that thread_fn
+ * and dev_id are stored as a specific mtag data.  Then when the callers *do*
+ * know what values are passed they create an mtag_alias.  An mtag_alias is a
+ * many to one relationship.  Then they store that in mtag_data using the
+ * mtag_alias.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+struct tag_assign_info {
+	mtag_t tag;
+	int offset;
+};
+ALLOCATOR(tag_assign_info, "tag name offset");
+
+static struct smatch_state *alloc_tag_data_state(mtag_t tag, char *name, int offset)
+{
+	struct smatch_state *state;
+	struct tag_assign_info *data;
+
+	data = __alloc_tag_assign_info(0);
+	data->tag = tag;
+	data->offset = offset;
+
+	state = __alloc_smatch_state(0);
+	state->name = alloc_sname(name);
+	state->data = data;
+	return state;
+}
+
+struct smatch_state *merge_tag_info(struct smatch_state *s1, struct smatch_state *s2)
+{
+	/* Basically ignore undefined states */
+	if (s1 == &undefined)
+		return s2;
+	if (s2 == &undefined)
+		return s1;
+
+	return &merged;
+}
+
+static void match_assign(struct expression *expr)
+{
+	struct expression *left;
+	struct symbol *right_sym;
+	char *name;
+	mtag_t tag;
+	int offset;
+	int param;
+
+	if (expr->op != '=')
+		return;
+	left = strip_expr(expr->left);
+	right_sym = expr_to_sym(expr->right);
+	if (!right_sym)
+		return;
+
+	param = get_param_num_from_sym(right_sym);
+	if (param < 0)
+		return;
+	// FIXME:  modify param_has_filter_data() to take a name/sym
+	if (!expr_to_mtag_offset(left, &tag, &offset))
+		return;
+	name = expr_to_str(left);
+	if (!name)
+		return;
+	set_state_expr(my_id, expr->right, alloc_tag_data_state(tag, name, offset));
+	free_string(name);
+}
+
+#if 0
+static void save_mtag_to_map(struct expression *expr, mtag_t tag, int offset, int param, char *key, char *value)
+{
+	struct expression *arg, *gen_expr;
+	mtag_t arg_tag;
+
+	arg = get_argument_from_call_expr(expr->args, param);
+	if (!arg)
+		return;
+
+	gen_expr = gen_expression_from_key(arg, key);
+	if (!gen_expr)
+		return;
+
+	if (!get_mtag(gen_expr, &arg_tag))
+		arg_tag = 0;
+
+	if (local_debug)
+		sm_msg("finding mtag for '%s' %lld", expr_to_str(gen_expr), arg_tag);
+}
+#endif
+
+static void propogate_assignment(struct expression *expr, mtag_t tag, int offset, int param, char *key)
+{
+	struct expression *arg;
+	int orig_param;
+	char buf[32];
+	char *name;
+	struct symbol *sym;
+
+	arg = get_argument_from_call_expr(expr->args, param);
+	if (!arg)
+		return;
+	name = get_variable_from_key(arg, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	orig_param = get_param_num_from_sym(sym);
+	if (orig_param < 0)
+		goto free;
+
+	snprintf(buf, sizeof(buf), "$->[%d]", offset);
+	set_state(my_id, name, sym, alloc_tag_data_state(tag, buf, offset));
+free:
+	free_string(name);
+}
+
+static void assign_to_alias(struct expression *expr, int param, mtag_t tag, int offset, char *key)
+{
+	struct expression *arg, *gen_expr;
+	struct range_list *rl;
+	mtag_t arg_tag;
+	mtag_t alias;
+
+	arg = get_argument_from_call_expr(expr->args, param);
+	if (!arg)
+		return;
+
+	gen_expr = gen_expression_from_key(arg, key);
+	if (!gen_expr)
+		return;
+
+	get_absolute_rl(gen_expr, &rl);
+
+	if (!create_mtag_alias(tag, expr, &alias))
+		return;
+
+//	insert_mtag_data(alias, offset, rl);
+
+	if (get_mtag(gen_expr, &arg_tag))
+		sql_insert_mtag_map(arg_tag, -offset, alias);
+}
+
+static void call_does_mtag_assign(struct expression *expr, int param, char *key, char *value)
+{
+	char *p;
+	mtag_t tag;
+	int offset;
+
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+	if (expr->type != EXPR_CALL)
+		return;
+
+	tag = strtoul(value, NULL, 10);
+	p = strchr(value, '+');
+	if (!p)
+		return;
+	offset = atoi(p + 1);
+
+//	save_mtag_to_map(expr, tag, offset, param, key, value);
+	propogate_assignment(expr, tag, offset, param, key);
+	assign_to_alias(expr, param, tag, offset, key);
+}
+
+static void print_stored_to_mtag(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct sm_state *sm;
+	struct tag_assign_info *data;
+	char buf[256];
+	const char *param_name;
+	int param;
+
+	FOR_EACH_MY_SM(my_id, __get_cur_stree(), sm) {
+		if (!sm->state->data)
+			continue;
+
+		param = get_param_num_from_sym(sm->sym);
+		if (param < 0)
+			continue;
+		param_name = get_param_name(sm);
+		if (!param_name)
+			continue;
+
+		data = sm->state->data;
+		snprintf(buf, sizeof(buf), "%lld+%d", data->tag, data->offset);
+		sql_insert_return_states(return_id, return_ranges, MTAG_ASSIGN, param, param_name, buf);
+	} END_FOR_EACH_SM(sm);
+}
+
+void register_param_to_mtag_data(int id)
+{
+	my_id = id;
+
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+	select_return_states_hook(MTAG_ASSIGN, &call_does_mtag_assign);
+	add_merge_hook(my_id, &merge_tag_info);
+	add_split_return_callback(&print_stored_to_mtag);
+}
+
--- /dev/null	Fri Dec 21 15:00:28 2018
+++ new/usr/src/tools/smatch/src/smatch_param_used.c	Fri Dec 21 15:00:28 2018
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2015 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+static struct stree *used_stree;
+static struct stree_stack *saved_stack;
+
+STATE(used);
+
+static void get_state_hook(int owner, const char *name, struct symbol *sym)
+{
+	int arg;
+
+	if (!option_info)
+		return;
+	if (__in_fake_assign)
+		return;
+
+	arg = get_param_num_from_sym(sym);
+	if (arg >= 0)
+		set_state_stree(&used_stree, my_id, name, sym, &used);
+}
+
+static void set_param_used(struct expression *call, struct expression *arg, char *key, char *unused)
+{
+	struct symbol *sym;
+	char *name;
+	int arg_nr;
+
+	name = get_variable_from_key(arg, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	arg_nr = get_param_num_from_sym(sym);
+	if (arg_nr >= 0)
+		set_state(my_id, name, sym, &used);
+free:
+	free_string(name);
+}
+
+static void process_states(void)
+{
+	struct sm_state *tmp;
+	int arg;
+	const char *name;
+
+	FOR_EACH_SM(used_stree, tmp) {
+		arg = get_param_num_from_sym(tmp->sym);
+		if (arg < 0)
+			continue;
+		name = get_param_name(tmp);
+		if (!name)
+			continue;
+
+		sql_insert_return_implies(PARAM_USED, arg, name, "");
+	} END_FOR_EACH_SM(tmp);
+
+	free_stree(&used_stree);
+}
+
+static void match_function_def(struct symbol *sym)
+{
+	free_stree(&used_stree);
+}
+
+static void match_save_states(struct expression *expr)
+{
+	push_stree(&saved_stack, used_stree);
+	used_stree = NULL;
+}
+
+static void match_restore_states(struct expression *expr)
+{
+	free_stree(&used_stree);
+	used_stree = pop_stree(&saved_stack);
+}
+
+void register_param_used(int id)
+{
+	my_id = id;
+
+	add_hook(&match_function_def, FUNC_DEF_HOOK);
+
+	add_get_state_hook(&get_state_hook);
+
+	add_hook(&match_save_states, INLINE_FN_START);
+	add_hook(&match_restore_states, INLINE_FN_END);
+
+	select_return_implies_hook(PARAM_USED, &set_param_used);
+	all_return_states_hook(&process_states);
+}
--- /dev/null	Fri Dec 21 15:00:28 2018
+++ new/usr/src/tools/smatch/src/smatch_parameter_names.c	Fri Dec 21 15:00:28 2018
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2017 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static void match_def(struct symbol *sym)
+{
+	struct symbol *param;
+	int i;
+
+	if (__inline_fn)
+		return;
+
+	i = -1;
+	FOR_EACH_PTR(cur_func_sym->ctype.base_type->arguments, param) {
+		i++;
+		if (!param->ident)
+			continue;
+		sql_insert_parameter_name(i, param->ident->name);
+	} END_FOR_EACH_PTR(param);
+}
+
+void register_parameter_names(int id)
+{
+	if (!option_info)
+		return;
+
+	add_hook(&match_def, FUNC_DEF_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:28 2018
+++ new/usr/src/tools/smatch/src/smatch_parse_call_math.c	Fri Dec 21 15:00:28 2018
@@ -0,0 +1,652 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+struct {
+	const char *func;
+	int param;
+} alloc_functions[] = {
+	{"kmalloc", 0},
+	{"kzalloc", 0},
+	{"__kmalloc", 0},
+	{"vmalloc", 0},
+	{"__vmalloc", 0},
+	{"__vmalloc_node", 0},
+};
+
+static struct range_list_stack *rl_stack;
+static struct string_list *op_list;
+
+static void push_op(char c)
+{
+	char *p;
+
+	p = malloc(1);
+	p[0] = c;
+	add_ptr_list(&op_list, p);
+}
+
+static char pop_op(void)
+{
+	char *p;
+	char c;
+
+	if (!op_list) {
+		sm_perror("%s: no op_list", __func__);
+		return '\0';
+	}
+
+	p = last_ptr_list((struct ptr_list *)op_list);
+
+	delete_ptr_list_last((struct ptr_list **)&op_list);
+	c = p[0];
+	free(p);
+
+	return c;
+}
+
+static int op_precedence(char c)
+{
+	switch (c) {
+	case '+':
+	case '-':
+		return 1;
+	case '*':
+	case '/':
+		return 2;
+	default:
+		return 0;
+	}
+}
+
+static int top_op_precedence(void)
+{
+	char *p;
+
+	if (!op_list)
+		return 0;
+
+	p = last_ptr_list((struct ptr_list *)op_list);
+	return op_precedence(p[0]);
+}
+
+static void rl_pop_until(char c)
+{
+	char op;
+	struct range_list *left, *right;
+	struct range_list *res;
+
+	while (top_op_precedence() && op_precedence(c) <= top_op_precedence()) {
+		op = pop_op();
+		right = pop_rl(&rl_stack);
+		left = pop_rl(&rl_stack);
+		res = rl_binop(left, op, right);
+		if (!res)
+			res = alloc_whole_rl(&llong_ctype);
+		push_rl(&rl_stack, res);
+	}
+}
+
+static void rl_discard_stacks(void)
+{
+	while (op_list)
+		pop_op();
+	while (rl_stack)
+		pop_rl(&rl_stack);
+}
+
+static int read_rl_from_var(struct expression *call, char *p, char **end, struct range_list **rl)
+{
+	struct expression *arg;
+	struct smatch_state *state;
+	long param;
+	char *name;
+	struct symbol *sym;
+	char buf[256];
+	int star;
+
+	p++;
+	param = strtol(p, &p, 10);
+
+	arg = get_argument_from_call_expr(call->args, param);
+	if (!arg)
+		return 0;
+
+	if (*p != '-' && *p != '.') {
+		get_absolute_rl(arg, rl);
+		*end = p;
+		return 1;
+	}
+
+	*end = strchr(p, ' ');
+
+	if (arg->type == EXPR_PREOP && arg->op == '&') {
+		arg = strip_expr(arg->unop);
+		star = 0;
+		p++;
+	} else {
+		star = 1;
+		p += 2;
+	}
+
+	name = expr_to_var_sym(arg, &sym);
+	if (!name)
+		return 0;
+	snprintf(buf, sizeof(buf), "%s%s", name, star ? "->" : ".");
+	free_string(name);
+
+	if (*end - p + strlen(buf) >= sizeof(buf))
+		return 0;
+	strncat(buf, p, *end - p);
+
+	state = get_state(SMATCH_EXTRA, buf, sym);
+	if (!state)
+		return 0;
+	*rl = estate_rl(state);
+	return 1;
+}
+
+static int read_var_num(struct expression *call, char *p, char **end, struct range_list **rl)
+{
+	sval_t sval;
+
+	while (*p == ' ')
+		p++;
+
+	if (*p == '$')
+		return read_rl_from_var(call, p, end, rl);
+
+	sval.type = &llong_ctype;
+	sval.value = strtoll(p, end, 10);
+	if (*end == p)
+		return 0;
+	*rl = alloc_rl(sval, sval);
+	return 1;
+}
+
+static char *read_op(char *p)
+{
+	while (*p == ' ')
+		p++;
+
+	switch (*p) {
+	case '+':
+	case '-':
+	case '*':
+	case '/':
+		return p;
+	default:
+		return NULL;
+	}
+}
+
+int parse_call_math_rl(struct expression *call, char *math, struct range_list **rl)
+{
+	struct range_list *tmp;
+	char *c;
+
+	/* try to implement shunting yard algorithm. */
+
+	c = (char *)math;
+	while (1) {
+		if (option_debug)
+			sm_msg("parsing %s", c);
+
+		/* read a number and push it onto the number stack */
+		if (!read_var_num(call, c, &c, &tmp))
+			goto fail;
+		push_rl(&rl_stack, tmp);
+
+		if (option_debug)
+			sm_msg("val = %s remaining = %s", show_rl(tmp), c);
+
+		if (!*c)
+			break;
+		if (*c == ']' && *(c + 1) == '\0')
+			break;
+
+		c = read_op(c);
+		if (!c)
+			goto fail;
+
+		if (option_debug)
+			sm_msg("op = %c remaining = %s", *c, c);
+
+		rl_pop_until(*c);
+		push_op(*c);
+		c++;
+	}
+
+	rl_pop_until(0);
+	*rl = pop_rl(&rl_stack);
+	return 1;
+fail:
+	rl_discard_stacks();
+	return 0;
+}
+
+int parse_call_math(struct expression *call, char *math, sval_t *sval)
+{
+	struct range_list *rl;
+
+	if (!parse_call_math_rl(call, math, &rl))
+		return 0;
+	if (!rl_to_sval(rl, sval))
+		return 0;
+	return 1;
+}
+
+static struct smatch_state *alloc_state_sname(char *sname)
+{
+	struct smatch_state *state;
+
+	state = __alloc_smatch_state(0);
+	state->name = sname;
+	state->data = INT_PTR(1);
+	return state;
+}
+
+static int get_arg_number(struct expression *expr)
+{
+	struct symbol *sym;
+	struct symbol *arg;
+	int i;
+
+	expr = strip_expr(expr);
+	if (expr->type != EXPR_SYMBOL)
+		return -1;
+	sym = expr->symbol;
+
+	i = 0;
+	FOR_EACH_PTR(cur_func_sym->ctype.base_type->arguments, arg) {
+		if (arg == sym)
+			return i;
+		i++;
+	} END_FOR_EACH_PTR(arg);
+
+	return -1;
+}
+
+static int format_name_sym_helper(char *buf, int remaining, char *name, struct symbol *sym)
+{
+	int ret = 0;
+	int arg;
+	char *param_name;
+	int name_len;
+
+	if (!name || !sym || !sym->ident)
+		goto free;
+	arg = get_param_num_from_sym(sym);
+	if (arg < 0)
+		goto free;
+	if (param_was_set_var_sym(name, sym))
+		goto free;
+
+	param_name = sym->ident->name;
+	name_len = strlen(param_name);
+
+	if (name[name_len] == '\0')
+		ret = snprintf(buf, remaining, "$%d", arg);
+	else if (name[name_len] == '-')
+		ret = snprintf(buf, remaining, "$%d%s", arg, name + name_len);
+	else
+		goto free;
+
+	remaining -= ret;
+	if (remaining <= 0)
+		ret = 0;
+
+free:
+	free_string(name);
+
+	return ret;
+
+}
+
+static int format_variable_helper(char *buf, int remaining, struct expression *expr)
+{
+	char *name;
+	struct symbol *sym;
+
+	name = expr_to_var_sym(expr, &sym);
+	if (param_was_set_var_sym(name, sym))
+		return 0;
+	return format_name_sym_helper(buf, remaining, name, sym);
+}
+
+static int format_call_to_param_mapping(char *buf, int remaining, struct expression *expr)
+{
+	char *name;
+	struct symbol *sym;
+
+	name = map_call_to_param_name_sym(expr, &sym);
+	if (param_was_set_var_sym(name, sym))
+		return 0;
+	return format_name_sym_helper(buf, remaining, name, sym);
+}
+
+static int format_expr_helper(char *buf, int remaining, struct expression *expr)
+{
+	sval_t sval;
+	int ret;
+	char *cur;
+
+	if (!expr)
+		return 0;
+
+	cur = buf;
+
+	if (expr->type == EXPR_BINOP) {
+		ret = format_expr_helper(cur, remaining, expr->left);
+		if (ret == 0)
+			return 0;
+		remaining -= ret;
+		if (remaining <= 0)
+			return 0;
+		cur += ret;
+
+		ret = snprintf(cur, remaining, " %s ", show_special(expr->op));
+		remaining -= ret;
+		if (remaining <= 0)
+			return 0;
+		cur += ret;
+
+		ret = format_expr_helper(cur, remaining, expr->right);
+		if (ret == 0)
+			return 0;
+		remaining -= ret;
+		if (remaining <= 0)
+			return 0;
+		cur += ret;
+		return cur - buf;
+	}
+
+	if (get_implied_value(expr, &sval)) {
+		ret = snprintf(cur, remaining, "%s", sval_to_str(sval));
+		remaining -= ret;
+		if (remaining <= 0)
+			return 0;
+		return ret;
+	}
+
+	if (expr->type == EXPR_CALL)
+		return format_call_to_param_mapping(cur, remaining, expr);
+
+	return format_variable_helper(cur, remaining, expr);
+}
+
+static char *format_expr(struct expression *expr)
+{
+	char buf[256] = "";
+	int ret;
+
+	ret = format_expr_helper(buf, sizeof(buf), expr);
+	if (ret == 0)
+		return NULL;
+
+	return alloc_sname(buf);
+}
+
+char *get_value_in_terms_of_parameter_math(struct expression *expr)
+{
+	struct expression *tmp;
+	char buf[256] = "";
+	sval_t dummy;
+	int ret;
+
+	tmp = get_assigned_expr(expr);
+	if (tmp)
+		expr = tmp;
+	if (param_was_set(expr))
+		return NULL;
+
+	if (get_implied_value(expr, &dummy))
+		return NULL;
+
+	ret = format_expr_helper(buf, sizeof(buf), expr);
+	if (ret == 0)
+		return NULL;
+
+	return alloc_sname(buf);
+}
+
+char *get_value_in_terms_of_parameter_math_var_sym(const char *name, struct symbol *sym)
+{
+	struct expression *tmp, *expr;
+	char buf[256] = "";
+	int ret;
+	int cnt = 0;
+
+	expr = get_assigned_expr_name_sym(name, sym);
+	if (!expr)
+		return NULL;
+	while ((tmp = get_assigned_expr(expr))) {
+		expr = strip_expr(tmp);
+		if (++cnt > 3)
+			break;
+	}
+
+	ret = format_expr_helper(buf, sizeof(buf), expr);
+	if (ret == 0)
+		return NULL;
+
+	return alloc_sname(buf);
+
+}
+
+static void match_alloc(const char *fn, struct expression *expr, void *_size_arg)
+{
+	int size_arg = PTR_INT(_size_arg);
+	struct expression *right;
+	struct expression *size_expr;
+	char *sname;
+
+	right = strip_expr(expr->right);
+	size_expr = get_argument_from_call_expr(right->args, size_arg);
+
+	sname = format_expr(size_expr);
+	if (!sname)
+		return;
+	set_state_expr(my_id, expr->left, alloc_state_sname(sname));
+}
+
+static char *swap_format(struct expression *call, char *format)
+{
+	char buf[256];
+	sval_t sval;
+	long param;
+	struct expression *arg;
+	char *p;
+	char *out;
+	int ret;
+
+	if (format[0] == '$' && format[2] == '\0') {
+		param = strtol(format + 1, NULL, 10);
+		arg = get_argument_from_call_expr(call->args, param);
+		if (!arg)
+			return NULL;
+		return format_expr(arg);
+	}
+
+	buf[0] = '\0';
+	p = format;
+	out = buf;
+	while (*p) {
+		if (*p == '$') {
+			p++;
+			param = strtol(p, &p, 10);
+			arg = get_argument_from_call_expr(call->args, param);
+			if (!arg)
+				return NULL;
+			param = get_arg_number(arg);
+			if (param >= 0) {
+				ret = snprintf(out, buf + sizeof(buf) - out, "$%ld", param);
+				out += ret;
+				if (out >= buf + sizeof(buf))
+					return NULL;
+			} else if (get_implied_value(arg, &sval)) {
+				ret = snprintf(out, buf + sizeof(buf) - out, "%s", sval_to_str(sval));
+				out += ret;
+				if (out >= buf + sizeof(buf))
+					return NULL;
+			} else {
+				return NULL;
+			}
+		}
+		*out = *p;
+		p++;
+		out++;
+	}
+	if (buf[0] == '\0')
+		return NULL;
+	*out = '\0';
+	return alloc_sname(buf);
+}
+
+static char *buf_size_recipe;
+static int db_buf_size_callback(void *unused, int argc, char **argv, char **azColName)
+{
+	if (argc != 1)
+		return 0;
+
+	if (!buf_size_recipe)
+		buf_size_recipe = alloc_sname(argv[0]);
+	else if (strcmp(buf_size_recipe, argv[0]) != 0)
+		buf_size_recipe = alloc_sname("invalid");
+	return 0;
+}
+
+static char *get_allocation_recipe_from_call(struct expression *expr)
+{
+	struct symbol *sym;
+	static char sql_filter[1024];
+	int i;
+
+	if (is_fake_call(expr))
+		return NULL;
+	expr = strip_expr(expr);
+	if (expr->fn->type != EXPR_SYMBOL)
+		return NULL;
+	sym = expr->fn->symbol;
+	if (!sym)
+		return NULL;
+
+	for (i = 0; i < ARRAY_SIZE(alloc_functions); i++) {
+		if (strcmp(sym->ident->name, alloc_functions[i].func) == 0) {
+			char buf[32];
+
+			snprintf(buf, sizeof(buf), "$%d", alloc_functions[i].param);
+			buf_size_recipe = alloc_sname(buf);
+			return swap_format(expr, buf_size_recipe);
+		}
+	}
+
+	if (sym->ctype.modifiers & MOD_STATIC) {
+		snprintf(sql_filter, 1024, "file = '%s' and function = '%s';",
+			 get_filename(), sym->ident->name);
+	} else {
+		snprintf(sql_filter, 1024, "function = '%s' and static = 0;",
+				sym->ident->name);
+	}
+
+	buf_size_recipe = NULL;
+	run_sql(db_buf_size_callback, NULL,
+		"select value from return_states where type=%d and %s",
+		BUF_SIZE, sql_filter);
+	if (!buf_size_recipe || strcmp(buf_size_recipe, "invalid") == 0)
+		return NULL;
+	return swap_format(expr, buf_size_recipe);
+}
+
+static void match_call_assignment(struct expression *expr)
+{
+	char *sname;
+
+	sname = get_allocation_recipe_from_call(expr->right);
+	if (!sname)
+		return;
+	set_state_expr(my_id, expr->left, alloc_state_sname(sname));
+}
+
+static void match_returns_call(int return_id, char *return_ranges, struct expression *call)
+{
+	char *sname;
+
+	sname = get_allocation_recipe_from_call(call);
+	if (option_debug)
+		sm_msg("sname = %s", sname);
+	if (!sname)
+		return;
+
+	sql_insert_return_states(return_id, return_ranges, BUF_SIZE, -1, "",
+			sname);
+}
+
+static void print_returned_allocations(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct expression *tmp;
+	struct smatch_state *state;
+	struct symbol *sym;
+	char *name;
+	int cnt = 0;
+
+	expr = strip_expr(expr);
+	while ((tmp = get_assigned_expr(expr))) {
+		if (cnt++ > 5)  /* assignments to self cause infinite loops */
+			break;
+		expr = strip_expr(tmp);
+	}
+	if (!expr)
+		return;
+
+	if (expr->type == EXPR_CALL) {
+		match_returns_call(return_id, return_ranges, expr);
+		return;
+	}
+
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+
+	state = get_state(my_id, name, sym);
+	if (!state || !state->data)
+		goto free;
+
+	sql_insert_return_states(return_id, return_ranges, BUF_SIZE, -1, "",
+			state->name);
+free:
+	free_string(name);
+}
+
+void register_parse_call_math(int id)
+{
+	int i;
+
+	my_id = id;
+
+	for (i = 0; i < ARRAY_SIZE(alloc_functions); i++)
+		add_function_assign_hook(alloc_functions[i].func, &match_alloc,
+				         INT_PTR(alloc_functions[i].param));
+	add_hook(&match_call_assignment, CALL_ASSIGNMENT_HOOK);
+	add_split_return_callback(print_returned_allocations);
+}
+
--- /dev/null	Fri Dec 21 15:00:28 2018
+++ new/usr/src/tools/smatch/src/smatch_passes_array_size.c	Fri Dec 21 15:00:28 2018
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2017 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+
+static int find_param_eq(struct expression *expr, int size)
+{
+	struct expression *arg;
+	sval_t val;
+	int i;
+
+	i = -1;
+	FOR_EACH_PTR(expr->args, arg) {
+		i++;
+		if (!get_implied_value(arg, &val))
+			continue;
+		if (val.value == size)
+			return i;
+	} END_FOR_EACH_PTR(arg);
+
+	return -1;
+}
+
+static void match_call(struct expression *expr)
+{
+	struct expression *arg;
+	struct symbol *type;
+	int size, bytes;
+	int i, nr;
+	char buf[16];
+
+
+	i = -1;
+	FOR_EACH_PTR(expr->args, arg) {
+		i++;
+		type = get_type(arg);
+		if (!type || (type->type != SYM_PTR && type->type != SYM_ARRAY))
+			continue;
+		size = get_array_size(arg);
+		if (size > 0) {
+			nr = find_param_eq(expr, size);
+			if (nr >= 0) {
+				snprintf(buf, sizeof(buf), "%d", nr);
+				sql_insert_caller_info(expr, ARRAYSIZE_ARG, i, buf, "");
+				continue;
+			}
+		}
+		bytes = get_array_size_bytes(arg);
+		if (bytes > 0) {
+			nr = find_param_eq(expr, bytes);
+			if (nr >= 0) {
+				snprintf(buf, sizeof(buf), "%d", nr);
+				sql_insert_caller_info(expr, SIZEOF_ARG, i, buf, "");
+				continue;
+			}
+		}
+	} END_FOR_EACH_PTR(arg);
+}
+
+void register_passes_array_size(int id)
+{
+	add_hook(&match_call, FUNCTION_CALL_HOOK);
+}
+
--- /dev/null	Fri Dec 21 15:00:28 2018
+++ new/usr/src/tools/smatch/src/smatch_project.c	Fri Dec 21 15:00:28 2018
@@ -0,0 +1,218 @@
+/*
+ * Copyright (C) 2010 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This file is only for very generic stuff, that is reusable
+ * between projects.  If you need something special create a
+ * check_your_project.c.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_function_hashtable.h"
+
+static DEFINE_HASHTABLE_INSERT(insert_func, char, int);
+static DEFINE_HASHTABLE_SEARCH(search_func, char, int);
+static struct hashtable *skipped_funcs;
+static struct hashtable *silenced_funcs;
+static struct hashtable *no_inline_funcs;
+
+int is_skipped_function(void)
+{
+	char *func;
+
+	func = get_function();
+	if (!func)
+		return 0;
+	if (search_func(skipped_funcs, func))
+		return 1;
+	return 0;
+}
+
+/*
+ * A silenced function will still be processed and potentially appear in info
+ * output, but not regular checks.
+ */
+int is_silenced_function(void)
+{
+	char *func;
+
+	if (is_skipped_function())
+		return 1;
+
+	func = get_function();
+	if (!func)
+		return 0;
+	if (search_func(silenced_funcs, func))
+		return 1;
+	return 0;
+}
+
+int is_no_inline_function(const char *function)
+{
+	if (search_func(no_inline_funcs, (char *)function))
+		return 1;
+	return 0;
+}
+
+static void register_no_return_funcs(void)
+{
+	struct token *token;
+	const char *func;
+	char name[256];
+
+	snprintf(name, 256, "%s.no_return_funcs", option_project_str);
+
+	token = get_tokens_file(name);
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		func = show_ident(token->ident);
+		add_function_hook(func, &__match_nullify_path_hook, NULL);
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+static void register_ignored_macros(void)
+{
+	struct token *token;
+	char *macro;
+	char name[256];
+
+	if (option_project == PROJ_NONE)
+		strcpy(name, "ignored_macros");
+	else
+		snprintf(name, 256, "%s.ignored_macros", option_project_str);
+
+	token = get_tokens_file(name);
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		macro = alloc_string(show_ident(token->ident));
+		add_ptr_list(&__ignored_macros, macro);
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+static void register_skipped_functions(void)
+{
+	struct token *token;
+	char *func;
+	char name[256];
+
+	skipped_funcs = create_function_hashtable(500);
+
+	if (option_project == PROJ_NONE)
+		return;
+
+	snprintf(name, 256, "%s.skipped_functions", option_project_str);
+
+	token = get_tokens_file(name);
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		func = alloc_string(show_ident(token->ident));
+		insert_func(skipped_funcs, func, INT_PTR(1));
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+static void register_silenced_functions(void)
+{
+	struct token *token;
+	char *func;
+	char name[256];
+
+	silenced_funcs = create_function_hashtable(500);
+
+	if (option_project == PROJ_NONE)
+		return;
+
+	snprintf(name, 256, "%s.silenced_functions", option_project_str);
+
+	token = get_tokens_file(name);
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		func = alloc_string(show_ident(token->ident));
+		insert_func(silenced_funcs, func, INT_PTR(1));
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+static void register_no_inline_functions(void)
+{
+	struct token *token;
+	char *func;
+	char name[256];
+
+	no_inline_funcs = create_function_hashtable(500);
+
+	if (option_project == PROJ_NONE)
+		return;
+
+	snprintf(name, 256, "%s.no_inline_functions", option_project_str);
+
+	token = get_tokens_file(name);
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		func = alloc_string(show_ident(token->ident));
+		insert_func(no_inline_funcs, func, INT_PTR(1));
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+void register_project(int id)
+{
+	register_no_return_funcs();
+	register_ignored_macros();
+	register_skipped_functions();
+	register_silenced_functions();
+	register_no_inline_functions();
+}
--- /dev/null	Fri Dec 21 15:00:28 2018
+++ new/usr/src/tools/smatch/src/smatch_ranges.c	Fri Dec 21 15:00:28 2018
@@ -0,0 +1,1844 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "parse.h"
+#include "smatch.h"
+#include "smatch_extra.h"
+#include "smatch_slist.h"
+
+ALLOCATOR(data_info, "smatch extra data");
+ALLOCATOR(data_range, "data range");
+__DO_ALLOCATOR(struct data_range, sizeof(struct data_range), __alignof__(struct data_range),
+			 "permanent ranges", perm_data_range);
+__DECLARE_ALLOCATOR(struct ptr_list, rl_ptrlist);
+
+char *show_rl(struct range_list *list)
+{
+	struct data_range *tmp;
+	char full[512];
+	int i = 0;
+
+	full[0] = '\0';
+	full[sizeof(full) - 1] = '\0';
+	FOR_EACH_PTR(list, tmp) {
+		if (i++)
+			strncat(full, ",", 254 - strlen(full));
+		if (sval_cmp(tmp->min, tmp->max) == 0) {
+			strncat(full, sval_to_str(tmp->min), 254 - strlen(full));
+			continue;
+		}
+		strncat(full, sval_to_str(tmp->min), 254 - strlen(full));
+		strncat(full, "-", 254 - strlen(full));
+		strncat(full, sval_to_str(tmp->max), 254 - strlen(full));
+	} END_FOR_EACH_PTR(tmp);
+	if (strlen(full) == sizeof(full) - 1)
+		full[sizeof(full) - 2] = '+';
+	return alloc_sname(full);
+}
+
+void free_all_rl(void)
+{
+	clear_rl_ptrlist_alloc();
+}
+
+static int sval_too_big(struct symbol *type, sval_t sval)
+{
+	if (type_bits(type) >= 32 &&
+	    type_bits(sval.type) <= type_bits(type))
+		return 0;
+	if (sval.uvalue <= ((1ULL << type_bits(type)) - 1))
+		return 0;
+	if (type_signed(sval.type)) {
+		if (type_unsigned(type)) {
+			unsigned long long neg = ~sval.uvalue;
+			if (neg <= sval_type_max(type).uvalue)
+				return 0;
+		}
+		if (sval.value < sval_type_min(type).value)
+			return 1;
+		if (sval.value > sval_type_max(type).value)
+			return 1;
+		return 0;
+	}
+	if (sval.uvalue > sval_type_max(type).uvalue)
+		return 1;
+	return 0;
+}
+
+static void add_range_t(struct symbol *type, struct range_list **rl, sval_t min, sval_t max)
+{
+	/* If we're just adding a number, cast it and add it */
+	if (sval_cmp(min, max) == 0) {
+		add_range(rl, sval_cast(type, min), sval_cast(type, max));
+		return;
+	}
+
+	/* If the range is within the type range then add it */
+	if (sval_fits(type, min) && sval_fits(type, max)) {
+		add_range(rl, sval_cast(type, min), sval_cast(type, max));
+		return;
+	}
+
+	/*
+	 * If the range we are adding has more bits than the range type then
+	 * add the whole range type.  Eg:
+	 * 0x8000000000000000 - 0xf000000000000000 -> cast to int
+	 * This isn't totally the right thing to do.  We could be more granular.
+	 */
+	if (sval_too_big(type, min) || sval_too_big(type, max)) {
+		add_range(rl, sval_type_min(type), sval_type_max(type));
+		return;
+	}
+
+	/* Cast negative values to high positive values */
+	if (sval_is_negative(min) && type_unsigned(type)) {
+		if (sval_is_positive(max)) {
+			if (sval_too_high(type, max)) {
+				add_range(rl, sval_type_min(type), sval_type_max(type));
+				return;
+			}
+			add_range(rl, sval_type_val(type, 0), sval_cast(type, max));
+			max = sval_type_max(type);
+		} else {
+			max = sval_cast(type, max);
+		}
+		min = sval_cast(type, min);
+		add_range(rl, min, max);
+	}
+
+	/* Cast high positive numbers to negative */
+	if (sval_unsigned(max) && sval_is_negative(sval_cast(type, max))) {
+		if (!sval_is_negative(sval_cast(type, min))) {
+			add_range(rl, sval_cast(type, min), sval_type_max(type));
+			min = sval_type_min(type);
+		} else {
+			min = sval_cast(type, min);
+		}
+		max = sval_cast(type, max);
+		add_range(rl, min, max);
+	}
+
+	add_range(rl, sval_cast(type, min), sval_cast(type, max));
+	return;
+}
+
+static int str_to_comparison_arg_helper(const char *str,
+		struct expression *call, int *comparison,
+		struct expression **arg, char **endp)
+{
+	int param;
+	char *c = (char *)str;
+
+	if (*c != '[')
+		return 0;
+	c++;
+
+	if (*c == '<') {
+		c++;
+		if (*c == '=') {
+			*comparison = SPECIAL_LTE;
+			c++;
+		} else {
+			*comparison = '<';
+		}
+	} else if (*c == '=') {
+		c++;
+		c++;
+		*comparison = SPECIAL_EQUAL;
+	} else if (*c == '>') {
+		c++;
+		if (*c == '=') {
+			*comparison = SPECIAL_GTE;
+			c++;
+		} else {
+			*comparison = '>';
+		}
+	} else if (*c == '!') {
+		c++;
+		c++;
+		*comparison = SPECIAL_NOTEQUAL;
+	} else {
+		return 0;
+	}
+
+	if (*c != '$')
+		return 0;
+	c++;
+
+	param = strtoll(c, &c, 10);
+	if (*c == ']')
+		c++; /* skip the ']' character */
+	if (endp)
+		*endp = (char *)c;
+
+	if (!call)
+		return 0;
+	*arg = get_argument_from_call_expr(call->args, param);
+	if (!*arg)
+		return 0;
+	if (*c == '-' && *(c + 1) == '>') {
+		char buf[256];
+		int n;
+
+		n = snprintf(buf, sizeof(buf), "$%s", c);
+		if (n >= sizeof(buf))
+			return 0;
+		if (buf[n - 1] == ']')
+			buf[n - 1] = '\0';
+		*arg = gen_expression_from_key(*arg, buf);
+		while (*c && *c != ']')
+			c++;
+	}
+	return 1;
+}
+
+int str_to_comparison_arg(const char *str, struct expression *call, int *comparison, struct expression **arg)
+{
+	while (1) {
+		if (!*str)
+			return 0;
+		if (*str == '[')
+			break;
+		str++;
+	}
+	return str_to_comparison_arg_helper(str, call, comparison, arg, NULL);
+}
+
+static int get_val_from_key(int use_max, struct symbol *type, char *c, struct expression *call, char **endp, sval_t *sval)
+{
+	struct expression *arg;
+	int comparison;
+	sval_t ret, tmp;
+
+	if (use_max)
+		ret = sval_type_max(type);
+	else
+		ret = sval_type_min(type);
+
+	if (!str_to_comparison_arg_helper(c, call, &comparison, &arg, endp)) {
+		*sval = ret;
+		return 0;
+	}
+
+	if (use_max && get_implied_max(arg, &tmp)) {
+		ret = tmp;
+		if (comparison == '<') {
+			tmp.value = 1;
+			ret = sval_binop(ret, '-', tmp);
+		}
+	}
+	if (!use_max && get_implied_min(arg, &tmp)) {
+		ret = tmp;
+		if (comparison == '>') {
+			tmp.value = 1;
+			ret = sval_binop(ret, '+', tmp);
+		}
+	}
+
+	*sval = ret;
+	return 1;
+}
+
+static sval_t add_one(sval_t sval)
+{
+	sval.value++;
+	return sval;
+}
+
+static sval_t sub_one(sval_t sval)
+{
+	sval.value--;
+	return sval;
+}
+
+void filter_by_comparison(struct range_list **rl, int comparison, struct range_list *right)
+{
+	struct range_list *left_orig = *rl;
+	struct range_list *right_orig = right;
+	struct range_list *ret_rl = *rl;
+	struct symbol *cast_type;
+	sval_t min, max;
+
+	cast_type = rl_type(left_orig);
+	if (sval_type_max(rl_type(left_orig)).uvalue < sval_type_max(rl_type(right_orig)).uvalue)
+		cast_type = rl_type(right_orig);
+	if (sval_type_max(cast_type).uvalue < INT_MAX)
+		cast_type = &int_ctype;
+
+	min = sval_type_min(cast_type);
+	max = sval_type_max(cast_type);
+	left_orig = cast_rl(cast_type, left_orig);
+	right_orig = cast_rl(cast_type, right_orig);
+
+	switch (comparison) {
+	case '<':
+	case SPECIAL_UNSIGNED_LT:
+		ret_rl = remove_range(left_orig, rl_max(right_orig), max);
+		break;
+	case SPECIAL_LTE:
+	case SPECIAL_UNSIGNED_LTE:
+		if (!sval_is_max(rl_max(right_orig)))
+			ret_rl = remove_range(left_orig, add_one(rl_max(right_orig)), max);
+		break;
+	case SPECIAL_EQUAL:
+		ret_rl = rl_intersection(left_orig, right_orig);
+		break;
+	case SPECIAL_GTE:
+	case SPECIAL_UNSIGNED_GTE:
+		if (!sval_is_min(rl_min(right_orig)))
+			ret_rl = remove_range(left_orig, min, sub_one(rl_min(right_orig)));
+		break;
+	case '>':
+	case SPECIAL_UNSIGNED_GT:
+		ret_rl = remove_range(left_orig, min, rl_min(right_orig));
+		break;
+	case SPECIAL_NOTEQUAL:
+		if (sval_cmp(rl_min(right_orig), rl_max(right_orig)) == 0)
+			ret_rl = remove_range(left_orig, rl_min(right_orig), rl_min(right_orig));
+		break;
+	default:
+		sm_perror("unhandled comparison %s", show_special(comparison));
+		return;
+	}
+
+	*rl = cast_rl(rl_type(*rl), ret_rl);
+}
+
+static struct range_list *filter_by_comparison_call(char *c, struct expression *call, char **endp, struct range_list *start_rl)
+{
+	struct symbol *type;
+	struct expression *arg;
+	struct range_list *casted_start, *right_orig;
+	int comparison;
+
+	if (!str_to_comparison_arg_helper(c, call, &comparison, &arg, endp))
+		return start_rl;
+
+	if (!get_implied_rl(arg, &right_orig))
+		return start_rl;
+
+	type = &int_ctype;
+	if (type_positive_bits(rl_type(start_rl)) > type_positive_bits(type))
+		type = rl_type(start_rl);
+	if (type_positive_bits(rl_type(right_orig)) > type_positive_bits(type))
+		type = rl_type(right_orig);
+
+	casted_start = cast_rl(type, start_rl);
+	right_orig = cast_rl(type, right_orig);
+
+	filter_by_comparison(&casted_start, comparison, right_orig);
+	return cast_rl(rl_type(start_rl), casted_start);
+}
+
+static sval_t parse_val(int use_max, struct expression *call, struct symbol *type, char *c, char **endp)
+{
+	char *start = c;
+	sval_t ret;
+
+	if (!strncmp(start, "max", 3)) {
+		ret = sval_type_max(type);
+		c += 3;
+	} else if (!strncmp(start, "u64max", 6)) {
+		ret = sval_type_val(type, ULLONG_MAX);
+		c += 6;
+	} else if (!strncmp(start, "s64max", 6)) {
+		ret = sval_type_val(type, LLONG_MAX);
+		c += 6;
+	} else if (!strncmp(start, "u32max", 6)) {
+		ret = sval_type_val(type, UINT_MAX);
+		c += 6;
+	} else if (!strncmp(start, "s32max", 6)) {
+		ret = sval_type_val(type, INT_MAX);
+		c += 6;
+	} else if (!strncmp(start, "u16max", 6)) {
+		ret = sval_type_val(type, USHRT_MAX);
+		c += 6;
+	} else if (!strncmp(start, "s16max", 6)) {
+		ret = sval_type_val(type, SHRT_MAX);
+		c += 6;
+	} else if (!strncmp(start, "min", 3)) {
+		ret = sval_type_min(type);
+		c += 3;
+	} else if (!strncmp(start, "s64min", 6)) {
+		ret = sval_type_val(type, LLONG_MIN);
+		c += 6;
+	} else if (!strncmp(start, "s32min", 6)) {
+		ret = sval_type_val(type, INT_MIN);
+		c += 6;
+	} else if (!strncmp(start, "s16min", 6)) {
+		ret = sval_type_val(type, SHRT_MIN);
+		c += 6;
+	} else if (!strncmp(start, "long_min", 8)) {
+		ret = sval_type_val(type, LONG_MIN);
+		c += 8;
+	} else if (!strncmp(start, "long_max", 8)) {
+		ret = sval_type_val(type, LONG_MAX);
+		c += 8;
+	} else if (!strncmp(start, "ulong_max", 9)) {
+		ret = sval_type_val(type, ULONG_MAX);
+		c += 9;
+	} else if (!strncmp(start, "ptr_max", 7)) {
+		ret = sval_type_val(type, valid_ptr_max);
+		c += 7;
+	} else if (start[0] == '[') {
+		/* this parses [==p0] comparisons */
+		get_val_from_key(1, type, start, call, &c, &ret);
+	} else if (type_positive_bits(type) == 64) {
+		ret = sval_type_val(type, strtoull(start, &c, 0));
+	} else {
+		ret = sval_type_val(type, strtoll(start, &c, 0));
+	}
+	*endp = c;
+	return ret;
+}
+
+static char *jump_to_call_math(char *value)
+{
+	char *c = value;
+
+	while (*c && *c != '[')
+		c++;
+
+	if (!*c)
+		return NULL;
+	c++;
+	if (*c == '<' || *c == '=' || *c == '>' || *c == '!')
+		return NULL;
+
+	return c;
+}
+
+static void str_to_rl_helper(struct expression *call, struct symbol *type, char *str, char **endp, struct range_list **rl)
+{
+	struct range_list *rl_tmp = NULL;
+	sval_t min, max;
+	char *c;
+
+	min = sval_type_min(type);
+	max = sval_type_max(type);
+	c = str;
+	while (*c != '\0' && *c != '[') {
+		if (*c == '+') {
+			if (sval_cmp(min, sval_type_min(type)) != 0)
+				min = max;
+			max = sval_type_max(type);
+			add_range_t(type, &rl_tmp, min, max);
+			break;
+		}
+		if (*c == '(')
+			c++;
+		min = parse_val(0, call, type, c, &c);
+		if (!sval_fits(type, min))
+			min = sval_type_min(type);
+		max = min;
+		if (*c == ')')
+			c++;
+		if (*c == '\0' || *c == '[') {
+			add_range_t(type, &rl_tmp, min, min);
+			break;
+		}
+		if (*c == ',') {
+			add_range_t(type, &rl_tmp, min, min);
+			c++;
+			continue;
+		}
+		if (*c == '+') {
+			min = sval_type_max(type);
+			c++;
+		}
+		if (*c != '-') {
+			sm_msg("debug XXX: trouble parsing %s c = %s", str, c);
+			break;
+		}
+		c++;
+		if (*c == '(')
+			c++;
+		max = parse_val(1, call, type, c, &c);
+		if (!sval_fits(type, max))
+			max = sval_type_max(type);
+		if (*c == '+') {
+			max = sval_type_max(type);
+			c++;
+		}
+		add_range_t(type, &rl_tmp, min, max);
+		if (*c == ')')
+			c++;
+		if (*c == ',')
+			c++;
+	}
+
+	*rl = rl_tmp;
+	*endp = c;
+}
+
+static void str_to_dinfo(struct expression *call, struct symbol *type, char *value, struct data_info *dinfo)
+{
+	struct range_list *math_rl;
+	char *call_math;
+	char *c;
+	struct range_list *rl = NULL;
+
+	if (!type)
+		type = &llong_ctype;
+
+	if (strcmp(value, "empty") == 0)
+		return;
+
+	if (strncmp(value, "[==$", 4) == 0) {
+		struct expression *arg;
+		int comparison;
+
+		if (!str_to_comparison_arg(value, call, &comparison, &arg))
+			return;
+		if (!get_implied_rl(arg, &rl))
+			return;
+		goto cast;
+	}
+
+	str_to_rl_helper(call, type, value, &c, &rl);
+	if (*c == '\0')
+		goto cast;
+
+	call_math = jump_to_call_math(value);
+	if (call_math && parse_call_math_rl(call, call_math, &math_rl)) {
+		rl = rl_intersection(rl, math_rl);
+		goto cast;
+	}
+
+	/*
+	 * For now if we already tried to handle the call math and couldn't
+	 * figure it out then bail.
+	 */
+	if (jump_to_call_math(c) == c + 1)
+		goto cast;
+
+	rl = filter_by_comparison_call(c, call, &c, rl);
+
+cast:
+	rl = cast_rl(type, rl);
+	dinfo->value_ranges = rl;
+}
+
+void str_to_rl(struct symbol *type, char *value, struct range_list **rl)
+{
+	struct data_info dinfo = {};
+
+	str_to_dinfo(NULL, type, value, &dinfo);
+	*rl = dinfo.value_ranges;
+}
+
+void call_results_to_rl(struct expression *expr, struct symbol *type, char *value, struct range_list **rl)
+{
+	struct data_info dinfo = {};
+
+	str_to_dinfo(strip_expr(expr), type, value, &dinfo);
+	*rl = dinfo.value_ranges;
+}
+
+int is_whole_rl(struct range_list *rl)
+{
+	struct data_range *drange;
+
+	if (ptr_list_empty(rl))
+		return 0;
+	drange = first_ptr_list((struct ptr_list *)rl);
+	if (sval_is_min(drange->min) && sval_is_max(drange->max))
+		return 1;
+	return 0;
+}
+
+int is_whole_rl_non_zero(struct range_list *rl)
+{
+	struct data_range *drange;
+
+	if (ptr_list_empty(rl))
+		return 0;
+	drange = first_ptr_list((struct ptr_list *)rl);
+	if (sval_unsigned(drange->min) &&
+	    drange->min.value == 1 &&
+	    sval_is_max(drange->max))
+		return 1;
+	if (!sval_is_min(drange->min) || drange->max.value != -1)
+		return 0;
+	drange = last_ptr_list((struct ptr_list *)rl);
+	if (drange->min.value != 1 || !sval_is_max(drange->max))
+		return 0;
+	return 1;
+}
+
+sval_t rl_min(struct range_list *rl)
+{
+	struct data_range *drange;
+	sval_t ret;
+
+	ret.type = &llong_ctype;
+	ret.value = LLONG_MIN;
+	if (ptr_list_empty(rl))
+		return ret;
+	drange = first_ptr_list((struct ptr_list *)rl);
+	return drange->min;
+}
+
+sval_t rl_max(struct range_list *rl)
+{
+	struct data_range *drange;
+	sval_t ret;
+
+	ret.type = &llong_ctype;
+	ret.value = LLONG_MAX;
+	if (ptr_list_empty(rl))
+		return ret;
+	drange = last_ptr_list((struct ptr_list *)rl);
+	return drange->max;
+}
+
+int rl_to_sval(struct range_list *rl, sval_t *sval)
+{
+	sval_t min, max;
+
+	if (!rl)
+		return 0;
+
+	min = rl_min(rl);
+	max = rl_max(rl);
+	if (sval_cmp(min, max) != 0)
+		return 0;
+	*sval = min;
+	return 1;
+}
+
+struct symbol *rl_type(struct range_list *rl)
+{
+	if (!rl)
+		return NULL;
+	return rl_min(rl).type;
+}
+
+static struct data_range *alloc_range_helper_sval(sval_t min, sval_t max, int perm)
+{
+	struct data_range *ret;
+
+	if (perm)
+		ret = __alloc_perm_data_range(0);
+	else
+		ret = __alloc_data_range(0);
+	ret->min = min;
+	ret->max = max;
+	return ret;
+}
+
+struct data_range *alloc_range(sval_t min, sval_t max)
+{
+	return alloc_range_helper_sval(min, max, 0);
+}
+
+struct data_range *alloc_range_perm(sval_t min, sval_t max)
+{
+	return alloc_range_helper_sval(min, max, 1);
+}
+
+struct range_list *alloc_rl(sval_t min, sval_t max)
+{
+	struct range_list *rl = NULL;
+
+	if (sval_cmp(min, max) > 0)
+		return alloc_whole_rl(min.type);
+
+	add_range(&rl, min, max);
+	return rl;
+}
+
+struct range_list *alloc_whole_rl(struct symbol *type)
+{
+	if (!type || type_positive_bits(type) < 0)
+		type = &llong_ctype;
+	if (type->type == SYM_ARRAY)
+		type = &ptr_ctype;
+
+	return alloc_rl(sval_type_min(type), sval_type_max(type));
+}
+
+extern int rl_ptrlist_hack;
+void add_range(struct range_list **list, sval_t min, sval_t max)
+{
+	struct data_range *tmp;
+	struct data_range *new = NULL;
+	int check_next = 0;
+
+	/*
+	 * There is at least on valid reason why the types might be confusing
+	 * and that's when you have a void pointer and on some paths you treat
+	 * it as a u8 pointer and on other paths you treat it as a u16 pointer.
+	 * This case is hard to deal with.
+	 *
+	 * There are other cases where we probably should be more specific about
+	 * the types than we are.  For example, we end up merging a lot of ulong
+	 * with pointers and I have not figured out why we do that.
+	 *
+	 * But this hack works for both cases, I think.  We cast it to pointers
+	 * or we use the bigger size.
+	 *
+	 */
+	if (*list && rl_type(*list) != min.type) {
+		if (rl_type(*list)->type == SYM_PTR) {
+			min = sval_cast(rl_type(*list), min);
+			max = sval_cast(rl_type(*list), max);
+		} else if (min.type->type == SYM_PTR) {
+			*list = cast_rl(min.type, *list);
+		} else if (type_bits(rl_type(*list)) >= type_bits(min.type)) {
+			min = sval_cast(rl_type(*list), min);
+			max = sval_cast(rl_type(*list), max);
+		} else {
+			*list = cast_rl(min.type, *list);
+		}
+	}
+
+	if (sval_cmp(min, max) > 0) {
+		min = sval_type_min(min.type);
+		max = sval_type_max(min.type);
+	}
+
+	/*
+	 * FIXME:  This has a problem merging a range_list like: min-0,3-max
+	 * with a range like 1-2.  You end up with min-2,3-max instead of
+	 * just min-max.
+	 */
+	FOR_EACH_PTR(*list, tmp) {
+		if (check_next) {
+			/* Sometimes we overlap with more than one range
+			   so we have to delete or modify the next range. */
+			if (!sval_is_max(max) && max.value + 1 == tmp->min.value) {
+				/* join 2 ranges here */
+				new->max = tmp->max;
+				DELETE_CURRENT_PTR(tmp);
+				return;
+			}
+
+			/* Doesn't overlap with the next one. */
+			if (sval_cmp(max, tmp->min) < 0)
+				return;
+
+			if (sval_cmp(max, tmp->max) <= 0) {
+				/* Partially overlaps the next one. */
+				new->max = tmp->max;
+				DELETE_CURRENT_PTR(tmp);
+				return;
+			} else {
+				/* Completely overlaps the next one. */
+				DELETE_CURRENT_PTR(tmp);
+				/* there could be more ranges to delete */
+				continue;
+			}
+		}
+		if (!sval_is_max(max) && max.value + 1 == tmp->min.value) {
+			/* join 2 ranges into a big range */
+			new = alloc_range(min, tmp->max);
+			REPLACE_CURRENT_PTR(tmp, new);
+			return;
+		}
+		if (sval_cmp(max, tmp->min) < 0) { /* new range entirely below */
+			new = alloc_range(min, max);
+			INSERT_CURRENT(new, tmp);
+			return;
+		}
+		if (sval_cmp(min, tmp->min) < 0) { /* new range partially below */
+			if (sval_cmp(max, tmp->max) < 0)
+				max = tmp->max;
+			else
+				check_next = 1;
+			new = alloc_range(min, max);
+			REPLACE_CURRENT_PTR(tmp, new);
+			if (!check_next)
+				return;
+			continue;
+		}
+		if (sval_cmp(max, tmp->max) <= 0) /* new range already included */
+			return;
+		if (sval_cmp(min, tmp->max) <= 0) { /* new range partially above */
+			min = tmp->min;
+			new = alloc_range(min, max);
+			REPLACE_CURRENT_PTR(tmp, new);
+			check_next = 1;
+			continue;
+		}
+		if (!sval_is_min(min) && min.value - 1 == tmp->max.value) {
+			/* join 2 ranges into a big range */
+			new = alloc_range(tmp->min, max);
+			REPLACE_CURRENT_PTR(tmp, new);
+			check_next = 1;
+			continue;
+		}
+		/* the new range is entirely above the existing ranges */
+	} END_FOR_EACH_PTR(tmp);
+	if (check_next)
+		return;
+	new = alloc_range(min, max);
+
+	rl_ptrlist_hack = 1;
+	add_ptr_list(list, new);
+	rl_ptrlist_hack = 0;
+}
+
+struct range_list *clone_rl(struct range_list *list)
+{
+	struct data_range *tmp;
+	struct range_list *ret = NULL;
+
+	FOR_EACH_PTR(list, tmp) {
+		add_ptr_list(&ret, tmp);
+	} END_FOR_EACH_PTR(tmp);
+	return ret;
+}
+
+struct range_list *clone_rl_permanent(struct range_list *list)
+{
+	struct data_range *tmp;
+	struct data_range *new;
+	struct range_list *ret = NULL;
+
+	FOR_EACH_PTR(list, tmp) {
+		new = alloc_range_perm(tmp->min, tmp->max);
+		add_ptr_list(&ret, new);
+	} END_FOR_EACH_PTR(tmp);
+	return ret;
+}
+
+struct range_list *rl_union(struct range_list *one, struct range_list *two)
+{
+	struct data_range *tmp;
+	struct range_list *ret = NULL;
+
+	FOR_EACH_PTR(one, tmp) {
+		add_range(&ret, tmp->min, tmp->max);
+	} END_FOR_EACH_PTR(tmp);
+	FOR_EACH_PTR(two, tmp) {
+		add_range(&ret, tmp->min, tmp->max);
+	} END_FOR_EACH_PTR(tmp);
+	return ret;
+}
+
+struct range_list *remove_range(struct range_list *list, sval_t min, sval_t max)
+{
+	struct data_range *tmp;
+	struct range_list *ret = NULL;
+
+	if (!list)
+		return NULL;
+
+	min = sval_cast(rl_type(list), min);
+	max = sval_cast(rl_type(list), max);
+	if (sval_cmp(min, max) > 0) {
+		sval_t tmp = min;
+		min = max;
+		max = tmp;
+	}
+
+	FOR_EACH_PTR(list, tmp) {
+		if (sval_cmp(tmp->max, min) < 0) {
+			add_range(&ret, tmp->min, tmp->max);
+			continue;
+		}
+		if (sval_cmp(tmp->min, max) > 0) {
+			add_range(&ret, tmp->min, tmp->max);
+			continue;
+		}
+		if (sval_cmp(tmp->min, min) >= 0 && sval_cmp(tmp->max, max) <= 0)
+			continue;
+		if (sval_cmp(tmp->min, min) >= 0) {
+			max.value++;
+			add_range(&ret, max, tmp->max);
+		} else if (sval_cmp(tmp->max, max) <= 0) {
+			min.value--;
+			add_range(&ret, tmp->min, min);
+		} else {
+			min.value--;
+			max.value++;
+			add_range(&ret, tmp->min, min);
+			add_range(&ret, max, tmp->max);
+		}
+	} END_FOR_EACH_PTR(tmp);
+	return ret;
+}
+
+int ranges_equiv(struct data_range *one, struct data_range *two)
+{
+	if (!one && !two)
+		return 1;
+	if (!one || !two)
+		return 0;
+	if (sval_cmp(one->min, two->min) != 0)
+		return 0;
+	if (sval_cmp(one->max, two->max) != 0)
+		return 0;
+	return 1;
+}
+
+int rl_equiv(struct range_list *one, struct range_list *two)
+{
+	struct data_range *one_range;
+	struct data_range *two_range;
+
+	if (one == two)
+		return 1;
+
+	PREPARE_PTR_LIST(one, one_range);
+	PREPARE_PTR_LIST(two, two_range);
+	for (;;) {
+		if (!one_range && !two_range)
+			return 1;
+		if (!ranges_equiv(one_range, two_range))
+			return 0;
+		NEXT_PTR_LIST(one_range);
+		NEXT_PTR_LIST(two_range);
+	}
+	FINISH_PTR_LIST(two_range);
+	FINISH_PTR_LIST(one_range);
+
+	return 1;
+}
+
+int true_comparison_range(struct data_range *left, int comparison, struct data_range *right)
+{
+	switch (comparison) {
+	case '<':
+	case SPECIAL_UNSIGNED_LT:
+		if (sval_cmp(left->min, right->max) < 0)
+			return 1;
+		return 0;
+	case SPECIAL_UNSIGNED_LTE:
+	case SPECIAL_LTE:
+		if (sval_cmp(left->min, right->max) <= 0)
+			return 1;
+		return 0;
+	case SPECIAL_EQUAL:
+		if (sval_cmp(left->max, right->min) < 0)
+			return 0;
+		if (sval_cmp(left->min, right->max) > 0)
+			return 0;
+		return 1;
+	case SPECIAL_UNSIGNED_GTE:
+	case SPECIAL_GTE:
+		if (sval_cmp(left->max, right->min) >= 0)
+			return 1;
+		return 0;
+	case '>':
+	case SPECIAL_UNSIGNED_GT:
+		if (sval_cmp(left->max, right->min) > 0)
+			return 1;
+		return 0;
+	case SPECIAL_NOTEQUAL:
+		if (sval_cmp(left->min, left->max) != 0)
+			return 1;
+		if (sval_cmp(right->min, right->max) != 0)
+			return 1;
+		if (sval_cmp(left->min, right->min) != 0)
+			return 1;
+		return 0;
+	default:
+		sm_perror("unhandled comparison %d", comparison);
+		return 0;
+	}
+	return 0;
+}
+
+int true_comparison_range_LR(int comparison, struct data_range *var, struct data_range *val, int left)
+{
+	if (left)
+		return true_comparison_range(var, comparison, val);
+	else
+		return true_comparison_range(val, comparison, var);
+}
+
+static int false_comparison_range_sval(struct data_range *left, int comparison, struct data_range *right)
+{
+	switch (comparison) {
+	case '<':
+	case SPECIAL_UNSIGNED_LT:
+		if (sval_cmp(left->max, right->min) >= 0)
+			return 1;
+		return 0;
+	case SPECIAL_UNSIGNED_LTE:
+	case SPECIAL_LTE:
+		if (sval_cmp(left->max, right->min) > 0)
+			return 1;
+		return 0;
+	case SPECIAL_EQUAL:
+		if (sval_cmp(left->min, left->max) != 0)
+			return 1;
+		if (sval_cmp(right->min, right->max) != 0)
+			return 1;
+		if (sval_cmp(left->min, right->min) != 0)
+			return 1;
+		return 0;
+	case SPECIAL_UNSIGNED_GTE:
+	case SPECIAL_GTE:
+		if (sval_cmp(left->min, right->max) < 0)
+			return 1;
+		return 0;
+	case '>':
+	case SPECIAL_UNSIGNED_GT:
+		if (sval_cmp(left->min, right->max) <= 0)
+			return 1;
+		return 0;
+	case SPECIAL_NOTEQUAL:
+		if (sval_cmp(left->max, right->min) < 0)
+			return 0;
+		if (sval_cmp(left->min, right->max) > 0)
+			return 0;
+		return 1;
+	default:
+		sm_perror("unhandled comparison %d", comparison);
+		return 0;
+	}
+	return 0;
+}
+
+int false_comparison_range_LR(int comparison, struct data_range *var, struct data_range *val, int left)
+{
+	if (left)
+		return false_comparison_range_sval(var, comparison, val);
+	else
+		return false_comparison_range_sval(val, comparison, var);
+}
+
+int possibly_true(struct expression *left, int comparison, struct expression *right)
+{
+	struct range_list *rl_left, *rl_right;
+	struct data_range *tmp_left, *tmp_right;
+	struct symbol *type;
+
+	if (!get_implied_rl(left, &rl_left))
+		return 1;
+	if (!get_implied_rl(right, &rl_right))
+		return 1;
+
+	type = rl_type(rl_left);
+	if (type_positive_bits(type) < type_positive_bits(rl_type(rl_right)))
+		type = rl_type(rl_right);
+	if (type_positive_bits(type) < 31)
+		type = &int_ctype;
+
+	rl_left = cast_rl(type, rl_left);
+	rl_right = cast_rl(type, rl_right);
+
+	FOR_EACH_PTR(rl_left, tmp_left) {
+		FOR_EACH_PTR(rl_right, tmp_right) {
+			if (true_comparison_range(tmp_left, comparison, tmp_right))
+				return 1;
+		} END_FOR_EACH_PTR(tmp_right);
+	} END_FOR_EACH_PTR(tmp_left);
+	return 0;
+}
+
+int possibly_false(struct expression *left, int comparison, struct expression *right)
+{
+	struct range_list *rl_left, *rl_right;
+	struct data_range *tmp_left, *tmp_right;
+	struct symbol *type;
+
+	if (!get_implied_rl(left, &rl_left))
+		return 1;
+	if (!get_implied_rl(right, &rl_right))
+		return 1;
+
+	type = rl_type(rl_left);
+	if (type_positive_bits(type) < type_positive_bits(rl_type(rl_right)))
+		type = rl_type(rl_right);
+	if (type_positive_bits(type) < 31)
+		type = &int_ctype;
+
+	rl_left = cast_rl(type, rl_left);
+	rl_right = cast_rl(type, rl_right);
+
+	FOR_EACH_PTR(rl_left, tmp_left) {
+		FOR_EACH_PTR(rl_right, tmp_right) {
+			if (false_comparison_range_sval(tmp_left, comparison, tmp_right))
+				return 1;
+		} END_FOR_EACH_PTR(tmp_right);
+	} END_FOR_EACH_PTR(tmp_left);
+	return 0;
+}
+
+int possibly_true_rl(struct range_list *left_ranges, int comparison, struct range_list *right_ranges)
+{
+	struct data_range *left_tmp, *right_tmp;
+	struct symbol *type;
+
+	if (!left_ranges || !right_ranges)
+		return 1;
+
+	type = rl_type(left_ranges);
+	if (type_positive_bits(type) < type_positive_bits(rl_type(right_ranges)))
+		type = rl_type(right_ranges);
+	if (type_positive_bits(type) < 31)
+		type = &int_ctype;
+
+	left_ranges = cast_rl(type, left_ranges);
+	right_ranges = cast_rl(type, right_ranges);
+
+	FOR_EACH_PTR(left_ranges, left_tmp) {
+		FOR_EACH_PTR(right_ranges, right_tmp) {
+			if (true_comparison_range(left_tmp, comparison, right_tmp))
+				return 1;
+		} END_FOR_EACH_PTR(right_tmp);
+	} END_FOR_EACH_PTR(left_tmp);
+	return 0;
+}
+
+int possibly_false_rl(struct range_list *left_ranges, int comparison, struct range_list *right_ranges)
+{
+	struct data_range *left_tmp, *right_tmp;
+	struct symbol *type;
+
+	if (!left_ranges || !right_ranges)
+		return 1;
+
+	type = rl_type(left_ranges);
+	if (type_positive_bits(type) < type_positive_bits(rl_type(right_ranges)))
+		type = rl_type(right_ranges);
+	if (type_positive_bits(type) < 31)
+		type = &int_ctype;
+
+	left_ranges = cast_rl(type, left_ranges);
+	right_ranges = cast_rl(type, right_ranges);
+
+	FOR_EACH_PTR(left_ranges, left_tmp) {
+		FOR_EACH_PTR(right_ranges, right_tmp) {
+			if (false_comparison_range_sval(left_tmp, comparison, right_tmp))
+				return 1;
+		} END_FOR_EACH_PTR(right_tmp);
+	} END_FOR_EACH_PTR(left_tmp);
+	return 0;
+}
+
+/* FIXME: the _rl here stands for right left so really it should be _lr */
+int possibly_true_rl_LR(int comparison, struct range_list *a, struct range_list *b, int left)
+{
+	if (left)
+		return possibly_true_rl(a, comparison, b);
+	else
+		return possibly_true_rl(b, comparison, a);
+}
+
+int possibly_false_rl_LR(int comparison, struct range_list *a, struct range_list *b, int left)
+{
+	if (left)
+		return possibly_false_rl(a, comparison, b);
+	else
+		return possibly_false_rl(b, comparison, a);
+}
+
+int rl_has_sval(struct range_list *rl, sval_t sval)
+{
+	struct data_range *tmp;
+
+	FOR_EACH_PTR(rl, tmp) {
+		if (sval_cmp(tmp->min, sval) <= 0 &&
+		    sval_cmp(tmp->max, sval) >= 0)
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+	return 0;
+}
+
+void tack_on(struct range_list **list, struct data_range *drange)
+{
+	add_ptr_list(list, drange);
+}
+
+void push_rl(struct range_list_stack **rl_stack, struct range_list *rl)
+{
+	add_ptr_list(rl_stack, rl);
+}
+
+struct range_list *pop_rl(struct range_list_stack **rl_stack)
+{
+	struct range_list *rl;
+
+	rl = last_ptr_list((struct ptr_list *)*rl_stack);
+	delete_ptr_list_last((struct ptr_list **)rl_stack);
+	return rl;
+}
+
+struct range_list *top_rl(struct range_list_stack *rl_stack)
+{
+	struct range_list *rl;
+
+	rl = last_ptr_list((struct ptr_list *)rl_stack);
+	return rl;
+}
+
+void filter_top_rl(struct range_list_stack **rl_stack, struct range_list *filter)
+{
+	struct range_list *rl;
+
+	rl = pop_rl(rl_stack);
+	rl = rl_filter(rl, filter);
+	push_rl(rl_stack, rl);
+}
+
+struct range_list *rl_truncate_cast(struct symbol *type, struct range_list *rl)
+{
+	struct data_range *tmp;
+	struct range_list *ret = NULL;
+	sval_t min, max;
+
+	if (!rl)
+		return NULL;
+
+	if (!type || type == rl_type(rl))
+		return rl;
+
+	FOR_EACH_PTR(rl, tmp) {
+		min = tmp->min;
+		max = tmp->max;
+		if (type_bits(type) < type_bits(rl_type(rl))) {
+			min.uvalue = tmp->min.uvalue & ((1ULL << type_bits(type)) - 1);
+			max.uvalue = tmp->max.uvalue & ((1ULL << type_bits(type)) - 1);
+		}
+		if (sval_cmp(min, max) > 0) {
+			min = sval_cast(type, min);
+			max = sval_cast(type, max);
+		}
+		add_range_t(type, &ret, min, max);
+	} END_FOR_EACH_PTR(tmp);
+
+	return ret;
+}
+
+static int rl_is_sane(struct range_list *rl)
+{
+	struct data_range *tmp;
+	struct symbol *type;
+
+	type = rl_type(rl);
+	FOR_EACH_PTR(rl, tmp) {
+		if (!sval_fits(type, tmp->min))
+			return 0;
+		if (!sval_fits(type, tmp->max))
+			return 0;
+		if (sval_cmp(tmp->min, tmp->max) > 0)
+			return 0;
+	} END_FOR_EACH_PTR(tmp);
+
+	return 1;
+}
+
+static int rl_type_consistent(struct range_list *rl)
+{
+	struct data_range *tmp;
+	struct symbol *type;
+
+	type = rl_type(rl);
+	FOR_EACH_PTR(rl, tmp) {
+		if (type != tmp->min.type || type != tmp->max.type)
+			return 0;
+	} END_FOR_EACH_PTR(tmp);
+	return 1;
+}
+
+static struct range_list *cast_to_bool(struct range_list *rl)
+{
+	struct data_range *tmp;
+	struct range_list *ret = NULL;
+	int has_one = 0;
+	int has_zero = 0;
+	sval_t min = { .type = &bool_ctype };
+	sval_t max = { .type = &bool_ctype };
+
+	FOR_EACH_PTR(rl, tmp) {
+		if (tmp->min.value || tmp->max.value)
+			has_one = 1;
+		if (sval_is_negative(tmp->min) &&
+		    sval_is_negative(tmp->max))
+			continue;
+		if (tmp->min.value == 0 ||
+		    tmp->max.value == 0)
+			has_zero = 1;
+		if (sval_is_negative(tmp->min) &&
+		    tmp->max.value > 0)
+			has_zero = 1;
+	} END_FOR_EACH_PTR(tmp);
+
+	if (!has_zero)
+		min.value = 1;
+	if (has_one)
+		max.value = 1;
+
+	add_range(&ret, min, max);
+	return ret;
+}
+
+struct range_list *cast_rl(struct symbol *type, struct range_list *rl)
+{
+	struct data_range *tmp;
+	struct range_list *ret = NULL;
+
+	if (!rl)
+		return NULL;
+
+	if (!type)
+		return rl;
+	if (!rl_is_sane(rl))
+		return alloc_whole_rl(type);
+	if (type == rl_type(rl) && rl_type_consistent(rl))
+		return rl;
+
+	if (type == &bool_ctype)
+		return cast_to_bool(rl);
+
+	FOR_EACH_PTR(rl, tmp) {
+		add_range_t(type, &ret, tmp->min, tmp->max);
+	} END_FOR_EACH_PTR(tmp);
+
+	if (!ret)
+		return alloc_whole_rl(type);
+
+	return ret;
+}
+
+struct range_list *rl_invert(struct range_list *orig)
+{
+	struct range_list *ret = NULL;
+	struct data_range *tmp;
+	sval_t gap_min, abs_max, sval;
+
+	if (!orig)
+		return NULL;
+	if (type_bits(rl_type(orig)) < 0)  /* void type mostly */
+		return NULL;
+
+	gap_min = sval_type_min(rl_min(orig).type);
+	abs_max = sval_type_max(rl_max(orig).type);
+
+	FOR_EACH_PTR(orig, tmp) {
+		if (sval_cmp(tmp->min, gap_min) > 0) {
+			sval = sval_type_val(tmp->min.type, tmp->min.value - 1);
+			add_range(&ret, gap_min, sval);
+		}
+		if (sval_cmp(tmp->max, abs_max) == 0)
+			return ret;
+		gap_min = sval_type_val(tmp->max.type, tmp->max.value + 1);
+	} END_FOR_EACH_PTR(tmp);
+
+	if (sval_cmp(gap_min, abs_max) <= 0)
+		add_range(&ret, gap_min, abs_max);
+
+	return ret;
+}
+
+struct range_list *rl_filter(struct range_list *rl, struct range_list *filter)
+{
+	struct data_range *tmp;
+
+	FOR_EACH_PTR(filter, tmp) {
+		rl = remove_range(rl, tmp->min, tmp->max);
+	} END_FOR_EACH_PTR(tmp);
+
+	return rl;
+}
+
+struct range_list *rl_intersection(struct range_list *one, struct range_list *two)
+{
+	struct range_list *one_orig;
+	struct range_list *two_orig;
+	struct range_list *ret;
+	struct symbol *ret_type;
+	struct symbol *small_type;
+	struct symbol *large_type;
+
+	if (!two)
+		return NULL;
+	if (!one)
+		return NULL;
+
+	one_orig = one;
+	two_orig = two;
+
+	ret_type = rl_type(one);
+	small_type = rl_type(one);
+	large_type = rl_type(two);
+
+	if (type_bits(rl_type(two)) < type_bits(small_type)) {
+		small_type = rl_type(two);
+		large_type = rl_type(one);
+	}
+
+	one = cast_rl(large_type, one);
+	two = cast_rl(large_type, two);
+
+	ret = one;
+	one = rl_invert(one);
+	two = rl_invert(two);
+
+	ret = rl_filter(ret, one);
+	ret = rl_filter(ret, two);
+
+	one = cast_rl(small_type, one_orig);
+	two = cast_rl(small_type, two_orig);
+
+	one = rl_invert(one);
+	two = rl_invert(two);
+
+	ret = cast_rl(small_type, ret);
+	ret = rl_filter(ret, one);
+	ret = rl_filter(ret, two);
+
+	return cast_rl(ret_type, ret);
+}
+
+static struct range_list *handle_mod_rl(struct range_list *left, struct range_list *right)
+{
+	sval_t zero;
+	sval_t max;
+
+	max = rl_max(right);
+	if (sval_is_max(max))
+		return left;
+	if (max.value == 0)
+		return NULL;
+	max.value--;
+	if (sval_is_negative(max))
+		return NULL;
+	if (sval_cmp(rl_max(left), max) < 0)
+		return left;
+	zero = max;
+	zero.value = 0;
+	return alloc_rl(zero, max);
+}
+
+static struct range_list *get_neg_rl(struct range_list *rl)
+{
+	struct data_range *tmp;
+	struct data_range *new;
+	struct range_list *ret = NULL;
+
+	if (!rl)
+		return NULL;
+	if (sval_is_positive(rl_min(rl)))
+		return NULL;
+
+	FOR_EACH_PTR(rl, tmp) {
+		if (sval_is_positive(tmp->min))
+			break;
+		if (sval_is_positive(tmp->max)) {
+			new = alloc_range(tmp->min, tmp->max);
+			new->max.value = -1;
+			add_range(&ret, new->min, new->max);
+			break;
+		}
+		add_range(&ret, tmp->min, tmp->max);
+	} END_FOR_EACH_PTR(tmp);
+
+	return ret;
+}
+
+static struct range_list *get_pos_rl(struct range_list *rl)
+{
+	struct data_range *tmp;
+	struct data_range *new;
+	struct range_list *ret = NULL;
+
+	if (!rl)
+		return NULL;
+	if (sval_is_negative(rl_max(rl)))
+		return NULL;
+
+	FOR_EACH_PTR(rl, tmp) {
+		if (sval_is_negative(tmp->max))
+			continue;
+		if (sval_is_positive(tmp->min)) {
+			add_range(&ret, tmp->min, tmp->max);
+			continue;
+		}
+		new = alloc_range(tmp->min, tmp->max);
+		new->min.value = 0;
+		add_range(&ret, new->min, new->max);
+	} END_FOR_EACH_PTR(tmp);
+
+	return ret;
+}
+
+static struct range_list *divide_rl_helper(struct range_list *left, struct range_list *right)
+{
+	sval_t right_min, right_max;
+	sval_t min, max;
+
+	if (!left || !right)
+		return NULL;
+
+	/* let's assume we never divide by zero */
+	right_min = rl_min(right);
+	right_max = rl_max(right);
+	if (right_min.value == 0 && right_max.value == 0)
+		return NULL;
+	if (right_min.value == 0)
+		right_min.value = 1;
+	if (right_max.value == 0)
+		right_max.value = -1;
+
+	max = sval_binop(rl_max(left), '/', right_min);
+	min = sval_binop(rl_min(left), '/', right_max);
+
+	return alloc_rl(min, max);
+}
+
+static struct range_list *handle_divide_rl(struct range_list *left, struct range_list *right)
+{
+	struct range_list *left_neg, *left_pos, *right_neg, *right_pos;
+	struct range_list *neg_neg, *neg_pos, *pos_neg, *pos_pos;
+	struct range_list *ret;
+
+	if (is_whole_rl(right))
+		return NULL;
+
+	left_neg = get_neg_rl(left);
+	left_pos = get_pos_rl(left);
+	right_neg = get_neg_rl(right);
+	right_pos = get_pos_rl(right);
+
+	neg_neg = divide_rl_helper(left_neg, right_neg);
+	neg_pos = divide_rl_helper(left_neg, right_pos);
+	pos_neg = divide_rl_helper(left_pos, right_neg);
+	pos_pos = divide_rl_helper(left_pos, right_pos);
+
+	ret = rl_union(neg_neg, neg_pos);
+	ret = rl_union(ret, pos_neg);
+	return rl_union(ret, pos_pos);
+}
+
+static struct range_list *handle_add_mult_rl(struct range_list *left, int op, struct range_list *right)
+{
+	sval_t min, max;
+
+	if (sval_binop_overflows(rl_min(left), op, rl_min(right)))
+		return NULL;
+	min = sval_binop(rl_min(left), op, rl_min(right));
+
+	if (sval_binop_overflows(rl_max(left), op, rl_max(right)))
+		return NULL;
+	max = sval_binop(rl_max(left), op, rl_max(right));
+
+	return alloc_rl(min, max);
+}
+
+static struct range_list *handle_sub_rl(struct range_list *left_orig, struct range_list *right_orig)
+{
+	struct range_list *left_rl, *right_rl;
+	struct symbol *type;
+	sval_t min, max;
+	sval_t min_ll, max_ll, res_ll;
+	sval_t tmp;
+
+	/* TODO:  These things should totally be using dranges where possible */
+
+	if (!left_orig || !right_orig)
+		return NULL;
+
+	type = &int_ctype;
+	if (type_positive_bits(rl_type(left_orig)) > type_positive_bits(type))
+		type = rl_type(left_orig);
+	if (type_positive_bits(rl_type(right_orig)) > type_positive_bits(type))
+		type = rl_type(right_orig);
+
+	left_rl = cast_rl(type, left_orig);
+	right_rl = cast_rl(type, right_orig);
+
+	max = rl_max(left_rl);
+	min = sval_type_min(type);
+
+	min_ll = rl_min(left_rl);
+	min_ll.type = &llong_ctype;
+	max_ll = rl_max(right_rl);
+	max_ll.type = &llong_ctype;
+	res_ll = min_ll;
+	res_ll.value = min_ll.value - max_ll.value;
+
+	if (!sval_binop_overflows(rl_min(left_rl), '-', rl_max(right_rl))) {
+		tmp = sval_binop(rl_min(left_rl), '-', rl_max(right_rl));
+		if (sval_cmp(tmp, min) > 0)
+			min = tmp;
+	} else if (type_positive_bits(type) < 63 &&
+		   !sval_binop_overflows(min_ll, '-', max_ll) &&
+		   (min.value != 0 && sval_cmp(res_ll, min) >= 0)) {
+		struct range_list *left_casted, *right_casted, *result;
+
+		left_casted = cast_rl(&llong_ctype, left_orig);
+		right_casted = cast_rl(&llong_ctype, right_orig);
+		result = handle_sub_rl(left_casted, right_casted);
+		return cast_rl(type, result);
+	}
+
+	if (!sval_is_max(rl_max(left_rl))) {
+		tmp = sval_binop(rl_max(left_rl), '-', rl_min(right_rl));
+		if (sval_cmp(tmp, max) < 0)
+			max = tmp;
+	}
+
+	if (sval_is_min(min) && sval_is_max(max))
+		return NULL;
+
+	return alloc_rl(min, max);
+}
+
+static unsigned long long rl_bits_always_set(struct range_list *rl)
+{
+	return sval_fls_mask(rl_min(rl));
+}
+
+static unsigned long long rl_bits_maybe_set(struct range_list *rl)
+{
+	return sval_fls_mask(rl_max(rl));
+}
+
+static struct range_list *handle_OR_rl(struct range_list *left, struct range_list *right)
+{
+	unsigned long long left_min, left_max, right_min, right_max;
+	sval_t min, max;
+	sval_t sval;
+
+	if ((rl_to_sval(left, &sval) || rl_to_sval(right, &sval)) &&
+	    !sval_binop_overflows(rl_max(left), '+', rl_max(right)))
+		return rl_binop(left, '+', right);
+
+	left_min = rl_bits_always_set(left);
+	left_max = rl_bits_maybe_set(left);
+	right_min = rl_bits_always_set(right);
+	right_max = rl_bits_maybe_set(right);
+
+	min.type = max.type = &ullong_ctype;
+	min.uvalue = left_min | right_min;
+	max.uvalue = left_max | right_max;
+
+	return cast_rl(rl_type(left), alloc_rl(min, max));
+}
+
+static struct range_list *handle_XOR_rl(struct range_list *left, struct range_list *right)
+{
+	unsigned long long left_set, left_maybe;
+	unsigned long long right_set, right_maybe;
+	sval_t zero, max;
+
+	left_set = rl_bits_always_set(left);
+	left_maybe = rl_bits_maybe_set(left);
+
+	right_set = rl_bits_always_set(right);
+	right_maybe = rl_bits_maybe_set(right);
+
+	zero = max = rl_min(left);
+	zero.uvalue = 0;
+	max.uvalue = fls_mask((left_maybe | right_maybe) ^ (left_set & right_set));
+
+	return cast_rl(rl_type(left), alloc_rl(zero, max));
+}
+
+static struct range_list *handle_AND_rl(struct range_list *left, struct range_list *right)
+{
+	unsigned long long left_set, left_maybe;
+	unsigned long long right_set, right_maybe;
+	sval_t zero, max;
+
+	return NULL;
+
+	left_set = rl_bits_always_set(left);
+	left_maybe = rl_bits_maybe_set(left);
+
+	right_set = rl_bits_always_set(right);
+	right_maybe = rl_bits_maybe_set(right);
+
+	zero = max = rl_min(left);
+	zero.uvalue = 0;
+	max.uvalue = fls_mask((left_maybe | right_maybe) ^ (left_set & right_set));
+
+	return cast_rl(rl_type(left), alloc_rl(zero, max));
+}
+
+struct range_list *rl_binop(struct range_list *left, int op, struct range_list *right)
+{
+	struct symbol *cast_type;
+	sval_t left_sval, right_sval;
+	struct range_list *ret = NULL;
+
+	cast_type = rl_type(left);
+	if (sval_type_max(rl_type(left)).uvalue < sval_type_max(rl_type(right)).uvalue)
+		cast_type = rl_type(right);
+	if (sval_type_max(cast_type).uvalue < INT_MAX)
+		cast_type = &int_ctype;
+
+	left = cast_rl(cast_type, left);
+	right = cast_rl(cast_type, right);
+
+	if (!left && !right)
+		return NULL;
+
+	if (rl_to_sval(left, &left_sval) && rl_to_sval(right, &right_sval)) {
+		sval_t val = sval_binop(left_sval, op, right_sval);
+		return alloc_rl(val, val);
+	}
+
+	switch (op) {
+	case '%':
+		ret = handle_mod_rl(left, right);
+		break;
+	case '/':
+		ret = handle_divide_rl(left, right);
+		break;
+	case '*':
+	case '+':
+		ret = handle_add_mult_rl(left, op, right);
+		break;
+	case '|':
+		ret = handle_OR_rl(left, right);
+		break;
+	case '^':
+		ret = handle_XOR_rl(left, right);
+		break;
+	case '&':
+		ret = handle_AND_rl(left, right);
+		break;
+	case '-':
+		ret = handle_sub_rl(left, right);
+		break;
+	/* FIXME:  Do the rest as well */
+	case SPECIAL_RIGHTSHIFT:
+	case SPECIAL_LEFTSHIFT:
+		break;
+	}
+
+	return ret;
+}
+
+void free_data_info_allocs(void)
+{
+	struct allocator_struct *desc = &data_info_allocator;
+	struct allocation_blob *blob = desc->blobs;
+
+	free_all_rl();
+	clear_math_cache();
+
+	desc->blobs = NULL;
+	desc->allocations = 0;
+	desc->total_bytes = 0;
+	desc->useful_bytes = 0;
+	desc->freelist = NULL;
+	while (blob) {
+		struct allocation_blob *next = blob->next;
+		blob_free(blob, desc->chunking);
+		blob = next;
+	}
+	clear_data_range_alloc();
+}
+
+void split_comparison_rl(struct range_list *left_orig, int op, struct range_list *right_orig,
+		struct range_list **left_true_rl, struct range_list **left_false_rl,
+		struct range_list **right_true_rl, struct range_list **right_false_rl)
+{
+	struct range_list *left_true, *left_false;
+	struct range_list *right_true, *right_false;
+	sval_t min, max;
+
+	min = sval_type_min(rl_type(left_orig));
+	max = sval_type_max(rl_type(left_orig));
+
+	left_true = clone_rl(left_orig);
+	left_false = clone_rl(left_orig);
+	right_true = clone_rl(right_orig);
+	right_false = clone_rl(right_orig);
+
+	switch (op) {
+	case '<':
+	case SPECIAL_UNSIGNED_LT:
+		left_true = remove_range(left_orig, rl_max(right_orig), max);
+		if (!sval_is_min(rl_min(right_orig))) {
+			left_false = remove_range(left_orig, min, sub_one(rl_min(right_orig)));
+		}
+
+		right_true = remove_range(right_orig, min, rl_min(left_orig));
+		if (!sval_is_max(rl_max(left_orig)))
+			right_false = remove_range(right_orig, add_one(rl_max(left_orig)), max);
+		break;
+	case SPECIAL_UNSIGNED_LTE:
+	case SPECIAL_LTE:
+		if (!sval_is_max(rl_max(right_orig)))
+			left_true = remove_range(left_orig, add_one(rl_max(right_orig)), max);
+		left_false = remove_range(left_orig, min, rl_min(right_orig));
+
+		if (!sval_is_min(rl_min(left_orig)))
+			right_true = remove_range(right_orig, min, sub_one(rl_min(left_orig)));
+		right_false = remove_range(right_orig, rl_max(left_orig), max);
+
+		if (sval_cmp(rl_min(left_orig), rl_min(right_orig)) == 0)
+			left_false = remove_range(left_false, rl_min(left_orig), rl_min(left_orig));
+		if (sval_cmp(rl_max(left_orig), rl_max(right_orig)) == 0)
+			right_false = remove_range(right_false, rl_max(left_orig), rl_max(left_orig));
+		break;
+	case SPECIAL_EQUAL:
+		left_true = rl_intersection(left_orig, right_orig);
+		right_true = clone_rl(left_true);
+
+		if (sval_cmp(rl_min(right_orig), rl_max(right_orig)) == 0)
+			left_false = remove_range(left_orig, rl_min(right_orig), rl_min(right_orig));
+		if (sval_cmp(rl_min(left_orig), rl_max(left_orig)) == 0)
+			right_false = remove_range(right_orig, rl_min(left_orig), rl_min(left_orig));
+		break;
+	case SPECIAL_UNSIGNED_GTE:
+	case SPECIAL_GTE:
+		if (!sval_is_min(rl_min(right_orig)))
+			left_true = remove_range(left_orig, min, sub_one(rl_min(right_orig)));
+		left_false = remove_range(left_orig, rl_max(right_orig), max);
+
+		if (!sval_is_max(rl_max(left_orig)))
+			right_true = remove_range(right_orig, add_one(rl_max(left_orig)), max);
+		right_false = remove_range(right_orig, min, rl_min(left_orig));
+
+		if (sval_cmp(rl_min(left_orig), rl_min(right_orig)) == 0)
+			right_false = remove_range(right_false, rl_min(left_orig), rl_min(left_orig));
+		if (sval_cmp(rl_max(left_orig), rl_max(right_orig)) == 0)
+			left_false = remove_range(left_false, rl_max(left_orig), rl_max(left_orig));
+		break;
+	case '>':
+	case SPECIAL_UNSIGNED_GT:
+		left_true = remove_range(left_orig, min, rl_min(right_orig));
+		if (!sval_is_max(rl_max(right_orig)))
+			left_false = remove_range(left_orig, add_one(rl_max(right_orig)), max);
+
+		right_true = remove_range(right_orig, rl_max(left_orig), max);
+		if (!sval_is_min(rl_min(left_orig)))
+			right_false = remove_range(right_orig, min, sub_one(rl_min(left_orig)));
+		break;
+	case SPECIAL_NOTEQUAL:
+		left_false = rl_intersection(left_orig, right_orig);
+		right_false = clone_rl(left_false);
+
+		if (sval_cmp(rl_min(right_orig), rl_max(right_orig)) == 0)
+			left_true = remove_range(left_orig, rl_min(right_orig), rl_min(right_orig));
+		if (sval_cmp(rl_min(left_orig), rl_max(left_orig)) == 0)
+			right_true = remove_range(right_orig, rl_min(left_orig), rl_min(left_orig));
+		break;
+	default:
+		sm_perror(" unhandled comparison %d", op);
+		return;
+	}
+
+	if (left_true_rl) {
+		*left_true_rl = left_true;
+		*left_false_rl = left_false;
+	}
+	if (right_true_rl) {
+		*right_true_rl = right_true;
+		*right_false_rl = right_false;
+	}
+}
--- /dev/null	Fri Dec 21 15:00:28 2018
+++ new/usr/src/tools/smatch/src/smatch_real_absolute.c	Fri Dec 21 15:00:28 2018
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2015 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Say we have a line like:
+ * foo = bar / 8;
+ * Assume we don't know anything about bar.  Well, now we know that foo is less
+ * than UINT_MAX / 8.  Which might be useful, but it probably is misleading
+ * useless knowledge.  Up to now we have ignored those but now we have said to
+ * store them.
+ *
+ * It also works if you have something like "foo = (int)(char)unknown_var;".
+ *
+ * I feel like this data doesn't have to be perfect, it just has to be better
+ * than nothing and that will help eliminate some false positives.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+static void pre_merge_hook(struct sm_state *sm)
+{
+	struct smatch_state *abs;
+	struct smatch_state *extra;
+	struct range_list *rl;
+
+	extra = get_state(SMATCH_EXTRA, sm->name, sm->sym);
+	if (!extra || !estate_rl(extra))
+		return;
+	abs = get_state(my_id, sm->name, sm->sym);
+	if (!abs || !estate_rl(abs)) {
+		set_state(my_id, sm->name, sm->sym, clone_estate(extra));
+		return;
+	}
+	rl = rl_intersection(estate_rl(abs), estate_rl(extra));
+	set_state(my_id, sm->name, sm->sym, alloc_estate_rl(clone_rl(rl)));
+}
+
+static struct smatch_state *empty_state(struct sm_state *sm)
+{
+	return alloc_estate_empty();
+}
+
+static void reset(struct sm_state *sm, struct expression *mod_expr)
+{
+	set_state(my_id, sm->name, sm->sym, alloc_estate_whole(estate_type(sm->state)));
+}
+
+static int in_iterator_pre_statement(void)
+{
+	struct statement *stmt;
+
+	/*
+	 * we can't use __cur_stmt because that isn't set for
+	 * iterator_pre_statement.  Kind of a mess.
+	 *
+	 */
+
+	stmt = last_ptr_list((struct ptr_list *)big_statement_stack);
+
+	if (!stmt || !stmt->parent)
+		return 0;
+	if (stmt->parent->type != STMT_ITERATOR)
+		return 0;
+	if (stmt->parent->iterator_pre_statement != stmt)
+		return 0;
+	return 1;
+}
+
+static void match_assign(struct expression *expr)
+{
+	struct range_list *rl;
+	struct symbol *type;
+	sval_t sval;
+
+	if (expr->op != '=')
+		return;
+	if (is_fake_call(expr->right))
+		return;
+	if (in_iterator_pre_statement())
+		return;
+
+	get_real_absolute_rl(expr->right, &rl);
+
+	type = get_type(expr->left);
+	if (!type)
+		return;
+
+	rl = cast_rl(type, rl);
+	if (is_whole_rl(rl) && !get_state_expr(my_id, expr->left))
+		return;
+	/* These are handled by smatch_extra.c */
+	if (rl_to_sval(rl, &sval) && !get_state_expr(my_id, expr->left))
+		return;
+
+	set_state_expr(my_id, expr->left, alloc_estate_rl(clone_rl(rl)));
+}
+
+struct smatch_state *get_real_absolute_state(struct expression *expr)
+{
+	return get_state_expr(my_id, expr);
+}
+
+struct smatch_state *get_real_absolute_state_var_sym(const char *name, struct symbol *sym)
+{
+	return get_state(my_id, name, sym);
+}
+
+void register_real_absolute(int id)
+{
+	my_id = id;
+
+	add_pre_merge_hook(my_id, &pre_merge_hook);
+	add_unmatched_state_hook(my_id, &empty_state);
+	add_merge_hook(my_id, &merge_estates);
+	add_modification_hook(my_id, &reset);
+
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+}
+
--- /dev/null	Fri Dec 21 15:00:28 2018
+++ new/usr/src/tools/smatch/src/smatch_recurse.c	Fri Dec 21 15:00:28 2018
@@ -0,0 +1,191 @@
+/*
+ * Copyright (C) 2013 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+#define RECURSE_LIMIT 10
+
+static int recurse(struct expression *expr,
+		   int (func)(struct expression *expr, void *p),
+		   void *param, int nr)
+{
+	int ret;
+
+	if (!expr)
+		return 0;
+
+	ret = func(expr, param);
+	if (ret)
+		return ret;
+
+	if (nr > RECURSE_LIMIT)
+		return -1;
+	nr++;
+
+	switch (expr->type) {
+	case EXPR_PREOP:
+		ret = recurse(expr->unop, func, param, nr);
+		break;
+	case EXPR_POSTOP:
+		ret = recurse(expr->unop, func, param, nr);
+		break;
+	case EXPR_STATEMENT:
+		return -1;
+		break;
+	case EXPR_LOGICAL:
+	case EXPR_COMPARE:
+	case EXPR_BINOP:
+	case EXPR_COMMA:
+		ret = recurse(expr->left, func, param, nr);
+		if (ret)
+			return ret;
+		ret = recurse(expr->right, func, param, nr);
+		break;
+	case EXPR_ASSIGNMENT:
+		ret = recurse(expr->right, func, param, nr);
+		if (ret)
+			return ret;
+		ret = recurse(expr->left, func, param, nr);
+		break;
+	case EXPR_DEREF:
+		ret = recurse(expr->deref, func, param, nr);
+		break;
+	case EXPR_SLICE:
+		ret = recurse(expr->base, func, param, nr);
+		break;
+	case EXPR_CAST:
+	case EXPR_FORCE_CAST:
+		ret = recurse(expr->cast_expression, func, param, nr);
+		break;
+	case EXPR_SIZEOF:
+	case EXPR_OFFSETOF:
+	case EXPR_ALIGNOF:
+		break;
+	case EXPR_CONDITIONAL:
+	case EXPR_SELECT:
+		ret = recurse(expr->conditional, func, param, nr);
+		if (ret)
+			return ret;
+		ret = recurse(expr->cond_true, func, param, nr);
+		if (ret)
+			return ret;
+		ret = recurse(expr->cond_false, func, param, nr);
+		break;
+	case EXPR_CALL:
+		return -1;
+		break;
+	case EXPR_INITIALIZER:
+		return -1;
+		break;
+	case EXPR_IDENTIFIER:
+		ret = recurse(expr->ident_expression, func, param, nr);
+		break;
+	case EXPR_INDEX:
+		ret = recurse(expr->idx_expression, func, param, nr);
+		break;
+	case EXPR_POS:
+		ret = recurse(expr->init_expr, func, param, nr);
+		break;
+	case EXPR_SYMBOL:
+	case EXPR_STRING:
+	case EXPR_VALUE:
+		break;
+	default:
+		return -1;
+		break;
+	};
+	return ret;
+}
+
+static int has_symbol_helper(struct expression *expr, void *_sym)
+{
+	struct symbol *sym = _sym;
+
+	if (!expr || expr->type != EXPR_SYMBOL)
+		return 0;
+	if (expr->symbol == sym)
+		return 1;
+	return 0;
+}
+
+int has_symbol(struct expression *expr, struct symbol *sym)
+{
+	return recurse(expr, has_symbol_helper, sym, 0);
+}
+
+struct expr_name_sym {
+	struct expression *expr;
+	char *name;
+	struct symbol *sym;
+};
+
+static int has_var_helper(struct expression *expr, void *_var)
+{
+	struct expr_name_sym *xns = _var;
+	char *name;
+	struct symbol *sym;
+	int matched = 0;
+
+	if (!expr)
+		return 0;
+	if (expr->type != xns->expr->type)
+		return 0;
+	// I hope this is defined for everything?  It should work, right?
+	if (expr->op != xns->expr->op)
+		return 0;
+
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+	if (sym == xns->sym && strcmp(name, xns->name) == 0)
+		matched = 1;
+free:
+	free_string(name);
+	return matched;
+}
+
+int has_variable(struct expression *expr, struct expression *var)
+{
+	struct expr_name_sym xns;
+	int ret = -1;
+
+	xns.expr = var;
+	xns.name = expr_to_var_sym(var, &xns.sym);
+	if (!xns.name || !xns.sym)
+		goto free;
+	ret = recurse(expr, has_var_helper, &xns, 0);
+free:
+	free_string(xns.name);
+	return ret;
+}
+
+static int has_inc_dec_helper(struct expression *expr, void *unused)
+{
+	if (!expr)
+		return 0;
+	if (expr->type != EXPR_PREOP && expr->type != EXPR_POSTOP)
+		return 0;
+	if (expr->op == SPECIAL_INCREMENT || expr->op == SPECIAL_DECREMENT)
+		return 1;
+	return 0;
+}
+
+int has_inc_dec(struct expression *expr)
+{
+	return recurse(expr, has_inc_dec_helper, NULL, 0);
+}
+
--- /dev/null	Fri Dec 21 15:00:29 2018
+++ new/usr/src/tools/smatch/src/smatch_return_to_param.c	Fri Dec 21 15:00:29 2018
@@ -0,0 +1,291 @@
+/*
+ * Copyright (C) 2017 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This is for smatch_extra.c to use.  It sort of like check_assigned_expr.c but
+ * more limited.  Say a function returns "64min-s64max[$0->data]" and the caller
+ * does "struct whatever *p = get_data(dev);" then we want to record that p is
+ * now the same as "dev->data".  Then if we update "p->foo" it means we can
+ * update "dev->data->foo" as well.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+extern int check_assigned_expr_id;
+static int my_id;
+static int link_id;
+
+static struct smatch_state *alloc_my_state(const char *name, struct symbol *sym)
+{
+	struct smatch_state *state;
+
+	state = __alloc_smatch_state(0);
+	state->name = alloc_sname(name);
+	state->data = sym;
+	return state;
+}
+
+static void undef(struct sm_state *sm, struct expression *mod_expr)
+{
+	if (__in_fake_parameter_assign)
+		return;
+	set_state(my_id, sm->name, sm->sym, &undefined);
+}
+
+char *map_call_to_other_name_sym(const char *name, struct symbol *sym, struct symbol **new_sym)
+{
+	struct smatch_state *state;
+	int skip;
+	char buf[256];
+
+	/* skip 'foo->'.  This was checked in the caller. */
+	skip = strlen(sym->ident->name) + 2;
+
+	state = get_state(my_id, sym->ident->name, sym);
+	if (!state || !state->data)
+		return NULL;
+
+	snprintf(buf, sizeof(buf), "%s->%s", state->name, name + skip);
+	*new_sym = state->data;
+	return alloc_string(buf);
+}
+
+static char *map_my_state_long_to_short(struct sm_state *sm, const char *name, struct symbol *sym, struct symbol **new_sym, bool stack)
+{
+	int len;
+	char buf[256];
+
+	if (sm->state->data != sym)
+		return NULL;
+	len = strlen(sm->state->name);
+	if (strncmp(name, sm->state->name, len) != 0)
+		return NULL;
+
+	if (name[len] == '.')
+		return NULL;
+	if (!stack && name[len] != '-')
+		return NULL;
+	snprintf(buf, sizeof(buf), "%s%s", sm->name, name + len);
+	*new_sym = sm->sym;
+	return alloc_string(buf);
+}
+
+static char *map_assignment_long_to_short(struct sm_state *sm, const char *name, struct symbol *sym, struct symbol **new_sym, bool stack)
+{
+	struct expression *orig_expr;
+	struct symbol *orig_sym;
+	int len;
+	char buf[256];
+
+	orig_expr = sm->state->data;
+	if (!orig_expr)
+		return NULL;
+
+	/*
+	 * Say we have an assignment like:
+	 *     foo->bar->my_ptr = my_ptr;
+	 * We still expect the function to carry on using "my_ptr" as the
+	 * shorter name.  That's not a long to short mapping.
+	 *
+	 */
+	if (orig_expr->type == EXPR_SYMBOL)
+		return NULL;
+
+	orig_sym = expr_to_sym(orig_expr);
+	if (!orig_sym)
+		return NULL;
+	if (sym != orig_sym)
+		return NULL;
+
+	len = strlen(sm->state->name);
+	if (strncmp(name, sm->state->name, len) != 0)
+		return NULL;
+
+	if (name[len] == '.')
+		return NULL;
+	if (!stack && name[len] != '-')
+		return NULL;
+	snprintf(buf, sizeof(buf), "%s%s", sm->name, name + len);
+	*new_sym = sm->sym;
+	return alloc_string(buf);
+}
+
+/*
+ * Normally, we expect people to consistently refer to variables by the shortest
+ * name.  So they use "b->a" instead of "foo->bar.a" when both point to the
+ * same memory location.  However, when we're dealing across function boundaries
+ * then sometimes we pass frob(foo) which sets foo->bar.a.  In that case, we
+ * translate it to the shorter name.  Smatch extra updates the shorter name,
+ * which in turn updates the longer name.
+ *
+ */
+static char *map_long_to_short_name_sym_helper(const char *name, struct symbol *sym, struct symbol **new_sym, bool stack)
+{
+	char *ret;
+	struct sm_state *sm;
+
+	*new_sym = NULL;
+
+	FOR_EACH_SM(__get_cur_stree(), sm) {
+		if (sm->owner == my_id) {
+			ret = map_my_state_long_to_short(sm, name, sym, new_sym, stack);
+			if (ret)
+				return ret;
+			continue;
+		}
+		if (sm->owner == check_assigned_expr_id) {
+			ret = map_assignment_long_to_short(sm, name, sym, new_sym, stack);
+			if (ret)
+				return ret;
+			continue;
+		}
+	} END_FOR_EACH_SM(sm);
+
+	return NULL;
+}
+
+char *map_long_to_short_name_sym(const char *name, struct symbol *sym, struct symbol **new_sym)
+{
+	return map_long_to_short_name_sym_helper(name, sym, new_sym, 1);
+}
+
+char *map_long_to_short_name_sym_nostack(const char *name, struct symbol *sym, struct symbol **new_sym)
+{
+	return map_long_to_short_name_sym_helper(name, sym, new_sym, 0);
+}
+
+char *map_call_to_param_name_sym(struct expression *expr, struct symbol **sym)
+{
+	char *name;
+	struct symbol *start_sym;
+	struct smatch_state *state;
+
+	*sym = NULL;
+
+	name = expr_to_str_sym(expr, &start_sym);
+	if (!name)
+		return NULL;
+	if (expr->type == EXPR_CALL)
+		start_sym = expr_to_sym(expr->fn);
+
+	state = get_state(my_id, name, start_sym);
+	free_string(name);
+	if (!state || !state->data)
+		return NULL;
+
+	*sym = state->data;
+	return alloc_string(state->name);
+}
+
+static void store_mapping_helper(char *left_name, struct symbol *left_sym, struct expression *call, const char *return_string)
+{
+	const char *p = return_string;
+	char *close;
+	int param;
+	struct expression *arg, *new;
+	char *right_name;
+	struct symbol *right_sym;
+	char buf[256];
+
+	while (*p && *p != '[')
+		p++;
+	if (!*p)
+		return;
+	p++;
+	if (*p != '$')
+		return;
+
+	snprintf(buf, sizeof(buf), "%s", p);
+	close = strchr(buf, ']');
+	if (!close)
+		return;
+	*close = '\0';
+
+	param = atoi(buf + 1);
+	arg = get_argument_from_call_expr(call->args, param);
+	if (!arg)
+		return;
+
+	new = gen_expression_from_key(arg, buf);
+	if (!new)
+		return;
+
+	right_name = expr_to_var_sym(new, &right_sym);
+	if (!right_name || !right_sym)
+		goto free;
+
+	set_state(my_id, left_name, left_sym, alloc_my_state(right_name, right_sym));
+	store_link(link_id, right_name, right_sym, left_name, left_sym);
+
+free:
+	free_string(right_name);
+}
+
+void __add_return_to_param_mapping(struct expression *expr, const char *return_string)
+{
+	struct expression *call;
+	char *left_name = NULL;
+	struct symbol *left_sym;
+
+	if (expr->type == EXPR_ASSIGNMENT) {
+		left_name = expr_to_var_sym(expr->left, &left_sym);
+		if (!left_name || !left_sym)
+			goto free;
+
+		call = strip_expr(expr->right);
+		if (call->type != EXPR_CALL)
+			goto free;
+
+		store_mapping_helper(left_name, left_sym, call, return_string);
+		goto free;
+	}
+
+	if (expr->type == EXPR_CALL &&
+	    expr_get_parent_stmt(expr) &&
+	    expr_get_parent_stmt(expr)->type == STMT_RETURN) {
+		call = strip_expr(expr);
+		left_sym = expr_to_sym(call->fn);
+		if (!left_sym)
+			return;
+		left_name = expr_to_str(call);
+		if (!left_name)
+			return;
+
+		store_mapping_helper(left_name, left_sym, call, return_string);
+		goto free;
+
+	}
+
+free:
+	free_string(left_name);
+}
+
+void register_return_to_param(int id)
+{
+	my_id = id;
+	add_modification_hook(my_id, &undef);
+}
+
+void register_return_to_param_links(int id)
+{
+	link_id = id;
+	set_up_link_functions(my_id, link_id);
+}
+
--- /dev/null	Fri Dec 21 15:00:29 2018
+++ new/usr/src/tools/smatch/src/smatch_returns.c	Fri Dec 21 15:00:29 2018
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2011 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+int RETURN_ID;
+
+struct return_states_callback {
+	void (*callback)(void);
+};
+ALLOCATOR(return_states_callback, "return states callbacks");
+DECLARE_PTR_LIST(callback_list, struct return_states_callback);
+static struct callback_list *callback_list;
+
+DECLARE_PTR_LIST(stree_stack_stack, struct stree_stack);
+static void push_stree_stack(struct stree_stack_stack **stack_stack, struct stree_stack *stack)
+{
+	add_ptr_list(stack_stack, stack);
+}
+
+static struct stree_stack *pop_stree_stack(struct stree_stack_stack **stack_stack)
+{
+	struct stree_stack *stack;
+
+	stack = last_ptr_list((struct ptr_list *)*stack_stack);
+	delete_ptr_list_last((struct ptr_list **)stack_stack);
+	return stack;
+}
+
+static struct stree_stack *return_stree_stack;
+static struct stree_stack_stack *saved_stack_stack;
+static struct stree *all_return_states;
+static struct stree_stack *saved_stack;
+
+void all_return_states_hook(void (*callback)(void))
+{
+	struct return_states_callback *rs_cb = __alloc_return_states_callback(0);
+
+	rs_cb->callback = callback;
+	add_ptr_list(&callback_list, rs_cb);
+}
+
+static void call_hooks(void)
+{
+	struct return_states_callback *rs_cb;
+
+	__set_fake_cur_stree_fast(all_return_states);
+	FOR_EACH_PTR(callback_list, rs_cb) {
+		rs_cb->callback();
+	} END_FOR_EACH_PTR(rs_cb);
+	__pop_fake_cur_stree_fast();
+}
+
+static void match_return(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct stree *stree;
+
+	stree = clone_stree(__get_cur_stree());
+	merge_stree_no_pools(&all_return_states, stree);
+	push_stree(&return_stree_stack, stree);
+}
+
+static void match_end_func(struct symbol *sym)
+{
+	/*
+	 * FIXME: either this isn't needed or we need to copy a stree into the
+	 * return_stree_stack as well.
+	 */
+	merge_stree(&all_return_states, __get_cur_stree());
+	call_hooks();
+}
+
+static void match_save_states(struct expression *expr)
+{
+	push_stree(&saved_stack, all_return_states);
+	all_return_states = NULL;
+
+	push_stree_stack(&saved_stack_stack, return_stree_stack);
+	return_stree_stack = NULL;
+}
+
+static void match_restore_states(struct expression *expr)
+{
+	/* This free_stree() isn't needed is it?? */
+	free_stree(&all_return_states);
+
+	all_return_states = pop_stree(&saved_stack);
+	return_stree_stack = pop_stree_stack(&saved_stack_stack);
+}
+
+struct stree *get_all_return_states(void)
+{
+	return all_return_states;
+}
+
+struct stree_stack *get_all_return_strees(void)
+{
+	return return_stree_stack;
+}
+
+static void free_resources(struct symbol *sym)
+{
+	struct stree *tmp;
+
+	free_stree(&all_return_states);
+
+	FOR_EACH_PTR(return_stree_stack, tmp) {
+		free_stree(&tmp);
+	} END_FOR_EACH_PTR(tmp);
+	free_stree_stack(&return_stree_stack);
+}
+
+void register_returns_early(int id)
+{
+	RETURN_ID = id;
+
+	add_split_return_callback(match_return);
+}
+
+void register_returns(int id)
+{
+	add_hook(&match_end_func, END_FUNC_HOOK);
+	add_hook(&match_save_states, INLINE_FN_START);
+	add_hook(&match_restore_states, INLINE_FN_END);
+	add_hook(&free_resources, AFTER_FUNC_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:29 2018
+++ new/usr/src/tools/smatch/src/smatch_scope.c	Fri Dec 21 15:00:29 2018
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2016 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+static struct statement_list *stmt_list;
+
+static int end_of_function(struct statement *stmt)
+{
+	struct symbol *fn = get_base_type(cur_func_sym);
+
+	/* err on the conservative side of things */
+	if (!fn)
+		return 1;
+	if (stmt == fn->stmt || stmt == fn->inline_stmt)
+		return 1;
+	return 0;
+}
+
+/*
+ * We're wasting a lot of time worrying about out of scope variables.
+ * When we come to the end of a scope then just delete them all the out of
+ * scope states.
+ */
+static void match_end_of_block(struct statement *stmt)
+{
+	struct statement *tmp;
+	struct symbol *sym;
+
+	if (end_of_function(stmt))
+		return;
+
+	FOR_EACH_PTR(stmt->stmts, tmp) {
+		if (tmp->type != STMT_DECLARATION)
+			return;
+
+		FOR_EACH_PTR(tmp->declaration, sym) {
+			if (!sym->ident)
+				continue;
+			__delete_all_states_sym(sym);
+		} END_FOR_EACH_PTR(sym);
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static int is_outer_stmt(struct statement *stmt)
+{
+	struct symbol *fn;
+
+	if (!cur_func_sym)
+		return 0;
+	fn = get_base_type(cur_func_sym);
+	if (!fn)
+		return 0;
+	/*
+	 * There are times when ->parent is not set but it's set for
+	 * the outer statement so ignoring NULLs works as a work-around.
+	 */
+	if (!stmt->parent)
+		return 0;
+	if (stmt->parent == fn->stmt ||
+	    stmt->parent == fn->inline_stmt)
+		return 1;
+	return 0;
+}
+
+static void match_stmt(struct statement *stmt)
+{
+	struct statement *tmp;
+
+	if (__inline_fn)
+		return;
+
+	if (stmt->type == STMT_COMPOUND)
+		add_ptr_list(&stmt_list, stmt);
+
+	if (!is_outer_stmt(stmt))
+		return;
+
+	FOR_EACH_PTR(stmt_list, tmp) {
+		match_end_of_block(tmp);
+	} END_FOR_EACH_PTR(tmp);
+	free_ptr_list(&stmt_list);
+}
+
+static void match_end_func(struct symbol *sym)
+{
+	if (__inline_fn)
+		return;
+	free_ptr_list(&stmt_list);
+}
+
+void register_scope(int id)
+{
+	add_hook(&match_stmt, STMT_HOOK_AFTER);
+	add_hook(&match_end_func, AFTER_FUNC_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:29 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/add_gfp_to_allocations.sh	Fri Dec 21 15:00:29 2018
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+if ! test -e kernel.allocation_funcs || ! test -e kernel.gfp_flags ; then
+    echo "We need the kernel.allocation_funcs and the kernel.gfp_flags files"
+    echo "The scripts to generate them are in smatch_data/"
+    exit 1
+fi
+
+bin_dir=$(dirname $0)
+remove=$(echo ${bin_dir}/../smatch_data/kernel.allocation_funcs_gfp.remove)
+tmp=$(mktemp /tmp/smatch.XXXX)
+
+echo "// Automatically generated by add_gfp_to_allocations.sh" > kernel.allocation_funcs_gfp
+for i in $(grep -v "//" kernel.allocation_funcs) ; do
+    if ! grep -w $i kernel.gfp_flags ; then
+	echo $i X
+    fi
+done >> $tmp
+
+cat $tmp $remove $remove 2> /dev/null | sort | uniq -u >> kernel.allocation_funcs_gfp
+rm $tmp
+
+echo "Done.  Created kernel.allocation_funcs_gfp"
--- /dev/null	Fri Dec 21 15:00:29 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/build_generic_data.sh	Fri Dec 21 15:00:29 2018
@@ -0,0 +1,67 @@
+#!/bin/bash
+
+# This is a generic script to parse --info output.  For the kernel, don't use
+# this script, use build_kernel_data.sh instead.
+
+NR_CPU=$(cat /proc/cpuinfo | grep ^processor | wc -l)
+SCRIPT_DIR=$(dirname $0)
+DATA_DIR=smatch_data
+PROJECT=smatch_generic
+TARGET=""
+
+function usage {
+    echo
+    echo "Usage:  $0"
+    echo "Updates the smatch_data/ directory and builds the smatch database"
+    echo " -p <project> (default = $PROJECT)"
+    echo
+    exit 1
+}
+
+while true ; do
+    if [[ "$1" == "--target" ]] ; then
+        shift
+        TARGET="$1"
+        shift
+    elif [ "$1" == "-p" ] || [ "$1" == "--project" ] ; then
+        shift
+        PROJECT="$1"
+        shift
+    elif [ "$1" == "--help" ] || [ "$1" = "-h" ] ; then
+        usage
+    else
+        break
+    fi
+done
+
+if [ -e $SCRIPT_DIR/../smatch ] ; then
+    BIN_DIR=$SCRIPT_DIR/../
+else
+    echo "This script should be located in the smatch_scripts/ subdirectory of the smatch source."
+    exit 1
+fi
+
+# If someone is building the database for the first time then make sure all the
+# required packages are installed
+if [ ! -e smatch_db.sqlite ] ; then
+    [ -e smatch_warns.txt ] || touch smatch_warns.txt
+    if ! $SCRIPT_DIR/../smatch_data/db/create_db.sh -p=$PROJECT smatch_warns.txt ; then
+        echo "Hm... Not working.  Make sure you have all the sqlite3 packages"
+        echo "And the sqlite3 libraries for Perl and Python"
+        exit 1
+    fi
+fi
+
+make -j${NR_CPU} CHECK="$BIN_DIR/smatch --call-tree --info --param-mapper --spammy --file-output" $TARGET
+
+find -name \*.c.smatch -exec cat \{\} \; -exec rm \{\} \; > smatch_warns.txt
+
+for i in $SCRIPT_DIR/gen_* ; do
+        $i smatch_warns.txt -p=${PROJECT}
+done
+
+mkdir -p $DATA_DIR
+mv $PROJECT.* $DATA_DIR
+
+$SCRIPT_DIR/../smatch_data/db/create_db.sh -p=$PROJECT smatch_warns.txt
+
--- /dev/null	Fri Dec 21 15:00:29 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/build_kernel_data.sh	Fri Dec 21 15:00:29 2018
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+PROJECT=kernel
+
+function usage {
+    echo
+    echo "Usage:  $0"
+    echo "Updates the smatch_data/ directory and builds the smatch database"
+    echo
+    exit 1
+}
+
+if [ "$1" = "-h" ] || [ "$1" = "--help" ] ; then
+	usage;
+fi
+
+SCRIPT_DIR=$(dirname $0)
+if [ -e $SCRIPT_DIR/../smatch -a -d kernel -a -d fs ] ; then
+    CMD=$SCRIPT_DIR/../smatch
+    DATA_DIR=$SCRIPT_DIR/../smatch_data
+else
+    echo "This script should be located in the smatch_scripts/ subdirectory of the smatch source."
+    echo "It should be run from the root of a kernel source tree."
+    exit 1
+fi
+
+# If someone is building the database for the first time then make sure all the
+# required packages are installed
+if [ ! -e smatch_db.sqlite ] ; then
+    [ -e smatch_warns.txt ] || touch smatch_warns.txt
+    if ! $DATA_DIR/db/create_db.sh -p=kernel smatch_warns.txt ; then
+        echo "Hm... Not working.  Make sure you have all the sqlite3 packages"
+        echo "And the sqlite3 libraries for Perl and Python"
+        exit 1
+    fi
+fi
+
+$SCRIPT_DIR/test_kernel.sh --call-tree --info --param-mapper --spammy --data=$DATA_DIR
+
+for i in $SCRIPT_DIR/gen_* ; do
+	$i smatch_warns.txt -p=kernel
+done
+
+mv ${PROJECT}.* $DATA_DIR
+
+$DATA_DIR/db/create_db.sh -p=kernel smatch_warns.txt
+
--- /dev/null	Fri Dec 21 15:00:29 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/call_tree.pl	Fri Dec 21 15:00:29 2018
@@ -0,0 +1,146 @@
+#!/usr/bin/perl
+
+# This script is supposed to help use the param_mapper output.
+# Give it a function and parameter and it lists the functions
+# and parameters which are basically equivalent.
+
+use strict;
+
+sub usage()
+{
+    print("call_tree.pl <smatch output file>\n");
+    print("call_tree.pl finds paths between two functions\n"); 
+    exit(1);
+}
+
+my %param_map;
+
+my $UNKNOWN  = 1;
+my $NOTFOUND = 2;
+my $FOUND    = 3;
+
+my $path;
+
+sub print_path()
+{
+    my $i = 0;
+
+    foreach my $func (@{$path}) {
+	if ($i++) {
+	    print(", ");
+	}
+	print("$func");
+    }
+    print("\n");
+    print("\n");
+}
+
+sub recurse($$)
+{
+    my $link = shift;
+    my $target = shift;
+    my $found = 0;
+
+    if ($link =~ /$target/) {
+	print_path();
+	return 1;
+    }
+    if (%{$param_map{$link}}->{found} == $NOTFOUND) {
+	return 0;
+    }
+
+    %{$param_map{$link}}->{found} = $NOTFOUND;
+
+    foreach my $l (@{%{$param_map{$link}}->{links}}){
+	push(@{$path}, $l);
+	$found = recurse($l, $target);
+	if (!$found) {
+	    pop(@{$path});
+	} else {
+	    last;
+	}
+    }
+
+    return $found;
+}
+
+sub search($$)
+{
+    my $start_func = shift;
+    my $end_func = shift;
+
+    foreach my $link (@{%{$param_map{$start_func}}->{links}}){
+	%{$param_map{$start_func}}->{found} = $NOTFOUND;
+	foreach my $l (@{%{$param_map{$start_func}}->{links}}){
+	    %{$param_map{$l}}->{found} = $NOTFOUND;
+	}
+	$path = [$start_func, $link];
+	%{$param_map{$link}}->{found} = $UNKNOWN;
+	recurse($link, $end_func);
+    }
+}
+
+sub add_link($$)
+{
+    my $one = shift;
+    my $two = shift;
+
+    if (!defined($param_map{$one})) {
+	$param_map{$one} = {found => $UNKNOWN, links => []};
+    }
+    push @{$param_map{$one}->{links}}, $two;
+}
+
+sub load_all($)
+{
+    my $file = shift;
+
+    open(FILE, "<$file");
+    while (<FILE>) {
+	if (/.*?:\d+ (.*?)\(\) info: func_call (.*)/) {
+	    add_link("$1", "$2");
+	}
+    }
+}
+
+sub set_all_unknown()
+{
+    my $i = 0;
+
+    foreach my $func (keys %param_map){
+	%{$param_map{$func}}->{found} = $UNKNOWN;
+    }
+}
+
+my $file = shift();
+if (!$file) {
+    usage();
+}
+
+if (! -e $file) {
+    printf("Error:  $file does not exist.\n");
+    exit(1);
+}
+
+print("Loading functions...\n");
+load_all($file);
+
+while (1) {
+    my $start_func;
+    my $end_func;
+
+    print("Enter the start function:  ");
+    $start_func = <STDIN>;
+    $start_func =~ s/^\s+|\s+$//g;
+    print("Enter the target function:  ");
+    $end_func = <STDIN>;
+    $end_func =~ s/^\s+|\s+$//g;
+
+
+    print("$start_func to $end_func\n");
+    if ($start_func =~ /./ && $end_func =~ /./) {
+	search($start_func, $end_func);
+    }
+
+    set_all_unknown();
+}
--- /dev/null	Fri Dec 21 15:00:29 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/filter_kernel_deref_check.sh	Fri Dec 21 15:00:29 2018
@@ -0,0 +1,101 @@
+#!/bin/bash
+
+file=$1
+if [[ "$file" = "" ]] ; then
+    echo "Usage:  $0 <file with smatch messages>"
+    exit 1
+fi
+
+IFS="
+"
+
+for line in $(grep 'dereferenced before' $file) ; do
+
+    code_file=$(echo "$line" | cut -d ':' -f1)
+    lineno=$(echo "$line" | cut -d ' ' -f1 | cut -d ':' -f2)
+    function=$(echo "$line" | cut -d ' ' -f2)
+    variable=$(echo "$line" | cut -d "'" -f3)
+    source_line=$(tail -n +$lineno $code_file | head -n 1 | sed -e 's/^\W*//')
+
+    if echo "$source_line" | grep -q rcu_assign_pointer ; then
+	continue
+    fi
+    if echo "$source_line" | grep -q '^\W*tda_' ; then
+	continue
+    fi
+    if echo "$source_line" | grep -q tda_fail ; then
+	continue
+    fi
+    if echo "$source_line" | grep -q '^\W*ATH5K_' ; then
+	continue
+    fi
+    if echo "$source_line" | grep -qw CMDINFO ; then
+	continue
+    fi
+    if echo "$source_line" | grep -qw dump_desc_dbg ; then
+	continue
+    fi
+    if echo "$source_line" | grep -qw CAMERA_IS_OPERATIONAL ; then
+	continue
+    fi
+    if echo "$source_line" | grep -qw USBVISION_IS_OPERATIONAL ; then
+	continue
+    fi
+    if echo "$source_line" | grep -qw DEV_INIT_TEST_WITH_RETURN ; then
+	continue
+    fi
+    if echo "$source_line" | grep -qw TW_PRINTK ; then
+	continue
+    fi
+    if echo "$source_line" | grep -qw RESET_ONE_SEC_TX_CNT ; then
+	continue
+    fi
+    if echo "$source_line" | grep -qw SOCK_DEBUG; then
+	continue
+    fi
+    if echo "$source_line" | grep -qw P80211SKB_RXMETA ; then
+	continue
+    fi
+    if echo "$source_line" | grep -qw ACM_READY ; then
+	continue
+    fi
+    if echo "$source_line" | grep -qw v4l2_subdev_notify ; then
+	continue
+    fi
+    if echo "$source_line" | egrep -qw 'tuner_(err|info)' ; then
+	continue
+    fi
+    if echo "$source_line" | grep -qw DBG_SKB ; then
+	continue
+    fi
+    if echo "$source_line" | grep -qw for_each_mddev ; then
+	continue
+    fi
+    if echo "$source_line" | grep -qw v4l2_subdev_call ; then
+	continue
+    fi
+    if echo "$source_line" | grep -qw VALID_CALLBACK ; then
+	continue
+    fi
+    if [ "$variable" == "bp->dev" ] && echo "$source_line" | grep -qw DP ; then
+	continue
+    fi
+    if echo "$source_line" | grep -qw BNX2X_ERR ; then
+	continue
+    fi
+    if echo "$source_line" | grep -qw FCOE_NETDEV_DBG ; then
+	continue
+    fi
+    if echo "$source_line" | grep -qw __rq_for_each_bio ; then
+	continue
+    fi
+    if echo "$source_line" | grep -qw IPS_DMA_DIR ; then
+	continue
+    fi
+    if [ "$variable" == "dev" ] && echo "$source_line" | grep -qw dprintk ; then
+	continue
+    fi
+
+    echo "$code_file:$lineno $function '$variable': $source_line"
+done
+
--- /dev/null	Fri Dec 21 15:00:29 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/find_expanded_holes.pl	Fri Dec 21 15:00:29 2018
@@ -0,0 +1,18 @@
+#!/usr/bin/perl
+
+use strict;
+
+my $cur_struct = "";
+my $printed = 0;
+
+while (<>) {
+    if ($_ =~ /^struct (\w+) {/) {
+	$cur_struct = $1;
+	$printed = 0;
+	next;
+    }
+    if ($_ =~ /.* hole,.*/ && !$printed) {
+	print "$cur_struct\n";
+	$printed = 1;
+    }
+}
--- /dev/null	Fri Dec 21 15:00:29 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/find_null_params.sh	Fri Dec 21 15:00:29 2018
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+file=$1
+
+if [[ "$file" = "" ]] ; then
+    echo "Usage:  $0 <file with smatch messages>"
+    exit 1
+fi
+
+grep " unchecked " $file | cut -d ' ' -f 5- | sort -u > unchecked
+grep " undefined " $file | cut -d ' ' -f 5- | sort -u > null_calls.txt
+cat null_calls.txt unchecked | sort | uniq -d > null_params.txt
+IFS="
+"
+for i in $(cat null_params.txt) ; do
+	grep "$i" $file | grep -w undefined 
+done
+
+
--- /dev/null	Fri Dec 21 15:00:29 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/follow_params.pl	Fri Dec 21 15:00:29 2018
@@ -0,0 +1,106 @@
+#!/usr/bin/perl
+
+use strict;
+
+sub usage()
+{
+    print "$0 <smatch output file> <function> <parameter>\n";
+    print "Give this program a function and parameter and it follows to find\n";
+    print "how the parameter gets passed down to lower levels.\n'";
+    exit(1);
+}
+
+my %param_map;
+
+my $UNUSED   = 0;
+my $USED     = 1;
+
+sub print_link($)
+{
+    my $link = shift;
+
+    $link =~ s/%/ /;
+    print "$link\n";
+}
+
+sub recurse($)
+{
+    my $link = shift;
+
+    if ($param_map{$link}{used} == $USED) {
+	return;
+    }
+    ${param_map}{$link}->{used} = $USED;
+
+    print_link($link);
+
+    foreach my $l (@{$param_map{$link}{links}}){
+	recurse($l);
+    }
+
+}
+
+sub follow($$)
+{
+    my $f = shift;
+    my $p = shift;
+
+    recurse("$f%$p");
+}
+
+sub add_link($$)
+{
+    my $one = shift;
+    my $two = shift;
+
+    if (!defined($param_map{$one})) {
+	$param_map{$one} = {used => $UNUSED, links => []};
+    }
+    push @{$param_map{$one}{links}}, $two;
+}
+
+sub load_all($)
+{
+    my $file = shift;
+
+    open(FILE, "<$file");
+    while (<FILE>) {
+	if (/.*?:\d+ (.*?)\(\) info: param_mapper (\d+) => (.*?) (\d+)/) {
+	    add_link("$1%$2", "$3%$4");
+	}
+    }
+}
+
+sub set_all_unused()
+{
+    foreach my $func (keys %param_map){
+	($param_map{$func}{used} = $UNUSED);
+    }
+
+}
+
+my $file = shift();
+my $func = shift();
+my $param = shift();
+
+if (!defined($file) or !defined($func) or !defined($param)) {
+    usage();
+}
+
+if (! -e $file) {
+    printf("Error:  $file does not exist.\n");
+    exit(1);
+}
+
+load_all($file);
+
+while (1) {
+    follow($func, $param);
+
+    $func = shift();
+    $param = shift();
+    if (!defined($func) || !defined($param)) {
+	last;
+    }
+    set_all_unused();
+}
--- /dev/null	Fri Dec 21 15:00:29 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/gen_allocation_list.sh	Fri Dec 21 15:00:29 2018
@@ -0,0 +1,32 @@
+#!/bin/bash
+
+file=$1
+project=$(echo "$2" | cut -d = -f 2)
+
+if [[ "$file" = "" ]] ; then
+    echo "Usage:  $0 <file with smatch messages> -p=<project>"
+    exit 1
+fi
+
+if [[ "$project" != "kernel" ]] ; then
+    exit 0
+fi
+
+bin_dir=$(dirname $0)
+remove=$(echo ${bin_dir}/../smatch_data/kernel.allocation_funcs.remove)
+tmp=$(mktemp /tmp/smatch.XXXX)
+
+echo "// list of functions that return a new allocation." \
+    > kernel.allocation_funcs
+echo '// generated by `gen_allocation_list.sh`' >> kernel.allocation_funcs
+grep "allocation func$" $file | cut -s -d ' ' -f 2 | cut -d '(' -f 1 | \
+    sort -u > $tmp
+echo "kmalloc" >> $tmp
+echo "kzalloc" >> $tmp
+echo "kcalloc" >> $tmp
+echo "__alloc_skb" >> $tmp
+cat $tmp $remove $remove 2> /dev/null | sort | uniq -u \
+    >> kernel.allocation_funcs
+rm $tmp
+echo "Done.  List saved as 'kernel.allocation_funcs'"
+
--- /dev/null	Fri Dec 21 15:00:30 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/gen_bit_shifters.sh	Fri Dec 21 15:00:30 2018
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+file=$1
+project=$(echo "$2" | cut -d = -f 2)
+
+if [[ "$file" = "" ]] ; then
+    echo "Usage:  $0 <file with smatch messages> -p=<project>"
+    exit 1
+fi
+
+bin_dir=$(dirname $0)
+remove=$(echo ${bin_dir}/../smatch_data/${project}.bit_shifters.remove)
+tmp=$(mktemp /tmp/smatch.XXXX)
+
+echo "// list of macros used as shifters." \
+    > ${project}.bit_shifters
+echo '// generated by `gen_bit_shifters.sh`' >> ${project}.bit_shifters
+grep "info: bit shifter" $file | cut -s -d "'" -f 2- | sed -e "s/'//g" | sort -u > $tmp
+
+cat $tmp $remove $remove 2> /dev/null | sort | uniq -u >> ${project}.bit_shifters
+rm $tmp
+echo "Done.  List saved as '${project}.bit_shifters'"
+
--- /dev/null	Fri Dec 21 15:00:30 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/gen_dma_funcs.sh	Fri Dec 21 15:00:30 2018
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+file=$1
+project=$(echo "$2" | cut -d = -f 2)
+
+if [[ "$file" = "" ]] ; then
+    echo "Usage:  $0 <file with smatch messages> -p=<project>"
+    exit 1
+fi
+
+if [[ "$project" != "kernel" ]] ; then
+    exit 0
+fi
+
+outfile="kernel.dma_funcs"
+bin_dir=$(dirname $0)
+remove=$(echo ${bin_dir}/../smatch_data/${outfile}.remove)
+tmp=$(mktemp /tmp/smatch.XXXX)
+tmp2=$(mktemp /tmp/smatch.XXXX)
+
+echo "// list of DMA function and buffer parameters." > $outfile
+echo '// generated by `gen_dma_funcs.sh`' >> $outfile
+${bin_dir}/trace_params.pl $file usb_control_msg 6 >> $tmp
+${bin_dir}/trace_params.pl $file usb_fill_bulk_urb 3 >> $tmp
+cat $tmp | sort -u > $tmp2
+mv $tmp2 $tmp
+cat $tmp $remove $remove 2> /dev/null | sort | uniq -u >> $outfile
+rm $tmp
+echo "Done.  List saved as '$outfile'"
--- /dev/null	Fri Dec 21 15:00:30 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/gen_err_ptr_list.sh	Fri Dec 21 15:00:30 2018
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+file=$1
+project=$(echo "$2" | cut -d = -f 2)
+
+if [[ "$file" = "" ]] ; then
+    echo "Usage:  $0 <file with smatch messages> -p=<project>"
+    exit 1
+fi
+
+if [[ "$project" != "kernel" ]] ; then
+    exit 0
+fi
+
+bin_dir=$(dirname $0)
+remove=$(echo ${bin_dir}/../smatch_data/kernel.returns_err_ptr.remove)
+tmp=$(mktemp /tmp/smatch.XXXX)
+
+echo "// list of functions that return a new allocation." \
+    > kernel.returns_err_ptr
+echo '// generated by `gen_err_ptr_list.sh`' >> kernel.returns_err_ptr
+grep "returns_err_ptr$" $file | cut -s -d ' ' -f 2 | cut -d '(' -f 1 | \
+    sort -u > $tmp
+cat $tmp $remove $remove 2> /dev/null | sort | uniq -u \
+    >> kernel.returns_err_ptr
+rm $tmp
+echo "Done.  List saved as 'kernel.returns_err_ptr'"
+
--- /dev/null	Fri Dec 21 15:00:30 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/gen_expects_err_ptr.sh	Fri Dec 21 15:00:30 2018
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+file=$1
+project=$(echo "$2" | cut -d = -f 2)
+
+if [[ "$file" = "" ]] ; then
+    echo "Usage:  $0 <file with smatch messages> -p=<project>"
+    exit 1
+fi
+
+if [[ "$project" != "kernel" ]] ; then
+    exit 0
+fi
+
+outfile="kernel.expects_err_ptr"
+bin_dir=$(dirname $0)
+remove=$(echo ${bin_dir}/../smatch_data/${outfile}.remove)
+tmp=$(mktemp /tmp/smatch.XXXX)
+
+echo "// list of functions which expect an ERR_PTR." > $outfile
+echo '// generated by `gen_expects_err_ptr.sh`' >> $outfile
+grep -w "expects ERR_PTR" $file | cut -d ' ' -f 2,6 | \
+    sed -e 's/([1234567890]*)//' | sort -u > $tmp
+cat $tmp $remove $remove 2> /dev/null | sort | uniq -u >> $outfile
+rm $tmp
+echo "Done.  List saved as '$outfile'"
--- /dev/null	Fri Dec 21 15:00:30 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/gen_frees_list.sh	Fri Dec 21 15:00:30 2018
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+file=$1
+project=$(echo "$2" | cut -d = -f 2)
+
+if [[ "$file" = "" ]] ; then
+    echo "Usage:  $0 <file with smatch messages> -p=<project>"
+    exit 1
+fi
+
+if [[ "$project" != "kernel" ]] ; then
+    exit 0
+fi
+
+bin_dir=$(dirname $0)
+remove=$(echo ${bin_dir}/../smatch_data/kernel.frees_argument.remove)
+tmp=$(mktemp /tmp/smatch.XXXX)
+
+echo "// list of functions and the argument they free." > kernel.frees_argument
+echo '// generated by `gen_frees_list.sh`' >> kernel.frees_argument
+grep -w free_arg $file | cut -d ' ' -f 5- >> $tmp
+cat $tmp $remove $remove 2> /dev/null | sort | uniq -u >> kernel.frees_argument
+rm $tmp
+echo "Done.  List saved as 'kernel.frees_argument'"
+
--- /dev/null	Fri Dec 21 15:00:30 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/gen_gfp_flags.sh	Fri Dec 21 15:00:30 2018
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+file=$1
+project=$(echo "$2" | cut -d = -f 2)
+
+if [[ "$file" = "" ]] ; then
+    echo "Usage:  $0 <file with smatch messages> -p=<project>"
+    exit 1
+fi
+
+if [[ "$project" != "kernel" ]] ; then
+    exit 0
+fi
+
+outfile="kernel.gfp_flags"
+bin_dir=$(dirname $0)
+remove=$(echo ${bin_dir}/../smatch_data/${outfile}.remove)
+tmp=$(mktemp /tmp/smatch.XXXX)
+tmp2=$(mktemp /tmp/smatch.XXXX)
+
+echo "// list of GFP flag parameters." > $outfile
+echo '// generated by `gen_gfp_flags.sh`' >> $outfile
+${bin_dir}/trace_params.pl $file kmalloc 1 >> $tmp
+${bin_dir}/trace_params.pl $file kzalloc 1 >> $tmp
+${bin_dir}/trace_params.pl $file kcalloc 2 >> $tmp
+cat $tmp | sort -u > $tmp2
+mv $tmp2 $tmp
+cat $tmp $remove $remove 2> /dev/null | sort | uniq -u >> $outfile
+rm $tmp
+echo "Done.  List saved as '$outfile'"
--- /dev/null	Fri Dec 21 15:00:30 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/gen_implicit_dependencies.sh	Fri Dec 21 15:00:30 2018
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+file=$1
+project=$(echo "$2" | cut -d = -f 2)
+
+if [[ "$file" = "" ]] ; then
+    echo "Usage:  $0 <file with smatch messages> -p=<project>"
+    exit 1
+fi
+
+if [[ "$project" != "kernel" ]] ; then
+    exit 0
+fi
+
+bin_dir=$(dirname $0)
+remove=$(echo ${bin_dir}/../smatch_data/kernel.implicit_dependencies.remove)
+tmp=$(mktemp /tmp/smatch.XXXX)
+
+# echo "// list of syscalls and the fields they write/read to." > kernel.implicit_dependencies
+# echo '// generated by `gen_implicit_dependencies.sh`' >> kernel.implicit_dependencies
+grep -w read_list $file >> $tmp
+grep -w write_list $file >> $tmp
+# cat $tmp $remove $remove 2> /dev/null | sort | uniq -u >> kernel.implicit_dependencies
+cat $tmp >> kernel.implicit_dependencies
+rm $tmp
+echo "Done.  List saved as 'kernel.implicit_dependencies"
--- /dev/null	Fri Dec 21 15:00:30 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/gen_no_return_funcs.sh	Fri Dec 21 15:00:30 2018
@@ -0,0 +1,30 @@
+#!/bin/bash
+
+file=$1
+project=$(echo "$2" | cut -d = -f 2)
+
+if [[ "$file" = "" ]] ; then
+    echo "Usage:  $0 <file with smatch messages> -p=<project>"
+    exit 1
+fi
+
+outfile="${project}.no_return_funcs"
+bin_dir=$(dirname $0)
+add_file=$(echo ${bin_dir}/../smatch_data/${outfile}.add)
+remove=$(echo ${bin_dir}/../smatch_data/${outfile}.remove)
+tmp=$(mktemp /tmp/smatch.XXXX)
+tmp2=$(mktemp /tmp/smatch.XXXX)
+
+echo "// list of functions which don't return." > $outfile
+echo '// generated by `gen_no_return_funcs.sh`' >> $outfile
+cat $(echo ${bin_dir}/../smatch_data/no_return_funcs) >> $outfile
+cat $add_file >> $outfile 2> /dev/null
+
+grep no_return_funcs $file | cut -d ' ' -f 2 | cut -d '(' -f 1 > $tmp
+
+cat $tmp | sort -u > $tmp2
+mv $tmp2 $tmp
+cat $tmp $remove $remove 2> /dev/null | sort | uniq -u >> $outfile
+rm $tmp
+echo "Done.  List saved as '$outfile'"
+echo "Copy it to smatch_data/<project>.no_return_funcs"
--- /dev/null	Fri Dec 21 15:00:30 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/gen_puts_list.sh	Fri Dec 21 15:00:30 2018
@@ -0,0 +1,25 @@
+#!/bin/bash
+
+file=$1
+project=$(echo "$2" | cut -d = -f 2)
+
+if [[ "$file" = "" ]] ; then
+    echo "Usage:  $0 <file with smatch messages> -p=<project>"
+    exit 1
+fi
+
+if [[ "$project" != "kernel" ]] ; then
+    exit 0
+fi
+
+bin_dir=$(dirname $0)
+remove=$(echo ${bin_dir}/../smatch_data/kernel.puts_argument.remove)
+tmp=$(mktemp /tmp/smatch.XXXX)
+
+echo "// list of functions and the argument they decrement the ref of." > kernel.puts_argument
+echo '// generated by `gen_puts_list.sh`' >> kernel.puts_argument
+grep -w puts_arg $file | cut -d ' ' -f 5- >> $tmp
+cat $tmp $remove $remove 2> /dev/null | sort | uniq -u >> kernel.puts_argument
+rm $tmp
+echo "Done.  List saved as 'kernel.puts_argument'"
+
--- /dev/null	Fri Dec 21 15:00:30 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/gen_returns_held.sh	Fri Dec 21 15:00:30 2018
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+file=$1
+project=$(echo "$2" | cut -d = -f 2)
+
+if [[ "$file" = "" ]] ; then
+    echo "Usage:  $0 <file with smatch messages> -p=<project>"
+    exit 1
+fi
+
+if [[ "$project" != "kernel" ]] ; then
+    exit 0
+fi
+
+bin_dir=$(dirname $0)
+remove=$(echo ${bin_dir}/../smatch_data/kernel.returns_held.remove)
+tmp=$(mktemp /tmp/smatch.XXXX)
+
+echo "// list of functions that return a held device." \
+    > kernel.returns_held_funcs
+echo '// generated by `gen_returns_held.sh`' >> kernel.returns_held_funcs
+grep "returned dev is held" $file | cut -s -d ' ' -f 2 | cut -d '(' -f 1 | \
+    sort -u > $tmp
+cat $tmp $remove $remove 2> /dev/null | sort | uniq -u \
+    >> kernel.returns_held_funcs
+rm $tmp
+echo "Done.  List saved as 'kernel.returns_held_funcs'"
+
--- /dev/null	Fri Dec 21 15:00:30 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/gen_rosenberg_funcs.sh	Fri Dec 21 15:00:30 2018
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+file=$1
+project=$(echo "$2" | cut -d = -f 2)
+
+if [[ "$file" = "" ]] ; then
+    echo "Usage:  $0 <file with smatch messages> -p=<project>"
+    exit 1
+fi
+
+if [[ "$project" != "kernel" ]] ; then
+    exit 0
+fi
+
+outfile="kernel.rosenberg_funcs"
+bin_dir=$(dirname $0)
+remove=$(echo ${bin_dir}/../smatch_data/${outfile}.remove)
+tmp=$(mktemp /tmp/smatch.XXXX)
+tmp2=$(mktemp /tmp/smatch.XXXX)
+
+echo "// list of copy_to_user function and buffer parameters." > $outfile
+echo '// generated by `gen_rosenberg_funcs.sh`' >> $outfile
+${bin_dir}/trace_params.pl $file copy_to_user 1 >> $tmp
+${bin_dir}/trace_params.pl $file nla_put 3 >> $tmp
+cat $tmp | sort -u > $tmp2
+mv $tmp2 $tmp
+cat $tmp $remove $remove 2> /dev/null | sort | uniq -u >> $outfile
+rm $tmp
+echo "Done.  List saved as '$outfile'"
--- /dev/null	Fri Dec 21 15:00:30 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/gen_sizeof_param.sh	Fri Dec 21 15:00:30 2018
@@ -0,0 +1,31 @@
+#!/bin/bash
+
+file=$1
+project=$(echo "$2" | cut -d = -f 2)
+
+if [[ "$file" = "" ]] ; then
+    echo "Usage:  $0 <file with smatch messages> -p=<project>"
+    exit 1
+fi
+
+outfile="${project}.sizeof_param"
+bin_dir=$(dirname $0)
+remove=$(echo ${bin_dir}/../smatch_data/${outfile}.remove)
+tmp=$(mktemp /tmp/smatch.XXXX)
+tmp2=$(mktemp /tmp/smatch.XXXX)
+
+
+echo "// list of function parameters that are the size of a buffer." > $outfile
+echo '// generated by `gen_sizeof_param.sh`' >> $outfile
+
+grep sizeof_param $file | grep '[0-9] [0-9]$' | cut -d ' ' -f 5- | \
+    sort -u | sed -e "s/'//g" > $tmp
+grep sizeof_param $file | grep '[0-9] -1$' | cut -d ' ' -f 5- | \
+    sort -u | sed -e "s/'//g" >> $tmp
+grep -f $remove $tmp >> $tmp2 2> /dev/null
+cat $tmp $tmp2 2> /dev/null | sort | uniq -u >> $outfile
+rm $tmp
+rm $tmp2
+
+echo "Done.  List saved as '$outfile'"
+
--- /dev/null	Fri Dec 21 15:00:30 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/gen_trinity.sh	Fri Dec 21 15:00:30 2018
@@ -0,0 +1,29 @@
+#!/bin/bash
+
+cat << EOF > trinity_smatch.h
+
+#pragma once
+
+/* Syscalls from arch/x86/syscalls/syscall_64.tbl */
+
+#include "sanitise.h"
+#include "syscall.h"
+#include "syscalls/syscalls.h"
+
+EOF
+
+cat smatch_trinity_* >> trinity_smatch.c
+
+
+for i in $(grep syscallentry smatch_trinity_*  | cut -d ' ' -f 3) ; do
+    echo "extern struct syscallentry $i;" >> trinity_smatch.h
+done
+
+echo "" >> trinity_smatch.h
+echo "struct syscalltable syscalls_smatch[] = {" >> trinity_smatch.h
+
+for i in $(grep syscallentry smatch_trinity_*  | cut -d ' ' -f 3) ; do
+    echo "{ .entry = &$i },"  >> trinity_smatch.h
+done
+
+echo "};" >> trinity_smatch.h
--- /dev/null	Fri Dec 21 15:00:31 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/gen_unwind_functions.sh	Fri Dec 21 15:00:31 2018
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+file=$1
+project=$(echo "$2" | cut -d = -f 2)
+
+if [[ "$file" = "" ]] ; then
+    echo "Usage:  $0 <file with smatch messages> -p=<project>"
+    exit 1
+fi
+
+if [[ "$project" != "kernel" ]] ; then
+    exit 0
+fi
+
+outfile="kernel.unwind_functions"
+bin_dir=$(dirname $0)
+remove=$(echo ${bin_dir}/../smatch_data/${outfile}.remove)
+tmp=$(mktemp /tmp/smatch.XXXX)
+tmp2=$(mktemp /tmp/smatch.XXXX)
+
+echo "// list of unwind functions." > $outfile
+echo '// generated by `gen_unwind_functions.sh`' >> $outfile
+grep "is unwind function" $file | cut -d ' ' -f 2 | cut -d '(' -f 1 >> $tmp
+cat $tmp | sort -u > $tmp2
+mv $tmp2 $tmp
+cat $tmp $remove $remove 2> /dev/null | sort | uniq -u >> $outfile
+rm $tmp
+echo "Done.  List saved as '$outfile'"
--- /dev/null	Fri Dec 21 15:00:31 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/generisize.pl	Fri Dec 21 15:00:31 2018
@@ -0,0 +1,64 @@
+#!/usr/bin/perl
+
+use strict;
+
+sub help()
+{
+    print "usage: $0 [-r]\n";
+    print "Counts the number of errors of each type.\n";
+    print "-r means down to the nearest 10.\n";
+    exit 1;
+}
+
+my $round;
+my $arg = shift;
+if ($arg =~ /-h/) {
+    help();
+} elsif ($arg =~ /-r/) {
+    $round = 1;
+}
+
+my %msgs;
+
+sub add_msg($)
+{
+    my $msg = shift;
+
+    if (defined $msgs{$msg}) {
+	$msgs{$msg}++;
+    } else {
+	$msgs{$msg} = 1;
+    }
+}
+
+while (<>) {
+    s/^.*?:\d+(|:\d+:) .*? //;
+    s/[us](16|32|64)(min|max)//g;
+    s/0x\w+//g;
+    s/[01234567890]//g;
+    if ($_ =~ /can't/) {
+        s/(.*can't.*').*?('.*)/$1 $2/;
+        s/(.*?)'.*?'(.*can't.*)/$1 $2/;
+    } elsif ($_ =~ /don't/) {
+    	s/(.*don't.*').*?('.*)/$1 $2/;
+    } else {
+    	s/'.*?'/''/g;
+    }
+    s/,//g;
+    s/\(\w+ returns null\)/(... returns null)/;
+    s/dma on the stack \(.*?\)/dma on the stack (...)/;
+    s/possible ERR_PTR '' to .*/possible ERR_PTR '' to .../;
+    s/inconsistent returns ([^ ]+?) locked \(\)/inconsistent returns ... locked ()/;
+    s/(.*) [^ ]* (too large for) [^ ]+ (.*)/$1 $2 $3/;
+
+    add_msg($_);
+}
+
+foreach my $key (sort { $msgs{$b} <=> $msgs{$a} } keys %msgs) {
+    my $count = $msgs{$key};
+
+    if ($round) {
+	$count = $msgs{$key} - $msgs{$key} % 10;
+    }
+    print "$count $key";
+}
--- /dev/null	Fri Dec 21 15:00:31 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/implicit_dependencies/README	Fri Dec 21 15:00:31 2018
@@ -0,0 +1,6 @@
+Python module for parsing kernel.implicit_dependencies
+
+`python main.py -h` for usage.
+run `python main.py -v -p` to generate verbose and pretty print.
+
+To generate kernel.implicit_dependencies, run `smatch_scripts/build_kernel_data.sh`
--- /dev/null	Fri Dec 21 15:00:31 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/implicit_dependencies/constants.py	Fri Dec 21 15:00:31 2018
@@ -0,0 +1,28 @@
+from collections import defaultdict
+
+# location of kernel.implicit_dependencies
+IMPL_DEP_FILE_STR = "../../smatch_data/kernel.implicit_dependencies"
+OUTPUT_FILE_STR = "implicit_dependencies"
+
+# struct fields to ignore, because they are too common
+GLOBAL_BLACKLIST = [
+    ('fd', 'file'),
+]
+
+# here we can manually add struct fields that smatch missed
+hardcode_syscall_write_fields = {}
+
+# here we can manually add struct fields that smatch missed
+hardcode_syscall_read_fields = {
+    "msync": [("vm_area_struct", "vm_flags"), ("vm_area_struct", "vm_file")]
+}
+
+SYSCALL_PREFIXES = [
+    "SYSC_",
+    "C_SYSC_",
+    "sys_",
+]
+
+class ListType(object):
+    READ = "read_list"
+    WRITE = "write_list"
--- /dev/null	Fri Dec 21 15:00:31 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/implicit_dependencies/main.py	Fri Dec 21 15:00:31 2018
@@ -0,0 +1,39 @@
+import argparse
+import sys
+
+from constants import (
+    IMPL_DEP_FILE_STR,
+    OUTPUT_FILE_STR,
+)
+from parser import Parser
+
+def main():
+    arg_parser = argparse.ArgumentParser(
+        description="Control module for tracking implicit dependencies"
+    )
+    arg_parser.add_argument(
+        "-f", "--file", default=IMPL_DEP_FILE_STR,
+        help="path to kernel.implicit_dependencies",
+    )
+    arg_parser.add_argument(
+        "-o", "--output", default=OUTPUT_FILE_STR,
+        help="where to output info",
+    )
+    arg_parser.add_argument(
+        "-v", "--verbose", action="store_true",
+        help="if verbose, we list what fields are responsible for the dependency"
+    )
+    arg_parser.add_argument(
+        "-p", "--pretty", action="store_true",
+        help="print implicit dependencies in pretty format"
+    )
+    args = arg_parser.parse_args()
+
+    p = Parser(args.file, output_file_str=args.output, verbose=args.verbose, pretty=args.pretty)
+    p.parse()
+    p.write()
+    p.close()
+
+
+if __name__ == "__main__":
+    sys.exit(main())
--- /dev/null	Fri Dec 21 15:00:31 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/implicit_dependencies/parser.py	Fri Dec 21 15:00:31 2018
@@ -0,0 +1,152 @@
+from collections import defaultdict
+import copy
+import json
+import sys
+import pprint
+
+from constants import (
+    GLOBAL_BLACKLIST,
+    IMPL_DEP_FILE_STR,
+    OUTPUT_FILE_STR,
+    SYSCALL_PREFIXES,
+    ListType,
+    hardcode_syscall_read_fields,
+    hardcode_syscall_write_fields,
+)
+
+class Parser(object):
+    def __init__(
+        self,
+        impl_dep_file_str=IMPL_DEP_FILE_STR,
+        output_file_str=OUTPUT_FILE_STR,
+        verbose=False,
+        pretty=False
+    ):
+        try:
+            self.impl_dep_file = file(impl_dep_file_str, 'r')
+            self.output_file = file(output_file_str + '.json', 'w+')
+            if verbose:
+                self.output_file_verbose = file(output_file_str + '_verbose.json', 'w+')
+            if pretty:
+                self.pretty_output_file = file(output_file_str + '.pretty', 'w+')
+                self.pretty_output_file_verbose = file(output_file_str + '_verbose.pretty', 'w+')
+        except IOError:
+            sys.stderr.write("ERROR: Cannot open files %s %s.\n" % (impl_dep_file_str, output_file_str))
+            sys.exit(1)
+        self.verbose = verbose
+        self.pretty = pretty
+        self.syscall_read_fields = defaultdict(set)
+        self.syscall_write_fields = defaultdict(set)
+        self.implicit_dependencies = defaultdict(set)
+        self.verbose_impl_dep = defaultdict(list)
+        self.deref_counter = defaultdict(int)  # count which struct->members are most common
+
+        for syscall,fields in hardcode_syscall_read_fields.iteritems():
+            self.syscall_read_fields[syscall].update(set(fields))
+
+        for syscall,fields in hardcode_syscall_write_fields.iteritems():
+            self.syscall_write_fields[syscall].update(set(fields))
+
+    def _sanitize_syscall(self, syscall):
+        for prefix in SYSCALL_PREFIXES:
+            if syscall.startswith(prefix):
+                return syscall[len(prefix):]
+        return syscall
+
+    def _deref_to_tuple(self, deref):
+        """ (struct a)->b ==> (a,b) """
+        struct, member = deref.split('->')
+        struct = struct[1:-1]  # strip parens
+        struct = struct.split(' ')[1]  # drop struct keyword
+        return (struct, member)
+
+    def _split_field(self, field):
+        field = field.strip()
+        field = field[1: -1]  # strip square brackets
+        derefs = [struct.strip() for struct in field.strip().split(',') if struct]
+        return map(
+            lambda deref: self._deref_to_tuple(deref),
+            derefs
+        )
+
+    def _sanitize_line(self, line):
+        syscall_and_listtype, field = line.split(':')
+        syscall, list_type = syscall_and_listtype.split(' ')
+        syscall = self._sanitize_syscall(syscall)
+        derefs = self._split_field(field)
+        return syscall, list_type, derefs
+
+    def _add_fields(self, syscall, list_type, derefs):
+        if list_type == ListType.READ:
+            d = self.syscall_read_fields
+        elif list_type == ListType.WRITE:
+            d = self.syscall_write_fields
+        for deref in derefs:
+            if deref in GLOBAL_BLACKLIST:  # ignore spammy structs
+                continue
+            d[syscall].add(deref)
+
+    def _construct_implicit_deps(self):
+        """ just do a naive O(n^2) loop to see intersections between write_list and read_list """
+        for this_call,read_fields in self.syscall_read_fields.iteritems():
+            for that_call,write_fields in self.syscall_write_fields.iteritems():
+                if that_call == this_call:  # calls are obviously dependent on themselves. ignore.
+                    continue
+                intersection = read_fields & write_fields
+                if intersection:
+                    self.implicit_dependencies[this_call].add(that_call)
+                if intersection and self.verbose:
+                    self.verbose_impl_dep[this_call].append({
+                        'call': that_call,
+                        'reason': intersection,
+                    })
+                    for deref in intersection:
+                        self.deref_counter[deref] += 1
+
+    def parse(self):
+        for line in self.impl_dep_file:
+            syscall, list_type, derefs = self._sanitize_line(line)
+            self._add_fields(syscall, list_type, derefs)
+        # pprint.pprint(dict(self.syscall_write_fields))
+        # pprint.pprint(dict(self.syscall_read_fields))
+        self._construct_implicit_deps()
+        # pprint.pprint(dict(self.implicit_dependencies))
+        # pprint.pprint(dict(self.verbose_impl_dep))
+
+    def _listify_verbose_reason(self, reason):
+        r = copy.deepcopy(reason)
+        r['reason'] = list(r['reason'])
+        r['reason'] = map(
+            lambda (struct,field): struct + '->' + field,
+            r['reason']
+        )
+        return r
+
+    def _get_json_dependencies(self):
+        implicit_dependencies = {}
+        verbose_impl_dep = {}
+        for call, dep_set in self.implicit_dependencies.iteritems():
+            implicit_dependencies[call] = list(dep_set)
+        for call, call_reasons in self.verbose_impl_dep.iteritems():
+            verbose_impl_dep[call] = map(
+                lambda reason: self._listify_verbose_reason(reason),
+                call_reasons,
+            )
+        return implicit_dependencies, verbose_impl_dep
+
+    def write(self):
+        implicit_dependencies, verbose_impl_dep = self._get_json_dependencies()
+        json.dump(implicit_dependencies, self.output_file)
+        if self.verbose:
+            json.dump(verbose_impl_dep, self.output_file_verbose)
+        if self.pretty:
+            pprint.pprint(dict(self.implicit_dependencies), self.pretty_output_file)
+            pprint.pprint(dict(self.verbose_impl_dep), self.pretty_output_file_verbose)
+        for deref, count in sorted(self.deref_counter.iteritems(), key=lambda (k,v): (v,k)):
+            print "%s: %d" % (deref, count)
+
+    def close(self):
+        self.output_file.close()
+        self.impl_dep_file.close()
+        if self.verbose:
+            self.output_file_verbose.close()
--- /dev/null	Fri Dec 21 15:00:31 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/implicit_dependencies/with_structs/implicit_dependencies	Fri Dec 21 15:00:31 2018
@@ -0,0 +1,12227 @@
+{'accept4': set(['accept4',
+                 'bind',
+                 'bpf',
+                 'connect',
+                 'copy_file_range',
+                 'epoll_ctl',
+                 'epoll_wait',
+                 'fallocate',
+                 'fchdir',
+                 'fchmod',
+                 'fchown',
+                 'fcntl',
+                 'fcntl64',
+                 'fdatasync',
+                 'fgetxattr',
+                 'flistxattr',
+                 'flock',
+                 'fremovexattr',
+                 'fsetxattr',
+                 'fstatfs',
+                 'fstatfs64',
+                 'fsync',
+                 'ftruncate',
+                 'futimesat',
+                 'getdents',
+                 'getdents64',
+                 'getpeername',
+                 'getsockname',
+                 'getsockopt',
+                 'inotify_add_watch',
+                 'inotify_rm_watch',
+                 'ioctl',
+                 'listen',
+                 'llseek',
+                 'lseek',
+                 'mq_getsetattr',
+                 'mq_notify',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'old_readdir',
+                 'perf_event_open',
+                 'pread64',
+                 'preadv',
+                 'preadv2',
+                 'preadv64',
+                 'preadv64v2',
+                 'pwrite64',
+                 'pwritev',
+                 'pwritev2',
+                 'pwritev64',
+                 'pwritev64v2',
+                 'read',
+                 'readahead',
+                 'readv',
+                 'recvfrom',
+                 'sendfile',
+                 'sendfile64',
+                 'sendto',
+                 'setsockopt',
+                 'shutdown',
+                 'signalfd4',
+                 'splice',
+                 'sync_file_range',
+                 'syncfs',
+                 'tee',
+                 'utime',
+                 'utimensat',
+                 'vmsplice',
+                 'write',
+                 'writev']),
+ 'acct': set(['accept4',
+              'acct',
+              'dup',
+              'dup3',
+              'epoll_create1',
+              'epoll_ctl',
+              'eventfd2',
+              'flock',
+              'memfd_create',
+              'mmap_pgoff',
+              'mq_open',
+              'open',
+              'open_by_handle_at',
+              'openat',
+              'perf_event_open',
+              'pipe2',
+              'remap_file_pages',
+              'setns',
+              'shmat',
+              'shmctl',
+              'shmdt',
+              'socket',
+              'socketpair',
+              'swapoff',
+              'swapon',
+              'uselib']),
+ 'alarm': set(['adjtimex',
+               'alarm',
+               'clock_adjtime',
+               'getitimer',
+               'getrusage',
+               'ppoll',
+               'select',
+               'setitimer',
+               'settimeofday',
+               'wait4',
+               'waitid']),
+ 'bind': set(['accept4',
+              'bind',
+              'bpf',
+              'connect',
+              'copy_file_range',
+              'epoll_ctl',
+              'epoll_wait',
+              'fallocate',
+              'fchdir',
+              'fchmod',
+              'fchown',
+              'fcntl',
+              'fcntl64',
+              'fdatasync',
+              'fgetxattr',
+              'flistxattr',
+              'flock',
+              'fremovexattr',
+              'fsetxattr',
+              'fstatfs',
+              'fstatfs64',
+              'fsync',
+              'ftruncate',
+              'futimesat',
+              'getdents',
+              'getdents64',
+              'getpeername',
+              'getsockname',
+              'getsockopt',
+              'inotify_add_watch',
+              'inotify_rm_watch',
+              'ioctl',
+              'listen',
+              'llseek',
+              'lseek',
+              'mq_getsetattr',
+              'mq_notify',
+              'mq_timedreceive',
+              'mq_timedsend',
+              'old_readdir',
+              'perf_event_open',
+              'pread64',
+              'preadv',
+              'preadv2',
+              'preadv64',
+              'preadv64v2',
+              'pwrite64',
+              'pwritev',
+              'pwritev2',
+              'pwritev64',
+              'pwritev64v2',
+              'read',
+              'readahead',
+              'readv',
+              'recvfrom',
+              'sendfile',
+              'sendfile64',
+              'sendto',
+              'setsockopt',
+              'shutdown',
+              'signalfd4',
+              'splice',
+              'sync_file_range',
+              'syncfs',
+              'tee',
+              'utime',
+              'utimensat',
+              'vmsplice',
+              'write',
+              'writev']),
+ 'bpf': set(['accept4',
+             'acct',
+             'bind',
+             'bpf',
+             'capget',
+             'clone',
+             'connect',
+             'copy_file_range',
+             'dup',
+             'dup3',
+             'epoll_create1',
+             'epoll_ctl',
+             'epoll_wait',
+             'eventfd2',
+             'fallocate',
+             'fchdir',
+             'fchmod',
+             'fchown',
+             'fcntl',
+             'fcntl64',
+             'fdatasync',
+             'fgetxattr',
+             'flistxattr',
+             'flock',
+             'fork',
+             'fremovexattr',
+             'fsetxattr',
+             'fstatfs',
+             'fstatfs64',
+             'fsync',
+             'ftruncate',
+             'futimesat',
+             'get_robust_list',
+             'getdents',
+             'getdents64',
+             'getitimer',
+             'getpeername',
+             'getpgid',
+             'getppid',
+             'getpriority',
+             'getrusage',
+             'getsid',
+             'getsockname',
+             'getsockopt',
+             'inotify_add_watch',
+             'inotify_rm_watch',
+             'ioctl',
+             'ioperm',
+             'ioprio_get',
+             'ioprio_set',
+             'keyctl',
+             'kill',
+             'listen',
+             'llseek',
+             'lseek',
+             'memfd_create',
+             'migrate_pages',
+             'mmap_pgoff',
+             'move_pages',
+             'mq_getsetattr',
+             'mq_notify',
+             'mq_open',
+             'mq_timedreceive',
+             'mq_timedsend',
+             'msgrcv',
+             'old_readdir',
+             'open',
+             'open_by_handle_at',
+             'openat',
+             'perf_event_open',
+             'pipe2',
+             'prctl',
+             'pread64',
+             'preadv',
+             'preadv2',
+             'preadv64',
+             'preadv64v2',
+             'prlimit64',
+             'ptrace',
+             'pwrite64',
+             'pwritev',
+             'pwritev2',
+             'pwritev64',
+             'pwritev64v2',
+             'read',
+             'readahead',
+             'readv',
+             'recvfrom',
+             'remap_file_pages',
+             'rt_sigaction',
+             'rt_sigprocmask',
+             'rt_sigtimedwait',
+             'sched_getaffinity',
+             'sched_getattr',
+             'sched_getparam',
+             'sched_getscheduler',
+             'sched_rr_get_interval',
+             'sched_setaffinity',
+             'sched_setattr',
+             'sched_setparam',
+             'sched_setscheduler',
+             'semtimedop',
+             'sendfile',
+             'sendfile64',
+             'sendto',
+             'setitimer',
+             'setns',
+             'setpgid',
+             'setpriority',
+             'setsid',
+             'setsockopt',
+             'shmat',
+             'shmctl',
+             'shmdt',
+             'shutdown',
+             'sigaction',
+             'sigaltstack',
+             'signal',
+             'signalfd4',
+             'socket',
+             'socketpair',
+             'splice',
+             'swapoff',
+             'swapon',
+             'sync_file_range',
+             'syncfs',
+             'tee',
+             'umount',
+             'uselib',
+             'utime',
+             'utimensat',
+             'vfork',
+             'vmsplice',
+             'write',
+             'writev']),
+ 'brk': set(['brk',
+             'get_mempolicy',
+             'getrusage',
+             'io_cancel',
+             'io_destroy',
+             'io_getevents',
+             'io_setup',
+             'madvise',
+             'mbind',
+             'migrate_pages',
+             'mincore',
+             'mlockall',
+             'modify_ldt',
+             'move_pages',
+             'mprotect',
+             'mremap',
+             'munlock',
+             'munlockall',
+             'pkey_mprotect',
+             'prctl',
+             'remap_file_pages',
+             'shmdt',
+             'swapoff']),
+ 'capset': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'clock_adjtime': set(['clock_adjtime',
+                       'clock_getres',
+                       'clock_gettime',
+                       'clock_nanosleep',
+                       'clock_settime',
+                       'timer_create',
+                       'timer_delete',
+                       'timer_gettime',
+                       'timer_settime']),
+ 'clock_nanosleep': set(['clock_adjtime',
+                         'clock_getres',
+                         'clock_gettime',
+                         'clock_nanosleep',
+                         'clock_settime',
+                         'epoll_wait',
+                         'faccessat',
+                         'fchmod',
+                         'fchmodat',
+                         'fchown',
+                         'fchownat',
+                         'fstat',
+                         'ftruncate',
+                         'futex',
+                         'futimesat',
+                         'inotify_add_watch',
+                         'io_getevents',
+                         'ioctl',
+                         'linkat',
+                         'memfd_create',
+                         'mq_getsetattr',
+                         'mq_notify',
+                         'mq_timedreceive',
+                         'mq_timedsend',
+                         'mq_unlink',
+                         'nanosleep',
+                         'newfstat',
+                         'poll',
+                         'ppoll',
+                         'pselect6',
+                         'readlinkat',
+                         'recvmmsg',
+                         'rt_sigtimedwait',
+                         'sched_rr_get_interval',
+                         'select',
+                         'semtimedop',
+                         'sendfile',
+                         'sendfile64',
+                         'settimeofday',
+                         'stime',
+                         'swapoff',
+                         'swapon',
+                         'timer_create',
+                         'timer_delete',
+                         'timer_gettime',
+                         'timer_settime',
+                         'timerfd_gettime',
+                         'timerfd_settime',
+                         'unlink',
+                         'unlinkat',
+                         'uselib',
+                         'utime']),
+ 'clock_settime': set(['clock_adjtime',
+                       'clock_getres',
+                       'clock_gettime',
+                       'clock_nanosleep',
+                       'clock_settime',
+                       'timer_create',
+                       'timer_delete',
+                       'timer_gettime',
+                       'timer_settime']),
+ 'connect': set(['accept4',
+                 'bind',
+                 'bpf',
+                 'connect',
+                 'copy_file_range',
+                 'epoll_ctl',
+                 'epoll_wait',
+                 'fallocate',
+                 'fchdir',
+                 'fchmod',
+                 'fchown',
+                 'fcntl',
+                 'fcntl64',
+                 'fdatasync',
+                 'fgetxattr',
+                 'flistxattr',
+                 'flock',
+                 'fremovexattr',
+                 'fsetxattr',
+                 'fstatfs',
+                 'fstatfs64',
+                 'fsync',
+                 'ftruncate',
+                 'futimesat',
+                 'getdents',
+                 'getdents64',
+                 'getpeername',
+                 'getsockname',
+                 'getsockopt',
+                 'inotify_add_watch',
+                 'inotify_rm_watch',
+                 'ioctl',
+                 'listen',
+                 'llseek',
+                 'lseek',
+                 'mq_getsetattr',
+                 'mq_notify',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'old_readdir',
+                 'perf_event_open',
+                 'pread64',
+                 'preadv',
+                 'preadv2',
+                 'preadv64',
+                 'preadv64v2',
+                 'pwrite64',
+                 'pwritev',
+                 'pwritev2',
+                 'pwritev64',
+                 'pwritev64v2',
+                 'read',
+                 'readahead',
+                 'readv',
+                 'recvfrom',
+                 'sendfile',
+                 'sendfile64',
+                 'sendto',
+                 'setsockopt',
+                 'shutdown',
+                 'signalfd4',
+                 'splice',
+                 'sync_file_range',
+                 'syncfs',
+                 'tee',
+                 'utime',
+                 'utimensat',
+                 'vmsplice',
+                 'write',
+                 'writev']),
+ 'copy_file_range': set(['accept4',
+                         'bind',
+                         'bpf',
+                         'connect',
+                         'copy_file_range',
+                         'epoll_ctl',
+                         'epoll_wait',
+                         'fallocate',
+                         'fchdir',
+                         'fchmod',
+                         'fchown',
+                         'fcntl',
+                         'fcntl64',
+                         'fdatasync',
+                         'fgetxattr',
+                         'flistxattr',
+                         'flock',
+                         'fremovexattr',
+                         'fsetxattr',
+                         'fstatfs',
+                         'fstatfs64',
+                         'fsync',
+                         'ftruncate',
+                         'futimesat',
+                         'getdents',
+                         'getdents64',
+                         'getpeername',
+                         'getsockname',
+                         'getsockopt',
+                         'inotify_add_watch',
+                         'inotify_rm_watch',
+                         'ioctl',
+                         'listen',
+                         'llseek',
+                         'lseek',
+                         'mq_getsetattr',
+                         'mq_notify',
+                         'mq_timedreceive',
+                         'mq_timedsend',
+                         'old_readdir',
+                         'perf_event_open',
+                         'pread64',
+                         'preadv',
+                         'preadv2',
+                         'preadv64',
+                         'preadv64v2',
+                         'pwrite64',
+                         'pwritev',
+                         'pwritev2',
+                         'pwritev64',
+                         'pwritev64v2',
+                         'read',
+                         'readahead',
+                         'readv',
+                         'recvfrom',
+                         'sendfile',
+                         'sendfile64',
+                         'sendto',
+                         'setsockopt',
+                         'shutdown',
+                         'signalfd4',
+                         'splice',
+                         'sync_file_range',
+                         'syncfs',
+                         'tee',
+                         'utime',
+                         'utimensat',
+                         'vmsplice',
+                         'write',
+                         'writev']),
+ 'delete_module': set(['delete_module', 'finit_module', 'init_module']),
+ 'dmi_modalias_show': set(['dmi_modalias_show']),
+ 'dup3': set(['dup2', 'dup3', 'select', 'unshare']),
+ 'epoll_create1': set(['capget',
+                       'capset',
+                       'clone',
+                       'epoll_create1',
+                       'epoll_ctl',
+                       'epoll_wait',
+                       'faccessat',
+                       'fork',
+                       'get_robust_list',
+                       'getgroups',
+                       'getgroups16',
+                       'getitimer',
+                       'getpgid',
+                       'getppid',
+                       'getpriority',
+                       'getresgid',
+                       'getresgid16',
+                       'getresuid',
+                       'getresuid16',
+                       'getrusage',
+                       'getsid',
+                       'ioprio_get',
+                       'ioprio_set',
+                       'keyctl',
+                       'kill',
+                       'migrate_pages',
+                       'move_pages',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'msgrcv',
+                       'perf_event_open',
+                       'prctl',
+                       'prlimit64',
+                       'ptrace',
+                       'rt_sigaction',
+                       'rt_sigprocmask',
+                       'rt_sigtimedwait',
+                       'sched_getaffinity',
+                       'sched_getattr',
+                       'sched_getparam',
+                       'sched_getscheduler',
+                       'sched_rr_get_interval',
+                       'sched_setaffinity',
+                       'sched_setattr',
+                       'sched_setparam',
+                       'sched_setscheduler',
+                       'semtimedop',
+                       'setfsgid',
+                       'setfsuid',
+                       'setgid',
+                       'setitimer',
+                       'setns',
+                       'setpgid',
+                       'setpriority',
+                       'setregid',
+                       'setresgid',
+                       'setresuid',
+                       'setreuid',
+                       'setsid',
+                       'setuid',
+                       'sigaction',
+                       'sigaltstack',
+                       'signal',
+                       'umount',
+                       'unshare',
+                       'vfork']),
+ 'epoll_ctl': set(['accept4',
+                   'acct',
+                   'bind',
+                   'bpf',
+                   'brk',
+                   'capget',
+                   'clone',
+                   'connect',
+                   'copy_file_range',
+                   'delete_module',
+                   'dup',
+                   'dup2',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'eventfd2',
+                   'exit_group',
+                   'faccessat',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchmodat',
+                   'fchown',
+                   'fchownat',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'finit_module',
+                   'flistxattr',
+                   'flock',
+                   'fork',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'get_curr_temp',
+                   'get_mempolicy',
+                   'get_robust_list',
+                   'get_trip_temp',
+                   'getcwd',
+                   'getdents',
+                   'getdents64',
+                   'getgroups',
+                   'getgroups16',
+                   'getitimer',
+                   'getpeername',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getrusage',
+                   'getsid',
+                   'getsockname',
+                   'getsockopt',
+                   'init_module',
+                   'inotify_add_watch',
+                   'inotify_init1',
+                   'inotify_rm_watch',
+                   'io_cancel',
+                   'io_destroy',
+                   'io_getevents',
+                   'io_setup',
+                   'io_submit',
+                   'ioctl',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'kexec_load',
+                   'keyctl',
+                   'kill',
+                   'linkat',
+                   'listen',
+                   'llseek',
+                   'lookup_dcookie',
+                   'lseek',
+                   'madvise',
+                   'mbind',
+                   'memfd_create',
+                   'migrate_pages',
+                   'mincore',
+                   'mkdirat',
+                   'mknodat',
+                   'mlockall',
+                   'mmap_pgoff',
+                   'modify_ldt',
+                   'move_pages',
+                   'mprotect',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_open',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'mq_unlink',
+                   'mremap',
+                   'msgctl',
+                   'msgrcv',
+                   'msgsnd',
+                   'munlock',
+                   'munlockall',
+                   'old_readdir',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'pivot_root',
+                   'pkey_mprotect',
+                   'prctl',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'prlimit64',
+                   'ptrace',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'quotactl',
+                   'read',
+                   'readahead',
+                   'readlinkat',
+                   'readv',
+                   'reboot',
+                   'recvfrom',
+                   'remap_file_pages',
+                   'renameat2',
+                   'request_key',
+                   'rmdir',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'sched_yield',
+                   'semctl',
+                   'semtimedop',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'set_trip_temp',
+                   'setgid',
+                   'setgroups',
+                   'setgroups16',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setregid',
+                   'setresgid',
+                   'setresuid',
+                   'setreuid',
+                   'setsid',
+                   'setsockopt',
+                   'setuid',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'shutdown',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'signalfd4',
+                   'socket',
+                   'socketpair',
+                   'splice',
+                   'swapoff',
+                   'swapon',
+                   'symlinkat',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'timer_create',
+                   'timer_delete',
+                   'timer_getoverrun',
+                   'timer_gettime',
+                   'timer_settime',
+                   'timerfd_create',
+                   'timerfd_gettime',
+                   'timerfd_settime',
+                   'umount',
+                   'unlink',
+                   'unlinkat',
+                   'unshare',
+                   'uselib',
+                   'ustat',
+                   'utime',
+                   'utimensat',
+                   'vfork',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'epoll_wait': set(['accept4',
+                    'acct',
+                    'bind',
+                    'bpf',
+                    'capget',
+                    'clone',
+                    'connect',
+                    'copy_file_range',
+                    'dup',
+                    'dup3',
+                    'epoll_create1',
+                    'epoll_ctl',
+                    'epoll_wait',
+                    'eventfd2',
+                    'fallocate',
+                    'fchdir',
+                    'fchmod',
+                    'fchown',
+                    'fcntl',
+                    'fcntl64',
+                    'fdatasync',
+                    'fgetxattr',
+                    'flistxattr',
+                    'flock',
+                    'fork',
+                    'fremovexattr',
+                    'fsetxattr',
+                    'fstatfs',
+                    'fstatfs64',
+                    'fsync',
+                    'ftruncate',
+                    'futimesat',
+                    'get_robust_list',
+                    'getdents',
+                    'getdents64',
+                    'getitimer',
+                    'getpeername',
+                    'getpgid',
+                    'getppid',
+                    'getpriority',
+                    'getrusage',
+                    'getsid',
+                    'getsockname',
+                    'getsockopt',
+                    'inotify_add_watch',
+                    'inotify_rm_watch',
+                    'ioctl',
+                    'ioperm',
+                    'ioprio_get',
+                    'ioprio_set',
+                    'keyctl',
+                    'kill',
+                    'listen',
+                    'llseek',
+                    'lseek',
+                    'memfd_create',
+                    'migrate_pages',
+                    'mmap_pgoff',
+                    'move_pages',
+                    'mq_getsetattr',
+                    'mq_notify',
+                    'mq_open',
+                    'mq_timedreceive',
+                    'mq_timedsend',
+                    'msgrcv',
+                    'old_readdir',
+                    'open',
+                    'open_by_handle_at',
+                    'openat',
+                    'perf_event_open',
+                    'pipe2',
+                    'prctl',
+                    'pread64',
+                    'preadv',
+                    'preadv2',
+                    'preadv64',
+                    'preadv64v2',
+                    'prlimit64',
+                    'ptrace',
+                    'pwrite64',
+                    'pwritev',
+                    'pwritev2',
+                    'pwritev64',
+                    'pwritev64v2',
+                    'read',
+                    'readahead',
+                    'readv',
+                    'recvfrom',
+                    'remap_file_pages',
+                    'rt_sigaction',
+                    'rt_sigprocmask',
+                    'rt_sigtimedwait',
+                    'sched_getaffinity',
+                    'sched_getattr',
+                    'sched_getparam',
+                    'sched_getscheduler',
+                    'sched_rr_get_interval',
+                    'sched_setaffinity',
+                    'sched_setattr',
+                    'sched_setparam',
+                    'sched_setscheduler',
+                    'semtimedop',
+                    'sendfile',
+                    'sendfile64',
+                    'sendto',
+                    'setitimer',
+                    'setns',
+                    'setpgid',
+                    'setpriority',
+                    'setsid',
+                    'setsockopt',
+                    'shmat',
+                    'shmctl',
+                    'shmdt',
+                    'shutdown',
+                    'sigaction',
+                    'sigaltstack',
+                    'signal',
+                    'signalfd4',
+                    'socket',
+                    'socketpair',
+                    'splice',
+                    'swapoff',
+                    'swapon',
+                    'sync_file_range',
+                    'syncfs',
+                    'tee',
+                    'umount',
+                    'uselib',
+                    'utime',
+                    'utimensat',
+                    'vfork',
+                    'vmsplice',
+                    'write',
+                    'writev']),
+ 'faccessat': set(['accept4',
+                   'acct',
+                   'capget',
+                   'clone',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'eventfd2',
+                   'flock',
+                   'fork',
+                   'get_robust_list',
+                   'getcwd',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getrusage',
+                   'getsid',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'lookup_dcookie',
+                   'memfd_create',
+                   'migrate_pages',
+                   'mmap_pgoff',
+                   'move_pages',
+                   'mq_open',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'pivot_root',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'quotactl',
+                   'remap_file_pages',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setresuid',
+                   'setreuid',
+                   'setsid',
+                   'setuid',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'socket',
+                   'socketpair',
+                   'swapoff',
+                   'swapon',
+                   'umount',
+                   'unshare',
+                   'uselib',
+                   'vfork']),
+ 'fallocate': set(['accept4',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchown',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'old_readdir',
+                   'perf_event_open',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readv',
+                   'recvfrom',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setsockopt',
+                   'shutdown',
+                   'signalfd4',
+                   'splice',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'fchdir': set(['accept4',
+                'acct',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'epoll_wait',
+                'eventfd2',
+                'fallocate',
+                'fchdir',
+                'fchmod',
+                'fchown',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getcwd',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'llseek',
+                'lookup_dcookie',
+                'lseek',
+                'memfd_create',
+                'mmap_pgoff',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_open',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'pivot_root',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'quotactl',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'remap_file_pages',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setns',
+                'setsockopt',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'shutdown',
+                'signalfd4',
+                'socket',
+                'socketpair',
+                'splice',
+                'swapoff',
+                'swapon',
+                'sync_file_range',
+                'syncfs',
+                'tee',
+                'unshare',
+                'uselib',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'fchmod': set(['accept4',
+                'acct',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'epoll_wait',
+                'eventfd2',
+                'fallocate',
+                'fchdir',
+                'fchmod',
+                'fchown',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getcwd',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'llseek',
+                'lookup_dcookie',
+                'lseek',
+                'memfd_create',
+                'mmap_pgoff',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_open',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'pivot_root',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'quotactl',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'remap_file_pages',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setns',
+                'setsockopt',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'shutdown',
+                'signalfd4',
+                'socket',
+                'socketpair',
+                'splice',
+                'swapoff',
+                'swapon',
+                'sync_file_range',
+                'syncfs',
+                'tee',
+                'unshare',
+                'uselib',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'fchmodat': set(['accept4',
+                  'acct',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'eventfd2',
+                  'flock',
+                  'getcwd',
+                  'lookup_dcookie',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_open',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'pivot_root',
+                  'quotactl',
+                  'remap_file_pages',
+                  'setns',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'socket',
+                  'socketpair',
+                  'swapoff',
+                  'swapon',
+                  'unshare',
+                  'uselib']),
+ 'fchown': set(['accept4',
+                'acct',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'epoll_wait',
+                'eventfd2',
+                'fallocate',
+                'fchdir',
+                'fchmod',
+                'fchown',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getcwd',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'llseek',
+                'lookup_dcookie',
+                'lseek',
+                'memfd_create',
+                'mmap_pgoff',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_open',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'pivot_root',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'quotactl',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'remap_file_pages',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setns',
+                'setsockopt',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'shutdown',
+                'signalfd4',
+                'socket',
+                'socketpair',
+                'splice',
+                'swapoff',
+                'swapon',
+                'sync_file_range',
+                'syncfs',
+                'tee',
+                'unshare',
+                'uselib',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'fchownat': set(['accept4',
+                  'acct',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'eventfd2',
+                  'flock',
+                  'getcwd',
+                  'lookup_dcookie',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_open',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'pivot_root',
+                  'quotactl',
+                  'remap_file_pages',
+                  'setns',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'socket',
+                  'socketpair',
+                  'swapoff',
+                  'swapon',
+                  'unshare',
+                  'uselib']),
+ 'fcntl': set(['accept4',
+               'acct',
+               'bind',
+               'bpf',
+               'connect',
+               'copy_file_range',
+               'dup',
+               'dup3',
+               'epoll_create1',
+               'epoll_ctl',
+               'epoll_wait',
+               'eventfd2',
+               'fallocate',
+               'fchdir',
+               'fchmod',
+               'fchown',
+               'fcntl',
+               'fcntl64',
+               'fdatasync',
+               'fgetxattr',
+               'flistxattr',
+               'flock',
+               'fremovexattr',
+               'fsetxattr',
+               'fstatfs',
+               'fstatfs64',
+               'fsync',
+               'ftruncate',
+               'futimesat',
+               'getdents',
+               'getdents64',
+               'getpeername',
+               'getsockname',
+               'getsockopt',
+               'inotify_add_watch',
+               'inotify_rm_watch',
+               'ioctl',
+               'listen',
+               'llseek',
+               'lseek',
+               'memfd_create',
+               'mmap_pgoff',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_open',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'old_readdir',
+               'open',
+               'open_by_handle_at',
+               'openat',
+               'perf_event_open',
+               'pipe2',
+               'pread64',
+               'preadv',
+               'preadv2',
+               'preadv64',
+               'preadv64v2',
+               'pwrite64',
+               'pwritev',
+               'pwritev2',
+               'pwritev64',
+               'pwritev64v2',
+               'read',
+               'readahead',
+               'readv',
+               'recvfrom',
+               'remap_file_pages',
+               'sendfile',
+               'sendfile64',
+               'sendto',
+               'setns',
+               'setsockopt',
+               'shmat',
+               'shmctl',
+               'shmdt',
+               'shutdown',
+               'signalfd4',
+               'socket',
+               'socketpair',
+               'splice',
+               'swapoff',
+               'swapon',
+               'sync_file_range',
+               'syncfs',
+               'tee',
+               'uselib',
+               'utime',
+               'utimensat',
+               'vmsplice',
+               'write',
+               'writev']),
+ 'fcntl64': set(['accept4',
+                 'acct',
+                 'bind',
+                 'bpf',
+                 'connect',
+                 'copy_file_range',
+                 'dup',
+                 'dup3',
+                 'epoll_create1',
+                 'epoll_ctl',
+                 'epoll_wait',
+                 'eventfd2',
+                 'fallocate',
+                 'fchdir',
+                 'fchmod',
+                 'fchown',
+                 'fcntl',
+                 'fcntl64',
+                 'fdatasync',
+                 'fgetxattr',
+                 'flistxattr',
+                 'flock',
+                 'fremovexattr',
+                 'fsetxattr',
+                 'fstatfs',
+                 'fstatfs64',
+                 'fsync',
+                 'ftruncate',
+                 'futimesat',
+                 'getdents',
+                 'getdents64',
+                 'getpeername',
+                 'getsockname',
+                 'getsockopt',
+                 'inotify_add_watch',
+                 'inotify_rm_watch',
+                 'ioctl',
+                 'listen',
+                 'llseek',
+                 'lseek',
+                 'memfd_create',
+                 'mmap_pgoff',
+                 'mq_getsetattr',
+                 'mq_notify',
+                 'mq_open',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'old_readdir',
+                 'open',
+                 'open_by_handle_at',
+                 'openat',
+                 'perf_event_open',
+                 'pipe2',
+                 'pread64',
+                 'preadv',
+                 'preadv2',
+                 'preadv64',
+                 'preadv64v2',
+                 'pwrite64',
+                 'pwritev',
+                 'pwritev2',
+                 'pwritev64',
+                 'pwritev64v2',
+                 'read',
+                 'readahead',
+                 'readv',
+                 'recvfrom',
+                 'remap_file_pages',
+                 'sendfile',
+                 'sendfile64',
+                 'sendto',
+                 'setns',
+                 'setsockopt',
+                 'shmat',
+                 'shmctl',
+                 'shmdt',
+                 'shutdown',
+                 'signalfd4',
+                 'socket',
+                 'socketpair',
+                 'splice',
+                 'swapoff',
+                 'swapon',
+                 'sync_file_range',
+                 'syncfs',
+                 'tee',
+                 'uselib',
+                 'utime',
+                 'utimensat',
+                 'vmsplice',
+                 'write',
+                 'writev']),
+ 'fdatasync': set(['accept4',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchown',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'old_readdir',
+                   'perf_event_open',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readv',
+                   'recvfrom',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setsockopt',
+                   'shutdown',
+                   'signalfd4',
+                   'splice',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'fgetxattr': set(['accept4',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchown',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'old_readdir',
+                   'perf_event_open',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readv',
+                   'recvfrom',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setsockopt',
+                   'shutdown',
+                   'signalfd4',
+                   'splice',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'finit_module': set(['delete_module', 'finit_module', 'init_module']),
+ 'flistxattr': set(['accept4',
+                    'bind',
+                    'bpf',
+                    'connect',
+                    'copy_file_range',
+                    'epoll_ctl',
+                    'epoll_wait',
+                    'fallocate',
+                    'fchdir',
+                    'fchmod',
+                    'fchown',
+                    'fcntl',
+                    'fcntl64',
+                    'fdatasync',
+                    'fgetxattr',
+                    'flistxattr',
+                    'flock',
+                    'fremovexattr',
+                    'fsetxattr',
+                    'fstatfs',
+                    'fstatfs64',
+                    'fsync',
+                    'ftruncate',
+                    'futimesat',
+                    'getdents',
+                    'getdents64',
+                    'getpeername',
+                    'getsockname',
+                    'getsockopt',
+                    'inotify_add_watch',
+                    'inotify_rm_watch',
+                    'ioctl',
+                    'listen',
+                    'llseek',
+                    'lseek',
+                    'mq_getsetattr',
+                    'mq_notify',
+                    'mq_timedreceive',
+                    'mq_timedsend',
+                    'old_readdir',
+                    'perf_event_open',
+                    'pread64',
+                    'preadv',
+                    'preadv2',
+                    'preadv64',
+                    'preadv64v2',
+                    'pwrite64',
+                    'pwritev',
+                    'pwritev2',
+                    'pwritev64',
+                    'pwritev64v2',
+                    'read',
+                    'readahead',
+                    'readv',
+                    'recvfrom',
+                    'sendfile',
+                    'sendfile64',
+                    'sendto',
+                    'setsockopt',
+                    'shutdown',
+                    'signalfd4',
+                    'splice',
+                    'sync_file_range',
+                    'syncfs',
+                    'tee',
+                    'utime',
+                    'utimensat',
+                    'vmsplice',
+                    'write',
+                    'writev']),
+ 'flock': set(['accept4',
+               'acct',
+               'bind',
+               'bpf',
+               'connect',
+               'copy_file_range',
+               'dup',
+               'dup3',
+               'epoll_create1',
+               'epoll_ctl',
+               'epoll_wait',
+               'eventfd2',
+               'fallocate',
+               'fchdir',
+               'fchmod',
+               'fchown',
+               'fcntl',
+               'fcntl64',
+               'fdatasync',
+               'fgetxattr',
+               'flistxattr',
+               'flock',
+               'fremovexattr',
+               'fsetxattr',
+               'fstatfs',
+               'fstatfs64',
+               'fsync',
+               'ftruncate',
+               'futimesat',
+               'getdents',
+               'getdents64',
+               'getpeername',
+               'getsockname',
+               'getsockopt',
+               'inotify_add_watch',
+               'inotify_rm_watch',
+               'ioctl',
+               'listen',
+               'llseek',
+               'lseek',
+               'memfd_create',
+               'mmap_pgoff',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_open',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'old_readdir',
+               'open',
+               'open_by_handle_at',
+               'openat',
+               'perf_event_open',
+               'pipe2',
+               'pread64',
+               'preadv',
+               'preadv2',
+               'preadv64',
+               'preadv64v2',
+               'pwrite64',
+               'pwritev',
+               'pwritev2',
+               'pwritev64',
+               'pwritev64v2',
+               'quotactl',
+               'read',
+               'readahead',
+               'readv',
+               'recvfrom',
+               'remap_file_pages',
+               'sendfile',
+               'sendfile64',
+               'sendto',
+               'setns',
+               'setsockopt',
+               'shmat',
+               'shmctl',
+               'shmdt',
+               'shutdown',
+               'signalfd4',
+               'socket',
+               'socketpair',
+               'splice',
+               'swapoff',
+               'swapon',
+               'sync_file_range',
+               'syncfs',
+               'tee',
+               'umount',
+               'uselib',
+               'ustat',
+               'utime',
+               'utimensat',
+               'vmsplice',
+               'write',
+               'writev']),
+ 'fremovexattr': set(['accept4',
+                      'bind',
+                      'bpf',
+                      'connect',
+                      'copy_file_range',
+                      'epoll_ctl',
+                      'epoll_wait',
+                      'fallocate',
+                      'fchdir',
+                      'fchmod',
+                      'fchown',
+                      'fcntl',
+                      'fcntl64',
+                      'fdatasync',
+                      'fgetxattr',
+                      'flistxattr',
+                      'flock',
+                      'fremovexattr',
+                      'fsetxattr',
+                      'fstatfs',
+                      'fstatfs64',
+                      'fsync',
+                      'ftruncate',
+                      'futimesat',
+                      'getdents',
+                      'getdents64',
+                      'getpeername',
+                      'getsockname',
+                      'getsockopt',
+                      'inotify_add_watch',
+                      'inotify_rm_watch',
+                      'ioctl',
+                      'listen',
+                      'llseek',
+                      'lseek',
+                      'mq_getsetattr',
+                      'mq_notify',
+                      'mq_timedreceive',
+                      'mq_timedsend',
+                      'old_readdir',
+                      'perf_event_open',
+                      'pread64',
+                      'preadv',
+                      'preadv2',
+                      'preadv64',
+                      'preadv64v2',
+                      'pwrite64',
+                      'pwritev',
+                      'pwritev2',
+                      'pwritev64',
+                      'pwritev64v2',
+                      'read',
+                      'readahead',
+                      'readv',
+                      'recvfrom',
+                      'sendfile',
+                      'sendfile64',
+                      'sendto',
+                      'setsockopt',
+                      'shutdown',
+                      'signalfd4',
+                      'splice',
+                      'sync_file_range',
+                      'syncfs',
+                      'tee',
+                      'utime',
+                      'utimensat',
+                      'vmsplice',
+                      'write',
+                      'writev']),
+ 'fsetxattr': set(['accept4',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchown',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'old_readdir',
+                   'perf_event_open',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readv',
+                   'recvfrom',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setsockopt',
+                   'shutdown',
+                   'signalfd4',
+                   'splice',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'fstat': set(['fstat', 'lstat', 'newfstat', 'stat']),
+ 'fstatfs': set(['accept4',
+                 'bind',
+                 'bpf',
+                 'connect',
+                 'copy_file_range',
+                 'epoll_ctl',
+                 'epoll_wait',
+                 'fallocate',
+                 'fchdir',
+                 'fchmod',
+                 'fchown',
+                 'fcntl',
+                 'fcntl64',
+                 'fdatasync',
+                 'fgetxattr',
+                 'flistxattr',
+                 'flock',
+                 'fremovexattr',
+                 'fsetxattr',
+                 'fstatfs',
+                 'fstatfs64',
+                 'fsync',
+                 'ftruncate',
+                 'futimesat',
+                 'getdents',
+                 'getdents64',
+                 'getpeername',
+                 'getsockname',
+                 'getsockopt',
+                 'inotify_add_watch',
+                 'inotify_rm_watch',
+                 'ioctl',
+                 'listen',
+                 'llseek',
+                 'lseek',
+                 'mq_getsetattr',
+                 'mq_notify',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'old_readdir',
+                 'perf_event_open',
+                 'pread64',
+                 'preadv',
+                 'preadv2',
+                 'preadv64',
+                 'preadv64v2',
+                 'pwrite64',
+                 'pwritev',
+                 'pwritev2',
+                 'pwritev64',
+                 'pwritev64v2',
+                 'read',
+                 'readahead',
+                 'readv',
+                 'recvfrom',
+                 'sendfile',
+                 'sendfile64',
+                 'sendto',
+                 'setsockopt',
+                 'shutdown',
+                 'signalfd4',
+                 'splice',
+                 'statfs',
+                 'statfs64',
+                 'sync_file_range',
+                 'syncfs',
+                 'tee',
+                 'ustat',
+                 'utime',
+                 'utimensat',
+                 'vmsplice',
+                 'write',
+                 'writev']),
+ 'fstatfs64': set(['accept4',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchown',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'old_readdir',
+                   'perf_event_open',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readv',
+                   'recvfrom',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setsockopt',
+                   'shutdown',
+                   'signalfd4',
+                   'splice',
+                   'statfs',
+                   'statfs64',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'ustat',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'fsync': set(['accept4',
+               'bind',
+               'bpf',
+               'connect',
+               'copy_file_range',
+               'epoll_ctl',
+               'epoll_wait',
+               'fallocate',
+               'fchdir',
+               'fchmod',
+               'fchown',
+               'fcntl',
+               'fcntl64',
+               'fdatasync',
+               'fgetxattr',
+               'flistxattr',
+               'flock',
+               'fremovexattr',
+               'fsetxattr',
+               'fstatfs',
+               'fstatfs64',
+               'fsync',
+               'ftruncate',
+               'futimesat',
+               'getdents',
+               'getdents64',
+               'getpeername',
+               'getsockname',
+               'getsockopt',
+               'inotify_add_watch',
+               'inotify_rm_watch',
+               'ioctl',
+               'listen',
+               'llseek',
+               'lseek',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'old_readdir',
+               'perf_event_open',
+               'pread64',
+               'preadv',
+               'preadv2',
+               'preadv64',
+               'preadv64v2',
+               'pwrite64',
+               'pwritev',
+               'pwritev2',
+               'pwritev64',
+               'pwritev64v2',
+               'read',
+               'readahead',
+               'readv',
+               'recvfrom',
+               'sendfile',
+               'sendfile64',
+               'sendto',
+               'setsockopt',
+               'shutdown',
+               'signalfd4',
+               'splice',
+               'sync_file_range',
+               'syncfs',
+               'tee',
+               'utime',
+               'utimensat',
+               'vmsplice',
+               'write',
+               'writev']),
+ 'ftruncate': set(['accept4',
+                   'acct',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'eventfd2',
+                   'faccessat',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchmodat',
+                   'fchown',
+                   'fchownat',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'linkat',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'memfd_create',
+                   'mmap_pgoff',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_open',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'mq_unlink',
+                   'old_readdir',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readlinkat',
+                   'readv',
+                   'recvfrom',
+                   'remap_file_pages',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setns',
+                   'setsockopt',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'shutdown',
+                   'signalfd4',
+                   'socket',
+                   'socketpair',
+                   'splice',
+                   'swapoff',
+                   'swapon',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'unlink',
+                   'unlinkat',
+                   'uselib',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'futex': set(['clock_nanosleep',
+               'epoll_wait',
+               'faccessat',
+               'fchmod',
+               'fchmodat',
+               'fchown',
+               'fchownat',
+               'fstat',
+               'ftruncate',
+               'futex',
+               'futimesat',
+               'inotify_add_watch',
+               'io_getevents',
+               'ioctl',
+               'linkat',
+               'memfd_create',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'mq_unlink',
+               'nanosleep',
+               'newfstat',
+               'poll',
+               'ppoll',
+               'pselect6',
+               'readlinkat',
+               'recvmmsg',
+               'rt_sigtimedwait',
+               'sched_rr_get_interval',
+               'select',
+               'semtimedop',
+               'sendfile',
+               'sendfile64',
+               'settimeofday',
+               'stime',
+               'swapoff',
+               'swapon',
+               'timer_gettime',
+               'timer_settime',
+               'timerfd_gettime',
+               'timerfd_settime',
+               'unlink',
+               'unlinkat',
+               'uselib',
+               'utime']),
+ 'futimesat': set(['accept4',
+                   'adjtimex',
+                   'alarm',
+                   'bind',
+                   'bpf',
+                   'clock_adjtime',
+                   'clock_nanosleep',
+                   'connect',
+                   'copy_file_range',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'faccessat',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchmodat',
+                   'fchown',
+                   'fchownat',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstat',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futex',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getitimer',
+                   'getpeername',
+                   'getrusage',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'io_getevents',
+                   'ioctl',
+                   'linkat',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'memfd_create',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'mq_unlink',
+                   'nanosleep',
+                   'newfstat',
+                   'old_readdir',
+                   'perf_event_open',
+                   'poll',
+                   'ppoll',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pselect6',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readlinkat',
+                   'readv',
+                   'recvfrom',
+                   'recvmmsg',
+                   'rt_sigtimedwait',
+                   'sched_rr_get_interval',
+                   'select',
+                   'semtimedop',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setitimer',
+                   'setsockopt',
+                   'settimeofday',
+                   'shutdown',
+                   'signalfd4',
+                   'splice',
+                   'stime',
+                   'swapoff',
+                   'swapon',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'timer_gettime',
+                   'timer_settime',
+                   'timerfd_gettime',
+                   'timerfd_settime',
+                   'unlink',
+                   'unlinkat',
+                   'uselib',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'wait4',
+                   'waitid',
+                   'write',
+                   'writev']),
+ 'get_mempolicy': set(['brk',
+                       'capget',
+                       'clone',
+                       'fork',
+                       'get_mempolicy',
+                       'get_robust_list',
+                       'getitimer',
+                       'getpgid',
+                       'getppid',
+                       'getpriority',
+                       'getrusage',
+                       'getsid',
+                       'ioprio_get',
+                       'ioprio_set',
+                       'keyctl',
+                       'kill',
+                       'madvise',
+                       'mbind',
+                       'migrate_pages',
+                       'mincore',
+                       'mlockall',
+                       'move_pages',
+                       'mprotect',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'mremap',
+                       'msgrcv',
+                       'munlock',
+                       'munlockall',
+                       'perf_event_open',
+                       'pkey_mprotect',
+                       'prctl',
+                       'prlimit64',
+                       'ptrace',
+                       'remap_file_pages',
+                       'rt_sigaction',
+                       'rt_sigprocmask',
+                       'rt_sigtimedwait',
+                       'sched_getaffinity',
+                       'sched_getattr',
+                       'sched_getparam',
+                       'sched_getscheduler',
+                       'sched_rr_get_interval',
+                       'sched_setaffinity',
+                       'sched_setattr',
+                       'sched_setparam',
+                       'sched_setscheduler',
+                       'semtimedop',
+                       'set_mempolicy',
+                       'setitimer',
+                       'setns',
+                       'setpgid',
+                       'setpriority',
+                       'setsid',
+                       'shmdt',
+                       'sigaction',
+                       'sigaltstack',
+                       'signal',
+                       'umount',
+                       'vfork']),
+ 'getcwd': set(['accept4',
+                'acct',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'eventfd2',
+                'flock',
+                'ftruncate',
+                'getcwd',
+                'linkat',
+                'lookup_dcookie',
+                'memfd_create',
+                'mkdirat',
+                'mknodat',
+                'mmap_pgoff',
+                'mq_open',
+                'mq_unlink',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'pivot_root',
+                'quotactl',
+                'remap_file_pages',
+                'renameat2',
+                'rmdir',
+                'setns',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'socket',
+                'socketpair',
+                'swapoff',
+                'swapon',
+                'symlinkat',
+                'umount',
+                'unlink',
+                'unlinkat',
+                'unshare',
+                'uselib']),
+ 'getdents': set(['accept4',
+                  'bind',
+                  'bpf',
+                  'capget',
+                  'clone',
+                  'connect',
+                  'copy_file_range',
+                  'epoll_ctl',
+                  'epoll_wait',
+                  'fallocate',
+                  'fchdir',
+                  'fchmod',
+                  'fchown',
+                  'fcntl',
+                  'fcntl64',
+                  'fdatasync',
+                  'fgetxattr',
+                  'flistxattr',
+                  'flock',
+                  'fork',
+                  'fremovexattr',
+                  'fsetxattr',
+                  'fstatfs',
+                  'fstatfs64',
+                  'fsync',
+                  'ftruncate',
+                  'futimesat',
+                  'get_robust_list',
+                  'getdents',
+                  'getdents64',
+                  'getitimer',
+                  'getpeername',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'getsockname',
+                  'getsockopt',
+                  'inotify_add_watch',
+                  'inotify_rm_watch',
+                  'ioctl',
+                  'ioperm',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'listen',
+                  'llseek',
+                  'lseek',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_getsetattr',
+                  'mq_notify',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'old_readdir',
+                  'perf_event_open',
+                  'prctl',
+                  'pread64',
+                  'preadv',
+                  'preadv2',
+                  'preadv64',
+                  'preadv64v2',
+                  'prlimit64',
+                  'ptrace',
+                  'pwrite64',
+                  'pwritev',
+                  'pwritev2',
+                  'pwritev64',
+                  'pwritev64v2',
+                  'read',
+                  'readahead',
+                  'readv',
+                  'recvfrom',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'sendfile',
+                  'sendfile64',
+                  'sendto',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'setsockopt',
+                  'shutdown',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'signalfd4',
+                  'splice',
+                  'sync_file_range',
+                  'syncfs',
+                  'tee',
+                  'umount',
+                  'utime',
+                  'utimensat',
+                  'vfork',
+                  'vmsplice',
+                  'write',
+                  'writev']),
+ 'getdents64': set(['accept4',
+                    'bind',
+                    'bpf',
+                    'capget',
+                    'clone',
+                    'connect',
+                    'copy_file_range',
+                    'epoll_ctl',
+                    'epoll_wait',
+                    'fallocate',
+                    'fchdir',
+                    'fchmod',
+                    'fchown',
+                    'fcntl',
+                    'fcntl64',
+                    'fdatasync',
+                    'fgetxattr',
+                    'flistxattr',
+                    'flock',
+                    'fork',
+                    'fremovexattr',
+                    'fsetxattr',
+                    'fstatfs',
+                    'fstatfs64',
+                    'fsync',
+                    'ftruncate',
+                    'futimesat',
+                    'get_robust_list',
+                    'getdents',
+                    'getdents64',
+                    'getitimer',
+                    'getpeername',
+                    'getpgid',
+                    'getppid',
+                    'getpriority',
+                    'getrusage',
+                    'getsid',
+                    'getsockname',
+                    'getsockopt',
+                    'inotify_add_watch',
+                    'inotify_rm_watch',
+                    'ioctl',
+                    'ioperm',
+                    'ioprio_get',
+                    'ioprio_set',
+                    'keyctl',
+                    'kill',
+                    'listen',
+                    'llseek',
+                    'lseek',
+                    'migrate_pages',
+                    'move_pages',
+                    'mq_getsetattr',
+                    'mq_notify',
+                    'mq_timedreceive',
+                    'mq_timedsend',
+                    'msgrcv',
+                    'old_readdir',
+                    'perf_event_open',
+                    'prctl',
+                    'pread64',
+                    'preadv',
+                    'preadv2',
+                    'preadv64',
+                    'preadv64v2',
+                    'prlimit64',
+                    'ptrace',
+                    'pwrite64',
+                    'pwritev',
+                    'pwritev2',
+                    'pwritev64',
+                    'pwritev64v2',
+                    'read',
+                    'readahead',
+                    'readv',
+                    'recvfrom',
+                    'rt_sigaction',
+                    'rt_sigprocmask',
+                    'rt_sigtimedwait',
+                    'sched_getaffinity',
+                    'sched_getattr',
+                    'sched_getparam',
+                    'sched_getscheduler',
+                    'sched_rr_get_interval',
+                    'sched_setaffinity',
+                    'sched_setattr',
+                    'sched_setparam',
+                    'sched_setscheduler',
+                    'semtimedop',
+                    'sendfile',
+                    'sendfile64',
+                    'sendto',
+                    'setitimer',
+                    'setns',
+                    'setpgid',
+                    'setpriority',
+                    'setsid',
+                    'setsockopt',
+                    'shutdown',
+                    'sigaction',
+                    'sigaltstack',
+                    'signal',
+                    'signalfd4',
+                    'splice',
+                    'sync_file_range',
+                    'syncfs',
+                    'tee',
+                    'umount',
+                    'utime',
+                    'utimensat',
+                    'vfork',
+                    'vmsplice',
+                    'write',
+                    'writev']),
+ 'getegid': set(['capget',
+                 'clone',
+                 'fork',
+                 'get_robust_list',
+                 'getitimer',
+                 'getpgid',
+                 'getppid',
+                 'getpriority',
+                 'getrusage',
+                 'getsid',
+                 'ioprio_get',
+                 'ioprio_set',
+                 'keyctl',
+                 'kill',
+                 'migrate_pages',
+                 'move_pages',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'msgrcv',
+                 'perf_event_open',
+                 'prctl',
+                 'prlimit64',
+                 'ptrace',
+                 'rt_sigaction',
+                 'rt_sigprocmask',
+                 'rt_sigtimedwait',
+                 'sched_getaffinity',
+                 'sched_getattr',
+                 'sched_getparam',
+                 'sched_getscheduler',
+                 'sched_rr_get_interval',
+                 'sched_setaffinity',
+                 'sched_setattr',
+                 'sched_setparam',
+                 'sched_setscheduler',
+                 'semtimedop',
+                 'setitimer',
+                 'setns',
+                 'setpgid',
+                 'setpriority',
+                 'setsid',
+                 'sigaction',
+                 'sigaltstack',
+                 'signal',
+                 'umount',
+                 'vfork']),
+ 'getegid16': set(['capget',
+                   'clone',
+                   'fork',
+                   'get_robust_list',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getrusage',
+                   'getsid',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setsid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'vfork']),
+ 'geteuid': set(['capget',
+                 'clone',
+                 'fork',
+                 'get_robust_list',
+                 'getitimer',
+                 'getpgid',
+                 'getppid',
+                 'getpriority',
+                 'getrusage',
+                 'getsid',
+                 'ioprio_get',
+                 'ioprio_set',
+                 'keyctl',
+                 'kill',
+                 'migrate_pages',
+                 'move_pages',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'msgrcv',
+                 'perf_event_open',
+                 'prctl',
+                 'prlimit64',
+                 'ptrace',
+                 'rt_sigaction',
+                 'rt_sigprocmask',
+                 'rt_sigtimedwait',
+                 'sched_getaffinity',
+                 'sched_getattr',
+                 'sched_getparam',
+                 'sched_getscheduler',
+                 'sched_rr_get_interval',
+                 'sched_setaffinity',
+                 'sched_setattr',
+                 'sched_setparam',
+                 'sched_setscheduler',
+                 'semtimedop',
+                 'setitimer',
+                 'setns',
+                 'setpgid',
+                 'setpriority',
+                 'setsid',
+                 'sigaction',
+                 'sigaltstack',
+                 'signal',
+                 'umount',
+                 'vfork']),
+ 'geteuid16': set(['capget',
+                   'clone',
+                   'fork',
+                   'get_robust_list',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getrusage',
+                   'getsid',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setsid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'vfork']),
+ 'getgid': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'getgid16': set(['capget',
+                  'clone',
+                  'fork',
+                  'get_robust_list',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'perf_event_open',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'vfork']),
+ 'getgroups': set(['capget',
+                   'capset',
+                   'clone',
+                   'epoll_create1',
+                   'faccessat',
+                   'fork',
+                   'get_robust_list',
+                   'getgroups',
+                   'getgroups16',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getresgid',
+                   'getresgid16',
+                   'getresuid',
+                   'getresuid16',
+                   'getrusage',
+                   'getsid',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setfsgid',
+                   'setfsuid',
+                   'setgid',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setregid',
+                   'setresgid',
+                   'setresuid',
+                   'setreuid',
+                   'setsid',
+                   'setuid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'unshare',
+                   'vfork']),
+ 'getgroups16': set(['capget',
+                     'capset',
+                     'clone',
+                     'epoll_create1',
+                     'faccessat',
+                     'fork',
+                     'get_robust_list',
+                     'getgroups',
+                     'getgroups16',
+                     'getitimer',
+                     'getpgid',
+                     'getppid',
+                     'getpriority',
+                     'getresgid',
+                     'getresgid16',
+                     'getresuid',
+                     'getresuid16',
+                     'getrusage',
+                     'getsid',
+                     'ioprio_get',
+                     'ioprio_set',
+                     'keyctl',
+                     'kill',
+                     'migrate_pages',
+                     'move_pages',
+                     'mq_timedreceive',
+                     'mq_timedsend',
+                     'msgrcv',
+                     'perf_event_open',
+                     'prctl',
+                     'prlimit64',
+                     'ptrace',
+                     'rt_sigaction',
+                     'rt_sigprocmask',
+                     'rt_sigtimedwait',
+                     'sched_getaffinity',
+                     'sched_getattr',
+                     'sched_getparam',
+                     'sched_getscheduler',
+                     'sched_rr_get_interval',
+                     'sched_setaffinity',
+                     'sched_setattr',
+                     'sched_setparam',
+                     'sched_setscheduler',
+                     'semtimedop',
+                     'setfsgid',
+                     'setfsuid',
+                     'setgid',
+                     'setgroups',
+                     'setgroups16',
+                     'setitimer',
+                     'setns',
+                     'setpgid',
+                     'setpriority',
+                     'setregid',
+                     'setresgid',
+                     'setresuid',
+                     'setreuid',
+                     'setsid',
+                     'setuid',
+                     'sigaction',
+                     'sigaltstack',
+                     'signal',
+                     'umount',
+                     'unshare',
+                     'vfork']),
+ 'getitimer': set(['exit_group', 'setitimer', 'timer_create']),
+ 'getpeername': set(['accept4',
+                     'bind',
+                     'bpf',
+                     'connect',
+                     'copy_file_range',
+                     'epoll_ctl',
+                     'epoll_wait',
+                     'fallocate',
+                     'fchdir',
+                     'fchmod',
+                     'fchown',
+                     'fcntl',
+                     'fcntl64',
+                     'fdatasync',
+                     'fgetxattr',
+                     'flistxattr',
+                     'flock',
+                     'fremovexattr',
+                     'fsetxattr',
+                     'fstatfs',
+                     'fstatfs64',
+                     'fsync',
+                     'ftruncate',
+                     'futimesat',
+                     'getdents',
+                     'getdents64',
+                     'getpeername',
+                     'getsockname',
+                     'getsockopt',
+                     'inotify_add_watch',
+                     'inotify_rm_watch',
+                     'ioctl',
+                     'listen',
+                     'llseek',
+                     'lseek',
+                     'mq_getsetattr',
+                     'mq_notify',
+                     'mq_timedreceive',
+                     'mq_timedsend',
+                     'old_readdir',
+                     'perf_event_open',
+                     'pread64',
+                     'preadv',
+                     'preadv2',
+                     'preadv64',
+                     'preadv64v2',
+                     'pwrite64',
+                     'pwritev',
+                     'pwritev2',
+                     'pwritev64',
+                     'pwritev64v2',
+                     'read',
+                     'readahead',
+                     'readv',
+                     'recvfrom',
+                     'sendfile',
+                     'sendfile64',
+                     'sendto',
+                     'setsockopt',
+                     'shutdown',
+                     'signalfd4',
+                     'splice',
+                     'sync_file_range',
+                     'syncfs',
+                     'tee',
+                     'utime',
+                     'utimensat',
+                     'vmsplice',
+                     'write',
+                     'writev']),
+ 'getppid': set(['capget',
+                 'clone',
+                 'fork',
+                 'get_robust_list',
+                 'getitimer',
+                 'getpgid',
+                 'getppid',
+                 'getpriority',
+                 'getrusage',
+                 'getsid',
+                 'ioprio_get',
+                 'ioprio_set',
+                 'keyctl',
+                 'kill',
+                 'migrate_pages',
+                 'move_pages',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'msgrcv',
+                 'perf_event_open',
+                 'prctl',
+                 'prlimit64',
+                 'ptrace',
+                 'rt_sigaction',
+                 'rt_sigprocmask',
+                 'rt_sigtimedwait',
+                 'sched_getaffinity',
+                 'sched_getattr',
+                 'sched_getparam',
+                 'sched_getscheduler',
+                 'sched_rr_get_interval',
+                 'sched_setaffinity',
+                 'sched_setattr',
+                 'sched_setparam',
+                 'sched_setscheduler',
+                 'semtimedop',
+                 'setitimer',
+                 'setns',
+                 'setpgid',
+                 'setpriority',
+                 'setsid',
+                 'sigaction',
+                 'sigaltstack',
+                 'signal',
+                 'umount',
+                 'vfork']),
+ 'getpriority': set(['capget',
+                     'clone',
+                     'fork',
+                     'get_robust_list',
+                     'getitimer',
+                     'getpgid',
+                     'getppid',
+                     'getpriority',
+                     'getrusage',
+                     'getsid',
+                     'ioprio_get',
+                     'ioprio_set',
+                     'keyctl',
+                     'kill',
+                     'migrate_pages',
+                     'move_pages',
+                     'mq_timedreceive',
+                     'mq_timedsend',
+                     'msgrcv',
+                     'perf_event_open',
+                     'prctl',
+                     'prlimit64',
+                     'ptrace',
+                     'rt_sigaction',
+                     'rt_sigprocmask',
+                     'rt_sigtimedwait',
+                     'sched_getaffinity',
+                     'sched_getattr',
+                     'sched_getparam',
+                     'sched_getscheduler',
+                     'sched_rr_get_interval',
+                     'sched_setaffinity',
+                     'sched_setattr',
+                     'sched_setparam',
+                     'sched_setscheduler',
+                     'semtimedop',
+                     'setitimer',
+                     'setns',
+                     'setpgid',
+                     'setpriority',
+                     'setresuid',
+                     'setreuid',
+                     'setsid',
+                     'setuid',
+                     'sigaction',
+                     'sigaltstack',
+                     'signal',
+                     'umount',
+                     'vfork']),
+ 'getresgid': set(['capget',
+                   'clone',
+                   'fork',
+                   'get_robust_list',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getrusage',
+                   'getsid',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setsid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'vfork']),
+ 'getresgid16': set(['capget',
+                     'clone',
+                     'fork',
+                     'get_robust_list',
+                     'getitimer',
+                     'getpgid',
+                     'getppid',
+                     'getpriority',
+                     'getrusage',
+                     'getsid',
+                     'ioprio_get',
+                     'ioprio_set',
+                     'keyctl',
+                     'kill',
+                     'migrate_pages',
+                     'move_pages',
+                     'mq_timedreceive',
+                     'mq_timedsend',
+                     'msgrcv',
+                     'perf_event_open',
+                     'prctl',
+                     'prlimit64',
+                     'ptrace',
+                     'rt_sigaction',
+                     'rt_sigprocmask',
+                     'rt_sigtimedwait',
+                     'sched_getaffinity',
+                     'sched_getattr',
+                     'sched_getparam',
+                     'sched_getscheduler',
+                     'sched_rr_get_interval',
+                     'sched_setaffinity',
+                     'sched_setattr',
+                     'sched_setparam',
+                     'sched_setscheduler',
+                     'semtimedop',
+                     'setitimer',
+                     'setns',
+                     'setpgid',
+                     'setpriority',
+                     'setsid',
+                     'sigaction',
+                     'sigaltstack',
+                     'signal',
+                     'umount',
+                     'vfork']),
+ 'getresuid': set(['capget',
+                   'clone',
+                   'fork',
+                   'get_robust_list',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getrusage',
+                   'getsid',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setsid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'vfork']),
+ 'getresuid16': set(['capget',
+                     'clone',
+                     'fork',
+                     'get_robust_list',
+                     'getitimer',
+                     'getpgid',
+                     'getppid',
+                     'getpriority',
+                     'getrusage',
+                     'getsid',
+                     'ioprio_get',
+                     'ioprio_set',
+                     'keyctl',
+                     'kill',
+                     'migrate_pages',
+                     'move_pages',
+                     'mq_timedreceive',
+                     'mq_timedsend',
+                     'msgrcv',
+                     'perf_event_open',
+                     'prctl',
+                     'prlimit64',
+                     'ptrace',
+                     'rt_sigaction',
+                     'rt_sigprocmask',
+                     'rt_sigtimedwait',
+                     'sched_getaffinity',
+                     'sched_getattr',
+                     'sched_getparam',
+                     'sched_getscheduler',
+                     'sched_rr_get_interval',
+                     'sched_setaffinity',
+                     'sched_setattr',
+                     'sched_setparam',
+                     'sched_setscheduler',
+                     'semtimedop',
+                     'setitimer',
+                     'setns',
+                     'setpgid',
+                     'setpriority',
+                     'setsid',
+                     'sigaction',
+                     'sigaltstack',
+                     'signal',
+                     'umount',
+                     'vfork']),
+ 'getrlimit': set(['old_getrlimit', 'prlimit64', 'setrlimit']),
+ 'getrusage': set(['exit_group', 'timer_create']),
+ 'getsockname': set(['accept4',
+                     'bind',
+                     'bpf',
+                     'connect',
+                     'copy_file_range',
+                     'epoll_ctl',
+                     'epoll_wait',
+                     'fallocate',
+                     'fchdir',
+                     'fchmod',
+                     'fchown',
+                     'fcntl',
+                     'fcntl64',
+                     'fdatasync',
+                     'fgetxattr',
+                     'flistxattr',
+                     'flock',
+                     'fremovexattr',
+                     'fsetxattr',
+                     'fstatfs',
+                     'fstatfs64',
+                     'fsync',
+                     'ftruncate',
+                     'futimesat',
+                     'getdents',
+                     'getdents64',
+                     'getpeername',
+                     'getsockname',
+                     'getsockopt',
+                     'inotify_add_watch',
+                     'inotify_rm_watch',
+                     'ioctl',
+                     'listen',
+                     'llseek',
+                     'lseek',
+                     'mq_getsetattr',
+                     'mq_notify',
+                     'mq_timedreceive',
+                     'mq_timedsend',
+                     'old_readdir',
+                     'perf_event_open',
+                     'pread64',
+                     'preadv',
+                     'preadv2',
+                     'preadv64',
+                     'preadv64v2',
+                     'pwrite64',
+                     'pwritev',
+                     'pwritev2',
+                     'pwritev64',
+                     'pwritev64v2',
+                     'read',
+                     'readahead',
+                     'readv',
+                     'recvfrom',
+                     'sendfile',
+                     'sendfile64',
+                     'sendto',
+                     'setsockopt',
+                     'shutdown',
+                     'signalfd4',
+                     'splice',
+                     'sync_file_range',
+                     'syncfs',
+                     'tee',
+                     'utime',
+                     'utimensat',
+                     'vmsplice',
+                     'write',
+                     'writev']),
+ 'getsockopt': set(['accept4',
+                    'bind',
+                    'bpf',
+                    'connect',
+                    'copy_file_range',
+                    'epoll_ctl',
+                    'epoll_wait',
+                    'fallocate',
+                    'fchdir',
+                    'fchmod',
+                    'fchown',
+                    'fcntl',
+                    'fcntl64',
+                    'fdatasync',
+                    'fgetxattr',
+                    'flistxattr',
+                    'flock',
+                    'fremovexattr',
+                    'fsetxattr',
+                    'fstatfs',
+                    'fstatfs64',
+                    'fsync',
+                    'ftruncate',
+                    'futimesat',
+                    'getdents',
+                    'getdents64',
+                    'getpeername',
+                    'getsockname',
+                    'getsockopt',
+                    'inotify_add_watch',
+                    'inotify_rm_watch',
+                    'ioctl',
+                    'listen',
+                    'llseek',
+                    'lseek',
+                    'mq_getsetattr',
+                    'mq_notify',
+                    'mq_timedreceive',
+                    'mq_timedsend',
+                    'old_readdir',
+                    'perf_event_open',
+                    'pread64',
+                    'preadv',
+                    'preadv2',
+                    'preadv64',
+                    'preadv64v2',
+                    'pwrite64',
+                    'pwritev',
+                    'pwritev2',
+                    'pwritev64',
+                    'pwritev64v2',
+                    'read',
+                    'readahead',
+                    'readv',
+                    'recvfrom',
+                    'sendfile',
+                    'sendfile64',
+                    'sendto',
+                    'setsockopt',
+                    'shutdown',
+                    'signalfd4',
+                    'splice',
+                    'sync_file_range',
+                    'syncfs',
+                    'tee',
+                    'utime',
+                    'utimensat',
+                    'vmsplice',
+                    'write',
+                    'writev']),
+ 'getuid': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'getuid16': set(['capget',
+                  'clone',
+                  'fork',
+                  'get_robust_list',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'perf_event_open',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'vfork']),
+ 'getxattr': set(['accept4',
+                  'acct',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'eventfd2',
+                  'flock',
+                  'getcwd',
+                  'lookup_dcookie',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_open',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'pivot_root',
+                  'quotactl',
+                  'remap_file_pages',
+                  'setns',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'socket',
+                  'socketpair',
+                  'swapoff',
+                  'swapon',
+                  'unshare',
+                  'uselib']),
+ 'init_module': set(['delete_module', 'finit_module', 'init_module']),
+ 'inotify_add_watch': set(['accept4',
+                           'acct',
+                           'bind',
+                           'bpf',
+                           'connect',
+                           'copy_file_range',
+                           'dup',
+                           'dup3',
+                           'epoll_create1',
+                           'epoll_ctl',
+                           'epoll_wait',
+                           'eventfd2',
+                           'fallocate',
+                           'fchdir',
+                           'fchmod',
+                           'fchown',
+                           'fcntl',
+                           'fcntl64',
+                           'fdatasync',
+                           'fgetxattr',
+                           'flistxattr',
+                           'flock',
+                           'fremovexattr',
+                           'fsetxattr',
+                           'fstatfs',
+                           'fstatfs64',
+                           'fsync',
+                           'ftruncate',
+                           'futimesat',
+                           'getcwd',
+                           'getdents',
+                           'getdents64',
+                           'getpeername',
+                           'getsockname',
+                           'getsockopt',
+                           'inotify_add_watch',
+                           'inotify_rm_watch',
+                           'ioctl',
+                           'linkat',
+                           'listen',
+                           'llseek',
+                           'lseek',
+                           'memfd_create',
+                           'mkdirat',
+                           'mknodat',
+                           'mmap_pgoff',
+                           'mq_getsetattr',
+                           'mq_notify',
+                           'mq_open',
+                           'mq_timedreceive',
+                           'mq_timedsend',
+                           'mq_unlink',
+                           'old_readdir',
+                           'open',
+                           'open_by_handle_at',
+                           'openat',
+                           'perf_event_open',
+                           'pipe2',
+                           'pivot_root',
+                           'pread64',
+                           'preadv',
+                           'preadv2',
+                           'preadv64',
+                           'preadv64v2',
+                           'pwrite64',
+                           'pwritev',
+                           'pwritev2',
+                           'pwritev64',
+                           'pwritev64v2',
+                           'read',
+                           'readahead',
+                           'readv',
+                           'recvfrom',
+                           'remap_file_pages',
+                           'renameat2',
+                           'rmdir',
+                           'sendfile',
+                           'sendfile64',
+                           'sendto',
+                           'setns',
+                           'setsockopt',
+                           'shmat',
+                           'shmctl',
+                           'shmdt',
+                           'shutdown',
+                           'signalfd4',
+                           'socket',
+                           'socketpair',
+                           'splice',
+                           'swapoff',
+                           'swapon',
+                           'symlinkat',
+                           'sync_file_range',
+                           'syncfs',
+                           'tee',
+                           'unlink',
+                           'unlinkat',
+                           'uselib',
+                           'utime',
+                           'utimensat',
+                           'vmsplice',
+                           'write',
+                           'writev']),
+ 'inotify_init1': set(['capget',
+                       'clone',
+                       'fork',
+                       'get_robust_list',
+                       'getitimer',
+                       'getpgid',
+                       'getppid',
+                       'getpriority',
+                       'getrusage',
+                       'getsid',
+                       'inotify_add_watch',
+                       'inotify_init1',
+                       'inotify_rm_watch',
+                       'ioprio_get',
+                       'ioprio_set',
+                       'keyctl',
+                       'kill',
+                       'migrate_pages',
+                       'move_pages',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'msgrcv',
+                       'perf_event_open',
+                       'prctl',
+                       'prlimit64',
+                       'ptrace',
+                       'rt_sigaction',
+                       'rt_sigprocmask',
+                       'rt_sigtimedwait',
+                       'sched_getaffinity',
+                       'sched_getattr',
+                       'sched_getparam',
+                       'sched_getscheduler',
+                       'sched_rr_get_interval',
+                       'sched_setaffinity',
+                       'sched_setattr',
+                       'sched_setparam',
+                       'sched_setscheduler',
+                       'semtimedop',
+                       'setitimer',
+                       'setns',
+                       'setpgid',
+                       'setpriority',
+                       'setsid',
+                       'sigaction',
+                       'sigaltstack',
+                       'signal',
+                       'umount',
+                       'vfork']),
+ 'inotify_rm_watch': set(['accept4',
+                          'acct',
+                          'bind',
+                          'bpf',
+                          'connect',
+                          'copy_file_range',
+                          'dup',
+                          'dup3',
+                          'epoll_create1',
+                          'epoll_ctl',
+                          'epoll_wait',
+                          'eventfd2',
+                          'fallocate',
+                          'fchdir',
+                          'fchmod',
+                          'fchown',
+                          'fcntl',
+                          'fcntl64',
+                          'fdatasync',
+                          'fgetxattr',
+                          'flistxattr',
+                          'flock',
+                          'fremovexattr',
+                          'fsetxattr',
+                          'fstatfs',
+                          'fstatfs64',
+                          'fsync',
+                          'ftruncate',
+                          'futimesat',
+                          'getdents',
+                          'getdents64',
+                          'getpeername',
+                          'getsockname',
+                          'getsockopt',
+                          'inotify_add_watch',
+                          'inotify_rm_watch',
+                          'ioctl',
+                          'listen',
+                          'llseek',
+                          'lseek',
+                          'memfd_create',
+                          'mmap_pgoff',
+                          'mq_getsetattr',
+                          'mq_notify',
+                          'mq_open',
+                          'mq_timedreceive',
+                          'mq_timedsend',
+                          'old_readdir',
+                          'open',
+                          'open_by_handle_at',
+                          'openat',
+                          'perf_event_open',
+                          'pipe2',
+                          'pread64',
+                          'preadv',
+                          'preadv2',
+                          'preadv64',
+                          'preadv64v2',
+                          'pwrite64',
+                          'pwritev',
+                          'pwritev2',
+                          'pwritev64',
+                          'pwritev64v2',
+                          'read',
+                          'readahead',
+                          'readv',
+                          'recvfrom',
+                          'remap_file_pages',
+                          'sendfile',
+                          'sendfile64',
+                          'sendto',
+                          'setns',
+                          'setsockopt',
+                          'shmat',
+                          'shmctl',
+                          'shmdt',
+                          'shutdown',
+                          'signalfd4',
+                          'socket',
+                          'socketpair',
+                          'splice',
+                          'swapoff',
+                          'swapon',
+                          'sync_file_range',
+                          'syncfs',
+                          'tee',
+                          'uselib',
+                          'utime',
+                          'utimensat',
+                          'vmsplice',
+                          'write',
+                          'writev']),
+ 'io_cancel': set(['brk',
+                   'get_mempolicy',
+                   'getrusage',
+                   'io_cancel',
+                   'io_destroy',
+                   'io_getevents',
+                   'io_setup',
+                   'io_submit',
+                   'mbind',
+                   'migrate_pages',
+                   'mincore',
+                   'modify_ldt',
+                   'move_pages',
+                   'mremap',
+                   'prctl',
+                   'remap_file_pages',
+                   'shmdt',
+                   'swapoff']),
+ 'io_destroy': set(['brk',
+                    'get_mempolicy',
+                    'getrusage',
+                    'io_cancel',
+                    'io_destroy',
+                    'io_getevents',
+                    'io_setup',
+                    'io_submit',
+                    'mbind',
+                    'migrate_pages',
+                    'mincore',
+                    'modify_ldt',
+                    'move_pages',
+                    'mremap',
+                    'prctl',
+                    'remap_file_pages',
+                    'shmdt',
+                    'swapoff']),
+ 'io_getevents': set(['brk',
+                      'capget',
+                      'clone',
+                      'fork',
+                      'get_mempolicy',
+                      'get_robust_list',
+                      'getitimer',
+                      'getpgid',
+                      'getppid',
+                      'getpriority',
+                      'getrusage',
+                      'getsid',
+                      'io_cancel',
+                      'io_destroy',
+                      'io_getevents',
+                      'io_setup',
+                      'io_submit',
+                      'ioprio_get',
+                      'ioprio_set',
+                      'keyctl',
+                      'kill',
+                      'mbind',
+                      'migrate_pages',
+                      'mincore',
+                      'modify_ldt',
+                      'move_pages',
+                      'mq_timedreceive',
+                      'mq_timedsend',
+                      'mremap',
+                      'msgrcv',
+                      'perf_event_open',
+                      'prctl',
+                      'prlimit64',
+                      'ptrace',
+                      'remap_file_pages',
+                      'rt_sigaction',
+                      'rt_sigprocmask',
+                      'rt_sigtimedwait',
+                      'sched_getaffinity',
+                      'sched_getattr',
+                      'sched_getparam',
+                      'sched_getscheduler',
+                      'sched_rr_get_interval',
+                      'sched_setaffinity',
+                      'sched_setattr',
+                      'sched_setparam',
+                      'sched_setscheduler',
+                      'semtimedop',
+                      'setitimer',
+                      'setns',
+                      'setpgid',
+                      'setpriority',
+                      'setsid',
+                      'shmdt',
+                      'sigaction',
+                      'sigaltstack',
+                      'signal',
+                      'swapoff',
+                      'umount',
+                      'vfork']),
+ 'io_setup': set(['io_cancel',
+                  'io_destroy',
+                  'io_getevents',
+                  'io_setup',
+                  'io_submit']),
+ 'io_submit': set(['capget',
+                   'clone',
+                   'fork',
+                   'get_robust_list',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getrusage',
+                   'getsid',
+                   'ioperm',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setsid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'vfork']),
+ 'ioctl': set(['accept4',
+               'bind',
+               'bpf',
+               'connect',
+               'copy_file_range',
+               'epoll_ctl',
+               'epoll_wait',
+               'fallocate',
+               'fchdir',
+               'fchmod',
+               'fchown',
+               'fcntl',
+               'fcntl64',
+               'fdatasync',
+               'fgetxattr',
+               'flistxattr',
+               'flock',
+               'fremovexattr',
+               'fsetxattr',
+               'fstatfs',
+               'fstatfs64',
+               'fsync',
+               'ftruncate',
+               'futimesat',
+               'getdents',
+               'getdents64',
+               'getpeername',
+               'getsockname',
+               'getsockopt',
+               'inotify_add_watch',
+               'inotify_rm_watch',
+               'ioctl',
+               'listen',
+               'llseek',
+               'lseek',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'old_readdir',
+               'perf_event_open',
+               'pread64',
+               'preadv',
+               'preadv2',
+               'preadv64',
+               'preadv64v2',
+               'pwrite64',
+               'pwritev',
+               'pwritev2',
+               'pwritev64',
+               'pwritev64v2',
+               'read',
+               'readahead',
+               'readv',
+               'recvfrom',
+               'sendfile',
+               'sendfile64',
+               'sendto',
+               'setsockopt',
+               'shutdown',
+               'signalfd4',
+               'splice',
+               'sync_file_range',
+               'syncfs',
+               'tee',
+               'utime',
+               'utimensat',
+               'vmsplice',
+               'write',
+               'writev']),
+ 'ioperm': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioperm',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'ioprio_get': set(['capget',
+                    'clone',
+                    'fork',
+                    'get_robust_list',
+                    'getitimer',
+                    'getpgid',
+                    'getppid',
+                    'getpriority',
+                    'getrusage',
+                    'getsid',
+                    'ioprio_get',
+                    'ioprio_set',
+                    'keyctl',
+                    'kill',
+                    'migrate_pages',
+                    'move_pages',
+                    'mq_timedreceive',
+                    'mq_timedsend',
+                    'msgrcv',
+                    'perf_event_open',
+                    'prctl',
+                    'prlimit64',
+                    'ptrace',
+                    'rt_sigaction',
+                    'rt_sigprocmask',
+                    'rt_sigtimedwait',
+                    'sched_getaffinity',
+                    'sched_getattr',
+                    'sched_getparam',
+                    'sched_getscheduler',
+                    'sched_rr_get_interval',
+                    'sched_setaffinity',
+                    'sched_setattr',
+                    'sched_setparam',
+                    'sched_setscheduler',
+                    'semtimedop',
+                    'setitimer',
+                    'setns',
+                    'setpgid',
+                    'setpriority',
+                    'setsid',
+                    'sigaction',
+                    'sigaltstack',
+                    'signal',
+                    'umount',
+                    'vfork']),
+ 'ioprio_set': set(['capget',
+                    'clone',
+                    'fork',
+                    'get_robust_list',
+                    'getitimer',
+                    'getpgid',
+                    'getppid',
+                    'getpriority',
+                    'getrusage',
+                    'getsid',
+                    'ioprio_get',
+                    'ioprio_set',
+                    'keyctl',
+                    'kill',
+                    'migrate_pages',
+                    'move_pages',
+                    'mq_timedreceive',
+                    'mq_timedsend',
+                    'msgrcv',
+                    'perf_event_open',
+                    'prctl',
+                    'prlimit64',
+                    'ptrace',
+                    'rt_sigaction',
+                    'rt_sigprocmask',
+                    'rt_sigtimedwait',
+                    'sched_getaffinity',
+                    'sched_getattr',
+                    'sched_getparam',
+                    'sched_getscheduler',
+                    'sched_rr_get_interval',
+                    'sched_setaffinity',
+                    'sched_setattr',
+                    'sched_setparam',
+                    'sched_setscheduler',
+                    'semtimedop',
+                    'setitimer',
+                    'setns',
+                    'setpgid',
+                    'setpriority',
+                    'setsid',
+                    'sigaction',
+                    'sigaltstack',
+                    'signal',
+                    'umount',
+                    'vfork']),
+ 'keyctl': set(['capget',
+                'capset',
+                'clone',
+                'epoll_create1',
+                'faccessat',
+                'fork',
+                'get_robust_list',
+                'getgroups',
+                'getgroups16',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getresgid',
+                'getresgid16',
+                'getresuid',
+                'getresuid16',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'request_key',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setfsgid',
+                'setfsuid',
+                'setgid',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setregid',
+                'setresgid',
+                'setresuid',
+                'setreuid',
+                'setsid',
+                'setuid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'unshare',
+                'vfork']),
+ 'kill': set(['capget',
+              'clone',
+              'fork',
+              'get_robust_list',
+              'getitimer',
+              'getpgid',
+              'getppid',
+              'getpriority',
+              'getrusage',
+              'getsid',
+              'ioprio_get',
+              'ioprio_set',
+              'keyctl',
+              'kill',
+              'migrate_pages',
+              'move_pages',
+              'mq_timedreceive',
+              'mq_timedsend',
+              'msgrcv',
+              'perf_event_open',
+              'prctl',
+              'prlimit64',
+              'ptrace',
+              'rt_sigaction',
+              'rt_sigprocmask',
+              'rt_sigtimedwait',
+              'sched_getaffinity',
+              'sched_getattr',
+              'sched_getparam',
+              'sched_getscheduler',
+              'sched_rr_get_interval',
+              'sched_setaffinity',
+              'sched_setattr',
+              'sched_setparam',
+              'sched_setscheduler',
+              'semtimedop',
+              'setitimer',
+              'setns',
+              'setpgid',
+              'setpriority',
+              'setsid',
+              'sigaction',
+              'sigaltstack',
+              'signal',
+              'umount',
+              'vfork']),
+ 'lgetxattr': set(['accept4',
+                   'acct',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'eventfd2',
+                   'flock',
+                   'getcwd',
+                   'lookup_dcookie',
+                   'memfd_create',
+                   'mmap_pgoff',
+                   'mq_open',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'pivot_root',
+                   'quotactl',
+                   'remap_file_pages',
+                   'setns',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'socket',
+                   'socketpair',
+                   'swapoff',
+                   'swapon',
+                   'unshare',
+                   'uselib']),
+ 'linkat': set(['accept4',
+                'acct',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'eventfd2',
+                'flock',
+                'getcwd',
+                'lookup_dcookie',
+                'memfd_create',
+                'mmap_pgoff',
+                'mq_open',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'pivot_root',
+                'quotactl',
+                'remap_file_pages',
+                'setns',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'socket',
+                'socketpair',
+                'swapoff',
+                'swapon',
+                'unshare',
+                'uselib']),
+ 'listen': set(['accept4',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'epoll_ctl',
+                'epoll_wait',
+                'fallocate',
+                'fchdir',
+                'fchmod',
+                'fchown',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'llseek',
+                'lseek',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'perf_event_open',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setsockopt',
+                'shutdown',
+                'signalfd4',
+                'splice',
+                'sync_file_range',
+                'syncfs',
+                'tee',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'listxattr': set(['accept4',
+                   'acct',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'eventfd2',
+                   'flock',
+                   'getcwd',
+                   'lookup_dcookie',
+                   'memfd_create',
+                   'mmap_pgoff',
+                   'mq_open',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'pivot_root',
+                   'quotactl',
+                   'remap_file_pages',
+                   'setns',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'socket',
+                   'socketpair',
+                   'swapoff',
+                   'swapon',
+                   'unshare',
+                   'uselib']),
+ 'llistxattr': set(['accept4',
+                    'acct',
+                    'dup',
+                    'dup3',
+                    'epoll_create1',
+                    'epoll_ctl',
+                    'eventfd2',
+                    'flock',
+                    'getcwd',
+                    'lookup_dcookie',
+                    'memfd_create',
+                    'mmap_pgoff',
+                    'mq_open',
+                    'open',
+                    'open_by_handle_at',
+                    'openat',
+                    'perf_event_open',
+                    'pipe2',
+                    'pivot_root',
+                    'quotactl',
+                    'remap_file_pages',
+                    'setns',
+                    'shmat',
+                    'shmctl',
+                    'shmdt',
+                    'socket',
+                    'socketpair',
+                    'swapoff',
+                    'swapon',
+                    'unshare',
+                    'uselib']),
+ 'llseek': set(['accept4',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'epoll_ctl',
+                'epoll_wait',
+                'fallocate',
+                'fchdir',
+                'fchmod',
+                'fchown',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'llseek',
+                'lseek',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'perf_event_open',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setsockopt',
+                'shutdown',
+                'signalfd4',
+                'splice',
+                'sync_file_range',
+                'syncfs',
+                'tee',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'lremovexattr': set(['accept4',
+                      'acct',
+                      'dup',
+                      'dup3',
+                      'epoll_create1',
+                      'epoll_ctl',
+                      'eventfd2',
+                      'flock',
+                      'getcwd',
+                      'lookup_dcookie',
+                      'memfd_create',
+                      'mmap_pgoff',
+                      'mq_open',
+                      'open',
+                      'open_by_handle_at',
+                      'openat',
+                      'perf_event_open',
+                      'pipe2',
+                      'pivot_root',
+                      'quotactl',
+                      'remap_file_pages',
+                      'setns',
+                      'shmat',
+                      'shmctl',
+                      'shmdt',
+                      'socket',
+                      'socketpair',
+                      'swapoff',
+                      'swapon',
+                      'unshare',
+                      'uselib']),
+ 'lseek': set(['accept4',
+               'bind',
+               'bpf',
+               'connect',
+               'copy_file_range',
+               'epoll_ctl',
+               'epoll_wait',
+               'fallocate',
+               'fchdir',
+               'fchmod',
+               'fchown',
+               'fcntl',
+               'fcntl64',
+               'fdatasync',
+               'fgetxattr',
+               'flistxattr',
+               'flock',
+               'fremovexattr',
+               'fsetxattr',
+               'fstatfs',
+               'fstatfs64',
+               'fsync',
+               'ftruncate',
+               'futimesat',
+               'getdents',
+               'getdents64',
+               'getpeername',
+               'getsockname',
+               'getsockopt',
+               'inotify_add_watch',
+               'inotify_rm_watch',
+               'ioctl',
+               'listen',
+               'llseek',
+               'lseek',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'old_readdir',
+               'perf_event_open',
+               'pread64',
+               'preadv',
+               'preadv2',
+               'preadv64',
+               'preadv64v2',
+               'pwrite64',
+               'pwritev',
+               'pwritev2',
+               'pwritev64',
+               'pwritev64v2',
+               'read',
+               'readahead',
+               'readv',
+               'recvfrom',
+               'sendfile',
+               'sendfile64',
+               'sendto',
+               'setsockopt',
+               'shutdown',
+               'signalfd4',
+               'splice',
+               'sync_file_range',
+               'syncfs',
+               'tee',
+               'utime',
+               'utimensat',
+               'vmsplice',
+               'write',
+               'writev']),
+ 'lsetxattr': set(['accept4',
+                   'acct',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'eventfd2',
+                   'flock',
+                   'getcwd',
+                   'lookup_dcookie',
+                   'memfd_create',
+                   'mmap_pgoff',
+                   'mq_open',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'pivot_root',
+                   'quotactl',
+                   'remap_file_pages',
+                   'setns',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'socket',
+                   'socketpair',
+                   'swapoff',
+                   'swapon',
+                   'unshare',
+                   'uselib']),
+ 'lstat': set(['fstat', 'lstat', 'newfstat', 'stat']),
+ 'madvise': set(['brk',
+                 'get_mempolicy',
+                 'madvise',
+                 'mincore',
+                 'mlockall',
+                 'mprotect',
+                 'mremap',
+                 'munlock',
+                 'munlockall',
+                 'pkey_mprotect',
+                 'prctl',
+                 'remap_file_pages',
+                 'shmdt']),
+ 'migrate_pages': set(['capget',
+                       'clone',
+                       'fork',
+                       'get_robust_list',
+                       'getitimer',
+                       'getpgid',
+                       'getppid',
+                       'getpriority',
+                       'getrusage',
+                       'getsid',
+                       'ioperm',
+                       'ioprio_get',
+                       'ioprio_set',
+                       'keyctl',
+                       'kill',
+                       'migrate_pages',
+                       'move_pages',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'msgrcv',
+                       'perf_event_open',
+                       'prctl',
+                       'prlimit64',
+                       'ptrace',
+                       'rt_sigaction',
+                       'rt_sigprocmask',
+                       'rt_sigtimedwait',
+                       'sched_getaffinity',
+                       'sched_getattr',
+                       'sched_getparam',
+                       'sched_getscheduler',
+                       'sched_rr_get_interval',
+                       'sched_setaffinity',
+                       'sched_setattr',
+                       'sched_setparam',
+                       'sched_setscheduler',
+                       'semtimedop',
+                       'setitimer',
+                       'setns',
+                       'setpgid',
+                       'setpriority',
+                       'setresuid',
+                       'setreuid',
+                       'setsid',
+                       'setuid',
+                       'sigaction',
+                       'sigaltstack',
+                       'signal',
+                       'umount',
+                       'vfork']),
+ 'mincore': set(['brk',
+                 'capget',
+                 'clone',
+                 'fork',
+                 'get_mempolicy',
+                 'get_robust_list',
+                 'getitimer',
+                 'getpgid',
+                 'getppid',
+                 'getpriority',
+                 'getrusage',
+                 'getsid',
+                 'ioperm',
+                 'ioprio_get',
+                 'ioprio_set',
+                 'keyctl',
+                 'kill',
+                 'madvise',
+                 'migrate_pages',
+                 'mincore',
+                 'mlockall',
+                 'move_pages',
+                 'mprotect',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'mremap',
+                 'msgrcv',
+                 'munlock',
+                 'munlockall',
+                 'perf_event_open',
+                 'pkey_mprotect',
+                 'prctl',
+                 'prlimit64',
+                 'ptrace',
+                 'remap_file_pages',
+                 'rt_sigaction',
+                 'rt_sigprocmask',
+                 'rt_sigtimedwait',
+                 'sched_getaffinity',
+                 'sched_getattr',
+                 'sched_getparam',
+                 'sched_getscheduler',
+                 'sched_rr_get_interval',
+                 'sched_setaffinity',
+                 'sched_setattr',
+                 'sched_setparam',
+                 'sched_setscheduler',
+                 'semtimedop',
+                 'setitimer',
+                 'setns',
+                 'setpgid',
+                 'setpriority',
+                 'setsid',
+                 'shmdt',
+                 'sigaction',
+                 'sigaltstack',
+                 'signal',
+                 'umount',
+                 'vfork']),
+ 'mkdirat': set(['quotactl', 'swapon', 'syncfs', 'umount', 'ustat']),
+ 'mknodat': set(['quotactl', 'swapon', 'syncfs', 'umount', 'ustat']),
+ 'mlock': set(['capget',
+               'clone',
+               'fork',
+               'get_robust_list',
+               'getitimer',
+               'getpgid',
+               'getppid',
+               'getpriority',
+               'getrusage',
+               'getsid',
+               'ioprio_get',
+               'ioprio_set',
+               'keyctl',
+               'kill',
+               'migrate_pages',
+               'move_pages',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'msgrcv',
+               'perf_event_open',
+               'prctl',
+               'prlimit64',
+               'ptrace',
+               'rt_sigaction',
+               'rt_sigprocmask',
+               'rt_sigtimedwait',
+               'sched_getaffinity',
+               'sched_getattr',
+               'sched_getparam',
+               'sched_getscheduler',
+               'sched_rr_get_interval',
+               'sched_setaffinity',
+               'sched_setattr',
+               'sched_setparam',
+               'sched_setscheduler',
+               'semtimedop',
+               'setitimer',
+               'setns',
+               'setpgid',
+               'setpriority',
+               'setsid',
+               'sigaction',
+               'sigaltstack',
+               'signal',
+               'umount',
+               'vfork']),
+ 'mlock2': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'mlockall': set(['brk',
+                  'capget',
+                  'clone',
+                  'fork',
+                  'get_mempolicy',
+                  'get_robust_list',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'io_cancel',
+                  'io_destroy',
+                  'io_getevents',
+                  'io_setup',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'madvise',
+                  'mbind',
+                  'migrate_pages',
+                  'mincore',
+                  'mlockall',
+                  'modify_ldt',
+                  'move_pages',
+                  'mprotect',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'mremap',
+                  'msgrcv',
+                  'munlock',
+                  'munlockall',
+                  'perf_event_open',
+                  'personality',
+                  'pkey_mprotect',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'remap_file_pages',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'shmdt',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'swapoff',
+                  'umount',
+                  'vfork']),
+ 'mmap_pgoff': set(['accept4',
+                    'acct',
+                    'dup',
+                    'dup3',
+                    'epoll_create1',
+                    'epoll_ctl',
+                    'eventfd2',
+                    'flock',
+                    'memfd_create',
+                    'mmap_pgoff',
+                    'mq_open',
+                    'open',
+                    'open_by_handle_at',
+                    'openat',
+                    'perf_event_open',
+                    'pipe2',
+                    'remap_file_pages',
+                    'setns',
+                    'shmat',
+                    'shmctl',
+                    'shmdt',
+                    'socket',
+                    'socketpair',
+                    'swapoff',
+                    'swapon',
+                    'uselib']),
+ 'modify_ldt': set(['brk',
+                    'get_mempolicy',
+                    'get_thread_area',
+                    'getrusage',
+                    'io_cancel',
+                    'io_destroy',
+                    'io_getevents',
+                    'io_setup',
+                    'mbind',
+                    'migrate_pages',
+                    'mincore',
+                    'modify_ldt',
+                    'move_pages',
+                    'mremap',
+                    'prctl',
+                    'remap_file_pages',
+                    'set_thread_area',
+                    'shmdt',
+                    'swapoff']),
+ 'mount': set(['capget',
+               'clone',
+               'fork',
+               'get_robust_list',
+               'getitimer',
+               'getpgid',
+               'getppid',
+               'getpriority',
+               'getrusage',
+               'getsid',
+               'ioprio_get',
+               'ioprio_set',
+               'keyctl',
+               'kill',
+               'migrate_pages',
+               'mount',
+               'move_pages',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'msgrcv',
+               'perf_event_open',
+               'personality',
+               'prctl',
+               'prlimit64',
+               'ptrace',
+               'rt_sigaction',
+               'rt_sigprocmask',
+               'rt_sigtimedwait',
+               'sched_getaffinity',
+               'sched_getattr',
+               'sched_getparam',
+               'sched_getscheduler',
+               'sched_rr_get_interval',
+               'sched_setaffinity',
+               'sched_setattr',
+               'sched_setparam',
+               'sched_setscheduler',
+               'semtimedop',
+               'setitimer',
+               'setns',
+               'setpgid',
+               'setpriority',
+               'setsid',
+               'sigaction',
+               'sigaltstack',
+               'signal',
+               'umount',
+               'vfork']),
+ 'mprotect': set(['brk',
+                  'capget',
+                  'clone',
+                  'fork',
+                  'get_mempolicy',
+                  'get_robust_list',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'madvise',
+                  'migrate_pages',
+                  'mincore',
+                  'mlockall',
+                  'move_pages',
+                  'mprotect',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'mremap',
+                  'msgrcv',
+                  'munlock',
+                  'munlockall',
+                  'perf_event_open',
+                  'personality',
+                  'pkey_mprotect',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'remap_file_pages',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'shmdt',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'vfork']),
+ 'mq_getsetattr': set(['accept4',
+                       'acct',
+                       'bind',
+                       'bpf',
+                       'connect',
+                       'copy_file_range',
+                       'dup',
+                       'dup3',
+                       'epoll_create1',
+                       'epoll_ctl',
+                       'epoll_wait',
+                       'eventfd2',
+                       'fallocate',
+                       'fchdir',
+                       'fchmod',
+                       'fchown',
+                       'fcntl',
+                       'fcntl64',
+                       'fdatasync',
+                       'fgetxattr',
+                       'flistxattr',
+                       'flock',
+                       'fremovexattr',
+                       'fsetxattr',
+                       'fstatfs',
+                       'fstatfs64',
+                       'fsync',
+                       'ftruncate',
+                       'futimesat',
+                       'getdents',
+                       'getdents64',
+                       'getpeername',
+                       'getsockname',
+                       'getsockopt',
+                       'inotify_add_watch',
+                       'inotify_rm_watch',
+                       'ioctl',
+                       'listen',
+                       'llseek',
+                       'lseek',
+                       'memfd_create',
+                       'mmap_pgoff',
+                       'mq_getsetattr',
+                       'mq_notify',
+                       'mq_open',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'old_readdir',
+                       'open',
+                       'open_by_handle_at',
+                       'openat',
+                       'perf_event_open',
+                       'pipe2',
+                       'pread64',
+                       'preadv',
+                       'preadv2',
+                       'preadv64',
+                       'preadv64v2',
+                       'pwrite64',
+                       'pwritev',
+                       'pwritev2',
+                       'pwritev64',
+                       'pwritev64v2',
+                       'read',
+                       'readahead',
+                       'readv',
+                       'recvfrom',
+                       'remap_file_pages',
+                       'sendfile',
+                       'sendfile64',
+                       'sendto',
+                       'setns',
+                       'setsockopt',
+                       'shmat',
+                       'shmctl',
+                       'shmdt',
+                       'shutdown',
+                       'signalfd4',
+                       'socket',
+                       'socketpair',
+                       'splice',
+                       'swapoff',
+                       'swapon',
+                       'sync_file_range',
+                       'syncfs',
+                       'tee',
+                       'uselib',
+                       'utime',
+                       'utimensat',
+                       'vmsplice',
+                       'write',
+                       'writev']),
+ 'mq_notify': set(['accept4',
+                   'acct',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'eventfd2',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchown',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'memfd_create',
+                   'mmap_pgoff',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_open',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'old_readdir',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readv',
+                   'recvfrom',
+                   'remap_file_pages',
+                   'rt_sigqueueinfo',
+                   'rt_sigreturn',
+                   'rt_sigtimedwait',
+                   'rt_tgsigqueueinfo',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setns',
+                   'setsockopt',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'shutdown',
+                   'signalfd4',
+                   'socket',
+                   'socketpair',
+                   'splice',
+                   'swapoff',
+                   'swapon',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'tgkill',
+                   'timer_create',
+                   'tkill',
+                   'uselib',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'mq_open': set(['accept4',
+                 'acct',
+                 'dup',
+                 'dup3',
+                 'epoll_create1',
+                 'epoll_ctl',
+                 'eventfd2',
+                 'flock',
+                 'getcwd',
+                 'lookup_dcookie',
+                 'memfd_create',
+                 'mmap_pgoff',
+                 'mq_open',
+                 'mq_unlink',
+                 'open',
+                 'open_by_handle_at',
+                 'openat',
+                 'perf_event_open',
+                 'pipe2',
+                 'pivot_root',
+                 'quotactl',
+                 'remap_file_pages',
+                 'renameat2',
+                 'rmdir',
+                 'setns',
+                 'shmat',
+                 'shmctl',
+                 'shmdt',
+                 'socket',
+                 'socketpair',
+                 'swapoff',
+                 'swapon',
+                 'symlinkat',
+                 'sysfs',
+                 'unlink',
+                 'unlinkat',
+                 'unshare',
+                 'uselib']),
+ 'mq_timedreceive': set(['accept4',
+                         'acct',
+                         'bind',
+                         'bpf',
+                         'connect',
+                         'copy_file_range',
+                         'dup',
+                         'dup3',
+                         'epoll_create1',
+                         'epoll_ctl',
+                         'epoll_wait',
+                         'eventfd2',
+                         'fallocate',
+                         'fchdir',
+                         'fchmod',
+                         'fchown',
+                         'fcntl',
+                         'fcntl64',
+                         'fdatasync',
+                         'fgetxattr',
+                         'flistxattr',
+                         'flock',
+                         'fremovexattr',
+                         'fsetxattr',
+                         'fstatfs',
+                         'fstatfs64',
+                         'fsync',
+                         'ftruncate',
+                         'futimesat',
+                         'getdents',
+                         'getdents64',
+                         'getpeername',
+                         'getsockname',
+                         'getsockopt',
+                         'inotify_add_watch',
+                         'inotify_rm_watch',
+                         'ioctl',
+                         'listen',
+                         'llseek',
+                         'lseek',
+                         'memfd_create',
+                         'mmap_pgoff',
+                         'mq_getsetattr',
+                         'mq_notify',
+                         'mq_open',
+                         'mq_timedreceive',
+                         'mq_timedsend',
+                         'msgrcv',
+                         'msgsnd',
+                         'old_readdir',
+                         'open',
+                         'open_by_handle_at',
+                         'openat',
+                         'perf_event_open',
+                         'pipe2',
+                         'pread64',
+                         'preadv',
+                         'preadv2',
+                         'preadv64',
+                         'preadv64v2',
+                         'pwrite64',
+                         'pwritev',
+                         'pwritev2',
+                         'pwritev64',
+                         'pwritev64v2',
+                         'read',
+                         'readahead',
+                         'readv',
+                         'recvfrom',
+                         'remap_file_pages',
+                         'sendfile',
+                         'sendfile64',
+                         'sendto',
+                         'setns',
+                         'setsockopt',
+                         'shmat',
+                         'shmctl',
+                         'shmdt',
+                         'shutdown',
+                         'signalfd4',
+                         'socket',
+                         'socketpair',
+                         'splice',
+                         'swapoff',
+                         'swapon',
+                         'sync_file_range',
+                         'syncfs',
+                         'tee',
+                         'uselib',
+                         'utime',
+                         'utimensat',
+                         'vmsplice',
+                         'write',
+                         'writev']),
+ 'mq_timedsend': set(['accept4',
+                      'acct',
+                      'bind',
+                      'bpf',
+                      'connect',
+                      'copy_file_range',
+                      'dup',
+                      'dup3',
+                      'epoll_create1',
+                      'epoll_ctl',
+                      'epoll_wait',
+                      'eventfd2',
+                      'fallocate',
+                      'fchdir',
+                      'fchmod',
+                      'fchown',
+                      'fcntl',
+                      'fcntl64',
+                      'fdatasync',
+                      'fgetxattr',
+                      'flistxattr',
+                      'flock',
+                      'fremovexattr',
+                      'fsetxattr',
+                      'fstatfs',
+                      'fstatfs64',
+                      'fsync',
+                      'ftruncate',
+                      'futimesat',
+                      'getdents',
+                      'getdents64',
+                      'getpeername',
+                      'getsockname',
+                      'getsockopt',
+                      'inotify_add_watch',
+                      'inotify_rm_watch',
+                      'ioctl',
+                      'listen',
+                      'llseek',
+                      'lseek',
+                      'memfd_create',
+                      'mmap_pgoff',
+                      'mq_getsetattr',
+                      'mq_notify',
+                      'mq_open',
+                      'mq_timedreceive',
+                      'mq_timedsend',
+                      'old_readdir',
+                      'open',
+                      'open_by_handle_at',
+                      'openat',
+                      'perf_event_open',
+                      'pipe2',
+                      'pread64',
+                      'preadv',
+                      'preadv2',
+                      'preadv64',
+                      'preadv64v2',
+                      'pwrite64',
+                      'pwritev',
+                      'pwritev2',
+                      'pwritev64',
+                      'pwritev64v2',
+                      'read',
+                      'readahead',
+                      'readv',
+                      'recvfrom',
+                      'remap_file_pages',
+                      'sendfile',
+                      'sendfile64',
+                      'sendto',
+                      'setns',
+                      'setsockopt',
+                      'shmat',
+                      'shmctl',
+                      'shmdt',
+                      'shutdown',
+                      'signalfd4',
+                      'socket',
+                      'socketpair',
+                      'splice',
+                      'swapoff',
+                      'swapon',
+                      'sync_file_range',
+                      'syncfs',
+                      'tee',
+                      'uselib',
+                      'utime',
+                      'utimensat',
+                      'vmsplice',
+                      'write',
+                      'writev']),
+ 'mremap': set(['brk',
+                'capget',
+                'clone',
+                'fork',
+                'get_mempolicy',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'io_cancel',
+                'io_destroy',
+                'io_getevents',
+                'io_setup',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'madvise',
+                'mbind',
+                'migrate_pages',
+                'mincore',
+                'mlockall',
+                'modify_ldt',
+                'move_pages',
+                'mprotect',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'mremap',
+                'msgrcv',
+                'munlock',
+                'munlockall',
+                'perf_event_open',
+                'personality',
+                'pkey_mprotect',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'remap_file_pages',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'shmdt',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'swapoff',
+                'umount',
+                'vfork']),
+ 'msgctl': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioperm',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_open',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'mq_unlink',
+                'msgctl',
+                'msgget',
+                'msgrcv',
+                'msgsnd',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semctl',
+                'semget',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'shmat',
+                'shmctl',
+                'shmget',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'msgrcv': set(['mq_timedreceive', 'mq_timedsend', 'msgrcv', 'msgsnd']),
+ 'msgsnd': set(['mq_open',
+                'mq_unlink',
+                'msgctl',
+                'msgget',
+                'msgrcv',
+                'msgsnd',
+                'semctl',
+                'semget',
+                'semtimedop',
+                'setns',
+                'shmat',
+                'shmctl',
+                'shmget']),
+ 'munlock': set(['brk',
+                 'capget',
+                 'clone',
+                 'fork',
+                 'get_mempolicy',
+                 'get_robust_list',
+                 'getitimer',
+                 'getpgid',
+                 'getppid',
+                 'getpriority',
+                 'getrusage',
+                 'getsid',
+                 'ioprio_get',
+                 'ioprio_set',
+                 'keyctl',
+                 'kill',
+                 'madvise',
+                 'migrate_pages',
+                 'mincore',
+                 'mlockall',
+                 'move_pages',
+                 'mprotect',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'mremap',
+                 'msgrcv',
+                 'munlock',
+                 'munlockall',
+                 'perf_event_open',
+                 'pkey_mprotect',
+                 'prctl',
+                 'prlimit64',
+                 'ptrace',
+                 'remap_file_pages',
+                 'rt_sigaction',
+                 'rt_sigprocmask',
+                 'rt_sigtimedwait',
+                 'sched_getaffinity',
+                 'sched_getattr',
+                 'sched_getparam',
+                 'sched_getscheduler',
+                 'sched_rr_get_interval',
+                 'sched_setaffinity',
+                 'sched_setattr',
+                 'sched_setparam',
+                 'sched_setscheduler',
+                 'semtimedop',
+                 'setitimer',
+                 'setns',
+                 'setpgid',
+                 'setpriority',
+                 'setsid',
+                 'shmdt',
+                 'sigaction',
+                 'sigaltstack',
+                 'signal',
+                 'umount',
+                 'vfork']),
+ 'munlockall': set(['brk',
+                    'get_mempolicy',
+                    'madvise',
+                    'mincore',
+                    'mlockall',
+                    'mprotect',
+                    'mremap',
+                    'munlock',
+                    'munlockall',
+                    'pkey_mprotect',
+                    'prctl',
+                    'remap_file_pages',
+                    'shmdt']),
+ 'name_to_handle_at': set(['accept4',
+                           'acct',
+                           'dup',
+                           'dup3',
+                           'epoll_create1',
+                           'epoll_ctl',
+                           'eventfd2',
+                           'flock',
+                           'getcwd',
+                           'lookup_dcookie',
+                           'memfd_create',
+                           'mmap_pgoff',
+                           'mq_open',
+                           'name_to_handle_at',
+                           'open',
+                           'open_by_handle_at',
+                           'openat',
+                           'perf_event_open',
+                           'pipe2',
+                           'pivot_root',
+                           'quotactl',
+                           'remap_file_pages',
+                           'setns',
+                           'shmat',
+                           'shmctl',
+                           'shmdt',
+                           'socket',
+                           'socketpair',
+                           'swapoff',
+                           'swapon',
+                           'syncfs',
+                           'umount',
+                           'unshare',
+                           'uselib',
+                           'ustat']),
+ 'nanosleep': set(['clock_nanosleep',
+                   'epoll_wait',
+                   'faccessat',
+                   'fchmod',
+                   'fchmodat',
+                   'fchown',
+                   'fchownat',
+                   'fstat',
+                   'ftruncate',
+                   'futex',
+                   'futimesat',
+                   'inotify_add_watch',
+                   'io_getevents',
+                   'ioctl',
+                   'linkat',
+                   'memfd_create',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'mq_unlink',
+                   'nanosleep',
+                   'newfstat',
+                   'poll',
+                   'ppoll',
+                   'pselect6',
+                   'readlinkat',
+                   'recvmmsg',
+                   'rt_sigtimedwait',
+                   'sched_rr_get_interval',
+                   'select',
+                   'semtimedop',
+                   'sendfile',
+                   'sendfile64',
+                   'settimeofday',
+                   'stime',
+                   'swapoff',
+                   'swapon',
+                   'timer_gettime',
+                   'timer_settime',
+                   'timerfd_gettime',
+                   'timerfd_settime',
+                   'unlink',
+                   'unlinkat',
+                   'uselib',
+                   'utime']),
+ 'newfstat': set(['fstat', 'newfstat', 'newfstatat', 'newlstat', 'newstat']),
+ 'newfstatat': set(['fstat', 'newfstat', 'newfstatat', 'newlstat', 'newstat']),
+ 'newlstat': set(['fstat', 'newfstat', 'newfstatat', 'newlstat', 'newstat']),
+ 'newstat': set(['fstat', 'newfstat', 'newfstatat', 'newlstat', 'newstat']),
+ 'newuname': set(['capget',
+                  'clone',
+                  'fork',
+                  'get_robust_list',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'perf_event_open',
+                  'personality',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'vfork']),
+ 'old_getrlimit': set(['old_getrlimit', 'prlimit64', 'setrlimit']),
+ 'old_readdir': set(['accept4',
+                     'bind',
+                     'bpf',
+                     'connect',
+                     'copy_file_range',
+                     'epoll_ctl',
+                     'epoll_wait',
+                     'fallocate',
+                     'fchdir',
+                     'fchmod',
+                     'fchown',
+                     'fcntl',
+                     'fcntl64',
+                     'fdatasync',
+                     'fgetxattr',
+                     'flistxattr',
+                     'flock',
+                     'fremovexattr',
+                     'fsetxattr',
+                     'fstatfs',
+                     'fstatfs64',
+                     'fsync',
+                     'ftruncate',
+                     'futimesat',
+                     'getdents',
+                     'getdents64',
+                     'getpeername',
+                     'getsockname',
+                     'getsockopt',
+                     'inotify_add_watch',
+                     'inotify_rm_watch',
+                     'ioctl',
+                     'listen',
+                     'llseek',
+                     'lseek',
+                     'mq_getsetattr',
+                     'mq_notify',
+                     'mq_timedreceive',
+                     'mq_timedsend',
+                     'old_readdir',
+                     'perf_event_open',
+                     'pread64',
+                     'preadv',
+                     'preadv2',
+                     'preadv64',
+                     'preadv64v2',
+                     'pwrite64',
+                     'pwritev',
+                     'pwritev2',
+                     'pwritev64',
+                     'pwritev64v2',
+                     'read',
+                     'readahead',
+                     'readv',
+                     'recvfrom',
+                     'sendfile',
+                     'sendfile64',
+                     'sendto',
+                     'setsockopt',
+                     'shutdown',
+                     'signalfd4',
+                     'splice',
+                     'sync_file_range',
+                     'syncfs',
+                     'tee',
+                     'utime',
+                     'utimensat',
+                     'vmsplice',
+                     'write',
+                     'writev']),
+ 'olduname': set(['capget',
+                  'clone',
+                  'fork',
+                  'get_robust_list',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'ioperm',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'perf_event_open',
+                  'personality',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'vfork']),
+ 'open_by_handle_at': set(['accept4',
+                           'acct',
+                           'dup',
+                           'dup3',
+                           'epoll_create1',
+                           'epoll_ctl',
+                           'eventfd2',
+                           'flock',
+                           'getcwd',
+                           'lookup_dcookie',
+                           'memfd_create',
+                           'mmap_pgoff',
+                           'mq_open',
+                           'open',
+                           'open_by_handle_at',
+                           'openat',
+                           'perf_event_open',
+                           'pipe2',
+                           'pivot_root',
+                           'quotactl',
+                           'remap_file_pages',
+                           'setns',
+                           'shmat',
+                           'shmctl',
+                           'shmdt',
+                           'socket',
+                           'socketpair',
+                           'swapoff',
+                           'swapon',
+                           'unshare',
+                           'uselib']),
+ 'perf_event_open': set(['accept4',
+                         'acct',
+                         'bind',
+                         'bpf',
+                         'brk',
+                         'capget',
+                         'clone',
+                         'connect',
+                         'copy_file_range',
+                         'delete_module',
+                         'dup',
+                         'dup2',
+                         'dup3',
+                         'epoll_create1',
+                         'epoll_ctl',
+                         'epoll_wait',
+                         'eventfd2',
+                         'exit_group',
+                         'faccessat',
+                         'fallocate',
+                         'fchdir',
+                         'fchmod',
+                         'fchmodat',
+                         'fchown',
+                         'fchownat',
+                         'fcntl',
+                         'fcntl64',
+                         'fdatasync',
+                         'fgetxattr',
+                         'finit_module',
+                         'flistxattr',
+                         'flock',
+                         'fork',
+                         'fremovexattr',
+                         'fsetxattr',
+                         'fstatfs',
+                         'fstatfs64',
+                         'fsync',
+                         'ftruncate',
+                         'futimesat',
+                         'get_curr_temp',
+                         'get_mempolicy',
+                         'get_robust_list',
+                         'get_trip_temp',
+                         'getcwd',
+                         'getdents',
+                         'getdents64',
+                         'getgroups',
+                         'getgroups16',
+                         'getitimer',
+                         'getpeername',
+                         'getpgid',
+                         'getppid',
+                         'getpriority',
+                         'getrusage',
+                         'getsid',
+                         'getsockname',
+                         'getsockopt',
+                         'init_module',
+                         'inotify_add_watch',
+                         'inotify_init1',
+                         'inotify_rm_watch',
+                         'io_cancel',
+                         'io_destroy',
+                         'io_getevents',
+                         'io_setup',
+                         'io_submit',
+                         'ioctl',
+                         'ioperm',
+                         'ioprio_get',
+                         'ioprio_set',
+                         'kexec_load',
+                         'keyctl',
+                         'kill',
+                         'linkat',
+                         'listen',
+                         'llseek',
+                         'lookup_dcookie',
+                         'lseek',
+                         'madvise',
+                         'mbind',
+                         'memfd_create',
+                         'migrate_pages',
+                         'mincore',
+                         'mkdirat',
+                         'mknodat',
+                         'mlockall',
+                         'mmap_pgoff',
+                         'modify_ldt',
+                         'move_pages',
+                         'mprotect',
+                         'mq_getsetattr',
+                         'mq_notify',
+                         'mq_open',
+                         'mq_timedreceive',
+                         'mq_timedsend',
+                         'mq_unlink',
+                         'mremap',
+                         'msgctl',
+                         'msgrcv',
+                         'msgsnd',
+                         'munlock',
+                         'munlockall',
+                         'old_readdir',
+                         'open',
+                         'open_by_handle_at',
+                         'openat',
+                         'perf_event_open',
+                         'pipe2',
+                         'pivot_root',
+                         'pkey_mprotect',
+                         'prctl',
+                         'pread64',
+                         'preadv',
+                         'preadv2',
+                         'preadv64',
+                         'preadv64v2',
+                         'prlimit64',
+                         'ptrace',
+                         'pwrite64',
+                         'pwritev',
+                         'pwritev2',
+                         'pwritev64',
+                         'pwritev64v2',
+                         'quotactl',
+                         'read',
+                         'readahead',
+                         'readlinkat',
+                         'readv',
+                         'reboot',
+                         'recvfrom',
+                         'remap_file_pages',
+                         'renameat2',
+                         'request_key',
+                         'rmdir',
+                         'rt_sigaction',
+                         'rt_sigprocmask',
+                         'rt_sigtimedwait',
+                         'sched_getaffinity',
+                         'sched_getattr',
+                         'sched_getparam',
+                         'sched_getscheduler',
+                         'sched_rr_get_interval',
+                         'sched_setaffinity',
+                         'sched_setattr',
+                         'sched_setparam',
+                         'sched_setscheduler',
+                         'sched_yield',
+                         'semctl',
+                         'semtimedop',
+                         'sendfile',
+                         'sendfile64',
+                         'sendto',
+                         'set_trip_temp',
+                         'setgid',
+                         'setgroups',
+                         'setgroups16',
+                         'setitimer',
+                         'setns',
+                         'setpgid',
+                         'setpriority',
+                         'setregid',
+                         'setresgid',
+                         'setresuid',
+                         'setreuid',
+                         'setsid',
+                         'setsockopt',
+                         'setuid',
+                         'shmat',
+                         'shmctl',
+                         'shmdt',
+                         'shutdown',
+                         'sigaction',
+                         'sigaltstack',
+                         'signal',
+                         'signalfd4',
+                         'socket',
+                         'socketpair',
+                         'splice',
+                         'swapoff',
+                         'swapon',
+                         'symlinkat',
+                         'sync_file_range',
+                         'syncfs',
+                         'tee',
+                         'timer_create',
+                         'timer_delete',
+                         'timer_getoverrun',
+                         'timer_gettime',
+                         'timer_settime',
+                         'timerfd_create',
+                         'timerfd_gettime',
+                         'timerfd_settime',
+                         'umount',
+                         'unlink',
+                         'unlinkat',
+                         'unshare',
+                         'uselib',
+                         'ustat',
+                         'utime',
+                         'utimensat',
+                         'vfork',
+                         'vmsplice',
+                         'write',
+                         'writev']),
+ 'pivot_root': set(['accept4',
+                    'acct',
+                    'dup',
+                    'dup3',
+                    'epoll_create1',
+                    'epoll_ctl',
+                    'eventfd2',
+                    'flock',
+                    'ftruncate',
+                    'getcwd',
+                    'linkat',
+                    'lookup_dcookie',
+                    'memfd_create',
+                    'mkdirat',
+                    'mknodat',
+                    'mmap_pgoff',
+                    'mq_open',
+                    'mq_unlink',
+                    'open',
+                    'open_by_handle_at',
+                    'openat',
+                    'perf_event_open',
+                    'pipe2',
+                    'pivot_root',
+                    'quotactl',
+                    'remap_file_pages',
+                    'renameat2',
+                    'rmdir',
+                    'setns',
+                    'shmat',
+                    'shmctl',
+                    'shmdt',
+                    'socket',
+                    'socketpair',
+                    'swapoff',
+                    'swapon',
+                    'symlinkat',
+                    'umount',
+                    'unlink',
+                    'unlinkat',
+                    'unshare',
+                    'uselib']),
+ 'pkey_alloc': set(['brk',
+                    'get_mempolicy',
+                    'getrusage',
+                    'io_cancel',
+                    'io_destroy',
+                    'io_getevents',
+                    'io_setup',
+                    'mbind',
+                    'migrate_pages',
+                    'mincore',
+                    'modify_ldt',
+                    'move_pages',
+                    'mremap',
+                    'pkey_alloc',
+                    'pkey_free',
+                    'prctl',
+                    'remap_file_pages',
+                    'shmdt',
+                    'swapoff']),
+ 'pkey_mprotect': set(['brk',
+                       'capget',
+                       'clone',
+                       'fork',
+                       'get_mempolicy',
+                       'get_robust_list',
+                       'getitimer',
+                       'getpgid',
+                       'getppid',
+                       'getpriority',
+                       'getrusage',
+                       'getsid',
+                       'ioprio_get',
+                       'ioprio_set',
+                       'keyctl',
+                       'kill',
+                       'madvise',
+                       'migrate_pages',
+                       'mincore',
+                       'mlockall',
+                       'move_pages',
+                       'mprotect',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'mremap',
+                       'msgrcv',
+                       'munlock',
+                       'munlockall',
+                       'perf_event_open',
+                       'personality',
+                       'pkey_mprotect',
+                       'prctl',
+                       'prlimit64',
+                       'ptrace',
+                       'remap_file_pages',
+                       'rt_sigaction',
+                       'rt_sigprocmask',
+                       'rt_sigtimedwait',
+                       'sched_getaffinity',
+                       'sched_getattr',
+                       'sched_getparam',
+                       'sched_getscheduler',
+                       'sched_rr_get_interval',
+                       'sched_setaffinity',
+                       'sched_setattr',
+                       'sched_setparam',
+                       'sched_setscheduler',
+                       'semtimedop',
+                       'setitimer',
+                       'setns',
+                       'setpgid',
+                       'setpriority',
+                       'setsid',
+                       'shmdt',
+                       'sigaction',
+                       'sigaltstack',
+                       'signal',
+                       'umount',
+                       'vfork']),
+ 'poll': set(['poll', 'ppoll']),
+ 'ppoll': set(['capget',
+               'clock_nanosleep',
+               'clone',
+               'epoll_wait',
+               'faccessat',
+               'fchmod',
+               'fchmodat',
+               'fchown',
+               'fchownat',
+               'fork',
+               'fstat',
+               'ftruncate',
+               'futex',
+               'futimesat',
+               'get_robust_list',
+               'getitimer',
+               'getpgid',
+               'getppid',
+               'getpriority',
+               'getrusage',
+               'getsid',
+               'inotify_add_watch',
+               'io_getevents',
+               'ioctl',
+               'ioprio_get',
+               'ioprio_set',
+               'keyctl',
+               'kill',
+               'linkat',
+               'memfd_create',
+               'migrate_pages',
+               'move_pages',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'mq_unlink',
+               'msgrcv',
+               'nanosleep',
+               'newfstat',
+               'perf_event_open',
+               'personality',
+               'poll',
+               'ppoll',
+               'prctl',
+               'prlimit64',
+               'pselect6',
+               'ptrace',
+               'readlinkat',
+               'recvmmsg',
+               'rt_sigaction',
+               'rt_sigprocmask',
+               'rt_sigtimedwait',
+               'sched_getaffinity',
+               'sched_getattr',
+               'sched_getparam',
+               'sched_getscheduler',
+               'sched_rr_get_interval',
+               'sched_setaffinity',
+               'sched_setattr',
+               'sched_setparam',
+               'sched_setscheduler',
+               'select',
+               'semtimedop',
+               'sendfile',
+               'sendfile64',
+               'setitimer',
+               'setns',
+               'setpgid',
+               'setpriority',
+               'setsid',
+               'settimeofday',
+               'sigaction',
+               'sigaltstack',
+               'signal',
+               'stime',
+               'swapoff',
+               'swapon',
+               'timer_gettime',
+               'timer_settime',
+               'timerfd_gettime',
+               'timerfd_settime',
+               'umount',
+               'unlink',
+               'unlinkat',
+               'uselib',
+               'utime',
+               'vfork']),
+ 'prctl': set(['brk',
+               'capget',
+               'clone',
+               'fork',
+               'get_mempolicy',
+               'get_robust_list',
+               'getitimer',
+               'getpgid',
+               'getppid',
+               'getpriority',
+               'getrusage',
+               'getsid',
+               'io_cancel',
+               'io_destroy',
+               'io_getevents',
+               'io_setup',
+               'ioprio_get',
+               'ioprio_set',
+               'keyctl',
+               'kill',
+               'mbind',
+               'migrate_pages',
+               'mincore',
+               'modify_ldt',
+               'move_pages',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'mremap',
+               'msgrcv',
+               'perf_event_open',
+               'personality',
+               'prctl',
+               'prlimit64',
+               'ptrace',
+               'remap_file_pages',
+               'rt_sigaction',
+               'rt_sigprocmask',
+               'rt_sigtimedwait',
+               'sched_getaffinity',
+               'sched_getattr',
+               'sched_getparam',
+               'sched_getscheduler',
+               'sched_rr_get_interval',
+               'sched_setaffinity',
+               'sched_setattr',
+               'sched_setparam',
+               'sched_setscheduler',
+               'semtimedop',
+               'setitimer',
+               'setns',
+               'setpgid',
+               'setpriority',
+               'setresuid',
+               'setreuid',
+               'setsid',
+               'setuid',
+               'shmdt',
+               'sigaction',
+               'sigaltstack',
+               'signal',
+               'swapoff',
+               'umount',
+               'vfork']),
+ 'pread64': set(['accept4',
+                 'acct',
+                 'bind',
+                 'bpf',
+                 'connect',
+                 'copy_file_range',
+                 'dup',
+                 'dup3',
+                 'epoll_create1',
+                 'epoll_ctl',
+                 'epoll_wait',
+                 'eventfd2',
+                 'fallocate',
+                 'fchdir',
+                 'fchmod',
+                 'fchown',
+                 'fcntl',
+                 'fcntl64',
+                 'fdatasync',
+                 'fgetxattr',
+                 'flistxattr',
+                 'flock',
+                 'fremovexattr',
+                 'fsetxattr',
+                 'fstatfs',
+                 'fstatfs64',
+                 'fsync',
+                 'ftruncate',
+                 'futimesat',
+                 'getdents',
+                 'getdents64',
+                 'getpeername',
+                 'getsockname',
+                 'getsockopt',
+                 'inotify_add_watch',
+                 'inotify_rm_watch',
+                 'ioctl',
+                 'listen',
+                 'llseek',
+                 'lseek',
+                 'memfd_create',
+                 'mmap_pgoff',
+                 'mq_getsetattr',
+                 'mq_notify',
+                 'mq_open',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'old_readdir',
+                 'open',
+                 'open_by_handle_at',
+                 'openat',
+                 'perf_event_open',
+                 'pipe2',
+                 'pread64',
+                 'preadv',
+                 'preadv2',
+                 'preadv64',
+                 'preadv64v2',
+                 'pwrite64',
+                 'pwritev',
+                 'pwritev2',
+                 'pwritev64',
+                 'pwritev64v2',
+                 'read',
+                 'readahead',
+                 'readv',
+                 'recvfrom',
+                 'remap_file_pages',
+                 'sendfile',
+                 'sendfile64',
+                 'sendto',
+                 'setns',
+                 'setsockopt',
+                 'shmat',
+                 'shmctl',
+                 'shmdt',
+                 'shutdown',
+                 'signalfd4',
+                 'socket',
+                 'socketpair',
+                 'splice',
+                 'swapoff',
+                 'swapon',
+                 'sync_file_range',
+                 'syncfs',
+                 'tee',
+                 'uselib',
+                 'utime',
+                 'utimensat',
+                 'vmsplice',
+                 'write',
+                 'writev']),
+ 'preadv': set(['accept4',
+                'acct',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'epoll_wait',
+                'eventfd2',
+                'fallocate',
+                'fchdir',
+                'fchmod',
+                'fchown',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'llseek',
+                'lseek',
+                'memfd_create',
+                'mmap_pgoff',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_open',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'remap_file_pages',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setns',
+                'setsockopt',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'shutdown',
+                'signalfd4',
+                'socket',
+                'socketpair',
+                'splice',
+                'swapoff',
+                'swapon',
+                'sync_file_range',
+                'syncfs',
+                'tee',
+                'uselib',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'preadv2': set(['accept4',
+                 'acct',
+                 'bind',
+                 'bpf',
+                 'connect',
+                 'copy_file_range',
+                 'dup',
+                 'dup3',
+                 'epoll_create1',
+                 'epoll_ctl',
+                 'epoll_wait',
+                 'eventfd2',
+                 'fallocate',
+                 'fchdir',
+                 'fchmod',
+                 'fchown',
+                 'fcntl',
+                 'fcntl64',
+                 'fdatasync',
+                 'fgetxattr',
+                 'flistxattr',
+                 'flock',
+                 'fremovexattr',
+                 'fsetxattr',
+                 'fstatfs',
+                 'fstatfs64',
+                 'fsync',
+                 'ftruncate',
+                 'futimesat',
+                 'getdents',
+                 'getdents64',
+                 'getpeername',
+                 'getsockname',
+                 'getsockopt',
+                 'inotify_add_watch',
+                 'inotify_rm_watch',
+                 'ioctl',
+                 'listen',
+                 'llseek',
+                 'lseek',
+                 'memfd_create',
+                 'mmap_pgoff',
+                 'mq_getsetattr',
+                 'mq_notify',
+                 'mq_open',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'old_readdir',
+                 'open',
+                 'open_by_handle_at',
+                 'openat',
+                 'perf_event_open',
+                 'pipe2',
+                 'pread64',
+                 'preadv',
+                 'preadv2',
+                 'preadv64',
+                 'preadv64v2',
+                 'pwrite64',
+                 'pwritev',
+                 'pwritev2',
+                 'pwritev64',
+                 'pwritev64v2',
+                 'read',
+                 'readahead',
+                 'readv',
+                 'recvfrom',
+                 'remap_file_pages',
+                 'sendfile',
+                 'sendfile64',
+                 'sendto',
+                 'setns',
+                 'setsockopt',
+                 'shmat',
+                 'shmctl',
+                 'shmdt',
+                 'shutdown',
+                 'signalfd4',
+                 'socket',
+                 'socketpair',
+                 'splice',
+                 'swapoff',
+                 'swapon',
+                 'sync_file_range',
+                 'syncfs',
+                 'tee',
+                 'uselib',
+                 'utime',
+                 'utimensat',
+                 'vmsplice',
+                 'write',
+                 'writev']),
+ 'preadv64': set(['accept4',
+                  'acct',
+                  'bind',
+                  'bpf',
+                  'connect',
+                  'copy_file_range',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'epoll_wait',
+                  'eventfd2',
+                  'fallocate',
+                  'fchdir',
+                  'fchmod',
+                  'fchown',
+                  'fcntl',
+                  'fcntl64',
+                  'fdatasync',
+                  'fgetxattr',
+                  'flistxattr',
+                  'flock',
+                  'fremovexattr',
+                  'fsetxattr',
+                  'fstatfs',
+                  'fstatfs64',
+                  'fsync',
+                  'ftruncate',
+                  'futimesat',
+                  'getdents',
+                  'getdents64',
+                  'getpeername',
+                  'getsockname',
+                  'getsockopt',
+                  'inotify_add_watch',
+                  'inotify_rm_watch',
+                  'ioctl',
+                  'listen',
+                  'llseek',
+                  'lseek',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_getsetattr',
+                  'mq_notify',
+                  'mq_open',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'old_readdir',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'pread64',
+                  'preadv',
+                  'preadv2',
+                  'preadv64',
+                  'preadv64v2',
+                  'pwrite64',
+                  'pwritev',
+                  'pwritev2',
+                  'pwritev64',
+                  'pwritev64v2',
+                  'read',
+                  'readahead',
+                  'readv',
+                  'recvfrom',
+                  'remap_file_pages',
+                  'sendfile',
+                  'sendfile64',
+                  'sendto',
+                  'setns',
+                  'setsockopt',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'shutdown',
+                  'signalfd4',
+                  'socket',
+                  'socketpair',
+                  'splice',
+                  'swapoff',
+                  'swapon',
+                  'sync_file_range',
+                  'syncfs',
+                  'tee',
+                  'uselib',
+                  'utime',
+                  'utimensat',
+                  'vmsplice',
+                  'write',
+                  'writev']),
+ 'preadv64v2': set(['accept4',
+                    'acct',
+                    'bind',
+                    'bpf',
+                    'connect',
+                    'copy_file_range',
+                    'dup',
+                    'dup3',
+                    'epoll_create1',
+                    'epoll_ctl',
+                    'epoll_wait',
+                    'eventfd2',
+                    'fallocate',
+                    'fchdir',
+                    'fchmod',
+                    'fchown',
+                    'fcntl',
+                    'fcntl64',
+                    'fdatasync',
+                    'fgetxattr',
+                    'flistxattr',
+                    'flock',
+                    'fremovexattr',
+                    'fsetxattr',
+                    'fstatfs',
+                    'fstatfs64',
+                    'fsync',
+                    'ftruncate',
+                    'futimesat',
+                    'getdents',
+                    'getdents64',
+                    'getpeername',
+                    'getsockname',
+                    'getsockopt',
+                    'inotify_add_watch',
+                    'inotify_rm_watch',
+                    'ioctl',
+                    'listen',
+                    'llseek',
+                    'lseek',
+                    'memfd_create',
+                    'mmap_pgoff',
+                    'mq_getsetattr',
+                    'mq_notify',
+                    'mq_open',
+                    'mq_timedreceive',
+                    'mq_timedsend',
+                    'old_readdir',
+                    'open',
+                    'open_by_handle_at',
+                    'openat',
+                    'perf_event_open',
+                    'pipe2',
+                    'pread64',
+                    'preadv',
+                    'preadv2',
+                    'preadv64',
+                    'preadv64v2',
+                    'pwrite64',
+                    'pwritev',
+                    'pwritev2',
+                    'pwritev64',
+                    'pwritev64v2',
+                    'read',
+                    'readahead',
+                    'readv',
+                    'recvfrom',
+                    'remap_file_pages',
+                    'sendfile',
+                    'sendfile64',
+                    'sendto',
+                    'setns',
+                    'setsockopt',
+                    'shmat',
+                    'shmctl',
+                    'shmdt',
+                    'shutdown',
+                    'signalfd4',
+                    'socket',
+                    'socketpair',
+                    'splice',
+                    'swapoff',
+                    'swapon',
+                    'sync_file_range',
+                    'syncfs',
+                    'tee',
+                    'uselib',
+                    'utime',
+                    'utimensat',
+                    'vmsplice',
+                    'write',
+                    'writev']),
+ 'prlimit64': set(['capget',
+                   'capset',
+                   'clone',
+                   'epoll_create1',
+                   'faccessat',
+                   'fork',
+                   'get_robust_list',
+                   'getgroups',
+                   'getgroups16',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getresgid',
+                   'getresgid16',
+                   'getresuid',
+                   'getresuid16',
+                   'getrusage',
+                   'getsid',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'old_getrlimit',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setfsgid',
+                   'setfsuid',
+                   'setgid',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setregid',
+                   'setresgid',
+                   'setresuid',
+                   'setreuid',
+                   'setrlimit',
+                   'setsid',
+                   'setuid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'unshare',
+                   'vfork']),
+ 'pselect6': set(['capget',
+                  'clock_nanosleep',
+                  'clone',
+                  'epoll_wait',
+                  'faccessat',
+                  'fchmod',
+                  'fchmodat',
+                  'fchown',
+                  'fchownat',
+                  'fork',
+                  'fstat',
+                  'ftruncate',
+                  'futex',
+                  'futimesat',
+                  'get_robust_list',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'inotify_add_watch',
+                  'io_getevents',
+                  'ioctl',
+                  'ioperm',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'linkat',
+                  'memfd_create',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_getsetattr',
+                  'mq_notify',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'mq_unlink',
+                  'msgrcv',
+                  'nanosleep',
+                  'newfstat',
+                  'perf_event_open',
+                  'poll',
+                  'ppoll',
+                  'prctl',
+                  'prlimit64',
+                  'pselect6',
+                  'ptrace',
+                  'readlinkat',
+                  'recvmmsg',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'select',
+                  'semtimedop',
+                  'sendfile',
+                  'sendfile64',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'settimeofday',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'stime',
+                  'swapoff',
+                  'swapon',
+                  'timer_gettime',
+                  'timer_settime',
+                  'timerfd_gettime',
+                  'timerfd_settime',
+                  'umount',
+                  'unlink',
+                  'unlinkat',
+                  'uselib',
+                  'utime',
+                  'vfork']),
+ 'ptrace': set(['capget',
+                'clone',
+                'epoll_wait',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'pause',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigsuspend',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setresuid',
+                'setreuid',
+                'setsid',
+                'setuid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'sigsuspend',
+                'umount',
+                'vfork']),
+ 'pwrite64': set(['accept4',
+                  'acct',
+                  'bind',
+                  'bpf',
+                  'connect',
+                  'copy_file_range',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'epoll_wait',
+                  'eventfd2',
+                  'fallocate',
+                  'fchdir',
+                  'fchmod',
+                  'fchown',
+                  'fcntl',
+                  'fcntl64',
+                  'fdatasync',
+                  'fgetxattr',
+                  'flistxattr',
+                  'flock',
+                  'fremovexattr',
+                  'fsetxattr',
+                  'fstatfs',
+                  'fstatfs64',
+                  'fsync',
+                  'ftruncate',
+                  'futimesat',
+                  'getdents',
+                  'getdents64',
+                  'getpeername',
+                  'getsockname',
+                  'getsockopt',
+                  'inotify_add_watch',
+                  'inotify_rm_watch',
+                  'ioctl',
+                  'listen',
+                  'llseek',
+                  'lseek',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_getsetattr',
+                  'mq_notify',
+                  'mq_open',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'old_readdir',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'pread64',
+                  'preadv',
+                  'preadv2',
+                  'preadv64',
+                  'preadv64v2',
+                  'pwrite64',
+                  'pwritev',
+                  'pwritev2',
+                  'pwritev64',
+                  'pwritev64v2',
+                  'read',
+                  'readahead',
+                  'readv',
+                  'recvfrom',
+                  'remap_file_pages',
+                  'sendfile',
+                  'sendfile64',
+                  'sendto',
+                  'setns',
+                  'setsockopt',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'shutdown',
+                  'signalfd4',
+                  'socket',
+                  'socketpair',
+                  'splice',
+                  'swapoff',
+                  'swapon',
+                  'sync_file_range',
+                  'syncfs',
+                  'tee',
+                  'uselib',
+                  'utime',
+                  'utimensat',
+                  'vmsplice',
+                  'write',
+                  'writev']),
+ 'pwritev': set(['accept4',
+                 'acct',
+                 'bind',
+                 'bpf',
+                 'connect',
+                 'copy_file_range',
+                 'dup',
+                 'dup3',
+                 'epoll_create1',
+                 'epoll_ctl',
+                 'epoll_wait',
+                 'eventfd2',
+                 'fallocate',
+                 'fchdir',
+                 'fchmod',
+                 'fchown',
+                 'fcntl',
+                 'fcntl64',
+                 'fdatasync',
+                 'fgetxattr',
+                 'flistxattr',
+                 'flock',
+                 'fremovexattr',
+                 'fsetxattr',
+                 'fstatfs',
+                 'fstatfs64',
+                 'fsync',
+                 'ftruncate',
+                 'futimesat',
+                 'getdents',
+                 'getdents64',
+                 'getpeername',
+                 'getsockname',
+                 'getsockopt',
+                 'inotify_add_watch',
+                 'inotify_rm_watch',
+                 'ioctl',
+                 'listen',
+                 'llseek',
+                 'lseek',
+                 'memfd_create',
+                 'mmap_pgoff',
+                 'mq_getsetattr',
+                 'mq_notify',
+                 'mq_open',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'old_readdir',
+                 'open',
+                 'open_by_handle_at',
+                 'openat',
+                 'perf_event_open',
+                 'pipe2',
+                 'pread64',
+                 'preadv',
+                 'preadv2',
+                 'preadv64',
+                 'preadv64v2',
+                 'pwrite64',
+                 'pwritev',
+                 'pwritev2',
+                 'pwritev64',
+                 'pwritev64v2',
+                 'read',
+                 'readahead',
+                 'readv',
+                 'recvfrom',
+                 'remap_file_pages',
+                 'sendfile',
+                 'sendfile64',
+                 'sendto',
+                 'setns',
+                 'setsockopt',
+                 'shmat',
+                 'shmctl',
+                 'shmdt',
+                 'shutdown',
+                 'signalfd4',
+                 'socket',
+                 'socketpair',
+                 'splice',
+                 'swapoff',
+                 'swapon',
+                 'sync_file_range',
+                 'syncfs',
+                 'tee',
+                 'uselib',
+                 'utime',
+                 'utimensat',
+                 'vmsplice',
+                 'write',
+                 'writev']),
+ 'pwritev2': set(['accept4',
+                  'acct',
+                  'bind',
+                  'bpf',
+                  'connect',
+                  'copy_file_range',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'epoll_wait',
+                  'eventfd2',
+                  'fallocate',
+                  'fchdir',
+                  'fchmod',
+                  'fchown',
+                  'fcntl',
+                  'fcntl64',
+                  'fdatasync',
+                  'fgetxattr',
+                  'flistxattr',
+                  'flock',
+                  'fremovexattr',
+                  'fsetxattr',
+                  'fstatfs',
+                  'fstatfs64',
+                  'fsync',
+                  'ftruncate',
+                  'futimesat',
+                  'getdents',
+                  'getdents64',
+                  'getpeername',
+                  'getsockname',
+                  'getsockopt',
+                  'inotify_add_watch',
+                  'inotify_rm_watch',
+                  'ioctl',
+                  'listen',
+                  'llseek',
+                  'lseek',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_getsetattr',
+                  'mq_notify',
+                  'mq_open',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'old_readdir',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'pread64',
+                  'preadv',
+                  'preadv2',
+                  'preadv64',
+                  'preadv64v2',
+                  'pwrite64',
+                  'pwritev',
+                  'pwritev2',
+                  'pwritev64',
+                  'pwritev64v2',
+                  'read',
+                  'readahead',
+                  'readv',
+                  'recvfrom',
+                  'remap_file_pages',
+                  'sendfile',
+                  'sendfile64',
+                  'sendto',
+                  'setns',
+                  'setsockopt',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'shutdown',
+                  'signalfd4',
+                  'socket',
+                  'socketpair',
+                  'splice',
+                  'swapoff',
+                  'swapon',
+                  'sync_file_range',
+                  'syncfs',
+                  'tee',
+                  'uselib',
+                  'utime',
+                  'utimensat',
+                  'vmsplice',
+                  'write',
+                  'writev']),
+ 'pwritev64': set(['accept4',
+                   'acct',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'eventfd2',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchown',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'memfd_create',
+                   'mmap_pgoff',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_open',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'old_readdir',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readv',
+                   'recvfrom',
+                   'remap_file_pages',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setns',
+                   'setsockopt',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'shutdown',
+                   'signalfd4',
+                   'socket',
+                   'socketpair',
+                   'splice',
+                   'swapoff',
+                   'swapon',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'uselib',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'pwritev64v2': set(['accept4',
+                     'acct',
+                     'bind',
+                     'bpf',
+                     'connect',
+                     'copy_file_range',
+                     'dup',
+                     'dup3',
+                     'epoll_create1',
+                     'epoll_ctl',
+                     'epoll_wait',
+                     'eventfd2',
+                     'fallocate',
+                     'fchdir',
+                     'fchmod',
+                     'fchown',
+                     'fcntl',
+                     'fcntl64',
+                     'fdatasync',
+                     'fgetxattr',
+                     'flistxattr',
+                     'flock',
+                     'fremovexattr',
+                     'fsetxattr',
+                     'fstatfs',
+                     'fstatfs64',
+                     'fsync',
+                     'ftruncate',
+                     'futimesat',
+                     'getdents',
+                     'getdents64',
+                     'getpeername',
+                     'getsockname',
+                     'getsockopt',
+                     'inotify_add_watch',
+                     'inotify_rm_watch',
+                     'ioctl',
+                     'listen',
+                     'llseek',
+                     'lseek',
+                     'memfd_create',
+                     'mmap_pgoff',
+                     'mq_getsetattr',
+                     'mq_notify',
+                     'mq_open',
+                     'mq_timedreceive',
+                     'mq_timedsend',
+                     'old_readdir',
+                     'open',
+                     'open_by_handle_at',
+                     'openat',
+                     'perf_event_open',
+                     'pipe2',
+                     'pread64',
+                     'preadv',
+                     'preadv2',
+                     'preadv64',
+                     'preadv64v2',
+                     'pwrite64',
+                     'pwritev',
+                     'pwritev2',
+                     'pwritev64',
+                     'pwritev64v2',
+                     'read',
+                     'readahead',
+                     'readv',
+                     'recvfrom',
+                     'remap_file_pages',
+                     'sendfile',
+                     'sendfile64',
+                     'sendto',
+                     'setns',
+                     'setsockopt',
+                     'shmat',
+                     'shmctl',
+                     'shmdt',
+                     'shutdown',
+                     'signalfd4',
+                     'socket',
+                     'socketpair',
+                     'splice',
+                     'swapoff',
+                     'swapon',
+                     'sync_file_range',
+                     'syncfs',
+                     'tee',
+                     'uselib',
+                     'utime',
+                     'utimensat',
+                     'vmsplice',
+                     'write',
+                     'writev']),
+ 'quotactl': set(['acct',
+                  'mq_open',
+                  'mq_unlink',
+                  'open',
+                  'openat',
+                  'quotactl',
+                  'renameat2',
+                  'rmdir',
+                  'swapoff',
+                  'swapon',
+                  'symlinkat',
+                  'syncfs',
+                  'sysfs',
+                  'umount',
+                  'unlink',
+                  'unlinkat',
+                  'uselib',
+                  'ustat']),
+ 'read': set(['accept4',
+              'bind',
+              'bpf',
+              'connect',
+              'copy_file_range',
+              'epoll_ctl',
+              'epoll_wait',
+              'fallocate',
+              'fchdir',
+              'fchmod',
+              'fchown',
+              'fcntl',
+              'fcntl64',
+              'fdatasync',
+              'fgetxattr',
+              'flistxattr',
+              'flock',
+              'fremovexattr',
+              'fsetxattr',
+              'fstatfs',
+              'fstatfs64',
+              'fsync',
+              'ftruncate',
+              'futimesat',
+              'getdents',
+              'getdents64',
+              'getpeername',
+              'getsockname',
+              'getsockopt',
+              'inotify_add_watch',
+              'inotify_rm_watch',
+              'ioctl',
+              'listen',
+              'llseek',
+              'lseek',
+              'mq_getsetattr',
+              'mq_notify',
+              'mq_timedreceive',
+              'mq_timedsend',
+              'old_readdir',
+              'perf_event_open',
+              'pread64',
+              'preadv',
+              'preadv2',
+              'preadv64',
+              'preadv64v2',
+              'pwrite64',
+              'pwritev',
+              'pwritev2',
+              'pwritev64',
+              'pwritev64v2',
+              'read',
+              'readahead',
+              'readv',
+              'recvfrom',
+              'sendfile',
+              'sendfile64',
+              'sendto',
+              'setsockopt',
+              'shutdown',
+              'signalfd4',
+              'splice',
+              'sync_file_range',
+              'syncfs',
+              'tee',
+              'utime',
+              'utimensat',
+              'vmsplice',
+              'write',
+              'writev']),
+ 'readahead': set(['accept4',
+                   'acct',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'eventfd2',
+                   'faccessat',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchmodat',
+                   'fchown',
+                   'fchownat',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'linkat',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'memfd_create',
+                   'mmap_pgoff',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_open',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'mq_unlink',
+                   'old_readdir',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readlinkat',
+                   'readv',
+                   'recvfrom',
+                   'remap_file_pages',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setns',
+                   'setsockopt',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'shutdown',
+                   'signalfd4',
+                   'socket',
+                   'socketpair',
+                   'splice',
+                   'swapoff',
+                   'swapon',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'unlink',
+                   'unlinkat',
+                   'uselib',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'readlinkat': set(['accept4',
+                    'acct',
+                    'dup',
+                    'dup3',
+                    'epoll_create1',
+                    'epoll_ctl',
+                    'eventfd2',
+                    'flock',
+                    'getcwd',
+                    'lookup_dcookie',
+                    'memfd_create',
+                    'mmap_pgoff',
+                    'mq_open',
+                    'open',
+                    'open_by_handle_at',
+                    'openat',
+                    'perf_event_open',
+                    'pipe2',
+                    'pivot_root',
+                    'quotactl',
+                    'remap_file_pages',
+                    'setns',
+                    'shmat',
+                    'shmctl',
+                    'shmdt',
+                    'socket',
+                    'socketpair',
+                    'swapoff',
+                    'swapon',
+                    'unshare',
+                    'uselib']),
+ 'readv': set(['accept4',
+               'bind',
+               'bpf',
+               'connect',
+               'copy_file_range',
+               'epoll_ctl',
+               'epoll_wait',
+               'fallocate',
+               'fchdir',
+               'fchmod',
+               'fchown',
+               'fcntl',
+               'fcntl64',
+               'fdatasync',
+               'fgetxattr',
+               'flistxattr',
+               'flock',
+               'fremovexattr',
+               'fsetxattr',
+               'fstatfs',
+               'fstatfs64',
+               'fsync',
+               'ftruncate',
+               'futimesat',
+               'getdents',
+               'getdents64',
+               'getpeername',
+               'getsockname',
+               'getsockopt',
+               'inotify_add_watch',
+               'inotify_rm_watch',
+               'ioctl',
+               'listen',
+               'llseek',
+               'lseek',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'old_readdir',
+               'perf_event_open',
+               'pread64',
+               'preadv',
+               'preadv2',
+               'preadv64',
+               'preadv64v2',
+               'pwrite64',
+               'pwritev',
+               'pwritev2',
+               'pwritev64',
+               'pwritev64v2',
+               'read',
+               'readahead',
+               'readv',
+               'recvfrom',
+               'sendfile',
+               'sendfile64',
+               'sendto',
+               'setsockopt',
+               'shutdown',
+               'signalfd4',
+               'splice',
+               'sync_file_range',
+               'syncfs',
+               'tee',
+               'utime',
+               'utimensat',
+               'vmsplice',
+               'write',
+               'writev']),
+ 'reboot': set(['acct', 'perf_event_open', 'reboot', 'setns']),
+ 'recvfrom': set(['accept4',
+                  'acct',
+                  'bind',
+                  'bpf',
+                  'connect',
+                  'copy_file_range',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'epoll_wait',
+                  'eventfd2',
+                  'fallocate',
+                  'fchdir',
+                  'fchmod',
+                  'fchown',
+                  'fcntl',
+                  'fcntl64',
+                  'fdatasync',
+                  'fgetxattr',
+                  'flistxattr',
+                  'flock',
+                  'fremovexattr',
+                  'fsetxattr',
+                  'fstatfs',
+                  'fstatfs64',
+                  'fsync',
+                  'ftruncate',
+                  'futimesat',
+                  'getdents',
+                  'getdents64',
+                  'getpeername',
+                  'getsockname',
+                  'getsockopt',
+                  'inotify_add_watch',
+                  'inotify_rm_watch',
+                  'ioctl',
+                  'listen',
+                  'llseek',
+                  'lseek',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_getsetattr',
+                  'mq_notify',
+                  'mq_open',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'old_readdir',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'pread64',
+                  'preadv',
+                  'preadv2',
+                  'preadv64',
+                  'preadv64v2',
+                  'pwrite64',
+                  'pwritev',
+                  'pwritev2',
+                  'pwritev64',
+                  'pwritev64v2',
+                  'read',
+                  'readahead',
+                  'readv',
+                  'recvfrom',
+                  'remap_file_pages',
+                  'sendfile',
+                  'sendfile64',
+                  'sendto',
+                  'setns',
+                  'setsockopt',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'shutdown',
+                  'signalfd4',
+                  'socket',
+                  'socketpair',
+                  'splice',
+                  'swapoff',
+                  'swapon',
+                  'sync_file_range',
+                  'syncfs',
+                  'tee',
+                  'uselib',
+                  'utime',
+                  'utimensat',
+                  'vmsplice',
+                  'write',
+                  'writev']),
+ 'recvmmsg': set(['accept4',
+                  'bind',
+                  'clock_nanosleep',
+                  'connect',
+                  'epoll_wait',
+                  'faccessat',
+                  'fchmod',
+                  'fchmodat',
+                  'fchown',
+                  'fchownat',
+                  'fstat',
+                  'ftruncate',
+                  'futex',
+                  'futimesat',
+                  'getpeername',
+                  'getsockname',
+                  'getsockopt',
+                  'inotify_add_watch',
+                  'io_getevents',
+                  'ioctl',
+                  'linkat',
+                  'listen',
+                  'memfd_create',
+                  'mq_getsetattr',
+                  'mq_notify',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'mq_unlink',
+                  'nanosleep',
+                  'newfstat',
+                  'poll',
+                  'ppoll',
+                  'pselect6',
+                  'readlinkat',
+                  'recvfrom',
+                  'recvmmsg',
+                  'recvmsg',
+                  'rt_sigtimedwait',
+                  'sched_rr_get_interval',
+                  'select',
+                  'semtimedop',
+                  'sendfile',
+                  'sendfile64',
+                  'sendmmsg',
+                  'sendmsg',
+                  'sendto',
+                  'setsockopt',
+                  'settimeofday',
+                  'shutdown',
+                  'stime',
+                  'swapoff',
+                  'swapon',
+                  'timer_gettime',
+                  'timer_settime',
+                  'timerfd_gettime',
+                  'timerfd_settime',
+                  'unlink',
+                  'unlinkat',
+                  'uselib',
+                  'utime']),
+ 'recvmsg': set(['accept4',
+                 'bind',
+                 'connect',
+                 'getpeername',
+                 'getsockname',
+                 'getsockopt',
+                 'listen',
+                 'recvfrom',
+                 'recvmmsg',
+                 'recvmsg',
+                 'sendmmsg',
+                 'sendmsg',
+                 'sendto',
+                 'setsockopt',
+                 'shutdown']),
+ 'remap_file_pages': set(['brk',
+                          'get_mempolicy',
+                          'madvise',
+                          'mincore',
+                          'mlockall',
+                          'mprotect',
+                          'mremap',
+                          'munlock',
+                          'munlockall',
+                          'pkey_mprotect',
+                          'prctl',
+                          'remap_file_pages',
+                          'shmdt']),
+ 'removexattr': set(['accept4',
+                     'acct',
+                     'dup',
+                     'dup3',
+                     'epoll_create1',
+                     'epoll_ctl',
+                     'eventfd2',
+                     'flock',
+                     'getcwd',
+                     'lookup_dcookie',
+                     'memfd_create',
+                     'mmap_pgoff',
+                     'mq_open',
+                     'open',
+                     'open_by_handle_at',
+                     'openat',
+                     'perf_event_open',
+                     'pipe2',
+                     'pivot_root',
+                     'quotactl',
+                     'remap_file_pages',
+                     'setns',
+                     'shmat',
+                     'shmctl',
+                     'shmdt',
+                     'socket',
+                     'socketpair',
+                     'swapoff',
+                     'swapon',
+                     'unshare',
+                     'uselib']),
+ 'renameat2': set(['accept4',
+                   'acct',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'eventfd2',
+                   'flock',
+                   'ftruncate',
+                   'getcwd',
+                   'linkat',
+                   'lookup_dcookie',
+                   'memfd_create',
+                   'mkdirat',
+                   'mknodat',
+                   'mmap_pgoff',
+                   'mq_open',
+                   'mq_unlink',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'pivot_root',
+                   'quotactl',
+                   'remap_file_pages',
+                   'renameat2',
+                   'rmdir',
+                   'setns',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'socket',
+                   'socketpair',
+                   'swapoff',
+                   'swapon',
+                   'symlinkat',
+                   'sysfs',
+                   'unlink',
+                   'unlinkat',
+                   'unshare',
+                   'uselib']),
+ 'rmdir': set(['accept4',
+               'acct',
+               'dup',
+               'dup3',
+               'epoll_create1',
+               'epoll_ctl',
+               'eventfd2',
+               'flock',
+               'ftruncate',
+               'getcwd',
+               'linkat',
+               'lookup_dcookie',
+               'memfd_create',
+               'mkdirat',
+               'mknodat',
+               'mmap_pgoff',
+               'mq_open',
+               'mq_unlink',
+               'open',
+               'open_by_handle_at',
+               'openat',
+               'perf_event_open',
+               'pipe2',
+               'pivot_root',
+               'quotactl',
+               'remap_file_pages',
+               'renameat2',
+               'rmdir',
+               'setns',
+               'shmat',
+               'shmctl',
+               'shmdt',
+               'socket',
+               'socketpair',
+               'swapoff',
+               'swapon',
+               'symlinkat',
+               'unlink',
+               'unlinkat',
+               'unshare',
+               'uselib']),
+ 'rt_sigqueueinfo': set(['kill',
+                         'rt_sigqueueinfo',
+                         'rt_sigreturn',
+                         'rt_sigtimedwait',
+                         'rt_tgsigqueueinfo',
+                         'tgkill',
+                         'timer_create',
+                         'tkill']),
+ 'rt_sigreturn': set(['capget',
+                      'clone',
+                      'fork',
+                      'get_robust_list',
+                      'getitimer',
+                      'getpgid',
+                      'getppid',
+                      'getpriority',
+                      'getrusage',
+                      'getsid',
+                      'ioperm',
+                      'ioprio_get',
+                      'ioprio_set',
+                      'keyctl',
+                      'kill',
+                      'migrate_pages',
+                      'move_pages',
+                      'mq_timedreceive',
+                      'mq_timedsend',
+                      'msgrcv',
+                      'perf_event_open',
+                      'prctl',
+                      'prlimit64',
+                      'ptrace',
+                      'rt_sigaction',
+                      'rt_sigprocmask',
+                      'rt_sigreturn',
+                      'rt_sigtimedwait',
+                      'sched_getaffinity',
+                      'sched_getattr',
+                      'sched_getparam',
+                      'sched_getscheduler',
+                      'sched_rr_get_interval',
+                      'sched_setaffinity',
+                      'sched_setattr',
+                      'sched_setparam',
+                      'sched_setscheduler',
+                      'semtimedop',
+                      'setitimer',
+                      'setns',
+                      'setpgid',
+                      'setpriority',
+                      'setsid',
+                      'sigaction',
+                      'sigaltstack',
+                      'signal',
+                      'umount',
+                      'vfork']),
+ 'rt_sigtimedwait': set(['capget',
+                         'clone',
+                         'fork',
+                         'get_robust_list',
+                         'getitimer',
+                         'getpgid',
+                         'getppid',
+                         'getpriority',
+                         'getrusage',
+                         'getsid',
+                         'ioperm',
+                         'ioprio_get',
+                         'ioprio_set',
+                         'keyctl',
+                         'kill',
+                         'migrate_pages',
+                         'move_pages',
+                         'mq_timedreceive',
+                         'mq_timedsend',
+                         'msgrcv',
+                         'perf_event_open',
+                         'prctl',
+                         'prlimit64',
+                         'ptrace',
+                         'rt_sigaction',
+                         'rt_sigprocmask',
+                         'rt_sigqueueinfo',
+                         'rt_sigreturn',
+                         'rt_sigtimedwait',
+                         'rt_tgsigqueueinfo',
+                         'sched_getaffinity',
+                         'sched_getattr',
+                         'sched_getparam',
+                         'sched_getscheduler',
+                         'sched_rr_get_interval',
+                         'sched_setaffinity',
+                         'sched_setattr',
+                         'sched_setparam',
+                         'sched_setscheduler',
+                         'semtimedop',
+                         'setitimer',
+                         'setns',
+                         'setpgid',
+                         'setpriority',
+                         'setsid',
+                         'sigaction',
+                         'sigaltstack',
+                         'signal',
+                         'tgkill',
+                         'timer_create',
+                         'tkill',
+                         'umount',
+                         'vfork']),
+ 'rt_tgsigqueueinfo': set(['kill',
+                           'rt_sigqueueinfo',
+                           'rt_sigreturn',
+                           'rt_sigtimedwait',
+                           'rt_tgsigqueueinfo',
+                           'tgkill',
+                           'timer_create',
+                           'tkill']),
+ 'sched_getattr': set(['capget',
+                       'clone',
+                       'fork',
+                       'get_robust_list',
+                       'getitimer',
+                       'getpgid',
+                       'getppid',
+                       'getpriority',
+                       'getrusage',
+                       'getsid',
+                       'ioperm',
+                       'ioprio_get',
+                       'ioprio_set',
+                       'keyctl',
+                       'kill',
+                       'migrate_pages',
+                       'move_pages',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'msgrcv',
+                       'perf_event_open',
+                       'prctl',
+                       'prlimit64',
+                       'ptrace',
+                       'rt_sigaction',
+                       'rt_sigprocmask',
+                       'rt_sigtimedwait',
+                       'sched_getaffinity',
+                       'sched_getattr',
+                       'sched_getparam',
+                       'sched_getscheduler',
+                       'sched_rr_get_interval',
+                       'sched_setaffinity',
+                       'sched_setattr',
+                       'sched_setparam',
+                       'sched_setscheduler',
+                       'semtimedop',
+                       'setitimer',
+                       'setns',
+                       'setpgid',
+                       'setpriority',
+                       'setsid',
+                       'sigaction',
+                       'sigaltstack',
+                       'signal',
+                       'umount',
+                       'vfork']),
+ 'sched_getparam': set(['capget',
+                        'clone',
+                        'fork',
+                        'get_robust_list',
+                        'getitimer',
+                        'getpgid',
+                        'getppid',
+                        'getpriority',
+                        'getrusage',
+                        'getsid',
+                        'ioprio_get',
+                        'ioprio_set',
+                        'keyctl',
+                        'kill',
+                        'migrate_pages',
+                        'move_pages',
+                        'mq_timedreceive',
+                        'mq_timedsend',
+                        'msgrcv',
+                        'perf_event_open',
+                        'prctl',
+                        'prlimit64',
+                        'ptrace',
+                        'rt_sigaction',
+                        'rt_sigprocmask',
+                        'rt_sigtimedwait',
+                        'sched_getaffinity',
+                        'sched_getattr',
+                        'sched_getparam',
+                        'sched_getscheduler',
+                        'sched_rr_get_interval',
+                        'sched_setaffinity',
+                        'sched_setattr',
+                        'sched_setparam',
+                        'sched_setscheduler',
+                        'semtimedop',
+                        'setitimer',
+                        'setns',
+                        'setpgid',
+                        'setpriority',
+                        'setsid',
+                        'sigaction',
+                        'sigaltstack',
+                        'signal',
+                        'umount',
+                        'vfork']),
+ 'sched_getscheduler': set(['capget',
+                            'clone',
+                            'fork',
+                            'get_robust_list',
+                            'getitimer',
+                            'getpgid',
+                            'getppid',
+                            'getpriority',
+                            'getrusage',
+                            'getsid',
+                            'ioprio_get',
+                            'ioprio_set',
+                            'keyctl',
+                            'kill',
+                            'migrate_pages',
+                            'move_pages',
+                            'mq_timedreceive',
+                            'mq_timedsend',
+                            'msgrcv',
+                            'perf_event_open',
+                            'prctl',
+                            'prlimit64',
+                            'ptrace',
+                            'rt_sigaction',
+                            'rt_sigprocmask',
+                            'rt_sigtimedwait',
+                            'sched_getaffinity',
+                            'sched_getattr',
+                            'sched_getparam',
+                            'sched_getscheduler',
+                            'sched_rr_get_interval',
+                            'sched_setaffinity',
+                            'sched_setattr',
+                            'sched_setparam',
+                            'sched_setscheduler',
+                            'semtimedop',
+                            'setitimer',
+                            'setns',
+                            'setpgid',
+                            'setpriority',
+                            'setsid',
+                            'sigaction',
+                            'sigaltstack',
+                            'signal',
+                            'umount',
+                            'vfork']),
+ 'sched_rr_get_interval': set(['sched_rr_get_interval']),
+ 'sched_setaffinity': set(['capget',
+                           'capset',
+                           'clone',
+                           'epoll_create1',
+                           'faccessat',
+                           'fork',
+                           'get_robust_list',
+                           'getgroups',
+                           'getgroups16',
+                           'getitimer',
+                           'getpgid',
+                           'getppid',
+                           'getpriority',
+                           'getresgid',
+                           'getresgid16',
+                           'getresuid',
+                           'getresuid16',
+                           'getrusage',
+                           'getsid',
+                           'ioprio_get',
+                           'ioprio_set',
+                           'keyctl',
+                           'kill',
+                           'migrate_pages',
+                           'move_pages',
+                           'mq_timedreceive',
+                           'mq_timedsend',
+                           'msgrcv',
+                           'perf_event_open',
+                           'prctl',
+                           'prlimit64',
+                           'ptrace',
+                           'rt_sigaction',
+                           'rt_sigprocmask',
+                           'rt_sigtimedwait',
+                           'sched_getaffinity',
+                           'sched_getattr',
+                           'sched_getparam',
+                           'sched_getscheduler',
+                           'sched_rr_get_interval',
+                           'sched_setaffinity',
+                           'sched_setattr',
+                           'sched_setparam',
+                           'sched_setscheduler',
+                           'semtimedop',
+                           'setfsgid',
+                           'setfsuid',
+                           'setgid',
+                           'setitimer',
+                           'setns',
+                           'setpgid',
+                           'setpriority',
+                           'setregid',
+                           'setresgid',
+                           'setresuid',
+                           'setreuid',
+                           'setsid',
+                           'setuid',
+                           'sigaction',
+                           'sigaltstack',
+                           'signal',
+                           'umount',
+                           'unshare',
+                           'vfork']),
+ 'sched_setattr': set(['capget',
+                       'clone',
+                       'fork',
+                       'get_robust_list',
+                       'getitimer',
+                       'getpgid',
+                       'getppid',
+                       'getpriority',
+                       'getrusage',
+                       'getsid',
+                       'ioperm',
+                       'ioprio_get',
+                       'ioprio_set',
+                       'keyctl',
+                       'kill',
+                       'migrate_pages',
+                       'move_pages',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'msgrcv',
+                       'perf_event_open',
+                       'prctl',
+                       'prlimit64',
+                       'ptrace',
+                       'rt_sigaction',
+                       'rt_sigprocmask',
+                       'rt_sigtimedwait',
+                       'sched_getaffinity',
+                       'sched_getattr',
+                       'sched_getparam',
+                       'sched_getscheduler',
+                       'sched_rr_get_interval',
+                       'sched_setaffinity',
+                       'sched_setattr',
+                       'sched_setparam',
+                       'sched_setscheduler',
+                       'semtimedop',
+                       'setitimer',
+                       'setns',
+                       'setpgid',
+                       'setpriority',
+                       'setsid',
+                       'sigaction',
+                       'sigaltstack',
+                       'signal',
+                       'umount',
+                       'vfork']),
+ 'select': set(['capget',
+                'clock_nanosleep',
+                'clone',
+                'dup2',
+                'dup3',
+                'epoll_wait',
+                'faccessat',
+                'fchmod',
+                'fchmodat',
+                'fchown',
+                'fchownat',
+                'fork',
+                'fstat',
+                'ftruncate',
+                'futex',
+                'futimesat',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'inotify_add_watch',
+                'io_getevents',
+                'ioctl',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'linkat',
+                'memfd_create',
+                'migrate_pages',
+                'move_pages',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'mq_unlink',
+                'msgrcv',
+                'nanosleep',
+                'newfstat',
+                'perf_event_open',
+                'personality',
+                'poll',
+                'ppoll',
+                'prctl',
+                'prlimit64',
+                'pselect6',
+                'ptrace',
+                'readlinkat',
+                'recvmmsg',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'select',
+                'semtimedop',
+                'sendfile',
+                'sendfile64',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'settimeofday',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'stime',
+                'swapoff',
+                'swapon',
+                'timer_gettime',
+                'timer_settime',
+                'timerfd_gettime',
+                'timerfd_settime',
+                'umount',
+                'unlink',
+                'unlinkat',
+                'unshare',
+                'uselib',
+                'utime',
+                'vfork']),
+ 'semctl': set(['semctl', 'semtimedop']),
+ 'semtimedop': set(['accept4',
+                    'acct',
+                    'bpf',
+                    'brk',
+                    'capget',
+                    'clock_nanosleep',
+                    'clone',
+                    'delete_module',
+                    'dup',
+                    'dup2',
+                    'dup3',
+                    'epoll_create1',
+                    'epoll_ctl',
+                    'epoll_wait',
+                    'eventfd2',
+                    'exit_group',
+                    'faccessat',
+                    'fchmod',
+                    'fchmodat',
+                    'fchown',
+                    'fchownat',
+                    'finit_module',
+                    'flock',
+                    'fork',
+                    'fstat',
+                    'ftruncate',
+                    'futex',
+                    'futimesat',
+                    'get_curr_temp',
+                    'get_mempolicy',
+                    'get_robust_list',
+                    'get_trip_temp',
+                    'getcwd',
+                    'getgroups',
+                    'getgroups16',
+                    'getitimer',
+                    'getpgid',
+                    'getppid',
+                    'getpriority',
+                    'getrusage',
+                    'getsid',
+                    'init_module',
+                    'inotify_add_watch',
+                    'inotify_init1',
+                    'inotify_rm_watch',
+                    'io_cancel',
+                    'io_destroy',
+                    'io_getevents',
+                    'io_setup',
+                    'io_submit',
+                    'ioctl',
+                    'ioprio_get',
+                    'ioprio_set',
+                    'kexec_load',
+                    'keyctl',
+                    'kill',
+                    'linkat',
+                    'lookup_dcookie',
+                    'madvise',
+                    'mbind',
+                    'memfd_create',
+                    'migrate_pages',
+                    'mincore',
+                    'mkdirat',
+                    'mknodat',
+                    'mlockall',
+                    'mmap_pgoff',
+                    'modify_ldt',
+                    'move_pages',
+                    'mprotect',
+                    'mq_getsetattr',
+                    'mq_notify',
+                    'mq_open',
+                    'mq_timedreceive',
+                    'mq_timedsend',
+                    'mq_unlink',
+                    'mremap',
+                    'msgctl',
+                    'msgrcv',
+                    'msgsnd',
+                    'munlock',
+                    'munlockall',
+                    'nanosleep',
+                    'newfstat',
+                    'open',
+                    'open_by_handle_at',
+                    'openat',
+                    'perf_event_open',
+                    'pipe2',
+                    'pivot_root',
+                    'pkey_mprotect',
+                    'poll',
+                    'ppoll',
+                    'prctl',
+                    'prlimit64',
+                    'pselect6',
+                    'ptrace',
+                    'quotactl',
+                    'readahead',
+                    'readlinkat',
+                    'reboot',
+                    'recvmmsg',
+                    'remap_file_pages',
+                    'renameat2',
+                    'request_key',
+                    'rmdir',
+                    'rt_sigaction',
+                    'rt_sigprocmask',
+                    'rt_sigtimedwait',
+                    'sched_getaffinity',
+                    'sched_getattr',
+                    'sched_getparam',
+                    'sched_getscheduler',
+                    'sched_rr_get_interval',
+                    'sched_setaffinity',
+                    'sched_setattr',
+                    'sched_setparam',
+                    'sched_setscheduler',
+                    'sched_yield',
+                    'select',
+                    'semctl',
+                    'semtimedop',
+                    'sendfile',
+                    'sendfile64',
+                    'set_trip_temp',
+                    'setgid',
+                    'setgroups',
+                    'setgroups16',
+                    'setitimer',
+                    'setns',
+                    'setpgid',
+                    'setpriority',
+                    'setregid',
+                    'setresgid',
+                    'setresuid',
+                    'setreuid',
+                    'setsid',
+                    'settimeofday',
+                    'setuid',
+                    'shmat',
+                    'shmctl',
+                    'shmdt',
+                    'sigaction',
+                    'sigaltstack',
+                    'signal',
+                    'socket',
+                    'socketpair',
+                    'splice',
+                    'stime',
+                    'swapoff',
+                    'swapon',
+                    'symlinkat',
+                    'sync_file_range',
+                    'syncfs',
+                    'tee',
+                    'timer_create',
+                    'timer_delete',
+                    'timer_getoverrun',
+                    'timer_gettime',
+                    'timer_settime',
+                    'timerfd_create',
+                    'timerfd_gettime',
+                    'timerfd_settime',
+                    'umount',
+                    'unlink',
+                    'unlinkat',
+                    'unshare',
+                    'uselib',
+                    'ustat',
+                    'utime',
+                    'vfork',
+                    'vmsplice']),
+ 'sendfile': set(['accept4',
+                  'acct',
+                  'bind',
+                  'bpf',
+                  'connect',
+                  'copy_file_range',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'epoll_wait',
+                  'eventfd2',
+                  'fallocate',
+                  'fchdir',
+                  'fchmod',
+                  'fchown',
+                  'fcntl',
+                  'fcntl64',
+                  'fdatasync',
+                  'fgetxattr',
+                  'flistxattr',
+                  'flock',
+                  'fremovexattr',
+                  'fsetxattr',
+                  'fstatfs',
+                  'fstatfs64',
+                  'fsync',
+                  'ftruncate',
+                  'futimesat',
+                  'getdents',
+                  'getdents64',
+                  'getpeername',
+                  'getsockname',
+                  'getsockopt',
+                  'inotify_add_watch',
+                  'inotify_rm_watch',
+                  'ioctl',
+                  'listen',
+                  'llseek',
+                  'lseek',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_getsetattr',
+                  'mq_notify',
+                  'mq_open',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'old_readdir',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'pread64',
+                  'preadv',
+                  'preadv2',
+                  'preadv64',
+                  'preadv64v2',
+                  'pwrite64',
+                  'pwritev',
+                  'pwritev2',
+                  'pwritev64',
+                  'pwritev64v2',
+                  'read',
+                  'readahead',
+                  'readv',
+                  'recvfrom',
+                  'remap_file_pages',
+                  'sendfile',
+                  'sendfile64',
+                  'sendto',
+                  'setns',
+                  'setsockopt',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'shutdown',
+                  'signalfd4',
+                  'socket',
+                  'socketpair',
+                  'splice',
+                  'swapoff',
+                  'swapon',
+                  'sync_file_range',
+                  'syncfs',
+                  'tee',
+                  'uselib',
+                  'utime',
+                  'utimensat',
+                  'vmsplice',
+                  'write',
+                  'writev']),
+ 'sendfile64': set(['accept4',
+                    'acct',
+                    'bind',
+                    'bpf',
+                    'connect',
+                    'copy_file_range',
+                    'dup',
+                    'dup3',
+                    'epoll_create1',
+                    'epoll_ctl',
+                    'epoll_wait',
+                    'eventfd2',
+                    'fallocate',
+                    'fchdir',
+                    'fchmod',
+                    'fchown',
+                    'fcntl',
+                    'fcntl64',
+                    'fdatasync',
+                    'fgetxattr',
+                    'flistxattr',
+                    'flock',
+                    'fremovexattr',
+                    'fsetxattr',
+                    'fstatfs',
+                    'fstatfs64',
+                    'fsync',
+                    'ftruncate',
+                    'futimesat',
+                    'getdents',
+                    'getdents64',
+                    'getpeername',
+                    'getsockname',
+                    'getsockopt',
+                    'inotify_add_watch',
+                    'inotify_rm_watch',
+                    'ioctl',
+                    'listen',
+                    'llseek',
+                    'lseek',
+                    'memfd_create',
+                    'mmap_pgoff',
+                    'mq_getsetattr',
+                    'mq_notify',
+                    'mq_open',
+                    'mq_timedreceive',
+                    'mq_timedsend',
+                    'old_readdir',
+                    'open',
+                    'open_by_handle_at',
+                    'openat',
+                    'perf_event_open',
+                    'pipe2',
+                    'pread64',
+                    'preadv',
+                    'preadv2',
+                    'preadv64',
+                    'preadv64v2',
+                    'pwrite64',
+                    'pwritev',
+                    'pwritev2',
+                    'pwritev64',
+                    'pwritev64v2',
+                    'read',
+                    'readahead',
+                    'readv',
+                    'recvfrom',
+                    'remap_file_pages',
+                    'sendfile',
+                    'sendfile64',
+                    'sendto',
+                    'setns',
+                    'setsockopt',
+                    'shmat',
+                    'shmctl',
+                    'shmdt',
+                    'shutdown',
+                    'signalfd4',
+                    'socket',
+                    'socketpair',
+                    'splice',
+                    'swapoff',
+                    'swapon',
+                    'sync_file_range',
+                    'syncfs',
+                    'tee',
+                    'uselib',
+                    'utime',
+                    'utimensat',
+                    'vmsplice',
+                    'write',
+                    'writev']),
+ 'sendmmsg': set(['accept4',
+                  'bind',
+                  'connect',
+                  'getpeername',
+                  'getsockname',
+                  'getsockopt',
+                  'listen',
+                  'recvfrom',
+                  'recvmmsg',
+                  'recvmsg',
+                  'sendmmsg',
+                  'sendmsg',
+                  'sendto',
+                  'setsockopt',
+                  'shutdown']),
+ 'sendmsg': set(['accept4',
+                 'bind',
+                 'connect',
+                 'getpeername',
+                 'getsockname',
+                 'getsockopt',
+                 'listen',
+                 'recvfrom',
+                 'recvmmsg',
+                 'recvmsg',
+                 'sendmmsg',
+                 'sendmsg',
+                 'sendto',
+                 'setsockopt',
+                 'shutdown']),
+ 'sendto': set(['accept4',
+                'acct',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'epoll_wait',
+                'eventfd2',
+                'fallocate',
+                'fchdir',
+                'fchmod',
+                'fchown',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'llseek',
+                'lseek',
+                'memfd_create',
+                'mmap_pgoff',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_open',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'remap_file_pages',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setns',
+                'setsockopt',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'shutdown',
+                'signalfd4',
+                'socket',
+                'socketpair',
+                'splice',
+                'swapoff',
+                'swapon',
+                'sync_file_range',
+                'syncfs',
+                'tee',
+                'uselib',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'set_mempolicy': set(['get_mempolicy', 'mbind', 'set_mempolicy']),
+ 'set_thread_area': set(['arch_prctl',
+                         'capget',
+                         'clone',
+                         'fork',
+                         'get_robust_list',
+                         'getitimer',
+                         'getpgid',
+                         'getppid',
+                         'getpriority',
+                         'getrusage',
+                         'getsid',
+                         'ioperm',
+                         'ioprio_get',
+                         'ioprio_set',
+                         'keyctl',
+                         'kill',
+                         'migrate_pages',
+                         'move_pages',
+                         'mq_timedreceive',
+                         'mq_timedsend',
+                         'msgrcv',
+                         'perf_event_open',
+                         'prctl',
+                         'prlimit64',
+                         'ptrace',
+                         'rt_sigaction',
+                         'rt_sigprocmask',
+                         'rt_sigtimedwait',
+                         'sched_getaffinity',
+                         'sched_getattr',
+                         'sched_getparam',
+                         'sched_getscheduler',
+                         'sched_rr_get_interval',
+                         'sched_setaffinity',
+                         'sched_setattr',
+                         'sched_setparam',
+                         'sched_setscheduler',
+                         'semtimedop',
+                         'setitimer',
+                         'setns',
+                         'setpgid',
+                         'setpriority',
+                         'setsid',
+                         'sigaction',
+                         'sigaltstack',
+                         'signal',
+                         'umount',
+                         'vfork']),
+ 'set_trip_temp': set(['get_curr_temp', 'get_trip_temp', 'set_trip_temp']),
+ 'setdomainname': set(['setns']),
+ 'setfsgid': set(['capget',
+                  'capset',
+                  'clone',
+                  'epoll_create1',
+                  'faccessat',
+                  'fork',
+                  'get_robust_list',
+                  'getgroups',
+                  'getgroups16',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getresgid',
+                  'getresgid16',
+                  'getresuid',
+                  'getresuid16',
+                  'getrusage',
+                  'getsid',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'perf_event_open',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setfsgid',
+                  'setfsuid',
+                  'setgid',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setregid',
+                  'setresgid',
+                  'setresuid',
+                  'setreuid',
+                  'setsid',
+                  'setuid',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'unshare',
+                  'vfork']),
+ 'setfsuid': set(['capget',
+                  'capset',
+                  'clone',
+                  'epoll_create1',
+                  'faccessat',
+                  'fork',
+                  'get_robust_list',
+                  'getgroups',
+                  'getgroups16',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getresgid',
+                  'getresgid16',
+                  'getresuid',
+                  'getresuid16',
+                  'getrusage',
+                  'getsid',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'perf_event_open',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setfsgid',
+                  'setfsuid',
+                  'setgid',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setregid',
+                  'setresgid',
+                  'setresuid',
+                  'setreuid',
+                  'setsid',
+                  'setuid',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'unshare',
+                  'vfork']),
+ 'setgid': set(['capget',
+                'capset',
+                'clone',
+                'epoll_create1',
+                'faccessat',
+                'fork',
+                'get_robust_list',
+                'getgroups',
+                'getgroups16',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getresgid',
+                'getresgid16',
+                'getresuid',
+                'getresuid16',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setfsgid',
+                'setfsuid',
+                'setgid',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setregid',
+                'setresgid',
+                'setresuid',
+                'setreuid',
+                'setsid',
+                'setuid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'unshare',
+                'vfork']),
+ 'setgroups16': set(['setgroups', 'setgroups16']),
+ 'sethostname': set(['setns']),
+ 'setitimer': set(['adjtimex',
+                   'alarm',
+                   'clock_adjtime',
+                   'exit_group',
+                   'getitimer',
+                   'getrusage',
+                   'ppoll',
+                   'select',
+                   'setitimer',
+                   'settimeofday',
+                   'timer_create',
+                   'wait4',
+                   'waitid']),
+ 'setns': set(['setns']),
+ 'setpgid': set(['capget',
+                 'clone',
+                 'exit_group',
+                 'fork',
+                 'get_robust_list',
+                 'getitimer',
+                 'getpgid',
+                 'getppid',
+                 'getpriority',
+                 'getrusage',
+                 'getsid',
+                 'ioprio_get',
+                 'ioprio_set',
+                 'keyctl',
+                 'kill',
+                 'migrate_pages',
+                 'move_pages',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'msgrcv',
+                 'perf_event_open',
+                 'prctl',
+                 'prlimit64',
+                 'ptrace',
+                 'rt_sigaction',
+                 'rt_sigprocmask',
+                 'rt_sigtimedwait',
+                 'sched_getaffinity',
+                 'sched_getattr',
+                 'sched_getparam',
+                 'sched_getscheduler',
+                 'sched_rr_get_interval',
+                 'sched_setaffinity',
+                 'sched_setattr',
+                 'sched_setparam',
+                 'sched_setscheduler',
+                 'semtimedop',
+                 'setitimer',
+                 'setns',
+                 'setpgid',
+                 'setpriority',
+                 'setresuid',
+                 'setreuid',
+                 'setsid',
+                 'setuid',
+                 'sigaction',
+                 'sigaltstack',
+                 'signal',
+                 'timer_create',
+                 'umount',
+                 'vfork']),
+ 'setpriority': set(['capget',
+                     'clone',
+                     'fork',
+                     'get_robust_list',
+                     'getitimer',
+                     'getpgid',
+                     'getppid',
+                     'getpriority',
+                     'getrusage',
+                     'getsid',
+                     'ioprio_get',
+                     'ioprio_set',
+                     'keyctl',
+                     'kill',
+                     'migrate_pages',
+                     'move_pages',
+                     'mq_timedreceive',
+                     'mq_timedsend',
+                     'msgrcv',
+                     'perf_event_open',
+                     'prctl',
+                     'prlimit64',
+                     'ptrace',
+                     'rt_sigaction',
+                     'rt_sigprocmask',
+                     'rt_sigtimedwait',
+                     'sched_getaffinity',
+                     'sched_getattr',
+                     'sched_getparam',
+                     'sched_getscheduler',
+                     'sched_rr_get_interval',
+                     'sched_setaffinity',
+                     'sched_setattr',
+                     'sched_setparam',
+                     'sched_setscheduler',
+                     'semtimedop',
+                     'setitimer',
+                     'setns',
+                     'setpgid',
+                     'setpriority',
+                     'setresuid',
+                     'setreuid',
+                     'setsid',
+                     'setuid',
+                     'sigaction',
+                     'sigaltstack',
+                     'signal',
+                     'umount',
+                     'vfork']),
+ 'setregid': set(['capget',
+                  'capset',
+                  'clone',
+                  'epoll_create1',
+                  'faccessat',
+                  'fork',
+                  'get_robust_list',
+                  'getgroups',
+                  'getgroups16',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getresgid',
+                  'getresgid16',
+                  'getresuid',
+                  'getresuid16',
+                  'getrusage',
+                  'getsid',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'perf_event_open',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setfsgid',
+                  'setfsuid',
+                  'setgid',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setregid',
+                  'setresgid',
+                  'setresuid',
+                  'setreuid',
+                  'setsid',
+                  'setuid',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'unshare',
+                  'vfork']),
+ 'setresgid': set(['capget',
+                   'capset',
+                   'clone',
+                   'epoll_create1',
+                   'faccessat',
+                   'fork',
+                   'get_robust_list',
+                   'getgroups',
+                   'getgroups16',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getresgid',
+                   'getresgid16',
+                   'getresuid',
+                   'getresuid16',
+                   'getrusage',
+                   'getsid',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setfsgid',
+                   'setfsuid',
+                   'setgid',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setregid',
+                   'setresgid',
+                   'setresuid',
+                   'setreuid',
+                   'setsid',
+                   'setuid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'unshare',
+                   'vfork']),
+ 'setresuid': set(['capget',
+                   'capset',
+                   'clone',
+                   'epoll_create1',
+                   'faccessat',
+                   'fork',
+                   'get_robust_list',
+                   'getgroups',
+                   'getgroups16',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getresgid',
+                   'getresgid16',
+                   'getresuid',
+                   'getresuid16',
+                   'getrusage',
+                   'getsid',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setfsgid',
+                   'setfsuid',
+                   'setgid',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setregid',
+                   'setresgid',
+                   'setresuid',
+                   'setreuid',
+                   'setsid',
+                   'setuid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'unshare',
+                   'vfork']),
+ 'setreuid': set(['capget',
+                  'capset',
+                  'clone',
+                  'epoll_create1',
+                  'faccessat',
+                  'fork',
+                  'get_robust_list',
+                  'getgroups',
+                  'getgroups16',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getresgid',
+                  'getresgid16',
+                  'getresuid',
+                  'getresuid16',
+                  'getrusage',
+                  'getsid',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'perf_event_open',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setfsgid',
+                  'setfsuid',
+                  'setgid',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setregid',
+                  'setresgid',
+                  'setresuid',
+                  'setreuid',
+                  'setsid',
+                  'setuid',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'unshare',
+                  'vfork']),
+ 'setrlimit': set(['capget',
+                   'clone',
+                   'fork',
+                   'get_robust_list',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getrlimit',
+                   'getrusage',
+                   'getsid',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'old_getrlimit',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setrlimit',
+                   'setsid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'vfork']),
+ 'setsid': set(['exit_group', 'setsid', 'timer_create']),
+ 'setsockopt': set(['accept4',
+                    'bind',
+                    'bpf',
+                    'connect',
+                    'copy_file_range',
+                    'epoll_ctl',
+                    'epoll_wait',
+                    'fallocate',
+                    'fchdir',
+                    'fchmod',
+                    'fchown',
+                    'fcntl',
+                    'fcntl64',
+                    'fdatasync',
+                    'fgetxattr',
+                    'flistxattr',
+                    'flock',
+                    'fremovexattr',
+                    'fsetxattr',
+                    'fstatfs',
+                    'fstatfs64',
+                    'fsync',
+                    'ftruncate',
+                    'futimesat',
+                    'getdents',
+                    'getdents64',
+                    'getpeername',
+                    'getsockname',
+                    'getsockopt',
+                    'inotify_add_watch',
+                    'inotify_rm_watch',
+                    'ioctl',
+                    'listen',
+                    'llseek',
+                    'lseek',
+                    'mq_getsetattr',
+                    'mq_notify',
+                    'mq_timedreceive',
+                    'mq_timedsend',
+                    'old_readdir',
+                    'perf_event_open',
+                    'pread64',
+                    'preadv',
+                    'preadv2',
+                    'preadv64',
+                    'preadv64v2',
+                    'pwrite64',
+                    'pwritev',
+                    'pwritev2',
+                    'pwritev64',
+                    'pwritev64v2',
+                    'read',
+                    'readahead',
+                    'readv',
+                    'recvfrom',
+                    'sendfile',
+                    'sendfile64',
+                    'sendto',
+                    'setsockopt',
+                    'shutdown',
+                    'signalfd4',
+                    'splice',
+                    'sync_file_range',
+                    'syncfs',
+                    'tee',
+                    'utime',
+                    'utimensat',
+                    'vmsplice',
+                    'write',
+                    'writev']),
+ 'settimeofday': set(['adjtimex',
+                      'alarm',
+                      'clock_adjtime',
+                      'getitimer',
+                      'getrusage',
+                      'ppoll',
+                      'select',
+                      'setitimer',
+                      'settimeofday',
+                      'wait4',
+                      'waitid']),
+ 'setuid': set(['capget',
+                'capset',
+                'clone',
+                'epoll_create1',
+                'faccessat',
+                'fork',
+                'get_robust_list',
+                'getgroups',
+                'getgroups16',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getresgid',
+                'getresgid16',
+                'getresuid',
+                'getresuid16',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setfsgid',
+                'setfsuid',
+                'setgid',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setregid',
+                'setresgid',
+                'setresuid',
+                'setreuid',
+                'setsid',
+                'setuid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'unshare',
+                'vfork']),
+ 'setxattr': set(['accept4',
+                  'acct',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'eventfd2',
+                  'flock',
+                  'getcwd',
+                  'lookup_dcookie',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_open',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'pivot_root',
+                  'quotactl',
+                  'remap_file_pages',
+                  'setns',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'socket',
+                  'socketpair',
+                  'swapoff',
+                  'swapon',
+                  'unshare',
+                  'uselib']),
+ 'shmat': set(['accept4',
+               'acct',
+               'capget',
+               'clone',
+               'dup',
+               'dup3',
+               'epoll_create1',
+               'epoll_ctl',
+               'eventfd2',
+               'flock',
+               'fork',
+               'get_robust_list',
+               'getcwd',
+               'getitimer',
+               'getpgid',
+               'getppid',
+               'getpriority',
+               'getrusage',
+               'getsid',
+               'ioprio_get',
+               'ioprio_set',
+               'keyctl',
+               'kill',
+               'lookup_dcookie',
+               'memfd_create',
+               'migrate_pages',
+               'mmap_pgoff',
+               'move_pages',
+               'mq_open',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'msgrcv',
+               'open',
+               'open_by_handle_at',
+               'openat',
+               'perf_event_open',
+               'pipe2',
+               'pivot_root',
+               'prctl',
+               'prlimit64',
+               'ptrace',
+               'quotactl',
+               'remap_file_pages',
+               'rt_sigaction',
+               'rt_sigprocmask',
+               'rt_sigtimedwait',
+               'sched_getaffinity',
+               'sched_getattr',
+               'sched_getparam',
+               'sched_getscheduler',
+               'sched_rr_get_interval',
+               'sched_setaffinity',
+               'sched_setattr',
+               'sched_setparam',
+               'sched_setscheduler',
+               'semtimedop',
+               'setitimer',
+               'setns',
+               'setpgid',
+               'setpriority',
+               'setsid',
+               'shmat',
+               'shmctl',
+               'shmdt',
+               'sigaction',
+               'sigaltstack',
+               'signal',
+               'socket',
+               'socketpair',
+               'swapoff',
+               'swapon',
+               'umount',
+               'unshare',
+               'uselib',
+               'vfork']),
+ 'shmctl': set(['accept4',
+                'acct',
+                'capget',
+                'clone',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'eventfd2',
+                'flock',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioperm',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'memfd_create',
+                'migrate_pages',
+                'mmap_pgoff',
+                'move_pages',
+                'mq_open',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'mq_unlink',
+                'msgctl',
+                'msgget',
+                'msgrcv',
+                'msgsnd',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'remap_file_pages',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semctl',
+                'semget',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'shmget',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'socket',
+                'socketpair',
+                'swapoff',
+                'swapon',
+                'umount',
+                'uselib',
+                'vfork']),
+ 'shmdt': set(['brk',
+               'get_mempolicy',
+               'madvise',
+               'mincore',
+               'mlockall',
+               'mprotect',
+               'mremap',
+               'munlock',
+               'munlockall',
+               'pkey_mprotect',
+               'prctl',
+               'remap_file_pages',
+               'shmdt']),
+ 'shutdown': set(['accept4',
+                  'bind',
+                  'bpf',
+                  'connect',
+                  'copy_file_range',
+                  'epoll_ctl',
+                  'epoll_wait',
+                  'fallocate',
+                  'fchdir',
+                  'fchmod',
+                  'fchown',
+                  'fcntl',
+                  'fcntl64',
+                  'fdatasync',
+                  'fgetxattr',
+                  'flistxattr',
+                  'flock',
+                  'fremovexattr',
+                  'fsetxattr',
+                  'fstatfs',
+                  'fstatfs64',
+                  'fsync',
+                  'ftruncate',
+                  'futimesat',
+                  'getdents',
+                  'getdents64',
+                  'getpeername',
+                  'getsockname',
+                  'getsockopt',
+                  'inotify_add_watch',
+                  'inotify_rm_watch',
+                  'ioctl',
+                  'listen',
+                  'llseek',
+                  'lseek',
+                  'mq_getsetattr',
+                  'mq_notify',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'old_readdir',
+                  'perf_event_open',
+                  'pread64',
+                  'preadv',
+                  'preadv2',
+                  'preadv64',
+                  'preadv64v2',
+                  'pwrite64',
+                  'pwritev',
+                  'pwritev2',
+                  'pwritev64',
+                  'pwritev64v2',
+                  'read',
+                  'readahead',
+                  'readv',
+                  'recvfrom',
+                  'sendfile',
+                  'sendfile64',
+                  'sendto',
+                  'setsockopt',
+                  'shutdown',
+                  'signalfd4',
+                  'splice',
+                  'sync_file_range',
+                  'syncfs',
+                  'tee',
+                  'utime',
+                  'utimensat',
+                  'vmsplice',
+                  'write',
+                  'writev']),
+ 'sigaction': set(['capget',
+                   'clone',
+                   'fork',
+                   'get_robust_list',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getrusage',
+                   'getsid',
+                   'ioperm',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setsid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'vfork']),
+ 'signalfd4': set(['accept4',
+                   'acct',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'eventfd2',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchown',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'memfd_create',
+                   'mmap_pgoff',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_open',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'old_readdir',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readv',
+                   'recvfrom',
+                   'remap_file_pages',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setns',
+                   'setsockopt',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'shutdown',
+                   'signalfd4',
+                   'socket',
+                   'socketpair',
+                   'splice',
+                   'swapoff',
+                   'swapon',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'uselib',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'splice': set(['accept4',
+                'acct',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'epoll_wait',
+                'eventfd2',
+                'fallocate',
+                'fchdir',
+                'fchmod',
+                'fchown',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'llseek',
+                'lseek',
+                'memfd_create',
+                'mmap_pgoff',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_open',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'remap_file_pages',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setns',
+                'setsockopt',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'shutdown',
+                'signalfd4',
+                'socket',
+                'socketpair',
+                'splice',
+                'swapoff',
+                'swapon',
+                'sync_file_range',
+                'syncfs',
+                'tee',
+                'uselib',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'stat': set(['fstat', 'lstat', 'newfstat', 'stat']),
+ 'statfs': set(['fstatfs', 'fstatfs64', 'statfs', 'statfs64', 'ustat']),
+ 'statfs64': set(['fstatfs', 'fstatfs64', 'statfs', 'statfs64', 'ustat']),
+ 'swapoff': set(['accept4',
+                 'acct',
+                 'capget',
+                 'clone',
+                 'dup',
+                 'dup3',
+                 'epoll_create1',
+                 'epoll_ctl',
+                 'eventfd2',
+                 'flock',
+                 'fork',
+                 'get_robust_list',
+                 'getitimer',
+                 'getpgid',
+                 'getppid',
+                 'getpriority',
+                 'getrusage',
+                 'getsid',
+                 'ioprio_get',
+                 'ioprio_set',
+                 'keyctl',
+                 'kill',
+                 'memfd_create',
+                 'migrate_pages',
+                 'mmap_pgoff',
+                 'move_pages',
+                 'mq_open',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'msgrcv',
+                 'open',
+                 'open_by_handle_at',
+                 'openat',
+                 'perf_event_open',
+                 'pipe2',
+                 'prctl',
+                 'prlimit64',
+                 'ptrace',
+                 'remap_file_pages',
+                 'rt_sigaction',
+                 'rt_sigprocmask',
+                 'rt_sigtimedwait',
+                 'sched_getaffinity',
+                 'sched_getattr',
+                 'sched_getparam',
+                 'sched_getscheduler',
+                 'sched_rr_get_interval',
+                 'sched_setaffinity',
+                 'sched_setattr',
+                 'sched_setparam',
+                 'sched_setscheduler',
+                 'semtimedop',
+                 'setitimer',
+                 'setns',
+                 'setpgid',
+                 'setpriority',
+                 'setsid',
+                 'shmat',
+                 'shmctl',
+                 'shmdt',
+                 'sigaction',
+                 'sigaltstack',
+                 'signal',
+                 'socket',
+                 'socketpair',
+                 'swapoff',
+                 'swapon',
+                 'umount',
+                 'uselib',
+                 'vfork']),
+ 'swapon': set(['faccessat',
+                'fchmod',
+                'fchmodat',
+                'fchown',
+                'fchownat',
+                'ftruncate',
+                'inotify_add_watch',
+                'ioctl',
+                'linkat',
+                'memfd_create',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'mq_unlink',
+                'readlinkat',
+                'sendfile',
+                'sendfile64',
+                'swapoff',
+                'swapon',
+                'unlink',
+                'unlinkat',
+                'uselib']),
+ 'symlinkat': set(['acct',
+                   'mq_open',
+                   'mq_unlink',
+                   'open',
+                   'openat',
+                   'quotactl',
+                   'renameat2',
+                   'rmdir',
+                   'swapoff',
+                   'swapon',
+                   'symlinkat',
+                   'sysfs',
+                   'unlink',
+                   'unlinkat',
+                   'uselib']),
+ 'sync_file_range': set(['accept4',
+                         'bind',
+                         'bpf',
+                         'connect',
+                         'copy_file_range',
+                         'epoll_ctl',
+                         'epoll_wait',
+                         'fallocate',
+                         'fchdir',
+                         'fchmod',
+                         'fchown',
+                         'fcntl',
+                         'fcntl64',
+                         'fdatasync',
+                         'fgetxattr',
+                         'flistxattr',
+                         'flock',
+                         'fremovexattr',
+                         'fsetxattr',
+                         'fstatfs',
+                         'fstatfs64',
+                         'fsync',
+                         'ftruncate',
+                         'futimesat',
+                         'getdents',
+                         'getdents64',
+                         'getpeername',
+                         'getsockname',
+                         'getsockopt',
+                         'inotify_add_watch',
+                         'inotify_rm_watch',
+                         'ioctl',
+                         'listen',
+                         'llseek',
+                         'lseek',
+                         'mq_getsetattr',
+                         'mq_notify',
+                         'mq_timedreceive',
+                         'mq_timedsend',
+                         'old_readdir',
+                         'perf_event_open',
+                         'pread64',
+                         'preadv',
+                         'preadv2',
+                         'preadv64',
+                         'preadv64v2',
+                         'pwrite64',
+                         'pwritev',
+                         'pwritev2',
+                         'pwritev64',
+                         'pwritev64v2',
+                         'read',
+                         'readahead',
+                         'readv',
+                         'recvfrom',
+                         'sendfile',
+                         'sendfile64',
+                         'sendto',
+                         'setsockopt',
+                         'shutdown',
+                         'signalfd4',
+                         'splice',
+                         'sync_file_range',
+                         'syncfs',
+                         'tee',
+                         'utime',
+                         'utimensat',
+                         'vmsplice',
+                         'write',
+                         'writev']),
+ 'syncfs': set(['accept4',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'epoll_ctl',
+                'epoll_wait',
+                'fallocate',
+                'fchdir',
+                'fchmod',
+                'fchown',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'llseek',
+                'lseek',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'perf_event_open',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setsockopt',
+                'shutdown',
+                'signalfd4',
+                'splice',
+                'sync_file_range',
+                'syncfs',
+                'tee',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'sysctl': set(['sysctl']),
+ 'sysfs': set(['acct',
+               'mq_open',
+               'mq_unlink',
+               'open',
+               'openat',
+               'quotactl',
+               'renameat2',
+               'rmdir',
+               'swapoff',
+               'swapon',
+               'symlinkat',
+               'sysfs',
+               'unlink',
+               'unlinkat',
+               'uselib']),
+ 'sysinfo': set(['capget',
+                 'clock_nanosleep',
+                 'clone',
+                 'epoll_wait',
+                 'faccessat',
+                 'fchmod',
+                 'fchmodat',
+                 'fchown',
+                 'fchownat',
+                 'fork',
+                 'fstat',
+                 'ftruncate',
+                 'futex',
+                 'futimesat',
+                 'get_robust_list',
+                 'getitimer',
+                 'getpgid',
+                 'getppid',
+                 'getpriority',
+                 'getrusage',
+                 'getsid',
+                 'inotify_add_watch',
+                 'io_getevents',
+                 'ioctl',
+                 'ioperm',
+                 'ioprio_get',
+                 'ioprio_set',
+                 'keyctl',
+                 'kill',
+                 'linkat',
+                 'memfd_create',
+                 'migrate_pages',
+                 'move_pages',
+                 'mq_getsetattr',
+                 'mq_notify',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'mq_unlink',
+                 'msgrcv',
+                 'nanosleep',
+                 'newfstat',
+                 'perf_event_open',
+                 'poll',
+                 'ppoll',
+                 'prctl',
+                 'prlimit64',
+                 'pselect6',
+                 'ptrace',
+                 'readlinkat',
+                 'recvmmsg',
+                 'rt_sigaction',
+                 'rt_sigprocmask',
+                 'rt_sigtimedwait',
+                 'sched_getaffinity',
+                 'sched_getattr',
+                 'sched_getparam',
+                 'sched_getscheduler',
+                 'sched_rr_get_interval',
+                 'sched_setaffinity',
+                 'sched_setattr',
+                 'sched_setparam',
+                 'sched_setscheduler',
+                 'select',
+                 'semtimedop',
+                 'sendfile',
+                 'sendfile64',
+                 'setitimer',
+                 'setns',
+                 'setpgid',
+                 'setpriority',
+                 'setsid',
+                 'settimeofday',
+                 'sigaction',
+                 'sigaltstack',
+                 'signal',
+                 'stime',
+                 'swapoff',
+                 'swapon',
+                 'sysinfo',
+                 'timer_gettime',
+                 'timer_settime',
+                 'timerfd_gettime',
+                 'timerfd_settime',
+                 'umount',
+                 'unlink',
+                 'unlinkat',
+                 'uselib',
+                 'utime',
+                 'vfork']),
+ 'syslog': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioperm',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'tee': set(['accept4',
+             'acct',
+             'bind',
+             'bpf',
+             'connect',
+             'copy_file_range',
+             'dup',
+             'dup3',
+             'epoll_create1',
+             'epoll_ctl',
+             'epoll_wait',
+             'eventfd2',
+             'fallocate',
+             'fchdir',
+             'fchmod',
+             'fchown',
+             'fcntl',
+             'fcntl64',
+             'fdatasync',
+             'fgetxattr',
+             'flistxattr',
+             'flock',
+             'fremovexattr',
+             'fsetxattr',
+             'fstatfs',
+             'fstatfs64',
+             'fsync',
+             'ftruncate',
+             'futimesat',
+             'getdents',
+             'getdents64',
+             'getpeername',
+             'getsockname',
+             'getsockopt',
+             'inotify_add_watch',
+             'inotify_rm_watch',
+             'ioctl',
+             'listen',
+             'llseek',
+             'lseek',
+             'memfd_create',
+             'mmap_pgoff',
+             'mq_getsetattr',
+             'mq_notify',
+             'mq_open',
+             'mq_timedreceive',
+             'mq_timedsend',
+             'old_readdir',
+             'open',
+             'open_by_handle_at',
+             'openat',
+             'perf_event_open',
+             'pipe2',
+             'pread64',
+             'preadv',
+             'preadv2',
+             'preadv64',
+             'preadv64v2',
+             'pwrite64',
+             'pwritev',
+             'pwritev2',
+             'pwritev64',
+             'pwritev64v2',
+             'read',
+             'readahead',
+             'readv',
+             'recvfrom',
+             'remap_file_pages',
+             'sendfile',
+             'sendfile64',
+             'sendto',
+             'setns',
+             'setsockopt',
+             'shmat',
+             'shmctl',
+             'shmdt',
+             'shutdown',
+             'signalfd4',
+             'socket',
+             'socketpair',
+             'splice',
+             'swapoff',
+             'swapon',
+             'sync_file_range',
+             'syncfs',
+             'tee',
+             'uselib',
+             'utime',
+             'utimensat',
+             'vmsplice',
+             'write',
+             'writev']),
+ 'tgkill': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'timer_create': set(['clock_adjtime',
+                      'clock_getres',
+                      'clock_gettime',
+                      'clock_nanosleep',
+                      'clock_settime',
+                      'timer_create',
+                      'timer_delete',
+                      'timer_getoverrun',
+                      'timer_gettime',
+                      'timer_settime']),
+ 'timer_delete': set(['capget',
+                      'clock_adjtime',
+                      'clock_getres',
+                      'clock_gettime',
+                      'clock_nanosleep',
+                      'clock_settime',
+                      'clone',
+                      'fork',
+                      'get_robust_list',
+                      'getitimer',
+                      'getpgid',
+                      'getppid',
+                      'getpriority',
+                      'getrusage',
+                      'getsid',
+                      'ioprio_get',
+                      'ioprio_set',
+                      'keyctl',
+                      'kill',
+                      'migrate_pages',
+                      'move_pages',
+                      'mq_timedreceive',
+                      'mq_timedsend',
+                      'msgrcv',
+                      'perf_event_open',
+                      'prctl',
+                      'prlimit64',
+                      'ptrace',
+                      'rt_sigaction',
+                      'rt_sigprocmask',
+                      'rt_sigtimedwait',
+                      'sched_getaffinity',
+                      'sched_getattr',
+                      'sched_getparam',
+                      'sched_getscheduler',
+                      'sched_rr_get_interval',
+                      'sched_setaffinity',
+                      'sched_setattr',
+                      'sched_setparam',
+                      'sched_setscheduler',
+                      'semtimedop',
+                      'setitimer',
+                      'setns',
+                      'setpgid',
+                      'setpriority',
+                      'setsid',
+                      'sigaction',
+                      'sigaltstack',
+                      'signal',
+                      'timer_create',
+                      'timer_delete',
+                      'timer_getoverrun',
+                      'timer_gettime',
+                      'timer_settime',
+                      'umount',
+                      'vfork']),
+ 'timer_getoverrun': set(['capget',
+                          'clone',
+                          'fork',
+                          'get_robust_list',
+                          'getitimer',
+                          'getpgid',
+                          'getppid',
+                          'getpriority',
+                          'getrusage',
+                          'getsid',
+                          'ioprio_get',
+                          'ioprio_set',
+                          'keyctl',
+                          'kill',
+                          'migrate_pages',
+                          'move_pages',
+                          'mq_timedreceive',
+                          'mq_timedsend',
+                          'msgrcv',
+                          'perf_event_open',
+                          'prctl',
+                          'prlimit64',
+                          'ptrace',
+                          'rt_sigaction',
+                          'rt_sigprocmask',
+                          'rt_sigtimedwait',
+                          'sched_getaffinity',
+                          'sched_getattr',
+                          'sched_getparam',
+                          'sched_getscheduler',
+                          'sched_rr_get_interval',
+                          'sched_setaffinity',
+                          'sched_setattr',
+                          'sched_setparam',
+                          'sched_setscheduler',
+                          'semtimedop',
+                          'setitimer',
+                          'setns',
+                          'setpgid',
+                          'setpriority',
+                          'setsid',
+                          'sigaction',
+                          'sigaltstack',
+                          'signal',
+                          'timer_create',
+                          'timer_delete',
+                          'timer_getoverrun',
+                          'timer_gettime',
+                          'timer_settime',
+                          'umount',
+                          'vfork']),
+ 'timer_gettime': set(['clock_adjtime',
+                       'clock_getres',
+                       'clock_gettime',
+                       'clock_nanosleep',
+                       'clock_settime',
+                       'timer_create',
+                       'timer_delete',
+                       'timer_gettime',
+                       'timer_settime']),
+ 'timer_settime': set(['clock_adjtime',
+                       'clock_getres',
+                       'clock_gettime',
+                       'clock_nanosleep',
+                       'clock_settime',
+                       'timer_create',
+                       'timer_delete',
+                       'timer_gettime',
+                       'timer_settime']),
+ 'timerfd_create': set(['timerfd_create',
+                        'timerfd_gettime',
+                        'timerfd_settime']),
+ 'timerfd_gettime': set(['timerfd_create',
+                         'timerfd_gettime',
+                         'timerfd_settime']),
+ 'timerfd_settime': set(['timerfd_create',
+                         'timerfd_gettime',
+                         'timerfd_settime']),
+ 'tkill': set(['capget',
+               'clone',
+               'fork',
+               'get_robust_list',
+               'getitimer',
+               'getpgid',
+               'getppid',
+               'getpriority',
+               'getrusage',
+               'getsid',
+               'ioprio_get',
+               'ioprio_set',
+               'keyctl',
+               'kill',
+               'migrate_pages',
+               'move_pages',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'msgrcv',
+               'perf_event_open',
+               'prctl',
+               'prlimit64',
+               'ptrace',
+               'rt_sigaction',
+               'rt_sigprocmask',
+               'rt_sigtimedwait',
+               'sched_getaffinity',
+               'sched_getattr',
+               'sched_getparam',
+               'sched_getscheduler',
+               'sched_rr_get_interval',
+               'sched_setaffinity',
+               'sched_setattr',
+               'sched_setparam',
+               'sched_setscheduler',
+               'semtimedop',
+               'setitimer',
+               'setns',
+               'setpgid',
+               'setpriority',
+               'setsid',
+               'sigaction',
+               'sigaltstack',
+               'signal',
+               'umount',
+               'vfork']),
+ 'umount': set(['accept4',
+                'acct',
+                'capget',
+                'clone',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'eventfd2',
+                'flock',
+                'fork',
+                'get_robust_list',
+                'getcwd',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'lookup_dcookie',
+                'memfd_create',
+                'migrate_pages',
+                'mmap_pgoff',
+                'move_pages',
+                'mq_open',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'mq_unlink',
+                'msgrcv',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'pivot_root',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'quotactl',
+                'remap_file_pages',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setresuid',
+                'setreuid',
+                'setsid',
+                'setuid',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'socket',
+                'socketpair',
+                'swapoff',
+                'swapon',
+                'syncfs',
+                'umount',
+                'unshare',
+                'uselib',
+                'ustat',
+                'vfork']),
+ 'uname': set(['capget',
+               'clone',
+               'fork',
+               'get_robust_list',
+               'getitimer',
+               'getpgid',
+               'getppid',
+               'getpriority',
+               'getrusage',
+               'getsid',
+               'ioprio_get',
+               'ioprio_set',
+               'keyctl',
+               'kill',
+               'migrate_pages',
+               'move_pages',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'msgrcv',
+               'perf_event_open',
+               'personality',
+               'prctl',
+               'prlimit64',
+               'ptrace',
+               'rt_sigaction',
+               'rt_sigprocmask',
+               'rt_sigtimedwait',
+               'sched_getaffinity',
+               'sched_getattr',
+               'sched_getparam',
+               'sched_getscheduler',
+               'sched_rr_get_interval',
+               'sched_setaffinity',
+               'sched_setattr',
+               'sched_setparam',
+               'sched_setscheduler',
+               'semtimedop',
+               'setitimer',
+               'setns',
+               'setpgid',
+               'setpriority',
+               'setsid',
+               'sigaction',
+               'sigaltstack',
+               'signal',
+               'umount',
+               'vfork']),
+ 'unlink': set(['accept4',
+                'acct',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'eventfd2',
+                'flock',
+                'ftruncate',
+                'getcwd',
+                'linkat',
+                'lookup_dcookie',
+                'memfd_create',
+                'mkdirat',
+                'mknodat',
+                'mmap_pgoff',
+                'mq_open',
+                'mq_unlink',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'pivot_root',
+                'quotactl',
+                'remap_file_pages',
+                'renameat2',
+                'rmdir',
+                'setns',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'socket',
+                'socketpair',
+                'swapoff',
+                'swapon',
+                'symlinkat',
+                'unlink',
+                'unlinkat',
+                'unshare',
+                'uselib']),
+ 'unlinkat': set(['accept4',
+                  'acct',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'eventfd2',
+                  'flock',
+                  'ftruncate',
+                  'getcwd',
+                  'linkat',
+                  'lookup_dcookie',
+                  'memfd_create',
+                  'mkdirat',
+                  'mknodat',
+                  'mmap_pgoff',
+                  'mq_open',
+                  'mq_unlink',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'pivot_root',
+                  'quotactl',
+                  'remap_file_pages',
+                  'renameat2',
+                  'rmdir',
+                  'setns',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'socket',
+                  'socketpair',
+                  'swapoff',
+                  'swapon',
+                  'symlinkat',
+                  'unlink',
+                  'unlinkat',
+                  'unshare',
+                  'uselib']),
+ 'unshare': set(['unshare']),
+ 'uselib': set(['acct',
+                'getcwd',
+                'mq_open',
+                'mq_unlink',
+                'pivot_root',
+                'quotactl',
+                'swapon',
+                'syncfs',
+                'umount',
+                'uselib',
+                'ustat']),
+ 'ustat': set(['quotactl', 'swapon', 'syncfs', 'umount', 'ustat']),
+ 'utime': set(['accept4',
+               'bind',
+               'bpf',
+               'clock_nanosleep',
+               'connect',
+               'copy_file_range',
+               'epoll_ctl',
+               'epoll_wait',
+               'faccessat',
+               'fallocate',
+               'fchdir',
+               'fchmod',
+               'fchmodat',
+               'fchown',
+               'fchownat',
+               'fcntl',
+               'fcntl64',
+               'fdatasync',
+               'fgetxattr',
+               'flistxattr',
+               'flock',
+               'fremovexattr',
+               'fsetxattr',
+               'fstat',
+               'fstatfs',
+               'fstatfs64',
+               'fsync',
+               'ftruncate',
+               'futex',
+               'futimesat',
+               'getdents',
+               'getdents64',
+               'getpeername',
+               'getsockname',
+               'getsockopt',
+               'inotify_add_watch',
+               'inotify_rm_watch',
+               'io_getevents',
+               'ioctl',
+               'linkat',
+               'listen',
+               'llseek',
+               'lseek',
+               'memfd_create',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'mq_unlink',
+               'nanosleep',
+               'newfstat',
+               'old_readdir',
+               'perf_event_open',
+               'poll',
+               'ppoll',
+               'pread64',
+               'preadv',
+               'preadv2',
+               'preadv64',
+               'preadv64v2',
+               'pselect6',
+               'pwrite64',
+               'pwritev',
+               'pwritev2',
+               'pwritev64',
+               'pwritev64v2',
+               'read',
+               'readahead',
+               'readlinkat',
+               'readv',
+               'recvfrom',
+               'recvmmsg',
+               'rt_sigtimedwait',
+               'sched_rr_get_interval',
+               'select',
+               'semtimedop',
+               'sendfile',
+               'sendfile64',
+               'sendto',
+               'setsockopt',
+               'settimeofday',
+               'shutdown',
+               'signalfd4',
+               'splice',
+               'stime',
+               'swapoff',
+               'swapon',
+               'sync_file_range',
+               'syncfs',
+               'tee',
+               'timer_gettime',
+               'timer_settime',
+               'timerfd_gettime',
+               'timerfd_settime',
+               'unlink',
+               'unlinkat',
+               'uselib',
+               'utime',
+               'utimensat',
+               'vmsplice',
+               'write',
+               'writev']),
+ 'utimensat': set(['accept4',
+                   'bind',
+                   'bpf',
+                   'clock_nanosleep',
+                   'connect',
+                   'copy_file_range',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'faccessat',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchmodat',
+                   'fchown',
+                   'fchownat',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstat',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futex',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'io_getevents',
+                   'ioctl',
+                   'linkat',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'memfd_create',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'mq_unlink',
+                   'nanosleep',
+                   'newfstat',
+                   'old_readdir',
+                   'perf_event_open',
+                   'poll',
+                   'ppoll',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pselect6',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readlinkat',
+                   'readv',
+                   'recvfrom',
+                   'recvmmsg',
+                   'rt_sigtimedwait',
+                   'sched_rr_get_interval',
+                   'select',
+                   'semtimedop',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setsockopt',
+                   'settimeofday',
+                   'shutdown',
+                   'signalfd4',
+                   'splice',
+                   'stime',
+                   'swapoff',
+                   'swapon',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'timer_gettime',
+                   'timer_settime',
+                   'timerfd_gettime',
+                   'timerfd_settime',
+                   'unlink',
+                   'unlinkat',
+                   'uselib',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'vmsplice': set(['accept4',
+                  'acct',
+                  'bind',
+                  'bpf',
+                  'connect',
+                  'copy_file_range',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'epoll_wait',
+                  'eventfd2',
+                  'fallocate',
+                  'fchdir',
+                  'fchmod',
+                  'fchown',
+                  'fcntl',
+                  'fcntl64',
+                  'fdatasync',
+                  'fgetxattr',
+                  'flistxattr',
+                  'flock',
+                  'fremovexattr',
+                  'fsetxattr',
+                  'fstatfs',
+                  'fstatfs64',
+                  'fsync',
+                  'ftruncate',
+                  'futimesat',
+                  'getdents',
+                  'getdents64',
+                  'getpeername',
+                  'getsockname',
+                  'getsockopt',
+                  'inotify_add_watch',
+                  'inotify_rm_watch',
+                  'ioctl',
+                  'listen',
+                  'llseek',
+                  'lseek',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_getsetattr',
+                  'mq_notify',
+                  'mq_open',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'old_readdir',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'pread64',
+                  'preadv',
+                  'preadv2',
+                  'preadv64',
+                  'preadv64v2',
+                  'pwrite64',
+                  'pwritev',
+                  'pwritev2',
+                  'pwritev64',
+                  'pwritev64v2',
+                  'read',
+                  'readahead',
+                  'readv',
+                  'recvfrom',
+                  'remap_file_pages',
+                  'sendfile',
+                  'sendfile64',
+                  'sendto',
+                  'setns',
+                  'setsockopt',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'shutdown',
+                  'signalfd4',
+                  'socket',
+                  'socketpair',
+                  'splice',
+                  'swapoff',
+                  'swapon',
+                  'sync_file_range',
+                  'syncfs',
+                  'tee',
+                  'uselib',
+                  'utime',
+                  'utimensat',
+                  'vmsplice',
+                  'write',
+                  'writev']),
+ 'write': set(['accept4',
+               'bind',
+               'bpf',
+               'connect',
+               'copy_file_range',
+               'epoll_ctl',
+               'epoll_wait',
+               'fallocate',
+               'fchdir',
+               'fchmod',
+               'fchown',
+               'fcntl',
+               'fcntl64',
+               'fdatasync',
+               'fgetxattr',
+               'flistxattr',
+               'flock',
+               'fremovexattr',
+               'fsetxattr',
+               'fstatfs',
+               'fstatfs64',
+               'fsync',
+               'ftruncate',
+               'futimesat',
+               'getdents',
+               'getdents64',
+               'getpeername',
+               'getsockname',
+               'getsockopt',
+               'inotify_add_watch',
+               'inotify_rm_watch',
+               'ioctl',
+               'listen',
+               'llseek',
+               'lseek',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'old_readdir',
+               'perf_event_open',
+               'pread64',
+               'preadv',
+               'preadv2',
+               'preadv64',
+               'preadv64v2',
+               'pwrite64',
+               'pwritev',
+               'pwritev2',
+               'pwritev64',
+               'pwritev64v2',
+               'read',
+               'readahead',
+               'readv',
+               'recvfrom',
+               'sendfile',
+               'sendfile64',
+               'sendto',
+               'setsockopt',
+               'shutdown',
+               'signalfd4',
+               'splice',
+               'sync_file_range',
+               'syncfs',
+               'tee',
+               'utime',
+               'utimensat',
+               'vmsplice',
+               'write',
+               'writev']),
+ 'writev': set(['accept4',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'epoll_ctl',
+                'epoll_wait',
+                'fallocate',
+                'fchdir',
+                'fchmod',
+                'fchown',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'llseek',
+                'lseek',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'perf_event_open',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setsockopt',
+                'shutdown',
+                'signalfd4',
+                'splice',
+                'sync_file_range',
+                'syncfs',
+                'tee',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev'])}
--- /dev/null	Fri Dec 21 15:00:31 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/implicit_dependencies/with_structs/implicit_dependencies.json	Fri Dec 21 15:00:31 2018
@@ -0,0 +1,1 @@
+{"setdomainname": ["setns"], "name_to_handle_at": ["epoll_ctl", "syncfs", "shmdt", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "accept4", "dup", "pivot_root", "memfd_create", "socketpair", "remap_file_pages", "dup3", "openat", "getcwd", "mq_open", "shmctl", "swapon", "shmat", "ustat", "socket", "open_by_handle_at", "unshare", "pipe2", "umount", "eventfd2", "perf_event_open"], "syncfs": ["lseek", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "pread64", "fsetxattr", "readv", "flock", "fremovexattr", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "writev", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "connect"], "lseek": ["epoll_ctl", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "flistxattr", "getdents64", "futimesat", "tee", "mq_timedreceive", "pread64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "connect"], "rt_sigtimedwait": ["clone", "rt_sigaction", "msgrcv", "rt_sigqueueinfo", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "tgkill", "sched_getparam", "getpriority", "rt_sigprocmask", "rt_tgsigqueueinfo", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "fork", "tkill", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "sched_setattr", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "timer_create", "perf_event_open", "ioprio_get", "vfork", "rt_sigreturn", "ptrace"], "vmsplice": ["lseek", "syncfs", "flistxattr", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "fsync", "bpf", "eventfd2", "old_readdir", "sendto", "shutdown", "epoll_create1", "tee", "connect", "getsockname", "flock", "pwritev", "recvfrom", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "fcntl", "sync_file_range", "inotify_add_watch", "fstatfs64", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "pwritev64v2", "splice", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "epoll_wait", "utimensat", "ftruncate", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "setfsuid": ["setuid", "sched_rr_get_interval", "rt_sigaction", "epoll_create1", "rt_sigtimedwait", "msgrcv", "getresuid", "getpgid", "kill", "getrusage", "getresuid16", "prctl", "move_pages", "clone", "getgroups", "getresgid", "rt_sigprocmask", "getpriority", "sched_getaffinity", "sched_setparam", "setsid", "vfork", "setgid", "sigaltstack", "sched_setattr", "ptrace", "setpriority", "setns", "ioprio_set", "capset", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "getresgid16", "keyctl", "setresgid", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_getparam", "sched_setaffinity", "getgroups16", "setfsgid", "unshare", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setresuid", "setitimer", "perf_event_open", "ioprio_get", "faccessat", "setregid"], "msgrcv": ["mq_timedsend", "msgsnd", "mq_timedreceive"], "uname": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "personality", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "kill": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "io_getevents": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "io_destroy", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "swapoff", "prctl", "move_pages", "getitimer", "io_setup", "getpriority", "rt_sigprocmask", "shmdt", "sched_getaffinity", "modify_ldt", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "mincore", "fork", "get_mempolicy", "io_submit", "migrate_pages", "get_robust_list", "remap_file_pages", "mremap", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mbind", "mq_timedreceive", "ioprio_get", "capget", "sigaction", "getsid", "sched_getparam", "sched_setaffinity", "io_cancel", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "brk", "vfork", "ptrace"], "swapoff": ["clone", "epoll_ctl", "shmdt", "rt_sigaction", "epoll_create1", "rt_sigtimedwait", "mmap_pgoff", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "acct", "flock", "open", "getitimer", "sched_getparam", "getpriority", "uselib", "swapon", "rt_sigprocmask", "accept4", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "memfd_create", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "remap_file_pages", "dup3", "setpgid", "mq_timedsend", "openat", "keyctl", "getppid", "sched_getscheduler", "mq_open", "dup", "mq_timedreceive", "shmctl", "move_pages", "capget", "sigaction", "getsid", "shmat", "sched_setaffinity", "socket", "open_by_handle_at", "setns", "signal", "pipe2", "sched_getattr", "semtimedop", "umount", "socketpair", "eventfd2", "sched_setscheduler", "prlimit64", "setitimer", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "getgroups16": ["setuid", "sched_rr_get_interval", "rt_sigaction", "epoll_create1", "rt_sigtimedwait", "setfsuid", "msgrcv", "getresuid", "getpgid", "kill", "getrusage", "getresuid16", "prctl", "move_pages", "clone", "getgroups", "getresgid", "rt_sigprocmask", "getpriority", "sched_getaffinity", "sched_setparam", "setsid", "vfork", "setgid", "sigaltstack", "sched_setattr", "ptrace", "setpriority", "setns", "ioprio_set", "capset", "setresuid", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "getresgid16", "keyctl", "setresgid", "getppid", "sched_getscheduler", "mq_timedreceive", "setgroups", "capget", "sigaction", "getsid", "sched_getparam", "sched_setaffinity", "setfsgid", "unshare", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setgroups16", "setitimer", "perf_event_open", "ioprio_get", "faccessat", "setregid"], "newlstat": ["newstat", "fstat", "newfstat", "newfstatat"], "pkey_alloc": ["get_mempolicy", "migrate_pages", "move_pages", "remap_file_pages", "io_setup", "shmdt", "getrusage", "modify_ldt", "io_destroy", "pkey_free", "brk", "mremap", "io_getevents", "swapoff", "prctl", "io_cancel", "mincore", "mbind"], "readahead": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "mq_unlink", "swapoff", "preadv", "getdents", "writev", "pwritev2", "fchmod", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "readlinkat", "fsync", "bpf", "recvfrom", "old_readdir", "sendto", "linkat", "shutdown", "epoll_create1", "tee", "fchownat", "connect", "getsockname", "flock", "pwritev", "eventfd2", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "fcntl", "sync_file_range", "fchmodat", "inotify_add_watch", "fstatfs64", "preadv2", "fchdir", "getpeername", "shmat", "setsockopt", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "pwritev64v2", "splice", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "faccessat", "dup", "fallocate", "setns", "listen", "futimesat", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "epoll_wait", "utimensat", "ftruncate", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "unlink", "unlinkat", "open_by_handle_at", "bind", "sendfile64"], "newfstatat": ["newstat", "newlstat", "fstat", "newfstat"], "preadv": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "getdents": ["lseek", "syncfs", "flistxattr", "rt_sigtimedwait", "mq_timedreceive", "kill", "readahead", "preadv", "sched_getaffinity", "writev", "pwritev2", "fchmod", "signalfd4", "epoll_wait", "ioprio_set", "read", "getppid", "fchown", "sched_setattr", "msgrcv", "capget", "utime", "sched_setaffinity", "fsync", "bpf", "signal", "semtimedop", "umount", "recvfrom", "old_readdir", "sendto", "fsetxattr", "tee", "sync_file_range", "connect", "getsockname", "flock", "pwritev", "rt_sigprocmask", "accept4", "fremovexattr", "setsid", "sigaltstack", "ioperm", "inotify_rm_watch", "fstatfs64", "fcntl", "migrate_pages", "getitimer", "setpgid", "keyctl", "inotify_add_watch", "preadv2", "fchdir", "ioprio_get", "getpeername", "sigaction", "getsid", "setsockopt", "getpriority", "prlimit64", "pwrite64", "perf_event_open", "clone", "epoll_ctl", "pwritev64v2", "splice", "rt_sigaction", "getpgid", "sched_rr_get_interval", "getsockopt", "sched_setparam", "mq_getsetattr", "fdatasync", "setns", "listen", "fork", "shutdown", "get_robust_list", "futimesat", "mq_timedsend", "sched_getscheduler", "fgetxattr", "ptrace", "vmsplice", "fcntl64", "fallocate", "sched_getattr", "getrusage", "sched_setscheduler", "utimensat", "bind", "ftruncate", "vfork", "llseek", "getdents64", "pread64", "preadv64v2", "readv", "prctl", "move_pages", "copy_file_range", "fstatfs", "sched_getparam", "write", "setpriority", "mq_notify", "sendfile", "preadv64", "pwritev64", "ioctl", "setitimer", "sendfile64"], "getresgid": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "sethostname": ["setns"], "timer_delete": ["clone", "clock_gettime", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "clock_settime", "clock_getres", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "timer_settime", "mq_timedreceive", "timer_gettime", "capget", "clock_nanosleep", "sigaction", "getsid", "sched_setaffinity", "clock_adjtime", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "timer_create", "perf_event_open", "ioprio_get", "vfork", "timer_getoverrun", "ptrace"], "pwritev2": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "fchmod": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "pivot_root", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "fsync", "bpf", "unshare", "recvfrom", "old_readdir", "sendto", "shutdown", "epoll_create1", "tee", "connect", "getsockname", "flock", "pwritev", "eventfd2", "lookup_dcookie", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "fcntl", "sync_file_range", "inotify_add_watch", "fstatfs64", "getcwd", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "quotactl", "pwritev64v2", "splice", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "epoll_wait", "utimensat", "ftruncate", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "setgid": ["setuid", "sched_rr_get_interval", "rt_sigaction", "epoll_create1", "rt_sigtimedwait", "setfsuid", "msgrcv", "getresuid", "getpgid", "kill", "getrusage", "getresuid16", "prctl", "move_pages", "clone", "getgroups", "getresgid", "rt_sigprocmask", "getpriority", "sched_getaffinity", "sched_setparam", "setsid", "vfork", "ptrace", "sigaltstack", "sched_setattr", "setpriority", "setns", "ioprio_set", "capset", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "getresgid16", "keyctl", "setresgid", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_getparam", "sched_setaffinity", "getgroups16", "setfsgid", "unshare", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setresuid", "setitimer", "perf_event_open", "ioprio_get", "faccessat", "setregid"], "pivot_root": ["epoll_ctl", "shmdt", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "mq_unlink", "symlinkat", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "accept4", "rmdir", "linkat", "renameat2", "socketpair", "remap_file_pages", "dup3", "openat", "getcwd", "mq_open", "memfd_create", "dup", "shmctl", "unlink", "swapon", "unlinkat", "mknodat", "shmat", "socket", "open_by_handle_at", "unshare", "pipe2", "umount", "eventfd2", "perf_event_open", "ftruncate", "mkdirat"], "getuid16": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "epoll_wait": ["lseek", "syncfs", "flistxattr", "rt_sigtimedwait", "shmctl", "msgrcv", "kill", "swapoff", "readahead", "preadv", "getdents", "sched_getaffinity", "writev", "preadv64", "pwritev2", "fchmod", "signalfd4", "memfd_create", "ioprio_set", "remap_file_pages", "dup3", "read", "getppid", "fchown", "sched_setattr", "mq_timedreceive", "capget", "utime", "sched_setaffinity", "fsync", "bpf", "signal", "semtimedop", "umount", "recvfrom", "old_readdir", "sendto", "fsetxattr", "epoll_create1", "tee", "sync_file_range", "connect", "getsockname", "flock", "pwritev", "eventfd2", "uselib", "rt_sigprocmask", "accept4", "fremovexattr", "setsid", "sigaltstack", "ioperm", "inotify_rm_watch", "socketpair", "fcntl", "migrate_pages", "getitimer", "setpgid", "keyctl", "inotify_add_watch", "preadv2", "fchdir", "ioprio_get", "getpeername", "sigaction", "getsid", "shmat", "setsockopt", "socket", "pipe2", "prlimit64", "pwrite64", "perf_event_open", "clone", "epoll_ctl", "pwritev64v2", "splice", "rt_sigaction", "getpgid", "sched_rr_get_interval", "acct", "open", "getsockopt", "sched_setparam", "shmdt", "mq_getsetattr", "dup", "fdatasync", "setns", "listen", "fork", "shutdown", "get_robust_list", "futimesat", "mq_timedsend", "sched_getscheduler", "fgetxattr", "ptrace", "vmsplice", "fcntl64", "swapon", "fallocate", "getpriority", "sched_getattr", "getrusage", "sched_setscheduler", "utimensat", "bind", "ftruncate", "vfork", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "prctl", "move_pages", "copy_file_range", "fstatfs", "sched_getparam", "fstatfs64", "write", "setpriority", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "setitimer", "sendfile64"], "ioprio_set": ["rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "clone", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "capset": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "delete_module": ["init_module", "finit_module"], "remap_file_pages": ["get_mempolicy", "munlockall", "madvise", "mprotect", "shmdt", "mremap", "munlock", "brk", "prctl", "mlockall", "mincore", "pkey_mprotect"], "dup3": ["unshare", "select", "dup2"], "readlinkat": ["epoll_ctl", "shmdt", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "accept4", "dup", "pivot_root", "memfd_create", "socketpair", "remap_file_pages", "dup3", "openat", "getcwd", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "unshare", "pipe2", "eventfd2", "perf_event_open"], "read": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "pread64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "mq_timedsend", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "llseek", "connect"], "getppid": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "fchown": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "pivot_root", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "utime", "fsync", "bpf", "unshare", "recvfrom", "old_readdir", "sendto", "shutdown", "epoll_create1", "tee", "connect", "getsockname", "flock", "pwritev", "eventfd2", "lookup_dcookie", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "fcntl", "sync_file_range", "inotify_add_watch", "fstatfs64", "getcwd", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "quotactl", "pwritev64v2", "splice", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "epoll_wait", "utimensat", "ftruncate", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "stat": ["fstat", "newfstat", "lstat"], "ioperm": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "mq_timedreceive": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "msgrcv", "swapoff", "acct", "flock", "open", "uselib", "accept4", "mq_getsetattr", "dup", "memfd_create", "socketpair", "mq_notify", "remap_file_pages", "dup3", "mq_timedsend", "openat", "mq_open", "shmctl", "msgsnd", "swapon", "shmat", "socket", "open_by_handle_at", "setns", "pipe2", "eventfd2", "perf_event_open"], "utime": ["linkat", "io_getevents", "rt_sigtimedwait", "futimesat", "mq_timedreceive", "mq_unlink", "fchownat", "sched_rr_get_interval", "swapoff", "poll", "select", "recvmmsg", "clock_nanosleep", "newfstat", "pselect6", "uselib", "nanosleep", "mq_getsetattr", "faccessat", "fchmod", "memfd_create", "fstat", "settimeofday", "mq_notify", "sendfile", "fchmodat", "inotify_add_watch", "mq_timedsend", "fchown", "ioctl", "timer_settime", "stime", "timer_gettime", "unlink", "swapon", "unlinkat", "readlinkat", "epoll_wait", "timerfd_gettime", "semtimedop", "futex", "timerfd_settime", "sendfile64", "ftruncate", "ppoll"], "sched_setaffinity": ["setuid", "sched_rr_get_interval", "rt_sigaction", "epoll_create1", "rt_sigtimedwait", "setfsuid", "msgrcv", "getresuid", "getpgid", "kill", "getrusage", "getresuid16", "prctl", "move_pages", "clone", "getgroups", "getresgid", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "vfork", "setgid", "sigaltstack", "sched_setattr", "ptrace", "setpriority", "setns", "ioprio_set", "capset", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "getresgid16", "keyctl", "setresgid", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_getparam", "getpriority", "getgroups16", "setfsgid", "unshare", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setresuid", "setitimer", "perf_event_open", "ioprio_get", "faccessat", "setregid"], "ustat": ["syncfs", "quotactl", "swapon", "umount"], "setfsgid": ["setuid", "sched_rr_get_interval", "rt_sigaction", "epoll_create1", "rt_sigtimedwait", "setfsuid", "msgrcv", "getresuid", "getpgid", "kill", "getrusage", "getresuid16", "prctl", "move_pages", "clone", "getgroups", "getresgid", "rt_sigprocmask", "getpriority", "sched_getaffinity", "sched_setparam", "setsid", "vfork", "setgid", "sigaltstack", "sched_setattr", "ptrace", "setpriority", "setns", "ioprio_set", "capset", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "getresgid16", "keyctl", "setresgid", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_getparam", "sched_setaffinity", "getgroups16", "unshare", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setresuid", "setitimer", "perf_event_open", "ioprio_get", "faccessat", "setregid"], "bpf": ["clone", "epoll_ctl", "shmdt", "rt_sigaction", "epoll_create1", "rt_sigtimedwait", "mmap_pgoff", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "swapoff", "prctl", "acct", "flock", "open", "getitimer", "sched_getparam", "getpriority", "uselib", "swapon", "rt_sigprocmask", "accept4", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "memfd_create", "ioprio_set", "dup", "fork", "migrate_pages", "get_robust_list", "remap_file_pages", "dup3", "setpgid", "mq_timedsend", "openat", "keyctl", "getppid", "sched_getscheduler", "mq_open", "sched_setattr", "mq_timedreceive", "shmctl", "move_pages", "capget", "sigaction", "getsid", "shmat", "sched_setaffinity", "socket", "open_by_handle_at", "setns", "signal", "pipe2", "sched_getattr", "semtimedop", "umount", "socketpair", "eventfd2", "sched_setscheduler", "prlimit64", "setitimer", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "newstat": ["newlstat", "fstat", "newfstat", "newfstatat"], "setreuid": ["setuid", "sched_rr_get_interval", "rt_sigaction", "epoll_create1", "rt_sigtimedwait", "setfsuid", "msgrcv", "getresuid", "getpgid", "kill", "getrusage", "getresuid16", "prctl", "move_pages", "clone", "getgroups", "getresgid", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "vfork", "setgid", "sigaltstack", "sched_setattr", "ptrace", "setpriority", "setns", "ioprio_set", "capset", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "getresgid16", "keyctl", "setresgid", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_getparam", "sched_setaffinity", "getgroups16", "setfsgid", "unshare", "signal", "getpriority", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setresuid", "setitimer", "perf_event_open", "ioprio_get", "faccessat", "setregid"], "semtimedop": ["syncfs", "rt_sigtimedwait", "shmctl", "msgrcv", "mq_unlink", "kill", "io_getevents", "swapoff", "readahead", "timer_delete", "sched_getaffinity", "sched_setparam", "fchmod", "setgid", "pivot_root", "memfd_create", "ioprio_set", "setgroups16", "delete_module", "remap_file_pages", "dup3", "readlinkat", "getppid", "fchown", "mq_timedreceive", "capget", "utime", "sched_setaffinity", "ustat", "bpf", "unshare", "signal", "setreuid", "umount", "socketpair", "eventfd2", "getpgid", "timer_create", "inotify_init1", "mkdirat", "linkat", "epoll_create1", "sched_getattr", "tee", "semctl", "fchownat", "sync_file_range", "flock", "lookup_dcookie", "pselect6", "uselib", "rt_sigprocmask", "accept4", "msgctl", "reboot", "setsid", "timerfd_create", "set_trip_temp", "sigaltstack", "sched_setattr", "inotify_rm_watch", "renameat2", "keyctl", "settimeofday", "migrate_pages", "getitimer", "fchmodat", "inotify_add_watch", "init_module", "setresgid", "getcwd", "timer_settime", "stime", "splice", "ioprio_get", "timer_gettime", "msgsnd", "sigaction", "getsid", "mknodat", "shmat", "futimesat", "munlockall", "socket", "pipe2", "prlimit64", "perf_event_open", "setregid", "epoll_ctl", "kexec_load", "quotactl", "rt_sigaction", "request_key", "symlinkat", "brk", "sched_rr_get_interval", "acct", "poll", "open", "select", "clock_nanosleep", "exit_group", "getpriority", "nanosleep", "shmdt", "mq_getsetattr", "faccessat", "rmdir", "dup", "setns", "fork", "get_mempolicy", "io_submit", "get_robust_list", "mq_timedsend", "sched_yield", "sched_getscheduler", "ptrace", "vmsplice", "swapon", "pkey_mprotect", "madvise", "epoll_wait", "timerfd_gettime", "getrusage", "fstat", "timerfd_settime", "sched_setscheduler", "setresuid", "ftruncate", "vfork", "setuid", "setpgid", "io_setup", "mprotect", "mmap_pgoff", "mremap", "io_destroy", "mbind", "prctl", "move_pages", "modify_ldt", "getgroups", "ppoll", "dup2", "get_curr_temp", "munlock", "setpriority", "mincore", "mq_notify", "sendfile", "get_trip_temp", "timer_getoverrun", "newfstat", "openat", "clone", "mq_open", "ioctl", "setgroups", "unlink", "unlinkat", "sched_getparam", "getgroups16", "io_cancel", "open_by_handle_at", "setitimer", "futex", "recvmmsg", "finit_module", "sendfile64", "mlockall"], "umount": ["setuid", "epoll_ctl", "syncfs", "pipe2", "quotactl", "rt_sigaction", "epoll_create1", "rt_sigtimedwait", "mmap_pgoff", "msgrcv", "setns", "mq_unlink", "getpgid", "kill", "sched_rr_get_interval", "swapoff", "prctl", "acct", "flock", "clone", "open", "getitimer", "lookup_dcookie", "sched_getparam", "getpriority", "uselib", "swapon", "rt_sigprocmask", "accept4", "sched_getaffinity", "sched_setparam", "setsid", "shmdt", "sigaltstack", "sched_setattr", "pivot_root", "setpriority", "memfd_create", "ioprio_set", "setresuid", "fork", "migrate_pages", "getcwd", "remap_file_pages", "dup3", "setpgid", "mq_timedsend", "openat", "keyctl", "getppid", "sched_getscheduler", "mq_open", "dup", "mq_timedreceive", "shmctl", "move_pages", "capget", "sigaction", "getsid", "shmat", "sched_setaffinity", "ustat", "socket", "open_by_handle_at", "unshare", "signal", "setreuid", "sched_getattr", "semtimedop", "getrusage", "socketpair", "eventfd2", "sched_setscheduler", "prlimit64", "get_robust_list", "setitimer", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "recvfrom": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "swapoff", "acct", "flock", "open", "uselib", "accept4", "mq_getsetattr", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "old_readdir": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "pread64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "sendfile64", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "connect"], "setrlimit": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "getrlimit", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "old_getrlimit", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "timer_create": ["clock_gettime", "clock_adjtime", "timer_getoverrun", "timer_delete", "timer_settime", "timer_gettime", "clock_nanosleep", "clock_settime", "clock_getres"], "sendto": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "swapoff", "acct", "flock", "open", "uselib", "accept4", "mq_getsetattr", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "mkdirat": ["syncfs", "quotactl", "swapon", "ustat", "umount"], "lgetxattr": ["epoll_ctl", "shmdt", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "accept4", "dup", "pivot_root", "memfd_create", "socketpair", "remap_file_pages", "dup3", "openat", "getcwd", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "unshare", "pipe2", "eventfd2", "perf_event_open"], "linkat": ["epoll_ctl", "shmdt", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "accept4", "dup", "pivot_root", "memfd_create", "socketpair", "remap_file_pages", "dup3", "openat", "getcwd", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "unshare", "pipe2", "eventfd2", "perf_event_open"], "getresuid16": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "newuname": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "personality", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "epoll_create1": ["setuid", "epoll_ctl", "sched_rr_get_interval", "rt_sigaction", "rt_sigtimedwait", "setfsuid", "msgrcv", "getresuid", "getpgid", "kill", "getrusage", "getresuid16", "prctl", "move_pages", "clone", "getgroups", "getresgid", "rt_sigprocmask", "getpriority", "sched_getaffinity", "sched_setparam", "setsid", "vfork", "setgid", "sigaltstack", "sched_setattr", "ptrace", "setpriority", "setns", "ioprio_set", "capset", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "getresgid16", "keyctl", "setresgid", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_getparam", "sched_setaffinity", "getgroups16", "setfsgid", "unshare", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "epoll_wait", "sched_setscheduler", "prlimit64", "setresuid", "setitimer", "perf_event_open", "ioprio_get", "faccessat", "setregid"], "olduname": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "personality", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "sched_setattr", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "tee": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "fsync", "bpf", "recvfrom", "old_readdir", "sendto", "shutdown", "epoll_create1", "connect", "getsockname", "flock", "pwritev", "eventfd2", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "fcntl", "sync_file_range", "inotify_add_watch", "fstatfs64", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "pwritev64v2", "splice", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "epoll_wait", "utimensat", "ftruncate", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "semctl": ["semtimedop"], "syslog": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "sched_setattr", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "rt_sigqueueinfo": ["tgkill", "rt_sigtimedwait", "rt_sigreturn", "rt_tgsigqueueinfo", "tkill", "kill", "timer_create"], "sync_file_range": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "pread64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "connect"], "llseek": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "pread64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "connect"], "getgid": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "lsetxattr": ["epoll_ctl", "shmdt", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "accept4", "dup", "pivot_root", "memfd_create", "socketpair", "remap_file_pages", "dup3", "openat", "getcwd", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "unshare", "pipe2", "eventfd2", "perf_event_open"], "pwritev": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "llistxattr": ["epoll_ctl", "shmdt", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "accept4", "dup", "pivot_root", "memfd_create", "socketpair", "remap_file_pages", "dup3", "openat", "getcwd", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "unshare", "pipe2", "eventfd2", "perf_event_open"], "tgkill": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "pselect6": ["rt_sigtimedwait", "msgrcv", "mq_unlink", "kill", "io_getevents", "swapoff", "sched_getaffinity", "sched_setparam", "fchmod", "memfd_create", "fstat", "readlinkat", "getppid", "fchown", "sched_setattr", "mq_timedreceive", "capget", "utime", "sched_setaffinity", "signal", "semtimedop", "umount", "linkat", "timerfd_gettime", "fchownat", "uselib", "rt_sigprocmask", "inotify_add_watch", "setsid", "sigaltstack", "ioperm", "settimeofday", "migrate_pages", "getitimer", "fchmodat", "setpgid", "keyctl", "timer_settime", "stime", "ftruncate", "timer_gettime", "sigaction", "getsid", "futimesat", "prlimit64", "perf_event_open", "rt_sigaction", "getpgid", "sched_rr_get_interval", "poll", "select", "unlink", "getpriority", "nanosleep", "mq_getsetattr", "faccessat", "setns", "fork", "move_pages", "mq_timedsend", "sched_getscheduler", "ptrace", "swapon", "epoll_wait", "sched_getattr", "getrusage", "ioprio_set", "timerfd_settime", "sched_setscheduler", "ioprio_get", "vfork", "prctl", "get_robust_list", "sched_getparam", "ppoll", "setpriority", "mq_notify", "sendfile", "newfstat", "clone", "ioctl", "clock_nanosleep", "unlinkat", "setitimer", "futex", "recvmmsg", "sendfile64"], "uselib": ["syncfs", "quotactl", "getcwd", "ustat", "umount", "mq_unlink", "mq_open", "acct", "pivot_root", "swapon"], "sysfs": ["swapon", "open", "uselib", "openat", "quotactl", "mq_open", "mq_unlink", "symlinkat", "rmdir", "swapoff", "acct", "unlink", "renameat2", "unlinkat"], "msgctl": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "mq_unlink", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "msgsnd", "shmget", "sched_getparam", "getpriority", "rt_sigprocmask", "setpgid", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "semctl", "fork", "migrate_pages", "get_robust_list", "getitimer", "msgget", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_open", "sched_setattr", "mq_timedreceive", "shmctl", "capget", "sigaction", "getsid", "shmat", "sched_setaffinity", "semget", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "reboot": ["perf_event_open", "acct", "setns"], "fremovexattr": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "pread64", "fsetxattr", "readv", "flock", "copy_file_range", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "writev", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "connect"], "setsid": ["exit_group", "timer_create"], "timerfd_create": ["timerfd_settime", "timerfd_gettime"], "set_trip_temp": ["get_trip_temp", "get_curr_temp"], "sched_setattr": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "inotify_rm_watch": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "fsync", "bpf", "recvfrom", "old_readdir", "sendto", "shutdown", "epoll_create1", "tee", "connect", "getsockname", "flock", "pwritev", "eventfd2", "uselib", "accept4", "fremovexattr", "socketpair", "fcntl", "sync_file_range", "inotify_add_watch", "fstatfs64", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "pwritev64v2", "splice", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fdatasync", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fallocate", "epoll_wait", "utimensat", "ftruncate", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "renameat2": ["epoll_ctl", "accept4", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "mq_unlink", "symlinkat", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "sysfs", "shmdt", "rmdir", "linkat", "pivot_root", "memfd_create", "socketpair", "remap_file_pages", "dup3", "openat", "getcwd", "mq_open", "dup", "shmctl", "unlink", "swapon", "unlinkat", "mknodat", "shmat", "socket", "open_by_handle_at", "unshare", "pipe2", "eventfd2", "perf_event_open", "ftruncate", "mkdirat"], "keyctl": ["setuid", "sched_rr_get_interval", "rt_sigaction", "epoll_create1", "rt_sigtimedwait", "setfsuid", "msgrcv", "request_key", "getresuid", "getpgid", "kill", "getrusage", "getresuid16", "prctl", "move_pages", "getgroups", "getresgid", "rt_sigprocmask", "getpriority", "sched_getaffinity", "sched_setparam", "setsid", "vfork", "setgid", "sigaltstack", "sched_setattr", "ptrace", "setpriority", "setns", "ioprio_set", "capset", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "getresgid16", "clone", "setresgid", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_getparam", "sched_setaffinity", "getgroups16", "setfsgid", "unshare", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setresuid", "setitimer", "perf_event_open", "ioprio_get", "faccessat", "setregid"], "settimeofday": ["wait4", "clock_adjtime", "getitimer", "setitimer", "waitid", "adjtimex", "getrusage", "alarm", "select", "ppoll"], "utimensat": ["linkat", "io_getevents", "rt_sigtimedwait", "futimesat", "mq_timedreceive", "mq_unlink", "fchownat", "sched_rr_get_interval", "swapoff", "poll", "select", "recvmmsg", "clock_nanosleep", "newfstat", "pselect6", "uselib", "nanosleep", "mq_getsetattr", "faccessat", "fchmod", "memfd_create", "fstat", "settimeofday", "mq_notify", "sendfile", "fchmodat", "inotify_add_watch", "mq_timedsend", "fchown", "ioctl", "timer_settime", "stime", "timer_gettime", "unlink", "swapon", "unlinkat", "utime", "readlinkat", "epoll_wait", "timerfd_gettime", "semtimedop", "futex", "timerfd_settime", "sendfile64", "ftruncate", "ppoll"], "fcntl": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "fsync", "bpf", "recvfrom", "old_readdir", "sendto", "shutdown", "epoll_create1", "tee", "connect", "getsockname", "flock", "pwritev", "eventfd2", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "sync_file_range", "inotify_add_watch", "fstatfs64", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "pwritev64v2", "splice", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "epoll_wait", "utimensat", "ftruncate", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "migrate_pages": ["setuid", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "clone", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "fork", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "sched_setattr", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setresuid", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "getitimer": ["setitimer", "exit_group", "timer_create"], "fchmodat": ["epoll_ctl", "shmdt", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "accept4", "dup", "pivot_root", "memfd_create", "socketpair", "remap_file_pages", "dup3", "openat", "getcwd", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "unshare", "pipe2", "eventfd2", "perf_event_open"], "lstat": ["stat", "fstat", "newfstat"], "init_module": ["delete_module", "finit_module"], "setresgid": ["setuid", "sched_rr_get_interval", "rt_sigaction", "epoll_create1", "rt_sigtimedwait", "setfsuid", "msgrcv", "getresuid", "getpgid", "kill", "getrusage", "getresuid16", "prctl", "move_pages", "clone", "getgroups", "getresgid", "rt_sigprocmask", "getpriority", "sched_getaffinity", "sched_setparam", "setsid", "vfork", "setgid", "sigaltstack", "sched_setattr", "ptrace", "setpriority", "setns", "ioprio_set", "capset", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "getresgid16", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_getparam", "sched_setaffinity", "getgroups16", "setfsgid", "unshare", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setresuid", "setitimer", "perf_event_open", "ioprio_get", "faccessat", "setregid"], "getcwd": ["epoll_ctl", "shmdt", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "mq_unlink", "symlinkat", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "accept4", "rmdir", "linkat", "pivot_root", "renameat2", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "memfd_create", "dup", "shmctl", "unlink", "swapon", "unlinkat", "mknodat", "shmat", "socket", "open_by_handle_at", "unshare", "pipe2", "umount", "eventfd2", "perf_event_open", "ftruncate", "mkdirat"], "inotify_add_watch": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "mq_unlink", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "pivot_root", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "fsync", "bpf", "recvfrom", "old_readdir", "sendto", "mkdirat", "linkat", "shutdown", "epoll_create1", "tee", "connect", "getsockname", "flock", "pwritev", "eventfd2", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "renameat2", "socketpair", "fcntl", "sync_file_range", "fstatfs64", "getcwd", "preadv2", "fchdir", "getpeername", "mknodat", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "pwritev64v2", "splice", "symlinkat", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "rmdir", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "epoll_wait", "utimensat", "ftruncate", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "unlink", "unlinkat", "open_by_handle_at", "bind", "sendfile64"], "preadv2": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "timer_settime": ["clock_gettime", "clock_adjtime", "timer_delete", "timer_create", "timer_gettime", "clock_nanosleep", "clock_settime", "clock_getres"], "setregid": ["setuid", "sched_rr_get_interval", "rt_sigaction", "epoll_create1", "rt_sigtimedwait", "setfsuid", "msgrcv", "getresuid", "getpgid", "kill", "getrusage", "getresuid16", "prctl", "move_pages", "clone", "getgroups", "getresgid", "rt_sigprocmask", "getpriority", "sched_getaffinity", "sched_setparam", "setsid", "vfork", "setgid", "sigaltstack", "sched_setattr", "setpriority", "setns", "ioprio_set", "capset", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "getresgid16", "keyctl", "setresgid", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_getparam", "sched_setaffinity", "getgroups16", "setfsgid", "unshare", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setresuid", "setitimer", "perf_event_open", "ioprio_get", "faccessat", "ptrace"], "fchdir": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "pivot_root", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "fsync", "bpf", "unshare", "recvfrom", "old_readdir", "sendto", "shutdown", "epoll_create1", "tee", "connect", "getsockname", "flock", "pwritev", "eventfd2", "lookup_dcookie", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "fcntl", "sync_file_range", "inotify_add_watch", "fstatfs64", "getcwd", "preadv2", "splice", "getpeername", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "quotactl", "pwritev64v2", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "epoll_wait", "utimensat", "ftruncate", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "ftruncate": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "mq_timedreceive", "mq_unlink", "fchownat", "swapoff", "acct", "flock", "open", "fchmodat", "uselib", "accept4", "mq_getsetattr", "faccessat", "fchmod", "linkat", "memfd_create", "socketpair", "mq_notify", "sendfile", "remap_file_pages", "dup3", "inotify_add_watch", "mq_timedsend", "openat", "mq_open", "fchown", "dup", "ioctl", "shmctl", "unlink", "swapon", "unlinkat", "shmat", "readlinkat", "socket", "open_by_handle_at", "setns", "pipe2", "eventfd2", "sendfile64", "perf_event_open"], "timer_gettime": ["clock_gettime", "clock_adjtime", "timer_delete", "timer_settime", "timer_create", "clock_nanosleep", "clock_settime", "clock_getres"], "msgsnd": ["shmat", "shmget", "msgget", "semget", "msgctl", "semtimedop", "semctl", "mq_unlink", "msgrcv", "shmctl", "mq_open", "setns"], "sysinfo": ["rt_sigtimedwait", "msgrcv", "mq_unlink", "kill", "io_getevents", "swapoff", "sched_getaffinity", "sched_setparam", "fchmod", "memfd_create", "fstat", "readlinkat", "getppid", "fchown", "sched_setattr", "mq_timedreceive", "capget", "utime", "sched_setaffinity", "signal", "semtimedop", "umount", "linkat", "timerfd_gettime", "fchownat", "pselect6", "uselib", "rt_sigprocmask", "inotify_add_watch", "setsid", "sigaltstack", "ioperm", "settimeofday", "migrate_pages", "getitimer", "fchmodat", "setpgid", "keyctl", "timer_settime", "stime", "ftruncate", "timer_gettime", "sigaction", "getsid", "futimesat", "prlimit64", "perf_event_open", "rt_sigaction", "getpgid", "sched_rr_get_interval", "poll", "select", "unlink", "getpriority", "nanosleep", "mq_getsetattr", "faccessat", "setns", "fork", "move_pages", "mq_timedsend", "sched_getscheduler", "ptrace", "swapon", "epoll_wait", "sched_getattr", "getrusage", "ioprio_set", "timerfd_settime", "sched_setscheduler", "ioprio_get", "vfork", "prctl", "get_robust_list", "sched_getparam", "ppoll", "setpriority", "mq_notify", "sendfile", "newfstat", "clone", "ioctl", "clock_nanosleep", "unlinkat", "setitimer", "futex", "recvmmsg", "sendfile64"], "geteuid16": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "setpgid": ["setuid", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "clone", "sched_getparam", "exit_group", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setresuid", "timer_create", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "mknodat": ["syncfs", "quotactl", "swapon", "ustat", "umount"], "shmat": ["clone", "epoll_ctl", "shmdt", "quotactl", "rt_sigaction", "epoll_create1", "rt_sigtimedwait", "mmap_pgoff", "msgrcv", "setns", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "swapoff", "prctl", "acct", "flock", "open", "getitimer", "lookup_dcookie", "sched_getparam", "getpriority", "uselib", "swapon", "rt_sigprocmask", "accept4", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "pivot_root", "memfd_create", "ioprio_set", "fork", "migrate_pages", "getcwd", "remap_file_pages", "dup3", "setpgid", "mq_timedsend", "openat", "keyctl", "getppid", "sched_getscheduler", "mq_open", "dup", "mq_timedreceive", "shmctl", "move_pages", "capget", "sigaction", "getsid", "sched_setaffinity", "get_robust_list", "socket", "open_by_handle_at", "unshare", "signal", "pipe2", "sched_getattr", "semtimedop", "umount", "socketpair", "eventfd2", "sched_setscheduler", "prlimit64", "setitimer", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "setsockopt": ["accept4"], "old_getrlimit": ["prlimit64", "setrlimit"], "msync": ["get_mempolicy", "munlockall", "remap_file_pages", "madvise", "mprotect", "shmdt", "mremap", "munlock", "brk", "prctl", "mlockall", "mincore", "pkey_mprotect"], "getegid16": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "ioctl": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "pread64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "fgetxattr", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "connect"], "prlimit64": ["setuid", "sched_rr_get_interval", "rt_sigaction", "epoll_create1", "rt_sigtimedwait", "setfsuid", "msgrcv", "getresuid", "getpgid", "kill", "getrusage", "getresuid16", "prctl", "move_pages", "clone", "getgroups", "getresgid", "rt_sigprocmask", "getpriority", "sched_getaffinity", "sched_setparam", "setsid", "vfork", "setgid", "sigaltstack", "sched_setattr", "ptrace", "setpriority", "setns", "ioprio_set", "capset", "setresuid", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "getresgid16", "keyctl", "setresgid", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_getparam", "sched_setaffinity", "getgroups16", "setfsgid", "old_getrlimit", "unshare", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "setrlimit", "setitimer", "perf_event_open", "ioprio_get", "faccessat", "setregid"], "set_mempolicy": ["get_mempolicy", "mbind"], "pwrite64": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "fsync", "bpf", "recvfrom", "old_readdir", "sendto", "shutdown", "epoll_create1", "tee", "connect", "getsockname", "flock", "pwritev", "eventfd2", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "fcntl", "sync_file_range", "inotify_add_watch", "fstatfs64", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "perf_event_open", "epoll_ctl", "pwritev64v2", "splice", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "epoll_wait", "utimensat", "ftruncate", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "perf_event_open": ["lseek", "syncfs", "flistxattr", "rt_sigtimedwait", "shmctl", "msgrcv", "mq_unlink", "kill", "io_getevents", "swapoff", "readahead", "preadv", "getdents", "timer_delete", "sched_getaffinity", "writev", "preadv64", "sched_setparam", "fchmod", "setgid", "pivot_root", "signalfd4", "memfd_create", "ioprio_set", "setgroups16", "delete_module", "remap_file_pages", "dup3", "readlinkat", "read", "getppid", "fchown", "sched_setattr", "mq_timedreceive", "capget", "utime", "sched_setaffinity", "ustat", "fsync", "bpf", "unshare", "signal", "setreuid", "semtimedop", "umount", "socketpair", "recvfrom", "getpgid", "old_readdir", "timer_create", "sendto", "mbind", "mkdirat", "linkat", "sched_rr_get_interval", "epoll_create1", "sched_getattr", "tee", "semctl", "fchownat", "sync_file_range", "connect", "getsockname", "flock", "pwritev", "eventfd2", "lookup_dcookie", "uselib", "rt_sigprocmask", "accept4", "msgctl", "reboot", "fremovexattr", "setsid", "timerfd_create", "set_trip_temp", "sigaltstack", "ioperm", "inotify_rm_watch", "renameat2", "keyctl", "setresuid", "fcntl", "migrate_pages", "getitimer", "fchmodat", "setpgid", "init_module", "setresgid", "getcwd", "inotify_add_watch", "preadv2", "timer_settime", "setregid", "fchdir", "ioprio_get", "timer_gettime", "getpeername", "sigaction", "getsid", "mknodat", "shmat", "setsockopt", "munlockall", "socket", "pipe2", "prlimit64", "pwrite64", "clone", "epoll_ctl", "kexec_load", "quotactl", "pwritev64v2", "splice", "rt_sigaction", "request_key", "symlinkat", "brk", "fsetxattr", "acct", "open", "msgsnd", "getsockopt", "exit_group", "pwritev2", "shmdt", "mq_getsetattr", "faccessat", "rmdir", "dup", "fdatasync", "setns", "mprotect", "listen", "fork", "get_mempolicy", "shutdown", "get_robust_list", "futimesat", "mq_timedsend", "sched_yield", "sched_getscheduler", "fgetxattr", "ptrace", "vmsplice", "fcntl64", "swapon", "fallocate", "pkey_mprotect", "getpriority", "madvise", "epoll_wait", "timerfd_gettime", "getrusage", "timerfd_settime", "sched_setscheduler", "utimensat", "bind", "ftruncate", "vfork", "setuid", "llseek", "io_setup", "getdents64", "mmap_pgoff", "io_submit", "mremap", "io_destroy", "pread64", "preadv64v2", "readv", "prctl", "move_pages", "copy_file_range", "fstatfs", "modify_ldt", "getgroups", "fstatfs64", "dup2", "get_curr_temp", "write", "munlock", "setpriority", "inotify_init1", "mincore", "mq_notify", "sendfile", "get_trip_temp", "timer_getoverrun", "openat", "pwritev64", "mq_open", "ioctl", "setgroups", "unlink", "unlinkat", "sched_getparam", "getgroups16", "io_cancel", "open_by_handle_at", "setitimer", "finit_module", "sendfile64", "mlockall"], "removexattr": ["epoll_ctl", "shmdt", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "accept4", "dup", "pivot_root", "memfd_create", "socketpair", "remap_file_pages", "dup3", "openat", "getcwd", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "unshare", "pipe2", "eventfd2", "perf_event_open"], "sendmsg": ["setsockopt", "sendmmsg", "shutdown", "recvmmsg", "bind", "accept4", "recvfrom", "recvmsg", "connect", "getsockname", "sendto", "getpeername", "listen", "getsockopt"], "epoll_ctl": ["lseek", "syncfs", "rt_sigtimedwait", "shmctl", "msgrcv", "mq_unlink", "kill", "io_getevents", "swapoff", "readahead", "preadv", "getdents", "timer_delete", "sched_getaffinity", "writev", "preadv64", "sched_setparam", "fchmod", "setgid", "pivot_root", "signalfd4", "memfd_create", "ioprio_set", "setgroups16", "delete_module", "remap_file_pages", "dup3", "readlinkat", "read", "getppid", "fchown", "mq_timedreceive", "capget", "utime", "sched_setaffinity", "ustat", "fsync", "bpf", "unshare", "signal", "setreuid", "semtimedop", "umount", "socketpair", "recvfrom", "getpgid", "old_readdir", "timer_create", "sendto", "mbind", "mkdirat", "linkat", "sched_rr_get_interval", "epoll_create1", "sched_getattr", "tee", "semctl", "fchownat", "sync_file_range", "connect", "getsockname", "flock", "pwritev", "eventfd2", "lookup_dcookie", "uselib", "rt_sigprocmask", "accept4", "msgctl", "reboot", "fremovexattr", "setsid", "timerfd_create", "set_trip_temp", "sigaltstack", "sched_setattr", "inotify_rm_watch", "renameat2", "keyctl", "setresuid", "fcntl", "migrate_pages", "getitimer", "fchmodat", "inotify_add_watch", "init_module", "setresgid", "getcwd", "preadv2", "timer_settime", "setregid", "fchdir", "ioprio_get", "timer_gettime", "getpeername", "sigaction", "setpgid", "mknodat", "shmat", "setsockopt", "munlockall", "socket", "pipe2", "prlimit64", "pwrite64", "perf_event_open", "clone", "flistxattr", "kexec_load", "quotactl", "pwritev64v2", "splice", "rt_sigaction", "request_key", "symlinkat", "brk", "fsetxattr", "acct", "open", "msgsnd", "getsockopt", "exit_group", "pwritev2", "shmdt", "mq_getsetattr", "faccessat", "getsid", "dup", "fdatasync", "setns", "mprotect", "rmdir", "fork", "get_mempolicy", "shutdown", "get_robust_list", "futimesat", "mq_timedsend", "sched_yield", "sched_getscheduler", "fgetxattr", "ptrace", "vmsplice", "fcntl64", "swapon", "fallocate", "pkey_mprotect", "getpriority", "madvise", "epoll_wait", "timerfd_gettime", "getrusage", "timerfd_settime", "sched_setscheduler", "utimensat", "bind", "ftruncate", "listen", "vfork", "setuid", "llseek", "io_setup", "getdents64", "mmap_pgoff", "io_submit", "mremap", "io_destroy", "pread64", "preadv64v2", "readv", "prctl", "move_pages", "copy_file_range", "fstatfs", "modify_ldt", "getgroups", "fstatfs64", "dup2", "get_curr_temp", "write", "munlock", "setpriority", "inotify_init1", "mincore", "mq_notify", "sendfile", "get_trip_temp", "timer_getoverrun", "openat", "pwritev64", "mq_open", "ioctl", "setgroups", "unlink", "unlinkat", "sched_getparam", "getgroups16", "io_cancel", "open_by_handle_at", "setitimer", "finit_module", "sendfile64", "mlockall"], "rt_tgsigqueueinfo": ["tgkill", "rt_sigtimedwait", "rt_sigreturn", "tkill", "rt_sigqueueinfo", "kill", "timer_create"], "pwritev64v2": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "splice": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "fsync", "bpf", "recvfrom", "old_readdir", "sendto", "shutdown", "epoll_create1", "tee", "connect", "getsockname", "flock", "pwritev", "eventfd2", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "fcntl", "sync_file_range", "inotify_add_watch", "fstatfs64", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "pwritev64v2", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "epoll_wait", "utimensat", "ftruncate", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "setxattr": ["epoll_ctl", "shmdt", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "accept4", "dup", "pivot_root", "memfd_create", "socketpair", "remap_file_pages", "dup3", "openat", "getcwd", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "unshare", "pipe2", "eventfd2", "perf_event_open"], "symlinkat": ["quotactl", "swapon", "open", "uselib", "openat", "sysfs", "mq_open", "mq_unlink", "rmdir", "swapoff", "acct", "unlink", "renameat2", "unlinkat"], "brk": ["io_setup", "mprotect", "mremap", "io_destroy", "mbind", "io_getevents", "swapoff", "prctl", "modify_ldt", "shmdt", "munlock", "mincore", "get_mempolicy", "migrate_pages", "move_pages", "remap_file_pages", "io_cancel", "pkey_mprotect", "munlockall", "madvise", "getrusage", "mlockall"], "fsetxattr": ["lseek", "syncfs", "pwritev64v2", "splice", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "pread64", "getsockname", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "mq_timedsend", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "llseek", "connect"], "acct": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "swapoff", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "poll": ["ppoll"], "clock_settime": ["clock_gettime", "clock_adjtime", "timer_delete", "timer_settime", "timer_create", "timer_gettime", "clock_nanosleep", "clock_getres"], "select": ["rt_sigtimedwait", "msgrcv", "mq_unlink", "kill", "io_getevents", "swapoff", "sched_getaffinity", "sched_setparam", "fchmod", "memfd_create", "fstat", "personality", "dup3", "readlinkat", "getppid", "fchown", "mq_timedreceive", "capget", "utime", "sched_setaffinity", "unshare", "signal", "semtimedop", "umount", "linkat", "timerfd_gettime", "fchownat", "pselect6", "uselib", "rt_sigprocmask", "inotify_add_watch", "setsid", "sigaltstack", "sched_setattr", "settimeofday", "migrate_pages", "getitimer", "fchmodat", "setpgid", "keyctl", "timer_settime", "stime", "ftruncate", "timer_gettime", "sigaction", "getsid", "futimesat", "prlimit64", "perf_event_open", "rt_sigaction", "getpgid", "sched_rr_get_interval", "poll", "unlink", "getpriority", "nanosleep", "mq_getsetattr", "faccessat", "setns", "fork", "move_pages", "mq_timedsend", "sched_getscheduler", "ptrace", "swapon", "epoll_wait", "sched_getattr", "getrusage", "ioprio_set", "timerfd_settime", "sched_setscheduler", "ioprio_get", "vfork", "prctl", "get_robust_list", "sched_getparam", "ppoll", "dup2", "setpriority", "mq_notify", "sendfile", "newfstat", "clone", "ioctl", "clock_nanosleep", "unlinkat", "setitimer", "futex", "recvmmsg", "sendfile64"], "unlink": ["epoll_ctl", "shmdt", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "mq_unlink", "symlinkat", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "accept4", "rmdir", "linkat", "pivot_root", "renameat2", "socketpair", "remap_file_pages", "dup3", "openat", "getcwd", "mq_open", "memfd_create", "dup", "shmctl", "swapon", "unlinkat", "mknodat", "shmat", "socket", "open_by_handle_at", "unshare", "pipe2", "eventfd2", "perf_event_open", "ftruncate", "mkdirat"], "getsockopt": ["accept4"], "getpriority": ["setuid", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "clone", "sched_getparam", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setresuid", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "listxattr": ["epoll_ctl", "shmdt", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "accept4", "dup", "pivot_root", "memfd_create", "socketpair", "remap_file_pages", "dup3", "openat", "getcwd", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "unshare", "pipe2", "eventfd2", "perf_event_open"], "sigaction": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "sched_setattr", "mq_timedreceive", "capget", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "nanosleep": ["linkat", "io_getevents", "rt_sigtimedwait", "futimesat", "mq_timedreceive", "mq_unlink", "fchownat", "sched_rr_get_interval", "swapoff", "poll", "select", "recvmmsg", "clock_nanosleep", "newfstat", "pselect6", "uselib", "ppoll", "mq_getsetattr", "faccessat", "fchmod", "memfd_create", "fstat", "settimeofday", "mq_notify", "sendfile", "fchmodat", "inotify_add_watch", "mq_timedsend", "fchown", "ioctl", "timer_settime", "stime", "timer_gettime", "unlink", "swapon", "unlinkat", "utime", "readlinkat", "epoll_wait", "timerfd_gettime", "semtimedop", "futex", "timerfd_settime", "sendfile64", "ftruncate"], "quotactl": ["syncfs", "swapon", "open", "uselib", "openat", "sysfs", "ustat", "umount", "mq_unlink", "symlinkat", "rmdir", "swapoff", "mq_open", "acct", "unlink", "renameat2", "unlinkat"], "mq_getsetattr": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "mq_timedreceive", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "mq_notify", "remap_file_pages", "dup3", "mq_timedsend", "openat", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "faccessat": ["setuid", "epoll_ctl", "pipe2", "quotactl", "rt_sigaction", "epoll_create1", "rt_sigtimedwait", "mmap_pgoff", "msgrcv", "setns", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "swapoff", "prctl", "acct", "flock", "clone", "open", "getitimer", "lookup_dcookie", "sched_getparam", "getpriority", "uselib", "swapon", "rt_sigprocmask", "accept4", "sched_getaffinity", "sched_setparam", "setsid", "shmdt", "sigaltstack", "sched_setattr", "pivot_root", "setpriority", "memfd_create", "ioprio_set", "fork", "migrate_pages", "getcwd", "remap_file_pages", "dup3", "setpgid", "mq_timedsend", "openat", "keyctl", "getppid", "sched_getscheduler", "mq_open", "dup", "mq_timedreceive", "shmctl", "move_pages", "capget", "sigaction", "getsid", "shmat", "sched_setaffinity", "get_robust_list", "socket", "open_by_handle_at", "unshare", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "socketpair", "eventfd2", "sched_setscheduler", "prlimit64", "setresuid", "setitimer", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "rmdir": ["epoll_ctl", "shmdt", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "mq_unlink", "symlinkat", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "accept4", "linkat", "pivot_root", "renameat2", "socketpair", "remap_file_pages", "dup3", "openat", "getcwd", "mq_open", "memfd_create", "dup", "shmctl", "unlink", "swapon", "unlinkat", "mknodat", "shmat", "socket", "open_by_handle_at", "unshare", "pipe2", "eventfd2", "perf_event_open", "ftruncate", "mkdirat"], "fallocate": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "pread64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "connect"], "setgroups16": ["setgroups"], "getdents64": ["lseek", "syncfs", "flistxattr", "rt_sigtimedwait", "msgrcv", "kill", "readahead", "preadv", "getdents", "sched_getaffinity", "writev", "pwritev2", "fchmod", "signalfd4", "epoll_wait", "ioprio_set", "read", "getppid", "fchown", "sched_setattr", "mq_timedreceive", "capget", "utime", "sched_setaffinity", "fsync", "bpf", "signal", "semtimedop", "umount", "recvfrom", "old_readdir", "sendto", "fsetxattr", "tee", "sync_file_range", "connect", "getsockname", "flock", "pwritev", "rt_sigprocmask", "accept4", "fremovexattr", "setsid", "sigaltstack", "ioperm", "inotify_rm_watch", "fstatfs64", "fcntl", "migrate_pages", "getitimer", "setpgid", "keyctl", "inotify_add_watch", "preadv2", "fchdir", "ioprio_get", "getpeername", "sigaction", "getsid", "setsockopt", "getpriority", "prlimit64", "pwrite64", "perf_event_open", "clone", "epoll_ctl", "pwritev64v2", "splice", "rt_sigaction", "getpgid", "sched_rr_get_interval", "getsockopt", "sched_setparam", "mq_getsetattr", "fdatasync", "setns", "listen", "fork", "shutdown", "get_robust_list", "futimesat", "mq_timedsend", "sched_getscheduler", "fgetxattr", "ptrace", "vmsplice", "fcntl64", "fallocate", "sched_getattr", "getrusage", "sched_setscheduler", "utimensat", "bind", "ftruncate", "vfork", "llseek", "pread64", "preadv64v2", "readv", "prctl", "move_pages", "copy_file_range", "fstatfs", "sched_getparam", "write", "setpriority", "mq_notify", "sendfile", "preadv64", "pwritev64", "ioctl", "setitimer", "sendfile64"], "io_cancel": ["get_mempolicy", "io_submit", "migrate_pages", "move_pages", "remap_file_pages", "io_setup", "shmdt", "getrusage", "modify_ldt", "io_destroy", "brk", "mremap", "io_getevents", "swapoff", "prctl", "mincore", "mbind"], "get_mempolicy": ["clone", "rt_sigaction", "rt_sigtimedwait", "mprotect", "msgrcv", "mlockall", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "getitimer", "sched_getparam", "getpriority", "rt_sigprocmask", "shmdt", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "mincore", "fork", "migrate_pages", "get_robust_list", "remap_file_pages", "mremap", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "munlock", "mbind", "mq_timedreceive", "ioprio_get", "capget", "sigaction", "getsid", "pkey_mprotect", "sched_setaffinity", "munlockall", "madvise", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "set_mempolicy", "perf_event_open", "brk", "vfork", "ptrace"], "io_submit": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "sched_setattr", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "inotify_init1": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "inotify_add_watch", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "inotify_rm_watch", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "futimesat": ["linkat", "io_getevents", "rt_sigtimedwait", "adjtimex", "mq_timedreceive", "mq_unlink", "fchownat", "sched_rr_get_interval", "swapoff", "poll", "select", "recvmmsg", "clock_nanosleep", "newfstat", "pselect6", "uselib", "nanosleep", "mq_getsetattr", "faccessat", "fchmod", "memfd_create", "fstat", "settimeofday", "mq_notify", "sendfile", "getitimer", "fchmodat", "inotify_add_watch", "mq_timedsend", "waitid", "fchown", "ioctl", "timer_settime", "stime", "timer_gettime", "unlink", "swapon", "unlinkat", "utime", "wait4", "readlinkat", "clock_adjtime", "epoll_wait", "alarm", "timerfd_gettime", "semtimedop", "getrusage", "futex", "timerfd_settime", "sendfile64", "setitimer", "ftruncate", "ppoll"], "mq_timedsend": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "mq_timedreceive", "swapoff", "acct", "flock", "open", "uselib", "accept4", "mq_getsetattr", "dup", "memfd_create", "socketpair", "mq_notify", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "setns", "pipe2", "eventfd2", "perf_event_open"], "getresgid16": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "sched_getscheduler": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "fgetxattr": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "pread64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "connect"], "ptrace": ["setuid", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "pause", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "sigsuspend", "getppid", "rt_sigsuspend", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "epoll_wait", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setresuid", "setitimer", "perf_event_open", "ioprio_get", "clone", "vfork"], "shmctl": ["clone", "epoll_ctl", "shmdt", "rt_sigaction", "epoll_create1", "rt_sigtimedwait", "mmap_pgoff", "msgrcv", "mq_unlink", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "swapoff", "prctl", "acct", "flock", "open", "msgsnd", "getitimer", "shmget", "sched_getparam", "getpriority", "uselib", "swapon", "rt_sigprocmask", "accept4", "msgctl", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "getsid", "sigaltstack", "ioperm", "memfd_create", "ioprio_set", "semctl", "dup", "fork", "migrate_pages", "get_robust_list", "remap_file_pages", "dup3", "msgget", "mq_timedsend", "openat", "keyctl", "getppid", "sched_getscheduler", "mq_open", "sched_setattr", "mq_timedreceive", "move_pages", "capget", "sigaction", "setpgid", "shmat", "sched_setaffinity", "socket", "open_by_handle_at", "semget", "setns", "signal", "pipe2", "sched_getattr", "semtimedop", "umount", "socketpair", "eventfd2", "sched_setscheduler", "prlimit64", "setitimer", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "fcntl64": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "fsync", "bpf", "recvfrom", "old_readdir", "sendto", "shutdown", "epoll_create1", "tee", "connect", "getsockname", "flock", "pwritev", "eventfd2", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "fcntl", "sync_file_range", "inotify_add_watch", "fstatfs64", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "pwritev64v2", "splice", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "swapon", "fdatasync", "epoll_wait", "utimensat", "ftruncate", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "munlockall": ["get_mempolicy", "remap_file_pages", "madvise", "mprotect", "shmdt", "mremap", "munlock", "brk", "prctl", "mlockall", "mincore", "pkey_mprotect"], "swapon": ["linkat", "mq_timedreceive", "mq_unlink", "fchownat", "swapoff", "uselib", "mq_getsetattr", "faccessat", "fchmod", "memfd_create", "mq_notify", "sendfile", "fchmodat", "inotify_add_watch", "mq_timedsend", "fchown", "ioctl", "unlink", "unlinkat", "readlinkat", "sendfile64", "ftruncate"], "pkey_mprotect": ["clone", "rt_sigaction", "rt_sigtimedwait", "mprotect", "msgrcv", "mlockall", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "getitimer", "sched_getparam", "getpriority", "rt_sigprocmask", "shmdt", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "mincore", "personality", "fork", "get_mempolicy", "migrate_pages", "get_robust_list", "remap_file_pages", "mremap", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "munlock", "mq_timedreceive", "ioprio_get", "capget", "sigaction", "getsid", "sched_setaffinity", "munlockall", "madvise", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "brk", "vfork", "ptrace"], "signalfd4": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "fsync", "bpf", "eventfd2", "old_readdir", "sendto", "shutdown", "epoll_create1", "tee", "connect", "getsockname", "flock", "pwritev", "recvfrom", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "fcntl", "sync_file_range", "inotify_add_watch", "fstatfs64", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "pwritev64v2", "splice", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "epoll_wait", "utimensat", "ftruncate", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "madvise": ["get_mempolicy", "munlockall", "remap_file_pages", "mprotect", "shmdt", "mremap", "munlock", "brk", "prctl", "mlockall", "mincore", "pkey_mprotect"], "getresuid": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "statfs": ["ustat", "fstatfs64", "fstatfs", "statfs64"], "mount": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "personality", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "timerfd_gettime": ["timerfd_settime", "timerfd_create"], "fchownat": ["epoll_ctl", "shmdt", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "accept4", "dup", "pivot_root", "memfd_create", "socketpair", "remap_file_pages", "dup3", "openat", "getcwd", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "unshare", "pipe2", "eventfd2", "perf_event_open"], "getrusage": ["exit_group", "timer_create"], "fstat": ["stat", "newfstat", "lstat"], "timerfd_settime": ["timerfd_gettime", "timerfd_create"], "setresuid": ["setuid", "sched_rr_get_interval", "rt_sigaction", "epoll_create1", "rt_sigtimedwait", "setfsuid", "msgrcv", "getresuid", "getpgid", "kill", "getrusage", "getresuid16", "prctl", "move_pages", "clone", "getgroups", "getresgid", "rt_sigprocmask", "getpriority", "sched_getaffinity", "sched_setparam", "setsid", "vfork", "setgid", "sigaltstack", "sched_setattr", "ptrace", "setpriority", "setns", "ioprio_set", "capset", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "getresgid16", "keyctl", "setresgid", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_getparam", "sched_setaffinity", "getgroups16", "setfsgid", "unshare", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setitimer", "perf_event_open", "ioprio_get", "faccessat", "setregid"], "ioprio_get": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "vfork", "ptrace"], "setuid": ["clone", "sched_rr_get_interval", "rt_sigaction", "epoll_create1", "rt_sigtimedwait", "setfsuid", "msgrcv", "getresuid", "getpgid", "kill", "getrusage", "getresuid16", "prctl", "move_pages", "getgroups", "getresgid", "rt_sigprocmask", "getpriority", "sched_getaffinity", "sched_setparam", "setsid", "vfork", "setgid", "sigaltstack", "sched_setattr", "ptrace", "setpriority", "setns", "ioprio_set", "capset", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "getresgid16", "keyctl", "setresgid", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_getparam", "sched_setaffinity", "getgroups16", "setfsgid", "unshare", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setresuid", "setitimer", "perf_event_open", "ioprio_get", "faccessat", "setregid"], "io_setup": ["io_destroy", "io_submit", "io_cancel", "io_getevents"], "mprotect": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "mlockall", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "getitimer", "sched_getparam", "getpriority", "rt_sigprocmask", "shmdt", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "mincore", "personality", "fork", "get_mempolicy", "migrate_pages", "get_robust_list", "remap_file_pages", "mremap", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "munlock", "mq_timedreceive", "ioprio_get", "capget", "sigaction", "getsid", "pkey_mprotect", "sched_setaffinity", "munlockall", "madvise", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "brk", "vfork", "ptrace"], "mmap_pgoff": ["epoll_ctl", "shmdt", "epoll_create1", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "mremap": ["clone", "io_getevents", "rt_sigaction", "rt_sigtimedwait", "mprotect", "msgrcv", "mlockall", "io_destroy", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "swapoff", "prctl", "move_pages", "getitimer", "io_setup", "getpriority", "rt_sigprocmask", "shmdt", "sched_getaffinity", "modify_ldt", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "mincore", "personality", "fork", "get_mempolicy", "migrate_pages", "get_robust_list", "remap_file_pages", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "munlock", "mbind", "sched_getparam", "mq_timedreceive", "ioprio_get", "io_cancel", "capget", "sigaction", "getsid", "pkey_mprotect", "sched_setaffinity", "munlockall", "madvise", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "brk", "vfork", "ptrace"], "geteuid": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "io_destroy": ["get_mempolicy", "io_submit", "migrate_pages", "move_pages", "remap_file_pages", "io_setup", "shmdt", "getrusage", "modify_ldt", "brk", "mremap", "io_getevents", "swapoff", "prctl", "io_cancel", "mincore", "mbind"], "pread64": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "fsync", "bpf", "eventfd2", "old_readdir", "sendto", "shutdown", "epoll_create1", "tee", "connect", "getsockname", "flock", "pwritev", "recvfrom", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "fcntl", "sync_file_range", "inotify_add_watch", "fstatfs64", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "pwritev64v2", "splice", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "epoll_wait", "utimensat", "ftruncate", "llseek", "getdents64", "mmap_pgoff", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "preadv64v2": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "prctl": ["setuid", "io_getevents", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "io_destroy", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "swapoff", "move_pages", "clone", "getitimer", "io_setup", "getpriority", "rt_sigprocmask", "shmdt", "sched_getaffinity", "modify_ldt", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "mincore", "personality", "fork", "get_mempolicy", "migrate_pages", "get_robust_list", "remap_file_pages", "mremap", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mbind", "mq_timedreceive", "ioprio_get", "capget", "sigaction", "getsid", "sched_getparam", "sched_setaffinity", "io_cancel", "setitimer", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setresuid", "perf_event_open", "brk", "vfork", "ptrace"], "copy_file_range": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "pread64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "connect"], "flock": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "ustat", "fsync", "bpf", "umount", "recvfrom", "old_readdir", "sendto", "shutdown", "epoll_create1", "tee", "connect", "getsockname", "pwritev", "eventfd2", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "fcntl", "sync_file_range", "inotify_add_watch", "fstatfs64", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "quotactl", "pwritev64v2", "splice", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "epoll_wait", "utimensat", "ftruncate", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "fstatfs": ["statfs", "ustat", "fstatfs64", "statfs64"], "modify_ldt": ["get_mempolicy", "migrate_pages", "move_pages", "remap_file_pages", "io_setup", "mincore", "shmdt", "getrusage", "io_destroy", "set_thread_area", "brk", "mremap", "io_getevents", "swapoff", "prctl", "io_cancel", "get_thread_area", "mbind"], "sched_getattr": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "sched_setattr", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "sched_getparam": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "fstatfs64": ["statfs", "ustat", "statfs64", "fstatfs"], "rt_sigreturn": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "sched_setattr", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "write": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "pread64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "connect"], "tkill": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "munlock": ["clone", "rt_sigaction", "rt_sigtimedwait", "mprotect", "msgrcv", "mlockall", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "getitimer", "sched_getparam", "getpriority", "rt_sigprocmask", "shmdt", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "mincore", "fork", "get_mempolicy", "migrate_pages", "get_robust_list", "remap_file_pages", "mremap", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "ioprio_get", "capget", "sigaction", "getsid", "pkey_mprotect", "sched_setaffinity", "munlockall", "madvise", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "brk", "vfork", "ptrace"], "setpriority": ["setuid", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "clone", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setresuid", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "recvmsg": ["setsockopt", "sendmmsg", "shutdown", "recvmmsg", "bind", "accept4", "recvfrom", "connect", "getsockname", "sendto", "getpeername", "listen", "sendmsg", "getsockopt"], "shmdt": ["get_mempolicy", "munlockall", "remap_file_pages", "madvise", "mprotect", "mremap", "munlock", "brk", "prctl", "mlockall", "mincore", "pkey_mprotect"], "getrlimit": ["prlimit64", "old_getrlimit", "setrlimit"], "mincore": ["clone", "rt_sigaction", "rt_sigtimedwait", "mprotect", "msgrcv", "mlockall", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "getitimer", "sched_getparam", "getpriority", "rt_sigprocmask", "shmdt", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "fork", "get_mempolicy", "migrate_pages", "get_robust_list", "remap_file_pages", "mremap", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "munlock", "sched_setattr", "mq_timedreceive", "ioprio_get", "capget", "sigaction", "getsid", "pkey_mprotect", "sched_setaffinity", "munlockall", "madvise", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "brk", "vfork", "ptrace"], "mq_notify": ["epoll_ctl", "shmdt", "epoll_create1", "rt_sigtimedwait", "mmap_pgoff", "mq_timedreceive", "rt_sigqueueinfo", "swapoff", "acct", "flock", "open", "tgkill", "uselib", "rt_sigreturn", "accept4", "mq_getsetattr", "tkill", "dup", "memfd_create", "socketpair", "remap_file_pages", "dup3", "mq_timedsend", "openat", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "setns", "pipe2", "eventfd2", "timer_create", "perf_event_open", "rt_tgsigqueueinfo"], "sendfile": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "sendmmsg": ["setsockopt", "shutdown", "recvmmsg", "bind", "accept4", "recvfrom", "recvmsg", "connect", "getsockname", "sendto", "getpeername", "listen", "sendmsg", "getsockopt"], "timer_getoverrun": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "timer_delete", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "timer_settime", "mq_timedreceive", "timer_gettime", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "timer_create", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "mlock2": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "newfstat": ["newstat", "newlstat", "fstat", "newfstatat"], "lremovexattr": ["epoll_ctl", "shmdt", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "accept4", "dup", "pivot_root", "memfd_create", "socketpair", "remap_file_pages", "dup3", "openat", "getcwd", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "unshare", "pipe2", "eventfd2", "perf_event_open"], "preadv64": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "pwritev64": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "getxattr": ["epoll_ctl", "shmdt", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "accept4", "dup", "pivot_root", "memfd_create", "socketpair", "remap_file_pages", "dup3", "openat", "getcwd", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "unshare", "pipe2", "eventfd2", "perf_event_open"], "mq_open": ["epoll_ctl", "accept4", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "mq_unlink", "symlinkat", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "sysfs", "shmdt", "rmdir", "dup", "pivot_root", "renameat2", "socketpair", "remap_file_pages", "dup3", "openat", "getcwd", "memfd_create", "shmctl", "unlink", "swapon", "unlinkat", "shmat", "socket", "open_by_handle_at", "unshare", "pipe2", "eventfd2", "perf_event_open"], "statfs64": ["statfs", "ustat", "fstatfs64", "fstatfs"], "getgid16": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "set_thread_area": ["clone", "rt_sigaction", "rt_sigtimedwait", "mq_timedreceive", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "arch_prctl", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "sched_setattr", "msgrcv", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "getegid": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "clock_nanosleep": ["clock_gettime", "io_getevents", "linkat", "rt_sigtimedwait", "futimesat", "mq_timedreceive", "mq_unlink", "fchownat", "sched_rr_get_interval", "swapoff", "poll", "clock_settime", "select", "clock_getres", "recvmmsg", "newfstat", "pselect6", "uselib", "nanosleep", "timer_delete", "mq_getsetattr", "faccessat", "fchmod", "memfd_create", "fstat", "settimeofday", "mq_notify", "sendfile", "fchmodat", "inotify_add_watch", "mq_timedsend", "fchown", "ioctl", "timer_settime", "stime", "timer_gettime", "unlink", "swapon", "unlinkat", "utime", "readlinkat", "clock_adjtime", "epoll_wait", "timerfd_gettime", "semtimedop", "futex", "timerfd_settime", "sendfile64", "timer_create", "ftruncate", "ppoll"], "unlinkat": ["epoll_ctl", "shmdt", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "mq_unlink", "symlinkat", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "accept4", "rmdir", "linkat", "pivot_root", "renameat2", "socketpair", "remap_file_pages", "dup3", "openat", "getcwd", "mq_open", "memfd_create", "dup", "shmctl", "unlink", "swapon", "mknodat", "shmat", "socket", "open_by_handle_at", "unshare", "pipe2", "eventfd2", "perf_event_open", "ftruncate", "mkdirat"], "getgroups": ["setuid", "sched_rr_get_interval", "rt_sigaction", "epoll_create1", "rt_sigtimedwait", "setfsuid", "msgrcv", "getresuid", "getpgid", "kill", "getrusage", "getresuid16", "prctl", "move_pages", "clone", "sched_getparam", "getresgid", "rt_sigprocmask", "getpriority", "sched_getaffinity", "sched_setparam", "setsid", "vfork", "setgid", "sigaltstack", "sched_setattr", "ptrace", "setpriority", "setns", "ioprio_set", "capset", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "getresgid16", "keyctl", "setresgid", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "getgroups16", "setfsgid", "unshare", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setresuid", "setitimer", "perf_event_open", "ioprio_get", "faccessat", "setregid"], "clock_adjtime": ["clock_gettime", "timer_delete", "timer_settime", "timer_create", "timer_gettime", "clock_nanosleep", "clock_settime", "clock_getres"], "getuid": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "open_by_handle_at": ["epoll_ctl", "shmdt", "epoll_create1", "quotactl", "mmap_pgoff", "setns", "swapoff", "acct", "flock", "open", "lookup_dcookie", "uselib", "accept4", "dup", "pivot_root", "memfd_create", "socketpair", "remap_file_pages", "dup3", "openat", "getcwd", "mq_open", "shmctl", "swapon", "shmat", "socket", "unshare", "pipe2", "eventfd2", "perf_event_open"], "setitimer": ["wait4", "clock_adjtime", "getitimer", "exit_group", "waitid", "adjtimex", "getrusage", "settimeofday", "timer_create", "alarm", "select", "ppoll"], "alarm": ["wait4", "clock_adjtime", "getitimer", "setitimer", "waitid", "adjtimex", "getrusage", "select", "ppoll", "settimeofday"], "flistxattr": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "pread64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "connect"], "futex": ["linkat", "io_getevents", "rt_sigtimedwait", "futimesat", "mq_timedreceive", "mq_unlink", "fchownat", "sched_rr_get_interval", "swapoff", "poll", "select", "recvmmsg", "clock_nanosleep", "newfstat", "pselect6", "uselib", "nanosleep", "mq_getsetattr", "faccessat", "fchmod", "memfd_create", "fstat", "settimeofday", "mq_notify", "sendfile", "fchmodat", "inotify_add_watch", "mq_timedsend", "fchown", "ioctl", "timer_settime", "stime", "timer_gettime", "unlink", "swapon", "unlinkat", "utime", "readlinkat", "epoll_wait", "timerfd_gettime", "semtimedop", "timerfd_settime", "sendfile64", "ftruncate", "ppoll"], "recvmmsg": ["linkat", "getsockname", "bind", "rt_sigtimedwait", "setsockopt", "sendmmsg", "mq_timedreceive", "mq_unlink", "fchownat", "connect", "sched_rr_get_interval", "swapoff", "newfstat", "poll", "select", "timerfd_settime", "clock_nanosleep", "getsockopt", "pselect6", "uselib", "nanosleep", "accept4", "mq_getsetattr", "faccessat", "fchmod", "recvmsg", "memfd_create", "fstat", "settimeofday", "listen", "sendfile", "futimesat", "shutdown", "fchmodat", "inotify_add_watch", "mq_timedsend", "io_getevents", "fchown", "ioctl", "timer_settime", "stime", "timer_gettime", "getpeername", "unlink", "swapon", "unlinkat", "utime", "readlinkat", "epoll_wait", "timerfd_gettime", "semtimedop", "futex", "recvfrom", "sendfile64", "sendto", "ftruncate", "mq_notify", "ppoll", "sendmsg"], "finit_module": ["delete_module", "init_module"], "sendfile64": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "mlockall": ["clone", "io_getevents", "rt_sigaction", "rt_sigtimedwait", "mprotect", "msgrcv", "io_destroy", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "swapoff", "prctl", "move_pages", "getitimer", "io_setup", "getpriority", "rt_sigprocmask", "shmdt", "sched_getaffinity", "modify_ldt", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "mincore", "personality", "fork", "get_mempolicy", "migrate_pages", "get_robust_list", "remap_file_pages", "mremap", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "munlock", "mbind", "sched_getparam", "mq_timedreceive", "ioprio_get", "io_cancel", "capget", "sigaction", "getsid", "pkey_mprotect", "sched_setaffinity", "munlockall", "madvise", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "brk", "vfork", "ptrace"], "ppoll": ["rt_sigtimedwait", "msgrcv", "mq_unlink", "kill", "io_getevents", "swapoff", "sched_getaffinity", "sched_setparam", "fchmod", "memfd_create", "fstat", "personality", "readlinkat", "getppid", "fchown", "mq_timedreceive", "capget", "utime", "sched_setaffinity", "signal", "semtimedop", "umount", "linkat", "timerfd_gettime", "fchownat", "pselect6", "uselib", "rt_sigprocmask", "inotify_add_watch", "setsid", "sigaltstack", "sched_setattr", "settimeofday", "migrate_pages", "getitimer", "fchmodat", "setpgid", "keyctl", "timer_settime", "stime", "ftruncate", "timer_gettime", "sigaction", "getsid", "futimesat", "prlimit64", "perf_event_open", "rt_sigaction", "getpgid", "sched_rr_get_interval", "poll", "select", "unlink", "getpriority", "nanosleep", "mq_getsetattr", "faccessat", "setns", "fork", "move_pages", "mq_timedsend", "sched_getscheduler", "ptrace", "swapon", "epoll_wait", "sched_getattr", "getrusage", "ioprio_set", "timerfd_settime", "sched_setscheduler", "ioprio_get", "vfork", "prctl", "get_robust_list", "sched_getparam", "setpriority", "mq_notify", "sendfile", "newfstat", "clone", "ioctl", "clock_nanosleep", "unlinkat", "setitimer", "futex", "recvmmsg", "sendfile64"], "mlock": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"]}
--- /dev/null	Fri Dec 21 15:00:32 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/implicit_dependencies/with_structs/implicit_dependencies.pretty	Fri Dec 21 15:00:32 2018
@@ -0,0 +1,9709 @@
+{'acct': set(['accept4',
+              'dup',
+              'dup3',
+              'epoll_create1',
+              'epoll_ctl',
+              'eventfd2',
+              'flock',
+              'memfd_create',
+              'mmap_pgoff',
+              'mq_open',
+              'open',
+              'open_by_handle_at',
+              'openat',
+              'perf_event_open',
+              'pipe2',
+              'remap_file_pages',
+              'setns',
+              'shmat',
+              'shmctl',
+              'shmdt',
+              'socket',
+              'socketpair',
+              'swapoff',
+              'swapon',
+              'uselib']),
+ 'alarm': set(['adjtimex',
+               'clock_adjtime',
+               'getitimer',
+               'getrusage',
+               'ppoll',
+               'select',
+               'setitimer',
+               'settimeofday',
+               'wait4',
+               'waitid']),
+ 'bpf': set(['accept4',
+             'acct',
+             'capget',
+             'clone',
+             'dup',
+             'dup3',
+             'epoll_create1',
+             'epoll_ctl',
+             'eventfd2',
+             'flock',
+             'fork',
+             'get_robust_list',
+             'getitimer',
+             'getpgid',
+             'getppid',
+             'getpriority',
+             'getrusage',
+             'getsid',
+             'ioperm',
+             'ioprio_get',
+             'ioprio_set',
+             'keyctl',
+             'kill',
+             'memfd_create',
+             'migrate_pages',
+             'mmap_pgoff',
+             'move_pages',
+             'mq_open',
+             'mq_timedreceive',
+             'mq_timedsend',
+             'msgrcv',
+             'open',
+             'open_by_handle_at',
+             'openat',
+             'perf_event_open',
+             'pipe2',
+             'prctl',
+             'prlimit64',
+             'ptrace',
+             'remap_file_pages',
+             'rt_sigaction',
+             'rt_sigprocmask',
+             'rt_sigtimedwait',
+             'sched_getaffinity',
+             'sched_getattr',
+             'sched_getparam',
+             'sched_getscheduler',
+             'sched_rr_get_interval',
+             'sched_setaffinity',
+             'sched_setattr',
+             'sched_setparam',
+             'sched_setscheduler',
+             'semtimedop',
+             'setitimer',
+             'setns',
+             'setpgid',
+             'setpriority',
+             'setsid',
+             'shmat',
+             'shmctl',
+             'shmdt',
+             'sigaction',
+             'sigaltstack',
+             'signal',
+             'socket',
+             'socketpair',
+             'swapoff',
+             'swapon',
+             'umount',
+             'uselib',
+             'vfork']),
+ 'brk': set(['get_mempolicy',
+             'getrusage',
+             'io_cancel',
+             'io_destroy',
+             'io_getevents',
+             'io_setup',
+             'madvise',
+             'mbind',
+             'migrate_pages',
+             'mincore',
+             'mlockall',
+             'modify_ldt',
+             'move_pages',
+             'mprotect',
+             'mremap',
+             'munlock',
+             'munlockall',
+             'pkey_mprotect',
+             'prctl',
+             'remap_file_pages',
+             'shmdt',
+             'swapoff']),
+ 'capset': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'clock_adjtime': set(['clock_getres',
+                       'clock_gettime',
+                       'clock_nanosleep',
+                       'clock_settime',
+                       'timer_create',
+                       'timer_delete',
+                       'timer_gettime',
+                       'timer_settime']),
+ 'clock_nanosleep': set(['clock_adjtime',
+                         'clock_getres',
+                         'clock_gettime',
+                         'clock_settime',
+                         'epoll_wait',
+                         'faccessat',
+                         'fchmod',
+                         'fchmodat',
+                         'fchown',
+                         'fchownat',
+                         'fstat',
+                         'ftruncate',
+                         'futex',
+                         'futimesat',
+                         'inotify_add_watch',
+                         'io_getevents',
+                         'ioctl',
+                         'linkat',
+                         'memfd_create',
+                         'mq_getsetattr',
+                         'mq_notify',
+                         'mq_timedreceive',
+                         'mq_timedsend',
+                         'mq_unlink',
+                         'nanosleep',
+                         'newfstat',
+                         'poll',
+                         'ppoll',
+                         'pselect6',
+                         'readlinkat',
+                         'recvmmsg',
+                         'rt_sigtimedwait',
+                         'sched_rr_get_interval',
+                         'select',
+                         'semtimedop',
+                         'sendfile',
+                         'sendfile64',
+                         'settimeofday',
+                         'stime',
+                         'swapoff',
+                         'swapon',
+                         'timer_create',
+                         'timer_delete',
+                         'timer_gettime',
+                         'timer_settime',
+                         'timerfd_gettime',
+                         'timerfd_settime',
+                         'unlink',
+                         'unlinkat',
+                         'uselib',
+                         'utime']),
+ 'clock_settime': set(['clock_adjtime',
+                       'clock_getres',
+                       'clock_gettime',
+                       'clock_nanosleep',
+                       'timer_create',
+                       'timer_delete',
+                       'timer_gettime',
+                       'timer_settime']),
+ 'copy_file_range': set(['accept4',
+                         'bind',
+                         'bpf',
+                         'connect',
+                         'epoll_ctl',
+                         'epoll_wait',
+                         'fallocate',
+                         'fchdir',
+                         'fchmod',
+                         'fchown',
+                         'fcntl',
+                         'fcntl64',
+                         'fdatasync',
+                         'fgetxattr',
+                         'flistxattr',
+                         'flock',
+                         'fremovexattr',
+                         'fsetxattr',
+                         'fstatfs',
+                         'fstatfs64',
+                         'fsync',
+                         'ftruncate',
+                         'futimesat',
+                         'getdents',
+                         'getdents64',
+                         'getpeername',
+                         'getsockname',
+                         'getsockopt',
+                         'inotify_add_watch',
+                         'inotify_rm_watch',
+                         'ioctl',
+                         'listen',
+                         'llseek',
+                         'lseek',
+                         'mq_getsetattr',
+                         'mq_notify',
+                         'mq_timedreceive',
+                         'mq_timedsend',
+                         'old_readdir',
+                         'perf_event_open',
+                         'pread64',
+                         'preadv',
+                         'preadv2',
+                         'preadv64',
+                         'preadv64v2',
+                         'pwrite64',
+                         'pwritev',
+                         'pwritev2',
+                         'pwritev64',
+                         'pwritev64v2',
+                         'read',
+                         'readahead',
+                         'readv',
+                         'recvfrom',
+                         'sendfile',
+                         'sendfile64',
+                         'sendto',
+                         'setsockopt',
+                         'shutdown',
+                         'signalfd4',
+                         'splice',
+                         'sync_file_range',
+                         'syncfs',
+                         'tee',
+                         'utime',
+                         'utimensat',
+                         'vmsplice',
+                         'write',
+                         'writev']),
+ 'delete_module': set(['finit_module', 'init_module']),
+ 'dup3': set(['dup2', 'select', 'unshare']),
+ 'epoll_create1': set(['capget',
+                       'capset',
+                       'clone',
+                       'epoll_ctl',
+                       'epoll_wait',
+                       'faccessat',
+                       'fork',
+                       'get_robust_list',
+                       'getgroups',
+                       'getgroups16',
+                       'getitimer',
+                       'getpgid',
+                       'getppid',
+                       'getpriority',
+                       'getresgid',
+                       'getresgid16',
+                       'getresuid',
+                       'getresuid16',
+                       'getrusage',
+                       'getsid',
+                       'ioprio_get',
+                       'ioprio_set',
+                       'keyctl',
+                       'kill',
+                       'migrate_pages',
+                       'move_pages',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'msgrcv',
+                       'perf_event_open',
+                       'prctl',
+                       'prlimit64',
+                       'ptrace',
+                       'rt_sigaction',
+                       'rt_sigprocmask',
+                       'rt_sigtimedwait',
+                       'sched_getaffinity',
+                       'sched_getattr',
+                       'sched_getparam',
+                       'sched_getscheduler',
+                       'sched_rr_get_interval',
+                       'sched_setaffinity',
+                       'sched_setattr',
+                       'sched_setparam',
+                       'sched_setscheduler',
+                       'semtimedop',
+                       'setfsgid',
+                       'setfsuid',
+                       'setgid',
+                       'setitimer',
+                       'setns',
+                       'setpgid',
+                       'setpriority',
+                       'setregid',
+                       'setresgid',
+                       'setresuid',
+                       'setreuid',
+                       'setsid',
+                       'setuid',
+                       'sigaction',
+                       'sigaltstack',
+                       'signal',
+                       'umount',
+                       'unshare',
+                       'vfork']),
+ 'epoll_ctl': set(['accept4',
+                   'acct',
+                   'bind',
+                   'bpf',
+                   'brk',
+                   'capget',
+                   'clone',
+                   'connect',
+                   'copy_file_range',
+                   'delete_module',
+                   'dup',
+                   'dup2',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_wait',
+                   'eventfd2',
+                   'exit_group',
+                   'faccessat',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchmodat',
+                   'fchown',
+                   'fchownat',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'finit_module',
+                   'flistxattr',
+                   'flock',
+                   'fork',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'get_curr_temp',
+                   'get_mempolicy',
+                   'get_robust_list',
+                   'get_trip_temp',
+                   'getcwd',
+                   'getdents',
+                   'getdents64',
+                   'getgroups',
+                   'getgroups16',
+                   'getitimer',
+                   'getpeername',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getrusage',
+                   'getsid',
+                   'getsockname',
+                   'getsockopt',
+                   'init_module',
+                   'inotify_add_watch',
+                   'inotify_init1',
+                   'inotify_rm_watch',
+                   'io_cancel',
+                   'io_destroy',
+                   'io_getevents',
+                   'io_setup',
+                   'io_submit',
+                   'ioctl',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'kexec_load',
+                   'keyctl',
+                   'kill',
+                   'linkat',
+                   'listen',
+                   'llseek',
+                   'lookup_dcookie',
+                   'lseek',
+                   'madvise',
+                   'mbind',
+                   'memfd_create',
+                   'migrate_pages',
+                   'mincore',
+                   'mkdirat',
+                   'mknodat',
+                   'mlockall',
+                   'mmap_pgoff',
+                   'modify_ldt',
+                   'move_pages',
+                   'mprotect',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_open',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'mq_unlink',
+                   'mremap',
+                   'msgctl',
+                   'msgrcv',
+                   'msgsnd',
+                   'munlock',
+                   'munlockall',
+                   'old_readdir',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'pivot_root',
+                   'pkey_mprotect',
+                   'prctl',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'prlimit64',
+                   'ptrace',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'quotactl',
+                   'read',
+                   'readahead',
+                   'readlinkat',
+                   'readv',
+                   'reboot',
+                   'recvfrom',
+                   'remap_file_pages',
+                   'renameat2',
+                   'request_key',
+                   'rmdir',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'sched_yield',
+                   'semctl',
+                   'semtimedop',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'set_trip_temp',
+                   'setgid',
+                   'setgroups',
+                   'setgroups16',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setregid',
+                   'setresgid',
+                   'setresuid',
+                   'setreuid',
+                   'setsid',
+                   'setsockopt',
+                   'setuid',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'shutdown',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'signalfd4',
+                   'socket',
+                   'socketpair',
+                   'splice',
+                   'swapoff',
+                   'swapon',
+                   'symlinkat',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'timer_create',
+                   'timer_delete',
+                   'timer_getoverrun',
+                   'timer_gettime',
+                   'timer_settime',
+                   'timerfd_create',
+                   'timerfd_gettime',
+                   'timerfd_settime',
+                   'umount',
+                   'unlink',
+                   'unlinkat',
+                   'unshare',
+                   'uselib',
+                   'ustat',
+                   'utime',
+                   'utimensat',
+                   'vfork',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'epoll_wait': set(['accept4',
+                    'acct',
+                    'bind',
+                    'bpf',
+                    'capget',
+                    'clone',
+                    'connect',
+                    'copy_file_range',
+                    'dup',
+                    'dup3',
+                    'epoll_create1',
+                    'epoll_ctl',
+                    'eventfd2',
+                    'fallocate',
+                    'fchdir',
+                    'fchmod',
+                    'fchown',
+                    'fcntl',
+                    'fcntl64',
+                    'fdatasync',
+                    'fgetxattr',
+                    'flistxattr',
+                    'flock',
+                    'fork',
+                    'fremovexattr',
+                    'fsetxattr',
+                    'fstatfs',
+                    'fstatfs64',
+                    'fsync',
+                    'ftruncate',
+                    'futimesat',
+                    'get_robust_list',
+                    'getdents',
+                    'getdents64',
+                    'getitimer',
+                    'getpeername',
+                    'getpgid',
+                    'getppid',
+                    'getpriority',
+                    'getrusage',
+                    'getsid',
+                    'getsockname',
+                    'getsockopt',
+                    'inotify_add_watch',
+                    'inotify_rm_watch',
+                    'ioctl',
+                    'ioperm',
+                    'ioprio_get',
+                    'ioprio_set',
+                    'keyctl',
+                    'kill',
+                    'listen',
+                    'llseek',
+                    'lseek',
+                    'memfd_create',
+                    'migrate_pages',
+                    'mmap_pgoff',
+                    'move_pages',
+                    'mq_getsetattr',
+                    'mq_notify',
+                    'mq_open',
+                    'mq_timedreceive',
+                    'mq_timedsend',
+                    'msgrcv',
+                    'old_readdir',
+                    'open',
+                    'open_by_handle_at',
+                    'openat',
+                    'perf_event_open',
+                    'pipe2',
+                    'prctl',
+                    'pread64',
+                    'preadv',
+                    'preadv2',
+                    'preadv64',
+                    'preadv64v2',
+                    'prlimit64',
+                    'ptrace',
+                    'pwrite64',
+                    'pwritev',
+                    'pwritev2',
+                    'pwritev64',
+                    'pwritev64v2',
+                    'read',
+                    'readahead',
+                    'readv',
+                    'recvfrom',
+                    'remap_file_pages',
+                    'rt_sigaction',
+                    'rt_sigprocmask',
+                    'rt_sigtimedwait',
+                    'sched_getaffinity',
+                    'sched_getattr',
+                    'sched_getparam',
+                    'sched_getscheduler',
+                    'sched_rr_get_interval',
+                    'sched_setaffinity',
+                    'sched_setattr',
+                    'sched_setparam',
+                    'sched_setscheduler',
+                    'semtimedop',
+                    'sendfile',
+                    'sendfile64',
+                    'sendto',
+                    'setitimer',
+                    'setns',
+                    'setpgid',
+                    'setpriority',
+                    'setsid',
+                    'setsockopt',
+                    'shmat',
+                    'shmctl',
+                    'shmdt',
+                    'shutdown',
+                    'sigaction',
+                    'sigaltstack',
+                    'signal',
+                    'signalfd4',
+                    'socket',
+                    'socketpair',
+                    'splice',
+                    'swapoff',
+                    'swapon',
+                    'sync_file_range',
+                    'syncfs',
+                    'tee',
+                    'umount',
+                    'uselib',
+                    'utime',
+                    'utimensat',
+                    'vfork',
+                    'vmsplice',
+                    'write',
+                    'writev']),
+ 'faccessat': set(['accept4',
+                   'acct',
+                   'capget',
+                   'clone',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'eventfd2',
+                   'flock',
+                   'fork',
+                   'get_robust_list',
+                   'getcwd',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getrusage',
+                   'getsid',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'lookup_dcookie',
+                   'memfd_create',
+                   'migrate_pages',
+                   'mmap_pgoff',
+                   'move_pages',
+                   'mq_open',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'pivot_root',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'quotactl',
+                   'remap_file_pages',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setresuid',
+                   'setreuid',
+                   'setsid',
+                   'setuid',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'socket',
+                   'socketpair',
+                   'swapoff',
+                   'swapon',
+                   'umount',
+                   'unshare',
+                   'uselib',
+                   'vfork']),
+ 'fallocate': set(['accept4',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'fchdir',
+                   'fchmod',
+                   'fchown',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'old_readdir',
+                   'perf_event_open',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readv',
+                   'recvfrom',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setsockopt',
+                   'shutdown',
+                   'signalfd4',
+                   'splice',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'fchdir': set(['accept4',
+                'acct',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'epoll_wait',
+                'eventfd2',
+                'fallocate',
+                'fchmod',
+                'fchown',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getcwd',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'llseek',
+                'lookup_dcookie',
+                'lseek',
+                'memfd_create',
+                'mmap_pgoff',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_open',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'pivot_root',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'quotactl',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'remap_file_pages',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setns',
+                'setsockopt',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'shutdown',
+                'signalfd4',
+                'socket',
+                'socketpair',
+                'splice',
+                'swapoff',
+                'swapon',
+                'sync_file_range',
+                'syncfs',
+                'tee',
+                'unshare',
+                'uselib',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'fchmod': set(['accept4',
+                'acct',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'epoll_wait',
+                'eventfd2',
+                'fallocate',
+                'fchdir',
+                'fchown',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getcwd',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'llseek',
+                'lookup_dcookie',
+                'lseek',
+                'memfd_create',
+                'mmap_pgoff',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_open',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'pivot_root',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'quotactl',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'remap_file_pages',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setns',
+                'setsockopt',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'shutdown',
+                'signalfd4',
+                'socket',
+                'socketpair',
+                'splice',
+                'swapoff',
+                'swapon',
+                'sync_file_range',
+                'syncfs',
+                'tee',
+                'unshare',
+                'uselib',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'fchmodat': set(['accept4',
+                  'acct',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'eventfd2',
+                  'flock',
+                  'getcwd',
+                  'lookup_dcookie',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_open',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'pivot_root',
+                  'quotactl',
+                  'remap_file_pages',
+                  'setns',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'socket',
+                  'socketpair',
+                  'swapoff',
+                  'swapon',
+                  'unshare',
+                  'uselib']),
+ 'fchown': set(['accept4',
+                'acct',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'epoll_wait',
+                'eventfd2',
+                'fallocate',
+                'fchdir',
+                'fchmod',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getcwd',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'llseek',
+                'lookup_dcookie',
+                'lseek',
+                'memfd_create',
+                'mmap_pgoff',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_open',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'pivot_root',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'quotactl',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'remap_file_pages',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setns',
+                'setsockopt',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'shutdown',
+                'signalfd4',
+                'socket',
+                'socketpair',
+                'splice',
+                'swapoff',
+                'swapon',
+                'sync_file_range',
+                'syncfs',
+                'tee',
+                'unshare',
+                'uselib',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'fchownat': set(['accept4',
+                  'acct',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'eventfd2',
+                  'flock',
+                  'getcwd',
+                  'lookup_dcookie',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_open',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'pivot_root',
+                  'quotactl',
+                  'remap_file_pages',
+                  'setns',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'socket',
+                  'socketpair',
+                  'swapoff',
+                  'swapon',
+                  'unshare',
+                  'uselib']),
+ 'fcntl': set(['accept4',
+               'acct',
+               'bind',
+               'bpf',
+               'connect',
+               'copy_file_range',
+               'dup',
+               'dup3',
+               'epoll_create1',
+               'epoll_ctl',
+               'epoll_wait',
+               'eventfd2',
+               'fallocate',
+               'fchdir',
+               'fchmod',
+               'fchown',
+               'fcntl64',
+               'fdatasync',
+               'fgetxattr',
+               'flistxattr',
+               'flock',
+               'fremovexattr',
+               'fsetxattr',
+               'fstatfs',
+               'fstatfs64',
+               'fsync',
+               'ftruncate',
+               'futimesat',
+               'getdents',
+               'getdents64',
+               'getpeername',
+               'getsockname',
+               'getsockopt',
+               'inotify_add_watch',
+               'inotify_rm_watch',
+               'ioctl',
+               'listen',
+               'llseek',
+               'lseek',
+               'memfd_create',
+               'mmap_pgoff',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_open',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'old_readdir',
+               'open',
+               'open_by_handle_at',
+               'openat',
+               'perf_event_open',
+               'pipe2',
+               'pread64',
+               'preadv',
+               'preadv2',
+               'preadv64',
+               'preadv64v2',
+               'pwrite64',
+               'pwritev',
+               'pwritev2',
+               'pwritev64',
+               'pwritev64v2',
+               'read',
+               'readahead',
+               'readv',
+               'recvfrom',
+               'remap_file_pages',
+               'sendfile',
+               'sendfile64',
+               'sendto',
+               'setns',
+               'setsockopt',
+               'shmat',
+               'shmctl',
+               'shmdt',
+               'shutdown',
+               'signalfd4',
+               'socket',
+               'socketpair',
+               'splice',
+               'swapoff',
+               'swapon',
+               'sync_file_range',
+               'syncfs',
+               'tee',
+               'uselib',
+               'utime',
+               'utimensat',
+               'vmsplice',
+               'write',
+               'writev']),
+ 'fcntl64': set(['accept4',
+                 'acct',
+                 'bind',
+                 'bpf',
+                 'connect',
+                 'copy_file_range',
+                 'dup',
+                 'dup3',
+                 'epoll_create1',
+                 'epoll_ctl',
+                 'epoll_wait',
+                 'eventfd2',
+                 'fallocate',
+                 'fchdir',
+                 'fchmod',
+                 'fchown',
+                 'fcntl',
+                 'fdatasync',
+                 'fgetxattr',
+                 'flistxattr',
+                 'flock',
+                 'fremovexattr',
+                 'fsetxattr',
+                 'fstatfs',
+                 'fstatfs64',
+                 'fsync',
+                 'ftruncate',
+                 'futimesat',
+                 'getdents',
+                 'getdents64',
+                 'getpeername',
+                 'getsockname',
+                 'getsockopt',
+                 'inotify_add_watch',
+                 'inotify_rm_watch',
+                 'ioctl',
+                 'listen',
+                 'llseek',
+                 'lseek',
+                 'memfd_create',
+                 'mmap_pgoff',
+                 'mq_getsetattr',
+                 'mq_notify',
+                 'mq_open',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'old_readdir',
+                 'open',
+                 'open_by_handle_at',
+                 'openat',
+                 'perf_event_open',
+                 'pipe2',
+                 'pread64',
+                 'preadv',
+                 'preadv2',
+                 'preadv64',
+                 'preadv64v2',
+                 'pwrite64',
+                 'pwritev',
+                 'pwritev2',
+                 'pwritev64',
+                 'pwritev64v2',
+                 'read',
+                 'readahead',
+                 'readv',
+                 'recvfrom',
+                 'remap_file_pages',
+                 'sendfile',
+                 'sendfile64',
+                 'sendto',
+                 'setns',
+                 'setsockopt',
+                 'shmat',
+                 'shmctl',
+                 'shmdt',
+                 'shutdown',
+                 'signalfd4',
+                 'socket',
+                 'socketpair',
+                 'splice',
+                 'swapoff',
+                 'swapon',
+                 'sync_file_range',
+                 'syncfs',
+                 'tee',
+                 'uselib',
+                 'utime',
+                 'utimensat',
+                 'vmsplice',
+                 'write',
+                 'writev']),
+ 'fgetxattr': set(['accept4',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchown',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'old_readdir',
+                   'perf_event_open',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readv',
+                   'recvfrom',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setsockopt',
+                   'shutdown',
+                   'signalfd4',
+                   'splice',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'finit_module': set(['delete_module', 'init_module']),
+ 'flistxattr': set(['accept4',
+                    'bind',
+                    'bpf',
+                    'connect',
+                    'copy_file_range',
+                    'epoll_ctl',
+                    'epoll_wait',
+                    'fallocate',
+                    'fchdir',
+                    'fchmod',
+                    'fchown',
+                    'fcntl',
+                    'fcntl64',
+                    'fdatasync',
+                    'fgetxattr',
+                    'flock',
+                    'fremovexattr',
+                    'fsetxattr',
+                    'fstatfs',
+                    'fstatfs64',
+                    'fsync',
+                    'ftruncate',
+                    'futimesat',
+                    'getdents',
+                    'getdents64',
+                    'getpeername',
+                    'getsockname',
+                    'getsockopt',
+                    'inotify_add_watch',
+                    'inotify_rm_watch',
+                    'ioctl',
+                    'listen',
+                    'llseek',
+                    'lseek',
+                    'mq_getsetattr',
+                    'mq_notify',
+                    'mq_timedreceive',
+                    'mq_timedsend',
+                    'old_readdir',
+                    'perf_event_open',
+                    'pread64',
+                    'preadv',
+                    'preadv2',
+                    'preadv64',
+                    'preadv64v2',
+                    'pwrite64',
+                    'pwritev',
+                    'pwritev2',
+                    'pwritev64',
+                    'pwritev64v2',
+                    'read',
+                    'readahead',
+                    'readv',
+                    'recvfrom',
+                    'sendfile',
+                    'sendfile64',
+                    'sendto',
+                    'setsockopt',
+                    'shutdown',
+                    'signalfd4',
+                    'splice',
+                    'sync_file_range',
+                    'syncfs',
+                    'tee',
+                    'utime',
+                    'utimensat',
+                    'vmsplice',
+                    'write',
+                    'writev']),
+ 'flock': set(['accept4',
+               'acct',
+               'bind',
+               'bpf',
+               'connect',
+               'copy_file_range',
+               'dup',
+               'dup3',
+               'epoll_create1',
+               'epoll_ctl',
+               'epoll_wait',
+               'eventfd2',
+               'fallocate',
+               'fchdir',
+               'fchmod',
+               'fchown',
+               'fcntl',
+               'fcntl64',
+               'fdatasync',
+               'fgetxattr',
+               'flistxattr',
+               'fremovexattr',
+               'fsetxattr',
+               'fstatfs',
+               'fstatfs64',
+               'fsync',
+               'ftruncate',
+               'futimesat',
+               'getdents',
+               'getdents64',
+               'getpeername',
+               'getsockname',
+               'getsockopt',
+               'inotify_add_watch',
+               'inotify_rm_watch',
+               'ioctl',
+               'listen',
+               'llseek',
+               'lseek',
+               'memfd_create',
+               'mmap_pgoff',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_open',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'old_readdir',
+               'open',
+               'open_by_handle_at',
+               'openat',
+               'perf_event_open',
+               'pipe2',
+               'pread64',
+               'preadv',
+               'preadv2',
+               'preadv64',
+               'preadv64v2',
+               'pwrite64',
+               'pwritev',
+               'pwritev2',
+               'pwritev64',
+               'pwritev64v2',
+               'quotactl',
+               'read',
+               'readahead',
+               'readv',
+               'recvfrom',
+               'remap_file_pages',
+               'sendfile',
+               'sendfile64',
+               'sendto',
+               'setns',
+               'setsockopt',
+               'shmat',
+               'shmctl',
+               'shmdt',
+               'shutdown',
+               'signalfd4',
+               'socket',
+               'socketpair',
+               'splice',
+               'swapoff',
+               'swapon',
+               'sync_file_range',
+               'syncfs',
+               'tee',
+               'umount',
+               'uselib',
+               'ustat',
+               'utime',
+               'utimensat',
+               'vmsplice',
+               'write',
+               'writev']),
+ 'fremovexattr': set(['accept4',
+                      'bind',
+                      'bpf',
+                      'connect',
+                      'copy_file_range',
+                      'epoll_ctl',
+                      'epoll_wait',
+                      'fallocate',
+                      'fchdir',
+                      'fchmod',
+                      'fchown',
+                      'fcntl',
+                      'fcntl64',
+                      'fdatasync',
+                      'fgetxattr',
+                      'flistxattr',
+                      'flock',
+                      'fsetxattr',
+                      'fstatfs',
+                      'fstatfs64',
+                      'fsync',
+                      'ftruncate',
+                      'futimesat',
+                      'getdents',
+                      'getdents64',
+                      'getpeername',
+                      'getsockname',
+                      'getsockopt',
+                      'inotify_add_watch',
+                      'inotify_rm_watch',
+                      'ioctl',
+                      'listen',
+                      'llseek',
+                      'lseek',
+                      'mq_getsetattr',
+                      'mq_notify',
+                      'mq_timedreceive',
+                      'mq_timedsend',
+                      'old_readdir',
+                      'perf_event_open',
+                      'pread64',
+                      'preadv',
+                      'preadv2',
+                      'preadv64',
+                      'preadv64v2',
+                      'pwrite64',
+                      'pwritev',
+                      'pwritev2',
+                      'pwritev64',
+                      'pwritev64v2',
+                      'read',
+                      'readahead',
+                      'readv',
+                      'recvfrom',
+                      'sendfile',
+                      'sendfile64',
+                      'sendto',
+                      'setsockopt',
+                      'shutdown',
+                      'signalfd4',
+                      'splice',
+                      'sync_file_range',
+                      'syncfs',
+                      'tee',
+                      'utime',
+                      'utimensat',
+                      'vmsplice',
+                      'write',
+                      'writev']),
+ 'fsetxattr': set(['accept4',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchown',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'old_readdir',
+                   'perf_event_open',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readv',
+                   'recvfrom',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setsockopt',
+                   'shutdown',
+                   'signalfd4',
+                   'splice',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'fstat': set(['lstat', 'newfstat', 'stat']),
+ 'fstatfs': set(['fstatfs64', 'statfs', 'statfs64', 'ustat']),
+ 'fstatfs64': set(['fstatfs', 'statfs', 'statfs64', 'ustat']),
+ 'ftruncate': set(['accept4',
+                   'acct',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'eventfd2',
+                   'faccessat',
+                   'fchmod',
+                   'fchmodat',
+                   'fchown',
+                   'fchownat',
+                   'flock',
+                   'inotify_add_watch',
+                   'ioctl',
+                   'linkat',
+                   'memfd_create',
+                   'mmap_pgoff',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_open',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'mq_unlink',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'readlinkat',
+                   'remap_file_pages',
+                   'sendfile',
+                   'sendfile64',
+                   'setns',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'socket',
+                   'socketpair',
+                   'swapoff',
+                   'swapon',
+                   'unlink',
+                   'unlinkat',
+                   'uselib']),
+ 'futex': set(['clock_nanosleep',
+               'epoll_wait',
+               'faccessat',
+               'fchmod',
+               'fchmodat',
+               'fchown',
+               'fchownat',
+               'fstat',
+               'ftruncate',
+               'futimesat',
+               'inotify_add_watch',
+               'io_getevents',
+               'ioctl',
+               'linkat',
+               'memfd_create',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'mq_unlink',
+               'nanosleep',
+               'newfstat',
+               'poll',
+               'ppoll',
+               'pselect6',
+               'readlinkat',
+               'recvmmsg',
+               'rt_sigtimedwait',
+               'sched_rr_get_interval',
+               'select',
+               'semtimedop',
+               'sendfile',
+               'sendfile64',
+               'settimeofday',
+               'stime',
+               'swapoff',
+               'swapon',
+               'timer_gettime',
+               'timer_settime',
+               'timerfd_gettime',
+               'timerfd_settime',
+               'unlink',
+               'unlinkat',
+               'uselib',
+               'utime']),
+ 'futimesat': set(['adjtimex',
+                   'alarm',
+                   'clock_adjtime',
+                   'clock_nanosleep',
+                   'epoll_wait',
+                   'faccessat',
+                   'fchmod',
+                   'fchmodat',
+                   'fchown',
+                   'fchownat',
+                   'fstat',
+                   'ftruncate',
+                   'futex',
+                   'getitimer',
+                   'getrusage',
+                   'inotify_add_watch',
+                   'io_getevents',
+                   'ioctl',
+                   'linkat',
+                   'memfd_create',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'mq_unlink',
+                   'nanosleep',
+                   'newfstat',
+                   'poll',
+                   'ppoll',
+                   'pselect6',
+                   'readlinkat',
+                   'recvmmsg',
+                   'rt_sigtimedwait',
+                   'sched_rr_get_interval',
+                   'select',
+                   'semtimedop',
+                   'sendfile',
+                   'sendfile64',
+                   'setitimer',
+                   'settimeofday',
+                   'stime',
+                   'swapoff',
+                   'swapon',
+                   'timer_gettime',
+                   'timer_settime',
+                   'timerfd_gettime',
+                   'timerfd_settime',
+                   'unlink',
+                   'unlinkat',
+                   'uselib',
+                   'utime',
+                   'wait4',
+                   'waitid']),
+ 'get_mempolicy': set(['brk',
+                       'capget',
+                       'clone',
+                       'fork',
+                       'get_robust_list',
+                       'getitimer',
+                       'getpgid',
+                       'getppid',
+                       'getpriority',
+                       'getrusage',
+                       'getsid',
+                       'ioprio_get',
+                       'ioprio_set',
+                       'keyctl',
+                       'kill',
+                       'madvise',
+                       'mbind',
+                       'migrate_pages',
+                       'mincore',
+                       'mlockall',
+                       'move_pages',
+                       'mprotect',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'mremap',
+                       'msgrcv',
+                       'munlock',
+                       'munlockall',
+                       'perf_event_open',
+                       'pkey_mprotect',
+                       'prctl',
+                       'prlimit64',
+                       'ptrace',
+                       'remap_file_pages',
+                       'rt_sigaction',
+                       'rt_sigprocmask',
+                       'rt_sigtimedwait',
+                       'sched_getaffinity',
+                       'sched_getattr',
+                       'sched_getparam',
+                       'sched_getscheduler',
+                       'sched_rr_get_interval',
+                       'sched_setaffinity',
+                       'sched_setattr',
+                       'sched_setparam',
+                       'sched_setscheduler',
+                       'semtimedop',
+                       'set_mempolicy',
+                       'setitimer',
+                       'setns',
+                       'setpgid',
+                       'setpriority',
+                       'setsid',
+                       'shmdt',
+                       'sigaction',
+                       'sigaltstack',
+                       'signal',
+                       'umount',
+                       'vfork']),
+ 'getcwd': set(['accept4',
+                'acct',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'eventfd2',
+                'flock',
+                'ftruncate',
+                'linkat',
+                'lookup_dcookie',
+                'memfd_create',
+                'mkdirat',
+                'mknodat',
+                'mmap_pgoff',
+                'mq_open',
+                'mq_unlink',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'pivot_root',
+                'quotactl',
+                'remap_file_pages',
+                'renameat2',
+                'rmdir',
+                'setns',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'socket',
+                'socketpair',
+                'swapoff',
+                'swapon',
+                'symlinkat',
+                'umount',
+                'unlink',
+                'unlinkat',
+                'unshare',
+                'uselib']),
+ 'getdents': set(['accept4',
+                  'bind',
+                  'bpf',
+                  'capget',
+                  'clone',
+                  'connect',
+                  'copy_file_range',
+                  'epoll_ctl',
+                  'epoll_wait',
+                  'fallocate',
+                  'fchdir',
+                  'fchmod',
+                  'fchown',
+                  'fcntl',
+                  'fcntl64',
+                  'fdatasync',
+                  'fgetxattr',
+                  'flistxattr',
+                  'flock',
+                  'fork',
+                  'fremovexattr',
+                  'fsetxattr',
+                  'fstatfs',
+                  'fstatfs64',
+                  'fsync',
+                  'ftruncate',
+                  'futimesat',
+                  'get_robust_list',
+                  'getdents64',
+                  'getitimer',
+                  'getpeername',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'getsockname',
+                  'getsockopt',
+                  'inotify_add_watch',
+                  'inotify_rm_watch',
+                  'ioctl',
+                  'ioperm',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'listen',
+                  'llseek',
+                  'lseek',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_getsetattr',
+                  'mq_notify',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'old_readdir',
+                  'perf_event_open',
+                  'prctl',
+                  'pread64',
+                  'preadv',
+                  'preadv2',
+                  'preadv64',
+                  'preadv64v2',
+                  'prlimit64',
+                  'ptrace',
+                  'pwrite64',
+                  'pwritev',
+                  'pwritev2',
+                  'pwritev64',
+                  'pwritev64v2',
+                  'read',
+                  'readahead',
+                  'readv',
+                  'recvfrom',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'sendfile',
+                  'sendfile64',
+                  'sendto',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'setsockopt',
+                  'shutdown',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'signalfd4',
+                  'splice',
+                  'sync_file_range',
+                  'syncfs',
+                  'tee',
+                  'umount',
+                  'utime',
+                  'utimensat',
+                  'vfork',
+                  'vmsplice',
+                  'write',
+                  'writev']),
+ 'getdents64': set(['accept4',
+                    'bind',
+                    'bpf',
+                    'capget',
+                    'clone',
+                    'connect',
+                    'copy_file_range',
+                    'epoll_ctl',
+                    'epoll_wait',
+                    'fallocate',
+                    'fchdir',
+                    'fchmod',
+                    'fchown',
+                    'fcntl',
+                    'fcntl64',
+                    'fdatasync',
+                    'fgetxattr',
+                    'flistxattr',
+                    'flock',
+                    'fork',
+                    'fremovexattr',
+                    'fsetxattr',
+                    'fstatfs',
+                    'fstatfs64',
+                    'fsync',
+                    'ftruncate',
+                    'futimesat',
+                    'get_robust_list',
+                    'getdents',
+                    'getitimer',
+                    'getpeername',
+                    'getpgid',
+                    'getppid',
+                    'getpriority',
+                    'getrusage',
+                    'getsid',
+                    'getsockname',
+                    'getsockopt',
+                    'inotify_add_watch',
+                    'inotify_rm_watch',
+                    'ioctl',
+                    'ioperm',
+                    'ioprio_get',
+                    'ioprio_set',
+                    'keyctl',
+                    'kill',
+                    'listen',
+                    'llseek',
+                    'lseek',
+                    'migrate_pages',
+                    'move_pages',
+                    'mq_getsetattr',
+                    'mq_notify',
+                    'mq_timedreceive',
+                    'mq_timedsend',
+                    'msgrcv',
+                    'old_readdir',
+                    'perf_event_open',
+                    'prctl',
+                    'pread64',
+                    'preadv',
+                    'preadv2',
+                    'preadv64',
+                    'preadv64v2',
+                    'prlimit64',
+                    'ptrace',
+                    'pwrite64',
+                    'pwritev',
+                    'pwritev2',
+                    'pwritev64',
+                    'pwritev64v2',
+                    'read',
+                    'readahead',
+                    'readv',
+                    'recvfrom',
+                    'rt_sigaction',
+                    'rt_sigprocmask',
+                    'rt_sigtimedwait',
+                    'sched_getaffinity',
+                    'sched_getattr',
+                    'sched_getparam',
+                    'sched_getscheduler',
+                    'sched_rr_get_interval',
+                    'sched_setaffinity',
+                    'sched_setattr',
+                    'sched_setparam',
+                    'sched_setscheduler',
+                    'semtimedop',
+                    'sendfile',
+                    'sendfile64',
+                    'sendto',
+                    'setitimer',
+                    'setns',
+                    'setpgid',
+                    'setpriority',
+                    'setsid',
+                    'setsockopt',
+                    'shutdown',
+                    'sigaction',
+                    'sigaltstack',
+                    'signal',
+                    'signalfd4',
+                    'splice',
+                    'sync_file_range',
+                    'syncfs',
+                    'tee',
+                    'umount',
+                    'utime',
+                    'utimensat',
+                    'vfork',
+                    'vmsplice',
+                    'write',
+                    'writev']),
+ 'getegid': set(['capget',
+                 'clone',
+                 'fork',
+                 'get_robust_list',
+                 'getitimer',
+                 'getpgid',
+                 'getppid',
+                 'getpriority',
+                 'getrusage',
+                 'getsid',
+                 'ioprio_get',
+                 'ioprio_set',
+                 'keyctl',
+                 'kill',
+                 'migrate_pages',
+                 'move_pages',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'msgrcv',
+                 'perf_event_open',
+                 'prctl',
+                 'prlimit64',
+                 'ptrace',
+                 'rt_sigaction',
+                 'rt_sigprocmask',
+                 'rt_sigtimedwait',
+                 'sched_getaffinity',
+                 'sched_getattr',
+                 'sched_getparam',
+                 'sched_getscheduler',
+                 'sched_rr_get_interval',
+                 'sched_setaffinity',
+                 'sched_setattr',
+                 'sched_setparam',
+                 'sched_setscheduler',
+                 'semtimedop',
+                 'setitimer',
+                 'setns',
+                 'setpgid',
+                 'setpriority',
+                 'setsid',
+                 'sigaction',
+                 'sigaltstack',
+                 'signal',
+                 'umount',
+                 'vfork']),
+ 'getegid16': set(['capget',
+                   'clone',
+                   'fork',
+                   'get_robust_list',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getrusage',
+                   'getsid',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setsid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'vfork']),
+ 'geteuid': set(['capget',
+                 'clone',
+                 'fork',
+                 'get_robust_list',
+                 'getitimer',
+                 'getpgid',
+                 'getppid',
+                 'getpriority',
+                 'getrusage',
+                 'getsid',
+                 'ioprio_get',
+                 'ioprio_set',
+                 'keyctl',
+                 'kill',
+                 'migrate_pages',
+                 'move_pages',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'msgrcv',
+                 'perf_event_open',
+                 'prctl',
+                 'prlimit64',
+                 'ptrace',
+                 'rt_sigaction',
+                 'rt_sigprocmask',
+                 'rt_sigtimedwait',
+                 'sched_getaffinity',
+                 'sched_getattr',
+                 'sched_getparam',
+                 'sched_getscheduler',
+                 'sched_rr_get_interval',
+                 'sched_setaffinity',
+                 'sched_setattr',
+                 'sched_setparam',
+                 'sched_setscheduler',
+                 'semtimedop',
+                 'setitimer',
+                 'setns',
+                 'setpgid',
+                 'setpriority',
+                 'setsid',
+                 'sigaction',
+                 'sigaltstack',
+                 'signal',
+                 'umount',
+                 'vfork']),
+ 'geteuid16': set(['capget',
+                   'clone',
+                   'fork',
+                   'get_robust_list',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getrusage',
+                   'getsid',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setsid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'vfork']),
+ 'getgid': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'getgid16': set(['capget',
+                  'clone',
+                  'fork',
+                  'get_robust_list',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'perf_event_open',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'vfork']),
+ 'getgroups': set(['capget',
+                   'capset',
+                   'clone',
+                   'epoll_create1',
+                   'faccessat',
+                   'fork',
+                   'get_robust_list',
+                   'getgroups16',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getresgid',
+                   'getresgid16',
+                   'getresuid',
+                   'getresuid16',
+                   'getrusage',
+                   'getsid',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setfsgid',
+                   'setfsuid',
+                   'setgid',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setregid',
+                   'setresgid',
+                   'setresuid',
+                   'setreuid',
+                   'setsid',
+                   'setuid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'unshare',
+                   'vfork']),
+ 'getgroups16': set(['capget',
+                     'capset',
+                     'clone',
+                     'epoll_create1',
+                     'faccessat',
+                     'fork',
+                     'get_robust_list',
+                     'getgroups',
+                     'getitimer',
+                     'getpgid',
+                     'getppid',
+                     'getpriority',
+                     'getresgid',
+                     'getresgid16',
+                     'getresuid',
+                     'getresuid16',
+                     'getrusage',
+                     'getsid',
+                     'ioprio_get',
+                     'ioprio_set',
+                     'keyctl',
+                     'kill',
+                     'migrate_pages',
+                     'move_pages',
+                     'mq_timedreceive',
+                     'mq_timedsend',
+                     'msgrcv',
+                     'perf_event_open',
+                     'prctl',
+                     'prlimit64',
+                     'ptrace',
+                     'rt_sigaction',
+                     'rt_sigprocmask',
+                     'rt_sigtimedwait',
+                     'sched_getaffinity',
+                     'sched_getattr',
+                     'sched_getparam',
+                     'sched_getscheduler',
+                     'sched_rr_get_interval',
+                     'sched_setaffinity',
+                     'sched_setattr',
+                     'sched_setparam',
+                     'sched_setscheduler',
+                     'semtimedop',
+                     'setfsgid',
+                     'setfsuid',
+                     'setgid',
+                     'setgroups',
+                     'setgroups16',
+                     'setitimer',
+                     'setns',
+                     'setpgid',
+                     'setpriority',
+                     'setregid',
+                     'setresgid',
+                     'setresuid',
+                     'setreuid',
+                     'setsid',
+                     'setuid',
+                     'sigaction',
+                     'sigaltstack',
+                     'signal',
+                     'umount',
+                     'unshare',
+                     'vfork']),
+ 'getitimer': set(['exit_group', 'setitimer', 'timer_create']),
+ 'getppid': set(['capget',
+                 'clone',
+                 'fork',
+                 'get_robust_list',
+                 'getitimer',
+                 'getpgid',
+                 'getpriority',
+                 'getrusage',
+                 'getsid',
+                 'ioprio_get',
+                 'ioprio_set',
+                 'keyctl',
+                 'kill',
+                 'migrate_pages',
+                 'move_pages',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'msgrcv',
+                 'perf_event_open',
+                 'prctl',
+                 'prlimit64',
+                 'ptrace',
+                 'rt_sigaction',
+                 'rt_sigprocmask',
+                 'rt_sigtimedwait',
+                 'sched_getaffinity',
+                 'sched_getattr',
+                 'sched_getparam',
+                 'sched_getscheduler',
+                 'sched_rr_get_interval',
+                 'sched_setaffinity',
+                 'sched_setattr',
+                 'sched_setparam',
+                 'sched_setscheduler',
+                 'semtimedop',
+                 'setitimer',
+                 'setns',
+                 'setpgid',
+                 'setpriority',
+                 'setsid',
+                 'sigaction',
+                 'sigaltstack',
+                 'signal',
+                 'umount',
+                 'vfork']),
+ 'getpriority': set(['capget',
+                     'clone',
+                     'fork',
+                     'get_robust_list',
+                     'getitimer',
+                     'getpgid',
+                     'getppid',
+                     'getrusage',
+                     'getsid',
+                     'ioprio_get',
+                     'ioprio_set',
+                     'keyctl',
+                     'kill',
+                     'migrate_pages',
+                     'move_pages',
+                     'mq_timedreceive',
+                     'mq_timedsend',
+                     'msgrcv',
+                     'perf_event_open',
+                     'prctl',
+                     'prlimit64',
+                     'ptrace',
+                     'rt_sigaction',
+                     'rt_sigprocmask',
+                     'rt_sigtimedwait',
+                     'sched_getaffinity',
+                     'sched_getattr',
+                     'sched_getparam',
+                     'sched_getscheduler',
+                     'sched_rr_get_interval',
+                     'sched_setaffinity',
+                     'sched_setattr',
+                     'sched_setparam',
+                     'sched_setscheduler',
+                     'semtimedop',
+                     'setitimer',
+                     'setns',
+                     'setpgid',
+                     'setpriority',
+                     'setresuid',
+                     'setreuid',
+                     'setsid',
+                     'setuid',
+                     'sigaction',
+                     'sigaltstack',
+                     'signal',
+                     'umount',
+                     'vfork']),
+ 'getresgid': set(['capget',
+                   'clone',
+                   'fork',
+                   'get_robust_list',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getrusage',
+                   'getsid',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setsid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'vfork']),
+ 'getresgid16': set(['capget',
+                     'clone',
+                     'fork',
+                     'get_robust_list',
+                     'getitimer',
+                     'getpgid',
+                     'getppid',
+                     'getpriority',
+                     'getrusage',
+                     'getsid',
+                     'ioprio_get',
+                     'ioprio_set',
+                     'keyctl',
+                     'kill',
+                     'migrate_pages',
+                     'move_pages',
+                     'mq_timedreceive',
+                     'mq_timedsend',
+                     'msgrcv',
+                     'perf_event_open',
+                     'prctl',
+                     'prlimit64',
+                     'ptrace',
+                     'rt_sigaction',
+                     'rt_sigprocmask',
+                     'rt_sigtimedwait',
+                     'sched_getaffinity',
+                     'sched_getattr',
+                     'sched_getparam',
+                     'sched_getscheduler',
+                     'sched_rr_get_interval',
+                     'sched_setaffinity',
+                     'sched_setattr',
+                     'sched_setparam',
+                     'sched_setscheduler',
+                     'semtimedop',
+                     'setitimer',
+                     'setns',
+                     'setpgid',
+                     'setpriority',
+                     'setsid',
+                     'sigaction',
+                     'sigaltstack',
+                     'signal',
+                     'umount',
+                     'vfork']),
+ 'getresuid': set(['capget',
+                   'clone',
+                   'fork',
+                   'get_robust_list',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getrusage',
+                   'getsid',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setsid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'vfork']),
+ 'getresuid16': set(['capget',
+                     'clone',
+                     'fork',
+                     'get_robust_list',
+                     'getitimer',
+                     'getpgid',
+                     'getppid',
+                     'getpriority',
+                     'getrusage',
+                     'getsid',
+                     'ioprio_get',
+                     'ioprio_set',
+                     'keyctl',
+                     'kill',
+                     'migrate_pages',
+                     'move_pages',
+                     'mq_timedreceive',
+                     'mq_timedsend',
+                     'msgrcv',
+                     'perf_event_open',
+                     'prctl',
+                     'prlimit64',
+                     'ptrace',
+                     'rt_sigaction',
+                     'rt_sigprocmask',
+                     'rt_sigtimedwait',
+                     'sched_getaffinity',
+                     'sched_getattr',
+                     'sched_getparam',
+                     'sched_getscheduler',
+                     'sched_rr_get_interval',
+                     'sched_setaffinity',
+                     'sched_setattr',
+                     'sched_setparam',
+                     'sched_setscheduler',
+                     'semtimedop',
+                     'setitimer',
+                     'setns',
+                     'setpgid',
+                     'setpriority',
+                     'setsid',
+                     'sigaction',
+                     'sigaltstack',
+                     'signal',
+                     'umount',
+                     'vfork']),
+ 'getrlimit': set(['old_getrlimit', 'prlimit64', 'setrlimit']),
+ 'getrusage': set(['exit_group', 'timer_create']),
+ 'getsockopt': set(['accept4']),
+ 'getuid': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'getuid16': set(['capget',
+                  'clone',
+                  'fork',
+                  'get_robust_list',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'perf_event_open',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'vfork']),
+ 'getxattr': set(['accept4',
+                  'acct',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'eventfd2',
+                  'flock',
+                  'getcwd',
+                  'lookup_dcookie',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_open',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'pivot_root',
+                  'quotactl',
+                  'remap_file_pages',
+                  'setns',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'socket',
+                  'socketpair',
+                  'swapoff',
+                  'swapon',
+                  'unshare',
+                  'uselib']),
+ 'init_module': set(['delete_module', 'finit_module']),
+ 'inotify_add_watch': set(['accept4',
+                           'acct',
+                           'bind',
+                           'bpf',
+                           'connect',
+                           'copy_file_range',
+                           'dup',
+                           'dup3',
+                           'epoll_create1',
+                           'epoll_ctl',
+                           'epoll_wait',
+                           'eventfd2',
+                           'fallocate',
+                           'fchdir',
+                           'fchmod',
+                           'fchown',
+                           'fcntl',
+                           'fcntl64',
+                           'fdatasync',
+                           'fgetxattr',
+                           'flistxattr',
+                           'flock',
+                           'fremovexattr',
+                           'fsetxattr',
+                           'fstatfs',
+                           'fstatfs64',
+                           'fsync',
+                           'ftruncate',
+                           'futimesat',
+                           'getcwd',
+                           'getdents',
+                           'getdents64',
+                           'getpeername',
+                           'getsockname',
+                           'getsockopt',
+                           'inotify_rm_watch',
+                           'ioctl',
+                           'linkat',
+                           'listen',
+                           'llseek',
+                           'lseek',
+                           'memfd_create',
+                           'mkdirat',
+                           'mknodat',
+                           'mmap_pgoff',
+                           'mq_getsetattr',
+                           'mq_notify',
+                           'mq_open',
+                           'mq_timedreceive',
+                           'mq_timedsend',
+                           'mq_unlink',
+                           'old_readdir',
+                           'open',
+                           'open_by_handle_at',
+                           'openat',
+                           'perf_event_open',
+                           'pipe2',
+                           'pivot_root',
+                           'pread64',
+                           'preadv',
+                           'preadv2',
+                           'preadv64',
+                           'preadv64v2',
+                           'pwrite64',
+                           'pwritev',
+                           'pwritev2',
+                           'pwritev64',
+                           'pwritev64v2',
+                           'read',
+                           'readahead',
+                           'readv',
+                           'recvfrom',
+                           'remap_file_pages',
+                           'renameat2',
+                           'rmdir',
+                           'sendfile',
+                           'sendfile64',
+                           'sendto',
+                           'setns',
+                           'setsockopt',
+                           'shmat',
+                           'shmctl',
+                           'shmdt',
+                           'shutdown',
+                           'signalfd4',
+                           'socket',
+                           'socketpair',
+                           'splice',
+                           'swapoff',
+                           'swapon',
+                           'symlinkat',
+                           'sync_file_range',
+                           'syncfs',
+                           'tee',
+                           'unlink',
+                           'unlinkat',
+                           'uselib',
+                           'utime',
+                           'utimensat',
+                           'vmsplice',
+                           'write',
+                           'writev']),
+ 'inotify_init1': set(['capget',
+                       'clone',
+                       'fork',
+                       'get_robust_list',
+                       'getitimer',
+                       'getpgid',
+                       'getppid',
+                       'getpriority',
+                       'getrusage',
+                       'getsid',
+                       'inotify_add_watch',
+                       'inotify_rm_watch',
+                       'ioprio_get',
+                       'ioprio_set',
+                       'keyctl',
+                       'kill',
+                       'migrate_pages',
+                       'move_pages',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'msgrcv',
+                       'perf_event_open',
+                       'prctl',
+                       'prlimit64',
+                       'ptrace',
+                       'rt_sigaction',
+                       'rt_sigprocmask',
+                       'rt_sigtimedwait',
+                       'sched_getaffinity',
+                       'sched_getattr',
+                       'sched_getparam',
+                       'sched_getscheduler',
+                       'sched_rr_get_interval',
+                       'sched_setaffinity',
+                       'sched_setattr',
+                       'sched_setparam',
+                       'sched_setscheduler',
+                       'semtimedop',
+                       'setitimer',
+                       'setns',
+                       'setpgid',
+                       'setpriority',
+                       'setsid',
+                       'sigaction',
+                       'sigaltstack',
+                       'signal',
+                       'umount',
+                       'vfork']),
+ 'inotify_rm_watch': set(['accept4',
+                          'acct',
+                          'bind',
+                          'bpf',
+                          'connect',
+                          'copy_file_range',
+                          'dup',
+                          'dup3',
+                          'epoll_create1',
+                          'epoll_ctl',
+                          'epoll_wait',
+                          'eventfd2',
+                          'fallocate',
+                          'fchdir',
+                          'fchmod',
+                          'fchown',
+                          'fcntl',
+                          'fcntl64',
+                          'fdatasync',
+                          'fgetxattr',
+                          'flistxattr',
+                          'flock',
+                          'fremovexattr',
+                          'fsetxattr',
+                          'fstatfs',
+                          'fstatfs64',
+                          'fsync',
+                          'ftruncate',
+                          'futimesat',
+                          'getdents',
+                          'getdents64',
+                          'getpeername',
+                          'getsockname',
+                          'getsockopt',
+                          'inotify_add_watch',
+                          'ioctl',
+                          'listen',
+                          'llseek',
+                          'lseek',
+                          'memfd_create',
+                          'mmap_pgoff',
+                          'mq_getsetattr',
+                          'mq_notify',
+                          'mq_open',
+                          'mq_timedreceive',
+                          'mq_timedsend',
+                          'old_readdir',
+                          'open',
+                          'open_by_handle_at',
+                          'openat',
+                          'perf_event_open',
+                          'pipe2',
+                          'pread64',
+                          'preadv',
+                          'preadv2',
+                          'preadv64',
+                          'preadv64v2',
+                          'pwrite64',
+                          'pwritev',
+                          'pwritev2',
+                          'pwritev64',
+                          'pwritev64v2',
+                          'read',
+                          'readahead',
+                          'readv',
+                          'recvfrom',
+                          'remap_file_pages',
+                          'sendfile',
+                          'sendfile64',
+                          'sendto',
+                          'setns',
+                          'setsockopt',
+                          'shmat',
+                          'shmctl',
+                          'shmdt',
+                          'shutdown',
+                          'signalfd4',
+                          'socket',
+                          'socketpair',
+                          'splice',
+                          'swapoff',
+                          'swapon',
+                          'sync_file_range',
+                          'syncfs',
+                          'tee',
+                          'uselib',
+                          'utime',
+                          'utimensat',
+                          'vmsplice',
+                          'write',
+                          'writev']),
+ 'io_cancel': set(['brk',
+                   'get_mempolicy',
+                   'getrusage',
+                   'io_destroy',
+                   'io_getevents',
+                   'io_setup',
+                   'io_submit',
+                   'mbind',
+                   'migrate_pages',
+                   'mincore',
+                   'modify_ldt',
+                   'move_pages',
+                   'mremap',
+                   'prctl',
+                   'remap_file_pages',
+                   'shmdt',
+                   'swapoff']),
+ 'io_destroy': set(['brk',
+                    'get_mempolicy',
+                    'getrusage',
+                    'io_cancel',
+                    'io_getevents',
+                    'io_setup',
+                    'io_submit',
+                    'mbind',
+                    'migrate_pages',
+                    'mincore',
+                    'modify_ldt',
+                    'move_pages',
+                    'mremap',
+                    'prctl',
+                    'remap_file_pages',
+                    'shmdt',
+                    'swapoff']),
+ 'io_getevents': set(['brk',
+                      'capget',
+                      'clone',
+                      'fork',
+                      'get_mempolicy',
+                      'get_robust_list',
+                      'getitimer',
+                      'getpgid',
+                      'getppid',
+                      'getpriority',
+                      'getrusage',
+                      'getsid',
+                      'io_cancel',
+                      'io_destroy',
+                      'io_setup',
+                      'io_submit',
+                      'ioprio_get',
+                      'ioprio_set',
+                      'keyctl',
+                      'kill',
+                      'mbind',
+                      'migrate_pages',
+                      'mincore',
+                      'modify_ldt',
+                      'move_pages',
+                      'mq_timedreceive',
+                      'mq_timedsend',
+                      'mremap',
+                      'msgrcv',
+                      'perf_event_open',
+                      'prctl',
+                      'prlimit64',
+                      'ptrace',
+                      'remap_file_pages',
+                      'rt_sigaction',
+                      'rt_sigprocmask',
+                      'rt_sigtimedwait',
+                      'sched_getaffinity',
+                      'sched_getattr',
+                      'sched_getparam',
+                      'sched_getscheduler',
+                      'sched_rr_get_interval',
+                      'sched_setaffinity',
+                      'sched_setattr',
+                      'sched_setparam',
+                      'sched_setscheduler',
+                      'semtimedop',
+                      'setitimer',
+                      'setns',
+                      'setpgid',
+                      'setpriority',
+                      'setsid',
+                      'shmdt',
+                      'sigaction',
+                      'sigaltstack',
+                      'signal',
+                      'swapoff',
+                      'umount',
+                      'vfork']),
+ 'io_setup': set(['io_cancel', 'io_destroy', 'io_getevents', 'io_submit']),
+ 'io_submit': set(['capget',
+                   'clone',
+                   'fork',
+                   'get_robust_list',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getrusage',
+                   'getsid',
+                   'ioperm',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setsid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'vfork']),
+ 'ioctl': set(['accept4',
+               'bind',
+               'bpf',
+               'connect',
+               'copy_file_range',
+               'epoll_ctl',
+               'epoll_wait',
+               'fallocate',
+               'fchdir',
+               'fchmod',
+               'fchown',
+               'fcntl',
+               'fcntl64',
+               'fdatasync',
+               'fgetxattr',
+               'flistxattr',
+               'flock',
+               'fremovexattr',
+               'fsetxattr',
+               'fstatfs',
+               'fstatfs64',
+               'fsync',
+               'ftruncate',
+               'futimesat',
+               'getdents',
+               'getdents64',
+               'getpeername',
+               'getsockname',
+               'getsockopt',
+               'inotify_add_watch',
+               'inotify_rm_watch',
+               'listen',
+               'llseek',
+               'lseek',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'old_readdir',
+               'perf_event_open',
+               'pread64',
+               'preadv',
+               'preadv2',
+               'preadv64',
+               'preadv64v2',
+               'pwrite64',
+               'pwritev',
+               'pwritev2',
+               'pwritev64',
+               'pwritev64v2',
+               'read',
+               'readahead',
+               'readv',
+               'recvfrom',
+               'sendfile',
+               'sendfile64',
+               'sendto',
+               'setsockopt',
+               'shutdown',
+               'signalfd4',
+               'splice',
+               'sync_file_range',
+               'syncfs',
+               'tee',
+               'utime',
+               'utimensat',
+               'vmsplice',
+               'write',
+               'writev']),
+ 'ioperm': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'ioprio_get': set(['capget',
+                    'clone',
+                    'fork',
+                    'get_robust_list',
+                    'getitimer',
+                    'getpgid',
+                    'getppid',
+                    'getpriority',
+                    'getrusage',
+                    'getsid',
+                    'ioprio_set',
+                    'keyctl',
+                    'kill',
+                    'migrate_pages',
+                    'move_pages',
+                    'mq_timedreceive',
+                    'mq_timedsend',
+                    'msgrcv',
+                    'perf_event_open',
+                    'prctl',
+                    'prlimit64',
+                    'ptrace',
+                    'rt_sigaction',
+                    'rt_sigprocmask',
+                    'rt_sigtimedwait',
+                    'sched_getaffinity',
+                    'sched_getattr',
+                    'sched_getparam',
+                    'sched_getscheduler',
+                    'sched_rr_get_interval',
+                    'sched_setaffinity',
+                    'sched_setattr',
+                    'sched_setparam',
+                    'sched_setscheduler',
+                    'semtimedop',
+                    'setitimer',
+                    'setns',
+                    'setpgid',
+                    'setpriority',
+                    'setsid',
+                    'sigaction',
+                    'sigaltstack',
+                    'signal',
+                    'umount',
+                    'vfork']),
+ 'ioprio_set': set(['capget',
+                    'clone',
+                    'fork',
+                    'get_robust_list',
+                    'getitimer',
+                    'getpgid',
+                    'getppid',
+                    'getpriority',
+                    'getrusage',
+                    'getsid',
+                    'ioprio_get',
+                    'keyctl',
+                    'kill',
+                    'migrate_pages',
+                    'move_pages',
+                    'mq_timedreceive',
+                    'mq_timedsend',
+                    'msgrcv',
+                    'perf_event_open',
+                    'prctl',
+                    'prlimit64',
+                    'ptrace',
+                    'rt_sigaction',
+                    'rt_sigprocmask',
+                    'rt_sigtimedwait',
+                    'sched_getaffinity',
+                    'sched_getattr',
+                    'sched_getparam',
+                    'sched_getscheduler',
+                    'sched_rr_get_interval',
+                    'sched_setaffinity',
+                    'sched_setattr',
+                    'sched_setparam',
+                    'sched_setscheduler',
+                    'semtimedop',
+                    'setitimer',
+                    'setns',
+                    'setpgid',
+                    'setpriority',
+                    'setsid',
+                    'sigaction',
+                    'sigaltstack',
+                    'signal',
+                    'umount',
+                    'vfork']),
+ 'keyctl': set(['capget',
+                'capset',
+                'clone',
+                'epoll_create1',
+                'faccessat',
+                'fork',
+                'get_robust_list',
+                'getgroups',
+                'getgroups16',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getresgid',
+                'getresgid16',
+                'getresuid',
+                'getresuid16',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'request_key',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setfsgid',
+                'setfsuid',
+                'setgid',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setregid',
+                'setresgid',
+                'setresuid',
+                'setreuid',
+                'setsid',
+                'setuid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'unshare',
+                'vfork']),
+ 'kill': set(['capget',
+              'clone',
+              'fork',
+              'get_robust_list',
+              'getitimer',
+              'getpgid',
+              'getppid',
+              'getpriority',
+              'getrusage',
+              'getsid',
+              'ioprio_get',
+              'ioprio_set',
+              'keyctl',
+              'migrate_pages',
+              'move_pages',
+              'mq_timedreceive',
+              'mq_timedsend',
+              'msgrcv',
+              'perf_event_open',
+              'prctl',
+              'prlimit64',
+              'ptrace',
+              'rt_sigaction',
+              'rt_sigprocmask',
+              'rt_sigtimedwait',
+              'sched_getaffinity',
+              'sched_getattr',
+              'sched_getparam',
+              'sched_getscheduler',
+              'sched_rr_get_interval',
+              'sched_setaffinity',
+              'sched_setattr',
+              'sched_setparam',
+              'sched_setscheduler',
+              'semtimedop',
+              'setitimer',
+              'setns',
+              'setpgid',
+              'setpriority',
+              'setsid',
+              'sigaction',
+              'sigaltstack',
+              'signal',
+              'umount',
+              'vfork']),
+ 'lgetxattr': set(['accept4',
+                   'acct',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'eventfd2',
+                   'flock',
+                   'getcwd',
+                   'lookup_dcookie',
+                   'memfd_create',
+                   'mmap_pgoff',
+                   'mq_open',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'pivot_root',
+                   'quotactl',
+                   'remap_file_pages',
+                   'setns',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'socket',
+                   'socketpair',
+                   'swapoff',
+                   'swapon',
+                   'unshare',
+                   'uselib']),
+ 'linkat': set(['accept4',
+                'acct',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'eventfd2',
+                'flock',
+                'getcwd',
+                'lookup_dcookie',
+                'memfd_create',
+                'mmap_pgoff',
+                'mq_open',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'pivot_root',
+                'quotactl',
+                'remap_file_pages',
+                'setns',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'socket',
+                'socketpair',
+                'swapoff',
+                'swapon',
+                'unshare',
+                'uselib']),
+ 'listxattr': set(['accept4',
+                   'acct',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'eventfd2',
+                   'flock',
+                   'getcwd',
+                   'lookup_dcookie',
+                   'memfd_create',
+                   'mmap_pgoff',
+                   'mq_open',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'pivot_root',
+                   'quotactl',
+                   'remap_file_pages',
+                   'setns',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'socket',
+                   'socketpair',
+                   'swapoff',
+                   'swapon',
+                   'unshare',
+                   'uselib']),
+ 'llistxattr': set(['accept4',
+                    'acct',
+                    'dup',
+                    'dup3',
+                    'epoll_create1',
+                    'epoll_ctl',
+                    'eventfd2',
+                    'flock',
+                    'getcwd',
+                    'lookup_dcookie',
+                    'memfd_create',
+                    'mmap_pgoff',
+                    'mq_open',
+                    'open',
+                    'open_by_handle_at',
+                    'openat',
+                    'perf_event_open',
+                    'pipe2',
+                    'pivot_root',
+                    'quotactl',
+                    'remap_file_pages',
+                    'setns',
+                    'shmat',
+                    'shmctl',
+                    'shmdt',
+                    'socket',
+                    'socketpair',
+                    'swapoff',
+                    'swapon',
+                    'unshare',
+                    'uselib']),
+ 'llseek': set(['accept4',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'epoll_ctl',
+                'epoll_wait',
+                'fallocate',
+                'fchdir',
+                'fchmod',
+                'fchown',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'lseek',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'perf_event_open',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setsockopt',
+                'shutdown',
+                'signalfd4',
+                'splice',
+                'sync_file_range',
+                'syncfs',
+                'tee',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'lremovexattr': set(['accept4',
+                      'acct',
+                      'dup',
+                      'dup3',
+                      'epoll_create1',
+                      'epoll_ctl',
+                      'eventfd2',
+                      'flock',
+                      'getcwd',
+                      'lookup_dcookie',
+                      'memfd_create',
+                      'mmap_pgoff',
+                      'mq_open',
+                      'open',
+                      'open_by_handle_at',
+                      'openat',
+                      'perf_event_open',
+                      'pipe2',
+                      'pivot_root',
+                      'quotactl',
+                      'remap_file_pages',
+                      'setns',
+                      'shmat',
+                      'shmctl',
+                      'shmdt',
+                      'socket',
+                      'socketpair',
+                      'swapoff',
+                      'swapon',
+                      'unshare',
+                      'uselib']),
+ 'lseek': set(['accept4',
+               'bind',
+               'bpf',
+               'connect',
+               'copy_file_range',
+               'epoll_ctl',
+               'epoll_wait',
+               'fallocate',
+               'fchdir',
+               'fchmod',
+               'fchown',
+               'fcntl',
+               'fcntl64',
+               'fdatasync',
+               'fgetxattr',
+               'flistxattr',
+               'flock',
+               'fremovexattr',
+               'fsetxattr',
+               'fstatfs',
+               'fstatfs64',
+               'fsync',
+               'ftruncate',
+               'futimesat',
+               'getdents',
+               'getdents64',
+               'getpeername',
+               'getsockname',
+               'getsockopt',
+               'inotify_add_watch',
+               'inotify_rm_watch',
+               'ioctl',
+               'listen',
+               'llseek',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'old_readdir',
+               'perf_event_open',
+               'pread64',
+               'preadv',
+               'preadv2',
+               'preadv64',
+               'preadv64v2',
+               'pwrite64',
+               'pwritev',
+               'pwritev2',
+               'pwritev64',
+               'pwritev64v2',
+               'read',
+               'readahead',
+               'readv',
+               'recvfrom',
+               'sendfile',
+               'sendfile64',
+               'sendto',
+               'setsockopt',
+               'shutdown',
+               'signalfd4',
+               'splice',
+               'sync_file_range',
+               'syncfs',
+               'tee',
+               'utime',
+               'utimensat',
+               'vmsplice',
+               'write',
+               'writev']),
+ 'lsetxattr': set(['accept4',
+                   'acct',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'eventfd2',
+                   'flock',
+                   'getcwd',
+                   'lookup_dcookie',
+                   'memfd_create',
+                   'mmap_pgoff',
+                   'mq_open',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'pivot_root',
+                   'quotactl',
+                   'remap_file_pages',
+                   'setns',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'socket',
+                   'socketpair',
+                   'swapoff',
+                   'swapon',
+                   'unshare',
+                   'uselib']),
+ 'lstat': set(['fstat', 'newfstat', 'stat']),
+ 'madvise': set(['brk',
+                 'get_mempolicy',
+                 'mincore',
+                 'mlockall',
+                 'mprotect',
+                 'mremap',
+                 'munlock',
+                 'munlockall',
+                 'pkey_mprotect',
+                 'prctl',
+                 'remap_file_pages',
+                 'shmdt']),
+ 'migrate_pages': set(['capget',
+                       'clone',
+                       'fork',
+                       'get_robust_list',
+                       'getitimer',
+                       'getpgid',
+                       'getppid',
+                       'getpriority',
+                       'getrusage',
+                       'getsid',
+                       'ioperm',
+                       'ioprio_get',
+                       'ioprio_set',
+                       'keyctl',
+                       'kill',
+                       'move_pages',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'msgrcv',
+                       'perf_event_open',
+                       'prctl',
+                       'prlimit64',
+                       'ptrace',
+                       'rt_sigaction',
+                       'rt_sigprocmask',
+                       'rt_sigtimedwait',
+                       'sched_getaffinity',
+                       'sched_getattr',
+                       'sched_getparam',
+                       'sched_getscheduler',
+                       'sched_rr_get_interval',
+                       'sched_setaffinity',
+                       'sched_setattr',
+                       'sched_setparam',
+                       'sched_setscheduler',
+                       'semtimedop',
+                       'setitimer',
+                       'setns',
+                       'setpgid',
+                       'setpriority',
+                       'setresuid',
+                       'setreuid',
+                       'setsid',
+                       'setuid',
+                       'sigaction',
+                       'sigaltstack',
+                       'signal',
+                       'umount',
+                       'vfork']),
+ 'mincore': set(['brk',
+                 'capget',
+                 'clone',
+                 'fork',
+                 'get_mempolicy',
+                 'get_robust_list',
+                 'getitimer',
+                 'getpgid',
+                 'getppid',
+                 'getpriority',
+                 'getrusage',
+                 'getsid',
+                 'ioperm',
+                 'ioprio_get',
+                 'ioprio_set',
+                 'keyctl',
+                 'kill',
+                 'madvise',
+                 'migrate_pages',
+                 'mlockall',
+                 'move_pages',
+                 'mprotect',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'mremap',
+                 'msgrcv',
+                 'munlock',
+                 'munlockall',
+                 'perf_event_open',
+                 'pkey_mprotect',
+                 'prctl',
+                 'prlimit64',
+                 'ptrace',
+                 'remap_file_pages',
+                 'rt_sigaction',
+                 'rt_sigprocmask',
+                 'rt_sigtimedwait',
+                 'sched_getaffinity',
+                 'sched_getattr',
+                 'sched_getparam',
+                 'sched_getscheduler',
+                 'sched_rr_get_interval',
+                 'sched_setaffinity',
+                 'sched_setattr',
+                 'sched_setparam',
+                 'sched_setscheduler',
+                 'semtimedop',
+                 'setitimer',
+                 'setns',
+                 'setpgid',
+                 'setpriority',
+                 'setsid',
+                 'shmdt',
+                 'sigaction',
+                 'sigaltstack',
+                 'signal',
+                 'umount',
+                 'vfork']),
+ 'mkdirat': set(['quotactl', 'swapon', 'syncfs', 'umount', 'ustat']),
+ 'mknodat': set(['quotactl', 'swapon', 'syncfs', 'umount', 'ustat']),
+ 'mlock': set(['capget',
+               'clone',
+               'fork',
+               'get_robust_list',
+               'getitimer',
+               'getpgid',
+               'getppid',
+               'getpriority',
+               'getrusage',
+               'getsid',
+               'ioprio_get',
+               'ioprio_set',
+               'keyctl',
+               'kill',
+               'migrate_pages',
+               'move_pages',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'msgrcv',
+               'perf_event_open',
+               'prctl',
+               'prlimit64',
+               'ptrace',
+               'rt_sigaction',
+               'rt_sigprocmask',
+               'rt_sigtimedwait',
+               'sched_getaffinity',
+               'sched_getattr',
+               'sched_getparam',
+               'sched_getscheduler',
+               'sched_rr_get_interval',
+               'sched_setaffinity',
+               'sched_setattr',
+               'sched_setparam',
+               'sched_setscheduler',
+               'semtimedop',
+               'setitimer',
+               'setns',
+               'setpgid',
+               'setpriority',
+               'setsid',
+               'sigaction',
+               'sigaltstack',
+               'signal',
+               'umount',
+               'vfork']),
+ 'mlock2': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'mlockall': set(['brk',
+                  'capget',
+                  'clone',
+                  'fork',
+                  'get_mempolicy',
+                  'get_robust_list',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'io_cancel',
+                  'io_destroy',
+                  'io_getevents',
+                  'io_setup',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'madvise',
+                  'mbind',
+                  'migrate_pages',
+                  'mincore',
+                  'modify_ldt',
+                  'move_pages',
+                  'mprotect',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'mremap',
+                  'msgrcv',
+                  'munlock',
+                  'munlockall',
+                  'perf_event_open',
+                  'personality',
+                  'pkey_mprotect',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'remap_file_pages',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'shmdt',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'swapoff',
+                  'umount',
+                  'vfork']),
+ 'mmap_pgoff': set(['accept4',
+                    'acct',
+                    'dup',
+                    'dup3',
+                    'epoll_create1',
+                    'epoll_ctl',
+                    'eventfd2',
+                    'flock',
+                    'memfd_create',
+                    'mq_open',
+                    'open',
+                    'open_by_handle_at',
+                    'openat',
+                    'perf_event_open',
+                    'pipe2',
+                    'remap_file_pages',
+                    'setns',
+                    'shmat',
+                    'shmctl',
+                    'shmdt',
+                    'socket',
+                    'socketpair',
+                    'swapoff',
+                    'swapon',
+                    'uselib']),
+ 'modify_ldt': set(['brk',
+                    'get_mempolicy',
+                    'get_thread_area',
+                    'getrusage',
+                    'io_cancel',
+                    'io_destroy',
+                    'io_getevents',
+                    'io_setup',
+                    'mbind',
+                    'migrate_pages',
+                    'mincore',
+                    'move_pages',
+                    'mremap',
+                    'prctl',
+                    'remap_file_pages',
+                    'set_thread_area',
+                    'shmdt',
+                    'swapoff']),
+ 'mount': set(['capget',
+               'clone',
+               'fork',
+               'get_robust_list',
+               'getitimer',
+               'getpgid',
+               'getppid',
+               'getpriority',
+               'getrusage',
+               'getsid',
+               'ioprio_get',
+               'ioprio_set',
+               'keyctl',
+               'kill',
+               'migrate_pages',
+               'move_pages',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'msgrcv',
+               'perf_event_open',
+               'personality',
+               'prctl',
+               'prlimit64',
+               'ptrace',
+               'rt_sigaction',
+               'rt_sigprocmask',
+               'rt_sigtimedwait',
+               'sched_getaffinity',
+               'sched_getattr',
+               'sched_getparam',
+               'sched_getscheduler',
+               'sched_rr_get_interval',
+               'sched_setaffinity',
+               'sched_setattr',
+               'sched_setparam',
+               'sched_setscheduler',
+               'semtimedop',
+               'setitimer',
+               'setns',
+               'setpgid',
+               'setpriority',
+               'setsid',
+               'sigaction',
+               'sigaltstack',
+               'signal',
+               'umount',
+               'vfork']),
+ 'mprotect': set(['brk',
+                  'capget',
+                  'clone',
+                  'fork',
+                  'get_mempolicy',
+                  'get_robust_list',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'madvise',
+                  'migrate_pages',
+                  'mincore',
+                  'mlockall',
+                  'move_pages',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'mremap',
+                  'msgrcv',
+                  'munlock',
+                  'munlockall',
+                  'perf_event_open',
+                  'personality',
+                  'pkey_mprotect',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'remap_file_pages',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'shmdt',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'vfork']),
+ 'mq_getsetattr': set(['accept4',
+                       'acct',
+                       'dup',
+                       'dup3',
+                       'epoll_create1',
+                       'epoll_ctl',
+                       'eventfd2',
+                       'flock',
+                       'memfd_create',
+                       'mmap_pgoff',
+                       'mq_notify',
+                       'mq_open',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'open',
+                       'open_by_handle_at',
+                       'openat',
+                       'perf_event_open',
+                       'pipe2',
+                       'remap_file_pages',
+                       'setns',
+                       'shmat',
+                       'shmctl',
+                       'shmdt',
+                       'socket',
+                       'socketpair',
+                       'swapoff',
+                       'swapon',
+                       'uselib']),
+ 'mq_notify': set(['accept4',
+                   'acct',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'eventfd2',
+                   'flock',
+                   'memfd_create',
+                   'mmap_pgoff',
+                   'mq_getsetattr',
+                   'mq_open',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'remap_file_pages',
+                   'rt_sigqueueinfo',
+                   'rt_sigreturn',
+                   'rt_sigtimedwait',
+                   'rt_tgsigqueueinfo',
+                   'setns',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'socket',
+                   'socketpair',
+                   'swapoff',
+                   'swapon',
+                   'tgkill',
+                   'timer_create',
+                   'tkill',
+                   'uselib']),
+ 'mq_open': set(['accept4',
+                 'acct',
+                 'dup',
+                 'dup3',
+                 'epoll_create1',
+                 'epoll_ctl',
+                 'eventfd2',
+                 'flock',
+                 'getcwd',
+                 'lookup_dcookie',
+                 'memfd_create',
+                 'mmap_pgoff',
+                 'mq_unlink',
+                 'open',
+                 'open_by_handle_at',
+                 'openat',
+                 'perf_event_open',
+                 'pipe2',
+                 'pivot_root',
+                 'quotactl',
+                 'remap_file_pages',
+                 'renameat2',
+                 'rmdir',
+                 'setns',
+                 'shmat',
+                 'shmctl',
+                 'shmdt',
+                 'socket',
+                 'socketpair',
+                 'swapoff',
+                 'swapon',
+                 'symlinkat',
+                 'sysfs',
+                 'unlink',
+                 'unlinkat',
+                 'unshare',
+                 'uselib']),
+ 'mq_timedreceive': set(['accept4',
+                         'acct',
+                         'dup',
+                         'dup3',
+                         'epoll_create1',
+                         'epoll_ctl',
+                         'eventfd2',
+                         'flock',
+                         'memfd_create',
+                         'mmap_pgoff',
+                         'mq_getsetattr',
+                         'mq_notify',
+                         'mq_open',
+                         'mq_timedsend',
+                         'msgrcv',
+                         'msgsnd',
+                         'open',
+                         'open_by_handle_at',
+                         'openat',
+                         'perf_event_open',
+                         'pipe2',
+                         'remap_file_pages',
+                         'setns',
+                         'shmat',
+                         'shmctl',
+                         'shmdt',
+                         'socket',
+                         'socketpair',
+                         'swapoff',
+                         'swapon',
+                         'uselib']),
+ 'mq_timedsend': set(['accept4',
+                      'acct',
+                      'dup',
+                      'dup3',
+                      'epoll_create1',
+                      'epoll_ctl',
+                      'eventfd2',
+                      'flock',
+                      'memfd_create',
+                      'mmap_pgoff',
+                      'mq_getsetattr',
+                      'mq_notify',
+                      'mq_open',
+                      'mq_timedreceive',
+                      'open',
+                      'open_by_handle_at',
+                      'openat',
+                      'perf_event_open',
+                      'pipe2',
+                      'remap_file_pages',
+                      'setns',
+                      'shmat',
+                      'shmctl',
+                      'shmdt',
+                      'socket',
+                      'socketpair',
+                      'swapoff',
+                      'swapon',
+                      'uselib']),
+ 'mremap': set(['brk',
+                'capget',
+                'clone',
+                'fork',
+                'get_mempolicy',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'io_cancel',
+                'io_destroy',
+                'io_getevents',
+                'io_setup',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'madvise',
+                'mbind',
+                'migrate_pages',
+                'mincore',
+                'mlockall',
+                'modify_ldt',
+                'move_pages',
+                'mprotect',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'munlock',
+                'munlockall',
+                'perf_event_open',
+                'personality',
+                'pkey_mprotect',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'remap_file_pages',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'shmdt',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'swapoff',
+                'umount',
+                'vfork']),
+ 'msgctl': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioperm',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_open',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'mq_unlink',
+                'msgget',
+                'msgrcv',
+                'msgsnd',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semctl',
+                'semget',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'shmat',
+                'shmctl',
+                'shmget',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'msgrcv': set(['mq_timedreceive', 'mq_timedsend', 'msgsnd']),
+ 'msgsnd': set(['mq_open',
+                'mq_unlink',
+                'msgctl',
+                'msgget',
+                'msgrcv',
+                'semctl',
+                'semget',
+                'semtimedop',
+                'setns',
+                'shmat',
+                'shmctl',
+                'shmget']),
+ 'msync': set(['brk',
+               'get_mempolicy',
+               'madvise',
+               'mincore',
+               'mlockall',
+               'mprotect',
+               'mremap',
+               'munlock',
+               'munlockall',
+               'pkey_mprotect',
+               'prctl',
+               'remap_file_pages',
+               'shmdt']),
+ 'munlock': set(['brk',
+                 'capget',
+                 'clone',
+                 'fork',
+                 'get_mempolicy',
+                 'get_robust_list',
+                 'getitimer',
+                 'getpgid',
+                 'getppid',
+                 'getpriority',
+                 'getrusage',
+                 'getsid',
+                 'ioprio_get',
+                 'ioprio_set',
+                 'keyctl',
+                 'kill',
+                 'madvise',
+                 'migrate_pages',
+                 'mincore',
+                 'mlockall',
+                 'move_pages',
+                 'mprotect',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'mremap',
+                 'msgrcv',
+                 'munlockall',
+                 'perf_event_open',
+                 'pkey_mprotect',
+                 'prctl',
+                 'prlimit64',
+                 'ptrace',
+                 'remap_file_pages',
+                 'rt_sigaction',
+                 'rt_sigprocmask',
+                 'rt_sigtimedwait',
+                 'sched_getaffinity',
+                 'sched_getattr',
+                 'sched_getparam',
+                 'sched_getscheduler',
+                 'sched_rr_get_interval',
+                 'sched_setaffinity',
+                 'sched_setattr',
+                 'sched_setparam',
+                 'sched_setscheduler',
+                 'semtimedop',
+                 'setitimer',
+                 'setns',
+                 'setpgid',
+                 'setpriority',
+                 'setsid',
+                 'shmdt',
+                 'sigaction',
+                 'sigaltstack',
+                 'signal',
+                 'umount',
+                 'vfork']),
+ 'munlockall': set(['brk',
+                    'get_mempolicy',
+                    'madvise',
+                    'mincore',
+                    'mlockall',
+                    'mprotect',
+                    'mremap',
+                    'munlock',
+                    'pkey_mprotect',
+                    'prctl',
+                    'remap_file_pages',
+                    'shmdt']),
+ 'name_to_handle_at': set(['accept4',
+                           'acct',
+                           'dup',
+                           'dup3',
+                           'epoll_create1',
+                           'epoll_ctl',
+                           'eventfd2',
+                           'flock',
+                           'getcwd',
+                           'lookup_dcookie',
+                           'memfd_create',
+                           'mmap_pgoff',
+                           'mq_open',
+                           'open',
+                           'open_by_handle_at',
+                           'openat',
+                           'perf_event_open',
+                           'pipe2',
+                           'pivot_root',
+                           'quotactl',
+                           'remap_file_pages',
+                           'setns',
+                           'shmat',
+                           'shmctl',
+                           'shmdt',
+                           'socket',
+                           'socketpair',
+                           'swapoff',
+                           'swapon',
+                           'syncfs',
+                           'umount',
+                           'unshare',
+                           'uselib',
+                           'ustat']),
+ 'nanosleep': set(['clock_nanosleep',
+                   'epoll_wait',
+                   'faccessat',
+                   'fchmod',
+                   'fchmodat',
+                   'fchown',
+                   'fchownat',
+                   'fstat',
+                   'ftruncate',
+                   'futex',
+                   'futimesat',
+                   'inotify_add_watch',
+                   'io_getevents',
+                   'ioctl',
+                   'linkat',
+                   'memfd_create',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'mq_unlink',
+                   'newfstat',
+                   'poll',
+                   'ppoll',
+                   'pselect6',
+                   'readlinkat',
+                   'recvmmsg',
+                   'rt_sigtimedwait',
+                   'sched_rr_get_interval',
+                   'select',
+                   'semtimedop',
+                   'sendfile',
+                   'sendfile64',
+                   'settimeofday',
+                   'stime',
+                   'swapoff',
+                   'swapon',
+                   'timer_gettime',
+                   'timer_settime',
+                   'timerfd_gettime',
+                   'timerfd_settime',
+                   'unlink',
+                   'unlinkat',
+                   'uselib',
+                   'utime']),
+ 'newfstat': set(['fstat', 'newfstatat', 'newlstat', 'newstat']),
+ 'newfstatat': set(['fstat', 'newfstat', 'newlstat', 'newstat']),
+ 'newlstat': set(['fstat', 'newfstat', 'newfstatat', 'newstat']),
+ 'newstat': set(['fstat', 'newfstat', 'newfstatat', 'newlstat']),
+ 'newuname': set(['capget',
+                  'clone',
+                  'fork',
+                  'get_robust_list',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'perf_event_open',
+                  'personality',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'vfork']),
+ 'old_getrlimit': set(['prlimit64', 'setrlimit']),
+ 'old_readdir': set(['accept4',
+                     'bind',
+                     'bpf',
+                     'connect',
+                     'copy_file_range',
+                     'epoll_ctl',
+                     'epoll_wait',
+                     'fallocate',
+                     'fchdir',
+                     'fchmod',
+                     'fchown',
+                     'fcntl',
+                     'fcntl64',
+                     'fdatasync',
+                     'fgetxattr',
+                     'flistxattr',
+                     'flock',
+                     'fremovexattr',
+                     'fsetxattr',
+                     'fstatfs',
+                     'fstatfs64',
+                     'fsync',
+                     'ftruncate',
+                     'futimesat',
+                     'getdents',
+                     'getdents64',
+                     'getpeername',
+                     'getsockname',
+                     'getsockopt',
+                     'inotify_add_watch',
+                     'inotify_rm_watch',
+                     'ioctl',
+                     'listen',
+                     'llseek',
+                     'lseek',
+                     'mq_getsetattr',
+                     'mq_notify',
+                     'mq_timedreceive',
+                     'mq_timedsend',
+                     'perf_event_open',
+                     'pread64',
+                     'preadv',
+                     'preadv2',
+                     'preadv64',
+                     'preadv64v2',
+                     'pwrite64',
+                     'pwritev',
+                     'pwritev2',
+                     'pwritev64',
+                     'pwritev64v2',
+                     'read',
+                     'readahead',
+                     'readv',
+                     'recvfrom',
+                     'sendfile',
+                     'sendfile64',
+                     'sendto',
+                     'setsockopt',
+                     'shutdown',
+                     'signalfd4',
+                     'splice',
+                     'sync_file_range',
+                     'syncfs',
+                     'tee',
+                     'utime',
+                     'utimensat',
+                     'vmsplice',
+                     'write',
+                     'writev']),
+ 'olduname': set(['capget',
+                  'clone',
+                  'fork',
+                  'get_robust_list',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'ioperm',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'perf_event_open',
+                  'personality',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'vfork']),
+ 'open_by_handle_at': set(['accept4',
+                           'acct',
+                           'dup',
+                           'dup3',
+                           'epoll_create1',
+                           'epoll_ctl',
+                           'eventfd2',
+                           'flock',
+                           'getcwd',
+                           'lookup_dcookie',
+                           'memfd_create',
+                           'mmap_pgoff',
+                           'mq_open',
+                           'open',
+                           'openat',
+                           'perf_event_open',
+                           'pipe2',
+                           'pivot_root',
+                           'quotactl',
+                           'remap_file_pages',
+                           'setns',
+                           'shmat',
+                           'shmctl',
+                           'shmdt',
+                           'socket',
+                           'socketpair',
+                           'swapoff',
+                           'swapon',
+                           'unshare',
+                           'uselib']),
+ 'perf_event_open': set(['accept4',
+                         'acct',
+                         'bind',
+                         'bpf',
+                         'brk',
+                         'capget',
+                         'clone',
+                         'connect',
+                         'copy_file_range',
+                         'delete_module',
+                         'dup',
+                         'dup2',
+                         'dup3',
+                         'epoll_create1',
+                         'epoll_ctl',
+                         'epoll_wait',
+                         'eventfd2',
+                         'exit_group',
+                         'faccessat',
+                         'fallocate',
+                         'fchdir',
+                         'fchmod',
+                         'fchmodat',
+                         'fchown',
+                         'fchownat',
+                         'fcntl',
+                         'fcntl64',
+                         'fdatasync',
+                         'fgetxattr',
+                         'finit_module',
+                         'flistxattr',
+                         'flock',
+                         'fork',
+                         'fremovexattr',
+                         'fsetxattr',
+                         'fstatfs',
+                         'fstatfs64',
+                         'fsync',
+                         'ftruncate',
+                         'futimesat',
+                         'get_curr_temp',
+                         'get_mempolicy',
+                         'get_robust_list',
+                         'get_trip_temp',
+                         'getcwd',
+                         'getdents',
+                         'getdents64',
+                         'getgroups',
+                         'getgroups16',
+                         'getitimer',
+                         'getpeername',
+                         'getpgid',
+                         'getppid',
+                         'getpriority',
+                         'getrusage',
+                         'getsid',
+                         'getsockname',
+                         'getsockopt',
+                         'init_module',
+                         'inotify_add_watch',
+                         'inotify_init1',
+                         'inotify_rm_watch',
+                         'io_cancel',
+                         'io_destroy',
+                         'io_getevents',
+                         'io_setup',
+                         'io_submit',
+                         'ioctl',
+                         'ioperm',
+                         'ioprio_get',
+                         'ioprio_set',
+                         'kexec_load',
+                         'keyctl',
+                         'kill',
+                         'linkat',
+                         'listen',
+                         'llseek',
+                         'lookup_dcookie',
+                         'lseek',
+                         'madvise',
+                         'mbind',
+                         'memfd_create',
+                         'migrate_pages',
+                         'mincore',
+                         'mkdirat',
+                         'mknodat',
+                         'mlockall',
+                         'mmap_pgoff',
+                         'modify_ldt',
+                         'move_pages',
+                         'mprotect',
+                         'mq_getsetattr',
+                         'mq_notify',
+                         'mq_open',
+                         'mq_timedreceive',
+                         'mq_timedsend',
+                         'mq_unlink',
+                         'mremap',
+                         'msgctl',
+                         'msgrcv',
+                         'msgsnd',
+                         'munlock',
+                         'munlockall',
+                         'old_readdir',
+                         'open',
+                         'open_by_handle_at',
+                         'openat',
+                         'pipe2',
+                         'pivot_root',
+                         'pkey_mprotect',
+                         'prctl',
+                         'pread64',
+                         'preadv',
+                         'preadv2',
+                         'preadv64',
+                         'preadv64v2',
+                         'prlimit64',
+                         'ptrace',
+                         'pwrite64',
+                         'pwritev',
+                         'pwritev2',
+                         'pwritev64',
+                         'pwritev64v2',
+                         'quotactl',
+                         'read',
+                         'readahead',
+                         'readlinkat',
+                         'readv',
+                         'reboot',
+                         'recvfrom',
+                         'remap_file_pages',
+                         'renameat2',
+                         'request_key',
+                         'rmdir',
+                         'rt_sigaction',
+                         'rt_sigprocmask',
+                         'rt_sigtimedwait',
+                         'sched_getaffinity',
+                         'sched_getattr',
+                         'sched_getparam',
+                         'sched_getscheduler',
+                         'sched_rr_get_interval',
+                         'sched_setaffinity',
+                         'sched_setattr',
+                         'sched_setparam',
+                         'sched_setscheduler',
+                         'sched_yield',
+                         'semctl',
+                         'semtimedop',
+                         'sendfile',
+                         'sendfile64',
+                         'sendto',
+                         'set_trip_temp',
+                         'setgid',
+                         'setgroups',
+                         'setgroups16',
+                         'setitimer',
+                         'setns',
+                         'setpgid',
+                         'setpriority',
+                         'setregid',
+                         'setresgid',
+                         'setresuid',
+                         'setreuid',
+                         'setsid',
+                         'setsockopt',
+                         'setuid',
+                         'shmat',
+                         'shmctl',
+                         'shmdt',
+                         'shutdown',
+                         'sigaction',
+                         'sigaltstack',
+                         'signal',
+                         'signalfd4',
+                         'socket',
+                         'socketpair',
+                         'splice',
+                         'swapoff',
+                         'swapon',
+                         'symlinkat',
+                         'sync_file_range',
+                         'syncfs',
+                         'tee',
+                         'timer_create',
+                         'timer_delete',
+                         'timer_getoverrun',
+                         'timer_gettime',
+                         'timer_settime',
+                         'timerfd_create',
+                         'timerfd_gettime',
+                         'timerfd_settime',
+                         'umount',
+                         'unlink',
+                         'unlinkat',
+                         'unshare',
+                         'uselib',
+                         'ustat',
+                         'utime',
+                         'utimensat',
+                         'vfork',
+                         'vmsplice',
+                         'write',
+                         'writev']),
+ 'pivot_root': set(['accept4',
+                    'acct',
+                    'dup',
+                    'dup3',
+                    'epoll_create1',
+                    'epoll_ctl',
+                    'eventfd2',
+                    'flock',
+                    'ftruncate',
+                    'getcwd',
+                    'linkat',
+                    'lookup_dcookie',
+                    'memfd_create',
+                    'mkdirat',
+                    'mknodat',
+                    'mmap_pgoff',
+                    'mq_open',
+                    'mq_unlink',
+                    'open',
+                    'open_by_handle_at',
+                    'openat',
+                    'perf_event_open',
+                    'pipe2',
+                    'quotactl',
+                    'remap_file_pages',
+                    'renameat2',
+                    'rmdir',
+                    'setns',
+                    'shmat',
+                    'shmctl',
+                    'shmdt',
+                    'socket',
+                    'socketpair',
+                    'swapoff',
+                    'swapon',
+                    'symlinkat',
+                    'umount',
+                    'unlink',
+                    'unlinkat',
+                    'unshare',
+                    'uselib']),
+ 'pkey_alloc': set(['brk',
+                    'get_mempolicy',
+                    'getrusage',
+                    'io_cancel',
+                    'io_destroy',
+                    'io_getevents',
+                    'io_setup',
+                    'mbind',
+                    'migrate_pages',
+                    'mincore',
+                    'modify_ldt',
+                    'move_pages',
+                    'mremap',
+                    'pkey_free',
+                    'prctl',
+                    'remap_file_pages',
+                    'shmdt',
+                    'swapoff']),
+ 'pkey_mprotect': set(['brk',
+                       'capget',
+                       'clone',
+                       'fork',
+                       'get_mempolicy',
+                       'get_robust_list',
+                       'getitimer',
+                       'getpgid',
+                       'getppid',
+                       'getpriority',
+                       'getrusage',
+                       'getsid',
+                       'ioprio_get',
+                       'ioprio_set',
+                       'keyctl',
+                       'kill',
+                       'madvise',
+                       'migrate_pages',
+                       'mincore',
+                       'mlockall',
+                       'move_pages',
+                       'mprotect',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'mremap',
+                       'msgrcv',
+                       'munlock',
+                       'munlockall',
+                       'perf_event_open',
+                       'personality',
+                       'prctl',
+                       'prlimit64',
+                       'ptrace',
+                       'remap_file_pages',
+                       'rt_sigaction',
+                       'rt_sigprocmask',
+                       'rt_sigtimedwait',
+                       'sched_getaffinity',
+                       'sched_getattr',
+                       'sched_getparam',
+                       'sched_getscheduler',
+                       'sched_rr_get_interval',
+                       'sched_setaffinity',
+                       'sched_setattr',
+                       'sched_setparam',
+                       'sched_setscheduler',
+                       'semtimedop',
+                       'setitimer',
+                       'setns',
+                       'setpgid',
+                       'setpriority',
+                       'setsid',
+                       'shmdt',
+                       'sigaction',
+                       'sigaltstack',
+                       'signal',
+                       'umount',
+                       'vfork']),
+ 'poll': set(['ppoll']),
+ 'ppoll': set(['capget',
+               'clock_nanosleep',
+               'clone',
+               'epoll_wait',
+               'faccessat',
+               'fchmod',
+               'fchmodat',
+               'fchown',
+               'fchownat',
+               'fork',
+               'fstat',
+               'ftruncate',
+               'futex',
+               'futimesat',
+               'get_robust_list',
+               'getitimer',
+               'getpgid',
+               'getppid',
+               'getpriority',
+               'getrusage',
+               'getsid',
+               'inotify_add_watch',
+               'io_getevents',
+               'ioctl',
+               'ioprio_get',
+               'ioprio_set',
+               'keyctl',
+               'kill',
+               'linkat',
+               'memfd_create',
+               'migrate_pages',
+               'move_pages',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'mq_unlink',
+               'msgrcv',
+               'nanosleep',
+               'newfstat',
+               'perf_event_open',
+               'personality',
+               'poll',
+               'prctl',
+               'prlimit64',
+               'pselect6',
+               'ptrace',
+               'readlinkat',
+               'recvmmsg',
+               'rt_sigaction',
+               'rt_sigprocmask',
+               'rt_sigtimedwait',
+               'sched_getaffinity',
+               'sched_getattr',
+               'sched_getparam',
+               'sched_getscheduler',
+               'sched_rr_get_interval',
+               'sched_setaffinity',
+               'sched_setattr',
+               'sched_setparam',
+               'sched_setscheduler',
+               'select',
+               'semtimedop',
+               'sendfile',
+               'sendfile64',
+               'setitimer',
+               'setns',
+               'setpgid',
+               'setpriority',
+               'setsid',
+               'settimeofday',
+               'sigaction',
+               'sigaltstack',
+               'signal',
+               'stime',
+               'swapoff',
+               'swapon',
+               'timer_gettime',
+               'timer_settime',
+               'timerfd_gettime',
+               'timerfd_settime',
+               'umount',
+               'unlink',
+               'unlinkat',
+               'uselib',
+               'utime',
+               'vfork']),
+ 'prctl': set(['brk',
+               'capget',
+               'clone',
+               'fork',
+               'get_mempolicy',
+               'get_robust_list',
+               'getitimer',
+               'getpgid',
+               'getppid',
+               'getpriority',
+               'getrusage',
+               'getsid',
+               'io_cancel',
+               'io_destroy',
+               'io_getevents',
+               'io_setup',
+               'ioprio_get',
+               'ioprio_set',
+               'keyctl',
+               'kill',
+               'mbind',
+               'migrate_pages',
+               'mincore',
+               'modify_ldt',
+               'move_pages',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'mremap',
+               'msgrcv',
+               'perf_event_open',
+               'personality',
+               'prlimit64',
+               'ptrace',
+               'remap_file_pages',
+               'rt_sigaction',
+               'rt_sigprocmask',
+               'rt_sigtimedwait',
+               'sched_getaffinity',
+               'sched_getattr',
+               'sched_getparam',
+               'sched_getscheduler',
+               'sched_rr_get_interval',
+               'sched_setaffinity',
+               'sched_setattr',
+               'sched_setparam',
+               'sched_setscheduler',
+               'semtimedop',
+               'setitimer',
+               'setns',
+               'setpgid',
+               'setpriority',
+               'setresuid',
+               'setreuid',
+               'setsid',
+               'setuid',
+               'shmdt',
+               'sigaction',
+               'sigaltstack',
+               'signal',
+               'swapoff',
+               'umount',
+               'vfork']),
+ 'pread64': set(['accept4',
+                 'acct',
+                 'bind',
+                 'bpf',
+                 'connect',
+                 'copy_file_range',
+                 'dup',
+                 'dup3',
+                 'epoll_create1',
+                 'epoll_ctl',
+                 'epoll_wait',
+                 'eventfd2',
+                 'fallocate',
+                 'fchdir',
+                 'fchmod',
+                 'fchown',
+                 'fcntl',
+                 'fcntl64',
+                 'fdatasync',
+                 'fgetxattr',
+                 'flistxattr',
+                 'flock',
+                 'fremovexattr',
+                 'fsetxattr',
+                 'fstatfs',
+                 'fstatfs64',
+                 'fsync',
+                 'ftruncate',
+                 'futimesat',
+                 'getdents',
+                 'getdents64',
+                 'getpeername',
+                 'getsockname',
+                 'getsockopt',
+                 'inotify_add_watch',
+                 'inotify_rm_watch',
+                 'ioctl',
+                 'listen',
+                 'llseek',
+                 'lseek',
+                 'memfd_create',
+                 'mmap_pgoff',
+                 'mq_getsetattr',
+                 'mq_notify',
+                 'mq_open',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'old_readdir',
+                 'open',
+                 'open_by_handle_at',
+                 'openat',
+                 'perf_event_open',
+                 'pipe2',
+                 'preadv',
+                 'preadv2',
+                 'preadv64',
+                 'preadv64v2',
+                 'pwrite64',
+                 'pwritev',
+                 'pwritev2',
+                 'pwritev64',
+                 'pwritev64v2',
+                 'read',
+                 'readahead',
+                 'readv',
+                 'recvfrom',
+                 'remap_file_pages',
+                 'sendfile',
+                 'sendfile64',
+                 'sendto',
+                 'setns',
+                 'setsockopt',
+                 'shmat',
+                 'shmctl',
+                 'shmdt',
+                 'shutdown',
+                 'signalfd4',
+                 'socket',
+                 'socketpair',
+                 'splice',
+                 'swapoff',
+                 'swapon',
+                 'sync_file_range',
+                 'syncfs',
+                 'tee',
+                 'uselib',
+                 'utime',
+                 'utimensat',
+                 'vmsplice',
+                 'write',
+                 'writev']),
+ 'preadv': set(['accept4',
+                'acct',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'eventfd2',
+                'flock',
+                'memfd_create',
+                'mmap_pgoff',
+                'mq_open',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'remap_file_pages',
+                'setns',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'socket',
+                'socketpair',
+                'swapoff',
+                'swapon',
+                'uselib']),
+ 'preadv2': set(['accept4',
+                 'acct',
+                 'dup',
+                 'dup3',
+                 'epoll_create1',
+                 'epoll_ctl',
+                 'eventfd2',
+                 'flock',
+                 'memfd_create',
+                 'mmap_pgoff',
+                 'mq_open',
+                 'open',
+                 'open_by_handle_at',
+                 'openat',
+                 'perf_event_open',
+                 'pipe2',
+                 'remap_file_pages',
+                 'setns',
+                 'shmat',
+                 'shmctl',
+                 'shmdt',
+                 'socket',
+                 'socketpair',
+                 'swapoff',
+                 'swapon',
+                 'uselib']),
+ 'preadv64': set(['accept4',
+                  'acct',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'eventfd2',
+                  'flock',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_open',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'remap_file_pages',
+                  'setns',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'socket',
+                  'socketpair',
+                  'swapoff',
+                  'swapon',
+                  'uselib']),
+ 'preadv64v2': set(['accept4',
+                    'acct',
+                    'dup',
+                    'dup3',
+                    'epoll_create1',
+                    'epoll_ctl',
+                    'eventfd2',
+                    'flock',
+                    'memfd_create',
+                    'mmap_pgoff',
+                    'mq_open',
+                    'open',
+                    'open_by_handle_at',
+                    'openat',
+                    'perf_event_open',
+                    'pipe2',
+                    'remap_file_pages',
+                    'setns',
+                    'shmat',
+                    'shmctl',
+                    'shmdt',
+                    'socket',
+                    'socketpair',
+                    'swapoff',
+                    'swapon',
+                    'uselib']),
+ 'prlimit64': set(['capget',
+                   'capset',
+                   'clone',
+                   'epoll_create1',
+                   'faccessat',
+                   'fork',
+                   'get_robust_list',
+                   'getgroups',
+                   'getgroups16',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getresgid',
+                   'getresgid16',
+                   'getresuid',
+                   'getresuid16',
+                   'getrusage',
+                   'getsid',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'old_getrlimit',
+                   'perf_event_open',
+                   'prctl',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setfsgid',
+                   'setfsuid',
+                   'setgid',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setregid',
+                   'setresgid',
+                   'setresuid',
+                   'setreuid',
+                   'setrlimit',
+                   'setsid',
+                   'setuid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'unshare',
+                   'vfork']),
+ 'pselect6': set(['capget',
+                  'clock_nanosleep',
+                  'clone',
+                  'epoll_wait',
+                  'faccessat',
+                  'fchmod',
+                  'fchmodat',
+                  'fchown',
+                  'fchownat',
+                  'fork',
+                  'fstat',
+                  'ftruncate',
+                  'futex',
+                  'futimesat',
+                  'get_robust_list',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'inotify_add_watch',
+                  'io_getevents',
+                  'ioctl',
+                  'ioperm',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'linkat',
+                  'memfd_create',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_getsetattr',
+                  'mq_notify',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'mq_unlink',
+                  'msgrcv',
+                  'nanosleep',
+                  'newfstat',
+                  'perf_event_open',
+                  'poll',
+                  'ppoll',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'readlinkat',
+                  'recvmmsg',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'select',
+                  'semtimedop',
+                  'sendfile',
+                  'sendfile64',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'settimeofday',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'stime',
+                  'swapoff',
+                  'swapon',
+                  'timer_gettime',
+                  'timer_settime',
+                  'timerfd_gettime',
+                  'timerfd_settime',
+                  'umount',
+                  'unlink',
+                  'unlinkat',
+                  'uselib',
+                  'utime',
+                  'vfork']),
+ 'ptrace': set(['capget',
+                'clone',
+                'epoll_wait',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'pause',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigsuspend',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setresuid',
+                'setreuid',
+                'setsid',
+                'setuid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'sigsuspend',
+                'umount',
+                'vfork']),
+ 'pwrite64': set(['accept4',
+                  'acct',
+                  'bind',
+                  'bpf',
+                  'connect',
+                  'copy_file_range',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'epoll_wait',
+                  'eventfd2',
+                  'fallocate',
+                  'fchdir',
+                  'fchmod',
+                  'fchown',
+                  'fcntl',
+                  'fcntl64',
+                  'fdatasync',
+                  'fgetxattr',
+                  'flistxattr',
+                  'flock',
+                  'fremovexattr',
+                  'fsetxattr',
+                  'fstatfs',
+                  'fstatfs64',
+                  'fsync',
+                  'ftruncate',
+                  'futimesat',
+                  'getdents',
+                  'getdents64',
+                  'getpeername',
+                  'getsockname',
+                  'getsockopt',
+                  'inotify_add_watch',
+                  'inotify_rm_watch',
+                  'ioctl',
+                  'listen',
+                  'llseek',
+                  'lseek',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_getsetattr',
+                  'mq_notify',
+                  'mq_open',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'old_readdir',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'pread64',
+                  'preadv',
+                  'preadv2',
+                  'preadv64',
+                  'preadv64v2',
+                  'pwritev',
+                  'pwritev2',
+                  'pwritev64',
+                  'pwritev64v2',
+                  'read',
+                  'readahead',
+                  'readv',
+                  'recvfrom',
+                  'remap_file_pages',
+                  'sendfile',
+                  'sendfile64',
+                  'sendto',
+                  'setns',
+                  'setsockopt',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'shutdown',
+                  'signalfd4',
+                  'socket',
+                  'socketpair',
+                  'splice',
+                  'swapoff',
+                  'swapon',
+                  'sync_file_range',
+                  'syncfs',
+                  'tee',
+                  'uselib',
+                  'utime',
+                  'utimensat',
+                  'vmsplice',
+                  'write',
+                  'writev']),
+ 'pwritev': set(['accept4',
+                 'acct',
+                 'dup',
+                 'dup3',
+                 'epoll_create1',
+                 'epoll_ctl',
+                 'eventfd2',
+                 'flock',
+                 'memfd_create',
+                 'mmap_pgoff',
+                 'mq_open',
+                 'open',
+                 'open_by_handle_at',
+                 'openat',
+                 'perf_event_open',
+                 'pipe2',
+                 'remap_file_pages',
+                 'setns',
+                 'shmat',
+                 'shmctl',
+                 'shmdt',
+                 'socket',
+                 'socketpair',
+                 'swapoff',
+                 'swapon',
+                 'uselib']),
+ 'pwritev2': set(['accept4',
+                  'acct',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'eventfd2',
+                  'flock',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_open',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'remap_file_pages',
+                  'setns',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'socket',
+                  'socketpair',
+                  'swapoff',
+                  'swapon',
+                  'uselib']),
+ 'pwritev64': set(['accept4',
+                   'acct',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'eventfd2',
+                   'flock',
+                   'memfd_create',
+                   'mmap_pgoff',
+                   'mq_open',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'remap_file_pages',
+                   'setns',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'socket',
+                   'socketpair',
+                   'swapoff',
+                   'swapon',
+                   'uselib']),
+ 'pwritev64v2': set(['accept4',
+                     'acct',
+                     'dup',
+                     'dup3',
+                     'epoll_create1',
+                     'epoll_ctl',
+                     'eventfd2',
+                     'flock',
+                     'memfd_create',
+                     'mmap_pgoff',
+                     'mq_open',
+                     'open',
+                     'open_by_handle_at',
+                     'openat',
+                     'perf_event_open',
+                     'pipe2',
+                     'remap_file_pages',
+                     'setns',
+                     'shmat',
+                     'shmctl',
+                     'shmdt',
+                     'socket',
+                     'socketpair',
+                     'swapoff',
+                     'swapon',
+                     'uselib']),
+ 'quotactl': set(['acct',
+                  'mq_open',
+                  'mq_unlink',
+                  'open',
+                  'openat',
+                  'renameat2',
+                  'rmdir',
+                  'swapoff',
+                  'swapon',
+                  'symlinkat',
+                  'syncfs',
+                  'sysfs',
+                  'umount',
+                  'unlink',
+                  'unlinkat',
+                  'uselib',
+                  'ustat']),
+ 'read': set(['accept4',
+              'bind',
+              'bpf',
+              'connect',
+              'copy_file_range',
+              'epoll_ctl',
+              'epoll_wait',
+              'fallocate',
+              'fchdir',
+              'fchmod',
+              'fchown',
+              'fcntl',
+              'fcntl64',
+              'fdatasync',
+              'fgetxattr',
+              'flistxattr',
+              'flock',
+              'fremovexattr',
+              'fsetxattr',
+              'fstatfs',
+              'fstatfs64',
+              'fsync',
+              'ftruncate',
+              'futimesat',
+              'getdents',
+              'getdents64',
+              'getpeername',
+              'getsockname',
+              'getsockopt',
+              'inotify_add_watch',
+              'inotify_rm_watch',
+              'ioctl',
+              'listen',
+              'llseek',
+              'lseek',
+              'mq_getsetattr',
+              'mq_notify',
+              'mq_timedreceive',
+              'mq_timedsend',
+              'old_readdir',
+              'perf_event_open',
+              'pread64',
+              'preadv',
+              'preadv2',
+              'preadv64',
+              'preadv64v2',
+              'pwrite64',
+              'pwritev',
+              'pwritev2',
+              'pwritev64',
+              'pwritev64v2',
+              'readahead',
+              'readv',
+              'recvfrom',
+              'sendfile',
+              'sendfile64',
+              'sendto',
+              'setsockopt',
+              'shutdown',
+              'signalfd4',
+              'splice',
+              'sync_file_range',
+              'syncfs',
+              'tee',
+              'utime',
+              'utimensat',
+              'vmsplice',
+              'write',
+              'writev']),
+ 'readahead': set(['accept4',
+                   'acct',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'eventfd2',
+                   'faccessat',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchmodat',
+                   'fchown',
+                   'fchownat',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'linkat',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'memfd_create',
+                   'mmap_pgoff',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_open',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'mq_unlink',
+                   'old_readdir',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readlinkat',
+                   'readv',
+                   'recvfrom',
+                   'remap_file_pages',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setns',
+                   'setsockopt',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'shutdown',
+                   'signalfd4',
+                   'socket',
+                   'socketpair',
+                   'splice',
+                   'swapoff',
+                   'swapon',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'unlink',
+                   'unlinkat',
+                   'uselib',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'readlinkat': set(['accept4',
+                    'acct',
+                    'dup',
+                    'dup3',
+                    'epoll_create1',
+                    'epoll_ctl',
+                    'eventfd2',
+                    'flock',
+                    'getcwd',
+                    'lookup_dcookie',
+                    'memfd_create',
+                    'mmap_pgoff',
+                    'mq_open',
+                    'open',
+                    'open_by_handle_at',
+                    'openat',
+                    'perf_event_open',
+                    'pipe2',
+                    'pivot_root',
+                    'quotactl',
+                    'remap_file_pages',
+                    'setns',
+                    'shmat',
+                    'shmctl',
+                    'shmdt',
+                    'socket',
+                    'socketpair',
+                    'swapoff',
+                    'swapon',
+                    'unshare',
+                    'uselib']),
+ 'reboot': set(['acct', 'perf_event_open', 'setns']),
+ 'recvfrom': set(['accept4',
+                  'acct',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'eventfd2',
+                  'flock',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_getsetattr',
+                  'mq_open',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'remap_file_pages',
+                  'setns',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'socket',
+                  'socketpair',
+                  'swapoff',
+                  'swapon',
+                  'uselib']),
+ 'recvmmsg': set(['accept4',
+                  'bind',
+                  'clock_nanosleep',
+                  'connect',
+                  'epoll_wait',
+                  'faccessat',
+                  'fchmod',
+                  'fchmodat',
+                  'fchown',
+                  'fchownat',
+                  'fstat',
+                  'ftruncate',
+                  'futex',
+                  'futimesat',
+                  'getpeername',
+                  'getsockname',
+                  'getsockopt',
+                  'inotify_add_watch',
+                  'io_getevents',
+                  'ioctl',
+                  'linkat',
+                  'listen',
+                  'memfd_create',
+                  'mq_getsetattr',
+                  'mq_notify',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'mq_unlink',
+                  'nanosleep',
+                  'newfstat',
+                  'poll',
+                  'ppoll',
+                  'pselect6',
+                  'readlinkat',
+                  'recvfrom',
+                  'recvmsg',
+                  'rt_sigtimedwait',
+                  'sched_rr_get_interval',
+                  'select',
+                  'semtimedop',
+                  'sendfile',
+                  'sendfile64',
+                  'sendmmsg',
+                  'sendmsg',
+                  'sendto',
+                  'setsockopt',
+                  'settimeofday',
+                  'shutdown',
+                  'stime',
+                  'swapoff',
+                  'swapon',
+                  'timer_gettime',
+                  'timer_settime',
+                  'timerfd_gettime',
+                  'timerfd_settime',
+                  'unlink',
+                  'unlinkat',
+                  'uselib',
+                  'utime']),
+ 'recvmsg': set(['accept4',
+                 'bind',
+                 'connect',
+                 'getpeername',
+                 'getsockname',
+                 'getsockopt',
+                 'listen',
+                 'recvfrom',
+                 'recvmmsg',
+                 'sendmmsg',
+                 'sendmsg',
+                 'sendto',
+                 'setsockopt',
+                 'shutdown']),
+ 'remap_file_pages': set(['brk',
+                          'get_mempolicy',
+                          'madvise',
+                          'mincore',
+                          'mlockall',
+                          'mprotect',
+                          'mremap',
+                          'munlock',
+                          'munlockall',
+                          'pkey_mprotect',
+                          'prctl',
+                          'shmdt']),
+ 'removexattr': set(['accept4',
+                     'acct',
+                     'dup',
+                     'dup3',
+                     'epoll_create1',
+                     'epoll_ctl',
+                     'eventfd2',
+                     'flock',
+                     'getcwd',
+                     'lookup_dcookie',
+                     'memfd_create',
+                     'mmap_pgoff',
+                     'mq_open',
+                     'open',
+                     'open_by_handle_at',
+                     'openat',
+                     'perf_event_open',
+                     'pipe2',
+                     'pivot_root',
+                     'quotactl',
+                     'remap_file_pages',
+                     'setns',
+                     'shmat',
+                     'shmctl',
+                     'shmdt',
+                     'socket',
+                     'socketpair',
+                     'swapoff',
+                     'swapon',
+                     'unshare',
+                     'uselib']),
+ 'renameat2': set(['accept4',
+                   'acct',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'eventfd2',
+                   'flock',
+                   'ftruncate',
+                   'getcwd',
+                   'linkat',
+                   'lookup_dcookie',
+                   'memfd_create',
+                   'mkdirat',
+                   'mknodat',
+                   'mmap_pgoff',
+                   'mq_open',
+                   'mq_unlink',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'pivot_root',
+                   'quotactl',
+                   'remap_file_pages',
+                   'rmdir',
+                   'setns',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'socket',
+                   'socketpair',
+                   'swapoff',
+                   'swapon',
+                   'symlinkat',
+                   'sysfs',
+                   'unlink',
+                   'unlinkat',
+                   'unshare',
+                   'uselib']),
+ 'rmdir': set(['accept4',
+               'acct',
+               'dup',
+               'dup3',
+               'epoll_create1',
+               'epoll_ctl',
+               'eventfd2',
+               'flock',
+               'ftruncate',
+               'getcwd',
+               'linkat',
+               'lookup_dcookie',
+               'memfd_create',
+               'mkdirat',
+               'mknodat',
+               'mmap_pgoff',
+               'mq_open',
+               'mq_unlink',
+               'open',
+               'open_by_handle_at',
+               'openat',
+               'perf_event_open',
+               'pipe2',
+               'pivot_root',
+               'quotactl',
+               'remap_file_pages',
+               'renameat2',
+               'setns',
+               'shmat',
+               'shmctl',
+               'shmdt',
+               'socket',
+               'socketpair',
+               'swapoff',
+               'swapon',
+               'symlinkat',
+               'unlink',
+               'unlinkat',
+               'unshare',
+               'uselib']),
+ 'rt_sigqueueinfo': set(['kill',
+                         'rt_sigreturn',
+                         'rt_sigtimedwait',
+                         'rt_tgsigqueueinfo',
+                         'tgkill',
+                         'timer_create',
+                         'tkill']),
+ 'rt_sigreturn': set(['capget',
+                      'clone',
+                      'fork',
+                      'get_robust_list',
+                      'getitimer',
+                      'getpgid',
+                      'getppid',
+                      'getpriority',
+                      'getrusage',
+                      'getsid',
+                      'ioperm',
+                      'ioprio_get',
+                      'ioprio_set',
+                      'keyctl',
+                      'kill',
+                      'migrate_pages',
+                      'move_pages',
+                      'mq_timedreceive',
+                      'mq_timedsend',
+                      'msgrcv',
+                      'perf_event_open',
+                      'prctl',
+                      'prlimit64',
+                      'ptrace',
+                      'rt_sigaction',
+                      'rt_sigprocmask',
+                      'rt_sigtimedwait',
+                      'sched_getaffinity',
+                      'sched_getattr',
+                      'sched_getparam',
+                      'sched_getscheduler',
+                      'sched_rr_get_interval',
+                      'sched_setaffinity',
+                      'sched_setattr',
+                      'sched_setparam',
+                      'sched_setscheduler',
+                      'semtimedop',
+                      'setitimer',
+                      'setns',
+                      'setpgid',
+                      'setpriority',
+                      'setsid',
+                      'sigaction',
+                      'sigaltstack',
+                      'signal',
+                      'umount',
+                      'vfork']),
+ 'rt_sigtimedwait': set(['capget',
+                         'clone',
+                         'fork',
+                         'get_robust_list',
+                         'getitimer',
+                         'getpgid',
+                         'getppid',
+                         'getpriority',
+                         'getrusage',
+                         'getsid',
+                         'ioperm',
+                         'ioprio_get',
+                         'ioprio_set',
+                         'keyctl',
+                         'kill',
+                         'migrate_pages',
+                         'move_pages',
+                         'mq_timedreceive',
+                         'mq_timedsend',
+                         'msgrcv',
+                         'perf_event_open',
+                         'prctl',
+                         'prlimit64',
+                         'ptrace',
+                         'rt_sigaction',
+                         'rt_sigprocmask',
+                         'rt_sigqueueinfo',
+                         'rt_sigreturn',
+                         'rt_tgsigqueueinfo',
+                         'sched_getaffinity',
+                         'sched_getattr',
+                         'sched_getparam',
+                         'sched_getscheduler',
+                         'sched_rr_get_interval',
+                         'sched_setaffinity',
+                         'sched_setattr',
+                         'sched_setparam',
+                         'sched_setscheduler',
+                         'semtimedop',
+                         'setitimer',
+                         'setns',
+                         'setpgid',
+                         'setpriority',
+                         'setsid',
+                         'sigaction',
+                         'sigaltstack',
+                         'signal',
+                         'tgkill',
+                         'timer_create',
+                         'tkill',
+                         'umount',
+                         'vfork']),
+ 'rt_tgsigqueueinfo': set(['kill',
+                           'rt_sigqueueinfo',
+                           'rt_sigreturn',
+                           'rt_sigtimedwait',
+                           'tgkill',
+                           'timer_create',
+                           'tkill']),
+ 'sched_getattr': set(['capget',
+                       'clone',
+                       'fork',
+                       'get_robust_list',
+                       'getitimer',
+                       'getpgid',
+                       'getppid',
+                       'getpriority',
+                       'getrusage',
+                       'getsid',
+                       'ioperm',
+                       'ioprio_get',
+                       'ioprio_set',
+                       'keyctl',
+                       'kill',
+                       'migrate_pages',
+                       'move_pages',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'msgrcv',
+                       'perf_event_open',
+                       'prctl',
+                       'prlimit64',
+                       'ptrace',
+                       'rt_sigaction',
+                       'rt_sigprocmask',
+                       'rt_sigtimedwait',
+                       'sched_getaffinity',
+                       'sched_getparam',
+                       'sched_getscheduler',
+                       'sched_rr_get_interval',
+                       'sched_setaffinity',
+                       'sched_setattr',
+                       'sched_setparam',
+                       'sched_setscheduler',
+                       'semtimedop',
+                       'setitimer',
+                       'setns',
+                       'setpgid',
+                       'setpriority',
+                       'setsid',
+                       'sigaction',
+                       'sigaltstack',
+                       'signal',
+                       'umount',
+                       'vfork']),
+ 'sched_getparam': set(['capget',
+                        'clone',
+                        'fork',
+                        'get_robust_list',
+                        'getitimer',
+                        'getpgid',
+                        'getppid',
+                        'getpriority',
+                        'getrusage',
+                        'getsid',
+                        'ioprio_get',
+                        'ioprio_set',
+                        'keyctl',
+                        'kill',
+                        'migrate_pages',
+                        'move_pages',
+                        'mq_timedreceive',
+                        'mq_timedsend',
+                        'msgrcv',
+                        'perf_event_open',
+                        'prctl',
+                        'prlimit64',
+                        'ptrace',
+                        'rt_sigaction',
+                        'rt_sigprocmask',
+                        'rt_sigtimedwait',
+                        'sched_getaffinity',
+                        'sched_getattr',
+                        'sched_getscheduler',
+                        'sched_rr_get_interval',
+                        'sched_setaffinity',
+                        'sched_setattr',
+                        'sched_setparam',
+                        'sched_setscheduler',
+                        'semtimedop',
+                        'setitimer',
+                        'setns',
+                        'setpgid',
+                        'setpriority',
+                        'setsid',
+                        'sigaction',
+                        'sigaltstack',
+                        'signal',
+                        'umount',
+                        'vfork']),
+ 'sched_getscheduler': set(['capget',
+                            'clone',
+                            'fork',
+                            'get_robust_list',
+                            'getitimer',
+                            'getpgid',
+                            'getppid',
+                            'getpriority',
+                            'getrusage',
+                            'getsid',
+                            'ioprio_get',
+                            'ioprio_set',
+                            'keyctl',
+                            'kill',
+                            'migrate_pages',
+                            'move_pages',
+                            'mq_timedreceive',
+                            'mq_timedsend',
+                            'msgrcv',
+                            'perf_event_open',
+                            'prctl',
+                            'prlimit64',
+                            'ptrace',
+                            'rt_sigaction',
+                            'rt_sigprocmask',
+                            'rt_sigtimedwait',
+                            'sched_getaffinity',
+                            'sched_getattr',
+                            'sched_getparam',
+                            'sched_rr_get_interval',
+                            'sched_setaffinity',
+                            'sched_setattr',
+                            'sched_setparam',
+                            'sched_setscheduler',
+                            'semtimedop',
+                            'setitimer',
+                            'setns',
+                            'setpgid',
+                            'setpriority',
+                            'setsid',
+                            'sigaction',
+                            'sigaltstack',
+                            'signal',
+                            'umount',
+                            'vfork']),
+ 'sched_setaffinity': set(['capget',
+                           'capset',
+                           'clone',
+                           'epoll_create1',
+                           'faccessat',
+                           'fork',
+                           'get_robust_list',
+                           'getgroups',
+                           'getgroups16',
+                           'getitimer',
+                           'getpgid',
+                           'getppid',
+                           'getpriority',
+                           'getresgid',
+                           'getresgid16',
+                           'getresuid',
+                           'getresuid16',
+                           'getrusage',
+                           'getsid',
+                           'ioprio_get',
+                           'ioprio_set',
+                           'keyctl',
+                           'kill',
+                           'migrate_pages',
+                           'move_pages',
+                           'mq_timedreceive',
+                           'mq_timedsend',
+                           'msgrcv',
+                           'perf_event_open',
+                           'prctl',
+                           'prlimit64',
+                           'ptrace',
+                           'rt_sigaction',
+                           'rt_sigprocmask',
+                           'rt_sigtimedwait',
+                           'sched_getaffinity',
+                           'sched_getattr',
+                           'sched_getparam',
+                           'sched_getscheduler',
+                           'sched_rr_get_interval',
+                           'sched_setattr',
+                           'sched_setparam',
+                           'sched_setscheduler',
+                           'semtimedop',
+                           'setfsgid',
+                           'setfsuid',
+                           'setgid',
+                           'setitimer',
+                           'setns',
+                           'setpgid',
+                           'setpriority',
+                           'setregid',
+                           'setresgid',
+                           'setresuid',
+                           'setreuid',
+                           'setsid',
+                           'setuid',
+                           'sigaction',
+                           'sigaltstack',
+                           'signal',
+                           'umount',
+                           'unshare',
+                           'vfork']),
+ 'sched_setattr': set(['capget',
+                       'clone',
+                       'fork',
+                       'get_robust_list',
+                       'getitimer',
+                       'getpgid',
+                       'getppid',
+                       'getpriority',
+                       'getrusage',
+                       'getsid',
+                       'ioperm',
+                       'ioprio_get',
+                       'ioprio_set',
+                       'keyctl',
+                       'kill',
+                       'migrate_pages',
+                       'move_pages',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'msgrcv',
+                       'perf_event_open',
+                       'prctl',
+                       'prlimit64',
+                       'ptrace',
+                       'rt_sigaction',
+                       'rt_sigprocmask',
+                       'rt_sigtimedwait',
+                       'sched_getaffinity',
+                       'sched_getattr',
+                       'sched_getparam',
+                       'sched_getscheduler',
+                       'sched_rr_get_interval',
+                       'sched_setaffinity',
+                       'sched_setparam',
+                       'sched_setscheduler',
+                       'semtimedop',
+                       'setitimer',
+                       'setns',
+                       'setpgid',
+                       'setpriority',
+                       'setsid',
+                       'sigaction',
+                       'sigaltstack',
+                       'signal',
+                       'umount',
+                       'vfork']),
+ 'select': set(['capget',
+                'clock_nanosleep',
+                'clone',
+                'dup2',
+                'dup3',
+                'epoll_wait',
+                'faccessat',
+                'fchmod',
+                'fchmodat',
+                'fchown',
+                'fchownat',
+                'fork',
+                'fstat',
+                'ftruncate',
+                'futex',
+                'futimesat',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'inotify_add_watch',
+                'io_getevents',
+                'ioctl',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'linkat',
+                'memfd_create',
+                'migrate_pages',
+                'move_pages',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'mq_unlink',
+                'msgrcv',
+                'nanosleep',
+                'newfstat',
+                'perf_event_open',
+                'personality',
+                'poll',
+                'ppoll',
+                'prctl',
+                'prlimit64',
+                'pselect6',
+                'ptrace',
+                'readlinkat',
+                'recvmmsg',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'sendfile',
+                'sendfile64',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'settimeofday',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'stime',
+                'swapoff',
+                'swapon',
+                'timer_gettime',
+                'timer_settime',
+                'timerfd_gettime',
+                'timerfd_settime',
+                'umount',
+                'unlink',
+                'unlinkat',
+                'unshare',
+                'uselib',
+                'utime',
+                'vfork']),
+ 'semctl': set(['semtimedop']),
+ 'semtimedop': set(['accept4',
+                    'acct',
+                    'bpf',
+                    'brk',
+                    'capget',
+                    'clock_nanosleep',
+                    'clone',
+                    'delete_module',
+                    'dup',
+                    'dup2',
+                    'dup3',
+                    'epoll_create1',
+                    'epoll_ctl',
+                    'epoll_wait',
+                    'eventfd2',
+                    'exit_group',
+                    'faccessat',
+                    'fchmod',
+                    'fchmodat',
+                    'fchown',
+                    'fchownat',
+                    'finit_module',
+                    'flock',
+                    'fork',
+                    'fstat',
+                    'ftruncate',
+                    'futex',
+                    'futimesat',
+                    'get_curr_temp',
+                    'get_mempolicy',
+                    'get_robust_list',
+                    'get_trip_temp',
+                    'getcwd',
+                    'getgroups',
+                    'getgroups16',
+                    'getitimer',
+                    'getpgid',
+                    'getppid',
+                    'getpriority',
+                    'getrusage',
+                    'getsid',
+                    'init_module',
+                    'inotify_add_watch',
+                    'inotify_init1',
+                    'inotify_rm_watch',
+                    'io_cancel',
+                    'io_destroy',
+                    'io_getevents',
+                    'io_setup',
+                    'io_submit',
+                    'ioctl',
+                    'ioprio_get',
+                    'ioprio_set',
+                    'kexec_load',
+                    'keyctl',
+                    'kill',
+                    'linkat',
+                    'lookup_dcookie',
+                    'madvise',
+                    'mbind',
+                    'memfd_create',
+                    'migrate_pages',
+                    'mincore',
+                    'mkdirat',
+                    'mknodat',
+                    'mlockall',
+                    'mmap_pgoff',
+                    'modify_ldt',
+                    'move_pages',
+                    'mprotect',
+                    'mq_getsetattr',
+                    'mq_notify',
+                    'mq_open',
+                    'mq_timedreceive',
+                    'mq_timedsend',
+                    'mq_unlink',
+                    'mremap',
+                    'msgctl',
+                    'msgrcv',
+                    'msgsnd',
+                    'munlock',
+                    'munlockall',
+                    'nanosleep',
+                    'newfstat',
+                    'open',
+                    'open_by_handle_at',
+                    'openat',
+                    'perf_event_open',
+                    'pipe2',
+                    'pivot_root',
+                    'pkey_mprotect',
+                    'poll',
+                    'ppoll',
+                    'prctl',
+                    'prlimit64',
+                    'pselect6',
+                    'ptrace',
+                    'quotactl',
+                    'readahead',
+                    'readlinkat',
+                    'reboot',
+                    'recvmmsg',
+                    'remap_file_pages',
+                    'renameat2',
+                    'request_key',
+                    'rmdir',
+                    'rt_sigaction',
+                    'rt_sigprocmask',
+                    'rt_sigtimedwait',
+                    'sched_getaffinity',
+                    'sched_getattr',
+                    'sched_getparam',
+                    'sched_getscheduler',
+                    'sched_rr_get_interval',
+                    'sched_setaffinity',
+                    'sched_setattr',
+                    'sched_setparam',
+                    'sched_setscheduler',
+                    'sched_yield',
+                    'select',
+                    'semctl',
+                    'sendfile',
+                    'sendfile64',
+                    'set_trip_temp',
+                    'setgid',
+                    'setgroups',
+                    'setgroups16',
+                    'setitimer',
+                    'setns',
+                    'setpgid',
+                    'setpriority',
+                    'setregid',
+                    'setresgid',
+                    'setresuid',
+                    'setreuid',
+                    'setsid',
+                    'settimeofday',
+                    'setuid',
+                    'shmat',
+                    'shmctl',
+                    'shmdt',
+                    'sigaction',
+                    'sigaltstack',
+                    'signal',
+                    'socket',
+                    'socketpair',
+                    'splice',
+                    'stime',
+                    'swapoff',
+                    'swapon',
+                    'symlinkat',
+                    'sync_file_range',
+                    'syncfs',
+                    'tee',
+                    'timer_create',
+                    'timer_delete',
+                    'timer_getoverrun',
+                    'timer_gettime',
+                    'timer_settime',
+                    'timerfd_create',
+                    'timerfd_gettime',
+                    'timerfd_settime',
+                    'umount',
+                    'unlink',
+                    'unlinkat',
+                    'unshare',
+                    'uselib',
+                    'ustat',
+                    'utime',
+                    'vfork',
+                    'vmsplice']),
+ 'sendfile': set(['accept4',
+                  'acct',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'eventfd2',
+                  'flock',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_open',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'remap_file_pages',
+                  'setns',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'socket',
+                  'socketpair',
+                  'swapoff',
+                  'swapon',
+                  'uselib']),
+ 'sendfile64': set(['accept4',
+                    'acct',
+                    'dup',
+                    'dup3',
+                    'epoll_create1',
+                    'epoll_ctl',
+                    'eventfd2',
+                    'flock',
+                    'memfd_create',
+                    'mmap_pgoff',
+                    'mq_open',
+                    'open',
+                    'open_by_handle_at',
+                    'openat',
+                    'perf_event_open',
+                    'pipe2',
+                    'remap_file_pages',
+                    'setns',
+                    'shmat',
+                    'shmctl',
+                    'shmdt',
+                    'socket',
+                    'socketpair',
+                    'swapoff',
+                    'swapon',
+                    'uselib']),
+ 'sendmmsg': set(['accept4',
+                  'bind',
+                  'connect',
+                  'getpeername',
+                  'getsockname',
+                  'getsockopt',
+                  'listen',
+                  'recvfrom',
+                  'recvmmsg',
+                  'recvmsg',
+                  'sendmsg',
+                  'sendto',
+                  'setsockopt',
+                  'shutdown']),
+ 'sendmsg': set(['accept4',
+                 'bind',
+                 'connect',
+                 'getpeername',
+                 'getsockname',
+                 'getsockopt',
+                 'listen',
+                 'recvfrom',
+                 'recvmmsg',
+                 'recvmsg',
+                 'sendmmsg',
+                 'sendto',
+                 'setsockopt',
+                 'shutdown']),
+ 'sendto': set(['accept4',
+                'acct',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'eventfd2',
+                'flock',
+                'memfd_create',
+                'mmap_pgoff',
+                'mq_getsetattr',
+                'mq_open',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'remap_file_pages',
+                'setns',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'socket',
+                'socketpair',
+                'swapoff',
+                'swapon',
+                'uselib']),
+ 'set_mempolicy': set(['get_mempolicy', 'mbind']),
+ 'set_thread_area': set(['arch_prctl',
+                         'capget',
+                         'clone',
+                         'fork',
+                         'get_robust_list',
+                         'getitimer',
+                         'getpgid',
+                         'getppid',
+                         'getpriority',
+                         'getrusage',
+                         'getsid',
+                         'ioperm',
+                         'ioprio_get',
+                         'ioprio_set',
+                         'keyctl',
+                         'kill',
+                         'migrate_pages',
+                         'move_pages',
+                         'mq_timedreceive',
+                         'mq_timedsend',
+                         'msgrcv',
+                         'perf_event_open',
+                         'prctl',
+                         'prlimit64',
+                         'ptrace',
+                         'rt_sigaction',
+                         'rt_sigprocmask',
+                         'rt_sigtimedwait',
+                         'sched_getaffinity',
+                         'sched_getattr',
+                         'sched_getparam',
+                         'sched_getscheduler',
+                         'sched_rr_get_interval',
+                         'sched_setaffinity',
+                         'sched_setattr',
+                         'sched_setparam',
+                         'sched_setscheduler',
+                         'semtimedop',
+                         'setitimer',
+                         'setns',
+                         'setpgid',
+                         'setpriority',
+                         'setsid',
+                         'sigaction',
+                         'sigaltstack',
+                         'signal',
+                         'umount',
+                         'vfork']),
+ 'set_trip_temp': set(['get_curr_temp', 'get_trip_temp']),
+ 'setdomainname': set(['setns']),
+ 'setfsgid': set(['capget',
+                  'capset',
+                  'clone',
+                  'epoll_create1',
+                  'faccessat',
+                  'fork',
+                  'get_robust_list',
+                  'getgroups',
+                  'getgroups16',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getresgid',
+                  'getresgid16',
+                  'getresuid',
+                  'getresuid16',
+                  'getrusage',
+                  'getsid',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'perf_event_open',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setfsuid',
+                  'setgid',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setregid',
+                  'setresgid',
+                  'setresuid',
+                  'setreuid',
+                  'setsid',
+                  'setuid',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'unshare',
+                  'vfork']),
+ 'setfsuid': set(['capget',
+                  'capset',
+                  'clone',
+                  'epoll_create1',
+                  'faccessat',
+                  'fork',
+                  'get_robust_list',
+                  'getgroups',
+                  'getgroups16',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getresgid',
+                  'getresgid16',
+                  'getresuid',
+                  'getresuid16',
+                  'getrusage',
+                  'getsid',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'perf_event_open',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setfsgid',
+                  'setgid',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setregid',
+                  'setresgid',
+                  'setresuid',
+                  'setreuid',
+                  'setsid',
+                  'setuid',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'unshare',
+                  'vfork']),
+ 'setgid': set(['capget',
+                'capset',
+                'clone',
+                'epoll_create1',
+                'faccessat',
+                'fork',
+                'get_robust_list',
+                'getgroups',
+                'getgroups16',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getresgid',
+                'getresgid16',
+                'getresuid',
+                'getresuid16',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setfsgid',
+                'setfsuid',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setregid',
+                'setresgid',
+                'setresuid',
+                'setreuid',
+                'setsid',
+                'setuid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'unshare',
+                'vfork']),
+ 'setgroups16': set(['setgroups']),
+ 'sethostname': set(['setns']),
+ 'setitimer': set(['adjtimex',
+                   'alarm',
+                   'clock_adjtime',
+                   'exit_group',
+                   'getitimer',
+                   'getrusage',
+                   'ppoll',
+                   'select',
+                   'settimeofday',
+                   'timer_create',
+                   'wait4',
+                   'waitid']),
+ 'setpgid': set(['capget',
+                 'clone',
+                 'exit_group',
+                 'fork',
+                 'get_robust_list',
+                 'getitimer',
+                 'getpgid',
+                 'getppid',
+                 'getpriority',
+                 'getrusage',
+                 'getsid',
+                 'ioprio_get',
+                 'ioprio_set',
+                 'keyctl',
+                 'kill',
+                 'migrate_pages',
+                 'move_pages',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'msgrcv',
+                 'perf_event_open',
+                 'prctl',
+                 'prlimit64',
+                 'ptrace',
+                 'rt_sigaction',
+                 'rt_sigprocmask',
+                 'rt_sigtimedwait',
+                 'sched_getaffinity',
+                 'sched_getattr',
+                 'sched_getparam',
+                 'sched_getscheduler',
+                 'sched_rr_get_interval',
+                 'sched_setaffinity',
+                 'sched_setattr',
+                 'sched_setparam',
+                 'sched_setscheduler',
+                 'semtimedop',
+                 'setitimer',
+                 'setns',
+                 'setpriority',
+                 'setresuid',
+                 'setreuid',
+                 'setsid',
+                 'setuid',
+                 'sigaction',
+                 'sigaltstack',
+                 'signal',
+                 'timer_create',
+                 'umount',
+                 'vfork']),
+ 'setpriority': set(['capget',
+                     'clone',
+                     'fork',
+                     'get_robust_list',
+                     'getitimer',
+                     'getpgid',
+                     'getppid',
+                     'getpriority',
+                     'getrusage',
+                     'getsid',
+                     'ioprio_get',
+                     'ioprio_set',
+                     'keyctl',
+                     'kill',
+                     'migrate_pages',
+                     'move_pages',
+                     'mq_timedreceive',
+                     'mq_timedsend',
+                     'msgrcv',
+                     'perf_event_open',
+                     'prctl',
+                     'prlimit64',
+                     'ptrace',
+                     'rt_sigaction',
+                     'rt_sigprocmask',
+                     'rt_sigtimedwait',
+                     'sched_getaffinity',
+                     'sched_getattr',
+                     'sched_getparam',
+                     'sched_getscheduler',
+                     'sched_rr_get_interval',
+                     'sched_setaffinity',
+                     'sched_setattr',
+                     'sched_setparam',
+                     'sched_setscheduler',
+                     'semtimedop',
+                     'setitimer',
+                     'setns',
+                     'setpgid',
+                     'setresuid',
+                     'setreuid',
+                     'setsid',
+                     'setuid',
+                     'sigaction',
+                     'sigaltstack',
+                     'signal',
+                     'umount',
+                     'vfork']),
+ 'setregid': set(['capget',
+                  'capset',
+                  'clone',
+                  'epoll_create1',
+                  'faccessat',
+                  'fork',
+                  'get_robust_list',
+                  'getgroups',
+                  'getgroups16',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getresgid',
+                  'getresgid16',
+                  'getresuid',
+                  'getresuid16',
+                  'getrusage',
+                  'getsid',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'perf_event_open',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setfsgid',
+                  'setfsuid',
+                  'setgid',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setresgid',
+                  'setresuid',
+                  'setreuid',
+                  'setsid',
+                  'setuid',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'unshare',
+                  'vfork']),
+ 'setresgid': set(['capget',
+                   'capset',
+                   'clone',
+                   'epoll_create1',
+                   'faccessat',
+                   'fork',
+                   'get_robust_list',
+                   'getgroups',
+                   'getgroups16',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getresgid',
+                   'getresgid16',
+                   'getresuid',
+                   'getresuid16',
+                   'getrusage',
+                   'getsid',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setfsgid',
+                   'setfsuid',
+                   'setgid',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setregid',
+                   'setresuid',
+                   'setreuid',
+                   'setsid',
+                   'setuid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'unshare',
+                   'vfork']),
+ 'setresuid': set(['capget',
+                   'capset',
+                   'clone',
+                   'epoll_create1',
+                   'faccessat',
+                   'fork',
+                   'get_robust_list',
+                   'getgroups',
+                   'getgroups16',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getresgid',
+                   'getresgid16',
+                   'getresuid',
+                   'getresuid16',
+                   'getrusage',
+                   'getsid',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setfsgid',
+                   'setfsuid',
+                   'setgid',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setregid',
+                   'setresgid',
+                   'setreuid',
+                   'setsid',
+                   'setuid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'unshare',
+                   'vfork']),
+ 'setreuid': set(['capget',
+                  'capset',
+                  'clone',
+                  'epoll_create1',
+                  'faccessat',
+                  'fork',
+                  'get_robust_list',
+                  'getgroups',
+                  'getgroups16',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getresgid',
+                  'getresgid16',
+                  'getresuid',
+                  'getresuid16',
+                  'getrusage',
+                  'getsid',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'perf_event_open',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setfsgid',
+                  'setfsuid',
+                  'setgid',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setregid',
+                  'setresgid',
+                  'setresuid',
+                  'setsid',
+                  'setuid',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'unshare',
+                  'vfork']),
+ 'setrlimit': set(['capget',
+                   'clone',
+                   'fork',
+                   'get_robust_list',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getrlimit',
+                   'getrusage',
+                   'getsid',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'old_getrlimit',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setsid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'vfork']),
+ 'setsid': set(['exit_group', 'timer_create']),
+ 'setsockopt': set(['accept4']),
+ 'settimeofday': set(['adjtimex',
+                      'alarm',
+                      'clock_adjtime',
+                      'getitimer',
+                      'getrusage',
+                      'ppoll',
+                      'select',
+                      'setitimer',
+                      'wait4',
+                      'waitid']),
+ 'setuid': set(['capget',
+                'capset',
+                'clone',
+                'epoll_create1',
+                'faccessat',
+                'fork',
+                'get_robust_list',
+                'getgroups',
+                'getgroups16',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getresgid',
+                'getresgid16',
+                'getresuid',
+                'getresuid16',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setfsgid',
+                'setfsuid',
+                'setgid',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setregid',
+                'setresgid',
+                'setresuid',
+                'setreuid',
+                'setsid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'unshare',
+                'vfork']),
+ 'setxattr': set(['accept4',
+                  'acct',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'eventfd2',
+                  'flock',
+                  'getcwd',
+                  'lookup_dcookie',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_open',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'pivot_root',
+                  'quotactl',
+                  'remap_file_pages',
+                  'setns',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'socket',
+                  'socketpair',
+                  'swapoff',
+                  'swapon',
+                  'unshare',
+                  'uselib']),
+ 'shmat': set(['accept4',
+               'acct',
+               'capget',
+               'clone',
+               'dup',
+               'dup3',
+               'epoll_create1',
+               'epoll_ctl',
+               'eventfd2',
+               'flock',
+               'fork',
+               'get_robust_list',
+               'getcwd',
+               'getitimer',
+               'getpgid',
+               'getppid',
+               'getpriority',
+               'getrusage',
+               'getsid',
+               'ioprio_get',
+               'ioprio_set',
+               'keyctl',
+               'kill',
+               'lookup_dcookie',
+               'memfd_create',
+               'migrate_pages',
+               'mmap_pgoff',
+               'move_pages',
+               'mq_open',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'msgrcv',
+               'open',
+               'open_by_handle_at',
+               'openat',
+               'perf_event_open',
+               'pipe2',
+               'pivot_root',
+               'prctl',
+               'prlimit64',
+               'ptrace',
+               'quotactl',
+               'remap_file_pages',
+               'rt_sigaction',
+               'rt_sigprocmask',
+               'rt_sigtimedwait',
+               'sched_getaffinity',
+               'sched_getattr',
+               'sched_getparam',
+               'sched_getscheduler',
+               'sched_rr_get_interval',
+               'sched_setaffinity',
+               'sched_setattr',
+               'sched_setparam',
+               'sched_setscheduler',
+               'semtimedop',
+               'setitimer',
+               'setns',
+               'setpgid',
+               'setpriority',
+               'setsid',
+               'shmctl',
+               'shmdt',
+               'sigaction',
+               'sigaltstack',
+               'signal',
+               'socket',
+               'socketpair',
+               'swapoff',
+               'swapon',
+               'umount',
+               'unshare',
+               'uselib',
+               'vfork']),
+ 'shmctl': set(['accept4',
+                'acct',
+                'capget',
+                'clone',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'eventfd2',
+                'flock',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioperm',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'memfd_create',
+                'migrate_pages',
+                'mmap_pgoff',
+                'move_pages',
+                'mq_open',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'mq_unlink',
+                'msgctl',
+                'msgget',
+                'msgrcv',
+                'msgsnd',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'remap_file_pages',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semctl',
+                'semget',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'shmat',
+                'shmdt',
+                'shmget',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'socket',
+                'socketpair',
+                'swapoff',
+                'swapon',
+                'umount',
+                'uselib',
+                'vfork']),
+ 'shmdt': set(['brk',
+               'get_mempolicy',
+               'madvise',
+               'mincore',
+               'mlockall',
+               'mprotect',
+               'mremap',
+               'munlock',
+               'munlockall',
+               'pkey_mprotect',
+               'prctl',
+               'remap_file_pages']),
+ 'sigaction': set(['capget',
+                   'clone',
+                   'fork',
+                   'get_robust_list',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getrusage',
+                   'getsid',
+                   'ioperm',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setsid',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'vfork']),
+ 'signalfd4': set(['accept4',
+                   'acct',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'eventfd2',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchown',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'memfd_create',
+                   'mmap_pgoff',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_open',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'old_readdir',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readv',
+                   'recvfrom',
+                   'remap_file_pages',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setns',
+                   'setsockopt',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'shutdown',
+                   'socket',
+                   'socketpair',
+                   'splice',
+                   'swapoff',
+                   'swapon',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'uselib',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'splice': set(['accept4',
+                'acct',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'epoll_wait',
+                'eventfd2',
+                'fallocate',
+                'fchdir',
+                'fchmod',
+                'fchown',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'llseek',
+                'lseek',
+                'memfd_create',
+                'mmap_pgoff',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_open',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'remap_file_pages',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setns',
+                'setsockopt',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'shutdown',
+                'signalfd4',
+                'socket',
+                'socketpair',
+                'swapoff',
+                'swapon',
+                'sync_file_range',
+                'syncfs',
+                'tee',
+                'uselib',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'stat': set(['fstat', 'lstat', 'newfstat']),
+ 'statfs': set(['fstatfs', 'fstatfs64', 'statfs64', 'ustat']),
+ 'statfs64': set(['fstatfs', 'fstatfs64', 'statfs', 'ustat']),
+ 'swapoff': set(['accept4',
+                 'acct',
+                 'capget',
+                 'clone',
+                 'dup',
+                 'dup3',
+                 'epoll_create1',
+                 'epoll_ctl',
+                 'eventfd2',
+                 'flock',
+                 'fork',
+                 'get_robust_list',
+                 'getitimer',
+                 'getpgid',
+                 'getppid',
+                 'getpriority',
+                 'getrusage',
+                 'getsid',
+                 'ioprio_get',
+                 'ioprio_set',
+                 'keyctl',
+                 'kill',
+                 'memfd_create',
+                 'migrate_pages',
+                 'mmap_pgoff',
+                 'move_pages',
+                 'mq_open',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'msgrcv',
+                 'open',
+                 'open_by_handle_at',
+                 'openat',
+                 'perf_event_open',
+                 'pipe2',
+                 'prctl',
+                 'prlimit64',
+                 'ptrace',
+                 'remap_file_pages',
+                 'rt_sigaction',
+                 'rt_sigprocmask',
+                 'rt_sigtimedwait',
+                 'sched_getaffinity',
+                 'sched_getattr',
+                 'sched_getparam',
+                 'sched_getscheduler',
+                 'sched_rr_get_interval',
+                 'sched_setaffinity',
+                 'sched_setattr',
+                 'sched_setparam',
+                 'sched_setscheduler',
+                 'semtimedop',
+                 'setitimer',
+                 'setns',
+                 'setpgid',
+                 'setpriority',
+                 'setsid',
+                 'shmat',
+                 'shmctl',
+                 'shmdt',
+                 'sigaction',
+                 'sigaltstack',
+                 'signal',
+                 'socket',
+                 'socketpair',
+                 'swapon',
+                 'umount',
+                 'uselib',
+                 'vfork']),
+ 'swapon': set(['faccessat',
+                'fchmod',
+                'fchmodat',
+                'fchown',
+                'fchownat',
+                'ftruncate',
+                'inotify_add_watch',
+                'ioctl',
+                'linkat',
+                'memfd_create',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'mq_unlink',
+                'readlinkat',
+                'sendfile',
+                'sendfile64',
+                'swapoff',
+                'unlink',
+                'unlinkat',
+                'uselib']),
+ 'symlinkat': set(['acct',
+                   'mq_open',
+                   'mq_unlink',
+                   'open',
+                   'openat',
+                   'quotactl',
+                   'renameat2',
+                   'rmdir',
+                   'swapoff',
+                   'swapon',
+                   'sysfs',
+                   'unlink',
+                   'unlinkat',
+                   'uselib']),
+ 'sync_file_range': set(['accept4',
+                         'bind',
+                         'bpf',
+                         'connect',
+                         'copy_file_range',
+                         'epoll_ctl',
+                         'epoll_wait',
+                         'fallocate',
+                         'fchdir',
+                         'fchmod',
+                         'fchown',
+                         'fcntl',
+                         'fcntl64',
+                         'fdatasync',
+                         'fgetxattr',
+                         'flistxattr',
+                         'flock',
+                         'fremovexattr',
+                         'fsetxattr',
+                         'fstatfs',
+                         'fstatfs64',
+                         'fsync',
+                         'ftruncate',
+                         'futimesat',
+                         'getdents',
+                         'getdents64',
+                         'getpeername',
+                         'getsockname',
+                         'getsockopt',
+                         'inotify_add_watch',
+                         'inotify_rm_watch',
+                         'ioctl',
+                         'listen',
+                         'llseek',
+                         'lseek',
+                         'mq_getsetattr',
+                         'mq_notify',
+                         'mq_timedreceive',
+                         'mq_timedsend',
+                         'old_readdir',
+                         'perf_event_open',
+                         'pread64',
+                         'preadv',
+                         'preadv2',
+                         'preadv64',
+                         'preadv64v2',
+                         'pwrite64',
+                         'pwritev',
+                         'pwritev2',
+                         'pwritev64',
+                         'pwritev64v2',
+                         'read',
+                         'readahead',
+                         'readv',
+                         'recvfrom',
+                         'sendfile',
+                         'sendfile64',
+                         'sendto',
+                         'setsockopt',
+                         'shutdown',
+                         'signalfd4',
+                         'splice',
+                         'syncfs',
+                         'tee',
+                         'utime',
+                         'utimensat',
+                         'vmsplice',
+                         'write',
+                         'writev']),
+ 'syncfs': set(['accept4',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'epoll_ctl',
+                'epoll_wait',
+                'fallocate',
+                'fchdir',
+                'fchmod',
+                'fchown',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'llseek',
+                'lseek',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'perf_event_open',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setsockopt',
+                'shutdown',
+                'signalfd4',
+                'splice',
+                'sync_file_range',
+                'tee',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'sysfs': set(['acct',
+               'mq_open',
+               'mq_unlink',
+               'open',
+               'openat',
+               'quotactl',
+               'renameat2',
+               'rmdir',
+               'swapoff',
+               'swapon',
+               'symlinkat',
+               'unlink',
+               'unlinkat',
+               'uselib']),
+ 'sysinfo': set(['capget',
+                 'clock_nanosleep',
+                 'clone',
+                 'epoll_wait',
+                 'faccessat',
+                 'fchmod',
+                 'fchmodat',
+                 'fchown',
+                 'fchownat',
+                 'fork',
+                 'fstat',
+                 'ftruncate',
+                 'futex',
+                 'futimesat',
+                 'get_robust_list',
+                 'getitimer',
+                 'getpgid',
+                 'getppid',
+                 'getpriority',
+                 'getrusage',
+                 'getsid',
+                 'inotify_add_watch',
+                 'io_getevents',
+                 'ioctl',
+                 'ioperm',
+                 'ioprio_get',
+                 'ioprio_set',
+                 'keyctl',
+                 'kill',
+                 'linkat',
+                 'memfd_create',
+                 'migrate_pages',
+                 'move_pages',
+                 'mq_getsetattr',
+                 'mq_notify',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'mq_unlink',
+                 'msgrcv',
+                 'nanosleep',
+                 'newfstat',
+                 'perf_event_open',
+                 'poll',
+                 'ppoll',
+                 'prctl',
+                 'prlimit64',
+                 'pselect6',
+                 'ptrace',
+                 'readlinkat',
+                 'recvmmsg',
+                 'rt_sigaction',
+                 'rt_sigprocmask',
+                 'rt_sigtimedwait',
+                 'sched_getaffinity',
+                 'sched_getattr',
+                 'sched_getparam',
+                 'sched_getscheduler',
+                 'sched_rr_get_interval',
+                 'sched_setaffinity',
+                 'sched_setattr',
+                 'sched_setparam',
+                 'sched_setscheduler',
+                 'select',
+                 'semtimedop',
+                 'sendfile',
+                 'sendfile64',
+                 'setitimer',
+                 'setns',
+                 'setpgid',
+                 'setpriority',
+                 'setsid',
+                 'settimeofday',
+                 'sigaction',
+                 'sigaltstack',
+                 'signal',
+                 'stime',
+                 'swapoff',
+                 'swapon',
+                 'timer_gettime',
+                 'timer_settime',
+                 'timerfd_gettime',
+                 'timerfd_settime',
+                 'umount',
+                 'unlink',
+                 'unlinkat',
+                 'uselib',
+                 'utime',
+                 'vfork']),
+ 'syslog': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioperm',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'tee': set(['accept4',
+             'acct',
+             'bind',
+             'bpf',
+             'connect',
+             'copy_file_range',
+             'dup',
+             'dup3',
+             'epoll_create1',
+             'epoll_ctl',
+             'epoll_wait',
+             'eventfd2',
+             'fallocate',
+             'fchdir',
+             'fchmod',
+             'fchown',
+             'fcntl',
+             'fcntl64',
+             'fdatasync',
+             'fgetxattr',
+             'flistxattr',
+             'flock',
+             'fremovexattr',
+             'fsetxattr',
+             'fstatfs',
+             'fstatfs64',
+             'fsync',
+             'ftruncate',
+             'futimesat',
+             'getdents',
+             'getdents64',
+             'getpeername',
+             'getsockname',
+             'getsockopt',
+             'inotify_add_watch',
+             'inotify_rm_watch',
+             'ioctl',
+             'listen',
+             'llseek',
+             'lseek',
+             'memfd_create',
+             'mmap_pgoff',
+             'mq_getsetattr',
+             'mq_notify',
+             'mq_open',
+             'mq_timedreceive',
+             'mq_timedsend',
+             'old_readdir',
+             'open',
+             'open_by_handle_at',
+             'openat',
+             'perf_event_open',
+             'pipe2',
+             'pread64',
+             'preadv',
+             'preadv2',
+             'preadv64',
+             'preadv64v2',
+             'pwrite64',
+             'pwritev',
+             'pwritev2',
+             'pwritev64',
+             'pwritev64v2',
+             'read',
+             'readahead',
+             'readv',
+             'recvfrom',
+             'remap_file_pages',
+             'sendfile',
+             'sendfile64',
+             'sendto',
+             'setns',
+             'setsockopt',
+             'shmat',
+             'shmctl',
+             'shmdt',
+             'shutdown',
+             'signalfd4',
+             'socket',
+             'socketpair',
+             'splice',
+             'swapoff',
+             'swapon',
+             'sync_file_range',
+             'syncfs',
+             'uselib',
+             'utime',
+             'utimensat',
+             'vmsplice',
+             'write',
+             'writev']),
+ 'tgkill': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'timer_create': set(['clock_adjtime',
+                      'clock_getres',
+                      'clock_gettime',
+                      'clock_nanosleep',
+                      'clock_settime',
+                      'timer_delete',
+                      'timer_getoverrun',
+                      'timer_gettime',
+                      'timer_settime']),
+ 'timer_delete': set(['capget',
+                      'clock_adjtime',
+                      'clock_getres',
+                      'clock_gettime',
+                      'clock_nanosleep',
+                      'clock_settime',
+                      'clone',
+                      'fork',
+                      'get_robust_list',
+                      'getitimer',
+                      'getpgid',
+                      'getppid',
+                      'getpriority',
+                      'getrusage',
+                      'getsid',
+                      'ioprio_get',
+                      'ioprio_set',
+                      'keyctl',
+                      'kill',
+                      'migrate_pages',
+                      'move_pages',
+                      'mq_timedreceive',
+                      'mq_timedsend',
+                      'msgrcv',
+                      'perf_event_open',
+                      'prctl',
+                      'prlimit64',
+                      'ptrace',
+                      'rt_sigaction',
+                      'rt_sigprocmask',
+                      'rt_sigtimedwait',
+                      'sched_getaffinity',
+                      'sched_getattr',
+                      'sched_getparam',
+                      'sched_getscheduler',
+                      'sched_rr_get_interval',
+                      'sched_setaffinity',
+                      'sched_setattr',
+                      'sched_setparam',
+                      'sched_setscheduler',
+                      'semtimedop',
+                      'setitimer',
+                      'setns',
+                      'setpgid',
+                      'setpriority',
+                      'setsid',
+                      'sigaction',
+                      'sigaltstack',
+                      'signal',
+                      'timer_create',
+                      'timer_getoverrun',
+                      'timer_gettime',
+                      'timer_settime',
+                      'umount',
+                      'vfork']),
+ 'timer_getoverrun': set(['capget',
+                          'clone',
+                          'fork',
+                          'get_robust_list',
+                          'getitimer',
+                          'getpgid',
+                          'getppid',
+                          'getpriority',
+                          'getrusage',
+                          'getsid',
+                          'ioprio_get',
+                          'ioprio_set',
+                          'keyctl',
+                          'kill',
+                          'migrate_pages',
+                          'move_pages',
+                          'mq_timedreceive',
+                          'mq_timedsend',
+                          'msgrcv',
+                          'perf_event_open',
+                          'prctl',
+                          'prlimit64',
+                          'ptrace',
+                          'rt_sigaction',
+                          'rt_sigprocmask',
+                          'rt_sigtimedwait',
+                          'sched_getaffinity',
+                          'sched_getattr',
+                          'sched_getparam',
+                          'sched_getscheduler',
+                          'sched_rr_get_interval',
+                          'sched_setaffinity',
+                          'sched_setattr',
+                          'sched_setparam',
+                          'sched_setscheduler',
+                          'semtimedop',
+                          'setitimer',
+                          'setns',
+                          'setpgid',
+                          'setpriority',
+                          'setsid',
+                          'sigaction',
+                          'sigaltstack',
+                          'signal',
+                          'timer_create',
+                          'timer_delete',
+                          'timer_gettime',
+                          'timer_settime',
+                          'umount',
+                          'vfork']),
+ 'timer_gettime': set(['clock_adjtime',
+                       'clock_getres',
+                       'clock_gettime',
+                       'clock_nanosleep',
+                       'clock_settime',
+                       'timer_create',
+                       'timer_delete',
+                       'timer_settime']),
+ 'timer_settime': set(['clock_adjtime',
+                       'clock_getres',
+                       'clock_gettime',
+                       'clock_nanosleep',
+                       'clock_settime',
+                       'timer_create',
+                       'timer_delete',
+                       'timer_gettime']),
+ 'timerfd_create': set(['timerfd_gettime', 'timerfd_settime']),
+ 'timerfd_gettime': set(['timerfd_create', 'timerfd_settime']),
+ 'timerfd_settime': set(['timerfd_create', 'timerfd_gettime']),
+ 'tkill': set(['capget',
+               'clone',
+               'fork',
+               'get_robust_list',
+               'getitimer',
+               'getpgid',
+               'getppid',
+               'getpriority',
+               'getrusage',
+               'getsid',
+               'ioprio_get',
+               'ioprio_set',
+               'keyctl',
+               'kill',
+               'migrate_pages',
+               'move_pages',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'msgrcv',
+               'perf_event_open',
+               'prctl',
+               'prlimit64',
+               'ptrace',
+               'rt_sigaction',
+               'rt_sigprocmask',
+               'rt_sigtimedwait',
+               'sched_getaffinity',
+               'sched_getattr',
+               'sched_getparam',
+               'sched_getscheduler',
+               'sched_rr_get_interval',
+               'sched_setaffinity',
+               'sched_setattr',
+               'sched_setparam',
+               'sched_setscheduler',
+               'semtimedop',
+               'setitimer',
+               'setns',
+               'setpgid',
+               'setpriority',
+               'setsid',
+               'sigaction',
+               'sigaltstack',
+               'signal',
+               'umount',
+               'vfork']),
+ 'umount': set(['accept4',
+                'acct',
+                'capget',
+                'clone',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'eventfd2',
+                'flock',
+                'fork',
+                'get_robust_list',
+                'getcwd',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'lookup_dcookie',
+                'memfd_create',
+                'migrate_pages',
+                'mmap_pgoff',
+                'move_pages',
+                'mq_open',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'mq_unlink',
+                'msgrcv',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'pivot_root',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'quotactl',
+                'remap_file_pages',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setresuid',
+                'setreuid',
+                'setsid',
+                'setuid',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'socket',
+                'socketpair',
+                'swapoff',
+                'swapon',
+                'syncfs',
+                'unshare',
+                'uselib',
+                'ustat',
+                'vfork']),
+ 'uname': set(['capget',
+               'clone',
+               'fork',
+               'get_robust_list',
+               'getitimer',
+               'getpgid',
+               'getppid',
+               'getpriority',
+               'getrusage',
+               'getsid',
+               'ioprio_get',
+               'ioprio_set',
+               'keyctl',
+               'kill',
+               'migrate_pages',
+               'move_pages',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'msgrcv',
+               'perf_event_open',
+               'personality',
+               'prctl',
+               'prlimit64',
+               'ptrace',
+               'rt_sigaction',
+               'rt_sigprocmask',
+               'rt_sigtimedwait',
+               'sched_getaffinity',
+               'sched_getattr',
+               'sched_getparam',
+               'sched_getscheduler',
+               'sched_rr_get_interval',
+               'sched_setaffinity',
+               'sched_setattr',
+               'sched_setparam',
+               'sched_setscheduler',
+               'semtimedop',
+               'setitimer',
+               'setns',
+               'setpgid',
+               'setpriority',
+               'setsid',
+               'sigaction',
+               'sigaltstack',
+               'signal',
+               'umount',
+               'vfork']),
+ 'unlink': set(['accept4',
+                'acct',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'eventfd2',
+                'flock',
+                'ftruncate',
+                'getcwd',
+                'linkat',
+                'lookup_dcookie',
+                'memfd_create',
+                'mkdirat',
+                'mknodat',
+                'mmap_pgoff',
+                'mq_open',
+                'mq_unlink',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'pivot_root',
+                'quotactl',
+                'remap_file_pages',
+                'renameat2',
+                'rmdir',
+                'setns',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'socket',
+                'socketpair',
+                'swapoff',
+                'swapon',
+                'symlinkat',
+                'unlinkat',
+                'unshare',
+                'uselib']),
+ 'unlinkat': set(['accept4',
+                  'acct',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'eventfd2',
+                  'flock',
+                  'ftruncate',
+                  'getcwd',
+                  'linkat',
+                  'lookup_dcookie',
+                  'memfd_create',
+                  'mkdirat',
+                  'mknodat',
+                  'mmap_pgoff',
+                  'mq_open',
+                  'mq_unlink',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'pivot_root',
+                  'quotactl',
+                  'remap_file_pages',
+                  'renameat2',
+                  'rmdir',
+                  'setns',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'socket',
+                  'socketpair',
+                  'swapoff',
+                  'swapon',
+                  'symlinkat',
+                  'unlink',
+                  'unshare',
+                  'uselib']),
+ 'uselib': set(['acct',
+                'getcwd',
+                'mq_open',
+                'mq_unlink',
+                'pivot_root',
+                'quotactl',
+                'swapon',
+                'syncfs',
+                'umount',
+                'ustat']),
+ 'ustat': set(['quotactl', 'swapon', 'syncfs', 'umount']),
+ 'utime': set(['clock_nanosleep',
+               'epoll_wait',
+               'faccessat',
+               'fchmod',
+               'fchmodat',
+               'fchown',
+               'fchownat',
+               'fstat',
+               'ftruncate',
+               'futex',
+               'futimesat',
+               'inotify_add_watch',
+               'io_getevents',
+               'ioctl',
+               'linkat',
+               'memfd_create',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'mq_unlink',
+               'nanosleep',
+               'newfstat',
+               'poll',
+               'ppoll',
+               'pselect6',
+               'readlinkat',
+               'recvmmsg',
+               'rt_sigtimedwait',
+               'sched_rr_get_interval',
+               'select',
+               'semtimedop',
+               'sendfile',
+               'sendfile64',
+               'settimeofday',
+               'stime',
+               'swapoff',
+               'swapon',
+               'timer_gettime',
+               'timer_settime',
+               'timerfd_gettime',
+               'timerfd_settime',
+               'unlink',
+               'unlinkat',
+               'uselib']),
+ 'utimensat': set(['clock_nanosleep',
+                   'epoll_wait',
+                   'faccessat',
+                   'fchmod',
+                   'fchmodat',
+                   'fchown',
+                   'fchownat',
+                   'fstat',
+                   'ftruncate',
+                   'futex',
+                   'futimesat',
+                   'inotify_add_watch',
+                   'io_getevents',
+                   'ioctl',
+                   'linkat',
+                   'memfd_create',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'mq_unlink',
+                   'nanosleep',
+                   'newfstat',
+                   'poll',
+                   'ppoll',
+                   'pselect6',
+                   'readlinkat',
+                   'recvmmsg',
+                   'rt_sigtimedwait',
+                   'sched_rr_get_interval',
+                   'select',
+                   'semtimedop',
+                   'sendfile',
+                   'sendfile64',
+                   'settimeofday',
+                   'stime',
+                   'swapoff',
+                   'swapon',
+                   'timer_gettime',
+                   'timer_settime',
+                   'timerfd_gettime',
+                   'timerfd_settime',
+                   'unlink',
+                   'unlinkat',
+                   'uselib',
+                   'utime']),
+ 'vmsplice': set(['accept4',
+                  'acct',
+                  'bind',
+                  'bpf',
+                  'connect',
+                  'copy_file_range',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'epoll_wait',
+                  'eventfd2',
+                  'fallocate',
+                  'fchdir',
+                  'fchmod',
+                  'fchown',
+                  'fcntl',
+                  'fcntl64',
+                  'fdatasync',
+                  'fgetxattr',
+                  'flistxattr',
+                  'flock',
+                  'fremovexattr',
+                  'fsetxattr',
+                  'fstatfs',
+                  'fstatfs64',
+                  'fsync',
+                  'ftruncate',
+                  'futimesat',
+                  'getdents',
+                  'getdents64',
+                  'getpeername',
+                  'getsockname',
+                  'getsockopt',
+                  'inotify_add_watch',
+                  'inotify_rm_watch',
+                  'ioctl',
+                  'listen',
+                  'llseek',
+                  'lseek',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_getsetattr',
+                  'mq_notify',
+                  'mq_open',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'old_readdir',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'pread64',
+                  'preadv',
+                  'preadv2',
+                  'preadv64',
+                  'preadv64v2',
+                  'pwrite64',
+                  'pwritev',
+                  'pwritev2',
+                  'pwritev64',
+                  'pwritev64v2',
+                  'read',
+                  'readahead',
+                  'readv',
+                  'recvfrom',
+                  'remap_file_pages',
+                  'sendfile',
+                  'sendfile64',
+                  'sendto',
+                  'setns',
+                  'setsockopt',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'shutdown',
+                  'signalfd4',
+                  'socket',
+                  'socketpair',
+                  'splice',
+                  'swapoff',
+                  'swapon',
+                  'sync_file_range',
+                  'syncfs',
+                  'tee',
+                  'uselib',
+                  'utime',
+                  'utimensat',
+                  'write',
+                  'writev']),
+ 'write': set(['accept4',
+               'bind',
+               'bpf',
+               'connect',
+               'copy_file_range',
+               'epoll_ctl',
+               'epoll_wait',
+               'fallocate',
+               'fchdir',
+               'fchmod',
+               'fchown',
+               'fcntl',
+               'fcntl64',
+               'fdatasync',
+               'fgetxattr',
+               'flistxattr',
+               'flock',
+               'fremovexattr',
+               'fsetxattr',
+               'fstatfs',
+               'fstatfs64',
+               'fsync',
+               'ftruncate',
+               'futimesat',
+               'getdents',
+               'getdents64',
+               'getpeername',
+               'getsockname',
+               'getsockopt',
+               'inotify_add_watch',
+               'inotify_rm_watch',
+               'ioctl',
+               'listen',
+               'llseek',
+               'lseek',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'old_readdir',
+               'perf_event_open',
+               'pread64',
+               'preadv',
+               'preadv2',
+               'preadv64',
+               'preadv64v2',
+               'pwrite64',
+               'pwritev',
+               'pwritev2',
+               'pwritev64',
+               'pwritev64v2',
+               'read',
+               'readahead',
+               'readv',
+               'recvfrom',
+               'sendfile',
+               'sendfile64',
+               'sendto',
+               'setsockopt',
+               'shutdown',
+               'signalfd4',
+               'splice',
+               'sync_file_range',
+               'syncfs',
+               'tee',
+               'utime',
+               'utimensat',
+               'vmsplice',
+               'writev'])}
--- /dev/null	Fri Dec 21 15:00:32 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/implicit_dependencies/with_structs/implicit_dependencies_verbose	Fri Dec 21 15:00:32 2018
@@ -0,0 +1,23692 @@
+{'accept4': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+             {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+             {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+             {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+             {'call': 'readahead', 'reason': set([('fd', 'file')])},
+             {'call': 'getdents', 'reason': set([('fd', 'file')])},
+             {'call': 'writev', 'reason': set([('fd', 'file')])},
+             {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+             {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+             {'call': 'pread64', 'reason': set([('fd', 'file')])},
+             {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+             {'call': 'read', 'reason': set([('fd', 'file')])},
+             {'call': 'fchown', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+             {'call': 'utime', 'reason': set([('fd', 'file')])},
+             {'call': 'fsync', 'reason': set([('fd', 'file')])},
+             {'call': 'bpf', 'reason': set([('fd', 'file')])},
+             {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+             {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+             {'call': 'sendto', 'reason': set([('fd', 'file')])},
+             {'call': 'tee', 'reason': set([('fd', 'file')])},
+             {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+             {'call': 'lseek', 'reason': set([('fd', 'file')])},
+             {'call': 'connect', 'reason': set([('fd', 'file')])},
+             {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+             {'call': 'epoll_ctl', 'reason': set([('fd', 'file')])},
+             {'call': 'flock', 'reason': set([('fd', 'file')])},
+             {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+             {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+             {'call': 'accept4', 'reason': set([('fd', 'file')])},
+             {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+             {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+             {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+             {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+             {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+             {'call': 'splice', 'reason': set([('fd', 'file')])},
+             {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+             {'call': 'preadv', 'reason': set([('fd', 'file')])},
+             {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+             {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+             {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+             {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+             {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+             {'call': 'perf_event_open', 'reason': set([('fd', 'file')])},
+             {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+             {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+             {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+             {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+             {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+             {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+             {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+             {'call': 'listen', 'reason': set([('fd', 'file')])},
+             {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+             {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+             {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+             {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+             {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+             {'call': 'llseek', 'reason': set([('fd', 'file')])},
+             {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+             {'call': 'readv', 'reason': set([('fd', 'file')])},
+             {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+             {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+             {'call': 'write', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+             {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+             {'call': 'bind', 'reason': set([('fd', 'file')])},
+             {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+             {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'acct': [{'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+          {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+          {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+          {'call': 'remap_file_pages', 'reason': set([('file', 'f_mode')])},
+          {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+          {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+          {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+          {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+          {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+          {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+          {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+          {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+          {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+          {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+          {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+          {'call': 'perf_event_open', 'reason': set([('file', 'f_mode')])},
+          {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+          {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+          {'call': 'open', 'reason': set([('file', 'f_mode')])},
+          {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+          {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+          {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+          {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+          {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+          {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+          {'call': 'open_by_handle_at', 'reason': set([('file', 'f_mode')])}],
+ 'alarm': [{'call': 'waitid',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'settimeofday',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'adjtimex',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'getitimer',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'select',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'wait4',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'getrusage',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'setitimer',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'clock_adjtime',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'alarm',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'ppoll',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])}],
+ 'bind': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+          {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+          {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+          {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+          {'call': 'readahead', 'reason': set([('fd', 'file')])},
+          {'call': 'getdents', 'reason': set([('fd', 'file')])},
+          {'call': 'writev', 'reason': set([('fd', 'file')])},
+          {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+          {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+          {'call': 'pread64', 'reason': set([('fd', 'file')])},
+          {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+          {'call': 'read', 'reason': set([('fd', 'file')])},
+          {'call': 'fchown', 'reason': set([('fd', 'file')])},
+          {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+          {'call': 'utime', 'reason': set([('fd', 'file')])},
+          {'call': 'fsync', 'reason': set([('fd', 'file')])},
+          {'call': 'bpf', 'reason': set([('fd', 'file')])},
+          {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+          {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+          {'call': 'sendto', 'reason': set([('fd', 'file')])},
+          {'call': 'tee', 'reason': set([('fd', 'file')])},
+          {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+          {'call': 'lseek', 'reason': set([('fd', 'file')])},
+          {'call': 'connect', 'reason': set([('fd', 'file')])},
+          {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+          {'call': 'epoll_ctl', 'reason': set([('fd', 'file')])},
+          {'call': 'flock', 'reason': set([('fd', 'file')])},
+          {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+          {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+          {'call': 'accept4', 'reason': set([('fd', 'file')])},
+          {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+          {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+          {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+          {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+          {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+          {'call': 'splice', 'reason': set([('fd', 'file')])},
+          {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+          {'call': 'preadv', 'reason': set([('fd', 'file')])},
+          {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+          {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+          {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+          {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+          {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+          {'call': 'perf_event_open', 'reason': set([('fd', 'file')])},
+          {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+          {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+          {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+          {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+          {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+          {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+          {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+          {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+          {'call': 'listen', 'reason': set([('fd', 'file')])},
+          {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+          {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+          {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+          {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+          {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+          {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+          {'call': 'llseek', 'reason': set([('fd', 'file')])},
+          {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+          {'call': 'readv', 'reason': set([('fd', 'file')])},
+          {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+          {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+          {'call': 'write', 'reason': set([('fd', 'file')])},
+          {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+          {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+          {'call': 'bind', 'reason': set([('fd', 'file')])},
+          {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+          {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'bpf': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+         {'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'rt_sigtimedwait',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+         {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'eventfd2',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+         {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'swapoff',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+         {'call': 'readahead', 'reason': set([('fd', 'file')])},
+         {'call': 'getdents', 'reason': set([('fd', 'file')])},
+         {'call': 'sched_getaffinity',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'writev', 'reason': set([('fd', 'file')])},
+         {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+         {'call': 'sched_setparam', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+         {'call': 'pread64', 'reason': set([('fd', 'file')])},
+         {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+         {'call': 'memfd_create',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'ioprio_set', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'remap_file_pages',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'dup3',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'read', 'reason': set([('fd', 'file')])},
+         {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'fchown', 'reason': set([('fd', 'file')])},
+         {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'mq_timedreceive',
+          'reason': set([('fd', 'file'), ('mm_segment_t', 'seg')])},
+         {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'utime', 'reason': set([('fd', 'file')])},
+         {'call': 'sched_setaffinity',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'fsync', 'reason': set([('fd', 'file')])},
+         {'call': 'bpf',
+          'reason': set([('bpf_attr', 'bpf_fd'),
+                         ('bpf_attr', 'flags'),
+                         ('bpf_attr', 'insn_cnt'),
+                         ('bpf_attr', 'kern_version'),
+                         ('bpf_attr', 'prog_flags'),
+                         ('bpf_map', 'key_size'),
+                         ('bpf_map', 'map_type'),
+                         ('bpf_prog', 'aux'),
+                         ('fd', 'file')])},
+         {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'semtimedop', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+         {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+         {'call': 'sendto', 'reason': set([('fd', 'file')])},
+         {'call': 'sched_rr_get_interval',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'epoll_create1',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'tee', 'reason': set([('fd', 'file')])},
+         {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+         {'call': 'lseek', 'reason': set([('fd', 'file')])},
+         {'call': 'connect', 'reason': set([('fd', 'file')])},
+         {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+         {'call': 'epoll_ctl',
+          'reason': set([('fd', 'file'),
+                         ('file', 'f_op'),
+                         ('file', 'private_data')])},
+         {'call': 'flock',
+          'reason': set([('fd', 'file'),
+                         ('file', 'f_op'),
+                         ('file', 'private_data')])},
+         {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+         {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+         {'call': 'openat',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'uselib',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'rt_sigprocmask', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'accept4',
+          'reason': set([('fd', 'file'),
+                         ('file', 'f_op'),
+                         ('file', 'private_data')])},
+         {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'sigaltstack', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'sched_setattr', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+         {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+         {'call': 'socketpair',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+         {'call': 'migrate_pages', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'getitimer', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+         {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+         {'call': 'splice', 'reason': set([('fd', 'file')])},
+         {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+         {'call': 'preadv', 'reason': set([('fd', 'file')])},
+         {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+         {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'shmat',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+         {'call': 'socket',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'pipe2',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+         {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+         {'call': 'prlimit64', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+         {'call': 'perf_event_open',
+          'reason': set([('bpf_prog', 'aux'),
+                         ('fd', 'file'),
+                         ('file', 'f_op'),
+                         ('file', 'private_data'),
+                         ('mm_segment_t', 'seg')])},
+         {'call': 'shmdt',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+         {'call': 'rt_sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+         {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+         {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+         {'call': 'acct',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'open',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+         {'call': 'getpriority', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+         {'call': 'dup',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+         {'call': 'setns',
+          'reason': set([('file', 'f_op'),
+                         ('file', 'private_data'),
+                         ('mm_segment_t', 'seg')])},
+         {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+         {'call': 'listen', 'reason': set([('fd', 'file')])},
+         {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'get_robust_list',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+         {'call': 'mq_timedsend',
+          'reason': set([('fd', 'file'), ('mm_segment_t', 'seg')])},
+         {'call': 'sched_getscheduler',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+         {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'shmctl',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+         {'call': 'swapon',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+         {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+         {'call': 'sched_getattr', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'getrusage', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'sched_setscheduler',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'setitimer', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'ioprio_get', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'llseek', 'reason': set([('fd', 'file')])},
+         {'call': 'mmap_pgoff',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+         {'call': 'readv', 'reason': set([('fd', 'file')])},
+         {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'move_pages', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+         {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+         {'call': 'write', 'reason': set([('fd', 'file')])},
+         {'call': 'setpriority', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+         {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+         {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'mq_open',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'sched_getparam', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'open_by_handle_at',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'bind', 'reason': set([('fd', 'file')])},
+         {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+         {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'brk': [{'call': 'swapoff',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'remap_file_pages',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'io_getevents',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'migrate_pages',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'shmdt',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'brk',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'get_mempolicy',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'munlockall',
+          'reason': set([('mm_struct', 'def_flags'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'pkey_mprotect',
+          'reason': set([('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'madvise',
+          'reason': set([('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'getrusage',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'io_setup',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'mprotect',
+          'reason': set([('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'mremap',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'io_destroy',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'mbind',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'prctl',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'move_pages',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'modify_ldt',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'munlock',
+          'reason': set([('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'mincore',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'io_cancel',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'mlockall',
+          'reason': set([('mm_struct', 'def_flags'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])}],
+ 'capset': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_set', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'semtimedop', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sigaltstack', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'migrate_pages',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prlimit64', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpriority', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_get', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'move_pages', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setpriority', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'cred')])}],
+ 'clock_adjtime': [{'call': 'clock_getres',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'timer_delete',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'timer_create',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'clock_gettime',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'timer_settime',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'timer_gettime',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'clock_settime',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'clock_nanosleep',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'clock_adjtime',
+                    'reason': set([('k_clock', 'clock_adj')])}],
+ 'clock_nanosleep': [{'call': 'rt_sigtimedwait',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'mq_unlink',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'swapoff',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'clock_getres',
+                      'reason': set([('k_clock', 'nsleep')])},
+                     {'call': 'timer_delete',
+                      'reason': set([('k_clock', 'nsleep')])},
+                     {'call': 'fchmod',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'memfd_create',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'readlinkat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'io_getevents',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'fchown',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'mq_timedreceive',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'utime',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'semtimedop',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'settimeofday',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'timer_create',
+                      'reason': set([('k_clock', 'nsleep')])},
+                     {'call': 'clock_gettime',
+                      'reason': set([('k_clock', 'nsleep')])},
+                     {'call': 'sched_rr_get_interval',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'timerfd_gettime',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'pselect6',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'uselib',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'fchmodat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'inotify_add_watch',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'timer_settime',
+                      'reason': set([('k_clock', 'nsleep'),
+                                     ('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'ftruncate',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'timer_gettime',
+                      'reason': set([('k_clock', 'nsleep'),
+                                     ('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'ioctl',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'linkat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'stime',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'futimesat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'poll',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'clock_settime',
+                      'reason': set([('k_clock', 'nsleep')])},
+                     {'call': 'select',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'unlink',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'nanosleep',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'mq_getsetattr',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'faccessat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'swapon',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'epoll_wait',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'fchownat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'fstat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'timerfd_settime',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'mq_notify',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'sendfile',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'newfstat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'clock_nanosleep',
+                      'reason': set([('k_clock', 'nsleep'),
+                                     ('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'unlinkat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'clock_adjtime',
+                      'reason': set([('k_clock', 'nsleep')])},
+                     {'call': 'futex',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'recvmmsg',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'sendfile64',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'ppoll',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])}],
+ 'clock_settime': [{'call': 'clock_getres',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'timer_delete',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'timer_create',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'clock_gettime',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'timer_settime',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'timer_gettime',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'clock_settime',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'clock_nanosleep',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'clock_adjtime',
+                    'reason': set([('k_clock', 'clock_set')])}],
+ 'connect': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+             {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+             {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+             {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+             {'call': 'readahead', 'reason': set([('fd', 'file')])},
+             {'call': 'getdents', 'reason': set([('fd', 'file')])},
+             {'call': 'writev', 'reason': set([('fd', 'file')])},
+             {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+             {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+             {'call': 'pread64', 'reason': set([('fd', 'file')])},
+             {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+             {'call': 'read', 'reason': set([('fd', 'file')])},
+             {'call': 'fchown', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+             {'call': 'utime', 'reason': set([('fd', 'file')])},
+             {'call': 'fsync', 'reason': set([('fd', 'file')])},
+             {'call': 'bpf', 'reason': set([('fd', 'file')])},
+             {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+             {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+             {'call': 'sendto', 'reason': set([('fd', 'file')])},
+             {'call': 'tee', 'reason': set([('fd', 'file')])},
+             {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+             {'call': 'lseek', 'reason': set([('fd', 'file')])},
+             {'call': 'connect', 'reason': set([('fd', 'file')])},
+             {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+             {'call': 'epoll_ctl', 'reason': set([('fd', 'file')])},
+             {'call': 'flock', 'reason': set([('fd', 'file')])},
+             {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+             {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+             {'call': 'accept4', 'reason': set([('fd', 'file')])},
+             {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+             {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+             {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+             {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+             {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+             {'call': 'splice', 'reason': set([('fd', 'file')])},
+             {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+             {'call': 'preadv', 'reason': set([('fd', 'file')])},
+             {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+             {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+             {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+             {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+             {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+             {'call': 'perf_event_open', 'reason': set([('fd', 'file')])},
+             {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+             {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+             {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+             {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+             {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+             {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+             {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+             {'call': 'listen', 'reason': set([('fd', 'file')])},
+             {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+             {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+             {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+             {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+             {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+             {'call': 'llseek', 'reason': set([('fd', 'file')])},
+             {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+             {'call': 'readv', 'reason': set([('fd', 'file')])},
+             {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+             {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+             {'call': 'write', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+             {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+             {'call': 'bind', 'reason': set([('fd', 'file')])},
+             {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+             {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'copy_file_range': [{'call': 'syncfs',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'vmsplice',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'pwritev64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fremovexattr',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'readahead',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'getdents',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'writev',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'preadv64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fchmod',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'pread64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'signalfd4',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'read',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fchown',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'mq_timedreceive',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'utime',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fsync',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'bpf',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'recvfrom',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fsetxattr',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'sendto',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'tee',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'sync_file_range',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'lseek',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'connect',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'getsockname',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'epoll_ctl',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'flock',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'pwritev',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fchdir',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'accept4',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'old_readdir',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'inotify_rm_watch',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'utimensat',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'inotify_add_watch',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'preadv2',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'splice',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'ftruncate',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'preadv',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'getpeername',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'setsockopt',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fcntl',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'ioctl',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'pwrite64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'perf_event_open',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'pwritev64v2',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'futimesat',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'pwritev2',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'shutdown',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'getsockopt',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'mq_getsetattr',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fdatasync',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'getdents64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'listen',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'copy_file_range',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fgetxattr',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fcntl64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fallocate',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'epoll_wait',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'llseek',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'preadv64v2',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'readv',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fstatfs',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fstatfs64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'write',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'mq_notify',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'sendfile',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'bind',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'flistxattr',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'sendfile64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'delete_module': [{'call': 'delete_module',
+                    'reason': set([('module', 'exit'),
+                                   ('module', 'init'),
+                                   ('module', 'state')])},
+                   {'call': 'init_module',
+                    'reason': set([('module', 'exit'),
+                                   ('module', 'init'),
+                                   ('module', 'state')])},
+                   {'call': 'finit_module',
+                    'reason': set([('module', 'exit'),
+                                   ('module', 'init'),
+                                   ('module', 'state')])}],
+ 'dmi_modalias_show': [{'call': 'dmi_modalias_show',
+                        'reason': set([('mafield', 'field'),
+                                       ('mafield', 'prefix')])}],
+ 'dup3': [{'call': 'dup3',
+           'reason': set([('fdtable', 'max_fds'),
+                          ('files_struct', 'fdt'),
+                          ('files_struct', 'resize_in_progress')])},
+          {'call': 'unshare',
+           'reason': set([('fdtable', 'max_fds'),
+                          ('files_struct', 'fdt'),
+                          ('files_struct', 'resize_in_progress')])},
+          {'call': 'select', 'reason': set([('fdtable', 'max_fds')])},
+          {'call': 'dup2',
+           'reason': set([('fdtable', 'max_fds'),
+                          ('files_struct', 'fdt'),
+                          ('files_struct', 'resize_in_progress')])}],
+ 'epoll_create1': [{'call': 'keyctl',
+                    'reason': set([('cred', 'user'),
+                                   ('task_struct', 'cred')])},
+                   {'call': 'rt_sigtimedwait',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setfsuid', 'reason': set([('cred', 'user')])},
+                   {'call': 'msgrcv',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getresuid16', 'reason': set([('cred', 'user')])},
+                   {'call': 'getresgid', 'reason': set([('cred', 'user')])},
+                   {'call': 'sched_getaffinity',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_setparam',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setgid', 'reason': set([('cred', 'user')])},
+                   {'call': 'ioprio_set',
+                    'reason': set([('cred', 'user'),
+                                   ('task_struct', 'cred')])},
+                   {'call': 'capset', 'reason': set([('cred', 'user')])},
+                   {'call': 'getppid',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getresgid16', 'reason': set([('cred', 'user')])},
+                   {'call': 'capget',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_setaffinity',
+                    'reason': set([('cred', 'user'),
+                                   ('task_struct', 'cred')])},
+                   {'call': 'setfsgid', 'reason': set([('cred', 'user')])},
+                   {'call': 'unshare', 'reason': set([('cred', 'user')])},
+                   {'call': 'signal',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setreuid', 'reason': set([('cred', 'user')])},
+                   {'call': 'semtimedop',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'umount',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_rr_get_interval',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'epoll_create1',
+                    'reason': set([('cred', 'user'),
+                                   ('eventpoll', 'user'),
+                                   ('eventpoll', 'ws')])},
+                   {'call': 'getresuid', 'reason': set([('cred', 'user')])},
+                   {'call': 'epoll_ctl',
+                    'reason': set([('eventpoll', 'user'),
+                                   ('eventpoll', 'ws')])},
+                   {'call': 'rt_sigprocmask',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setsid',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sigaltstack',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_setattr',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'migrate_pages',
+                    'reason': set([('cred', 'user'),
+                                   ('task_struct', 'cred')])},
+                   {'call': 'getitimer',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setpgid',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setresgid', 'reason': set([('cred', 'user')])},
+                   {'call': 'setregid', 'reason': set([('cred', 'user')])},
+                   {'call': 'getsid',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('cred', 'user'),
+                                   ('task_struct', 'cred')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getgroups16', 'reason': set([('cred', 'user')])},
+                   {'call': 'rt_sigaction',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getpgid',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getpriority',
+                    'reason': set([('cred', 'user'),
+                                   ('task_struct', 'cred')])},
+                   {'call': 'sigaction',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'faccessat', 'reason': set([('cred', 'user')])},
+                   {'call': 'setns',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+                   {'call': 'get_robust_list',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_getscheduler',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'ptrace',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'epoll_wait',
+                    'reason': set([('eventpoll', 'user'),
+                                   ('eventpoll', 'ws')])},
+                   {'call': 'sched_getattr',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getrusage',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_setscheduler',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setresuid', 'reason': set([('cred', 'user')])},
+                   {'call': 'setitimer',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'ioprio_get',
+                    'reason': set([('cred', 'user'),
+                                   ('task_struct', 'cred')])},
+                   {'call': 'vfork',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setuid', 'reason': set([('cred', 'user')])},
+                   {'call': 'prctl',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'move_pages',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getgroups', 'reason': set([('cred', 'user')])},
+                   {'call': 'setpriority',
+                    'reason': set([('cred', 'user'),
+                                   ('task_struct', 'cred')])},
+                   {'call': 'clone',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_getparam',
+                    'reason': set([('task_struct', 'cred')])}],
+ 'epoll_ctl': [{'call': 'syncfs',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('list_head', 'next')])},
+               {'call': 'keyctl', 'reason': set([('list_head', 'next')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'vmsplice',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('list_head', 'next')])},
+               {'call': 'msgrcv', 'reason': set([('list_head', 'next')])},
+               {'call': 'eventfd2',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'mq_unlink', 'reason': set([('list_head', 'next')])},
+               {'call': 'pwritev64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'kill', 'reason': set([('list_head', 'next')])},
+               {'call': 'swapoff',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'fremovexattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'readahead',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('list_head', 'next')])},
+               {'call': 'getdents',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'timer_delete',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'writev',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'preadv64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sched_setparam',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'fchmod',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('list_head', 'next')])},
+               {'call': 'setgid', 'reason': set([('list_head', 'next')])},
+               {'call': 'pread64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pivot_root', 'reason': set([('list_head', 'next')])},
+               {'call': 'signalfd4',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'memfd_create',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'ioprio_set', 'reason': set([('list_head', 'next')])},
+               {'call': 'delete_module',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'dup3',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'readlinkat', 'reason': set([('list_head', 'next')])},
+               {'call': 'read',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'io_getevents',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'getppid', 'reason': set([('list_head', 'next')])},
+               {'call': 'fchown',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('list_head', 'next')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('list_head', 'next')])},
+               {'call': 'capget', 'reason': set([('list_head', 'next')])},
+               {'call': 'utime',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'ustat', 'reason': set([('list_head', 'next')])},
+               {'call': 'fsync',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'bpf',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('list_head', 'next')])},
+               {'call': 'unshare', 'reason': set([('list_head', 'next')])},
+               {'call': 'signal', 'reason': set([('list_head', 'next')])},
+               {'call': 'setreuid', 'reason': set([('list_head', 'next')])},
+               {'call': 'semtimedop', 'reason': set([('list_head', 'next')])},
+               {'call': 'umount', 'reason': set([('list_head', 'next')])},
+               {'call': 'recvfrom',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fsetxattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'timer_create',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'sendto',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mkdirat', 'reason': set([('list_head', 'next')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'epoll_create1',
+                'reason': set([('epitem', 'nwait'),
+                               ('epitem', 'ws'),
+                               ('epoll_event', 'events'),
+                               ('file', 'f_op'),
+                               ('list_head', 'next')])},
+               {'call': 'timerfd_gettime',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'tee',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('list_head', 'next')])},
+               {'call': 'semctl', 'reason': set([('list_head', 'next')])},
+               {'call': 'sync_file_range',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('list_head', 'next')])},
+               {'call': 'lseek',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'connect',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getsockname',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'epoll_ctl',
+                'reason': set([('epitem', 'nwait'),
+                               ('epitem', 'ws'),
+                               ('epoll_event', 'events'),
+                               ('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('file', 'f_op'),
+                               ('list_head', 'next')])},
+               {'call': 'flock',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('file', 'f_op'),
+                               ('list_head', 'next')])},
+               {'call': 'pwritev',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fchdir',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'openat',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'lookup_dcookie',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'uselib',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'renameat2', 'reason': set([('list_head', 'next')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'accept4',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('file', 'f_op'),
+                               ('list_head', 'next')])},
+               {'call': 'msgctl', 'reason': set([('list_head', 'next')])},
+               {'call': 'reboot', 'reason': set([('list_head', 'next')])},
+               {'call': 'setsid', 'reason': set([('list_head', 'next')])},
+               {'call': 'set_trip_temp',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'sigaltstack',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'sched_setattr',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'old_readdir',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'inotify_rm_watch',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('list_head', 'next')])},
+               {'call': 'socketpair',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'utimensat',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'migrate_pages',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'getitimer', 'reason': set([('list_head', 'next')])},
+               {'call': 'fchmodat', 'reason': set([('list_head', 'next')])},
+               {'call': 'setpgid', 'reason': set([('list_head', 'next')])},
+               {'call': 'init_module',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'setresgid', 'reason': set([('list_head', 'next')])},
+               {'call': 'getcwd', 'reason': set([('list_head', 'next')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('list_head', 'next')])},
+               {'call': 'get_trip_temp',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'preadv2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'timer_settime',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'setregid', 'reason': set([('list_head', 'next')])},
+               {'call': 'splice',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('list_head', 'next')])},
+               {'call': 'ftruncate',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('list_head', 'next')])},
+               {'call': 'timer_gettime',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'preadv',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getpeername',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getsid', 'reason': set([('list_head', 'next')])},
+               {'call': 'shmat',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'setsockopt',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mknodat', 'reason': set([('list_head', 'next')])},
+               {'call': 'socket',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'symlinkat', 'reason': set([('list_head', 'next')])},
+               {'call': 'pipe2',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'fcntl',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'ioctl',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('list_head', 'next')])},
+               {'call': 'prlimit64', 'reason': set([('list_head', 'next')])},
+               {'call': 'pwrite64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'perf_event_open',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('file', 'f_op'),
+                               ('list_head', 'next')])},
+               {'call': 'linkat', 'reason': set([('list_head', 'next')])},
+               {'call': 'getgroups16',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'shmdt',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'pwritev64v2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'quotactl', 'reason': set([('list_head', 'next')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'futimesat',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'request_key',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'getpgid', 'reason': set([('list_head', 'next')])},
+               {'call': 'brk', 'reason': set([('list_head', 'next')])},
+               {'call': 'pwritev2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'shutdown',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'acct',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'open',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'unlink', 'reason': set([('list_head', 'next')])},
+               {'call': 'getsockopt',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'exit_group', 'reason': set([('list_head', 'next')])},
+               {'call': 'getpriority',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'sigaction', 'reason': set([('list_head', 'next')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('list_head', 'next')])},
+               {'call': 'faccessat', 'reason': set([('list_head', 'next')])},
+               {'call': 'rmdir', 'reason': set([('list_head', 'next')])},
+               {'call': 'dup',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'fdatasync',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'setgroups16',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'setns',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'getdents64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'listen',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fork', 'reason': set([('list_head', 'next')])},
+               {'call': 'get_mempolicy',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'io_submit', 'reason': set([('list_head', 'next')])},
+               {'call': 'get_robust_list',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'copy_file_range',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('list_head', 'next')])},
+               {'call': 'sched_yield',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'fgetxattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'ptrace', 'reason': set([('list_head', 'next')])},
+               {'call': 'shmctl',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'fcntl64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'munlockall', 'reason': set([('list_head', 'next')])},
+               {'call': 'swapon',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'fallocate',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pkey_mprotect',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'madvise', 'reason': set([('list_head', 'next')])},
+               {'call': 'epoll_wait',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('list_head', 'next')])},
+               {'call': 'sched_getattr',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'fchownat', 'reason': set([('list_head', 'next')])},
+               {'call': 'getrusage', 'reason': set([('list_head', 'next')])},
+               {'call': 'timerfd_settime',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'setresuid', 'reason': set([('list_head', 'next')])},
+               {'call': 'setitimer', 'reason': set([('list_head', 'next')])},
+               {'call': 'ioprio_get', 'reason': set([('list_head', 'next')])},
+               {'call': 'vfork', 'reason': set([('list_head', 'next')])},
+               {'call': 'setuid', 'reason': set([('list_head', 'next')])},
+               {'call': 'llseek',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'io_setup', 'reason': set([('list_head', 'next')])},
+               {'call': 'mprotect', 'reason': set([('list_head', 'next')])},
+               {'call': 'mmap_pgoff',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'mremap', 'reason': set([('list_head', 'next')])},
+               {'call': 'io_destroy', 'reason': set([('list_head', 'next')])},
+               {'call': 'mbind', 'reason': set([('list_head', 'next')])},
+               {'call': 'preadv64v2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'readv',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'prctl', 'reason': set([('list_head', 'next')])},
+               {'call': 'move_pages', 'reason': set([('list_head', 'next')])},
+               {'call': 'timerfd_create',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'fstatfs',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'modify_ldt', 'reason': set([('list_head', 'next')])},
+               {'call': 'getgroups', 'reason': set([('list_head', 'next')])},
+               {'call': 'fstatfs64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'dup2', 'reason': set([('list_head', 'next')])},
+               {'call': 'get_curr_temp',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'msgsnd', 'reason': set([('list_head', 'next')])},
+               {'call': 'write',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'munlock', 'reason': set([('list_head', 'next')])},
+               {'call': 'setpriority',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'inotify_init1',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'mincore', 'reason': set([('list_head', 'next')])},
+               {'call': 'mq_notify',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('list_head', 'next')])},
+               {'call': 'sendfile',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('list_head', 'next')])},
+               {'call': 'timer_getoverrun',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'kexec_load', 'reason': set([('list_head', 'next')])},
+               {'call': 'clone', 'reason': set([('list_head', 'next')])},
+               {'call': 'mq_open',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'setgroups', 'reason': set([('list_head', 'next')])},
+               {'call': 'unlinkat', 'reason': set([('list_head', 'next')])},
+               {'call': 'sched_getparam',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'io_cancel', 'reason': set([('list_head', 'next')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'bind',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'flistxattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'finit_module',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'sendfile64',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('list_head', 'next')])},
+               {'call': 'mlockall', 'reason': set([('list_head', 'next')])}],
+ 'epoll_wait': [{'call': 'syncfs',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'rt_sigtimedwait',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'vmsplice',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'eventfd2', 'reason': set([('file', 'f_op')])},
+                {'call': 'pwritev64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'swapoff', 'reason': set([('file', 'f_op')])},
+                {'call': 'fremovexattr',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'readahead',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'getdents',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sched_getaffinity',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'writev',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'preadv64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sched_setparam',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fchmod',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'pread64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'signalfd4',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'memfd_create', 'reason': set([('file', 'f_op')])},
+                {'call': 'ioprio_set',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('file', 'f_op')])},
+                {'call': 'dup3', 'reason': set([('file', 'f_op')])},
+                {'call': 'read',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fchown',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'mq_timedreceive',
+                 'reason': set([('fd', 'file'),
+                                ('fd', 'flags'),
+                                ('mm_segment_t', 'seg')])},
+                {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'utime',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sched_setaffinity',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fsync',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'bpf',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'semtimedop',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'recvfrom',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fsetxattr',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sendto',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sched_rr_get_interval',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'epoll_create1', 'reason': set([('file', 'f_op')])},
+                {'call': 'tee',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sync_file_range',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'lseek',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'connect',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'getsockname',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'epoll_ctl',
+                 'reason': set([('fd', 'file'),
+                                ('fd', 'flags'),
+                                ('file', 'f_op')])},
+                {'call': 'flock',
+                 'reason': set([('fd', 'file'),
+                                ('fd', 'flags'),
+                                ('file', 'f_op')])},
+                {'call': 'pwritev',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fchdir',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'openat', 'reason': set([('file', 'f_op')])},
+                {'call': 'uselib', 'reason': set([('file', 'f_op')])},
+                {'call': 'rt_sigprocmask',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'accept4',
+                 'reason': set([('fd', 'file'),
+                                ('fd', 'flags'),
+                                ('file', 'f_op')])},
+                {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sigaltstack',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sched_setattr',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'old_readdir',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'inotify_rm_watch',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'socketpair', 'reason': set([('file', 'f_op')])},
+                {'call': 'utimensat',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'migrate_pages',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'getitimer',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'inotify_add_watch',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'preadv2',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'splice',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'ftruncate',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'preadv',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'getpeername',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'shmat', 'reason': set([('file', 'f_op')])},
+                {'call': 'setsockopt',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'socket', 'reason': set([('file', 'f_op')])},
+                {'call': 'pipe2', 'reason': set([('file', 'f_op')])},
+                {'call': 'fcntl',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'ioctl',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'prlimit64',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'pwrite64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('fd', 'file'),
+                                ('fd', 'flags'),
+                                ('file', 'f_op'),
+                                ('mm_segment_t', 'seg')])},
+                {'call': 'shmdt', 'reason': set([('file', 'f_op')])},
+                {'call': 'pwritev64v2',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'rt_sigaction',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'futimesat',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'pwritev2',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'shutdown',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'acct', 'reason': set([('file', 'f_op')])},
+                {'call': 'open', 'reason': set([('file', 'f_op')])},
+                {'call': 'getsockopt',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'getpriority',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sigaction',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'mq_getsetattr',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'dup', 'reason': set([('file', 'f_op')])},
+                {'call': 'fdatasync',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'setns',
+                 'reason': set([('file', 'f_op'), ('mm_segment_t', 'seg')])},
+                {'call': 'getdents64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'listen',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'get_robust_list',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'copy_file_range',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'mq_timedsend',
+                 'reason': set([('fd', 'file'),
+                                ('fd', 'flags'),
+                                ('mm_segment_t', 'seg')])},
+                {'call': 'sched_getscheduler',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fgetxattr',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'shmctl', 'reason': set([('file', 'f_op')])},
+                {'call': 'fcntl64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'swapon', 'reason': set([('file', 'f_op')])},
+                {'call': 'fallocate',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'epoll_wait',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sched_getattr',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'getrusage',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sched_setscheduler',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'setitimer',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'ioprio_get',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'llseek',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'mmap_pgoff', 'reason': set([('file', 'f_op')])},
+                {'call': 'preadv64v2',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'readv',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'move_pages',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fstatfs',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fstatfs64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'write',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'setpriority',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'mq_notify',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sendfile',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'mq_open', 'reason': set([('file', 'f_op')])},
+                {'call': 'sched_getparam',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'open_by_handle_at',
+                 'reason': set([('file', 'f_op')])},
+                {'call': 'bind',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'flistxattr',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sendfile64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'faccessat': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'eventfd2', 'reason': set([('path', 'mnt')])},
+               {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'swapoff', 'reason': set([('path', 'mnt')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setparam',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'pivot_root', 'reason': set([('path', 'mnt')])},
+               {'call': 'memfd_create', 'reason': set([('path', 'mnt')])},
+               {'call': 'ioprio_set',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'remap_file_pages', 'reason': set([('path', 'mnt')])},
+               {'call': 'dup3', 'reason': set([('path', 'mnt')])},
+               {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'unshare', 'reason': set([('path', 'mnt')])},
+               {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setreuid', 'reason': set([('cred', 'uid')])},
+               {'call': 'semtimedop',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'epoll_create1', 'reason': set([('path', 'mnt')])},
+               {'call': 'epoll_ctl', 'reason': set([('path', 'mnt')])},
+               {'call': 'flock', 'reason': set([('path', 'mnt')])},
+               {'call': 'openat', 'reason': set([('path', 'mnt')])},
+               {'call': 'lookup_dcookie', 'reason': set([('path', 'mnt')])},
+               {'call': 'uselib', 'reason': set([('path', 'mnt')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'accept4', 'reason': set([('path', 'mnt')])},
+               {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaltstack',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'socketpair', 'reason': set([('path', 'mnt')])},
+               {'call': 'migrate_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getcwd', 'reason': set([('path', 'mnt')])},
+               {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'shmat', 'reason': set([('path', 'mnt')])},
+               {'call': 'socket', 'reason': set([('path', 'mnt')])},
+               {'call': 'pipe2', 'reason': set([('path', 'mnt')])},
+               {'call': 'prlimit64',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'perf_event_open',
+                'reason': set([('path', 'mnt'), ('task_struct', 'cred')])},
+               {'call': 'shmdt', 'reason': set([('path', 'mnt')])},
+               {'call': 'quotactl', 'reason': set([('path', 'mnt')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'acct', 'reason': set([('path', 'mnt')])},
+               {'call': 'open', 'reason': set([('path', 'mnt')])},
+               {'call': 'getpriority',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'dup', 'reason': set([('path', 'mnt')])},
+               {'call': 'setns',
+                'reason': set([('path', 'mnt'), ('task_struct', 'cred')])},
+               {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'get_robust_list',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'shmctl', 'reason': set([('path', 'mnt')])},
+               {'call': 'swapon', 'reason': set([('path', 'mnt')])},
+               {'call': 'sched_getattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getrusage',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setresuid', 'reason': set([('cred', 'uid')])},
+               {'call': 'setitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_get',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setuid', 'reason': set([('cred', 'uid')])},
+               {'call': 'mmap_pgoff', 'reason': set([('path', 'mnt')])},
+               {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'move_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpriority',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_open', 'reason': set([('path', 'mnt')])},
+               {'call': 'sched_getparam',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('path', 'mnt')])}],
+ 'fallocate': [{'call': 'syncfs',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'vmsplice',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pwritev64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fremovexattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'readahead',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getdents',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'writev',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'preadv64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fchmod',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pread64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'signalfd4',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'read',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fchown',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'utime',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fsync',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'bpf',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'recvfrom',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fsetxattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sendto',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'tee',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sync_file_range',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'lseek',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'connect',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getsockname',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'epoll_ctl',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'flock',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pwritev',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fchdir',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'accept4',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'old_readdir',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'inotify_rm_watch',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'utimensat',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'preadv2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'splice',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'ftruncate',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'preadv',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getpeername',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'setsockopt',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fcntl',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'ioctl',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pwrite64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'perf_event_open',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pwritev64v2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'futimesat',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pwritev2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'shutdown',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getsockopt',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fdatasync',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getdents64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'listen',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'copy_file_range',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fgetxattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fcntl64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fallocate',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'epoll_wait',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'llseek',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'preadv64v2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'readv',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fstatfs',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fstatfs64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'write',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_notify',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sendfile',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'bind',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'flistxattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sendfile64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'fchdir': [{'call': 'syncfs',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'vmsplice',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'eventfd2', 'reason': set([('path', 'dentry')])},
+            {'call': 'pwritev64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'swapoff', 'reason': set([('path', 'dentry')])},
+            {'call': 'fremovexattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'readahead',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getdents',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'writev',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'preadv64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fchmod',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pread64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pivot_root', 'reason': set([('path', 'dentry')])},
+            {'call': 'signalfd4',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'memfd_create', 'reason': set([('path', 'dentry')])},
+            {'call': 'remap_file_pages', 'reason': set([('path', 'dentry')])},
+            {'call': 'dup3', 'reason': set([('path', 'dentry')])},
+            {'call': 'read',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fchown',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'utime',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fsync',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'bpf', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'unshare', 'reason': set([('path', 'dentry')])},
+            {'call': 'recvfrom',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fsetxattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sendto',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'epoll_create1', 'reason': set([('path', 'dentry')])},
+            {'call': 'tee', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sync_file_range',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'lseek',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'connect',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getsockname',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'epoll_ctl',
+             'reason': set([('fd', 'file'),
+                            ('fd', 'flags'),
+                            ('path', 'dentry')])},
+            {'call': 'flock',
+             'reason': set([('fd', 'file'),
+                            ('fd', 'flags'),
+                            ('path', 'dentry')])},
+            {'call': 'pwritev',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fchdir',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'openat', 'reason': set([('path', 'dentry')])},
+            {'call': 'lookup_dcookie', 'reason': set([('path', 'dentry')])},
+            {'call': 'uselib', 'reason': set([('path', 'dentry')])},
+            {'call': 'accept4',
+             'reason': set([('fd', 'file'),
+                            ('fd', 'flags'),
+                            ('path', 'dentry')])},
+            {'call': 'old_readdir',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'inotify_rm_watch',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'socketpair', 'reason': set([('path', 'dentry')])},
+            {'call': 'utimensat',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getcwd', 'reason': set([('path', 'dentry')])},
+            {'call': 'inotify_add_watch',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'preadv2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'splice',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'ftruncate',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'preadv',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getpeername',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'shmat', 'reason': set([('path', 'dentry')])},
+            {'call': 'setsockopt',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'socket', 'reason': set([('path', 'dentry')])},
+            {'call': 'pipe2', 'reason': set([('path', 'dentry')])},
+            {'call': 'fcntl',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'ioctl',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pwrite64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'perf_event_open',
+             'reason': set([('fd', 'file'),
+                            ('fd', 'flags'),
+                            ('path', 'dentry')])},
+            {'call': 'shmdt', 'reason': set([('path', 'dentry')])},
+            {'call': 'pwritev64v2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'quotactl', 'reason': set([('path', 'dentry')])},
+            {'call': 'futimesat',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pwritev2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'shutdown',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'acct', 'reason': set([('path', 'dentry')])},
+            {'call': 'open', 'reason': set([('path', 'dentry')])},
+            {'call': 'getsockopt',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_getsetattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'dup', 'reason': set([('path', 'dentry')])},
+            {'call': 'fdatasync',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'setns', 'reason': set([('path', 'dentry')])},
+            {'call': 'getdents64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'listen',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'copy_file_range',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fgetxattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'shmctl', 'reason': set([('path', 'dentry')])},
+            {'call': 'fcntl64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'swapon', 'reason': set([('path', 'dentry')])},
+            {'call': 'fallocate',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'epoll_wait',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'llseek',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mmap_pgoff', 'reason': set([('path', 'dentry')])},
+            {'call': 'preadv64v2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'readv',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fstatfs',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fstatfs64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'write',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_notify',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sendfile',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_open', 'reason': set([('path', 'dentry')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('path', 'dentry')])},
+            {'call': 'bind',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'flistxattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sendfile64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'fchmod': [{'call': 'syncfs',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'vmsplice',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'eventfd2',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'pwritev64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'swapoff',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'fremovexattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'readahead',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getdents',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'writev',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'preadv64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fchmod',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pread64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pivot_root',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'signalfd4',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'memfd_create',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'remap_file_pages',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'dup3',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'read',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fchown',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'utime',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fsync',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'bpf', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'unshare',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'recvfrom',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fsetxattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sendto',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'epoll_create1',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'tee', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sync_file_range',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'lseek',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'connect',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getsockname',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'epoll_ctl',
+             'reason': set([('fd', 'file'),
+                            ('fd', 'flags'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt')])},
+            {'call': 'flock',
+             'reason': set([('fd', 'file'),
+                            ('fd', 'flags'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt')])},
+            {'call': 'pwritev',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fchdir',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'openat',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'lookup_dcookie',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'uselib',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'accept4',
+             'reason': set([('fd', 'file'),
+                            ('fd', 'flags'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt')])},
+            {'call': 'old_readdir',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'inotify_rm_watch',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'socketpair',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'utimensat',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getcwd',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'inotify_add_watch',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'preadv2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'splice',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'ftruncate',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'preadv',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getpeername',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'shmat',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'setsockopt',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'socket',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'pipe2',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'fcntl',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'ioctl',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pwrite64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'perf_event_open',
+             'reason': set([('fd', 'file'),
+                            ('fd', 'flags'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt')])},
+            {'call': 'shmdt',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'pwritev64v2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'quotactl',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'futimesat',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pwritev2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'shutdown',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'acct',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'open',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'getsockopt',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_getsetattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'dup',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'fdatasync',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'setns',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'getdents64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'listen',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'copy_file_range',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fgetxattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'shmctl',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'fcntl64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'swapon',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'fallocate',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'epoll_wait',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'llseek',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mmap_pgoff',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'preadv64v2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'readv',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fstatfs',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fstatfs64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'write',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_notify',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sendfile',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_open',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'bind',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'flistxattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sendfile64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'fchmodat': [{'call': 'eventfd2',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'swapoff',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'pivot_root',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'memfd_create',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'dup3',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'unshare',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'epoll_create1',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'epoll_ctl',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'flock',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'openat',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'lookup_dcookie',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'uselib',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'accept4',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'socketpair',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'getcwd',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'shmat',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'socket',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'pipe2',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'perf_event_open',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'shmdt',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'quotactl',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'acct',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'open',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'dup',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'setns',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'shmctl',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'swapon',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'mmap_pgoff',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'mq_open',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'fchown': [{'call': 'syncfs',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'vmsplice',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'eventfd2', 'reason': set([('path', 'dentry')])},
+            {'call': 'pwritev64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'swapoff', 'reason': set([('path', 'dentry')])},
+            {'call': 'fremovexattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'readahead',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getdents',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'writev',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'preadv64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fchmod',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pread64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pivot_root', 'reason': set([('path', 'dentry')])},
+            {'call': 'signalfd4',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'memfd_create', 'reason': set([('path', 'dentry')])},
+            {'call': 'remap_file_pages', 'reason': set([('path', 'dentry')])},
+            {'call': 'dup3', 'reason': set([('path', 'dentry')])},
+            {'call': 'read',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fchown',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'utime',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fsync',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'bpf', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'unshare', 'reason': set([('path', 'dentry')])},
+            {'call': 'recvfrom',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fsetxattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sendto',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'epoll_create1', 'reason': set([('path', 'dentry')])},
+            {'call': 'tee', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sync_file_range',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'lseek',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'connect',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getsockname',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'epoll_ctl',
+             'reason': set([('fd', 'file'),
+                            ('fd', 'flags'),
+                            ('path', 'dentry')])},
+            {'call': 'flock',
+             'reason': set([('fd', 'file'),
+                            ('fd', 'flags'),
+                            ('path', 'dentry')])},
+            {'call': 'pwritev',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fchdir',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'openat', 'reason': set([('path', 'dentry')])},
+            {'call': 'lookup_dcookie', 'reason': set([('path', 'dentry')])},
+            {'call': 'uselib', 'reason': set([('path', 'dentry')])},
+            {'call': 'accept4',
+             'reason': set([('fd', 'file'),
+                            ('fd', 'flags'),
+                            ('path', 'dentry')])},
+            {'call': 'old_readdir',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'inotify_rm_watch',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'socketpair', 'reason': set([('path', 'dentry')])},
+            {'call': 'utimensat',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getcwd', 'reason': set([('path', 'dentry')])},
+            {'call': 'inotify_add_watch',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'preadv2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'splice',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'ftruncate',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'preadv',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getpeername',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'shmat', 'reason': set([('path', 'dentry')])},
+            {'call': 'setsockopt',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'socket', 'reason': set([('path', 'dentry')])},
+            {'call': 'pipe2', 'reason': set([('path', 'dentry')])},
+            {'call': 'fcntl',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'ioctl',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pwrite64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'perf_event_open',
+             'reason': set([('fd', 'file'),
+                            ('fd', 'flags'),
+                            ('path', 'dentry')])},
+            {'call': 'shmdt', 'reason': set([('path', 'dentry')])},
+            {'call': 'pwritev64v2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'quotactl', 'reason': set([('path', 'dentry')])},
+            {'call': 'futimesat',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pwritev2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'shutdown',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'acct', 'reason': set([('path', 'dentry')])},
+            {'call': 'open', 'reason': set([('path', 'dentry')])},
+            {'call': 'getsockopt',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_getsetattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'dup', 'reason': set([('path', 'dentry')])},
+            {'call': 'fdatasync',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'setns', 'reason': set([('path', 'dentry')])},
+            {'call': 'getdents64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'listen',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'copy_file_range',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fgetxattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'shmctl', 'reason': set([('path', 'dentry')])},
+            {'call': 'fcntl64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'swapon', 'reason': set([('path', 'dentry')])},
+            {'call': 'fallocate',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'epoll_wait',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'llseek',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mmap_pgoff', 'reason': set([('path', 'dentry')])},
+            {'call': 'preadv64v2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'readv',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fstatfs',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fstatfs64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'write',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_notify',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sendfile',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_open', 'reason': set([('path', 'dentry')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('path', 'dentry')])},
+            {'call': 'bind',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'flistxattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sendfile64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'fchownat': [{'call': 'eventfd2', 'reason': set([('path', 'dentry')])},
+              {'call': 'swapoff', 'reason': set([('path', 'dentry')])},
+              {'call': 'pivot_root', 'reason': set([('path', 'dentry')])},
+              {'call': 'memfd_create', 'reason': set([('path', 'dentry')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('path', 'dentry')])},
+              {'call': 'dup3', 'reason': set([('path', 'dentry')])},
+              {'call': 'unshare', 'reason': set([('path', 'dentry')])},
+              {'call': 'epoll_create1', 'reason': set([('path', 'dentry')])},
+              {'call': 'epoll_ctl', 'reason': set([('path', 'dentry')])},
+              {'call': 'flock', 'reason': set([('path', 'dentry')])},
+              {'call': 'openat', 'reason': set([('path', 'dentry')])},
+              {'call': 'lookup_dcookie', 'reason': set([('path', 'dentry')])},
+              {'call': 'uselib', 'reason': set([('path', 'dentry')])},
+              {'call': 'accept4', 'reason': set([('path', 'dentry')])},
+              {'call': 'socketpair', 'reason': set([('path', 'dentry')])},
+              {'call': 'getcwd', 'reason': set([('path', 'dentry')])},
+              {'call': 'shmat', 'reason': set([('path', 'dentry')])},
+              {'call': 'socket', 'reason': set([('path', 'dentry')])},
+              {'call': 'pipe2', 'reason': set([('path', 'dentry')])},
+              {'call': 'perf_event_open',
+               'reason': set([('path', 'dentry')])},
+              {'call': 'shmdt', 'reason': set([('path', 'dentry')])},
+              {'call': 'quotactl', 'reason': set([('path', 'dentry')])},
+              {'call': 'acct', 'reason': set([('path', 'dentry')])},
+              {'call': 'open', 'reason': set([('path', 'dentry')])},
+              {'call': 'dup', 'reason': set([('path', 'dentry')])},
+              {'call': 'setns', 'reason': set([('path', 'dentry')])},
+              {'call': 'shmctl', 'reason': set([('path', 'dentry')])},
+              {'call': 'swapon', 'reason': set([('path', 'dentry')])},
+              {'call': 'mmap_pgoff', 'reason': set([('path', 'dentry')])},
+              {'call': 'mq_open', 'reason': set([('path', 'dentry')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('path', 'dentry')])}],
+ 'fcntl': [{'call': 'syncfs',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'vmsplice',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+           {'call': 'pwritev64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fremovexattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'readahead',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getdents',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'writev',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'preadv64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fchmod',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pread64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'signalfd4',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+           {'call': 'remap_file_pages', 'reason': set([('file', 'f_mode')])},
+           {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+           {'call': 'read', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fchown',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'utime',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fsync',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'bpf', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'recvfrom',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fsetxattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'sendto',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+           {'call': 'tee', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'sync_file_range',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'lseek',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'connect',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getsockname',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'epoll_ctl',
+            'reason': set([('fd', 'file'),
+                           ('fd', 'flags'),
+                           ('file', 'f_mode')])},
+           {'call': 'flock',
+            'reason': set([('fd', 'file'),
+                           ('fd', 'flags'),
+                           ('file', 'f_mode')])},
+           {'call': 'pwritev',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fchdir',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+           {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+           {'call': 'accept4',
+            'reason': set([('fd', 'file'),
+                           ('fd', 'flags'),
+                           ('file', 'f_mode')])},
+           {'call': 'old_readdir',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'inotify_rm_watch',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+           {'call': 'utimensat',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'inotify_add_watch',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'preadv2',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'splice',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'ftruncate',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'preadv',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getpeername',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+           {'call': 'setsockopt',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+           {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fcntl',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'ioctl',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pwrite64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'perf_event_open',
+            'reason': set([('fd', 'file'),
+                           ('fd', 'flags'),
+                           ('file', 'f_mode')])},
+           {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+           {'call': 'pwritev64v2',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'futimesat',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pwritev2',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'shutdown',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+           {'call': 'open', 'reason': set([('file', 'f_mode')])},
+           {'call': 'getsockopt',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_getsetattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fdatasync',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+           {'call': 'getdents64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'listen',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'copy_file_range',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fgetxattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fcntl64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fallocate',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'epoll_wait',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'llseek',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+           {'call': 'preadv64v2',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'readv',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fstatfs',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fstatfs64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'write',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_notify',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'sendfile',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+           {'call': 'open_by_handle_at', 'reason': set([('file', 'f_mode')])},
+           {'call': 'bind', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'flistxattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'sendfile64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'fcntl64': [{'call': 'syncfs',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'vmsplice',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pwritev64',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fremovexattr',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'readahead',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'getdents',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'writev',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'preadv64',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'fchmod',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'pread64',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'signalfd4',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('file', 'f_mode')])},
+             {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+             {'call': 'read',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'fchown',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'utime',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'fsync',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'bpf',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'recvfrom',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'fsetxattr',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'sendto',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+             {'call': 'tee',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'sync_file_range',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'lseek',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'connect',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'getsockname',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'epoll_ctl',
+              'reason': set([('fd', 'file'),
+                             ('fd', 'flags'),
+                             ('file', 'f_mode')])},
+             {'call': 'flock',
+              'reason': set([('fd', 'file'),
+                             ('fd', 'flags'),
+                             ('file', 'f_mode')])},
+             {'call': 'pwritev',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'fchdir',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+             {'call': 'accept4',
+              'reason': set([('fd', 'file'),
+                             ('fd', 'flags'),
+                             ('file', 'f_mode')])},
+             {'call': 'old_readdir',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'inotify_rm_watch',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+             {'call': 'utimensat',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'inotify_add_watch',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'preadv2',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'splice',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'ftruncate',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'preadv',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'getpeername',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'setsockopt',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fcntl',
+              'reason': set([('fd', 'file'),
+                             ('fd', 'flags'),
+                             ('flock', 'l_len'),
+                             ('flock', 'l_start')])},
+             {'call': 'ioctl',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'pwrite64',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'perf_event_open',
+              'reason': set([('fd', 'file'),
+                             ('fd', 'flags'),
+                             ('file', 'f_mode')])},
+             {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pwritev64v2',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'futimesat',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'pwritev2',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'shutdown',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'getsockopt',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'mq_getsetattr',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fdatasync',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+             {'call': 'getdents64',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'listen',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'copy_file_range',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'mq_timedsend',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'fgetxattr',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fcntl64',
+              'reason': set([('fd', 'file'),
+                             ('fd', 'flags'),
+                             ('flock', 'l_len'),
+                             ('flock', 'l_start')])},
+             {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fallocate',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'epoll_wait',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'llseek',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'preadv64v2',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'readv',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'fstatfs',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'fstatfs64',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'write',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'mq_notify',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'sendfile',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open_by_handle_at',
+              'reason': set([('file', 'f_mode')])},
+             {'call': 'bind',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'flistxattr',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'sendfile64',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'fdatasync': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+               {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+               {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+               {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+               {'call': 'readahead', 'reason': set([('fd', 'file')])},
+               {'call': 'getdents', 'reason': set([('fd', 'file')])},
+               {'call': 'writev', 'reason': set([('fd', 'file')])},
+               {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+               {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+               {'call': 'pread64', 'reason': set([('fd', 'file')])},
+               {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+               {'call': 'read', 'reason': set([('fd', 'file')])},
+               {'call': 'fchown', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+               {'call': 'utime', 'reason': set([('fd', 'file')])},
+               {'call': 'fsync', 'reason': set([('fd', 'file')])},
+               {'call': 'bpf', 'reason': set([('fd', 'file')])},
+               {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+               {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'sendto', 'reason': set([('fd', 'file')])},
+               {'call': 'tee', 'reason': set([('fd', 'file')])},
+               {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+               {'call': 'lseek', 'reason': set([('fd', 'file')])},
+               {'call': 'connect', 'reason': set([('fd', 'file')])},
+               {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+               {'call': 'epoll_ctl', 'reason': set([('fd', 'file')])},
+               {'call': 'flock', 'reason': set([('fd', 'file')])},
+               {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+               {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+               {'call': 'accept4', 'reason': set([('fd', 'file')])},
+               {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+               {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+               {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+               {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+               {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+               {'call': 'splice', 'reason': set([('fd', 'file')])},
+               {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+               {'call': 'preadv', 'reason': set([('fd', 'file')])},
+               {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+               {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+               {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+               {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+               {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+               {'call': 'perf_event_open', 'reason': set([('fd', 'file')])},
+               {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+               {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+               {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+               {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+               {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+               {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+               {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+               {'call': 'listen', 'reason': set([('fd', 'file')])},
+               {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+               {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+               {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+               {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+               {'call': 'llseek', 'reason': set([('fd', 'file')])},
+               {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+               {'call': 'readv', 'reason': set([('fd', 'file')])},
+               {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+               {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+               {'call': 'write', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+               {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+               {'call': 'bind', 'reason': set([('fd', 'file')])},
+               {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'fgetxattr': [{'call': 'syncfs',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'vmsplice',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pwritev64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fremovexattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'readahead',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getdents',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'writev',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'preadv64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fchmod',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pread64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'signalfd4',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'read',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fchown',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'utime',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fsync',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'bpf',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'recvfrom',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fsetxattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sendto',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'tee',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sync_file_range',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'lseek',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'connect',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getsockname',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'epoll_ctl',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'flock',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pwritev',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fchdir',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'accept4',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'old_readdir',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'inotify_rm_watch',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'utimensat',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'preadv2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'splice',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'ftruncate',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'preadv',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getpeername',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'setsockopt',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fcntl',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'ioctl',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pwrite64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'perf_event_open',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pwritev64v2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'futimesat',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pwritev2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'shutdown',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getsockopt',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fdatasync',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getdents64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'listen',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'copy_file_range',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fgetxattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fcntl64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fallocate',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'epoll_wait',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'llseek',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'preadv64v2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'readv',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fstatfs',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fstatfs64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'write',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_notify',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sendfile',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'bind',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'flistxattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sendfile64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'finit_module': [{'call': 'delete_module',
+                   'reason': set([('module', 'args'),
+                                  ('module', 'kp'),
+                                  ('module', 'num_kp'),
+                                  ('module_layout', 'base'),
+                                  ('module_layout', 'size')])},
+                  {'call': 'init_module',
+                   'reason': set([('load_info', 'debug'),
+                                  ('load_info', 'num_debug'),
+                                  ('module', 'args'),
+                                  ('module', 'kp'),
+                                  ('module', 'num_kp'),
+                                  ('module_layout', 'base'),
+                                  ('module_layout', 'size')])},
+                  {'call': 'finit_module',
+                   'reason': set([('load_info', 'debug'),
+                                  ('load_info', 'num_debug'),
+                                  ('module', 'args'),
+                                  ('module', 'kp'),
+                                  ('module', 'num_kp'),
+                                  ('module_layout', 'base'),
+                                  ('module_layout', 'size')])}],
+ 'flistxattr': [{'call': 'syncfs',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'vmsplice',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'pwritev64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fremovexattr',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'readahead',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'getdents',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'writev',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'preadv64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fchmod',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'pread64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'signalfd4',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'read',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fchown',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'mq_timedreceive',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'utime',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fsync',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'bpf',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'recvfrom',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fsetxattr',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sendto',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'tee',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sync_file_range',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'lseek',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'connect',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'getsockname',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'epoll_ctl',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'flock',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'pwritev',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fchdir',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'accept4',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'old_readdir',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'inotify_rm_watch',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'utimensat',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'inotify_add_watch',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'preadv2',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'splice',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'ftruncate',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'preadv',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'getpeername',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'setsockopt',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fcntl',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'ioctl',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'pwrite64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'pwritev64v2',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'futimesat',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'pwritev2',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'shutdown',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'getsockopt',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'mq_getsetattr',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fdatasync',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'getdents64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'listen',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'copy_file_range',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'mq_timedsend',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fgetxattr',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fcntl64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fallocate',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'epoll_wait',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'llseek',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'preadv64v2',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'readv',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fstatfs',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fstatfs64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'write',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'mq_notify',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sendfile',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'bind',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'flistxattr',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sendfile64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'flock': [{'call': 'syncfs',
+            'reason': set([('fd', 'file'),
+                           ('fd', 'flags'),
+                           ('super_block', 's_flags')])},
+           {'call': 'vmsplice',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+           {'call': 'pwritev64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fremovexattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'readahead',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getdents',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'writev',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'preadv64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fchmod',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pread64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'signalfd4',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+           {'call': 'remap_file_pages', 'reason': set([('file', 'f_mode')])},
+           {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+           {'call': 'read', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fchown',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'utime',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'ustat', 'reason': set([('super_block', 's_flags')])},
+           {'call': 'fsync',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'bpf', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'umount', 'reason': set([('super_block', 's_flags')])},
+           {'call': 'recvfrom',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fsetxattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'sendto',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+           {'call': 'tee', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'sync_file_range',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'lseek',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'connect',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getsockname',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'epoll_ctl',
+            'reason': set([('fd', 'file'),
+                           ('fd', 'flags'),
+                           ('file', 'f_mode')])},
+           {'call': 'flock',
+            'reason': set([('fd', 'file'),
+                           ('fd', 'flags'),
+                           ('file', 'f_mode')])},
+           {'call': 'pwritev',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fchdir',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+           {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+           {'call': 'accept4',
+            'reason': set([('fd', 'file'),
+                           ('fd', 'flags'),
+                           ('file', 'f_mode')])},
+           {'call': 'old_readdir',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'inotify_rm_watch',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+           {'call': 'utimensat',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'inotify_add_watch',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'preadv2',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'splice',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'ftruncate',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'preadv',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getpeername',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+           {'call': 'setsockopt',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+           {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fcntl',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'ioctl',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pwrite64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'perf_event_open',
+            'reason': set([('fd', 'file'),
+                           ('fd', 'flags'),
+                           ('file', 'f_mode')])},
+           {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+           {'call': 'pwritev64v2',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'quotactl', 'reason': set([('super_block', 's_flags')])},
+           {'call': 'futimesat',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pwritev2',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'shutdown',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+           {'call': 'open', 'reason': set([('file', 'f_mode')])},
+           {'call': 'getsockopt',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_getsetattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fdatasync',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+           {'call': 'getdents64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'listen',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'copy_file_range',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fgetxattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fcntl64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'swapon',
+            'reason': set([('file', 'f_mode'), ('super_block', 's_flags')])},
+           {'call': 'fallocate',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'epoll_wait',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'llseek',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+           {'call': 'preadv64v2',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'readv',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fstatfs',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fstatfs64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'write',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_notify',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'sendfile',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+           {'call': 'open_by_handle_at', 'reason': set([('file', 'f_mode')])},
+           {'call': 'bind', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'flistxattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'sendfile64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'fremovexattr': [{'call': 'syncfs',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'vmsplice',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'pwritev64',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'fremovexattr',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'readahead',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'getdents',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'writev',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'preadv64',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'fchmod',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'pread64',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'signalfd4',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'read',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'fchown',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'mq_timedreceive',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'utime',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'fsync',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'bpf',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'recvfrom',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'fsetxattr',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'sendto',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'tee',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'sync_file_range',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'lseek',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'connect',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'getsockname',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'epoll_ctl',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'flock',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'pwritev',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'fchdir',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'accept4',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'old_readdir',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'inotify_rm_watch',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'utimensat',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'inotify_add_watch',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'preadv2',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'splice',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'ftruncate',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'preadv',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'getpeername',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'setsockopt',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'fcntl',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'ioctl',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'pwrite64',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'perf_event_open',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'pwritev64v2',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'futimesat',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'pwritev2',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'shutdown',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'getsockopt',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'mq_getsetattr',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'fdatasync',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'getdents64',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'listen',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'copy_file_range',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'mq_timedsend',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'fgetxattr',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'fcntl64',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'fallocate',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'epoll_wait',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'llseek',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'preadv64v2',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'readv',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'fstatfs',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'fstatfs64',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'write',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'mq_notify',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'sendfile',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'bind',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'flistxattr',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                  {'call': 'sendfile64',
+                   'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'fsetxattr': [{'call': 'syncfs',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'vmsplice',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pwritev64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fremovexattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'readahead',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getdents',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'writev',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'preadv64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fchmod',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pread64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'signalfd4',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'read',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fchown',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'utime',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fsync',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'bpf',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'recvfrom',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fsetxattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sendto',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'tee',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sync_file_range',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'lseek',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'connect',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getsockname',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'epoll_ctl',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'flock',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pwritev',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fchdir',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'accept4',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'old_readdir',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'inotify_rm_watch',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'utimensat',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'preadv2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'splice',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'ftruncate',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'preadv',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getpeername',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'setsockopt',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fcntl',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'ioctl',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pwrite64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'perf_event_open',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pwritev64v2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'futimesat',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pwritev2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'shutdown',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getsockopt',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fdatasync',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getdents64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'listen',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'copy_file_range',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fgetxattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fcntl64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fallocate',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'epoll_wait',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'llseek',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'preadv64v2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'readv',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fstatfs',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fstatfs64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'write',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_notify',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sendfile',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'bind',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'flistxattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sendfile64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'fstat': [{'call': 'lstat',
+            'reason': set([('__old_kernel_stat', 'st_ino'),
+                           ('__old_kernel_stat', 'st_nlink')])},
+           {'call': 'stat',
+            'reason': set([('__old_kernel_stat', 'st_ino'),
+                           ('__old_kernel_stat', 'st_nlink')])},
+           {'call': 'fstat',
+            'reason': set([('__old_kernel_stat', 'st_ino'),
+                           ('__old_kernel_stat', 'st_nlink'),
+                           ('kstat', 'dev'),
+                           ('kstat', 'ino'),
+                           ('kstat', 'nlink'),
+                           ('kstat', 'rdev')])},
+           {'call': 'newfstat',
+            'reason': set([('kstat', 'dev'),
+                           ('kstat', 'ino'),
+                           ('kstat', 'nlink'),
+                           ('kstat', 'rdev')])}],
+ 'fstatfs': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+             {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+             {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+             {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+             {'call': 'readahead', 'reason': set([('fd', 'file')])},
+             {'call': 'getdents', 'reason': set([('fd', 'file')])},
+             {'call': 'writev', 'reason': set([('fd', 'file')])},
+             {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+             {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+             {'call': 'pread64', 'reason': set([('fd', 'file')])},
+             {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+             {'call': 'read', 'reason': set([('fd', 'file')])},
+             {'call': 'fchown', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+             {'call': 'utime', 'reason': set([('fd', 'file')])},
+             {'call': 'ustat',
+              'reason': set([('kstatfs', 'f_ffree'),
+                             ('kstatfs', 'f_files')])},
+             {'call': 'fsync', 'reason': set([('fd', 'file')])},
+             {'call': 'bpf', 'reason': set([('fd', 'file')])},
+             {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+             {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+             {'call': 'sendto', 'reason': set([('fd', 'file')])},
+             {'call': 'tee', 'reason': set([('fd', 'file')])},
+             {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+             {'call': 'lseek', 'reason': set([('fd', 'file')])},
+             {'call': 'connect', 'reason': set([('fd', 'file')])},
+             {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+             {'call': 'epoll_ctl', 'reason': set([('fd', 'file')])},
+             {'call': 'flock', 'reason': set([('fd', 'file')])},
+             {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+             {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+             {'call': 'accept4', 'reason': set([('fd', 'file')])},
+             {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+             {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+             {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+             {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+             {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+             {'call': 'splice', 'reason': set([('fd', 'file')])},
+             {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+             {'call': 'preadv', 'reason': set([('fd', 'file')])},
+             {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+             {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+             {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+             {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+             {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+             {'call': 'perf_event_open', 'reason': set([('fd', 'file')])},
+             {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+             {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+             {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+             {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+             {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+             {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+             {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+             {'call': 'listen', 'reason': set([('fd', 'file')])},
+             {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+             {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+             {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+             {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+             {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+             {'call': 'llseek', 'reason': set([('fd', 'file')])},
+             {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+             {'call': 'readv', 'reason': set([('fd', 'file')])},
+             {'call': 'fstatfs',
+              'reason': set([('fd', 'file'),
+                             ('kstatfs', 'f_ffree'),
+                             ('kstatfs', 'f_files')])},
+             {'call': 'statfs',
+              'reason': set([('kstatfs', 'f_ffree'),
+                             ('kstatfs', 'f_files')])},
+             {'call': 'fstatfs64',
+              'reason': set([('fd', 'file'),
+                             ('kstatfs', 'f_ffree'),
+                             ('kstatfs', 'f_files')])},
+             {'call': 'write', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+             {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+             {'call': 'statfs64',
+              'reason': set([('kstatfs', 'f_ffree'),
+                             ('kstatfs', 'f_files')])},
+             {'call': 'bind', 'reason': set([('fd', 'file')])},
+             {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+             {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'fstatfs64': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+               {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+               {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+               {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+               {'call': 'readahead', 'reason': set([('fd', 'file')])},
+               {'call': 'getdents', 'reason': set([('fd', 'file')])},
+               {'call': 'writev', 'reason': set([('fd', 'file')])},
+               {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+               {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+               {'call': 'pread64', 'reason': set([('fd', 'file')])},
+               {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+               {'call': 'read', 'reason': set([('fd', 'file')])},
+               {'call': 'fchown', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+               {'call': 'utime', 'reason': set([('fd', 'file')])},
+               {'call': 'ustat',
+                'reason': set([('kstatfs', 'f_ffree'),
+                               ('kstatfs', 'f_files')])},
+               {'call': 'fsync', 'reason': set([('fd', 'file')])},
+               {'call': 'bpf', 'reason': set([('fd', 'file')])},
+               {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+               {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'sendto', 'reason': set([('fd', 'file')])},
+               {'call': 'tee', 'reason': set([('fd', 'file')])},
+               {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+               {'call': 'lseek', 'reason': set([('fd', 'file')])},
+               {'call': 'connect', 'reason': set([('fd', 'file')])},
+               {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+               {'call': 'epoll_ctl', 'reason': set([('fd', 'file')])},
+               {'call': 'flock', 'reason': set([('fd', 'file')])},
+               {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+               {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+               {'call': 'accept4', 'reason': set([('fd', 'file')])},
+               {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+               {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+               {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+               {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+               {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+               {'call': 'splice', 'reason': set([('fd', 'file')])},
+               {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+               {'call': 'preadv', 'reason': set([('fd', 'file')])},
+               {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+               {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+               {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+               {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+               {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+               {'call': 'perf_event_open', 'reason': set([('fd', 'file')])},
+               {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+               {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+               {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+               {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+               {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+               {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+               {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+               {'call': 'listen', 'reason': set([('fd', 'file')])},
+               {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+               {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+               {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+               {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+               {'call': 'llseek', 'reason': set([('fd', 'file')])},
+               {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+               {'call': 'readv', 'reason': set([('fd', 'file')])},
+               {'call': 'fstatfs',
+                'reason': set([('fd', 'file'),
+                               ('kstatfs', 'f_ffree'),
+                               ('kstatfs', 'f_files')])},
+               {'call': 'statfs',
+                'reason': set([('kstatfs', 'f_ffree'),
+                               ('kstatfs', 'f_files')])},
+               {'call': 'fstatfs64',
+                'reason': set([('fd', 'file'),
+                               ('kstatfs', 'f_ffree'),
+                               ('kstatfs', 'f_files')])},
+               {'call': 'write', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+               {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+               {'call': 'statfs64',
+                'reason': set([('kstatfs', 'f_ffree'),
+                               ('kstatfs', 'f_files')])},
+               {'call': 'bind', 'reason': set([('fd', 'file')])},
+               {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'fsync': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+           {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+           {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+           {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+           {'call': 'readahead', 'reason': set([('fd', 'file')])},
+           {'call': 'getdents', 'reason': set([('fd', 'file')])},
+           {'call': 'writev', 'reason': set([('fd', 'file')])},
+           {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+           {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+           {'call': 'pread64', 'reason': set([('fd', 'file')])},
+           {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+           {'call': 'read', 'reason': set([('fd', 'file')])},
+           {'call': 'fchown', 'reason': set([('fd', 'file')])},
+           {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+           {'call': 'utime', 'reason': set([('fd', 'file')])},
+           {'call': 'fsync', 'reason': set([('fd', 'file')])},
+           {'call': 'bpf', 'reason': set([('fd', 'file')])},
+           {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+           {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+           {'call': 'sendto', 'reason': set([('fd', 'file')])},
+           {'call': 'tee', 'reason': set([('fd', 'file')])},
+           {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+           {'call': 'lseek', 'reason': set([('fd', 'file')])},
+           {'call': 'connect', 'reason': set([('fd', 'file')])},
+           {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+           {'call': 'epoll_ctl', 'reason': set([('fd', 'file')])},
+           {'call': 'flock', 'reason': set([('fd', 'file')])},
+           {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+           {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+           {'call': 'accept4', 'reason': set([('fd', 'file')])},
+           {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+           {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+           {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+           {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+           {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+           {'call': 'splice', 'reason': set([('fd', 'file')])},
+           {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+           {'call': 'preadv', 'reason': set([('fd', 'file')])},
+           {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+           {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+           {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+           {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+           {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+           {'call': 'perf_event_open', 'reason': set([('fd', 'file')])},
+           {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+           {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+           {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+           {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+           {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+           {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+           {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+           {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+           {'call': 'listen', 'reason': set([('fd', 'file')])},
+           {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+           {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+           {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+           {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+           {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+           {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+           {'call': 'llseek', 'reason': set([('fd', 'file')])},
+           {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+           {'call': 'readv', 'reason': set([('fd', 'file')])},
+           {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+           {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+           {'call': 'write', 'reason': set([('fd', 'file')])},
+           {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+           {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+           {'call': 'bind', 'reason': set([('fd', 'file')])},
+           {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+           {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'ftruncate': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+               {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+               {'call': 'eventfd2',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'mq_unlink',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+               {'call': 'swapoff',
+                'reason': set([('file', 'f_flags'),
+                               ('file', 'f_mode'),
+                               ('inode', 'i_flags'),
+                               ('inode', 'i_sb')])},
+               {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+               {'call': 'readahead', 'reason': set([('fd', 'file')])},
+               {'call': 'getdents', 'reason': set([('fd', 'file')])},
+               {'call': 'writev', 'reason': set([('fd', 'file')])},
+               {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+               {'call': 'fchmod',
+                'reason': set([('fd', 'file'),
+                               ('inode', 'i_flags'),
+                               ('inode', 'i_sb')])},
+               {'call': 'pread64', 'reason': set([('fd', 'file')])},
+               {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+               {'call': 'memfd_create',
+                'reason': set([('file', 'f_flags'),
+                               ('file', 'f_mode'),
+                               ('inode', 'i_flags'),
+                               ('inode', 'i_sb')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'dup3',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'readlinkat',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'read', 'reason': set([('fd', 'file')])},
+               {'call': 'fchown',
+                'reason': set([('fd', 'file'),
+                               ('inode', 'i_flags'),
+                               ('inode', 'i_sb')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('fd', 'file'),
+                               ('inode', 'i_flags'),
+                               ('inode', 'i_sb')])},
+               {'call': 'utime', 'reason': set([('fd', 'file')])},
+               {'call': 'fsync', 'reason': set([('fd', 'file')])},
+               {'call': 'bpf', 'reason': set([('fd', 'file')])},
+               {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+               {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'sendto', 'reason': set([('fd', 'file')])},
+               {'call': 'epoll_create1',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'tee', 'reason': set([('fd', 'file')])},
+               {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+               {'call': 'lseek', 'reason': set([('fd', 'file')])},
+               {'call': 'connect', 'reason': set([('fd', 'file')])},
+               {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+               {'call': 'epoll_ctl',
+                'reason': set([('fd', 'file'),
+                               ('file', 'f_flags'),
+                               ('file', 'f_mode')])},
+               {'call': 'flock',
+                'reason': set([('fd', 'file'),
+                               ('file', 'f_flags'),
+                               ('file', 'f_mode')])},
+               {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+               {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+               {'call': 'openat',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'uselib',
+                'reason': set([('file', 'f_flags'),
+                               ('file', 'f_mode'),
+                               ('inode', 'i_flags'),
+                               ('inode', 'i_sb')])},
+               {'call': 'accept4',
+                'reason': set([('fd', 'file'),
+                               ('file', 'f_flags'),
+                               ('file', 'f_mode')])},
+               {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+               {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+               {'call': 'socketpair',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+               {'call': 'fchmodat',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('fd', 'file'),
+                               ('inode', 'i_flags'),
+                               ('inode', 'i_sb')])},
+               {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+               {'call': 'splice', 'reason': set([('fd', 'file')])},
+               {'call': 'ftruncate',
+                'reason': set([('fd', 'file'),
+                               ('inode', 'i_flags'),
+                               ('inode', 'i_sb')])},
+               {'call': 'preadv', 'reason': set([('fd', 'file')])},
+               {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+               {'call': 'shmat',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+               {'call': 'socket',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'pipe2',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+               {'call': 'ioctl',
+                'reason': set([('fd', 'file'),
+                               ('inode', 'i_flags'),
+                               ('inode', 'i_sb')])},
+               {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+               {'call': 'perf_event_open',
+                'reason': set([('fd', 'file'),
+                               ('file', 'f_flags'),
+                               ('file', 'f_mode')])},
+               {'call': 'linkat',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'shmdt',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+               {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+               {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+               {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+               {'call': 'acct',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'open',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'unlink',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('fd', 'file'),
+                               ('file', 'f_flags'),
+                               ('inode', 'i_flags'),
+                               ('inode', 'i_sb')])},
+               {'call': 'faccessat',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'dup',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+               {'call': 'setns',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+               {'call': 'listen', 'reason': set([('fd', 'file')])},
+               {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('fd', 'file'),
+                               ('inode', 'i_flags'),
+                               ('inode', 'i_sb')])},
+               {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'shmctl',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+               {'call': 'swapon',
+                'reason': set([('file', 'f_flags'),
+                               ('file', 'f_mode'),
+                               ('inode', 'i_flags'),
+                               ('inode', 'i_sb')])},
+               {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+               {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+               {'call': 'fchownat',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'llseek', 'reason': set([('fd', 'file')])},
+               {'call': 'mmap_pgoff',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+               {'call': 'readv', 'reason': set([('fd', 'file')])},
+               {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+               {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+               {'call': 'write', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_notify',
+                'reason': set([('fd', 'file'),
+                               ('inode', 'i_flags'),
+                               ('inode', 'i_sb')])},
+               {'call': 'sendfile',
+                'reason': set([('fd', 'file'),
+                               ('inode', 'i_flags'),
+                               ('inode', 'i_sb')])},
+               {'call': 'mq_open',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'unlinkat',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'bind', 'reason': set([('fd', 'file')])},
+               {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'sendfile64',
+                'reason': set([('fd', 'file'),
+                               ('inode', 'i_flags'),
+                               ('inode', 'i_sb')])}],
+ 'futex': [{'call': 'rt_sigtimedwait',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'mq_unlink',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'swapoff',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'fchmod',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'memfd_create',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'readlinkat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'io_getevents',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'fchown',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'utime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'semtimedop',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'settimeofday',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'timerfd_gettime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'pselect6',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'uselib',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'fchmodat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'inotify_add_watch',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'timer_settime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'ftruncate',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'timer_gettime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'ioctl',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'linkat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'stime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'futimesat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'poll',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'select',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'unlink',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'nanosleep',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'mq_getsetattr',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'faccessat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'swapon',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'epoll_wait',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'fchownat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'fstat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'timerfd_settime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'mq_notify',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sendfile',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'newfstat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'clock_nanosleep',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'unlinkat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'futex',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'recvmmsg',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sendfile64',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'ppoll',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])}],
+ 'futimesat': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_unlink',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+               {'call': 'swapoff', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+               {'call': 'readahead', 'reason': set([('fd', 'file')])},
+               {'call': 'getdents', 'reason': set([('fd', 'file')])},
+               {'call': 'writev', 'reason': set([('fd', 'file')])},
+               {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+               {'call': 'fchmod',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'pread64', 'reason': set([('fd', 'file')])},
+               {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+               {'call': 'memfd_create',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'readlinkat',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'read', 'reason': set([('fd', 'file')])},
+               {'call': 'io_getevents',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fchown',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'waitid', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'utime',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'fsync', 'reason': set([('fd', 'file')])},
+               {'call': 'bpf', 'reason': set([('fd', 'file')])},
+               {'call': 'semtimedop',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+               {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'settimeofday',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'sendto', 'reason': set([('fd', 'file')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'timerfd_gettime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'adjtimex', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'tee', 'reason': set([('fd', 'file')])},
+               {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+               {'call': 'lseek', 'reason': set([('fd', 'file')])},
+               {'call': 'connect', 'reason': set([('fd', 'file')])},
+               {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+               {'call': 'epoll_ctl', 'reason': set([('fd', 'file')])},
+               {'call': 'flock', 'reason': set([('fd', 'file')])},
+               {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+               {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+               {'call': 'pselect6', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'uselib', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'accept4', 'reason': set([('fd', 'file')])},
+               {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+               {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+               {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+               {'call': 'getitimer', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'fchmodat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+               {'call': 'timer_settime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'splice', 'reason': set([('fd', 'file')])},
+               {'call': 'ftruncate',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'timer_gettime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'preadv', 'reason': set([('fd', 'file')])},
+               {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+               {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+               {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+               {'call': 'ioctl',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+               {'call': 'perf_event_open', 'reason': set([('fd', 'file')])},
+               {'call': 'linkat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'stime', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+               {'call': 'futimesat',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+               {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+               {'call': 'poll', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'select',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'unlink', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+               {'call': 'nanosleep',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'faccessat',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+               {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+               {'call': 'listen', 'reason': set([('fd', 'file')])},
+               {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+               {'call': 'swapon', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+               {'call': 'wait4', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'epoll_wait',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'fchownat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'getrusage', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'fstat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'timerfd_settime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'setitimer', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'llseek', 'reason': set([('fd', 'file')])},
+               {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+               {'call': 'readv', 'reason': set([('fd', 'file')])},
+               {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+               {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+               {'call': 'write', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_notify',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'sendfile',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'newfstat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'clock_nanosleep',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'unlinkat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'clock_adjtime',
+                'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'bind', 'reason': set([('fd', 'file')])},
+               {'call': 'alarm', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'futex', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'recvmmsg', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'sendfile64',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'ppoll',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timeval', 'tv_usec')])}],
+ 'get_mempolicy': [{'call': 'keyctl',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'rt_sigtimedwait',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'msgrcv',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'kill',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'sched_getaffinity',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'sched_setparam',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'ioprio_set',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'remap_file_pages',
+                    'reason': set([('vm_area_struct', 'vm_ops')])},
+                   {'call': 'getppid',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'capget',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'sched_setaffinity',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'signal',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'semtimedop',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'umount',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'sched_rr_get_interval',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'rt_sigprocmask',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'setsid',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'sigaltstack',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'sched_setattr',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'migrate_pages',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'getitimer',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'setpgid',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'getsid',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'set_mempolicy',
+                    'reason': set([('mempolicy', 'mode'),
+                                   ('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'shmdt',
+                    'reason': set([('vm_area_struct', 'vm_ops')])},
+                   {'call': 'rt_sigaction',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'getpgid',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'brk',
+                    'reason': set([('vm_area_struct', 'vm_ops')])},
+                   {'call': 'getpriority',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'sigaction',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'setns',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'fork',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'get_mempolicy',
+                    'reason': set([('mempolicy', 'mode'),
+                                   ('vm_area_struct', 'vm_ops')])},
+                   {'call': 'get_robust_list',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'sched_getscheduler',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'ptrace',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'munlockall',
+                    'reason': set([('vm_area_struct', 'vm_ops')])},
+                   {'call': 'pkey_mprotect',
+                    'reason': set([('vm_area_struct', 'vm_ops')])},
+                   {'call': 'madvise',
+                    'reason': set([('vm_area_struct', 'vm_ops')])},
+                   {'call': 'sched_getattr',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'getrusage',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'sched_setscheduler',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'setitimer',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'ioprio_get',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'vfork',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'mprotect',
+                    'reason': set([('vm_area_struct', 'vm_ops')])},
+                   {'call': 'mremap',
+                    'reason': set([('vm_area_struct', 'vm_ops')])},
+                   {'call': 'mbind', 'reason': set([('mempolicy', 'mode')])},
+                   {'call': 'prctl',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy'),
+                                   ('vm_area_struct', 'vm_ops')])},
+                   {'call': 'move_pages',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'munlock',
+                    'reason': set([('vm_area_struct', 'vm_ops')])},
+                   {'call': 'setpriority',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'mincore',
+                    'reason': set([('vm_area_struct', 'vm_ops')])},
+                   {'call': 'clone',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'sched_getparam',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'mlockall',
+                    'reason': set([('vm_area_struct', 'vm_ops')])}],
+ 'getcwd': [{'call': 'eventfd2',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'mq_unlink',
+             'reason': set([('dentry', 'd_parent'),
+                            ('vfsmount', 'mnt_root')])},
+            {'call': 'swapoff',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'pivot_root',
+             'reason': set([('dentry', 'd_parent'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('vfsmount', 'mnt_root')])},
+            {'call': 'memfd_create',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'remap_file_pages',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'dup3',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'unshare',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'umount', 'reason': set([('vfsmount', 'mnt_root')])},
+            {'call': 'mkdirat', 'reason': set([('dentry', 'd_parent')])},
+            {'call': 'epoll_create1',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'epoll_ctl',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'flock',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'openat',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'lookup_dcookie',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'uselib',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'renameat2', 'reason': set([('dentry', 'd_parent')])},
+            {'call': 'accept4',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'socketpair',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'getcwd',
+             'reason': set([('dentry', 'd_parent'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('vfsmount', 'mnt_root')])},
+            {'call': 'ftruncate', 'reason': set([('dentry', 'd_parent')])},
+            {'call': 'shmat',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'mknodat', 'reason': set([('dentry', 'd_parent')])},
+            {'call': 'socket',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'symlinkat', 'reason': set([('dentry', 'd_parent')])},
+            {'call': 'pipe2',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'perf_event_open',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'linkat', 'reason': set([('dentry', 'd_parent')])},
+            {'call': 'shmdt',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'quotactl',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'acct',
+             'reason': set([('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('vfsmount', 'mnt_root')])},
+            {'call': 'open',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'unlink', 'reason': set([('dentry', 'd_parent')])},
+            {'call': 'rmdir', 'reason': set([('dentry', 'd_parent')])},
+            {'call': 'dup',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'setns',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'shmctl',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'swapon',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'mmap_pgoff',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'mq_open',
+             'reason': set([('dentry', 'd_parent'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('vfsmount', 'mnt_root')])},
+            {'call': 'unlinkat', 'reason': set([('dentry', 'd_parent')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'getdents': [{'call': 'syncfs',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'vmsplice',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'pwritev64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fremovexattr',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'readahead',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'getdents',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'writev',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'preadv64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'sched_setparam',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fchmod',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'pread64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'signalfd4',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'ioprio_set',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'read',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fchown',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('fd', 'file'),
+                              ('fd', 'flags'),
+                              ('mm_segment_t', 'seg')])},
+              {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'utime',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fsync',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'bpf',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'semtimedop',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'recvfrom',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fsetxattr',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'sendto',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'tee',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'sync_file_range',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'lseek',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'connect',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'getsockname',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'epoll_ctl',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'flock',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'pwritev',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fchdir',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'accept4',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sigaltstack',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sched_setattr',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'old_readdir',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'inotify_rm_watch',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'utimensat',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'migrate_pages',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'getitimer', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'inotify_add_watch',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'preadv2',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'splice',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'ftruncate',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'preadv',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'getpeername',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'setsockopt',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fcntl',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'ioctl',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'prlimit64', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'pwrite64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'perf_event_open',
+               'reason': set([('fd', 'file'),
+                              ('fd', 'flags'),
+                              ('mm_segment_t', 'seg')])},
+              {'call': 'pwritev64v2',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'futimesat',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'pwritev2',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'shutdown',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'getsockopt',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'getpriority',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_getsetattr',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fdatasync',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'getdents64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'listen',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'get_robust_list',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'copy_file_range',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('fd', 'file'),
+                              ('fd', 'flags'),
+                              ('mm_segment_t', 'seg')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fgetxattr',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fcntl64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fallocate',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'epoll_wait',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'sched_getattr',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'getrusage', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'setitimer', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'ioprio_get',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'llseek',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'preadv64v2',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'readv',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'move_pages',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fstatfs',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fstatfs64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'write',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'setpriority',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_notify',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'sendfile',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sched_getparam',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'bind',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'flistxattr',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'sendfile64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'getdents64': [{'call': 'syncfs',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'rt_sigtimedwait',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'vmsplice',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'pwritev64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fremovexattr',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'readahead',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'getdents',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sched_getaffinity',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'writev',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'preadv64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sched_setparam',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fchmod',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'pread64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'signalfd4',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'ioprio_set',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'read',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fchown',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'mq_timedreceive',
+                 'reason': set([('fd', 'file'),
+                                ('fd', 'flags'),
+                                ('mm_segment_t', 'seg')])},
+                {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'utime',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sched_setaffinity',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fsync',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'bpf',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'semtimedop',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'recvfrom',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fsetxattr',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sendto',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sched_rr_get_interval',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'tee',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sync_file_range',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'lseek',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'connect',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'getsockname',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'epoll_ctl',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'flock',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'pwritev',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fchdir',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'rt_sigprocmask',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'accept4',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sigaltstack',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sched_setattr',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'old_readdir',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'inotify_rm_watch',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'utimensat',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'migrate_pages',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'getitimer',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'inotify_add_watch',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'preadv2',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'splice',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'ftruncate',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'preadv',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'getpeername',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'setsockopt',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fcntl',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'ioctl',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'prlimit64',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'pwrite64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('fd', 'file'),
+                                ('fd', 'flags'),
+                                ('mm_segment_t', 'seg')])},
+                {'call': 'pwritev64v2',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'rt_sigaction',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'futimesat',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'pwritev2',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'shutdown',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'getsockopt',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'getpriority',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sigaction',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'mq_getsetattr',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fdatasync',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'getdents64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'listen',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'get_robust_list',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'copy_file_range',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'mq_timedsend',
+                 'reason': set([('fd', 'file'),
+                                ('fd', 'flags'),
+                                ('mm_segment_t', 'seg')])},
+                {'call': 'sched_getscheduler',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fgetxattr',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fcntl64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fallocate',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'epoll_wait',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sched_getattr',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'getrusage',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sched_setscheduler',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'setitimer',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'ioprio_get',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'llseek',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'preadv64v2',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'readv',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'move_pages',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fstatfs',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'fstatfs64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'write',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'setpriority',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'mq_notify',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sendfile',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sched_getparam',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'bind',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'flistxattr',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                {'call': 'sendfile64',
+                 'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'getegid': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'rt_sigtimedwait',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_getaffinity',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_setparam',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'ioprio_set', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_setaffinity',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'semtimedop', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_rr_get_interval',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'rt_sigprocmask',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sigaltstack',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_setattr',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'migrate_pages',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'prlimit64', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'perf_event_open',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'rt_sigaction',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'getpriority',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'get_robust_list',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'mq_timedsend',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_getscheduler',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_getattr',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_setscheduler',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'ioprio_get', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'move_pages', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'setpriority',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_getparam',
+              'reason': set([('task_struct', 'cred')])}],
+ 'getegid16': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setparam',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_set',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'semtimedop',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaltstack',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'migrate_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prlimit64',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'perf_event_open',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpriority',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'get_robust_list',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getrusage',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_get',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'move_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpriority',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getparam',
+                'reason': set([('task_struct', 'cred')])}],
+ 'geteuid': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'rt_sigtimedwait',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_getaffinity',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_setparam',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'ioprio_set', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_setaffinity',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'semtimedop', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_rr_get_interval',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'rt_sigprocmask',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sigaltstack',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_setattr',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'migrate_pages',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'prlimit64', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'perf_event_open',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'rt_sigaction',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'getpriority',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'get_robust_list',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'mq_timedsend',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_getscheduler',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_getattr',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_setscheduler',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'ioprio_get', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'move_pages', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'setpriority',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_getparam',
+              'reason': set([('task_struct', 'cred')])}],
+ 'geteuid16': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setparam',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_set',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'semtimedop',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaltstack',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'migrate_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prlimit64',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'perf_event_open',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpriority',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'get_robust_list',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getrusage',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_get',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'move_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpriority',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getparam',
+                'reason': set([('task_struct', 'cred')])}],
+ 'getgid': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_set', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'semtimedop', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sigaltstack', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'migrate_pages',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prlimit64', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpriority', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_get', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'move_pages', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setpriority', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'cred')])}],
+ 'getgid16': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'ioprio_set',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'migrate_pages',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'prlimit64', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpriority',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'ioprio_get',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'move_pages',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setpriority',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'cred')])}],
+ 'getgroups': [{'call': 'keyctl',
+                'reason': set([('cred', 'group_info'),
+                               ('task_struct', 'cred')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setfsuid', 'reason': set([('cred', 'group_info')])},
+               {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getresuid16',
+                'reason': set([('cred', 'group_info')])},
+               {'call': 'getresgid', 'reason': set([('cred', 'group_info')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setparam',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setgid', 'reason': set([('cred', 'group_info')])},
+               {'call': 'ioprio_set',
+                'reason': set([('cred', 'group_info'),
+                               ('task_struct', 'cred')])},
+               {'call': 'capset', 'reason': set([('cred', 'group_info')])},
+               {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getresgid16',
+                'reason': set([('cred', 'group_info')])},
+               {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('cred', 'group_info'),
+                               ('task_struct', 'cred')])},
+               {'call': 'setfsgid', 'reason': set([('cred', 'group_info')])},
+               {'call': 'unshare', 'reason': set([('cred', 'group_info')])},
+               {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setreuid', 'reason': set([('cred', 'group_info')])},
+               {'call': 'semtimedop',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'epoll_create1',
+                'reason': set([('cred', 'group_info')])},
+               {'call': 'getresuid', 'reason': set([('cred', 'group_info')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaltstack',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'migrate_pages',
+                'reason': set([('cred', 'group_info'),
+                               ('task_struct', 'cred')])},
+               {'call': 'getitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setresgid', 'reason': set([('cred', 'group_info')])},
+               {'call': 'setregid', 'reason': set([('cred', 'group_info')])},
+               {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prlimit64',
+                'reason': set([('cred', 'group_info'),
+                               ('task_struct', 'cred')])},
+               {'call': 'perf_event_open',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getgroups16',
+                'reason': set([('cred', 'group_info')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpriority',
+                'reason': set([('cred', 'group_info'),
+                               ('task_struct', 'cred')])},
+               {'call': 'sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'faccessat', 'reason': set([('cred', 'group_info')])},
+               {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'get_robust_list',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getrusage',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setresuid', 'reason': set([('cred', 'group_info')])},
+               {'call': 'setitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_get',
+                'reason': set([('cred', 'group_info'),
+                               ('task_struct', 'cred')])},
+               {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setuid', 'reason': set([('cred', 'group_info')])},
+               {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'move_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getgroups', 'reason': set([('cred', 'group_info')])},
+               {'call': 'setpriority',
+                'reason': set([('cred', 'group_info'),
+                               ('task_struct', 'cred')])},
+               {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getparam',
+                'reason': set([('task_struct', 'cred')])}],
+ 'getgroups16': [{'call': 'keyctl',
+                  'reason': set([('cred', 'group_info'),
+                                 ('task_struct', 'cred')])},
+                 {'call': 'rt_sigtimedwait',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setfsuid',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getresuid16',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'getresgid',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'sched_getaffinity',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setparam',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setgid', 'reason': set([('cred', 'group_info')])},
+                 {'call': 'ioprio_set',
+                  'reason': set([('cred', 'group_info'),
+                                 ('task_struct', 'cred')])},
+                 {'call': 'capset', 'reason': set([('cred', 'group_info')])},
+                 {'call': 'getppid',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'mq_timedreceive',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getresgid16',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setaffinity',
+                  'reason': set([('cred', 'group_info'),
+                                 ('task_struct', 'cred')])},
+                 {'call': 'setfsgid',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'unshare', 'reason': set([('cred', 'group_info')])},
+                 {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setreuid',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'semtimedop',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_rr_get_interval',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'epoll_create1',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'getresuid',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'rt_sigprocmask',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sigaltstack',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setattr',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'migrate_pages',
+                  'reason': set([('cred', 'group_info'),
+                                 ('task_struct', 'cred')])},
+                 {'call': 'getitimer',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setpgid',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setresgid',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'setregid',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'prlimit64',
+                  'reason': set([('cred', 'group_info'),
+                                 ('task_struct', 'cred')])},
+                 {'call': 'perf_event_open',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getgroups16',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'rt_sigaction',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getpgid',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getpriority',
+                  'reason': set([('cred', 'group_info'),
+                                 ('task_struct', 'cred')])},
+                 {'call': 'sigaction',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'faccessat',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'setgroups16',
+                  'reason': set([('group_info', 'ngroups')])},
+                 {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'get_robust_list',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'mq_timedsend',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_getscheduler',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_getattr',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getrusage',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setscheduler',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setresuid',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'setitimer',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'ioprio_get',
+                  'reason': set([('cred', 'group_info'),
+                                 ('task_struct', 'cred')])},
+                 {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setuid', 'reason': set([('cred', 'group_info')])},
+                 {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'move_pages',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getgroups',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'setpriority',
+                  'reason': set([('cred', 'group_info'),
+                                 ('task_struct', 'cred')])},
+                 {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setgroups',
+                  'reason': set([('group_info', 'ngroups')])},
+                 {'call': 'sched_getparam',
+                  'reason': set([('task_struct', 'cred')])}],
+ 'getitimer': [{'call': 'timer_create',
+                'reason': set([('signal_struct', 'it_real_incr')])},
+               {'call': 'exit_group',
+                'reason': set([('signal_struct', 'it_real_incr')])},
+               {'call': 'setitimer',
+                'reason': set([('signal_struct', 'it_real_incr')])}],
+ 'getpeername': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+                 {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+                 {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+                 {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+                 {'call': 'readahead', 'reason': set([('fd', 'file')])},
+                 {'call': 'getdents', 'reason': set([('fd', 'file')])},
+                 {'call': 'writev', 'reason': set([('fd', 'file')])},
+                 {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+                 {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+                 {'call': 'pread64', 'reason': set([('fd', 'file')])},
+                 {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+                 {'call': 'read', 'reason': set([('fd', 'file')])},
+                 {'call': 'fchown', 'reason': set([('fd', 'file')])},
+                 {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+                 {'call': 'utime', 'reason': set([('fd', 'file')])},
+                 {'call': 'fsync', 'reason': set([('fd', 'file')])},
+                 {'call': 'bpf', 'reason': set([('fd', 'file')])},
+                 {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+                 {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+                 {'call': 'sendto', 'reason': set([('fd', 'file')])},
+                 {'call': 'tee', 'reason': set([('fd', 'file')])},
+                 {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+                 {'call': 'lseek', 'reason': set([('fd', 'file')])},
+                 {'call': 'connect', 'reason': set([('fd', 'file')])},
+                 {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+                 {'call': 'epoll_ctl', 'reason': set([('fd', 'file')])},
+                 {'call': 'flock', 'reason': set([('fd', 'file')])},
+                 {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+                 {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+                 {'call': 'accept4', 'reason': set([('fd', 'file')])},
+                 {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+                 {'call': 'inotify_rm_watch',
+                  'reason': set([('fd', 'file')])},
+                 {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+                 {'call': 'inotify_add_watch',
+                  'reason': set([('fd', 'file')])},
+                 {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+                 {'call': 'splice', 'reason': set([('fd', 'file')])},
+                 {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+                 {'call': 'preadv', 'reason': set([('fd', 'file')])},
+                 {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+                 {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+                 {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+                 {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+                 {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+                 {'call': 'perf_event_open', 'reason': set([('fd', 'file')])},
+                 {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+                 {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+                 {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+                 {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+                 {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+                 {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+                 {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+                 {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+                 {'call': 'listen', 'reason': set([('fd', 'file')])},
+                 {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+                 {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+                 {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+                 {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+                 {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+                 {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+                 {'call': 'llseek', 'reason': set([('fd', 'file')])},
+                 {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+                 {'call': 'readv', 'reason': set([('fd', 'file')])},
+                 {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+                 {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+                 {'call': 'write', 'reason': set([('fd', 'file')])},
+                 {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+                 {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+                 {'call': 'bind', 'reason': set([('fd', 'file')])},
+                 {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+                 {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'getppid': [{'call': 'keyctl',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'rt_sigtimedwait',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'msgrcv',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'kill',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sched_getaffinity',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sched_setparam',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'ioprio_set',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'getppid',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'capget',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sched_setaffinity',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'signal',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'semtimedop',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'umount',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sched_rr_get_interval',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'rt_sigprocmask',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'setsid',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sigaltstack',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sched_setattr',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'migrate_pages',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'getitimer',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'setpgid',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'getsid',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'prlimit64',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'perf_event_open',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'rt_sigaction',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'getpgid',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'getpriority',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sigaction',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'setns',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'fork',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'get_robust_list',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'mq_timedsend',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sched_getscheduler',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'ptrace',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sched_getattr',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'getrusage',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sched_setscheduler',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'setitimer',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'ioprio_get',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'vfork',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'prctl',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'move_pages',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'setpriority',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'clone',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sched_getparam',
+              'reason': set([('task_struct', 'real_parent')])}],
+ 'getpriority': [{'call': 'keyctl',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'rt_sigtimedwait',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'msgrcv',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'kill',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_getaffinity',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_setparam',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'ioprio_set',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getppid',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'mq_timedreceive',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'capget',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_setaffinity',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'signal',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setreuid', 'reason': set([('cred', 'uid')])},
+                 {'call': 'semtimedop',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'umount',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_rr_get_interval',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'rt_sigprocmask',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setsid',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sigaltstack',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_setattr',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'migrate_pages',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getitimer',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setpgid',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getsid',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'prlimit64',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'perf_event_open',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'rt_sigaction',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getpgid',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getpriority',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sigaction',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setns',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'fork',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'get_robust_list',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'mq_timedsend',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_getscheduler',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'ptrace',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_getattr',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getrusage',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_setscheduler',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setresuid', 'reason': set([('cred', 'uid')])},
+                 {'call': 'setitimer',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'ioprio_get',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'vfork',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setuid', 'reason': set([('cred', 'uid')])},
+                 {'call': 'prctl',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'move_pages',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setpriority',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'clone',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_getparam',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])}],
+ 'getresgid': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setparam',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_set',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'semtimedop',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaltstack',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'migrate_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prlimit64',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'perf_event_open',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpriority',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'get_robust_list',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getrusage',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_get',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'move_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpriority',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getparam',
+                'reason': set([('task_struct', 'cred')])}],
+ 'getresgid16': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'rt_sigtimedwait',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_getaffinity',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setparam',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'ioprio_set',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getppid',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'mq_timedreceive',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setaffinity',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'semtimedop',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_rr_get_interval',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'rt_sigprocmask',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sigaltstack',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setattr',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'migrate_pages',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getitimer',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setpgid',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'prlimit64',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'perf_event_open',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'rt_sigaction',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getpgid',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getpriority',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sigaction',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'get_robust_list',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'mq_timedsend',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_getscheduler',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_getattr',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getrusage',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setscheduler',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setitimer',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'ioprio_get',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'move_pages',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setpriority',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_getparam',
+                  'reason': set([('task_struct', 'cred')])}],
+ 'getresuid': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setparam',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_set',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'semtimedop',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaltstack',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'migrate_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prlimit64',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'perf_event_open',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpriority',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'get_robust_list',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getrusage',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_get',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'move_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpriority',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getparam',
+                'reason': set([('task_struct', 'cred')])}],
+ 'getresuid16': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'rt_sigtimedwait',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_getaffinity',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setparam',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'ioprio_set',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getppid',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'mq_timedreceive',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setaffinity',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'semtimedop',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_rr_get_interval',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'rt_sigprocmask',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sigaltstack',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setattr',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'migrate_pages',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getitimer',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setpgid',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'prlimit64',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'perf_event_open',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'rt_sigaction',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getpgid',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getpriority',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sigaction',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'get_robust_list',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'mq_timedsend',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_getscheduler',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_getattr',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getrusage',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setscheduler',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setitimer',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'ioprio_get',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'move_pages',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setpriority',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_getparam',
+                  'reason': set([('task_struct', 'cred')])}],
+ 'getrlimit': [{'call': 'setrlimit',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max')])},
+               {'call': 'old_getrlimit',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max')])},
+               {'call': 'prlimit64',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max')])}],
+ 'getrusage': [{'call': 'timer_create',
+                'reason': set([('signal_struct', 'maxrss')])},
+               {'call': 'exit_group',
+                'reason': set([('signal_struct', 'maxrss')])}],
+ 'getsockname': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+                 {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+                 {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+                 {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+                 {'call': 'readahead', 'reason': set([('fd', 'file')])},
+                 {'call': 'getdents', 'reason': set([('fd', 'file')])},
+                 {'call': 'writev', 'reason': set([('fd', 'file')])},
+                 {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+                 {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+                 {'call': 'pread64', 'reason': set([('fd', 'file')])},
+                 {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+                 {'call': 'read', 'reason': set([('fd', 'file')])},
+                 {'call': 'fchown', 'reason': set([('fd', 'file')])},
+                 {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+                 {'call': 'utime', 'reason': set([('fd', 'file')])},
+                 {'call': 'fsync', 'reason': set([('fd', 'file')])},
+                 {'call': 'bpf', 'reason': set([('fd', 'file')])},
+                 {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+                 {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+                 {'call': 'sendto', 'reason': set([('fd', 'file')])},
+                 {'call': 'tee', 'reason': set([('fd', 'file')])},
+                 {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+                 {'call': 'lseek', 'reason': set([('fd', 'file')])},
+                 {'call': 'connect', 'reason': set([('fd', 'file')])},
+                 {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+                 {'call': 'epoll_ctl', 'reason': set([('fd', 'file')])},
+                 {'call': 'flock', 'reason': set([('fd', 'file')])},
+                 {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+                 {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+                 {'call': 'accept4', 'reason': set([('fd', 'file')])},
+                 {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+                 {'call': 'inotify_rm_watch',
+                  'reason': set([('fd', 'file')])},
+                 {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+                 {'call': 'inotify_add_watch',
+                  'reason': set([('fd', 'file')])},
+                 {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+                 {'call': 'splice', 'reason': set([('fd', 'file')])},
+                 {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+                 {'call': 'preadv', 'reason': set([('fd', 'file')])},
+                 {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+                 {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+                 {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+                 {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+                 {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+                 {'call': 'perf_event_open', 'reason': set([('fd', 'file')])},
+                 {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+                 {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+                 {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+                 {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+                 {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+                 {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+                 {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+                 {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+                 {'call': 'listen', 'reason': set([('fd', 'file')])},
+                 {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+                 {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+                 {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+                 {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+                 {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+                 {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+                 {'call': 'llseek', 'reason': set([('fd', 'file')])},
+                 {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+                 {'call': 'readv', 'reason': set([('fd', 'file')])},
+                 {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+                 {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+                 {'call': 'write', 'reason': set([('fd', 'file')])},
+                 {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+                 {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+                 {'call': 'bind', 'reason': set([('fd', 'file')])},
+                 {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+                 {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'getsockopt': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+                {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+                {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+                {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+                {'call': 'readahead', 'reason': set([('fd', 'file')])},
+                {'call': 'getdents', 'reason': set([('fd', 'file')])},
+                {'call': 'writev', 'reason': set([('fd', 'file')])},
+                {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+                {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+                {'call': 'pread64', 'reason': set([('fd', 'file')])},
+                {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+                {'call': 'read', 'reason': set([('fd', 'file')])},
+                {'call': 'fchown', 'reason': set([('fd', 'file')])},
+                {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+                {'call': 'utime', 'reason': set([('fd', 'file')])},
+                {'call': 'fsync', 'reason': set([('fd', 'file')])},
+                {'call': 'bpf', 'reason': set([('fd', 'file')])},
+                {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+                {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+                {'call': 'sendto', 'reason': set([('fd', 'file')])},
+                {'call': 'tee', 'reason': set([('fd', 'file')])},
+                {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+                {'call': 'lseek', 'reason': set([('fd', 'file')])},
+                {'call': 'connect', 'reason': set([('fd', 'file')])},
+                {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+                {'call': 'epoll_ctl', 'reason': set([('fd', 'file')])},
+                {'call': 'flock', 'reason': set([('fd', 'file')])},
+                {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+                {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+                {'call': 'accept4',
+                 'reason': set([('fd', 'file'),
+                                ('proto_ops', 'compat_getsockopt')])},
+                {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+                {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+                {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+                {'call': 'inotify_add_watch',
+                 'reason': set([('fd', 'file')])},
+                {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+                {'call': 'splice', 'reason': set([('fd', 'file')])},
+                {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+                {'call': 'preadv', 'reason': set([('fd', 'file')])},
+                {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+                {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+                {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+                {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+                {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+                {'call': 'perf_event_open', 'reason': set([('fd', 'file')])},
+                {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+                {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+                {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+                {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+                {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+                {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+                {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+                {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+                {'call': 'listen', 'reason': set([('fd', 'file')])},
+                {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+                {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+                {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+                {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+                {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+                {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+                {'call': 'llseek', 'reason': set([('fd', 'file')])},
+                {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+                {'call': 'readv', 'reason': set([('fd', 'file')])},
+                {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+                {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+                {'call': 'write', 'reason': set([('fd', 'file')])},
+                {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+                {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+                {'call': 'bind', 'reason': set([('fd', 'file')])},
+                {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+                {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'getuid': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_set', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'semtimedop', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sigaltstack', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'migrate_pages',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prlimit64', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpriority', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_get', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'move_pages', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setpriority', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'cred')])}],
+ 'getuid16': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'ioprio_set',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'migrate_pages',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'prlimit64', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpriority',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'ioprio_get',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'move_pages',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setpriority',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'cred')])}],
+ 'getxattr': [{'call': 'eventfd2', 'reason': set([('path', 'dentry')])},
+              {'call': 'swapoff', 'reason': set([('path', 'dentry')])},
+              {'call': 'pivot_root', 'reason': set([('path', 'dentry')])},
+              {'call': 'memfd_create', 'reason': set([('path', 'dentry')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('path', 'dentry')])},
+              {'call': 'dup3', 'reason': set([('path', 'dentry')])},
+              {'call': 'unshare', 'reason': set([('path', 'dentry')])},
+              {'call': 'epoll_create1', 'reason': set([('path', 'dentry')])},
+              {'call': 'epoll_ctl', 'reason': set([('path', 'dentry')])},
+              {'call': 'flock', 'reason': set([('path', 'dentry')])},
+              {'call': 'openat', 'reason': set([('path', 'dentry')])},
+              {'call': 'lookup_dcookie', 'reason': set([('path', 'dentry')])},
+              {'call': 'uselib', 'reason': set([('path', 'dentry')])},
+              {'call': 'accept4', 'reason': set([('path', 'dentry')])},
+              {'call': 'socketpair', 'reason': set([('path', 'dentry')])},
+              {'call': 'getcwd', 'reason': set([('path', 'dentry')])},
+              {'call': 'shmat', 'reason': set([('path', 'dentry')])},
+              {'call': 'socket', 'reason': set([('path', 'dentry')])},
+              {'call': 'pipe2', 'reason': set([('path', 'dentry')])},
+              {'call': 'perf_event_open',
+               'reason': set([('path', 'dentry')])},
+              {'call': 'shmdt', 'reason': set([('path', 'dentry')])},
+              {'call': 'quotactl', 'reason': set([('path', 'dentry')])},
+              {'call': 'acct', 'reason': set([('path', 'dentry')])},
+              {'call': 'open', 'reason': set([('path', 'dentry')])},
+              {'call': 'dup', 'reason': set([('path', 'dentry')])},
+              {'call': 'setns', 'reason': set([('path', 'dentry')])},
+              {'call': 'shmctl', 'reason': set([('path', 'dentry')])},
+              {'call': 'swapon', 'reason': set([('path', 'dentry')])},
+              {'call': 'mmap_pgoff', 'reason': set([('path', 'dentry')])},
+              {'call': 'mq_open', 'reason': set([('path', 'dentry')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('path', 'dentry')])}],
+ 'init_module': [{'call': 'delete_module',
+                  'reason': set([('module', 'args'),
+                                 ('module', 'kp'),
+                                 ('module', 'num_kp'),
+                                 ('module_layout', 'base'),
+                                 ('module_layout', 'size')])},
+                 {'call': 'init_module',
+                  'reason': set([('load_info', 'debug'),
+                                 ('load_info', 'hdr'),
+                                 ('load_info', 'len'),
+                                 ('load_info', 'num_debug'),
+                                 ('module', 'args'),
+                                 ('module', 'kp'),
+                                 ('module', 'num_kp'),
+                                 ('module_layout', 'base'),
+                                 ('module_layout', 'size')])},
+                 {'call': 'finit_module',
+                  'reason': set([('load_info', 'debug'),
+                                 ('load_info', 'hdr'),
+                                 ('load_info', 'len'),
+                                 ('load_info', 'num_debug'),
+                                 ('module', 'args'),
+                                 ('module', 'kp'),
+                                 ('module', 'num_kp'),
+                                 ('module_layout', 'base'),
+                                 ('module_layout', 'size')])}],
+ 'inotify_add_watch': [{'call': 'syncfs',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'vmsplice',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'eventfd2',
+                        'reason': set([('file', 'f_op')])},
+                       {'call': 'mq_unlink',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'pwritev64',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'swapoff', 'reason': set([('file', 'f_op')])},
+                       {'call': 'fremovexattr',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'readahead',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'getdents',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'writev',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'preadv64',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'fchmod',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'pread64',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'pivot_root',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'signalfd4',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'memfd_create',
+                        'reason': set([('file', 'f_op')])},
+                       {'call': 'remap_file_pages',
+                        'reason': set([('file', 'f_op')])},
+                       {'call': 'dup3', 'reason': set([('file', 'f_op')])},
+                       {'call': 'read',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'fchown',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'mq_timedreceive',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'utime',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'fsync',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'bpf',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'recvfrom',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'fsetxattr',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'sendto',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'mkdirat',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'epoll_create1',
+                        'reason': set([('file', 'f_op')])},
+                       {'call': 'tee',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'sync_file_range',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'lseek',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'connect',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'getsockname',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'epoll_ctl',
+                        'reason': set([('fd', 'file'),
+                                       ('fd', 'flags'),
+                                       ('file', 'f_op')])},
+                       {'call': 'flock',
+                        'reason': set([('fd', 'file'),
+                                       ('fd', 'flags'),
+                                       ('file', 'f_op')])},
+                       {'call': 'pwritev',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'fchdir',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'openat', 'reason': set([('file', 'f_op')])},
+                       {'call': 'uselib', 'reason': set([('file', 'f_op')])},
+                       {'call': 'renameat2',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'accept4',
+                        'reason': set([('fd', 'file'),
+                                       ('fd', 'flags'),
+                                       ('file', 'f_op')])},
+                       {'call': 'old_readdir',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'inotify_rm_watch',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'socketpair',
+                        'reason': set([('file', 'f_op')])},
+                       {'call': 'utimensat',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'getcwd',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'inotify_add_watch',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'preadv2',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'splice',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'ftruncate',
+                        'reason': set([('dentry', 'd_inode'),
+                                       ('fd', 'file'),
+                                       ('fd', 'flags')])},
+                       {'call': 'preadv',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'getpeername',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'shmat', 'reason': set([('file', 'f_op')])},
+                       {'call': 'setsockopt',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'mknodat',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'socket', 'reason': set([('file', 'f_op')])},
+                       {'call': 'symlinkat',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'pipe2', 'reason': set([('file', 'f_op')])},
+                       {'call': 'fcntl',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'ioctl',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'pwrite64',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'perf_event_open',
+                        'reason': set([('fd', 'file'),
+                                       ('fd', 'flags'),
+                                       ('file', 'f_op')])},
+                       {'call': 'linkat',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'shmdt', 'reason': set([('file', 'f_op')])},
+                       {'call': 'pwritev64v2',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'futimesat',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'pwritev2',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'shutdown',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'acct', 'reason': set([('file', 'f_op')])},
+                       {'call': 'open', 'reason': set([('file', 'f_op')])},
+                       {'call': 'unlink',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'getsockopt',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'mq_getsetattr',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'rmdir',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'dup', 'reason': set([('file', 'f_op')])},
+                       {'call': 'fdatasync',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'setns', 'reason': set([('file', 'f_op')])},
+                       {'call': 'getdents64',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'listen',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'copy_file_range',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'mq_timedsend',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'fgetxattr',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'shmctl', 'reason': set([('file', 'f_op')])},
+                       {'call': 'fcntl64',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'swapon', 'reason': set([('file', 'f_op')])},
+                       {'call': 'fallocate',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'epoll_wait',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'llseek',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'mmap_pgoff',
+                        'reason': set([('file', 'f_op')])},
+                       {'call': 'preadv64v2',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'readv',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'fstatfs',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'fstatfs64',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'write',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'mq_notify',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'sendfile',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'mq_open',
+                        'reason': set([('dentry', 'd_inode'),
+                                       ('file', 'f_op')])},
+                       {'call': 'unlinkat',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'open_by_handle_at',
+                        'reason': set([('file', 'f_op')])},
+                       {'call': 'bind',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'flistxattr',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                       {'call': 'sendfile64',
+                        'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'inotify_init1': [{'call': 'keyctl',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'rt_sigtimedwait',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'msgrcv',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_getaffinity',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_setparam',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'ioprio_set',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getppid',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'capget',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_setaffinity',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'signal',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'semtimedop',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'umount',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_rr_get_interval',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'rt_sigprocmask',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setsid',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sigaltstack',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_setattr',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'inotify_rm_watch',
+                    'reason': set([('fsnotify_group', 'overflow_event'),
+                                   ('inotify_group_private_data',
+                                    'ucounts')])},
+                   {'call': 'migrate_pages',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getitimer',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setpgid',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'inotify_add_watch',
+                    'reason': set([('fsnotify_group', 'overflow_event'),
+                                   ('inotify_group_private_data',
+                                    'ucounts')])},
+                   {'call': 'getsid',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'rt_sigaction',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getpgid',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getpriority',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sigaction',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setns',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+                   {'call': 'get_robust_list',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_getscheduler',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'ptrace',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_getattr',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getrusage',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_setscheduler',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setitimer',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'ioprio_get',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'vfork',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'prctl',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'move_pages',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setpriority',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'inotify_init1',
+                    'reason': set([('fsnotify_group', 'overflow_event'),
+                                   ('inotify_group_private_data',
+                                    'ucounts')])},
+                   {'call': 'clone',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_getparam',
+                    'reason': set([('task_struct', 'cred')])}],
+ 'inotify_rm_watch': [{'call': 'syncfs',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'vmsplice',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'eventfd2', 'reason': set([('file', 'f_op')])},
+                      {'call': 'pwritev64',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'swapoff', 'reason': set([('file', 'f_op')])},
+                      {'call': 'fremovexattr',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'readahead',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'getdents',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'writev',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'preadv64',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'fchmod',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'pread64',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'signalfd4',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'memfd_create',
+                       'reason': set([('file', 'f_op')])},
+                      {'call': 'remap_file_pages',
+                       'reason': set([('file', 'f_op')])},
+                      {'call': 'dup3', 'reason': set([('file', 'f_op')])},
+                      {'call': 'read',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'fchown',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'mq_timedreceive',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'utime',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'fsync',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'bpf',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'recvfrom',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'fsetxattr',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'sendto',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'epoll_create1',
+                       'reason': set([('file', 'f_op')])},
+                      {'call': 'tee',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'sync_file_range',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'lseek',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'connect',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'getsockname',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'epoll_ctl',
+                       'reason': set([('fd', 'file'),
+                                      ('fd', 'flags'),
+                                      ('file', 'f_op')])},
+                      {'call': 'flock',
+                       'reason': set([('fd', 'file'),
+                                      ('fd', 'flags'),
+                                      ('file', 'f_op')])},
+                      {'call': 'pwritev',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'fchdir',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'openat', 'reason': set([('file', 'f_op')])},
+                      {'call': 'uselib', 'reason': set([('file', 'f_op')])},
+                      {'call': 'accept4',
+                       'reason': set([('fd', 'file'),
+                                      ('fd', 'flags'),
+                                      ('file', 'f_op')])},
+                      {'call': 'old_readdir',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'inotify_rm_watch',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'socketpair',
+                       'reason': set([('file', 'f_op')])},
+                      {'call': 'utimensat',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'inotify_add_watch',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'preadv2',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'splice',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'ftruncate',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'preadv',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'getpeername',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'shmat', 'reason': set([('file', 'f_op')])},
+                      {'call': 'setsockopt',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'socket', 'reason': set([('file', 'f_op')])},
+                      {'call': 'pipe2', 'reason': set([('file', 'f_op')])},
+                      {'call': 'fcntl',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'ioctl',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'pwrite64',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'perf_event_open',
+                       'reason': set([('fd', 'file'),
+                                      ('fd', 'flags'),
+                                      ('file', 'f_op')])},
+                      {'call': 'shmdt', 'reason': set([('file', 'f_op')])},
+                      {'call': 'pwritev64v2',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'futimesat',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'pwritev2',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'shutdown',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'acct', 'reason': set([('file', 'f_op')])},
+                      {'call': 'open', 'reason': set([('file', 'f_op')])},
+                      {'call': 'getsockopt',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'mq_getsetattr',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'dup', 'reason': set([('file', 'f_op')])},
+                      {'call': 'fdatasync',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'setns', 'reason': set([('file', 'f_op')])},
+                      {'call': 'getdents64',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'listen',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'copy_file_range',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'mq_timedsend',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'fgetxattr',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'shmctl', 'reason': set([('file', 'f_op')])},
+                      {'call': 'fcntl64',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'swapon', 'reason': set([('file', 'f_op')])},
+                      {'call': 'fallocate',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'epoll_wait',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'llseek',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'mmap_pgoff',
+                       'reason': set([('file', 'f_op')])},
+                      {'call': 'preadv64v2',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'readv',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'fstatfs',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'fstatfs64',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'write',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'mq_notify',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'sendfile',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'mq_open', 'reason': set([('file', 'f_op')])},
+                      {'call': 'open_by_handle_at',
+                       'reason': set([('file', 'f_op')])},
+                      {'call': 'bind',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'flistxattr',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                      {'call': 'sendfile64',
+                       'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'io_cancel': [{'call': 'swapoff',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'io_getevents',
+                'reason': set([('kioctx', 'user_id'),
+                               ('kioctx_table', 'nr'),
+                               ('mm_struct', 'ioctx_table')])},
+               {'call': 'migrate_pages',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'shmdt',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'brk', 'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'get_mempolicy',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'io_submit', 'reason': set([('kioctx', 'user_id')])},
+               {'call': 'getrusage',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'io_setup',
+                'reason': set([('kioctx', 'user_id'),
+                               ('kioctx_table', 'nr'),
+                               ('mm_struct', 'ioctx_table')])},
+               {'call': 'mremap',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'io_destroy',
+                'reason': set([('kioctx', 'user_id'),
+                               ('kioctx_table', 'nr'),
+                               ('mm_struct', 'ioctx_table')])},
+               {'call': 'mbind',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'prctl',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'move_pages',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'modify_ldt',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'mincore',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'io_cancel',
+                'reason': set([('aio_kiocb', 'ki_user_iocb'),
+                               ('kioctx', 'user_id'),
+                               ('kioctx_table', 'nr'),
+                               ('mm_struct', 'ioctx_table')])}],
+ 'io_destroy': [{'call': 'swapoff',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'io_getevents',
+                 'reason': set([('kioctx', 'max_reqs'),
+                                ('kioctx', 'mmap_base'),
+                                ('kioctx', 'mmap_size'),
+                                ('kioctx', 'user_id'),
+                                ('kioctx_table', 'nr'),
+                                ('mm_struct', 'ioctx_table')])},
+                {'call': 'migrate_pages',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'shmdt',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'brk',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'get_mempolicy',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'io_submit',
+                 'reason': set([('kioctx', 'max_reqs'),
+                                ('kioctx', 'mmap_base'),
+                                ('kioctx', 'mmap_size'),
+                                ('kioctx', 'user_id')])},
+                {'call': 'getrusage',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'io_setup',
+                 'reason': set([('kioctx', 'max_reqs'),
+                                ('kioctx', 'mmap_base'),
+                                ('kioctx', 'mmap_size'),
+                                ('kioctx', 'user_id'),
+                                ('kioctx_table', 'nr'),
+                                ('mm_struct', 'ioctx_table')])},
+                {'call': 'mremap',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'io_destroy',
+                 'reason': set([('kioctx', 'max_reqs'),
+                                ('kioctx', 'mmap_base'),
+                                ('kioctx', 'mmap_size'),
+                                ('kioctx', 'user_id'),
+                                ('kioctx_table', 'nr'),
+                                ('mm_struct', 'ioctx_table')])},
+                {'call': 'mbind',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'prctl',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'move_pages',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'modify_ldt',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'mincore',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'io_cancel',
+                 'reason': set([('kioctx', 'max_reqs'),
+                                ('kioctx', 'mmap_base'),
+                                ('kioctx', 'mmap_size'),
+                                ('kioctx', 'user_id'),
+                                ('kioctx_table', 'nr'),
+                                ('mm_struct', 'ioctx_table')])}],
+ 'io_getevents': [{'call': 'keyctl',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'rt_sigtimedwait',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'msgrcv',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'kill',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'swapoff',
+                   'reason': set([('mm_struct', 'ioctx_table')])},
+                  {'call': 'sched_getaffinity',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_setparam',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'ioprio_set',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'remap_file_pages',
+                   'reason': set([('mm_struct', 'ioctx_table')])},
+                  {'call': 'io_getevents',
+                   'reason': set([('kioctx', 'user_id'),
+                                  ('kioctx_table', 'nr'),
+                                  ('mm_struct', 'ioctx_table')])},
+                  {'call': 'getppid',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'mq_timedreceive',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'capget',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_setaffinity',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'signal',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'semtimedop',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'umount',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_rr_get_interval',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'rt_sigprocmask',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'setsid',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sigaltstack',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_setattr',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'migrate_pages',
+                   'reason': set([('mm_struct', 'ioctx_table'),
+                                  ('task_struct', 'timer_slack_ns')])},
+                  {'call': 'getitimer',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'setpgid',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'getsid',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'prlimit64',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'perf_event_open',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'shmdt',
+                   'reason': set([('mm_struct', 'ioctx_table')])},
+                  {'call': 'rt_sigaction',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'getpgid',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'brk',
+                   'reason': set([('mm_struct', 'ioctx_table')])},
+                  {'call': 'getpriority',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sigaction',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'setns',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'fork',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'get_mempolicy',
+                   'reason': set([('mm_struct', 'ioctx_table')])},
+                  {'call': 'io_submit',
+                   'reason': set([('kioctx', 'user_id')])},
+                  {'call': 'get_robust_list',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'mq_timedsend',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_getscheduler',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'ptrace',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_getattr',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'getrusage',
+                   'reason': set([('mm_struct', 'ioctx_table'),
+                                  ('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_setscheduler',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'setitimer',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'ioprio_get',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'vfork',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'io_setup',
+                   'reason': set([('kioctx', 'user_id'),
+                                  ('kioctx_table', 'nr'),
+                                  ('mm_struct', 'ioctx_table')])},
+                  {'call': 'mremap',
+                   'reason': set([('mm_struct', 'ioctx_table')])},
+                  {'call': 'io_destroy',
+                   'reason': set([('kioctx', 'user_id'),
+                                  ('kioctx_table', 'nr'),
+                                  ('mm_struct', 'ioctx_table')])},
+                  {'call': 'mbind',
+                   'reason': set([('mm_struct', 'ioctx_table')])},
+                  {'call': 'prctl',
+                   'reason': set([('mm_struct', 'ioctx_table'),
+                                  ('task_struct', 'timer_slack_ns')])},
+                  {'call': 'move_pages',
+                   'reason': set([('mm_struct', 'ioctx_table'),
+                                  ('task_struct', 'timer_slack_ns')])},
+                  {'call': 'modify_ldt',
+                   'reason': set([('mm_struct', 'ioctx_table')])},
+                  {'call': 'setpriority',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'mincore',
+                   'reason': set([('mm_struct', 'ioctx_table')])},
+                  {'call': 'clone',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_getparam',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'io_cancel',
+                   'reason': set([('kioctx', 'user_id'),
+                                  ('kioctx_table', 'nr'),
+                                  ('mm_struct', 'ioctx_table')])}],
+ 'io_setup': [{'call': 'io_getevents',
+               'reason': set([('kioctx', 'cpu'),
+                              ('kioctx', 'max_reqs'),
+                              ('kioctx', 'mmap_base'),
+                              ('kioctx', 'mmap_size'),
+                              ('kioctx', 'req_batch')])},
+              {'call': 'io_submit',
+               'reason': set([('kioctx', 'cpu'),
+                              ('kioctx', 'max_reqs'),
+                              ('kioctx', 'mmap_base'),
+                              ('kioctx', 'mmap_size'),
+                              ('kioctx', 'req_batch')])},
+              {'call': 'io_setup',
+               'reason': set([('kioctx', 'cpu'),
+                              ('kioctx', 'max_reqs'),
+                              ('kioctx', 'mmap_base'),
+                              ('kioctx', 'mmap_size'),
+                              ('kioctx', 'req_batch')])},
+              {'call': 'io_destroy',
+               'reason': set([('kioctx', 'cpu'),
+                              ('kioctx', 'max_reqs'),
+                              ('kioctx', 'mmap_base'),
+                              ('kioctx', 'mmap_size'),
+                              ('kioctx', 'req_batch')])},
+              {'call': 'io_cancel',
+               'reason': set([('kioctx', 'cpu'),
+                              ('kioctx', 'max_reqs'),
+                              ('kioctx', 'mmap_base'),
+                              ('kioctx', 'mmap_size'),
+                              ('kioctx', 'req_batch')])}],
+ 'io_submit': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setparam',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ioprio_set',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'semtimedop',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sigaltstack',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setattr',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'migrate_pages',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getitimer',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'prlimit64',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'perf_event_open',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getpriority',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sigaction',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'get_robust_list',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getattr',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getrusage',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setitimer',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ioprio_get',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'move_pages',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setpriority',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getparam',
+                'reason': set([('mm_segment_t', 'seg')])}],
+ 'ioctl': [{'call': 'syncfs',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'vmsplice',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pwritev64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fremovexattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'readahead',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getdents',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'writev',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'preadv64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fchmod',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pread64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'signalfd4',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'read', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fchown',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'utime',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fsync',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'bpf', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'recvfrom',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fsetxattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'sendto',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'tee', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'sync_file_range',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'lseek',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'connect',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getsockname',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'epoll_ctl',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'flock',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pwritev',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fchdir',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'accept4',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'old_readdir',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'inotify_rm_watch',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'utimensat',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'inotify_add_watch',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'preadv2',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'splice',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'ftruncate',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'preadv',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getpeername',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'setsockopt',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fcntl',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'ioctl',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pwrite64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'perf_event_open',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pwritev64v2',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'futimesat',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pwritev2',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'shutdown',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getsockopt',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_getsetattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fdatasync',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getdents64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'listen',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'copy_file_range',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fgetxattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fcntl64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fallocate',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'epoll_wait',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'llseek',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'preadv64v2',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'readv',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fstatfs',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fstatfs64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'write',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_notify',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'sendfile',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'bind', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'flistxattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'sendfile64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'ioperm': [{'call': 'keyctl',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'msgrcv',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'kill',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_setparam',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'ioprio_set',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'getppid',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'ioperm',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'capget',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'signal',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'semtimedop',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'umount',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'setsid',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sigaltstack',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_setattr',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'migrate_pages',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'getitimer',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'setpgid',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'getsid',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'prlimit64',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'perf_event_open',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'getpgid',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'getpriority',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sigaction',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'setns',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'fork',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'get_robust_list',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'ptrace',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_getattr',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'getrusage',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'setitimer',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'ioprio_get',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'vfork',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'prctl',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'move_pages',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'setpriority',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'clone',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_getparam',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])}],
+ 'ioprio_get': [{'call': 'keyctl',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'rt_sigtimedwait',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'msgrcv',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'kill',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_getaffinity',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_setparam',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'ioprio_set',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getppid',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'mq_timedreceive',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'capget',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_setaffinity',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'signal',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'semtimedop',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'umount',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_rr_get_interval',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'rt_sigprocmask',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'setsid',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sigaltstack',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_setattr',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'migrate_pages',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getitimer',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'setpgid',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getsid',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'prlimit64',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'rt_sigaction',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getpgid',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getpriority',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sigaction',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'setns',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'fork',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'get_robust_list',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'mq_timedsend',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_getscheduler',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'ptrace',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_getattr',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getrusage',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_setscheduler',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'setitimer',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'ioprio_get',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'vfork',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'prctl',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'move_pages',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'setpriority',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'clone',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_getparam',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])}],
+ 'ioprio_set': [{'call': 'keyctl',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'rt_sigtimedwait',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'msgrcv',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'kill',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_getaffinity',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_setparam',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'ioprio_set',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getppid',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'mq_timedreceive',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'capget',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_setaffinity',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'signal',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'semtimedop',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'umount',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_rr_get_interval',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'rt_sigprocmask',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'setsid',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sigaltstack',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_setattr',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'migrate_pages',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getitimer',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'setpgid',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getsid',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'prlimit64',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'rt_sigaction',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getpgid',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getpriority',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sigaction',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'setns',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'fork',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'get_robust_list',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'mq_timedsend',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_getscheduler',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'ptrace',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_getattr',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getrusage',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_setscheduler',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'setitimer',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'ioprio_get',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'vfork',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'prctl',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'move_pages',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'setpriority',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'clone',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_getparam',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])}],
+ 'keyctl': [{'call': 'keyctl',
+             'reason': set([('cred', 'session_keyring'),
+                            ('key', 'description'),
+                            ('key', 'gid'),
+                            ('key', 'perm'),
+                            ('key', 'quotalen'),
+                            ('key', 'serial'),
+                            ('key', 'uid'),
+                            ('key_type', 'name'),
+                            ('key_type', 'read'),
+                            ('key_user', 'qnbytes'),
+                            ('key_user', 'qnkeys'),
+                            ('request_key_auth', 'target_key'),
+                            ('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'setfsuid',
+             'reason': set([('cred', 'session_keyring')])},
+            {'call': 'msgrcv',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'kill',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'getresuid16',
+             'reason': set([('cred', 'session_keyring')])},
+            {'call': 'getresgid',
+             'reason': set([('cred', 'session_keyring')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'setgid',
+             'reason': set([('cred', 'egid'),
+                            ('cred', 'gid'),
+                            ('cred', 'session_keyring'),
+                            ('cred', 'sgid')])},
+            {'call': 'ioprio_set',
+             'reason': set([('cred', 'session_keyring'),
+                            ('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'capset', 'reason': set([('cred', 'session_keyring')])},
+            {'call': 'getppid',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'getresgid16',
+             'reason': set([('cred', 'session_keyring')])},
+            {'call': 'capget',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('cred', 'session_keyring'),
+                            ('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'setfsgid',
+             'reason': set([('cred', 'session_keyring')])},
+            {'call': 'unshare', 'reason': set([('cred', 'session_keyring')])},
+            {'call': 'signal',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'setreuid',
+             'reason': set([('cred', 'euid'),
+                            ('cred', 'session_keyring'),
+                            ('cred', 'suid'),
+                            ('cred', 'uid')])},
+            {'call': 'semtimedop',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'umount',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'epoll_create1',
+             'reason': set([('cred', 'session_keyring')])},
+            {'call': 'getresuid',
+             'reason': set([('cred', 'session_keyring')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'setsid',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'sigaltstack',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'migrate_pages',
+             'reason': set([('cred', 'session_keyring'),
+                            ('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'getitimer',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'setpgid',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'setresgid',
+             'reason': set([('cred', 'egid'),
+                            ('cred', 'gid'),
+                            ('cred', 'session_keyring'),
+                            ('cred', 'sgid')])},
+            {'call': 'setregid',
+             'reason': set([('cred', 'egid'),
+                            ('cred', 'gid'),
+                            ('cred', 'session_keyring'),
+                            ('cred', 'sgid')])},
+            {'call': 'getsid',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'prlimit64',
+             'reason': set([('cred', 'session_keyring'),
+                            ('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'getgroups16',
+             'reason': set([('cred', 'session_keyring')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'request_key',
+             'reason': set([('key', 'description'),
+                            ('key', 'perm'),
+                            ('key', 'quotalen'),
+                            ('key', 'serial'),
+                            ('key_type', 'name'),
+                            ('key_type', 'read')])},
+            {'call': 'getpgid',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'getpriority',
+             'reason': set([('cred', 'session_keyring'),
+                            ('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'sigaction',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'faccessat',
+             'reason': set([('cred', 'session_keyring')])},
+            {'call': 'setns',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'fork',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'ptrace',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'getrusage',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'setresuid',
+             'reason': set([('cred', 'euid'),
+                            ('cred', 'session_keyring'),
+                            ('cred', 'suid'),
+                            ('cred', 'uid')])},
+            {'call': 'setitimer',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'ioprio_get',
+             'reason': set([('cred', 'session_keyring'),
+                            ('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'vfork',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'setuid',
+             'reason': set([('cred', 'euid'),
+                            ('cred', 'session_keyring'),
+                            ('cred', 'suid'),
+                            ('cred', 'uid')])},
+            {'call': 'prctl',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'move_pages',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'getgroups',
+             'reason': set([('cred', 'session_keyring')])},
+            {'call': 'setpriority',
+             'reason': set([('cred', 'session_keyring'),
+                            ('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'clone',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])}],
+ 'kill': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'rt_sigtimedwait',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'sched_getaffinity',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'sched_setparam',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'ioprio_set', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'mq_timedreceive',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'sched_setaffinity',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'semtimedop', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'sched_rr_get_interval',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'rt_sigprocmask',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'sigaltstack', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'sched_setattr', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'migrate_pages', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'prlimit64', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'perf_event_open',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'rt_sigaction', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'getpriority', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'get_robust_list',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'mq_timedsend', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'sched_getscheduler',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'sched_getattr', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'sched_setscheduler',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'ioprio_get', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'move_pages', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'setpriority', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'sched_getparam',
+           'reason': set([('task_struct', 'cred')])}],
+ 'lgetxattr': [{'call': 'eventfd2', 'reason': set([('path', 'dentry')])},
+               {'call': 'swapoff', 'reason': set([('path', 'dentry')])},
+               {'call': 'pivot_root', 'reason': set([('path', 'dentry')])},
+               {'call': 'memfd_create', 'reason': set([('path', 'dentry')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('path', 'dentry')])},
+               {'call': 'dup3', 'reason': set([('path', 'dentry')])},
+               {'call': 'unshare', 'reason': set([('path', 'dentry')])},
+               {'call': 'epoll_create1', 'reason': set([('path', 'dentry')])},
+               {'call': 'epoll_ctl', 'reason': set([('path', 'dentry')])},
+               {'call': 'flock', 'reason': set([('path', 'dentry')])},
+               {'call': 'openat', 'reason': set([('path', 'dentry')])},
+               {'call': 'lookup_dcookie',
+                'reason': set([('path', 'dentry')])},
+               {'call': 'uselib', 'reason': set([('path', 'dentry')])},
+               {'call': 'accept4', 'reason': set([('path', 'dentry')])},
+               {'call': 'socketpair', 'reason': set([('path', 'dentry')])},
+               {'call': 'getcwd', 'reason': set([('path', 'dentry')])},
+               {'call': 'shmat', 'reason': set([('path', 'dentry')])},
+               {'call': 'socket', 'reason': set([('path', 'dentry')])},
+               {'call': 'pipe2', 'reason': set([('path', 'dentry')])},
+               {'call': 'perf_event_open',
+                'reason': set([('path', 'dentry')])},
+               {'call': 'shmdt', 'reason': set([('path', 'dentry')])},
+               {'call': 'quotactl', 'reason': set([('path', 'dentry')])},
+               {'call': 'acct', 'reason': set([('path', 'dentry')])},
+               {'call': 'open', 'reason': set([('path', 'dentry')])},
+               {'call': 'dup', 'reason': set([('path', 'dentry')])},
+               {'call': 'setns', 'reason': set([('path', 'dentry')])},
+               {'call': 'shmctl', 'reason': set([('path', 'dentry')])},
+               {'call': 'swapon', 'reason': set([('path', 'dentry')])},
+               {'call': 'mmap_pgoff', 'reason': set([('path', 'dentry')])},
+               {'call': 'mq_open', 'reason': set([('path', 'dentry')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('path', 'dentry')])}],
+ 'linkat': [{'call': 'eventfd2', 'reason': set([('path', 'mnt')])},
+            {'call': 'swapoff', 'reason': set([('path', 'mnt')])},
+            {'call': 'pivot_root', 'reason': set([('path', 'mnt')])},
+            {'call': 'memfd_create', 'reason': set([('path', 'mnt')])},
+            {'call': 'remap_file_pages', 'reason': set([('path', 'mnt')])},
+            {'call': 'dup3', 'reason': set([('path', 'mnt')])},
+            {'call': 'unshare', 'reason': set([('path', 'mnt')])},
+            {'call': 'epoll_create1', 'reason': set([('path', 'mnt')])},
+            {'call': 'epoll_ctl', 'reason': set([('path', 'mnt')])},
+            {'call': 'flock', 'reason': set([('path', 'mnt')])},
+            {'call': 'openat', 'reason': set([('path', 'mnt')])},
+            {'call': 'lookup_dcookie', 'reason': set([('path', 'mnt')])},
+            {'call': 'uselib', 'reason': set([('path', 'mnt')])},
+            {'call': 'accept4', 'reason': set([('path', 'mnt')])},
+            {'call': 'socketpair', 'reason': set([('path', 'mnt')])},
+            {'call': 'getcwd', 'reason': set([('path', 'mnt')])},
+            {'call': 'shmat', 'reason': set([('path', 'mnt')])},
+            {'call': 'socket', 'reason': set([('path', 'mnt')])},
+            {'call': 'pipe2', 'reason': set([('path', 'mnt')])},
+            {'call': 'perf_event_open', 'reason': set([('path', 'mnt')])},
+            {'call': 'shmdt', 'reason': set([('path', 'mnt')])},
+            {'call': 'quotactl', 'reason': set([('path', 'mnt')])},
+            {'call': 'acct', 'reason': set([('path', 'mnt')])},
+            {'call': 'open', 'reason': set([('path', 'mnt')])},
+            {'call': 'dup', 'reason': set([('path', 'mnt')])},
+            {'call': 'setns', 'reason': set([('path', 'mnt')])},
+            {'call': 'shmctl', 'reason': set([('path', 'mnt')])},
+            {'call': 'swapon', 'reason': set([('path', 'mnt')])},
+            {'call': 'mmap_pgoff', 'reason': set([('path', 'mnt')])},
+            {'call': 'mq_open', 'reason': set([('path', 'mnt')])},
+            {'call': 'open_by_handle_at', 'reason': set([('path', 'mnt')])}],
+ 'listen': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+            {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+            {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+            {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+            {'call': 'readahead', 'reason': set([('fd', 'file')])},
+            {'call': 'getdents', 'reason': set([('fd', 'file')])},
+            {'call': 'writev', 'reason': set([('fd', 'file')])},
+            {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+            {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+            {'call': 'pread64', 'reason': set([('fd', 'file')])},
+            {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+            {'call': 'read', 'reason': set([('fd', 'file')])},
+            {'call': 'fchown', 'reason': set([('fd', 'file')])},
+            {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+            {'call': 'utime', 'reason': set([('fd', 'file')])},
+            {'call': 'fsync', 'reason': set([('fd', 'file')])},
+            {'call': 'bpf', 'reason': set([('fd', 'file')])},
+            {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+            {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+            {'call': 'sendto', 'reason': set([('fd', 'file')])},
+            {'call': 'tee', 'reason': set([('fd', 'file')])},
+            {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+            {'call': 'lseek', 'reason': set([('fd', 'file')])},
+            {'call': 'connect', 'reason': set([('fd', 'file')])},
+            {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+            {'call': 'epoll_ctl', 'reason': set([('fd', 'file')])},
+            {'call': 'flock', 'reason': set([('fd', 'file')])},
+            {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+            {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+            {'call': 'accept4', 'reason': set([('fd', 'file')])},
+            {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+            {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+            {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+            {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+            {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+            {'call': 'splice', 'reason': set([('fd', 'file')])},
+            {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+            {'call': 'preadv', 'reason': set([('fd', 'file')])},
+            {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+            {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+            {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+            {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+            {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+            {'call': 'perf_event_open', 'reason': set([('fd', 'file')])},
+            {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+            {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+            {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+            {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+            {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+            {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+            {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+            {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+            {'call': 'listen', 'reason': set([('fd', 'file')])},
+            {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+            {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+            {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+            {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+            {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+            {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+            {'call': 'llseek', 'reason': set([('fd', 'file')])},
+            {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+            {'call': 'readv', 'reason': set([('fd', 'file')])},
+            {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+            {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+            {'call': 'write', 'reason': set([('fd', 'file')])},
+            {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+            {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+            {'call': 'bind', 'reason': set([('fd', 'file')])},
+            {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+            {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'listxattr': [{'call': 'eventfd2', 'reason': set([('path', 'dentry')])},
+               {'call': 'swapoff', 'reason': set([('path', 'dentry')])},
+               {'call': 'pivot_root', 'reason': set([('path', 'dentry')])},
+               {'call': 'memfd_create', 'reason': set([('path', 'dentry')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('path', 'dentry')])},
+               {'call': 'dup3', 'reason': set([('path', 'dentry')])},
+               {'call': 'unshare', 'reason': set([('path', 'dentry')])},
+               {'call': 'epoll_create1', 'reason': set([('path', 'dentry')])},
+               {'call': 'epoll_ctl', 'reason': set([('path', 'dentry')])},
+               {'call': 'flock', 'reason': set([('path', 'dentry')])},
+               {'call': 'openat', 'reason': set([('path', 'dentry')])},
+               {'call': 'lookup_dcookie',
+                'reason': set([('path', 'dentry')])},
+               {'call': 'uselib', 'reason': set([('path', 'dentry')])},
+               {'call': 'accept4', 'reason': set([('path', 'dentry')])},
+               {'call': 'socketpair', 'reason': set([('path', 'dentry')])},
+               {'call': 'getcwd', 'reason': set([('path', 'dentry')])},
+               {'call': 'shmat', 'reason': set([('path', 'dentry')])},
+               {'call': 'socket', 'reason': set([('path', 'dentry')])},
+               {'call': 'pipe2', 'reason': set([('path', 'dentry')])},
+               {'call': 'perf_event_open',
+                'reason': set([('path', 'dentry')])},
+               {'call': 'shmdt', 'reason': set([('path', 'dentry')])},
+               {'call': 'quotactl', 'reason': set([('path', 'dentry')])},
+               {'call': 'acct', 'reason': set([('path', 'dentry')])},
+               {'call': 'open', 'reason': set([('path', 'dentry')])},
+               {'call': 'dup', 'reason': set([('path', 'dentry')])},
+               {'call': 'setns', 'reason': set([('path', 'dentry')])},
+               {'call': 'shmctl', 'reason': set([('path', 'dentry')])},
+               {'call': 'swapon', 'reason': set([('path', 'dentry')])},
+               {'call': 'mmap_pgoff', 'reason': set([('path', 'dentry')])},
+               {'call': 'mq_open', 'reason': set([('path', 'dentry')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('path', 'dentry')])}],
+ 'llistxattr': [{'call': 'eventfd2', 'reason': set([('path', 'dentry')])},
+                {'call': 'swapoff', 'reason': set([('path', 'dentry')])},
+                {'call': 'pivot_root', 'reason': set([('path', 'dentry')])},
+                {'call': 'memfd_create', 'reason': set([('path', 'dentry')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('path', 'dentry')])},
+                {'call': 'dup3', 'reason': set([('path', 'dentry')])},
+                {'call': 'unshare', 'reason': set([('path', 'dentry')])},
+                {'call': 'epoll_create1',
+                 'reason': set([('path', 'dentry')])},
+                {'call': 'epoll_ctl', 'reason': set([('path', 'dentry')])},
+                {'call': 'flock', 'reason': set([('path', 'dentry')])},
+                {'call': 'openat', 'reason': set([('path', 'dentry')])},
+                {'call': 'lookup_dcookie',
+                 'reason': set([('path', 'dentry')])},
+                {'call': 'uselib', 'reason': set([('path', 'dentry')])},
+                {'call': 'accept4', 'reason': set([('path', 'dentry')])},
+                {'call': 'socketpair', 'reason': set([('path', 'dentry')])},
+                {'call': 'getcwd', 'reason': set([('path', 'dentry')])},
+                {'call': 'shmat', 'reason': set([('path', 'dentry')])},
+                {'call': 'socket', 'reason': set([('path', 'dentry')])},
+                {'call': 'pipe2', 'reason': set([('path', 'dentry')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('path', 'dentry')])},
+                {'call': 'shmdt', 'reason': set([('path', 'dentry')])},
+                {'call': 'quotactl', 'reason': set([('path', 'dentry')])},
+                {'call': 'acct', 'reason': set([('path', 'dentry')])},
+                {'call': 'open', 'reason': set([('path', 'dentry')])},
+                {'call': 'dup', 'reason': set([('path', 'dentry')])},
+                {'call': 'setns', 'reason': set([('path', 'dentry')])},
+                {'call': 'shmctl', 'reason': set([('path', 'dentry')])},
+                {'call': 'swapon', 'reason': set([('path', 'dentry')])},
+                {'call': 'mmap_pgoff', 'reason': set([('path', 'dentry')])},
+                {'call': 'mq_open', 'reason': set([('path', 'dentry')])},
+                {'call': 'open_by_handle_at',
+                 'reason': set([('path', 'dentry')])}],
+ 'llseek': [{'call': 'syncfs',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'vmsplice',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pwritev64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fremovexattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'readahead',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getdents',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'writev',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'preadv64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fchmod',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pread64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'signalfd4',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'read',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fchown',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'utime',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fsync',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'bpf', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'recvfrom',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fsetxattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sendto',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'tee', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sync_file_range',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'lseek',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'connect',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getsockname',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'epoll_ctl',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'flock',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pwritev',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fchdir',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'accept4',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'old_readdir',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'inotify_rm_watch',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'utimensat',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'inotify_add_watch',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'preadv2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'splice',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'ftruncate',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'preadv',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getpeername',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'setsockopt',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fcntl',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'ioctl',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pwrite64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'perf_event_open',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pwritev64v2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'futimesat',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pwritev2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'shutdown',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getsockopt',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_getsetattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fdatasync',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getdents64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'listen',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'copy_file_range',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fgetxattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fcntl64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fallocate',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'epoll_wait',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'llseek',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'preadv64v2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'readv',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fstatfs',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fstatfs64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'write',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_notify',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sendfile',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'bind',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'flistxattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sendfile64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'lremovexattr': [{'call': 'eventfd2',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'swapoff',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'pivot_root',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'memfd_create',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'remap_file_pages',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'dup3',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'unshare',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'epoll_create1',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'epoll_ctl',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'flock',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'openat',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'lookup_dcookie',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'uselib',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'accept4',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'socketpair',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'getcwd',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'shmat',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'socket',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'pipe2',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'perf_event_open',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'shmdt',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'quotactl',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'acct',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'open',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'dup',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'setns',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'shmctl',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'swapon',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'mmap_pgoff',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'mq_open',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'open_by_handle_at',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'lseek': [{'call': 'syncfs',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'vmsplice',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pwritev64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fremovexattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'readahead',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getdents',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'writev',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'preadv64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fchmod',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pread64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'signalfd4',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'read', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fchown',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'utime',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fsync',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'bpf', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'recvfrom',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fsetxattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'sendto',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'tee', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'sync_file_range',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'lseek',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'connect',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getsockname',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'epoll_ctl',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'flock',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pwritev',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fchdir',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'accept4',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'old_readdir',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'inotify_rm_watch',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'utimensat',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'inotify_add_watch',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'preadv2',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'splice',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'ftruncate',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'preadv',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getpeername',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'setsockopt',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fcntl',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'ioctl',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pwrite64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'perf_event_open',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pwritev64v2',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'futimesat',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pwritev2',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'shutdown',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getsockopt',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_getsetattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fdatasync',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getdents64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'listen',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'copy_file_range',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fgetxattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fcntl64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fallocate',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'epoll_wait',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'llseek',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'preadv64v2',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'readv',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fstatfs',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fstatfs64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'write',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_notify',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'sendfile',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'bind', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'flistxattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'sendfile64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'lsetxattr': [{'call': 'eventfd2',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'swapoff',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'pivot_root',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'memfd_create',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'dup3',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'unshare',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'epoll_create1',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'epoll_ctl',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'flock',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'openat',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'lookup_dcookie',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'uselib',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'accept4',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'socketpair',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'getcwd',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'shmat',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'socket',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'pipe2',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'perf_event_open',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'shmdt',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'quotactl',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'acct',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'open',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'dup',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'setns',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'shmctl',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'swapon',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'mmap_pgoff',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'mq_open',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'lstat': [{'call': 'lstat',
+            'reason': set([('__old_kernel_stat', 'st_ino'),
+                           ('__old_kernel_stat', 'st_nlink')])},
+           {'call': 'stat',
+            'reason': set([('__old_kernel_stat', 'st_ino'),
+                           ('__old_kernel_stat', 'st_nlink')])},
+           {'call': 'fstat',
+            'reason': set([('__old_kernel_stat', 'st_ino'),
+                           ('__old_kernel_stat', 'st_nlink'),
+                           ('kstat', 'dev'),
+                           ('kstat', 'ino'),
+                           ('kstat', 'nlink'),
+                           ('kstat', 'rdev')])},
+           {'call': 'newfstat',
+            'reason': set([('kstat', 'dev'),
+                           ('kstat', 'ino'),
+                           ('kstat', 'nlink'),
+                           ('kstat', 'rdev')])}],
+ 'madvise': [{'call': 'remap_file_pages',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'shmdt',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'brk',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'get_mempolicy',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'munlockall',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'pkey_mprotect',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'madvise',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'mprotect',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'mremap',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'prctl',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'munlock',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'mincore',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'mlockall',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])}],
+ 'migrate_pages': [{'call': 'keyctl',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'rt_sigtimedwait',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'msgrcv',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'kill',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sched_getaffinity',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sched_setparam',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'ioprio_set',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'getppid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'ioperm',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'capget',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sched_setaffinity',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'signal',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'setreuid',
+                    'reason': set([('cred', 'euid'),
+                                   ('cred', 'suid'),
+                                   ('cred', 'uid')])},
+                   {'call': 'semtimedop',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'umount',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sched_rr_get_interval',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'rt_sigprocmask',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'setsid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sigaltstack',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sched_setattr',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'migrate_pages',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'getitimer',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'setpgid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'getsid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'rt_sigaction',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'getpgid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'getpriority',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sigaction',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'setns',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'fork',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'get_robust_list',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sched_getscheduler',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'ptrace',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sched_getattr',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'getrusage',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sched_setscheduler',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'setresuid',
+                    'reason': set([('cred', 'euid'),
+                                   ('cred', 'suid'),
+                                   ('cred', 'uid')])},
+                   {'call': 'setitimer',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'ioprio_get',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'vfork',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'setuid',
+                    'reason': set([('cred', 'euid'),
+                                   ('cred', 'suid'),
+                                   ('cred', 'uid')])},
+                   {'call': 'prctl',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'move_pages',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'setpriority',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'clone',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sched_getparam',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])}],
+ 'mincore': [{'call': 'keyctl',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'rt_sigtimedwait',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'msgrcv',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'kill',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'sched_getaffinity',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'sched_setparam',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'ioprio_set',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'getppid',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'capget',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'sched_setaffinity',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'signal',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'semtimedop',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'umount',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'sched_rr_get_interval',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'rt_sigprocmask',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'setsid',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'sigaltstack',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'sched_setattr',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'migrate_pages',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'getitimer',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'setpgid',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'getsid',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'prlimit64',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'perf_event_open',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'shmdt',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'rt_sigaction',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'getpgid',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'brk', 'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'getpriority',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'sigaction',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'setns',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'fork',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'get_mempolicy',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'get_robust_list',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'mq_timedsend',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'sched_getscheduler',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'ptrace',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'munlockall',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'pkey_mprotect',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'madvise',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'sched_getattr',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'getrusage',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'sched_setscheduler',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'setitimer',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'ioprio_get',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'vfork',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'mprotect',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'mremap',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'prctl',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'move_pages',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'munlock',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'setpriority',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'mincore',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'clone',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'sched_getparam',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'mlockall',
+              'reason': set([('vm_area_struct', 'vm_start')])}],
+ 'mkdirat': [{'call': 'syncfs', 'reason': set([('super_block', 's_flags')])},
+             {'call': 'ustat', 'reason': set([('super_block', 's_flags')])},
+             {'call': 'umount', 'reason': set([('super_block', 's_flags')])},
+             {'call': 'quotactl',
+              'reason': set([('super_block', 's_flags')])},
+             {'call': 'swapon', 'reason': set([('super_block', 's_flags')])}],
+ 'mknodat': [{'call': 'syncfs', 'reason': set([('super_block', 's_flags')])},
+             {'call': 'ustat', 'reason': set([('super_block', 's_flags')])},
+             {'call': 'umount', 'reason': set([('super_block', 's_flags')])},
+             {'call': 'quotactl',
+              'reason': set([('super_block', 's_flags')])},
+             {'call': 'swapon', 'reason': set([('super_block', 's_flags')])}],
+ 'mlock': [{'call': 'keyctl', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'rt_sigtimedwait',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'msgrcv', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'kill', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_getaffinity',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_setparam', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'ioprio_set', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'getppid', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'capget', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_setaffinity',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'signal', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'semtimedop', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'umount', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'rt_sigprocmask', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'setsid', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sigaltstack', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_setattr', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'migrate_pages', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'getitimer', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'setpgid', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'getsid', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'prlimit64', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'perf_event_open',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'rt_sigaction', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'getpgid', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'getpriority', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sigaction', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'setns', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'fork', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'get_robust_list',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'mq_timedsend', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_getscheduler',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'ptrace', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_getattr', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'getrusage', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_setscheduler',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'setitimer', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'ioprio_get', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'vfork', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'prctl', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'move_pages', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'setpriority', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'clone', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_getparam', 'reason': set([('task_struct', 'mm')])}],
+ 'mlock2': [{'call': 'keyctl', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'msgrcv', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'ioprio_set', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'getppid', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'capget', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'signal', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'semtimedop', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'umount', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'setsid', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'sigaltstack', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'sched_setattr', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'migrate_pages', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'getitimer', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'setpgid', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'getsid', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'prlimit64', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'rt_sigaction', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'getpgid', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'getpriority', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'sigaction', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'setns', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'mq_timedsend', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'ptrace', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'sched_getattr', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'getrusage', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'setitimer', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'ioprio_get', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'vfork', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'prctl', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'move_pages', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'setpriority', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'clone', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'mm')])}],
+ 'mlockall': [{'call': 'keyctl',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'msgrcv',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'kill',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'swapoff', 'reason': set([('mm_struct', 'total_vm')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ioprio_set',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'personality',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'io_getevents',
+               'reason': set([('mm_struct', 'total_vm')])},
+              {'call': 'getppid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'capget',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'signal',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'umount',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setsid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'migrate_pages',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getitimer',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setpgid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getsid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'prlimit64',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'shmdt',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getpgid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'brk',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'getpriority',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sigaction',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setns',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'fork',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'get_mempolicy',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ptrace',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'munlockall',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'pkey_mprotect',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'madvise',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getrusage',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setitimer',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ioprio_get',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'vfork',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'io_setup',
+               'reason': set([('mm_struct', 'total_vm')])},
+              {'call': 'mprotect',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'mremap',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'io_destroy',
+               'reason': set([('mm_struct', 'total_vm')])},
+              {'call': 'mbind', 'reason': set([('mm_struct', 'total_vm')])},
+              {'call': 'prctl',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('task_struct', 'personality'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'move_pages',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'modify_ldt',
+               'reason': set([('mm_struct', 'total_vm')])},
+              {'call': 'munlock',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'setpriority',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'mincore',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'clone',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'io_cancel',
+               'reason': set([('mm_struct', 'total_vm')])},
+              {'call': 'mlockall',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])}],
+ 'mmap_pgoff': [{'call': 'eventfd2', 'reason': set([('file', 'f_op')])},
+                {'call': 'swapoff', 'reason': set([('file', 'f_op')])},
+                {'call': 'memfd_create', 'reason': set([('file', 'f_op')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('file', 'f_op')])},
+                {'call': 'dup3', 'reason': set([('file', 'f_op')])},
+                {'call': 'epoll_create1', 'reason': set([('file', 'f_op')])},
+                {'call': 'epoll_ctl', 'reason': set([('file', 'f_op')])},
+                {'call': 'flock', 'reason': set([('file', 'f_op')])},
+                {'call': 'openat', 'reason': set([('file', 'f_op')])},
+                {'call': 'uselib', 'reason': set([('file', 'f_op')])},
+                {'call': 'accept4', 'reason': set([('file', 'f_op')])},
+                {'call': 'socketpair', 'reason': set([('file', 'f_op')])},
+                {'call': 'shmat', 'reason': set([('file', 'f_op')])},
+                {'call': 'socket', 'reason': set([('file', 'f_op')])},
+                {'call': 'pipe2', 'reason': set([('file', 'f_op')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('file', 'f_op')])},
+                {'call': 'shmdt', 'reason': set([('file', 'f_op')])},
+                {'call': 'acct', 'reason': set([('file', 'f_op')])},
+                {'call': 'open', 'reason': set([('file', 'f_op')])},
+                {'call': 'dup', 'reason': set([('file', 'f_op')])},
+                {'call': 'setns', 'reason': set([('file', 'f_op')])},
+                {'call': 'shmctl', 'reason': set([('file', 'f_op')])},
+                {'call': 'swapon', 'reason': set([('file', 'f_op')])},
+                {'call': 'mmap_pgoff', 'reason': set([('file', 'f_op')])},
+                {'call': 'mq_open', 'reason': set([('file', 'f_op')])},
+                {'call': 'open_by_handle_at',
+                 'reason': set([('file', 'f_op')])}],
+ 'modify_ldt': [{'call': 'swapoff', 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'io_getevents',
+                 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'get_thread_area',
+                 'reason': set([('user_desc', 'base_addr'),
+                                ('user_desc', 'contents'),
+                                ('user_desc', 'entry_number'),
+                                ('user_desc', 'limit'),
+                                ('user_desc', 'limit_in_pages'),
+                                ('user_desc', 'read_exec_only'),
+                                ('user_desc', 'seg_32bit'),
+                                ('user_desc', 'seg_not_present'),
+                                ('user_desc', 'useable')])},
+                {'call': 'migrate_pages',
+                 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'shmdt', 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'brk', 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'get_mempolicy',
+                 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'getrusage',
+                 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'io_setup',
+                 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'mremap', 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'io_destroy',
+                 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'mbind', 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'prctl', 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'move_pages',
+                 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'modify_ldt',
+                 'reason': set([('ldt_struct', 'entries'),
+                                ('mm_context_t', 'ldt'),
+                                ('user_desc', 'base_addr'),
+                                ('user_desc', 'contents'),
+                                ('user_desc', 'entry_number'),
+                                ('user_desc', 'limit'),
+                                ('user_desc', 'limit_in_pages'),
+                                ('user_desc', 'read_exec_only'),
+                                ('user_desc', 'seg_32bit'),
+                                ('user_desc', 'seg_not_present'),
+                                ('user_desc', 'useable')])},
+                {'call': 'mincore', 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'set_thread_area',
+                 'reason': set([('user_desc', 'base_addr'),
+                                ('user_desc', 'contents'),
+                                ('user_desc', 'entry_number'),
+                                ('user_desc', 'limit'),
+                                ('user_desc', 'limit_in_pages'),
+                                ('user_desc', 'read_exec_only'),
+                                ('user_desc', 'seg_32bit'),
+                                ('user_desc', 'seg_not_present'),
+                                ('user_desc', 'useable')])},
+                {'call': 'io_cancel',
+                 'reason': set([('mm_context_t', 'ldt')])}],
+ 'mount': [{'call': 'keyctl',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigtimedwait',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'msgrcv',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'kill', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getaffinity',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setparam',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ioprio_set',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'personality',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getppid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'capget',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setaffinity',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'signal',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'semtimedop',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'umount',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigprocmask',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setsid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sigaltstack',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setattr',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'migrate_pages',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getitimer',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setpgid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getsid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'prlimit64',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'perf_event_open',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigaction',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getpgid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getpriority',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sigaction',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setns', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'fork', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'get_robust_list',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getscheduler',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ptrace',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mount',
+            'reason': set([('compat_nfs4_mount_data_v1', 'auth_flavours'),
+                           ('compat_nfs4_mount_data_v1', 'host_addr')])},
+           {'call': 'sched_getattr',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getrusage',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setscheduler',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setitimer',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ioprio_get',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'vfork', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'prctl', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'move_pages',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setpriority',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'clone', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getparam',
+            'reason': set([('task_struct', 'personality')])}],
+ 'mprotect': [{'call': 'keyctl',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'msgrcv',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'kill',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'ioprio_set',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'personality',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'getppid',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'capget',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'signal',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'umount',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setsid',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'migrate_pages',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getitimer',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setpgid',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getsid',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'prlimit64',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'shmdt',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getpgid',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'brk',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'getpriority',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sigaction',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setns',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'fork',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'get_mempolicy',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'ptrace',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'munlockall',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'pkey_mprotect',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'madvise',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getrusage',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setitimer',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'ioprio_get',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'vfork',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'mprotect',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'mremap',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'prctl',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'move_pages',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'munlock',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'setpriority',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'mincore',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'clone',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'mlockall',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])}],
+ 'mq_getsetattr': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+                   {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+                   {'call': 'eventfd2', 'reason': set([('file', 'f_op')])},
+                   {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+                   {'call': 'swapoff', 'reason': set([('file', 'f_op')])},
+                   {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+                   {'call': 'readahead', 'reason': set([('fd', 'file')])},
+                   {'call': 'getdents', 'reason': set([('fd', 'file')])},
+                   {'call': 'writev', 'reason': set([('fd', 'file')])},
+                   {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+                   {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+                   {'call': 'pread64', 'reason': set([('fd', 'file')])},
+                   {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+                   {'call': 'memfd_create',
+                    'reason': set([('file', 'f_op')])},
+                   {'call': 'remap_file_pages',
+                    'reason': set([('file', 'f_op')])},
+                   {'call': 'dup3', 'reason': set([('file', 'f_op')])},
+                   {'call': 'read', 'reason': set([('fd', 'file')])},
+                   {'call': 'fchown', 'reason': set([('fd', 'file')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('fd', 'file'), ('mq_attr', 'mq_flags')])},
+                   {'call': 'utime', 'reason': set([('fd', 'file')])},
+                   {'call': 'fsync', 'reason': set([('fd', 'file')])},
+                   {'call': 'bpf', 'reason': set([('fd', 'file')])},
+                   {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+                   {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+                   {'call': 'sendto', 'reason': set([('fd', 'file')])},
+                   {'call': 'epoll_create1',
+                    'reason': set([('file', 'f_op')])},
+                   {'call': 'tee', 'reason': set([('fd', 'file')])},
+                   {'call': 'sync_file_range',
+                    'reason': set([('fd', 'file')])},
+                   {'call': 'lseek', 'reason': set([('fd', 'file')])},
+                   {'call': 'connect', 'reason': set([('fd', 'file')])},
+                   {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+                   {'call': 'epoll_ctl',
+                    'reason': set([('fd', 'file'), ('file', 'f_op')])},
+                   {'call': 'flock',
+                    'reason': set([('fd', 'file'), ('file', 'f_op')])},
+                   {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+                   {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+                   {'call': 'openat', 'reason': set([('file', 'f_op')])},
+                   {'call': 'uselib', 'reason': set([('file', 'f_op')])},
+                   {'call': 'accept4',
+                    'reason': set([('fd', 'file'), ('file', 'f_op')])},
+                   {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+                   {'call': 'inotify_rm_watch',
+                    'reason': set([('fd', 'file')])},
+                   {'call': 'socketpair', 'reason': set([('file', 'f_op')])},
+                   {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+                   {'call': 'inotify_add_watch',
+                    'reason': set([('fd', 'file')])},
+                   {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+                   {'call': 'splice', 'reason': set([('fd', 'file')])},
+                   {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+                   {'call': 'preadv', 'reason': set([('fd', 'file')])},
+                   {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+                   {'call': 'shmat', 'reason': set([('file', 'f_op')])},
+                   {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+                   {'call': 'socket', 'reason': set([('file', 'f_op')])},
+                   {'call': 'pipe2', 'reason': set([('file', 'f_op')])},
+                   {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+                   {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+                   {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('fd', 'file'), ('file', 'f_op')])},
+                   {'call': 'shmdt', 'reason': set([('file', 'f_op')])},
+                   {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+                   {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+                   {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+                   {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+                   {'call': 'acct', 'reason': set([('file', 'f_op')])},
+                   {'call': 'open', 'reason': set([('file', 'f_op')])},
+                   {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+                   {'call': 'mq_getsetattr',
+                    'reason': set([('fd', 'file'), ('mq_attr', 'mq_flags')])},
+                   {'call': 'dup', 'reason': set([('file', 'f_op')])},
+                   {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+                   {'call': 'setns', 'reason': set([('file', 'f_op')])},
+                   {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+                   {'call': 'listen', 'reason': set([('fd', 'file')])},
+                   {'call': 'copy_file_range',
+                    'reason': set([('fd', 'file')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('fd', 'file'), ('mq_attr', 'mq_flags')])},
+                   {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+                   {'call': 'shmctl', 'reason': set([('file', 'f_op')])},
+                   {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+                   {'call': 'swapon', 'reason': set([('file', 'f_op')])},
+                   {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+                   {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+                   {'call': 'llseek', 'reason': set([('fd', 'file')])},
+                   {'call': 'mmap_pgoff', 'reason': set([('file', 'f_op')])},
+                   {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+                   {'call': 'readv', 'reason': set([('fd', 'file')])},
+                   {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+                   {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+                   {'call': 'write', 'reason': set([('fd', 'file')])},
+                   {'call': 'mq_notify',
+                    'reason': set([('fd', 'file'), ('mq_attr', 'mq_flags')])},
+                   {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+                   {'call': 'mq_open',
+                    'reason': set([('file', 'f_op'),
+                                   ('mq_attr', 'mq_flags')])},
+                   {'call': 'open_by_handle_at',
+                    'reason': set([('file', 'f_op')])},
+                   {'call': 'bind', 'reason': set([('fd', 'file')])},
+                   {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+                   {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'mq_notify': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('sigval', 'sival_ptr')])},
+               {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+               {'call': 'eventfd2', 'reason': set([('file', 'f_op')])},
+               {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+               {'call': 'swapoff', 'reason': set([('file', 'f_op')])},
+               {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+               {'call': 'readahead', 'reason': set([('fd', 'file')])},
+               {'call': 'getdents', 'reason': set([('fd', 'file')])},
+               {'call': 'writev', 'reason': set([('fd', 'file')])},
+               {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+               {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+               {'call': 'pread64', 'reason': set([('fd', 'file')])},
+               {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+               {'call': 'memfd_create', 'reason': set([('file', 'f_op')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('file', 'f_op')])},
+               {'call': 'dup3', 'reason': set([('file', 'f_op')])},
+               {'call': 'read', 'reason': set([('fd', 'file')])},
+               {'call': 'fchown', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('fd', 'file'),
+                               ('mqueue_inode_info', 'notify_owner'),
+                               ('sigevent', 'sigev_notify'),
+                               ('sigevent', 'sigev_signo'),
+                               ('sigval', 'sival_ptr')])},
+               {'call': 'utime', 'reason': set([('fd', 'file')])},
+               {'call': 'fsync', 'reason': set([('fd', 'file')])},
+               {'call': 'bpf', 'reason': set([('fd', 'file')])},
+               {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+               {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'timer_create',
+                'reason': set([('sigevent', 'sigev_notify'),
+                               ('sigevent', 'sigev_signo'),
+                               ('sigval', 'sival_ptr')])},
+               {'call': 'sendto', 'reason': set([('fd', 'file')])},
+               {'call': 'epoll_create1', 'reason': set([('file', 'f_op')])},
+               {'call': 'tee', 'reason': set([('fd', 'file')])},
+               {'call': 'rt_sigqueueinfo',
+                'reason': set([('sigval', 'sival_ptr')])},
+               {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+               {'call': 'lseek', 'reason': set([('fd', 'file')])},
+               {'call': 'connect', 'reason': set([('fd', 'file')])},
+               {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+               {'call': 'epoll_ctl',
+                'reason': set([('fd', 'file'), ('file', 'f_op')])},
+               {'call': 'flock',
+                'reason': set([('fd', 'file'), ('file', 'f_op')])},
+               {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+               {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+               {'call': 'tgkill', 'reason': set([('sigval', 'sival_ptr')])},
+               {'call': 'openat', 'reason': set([('file', 'f_op')])},
+               {'call': 'uselib', 'reason': set([('file', 'f_op')])},
+               {'call': 'accept4',
+                'reason': set([('fd', 'file'), ('file', 'f_op')])},
+               {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+               {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+               {'call': 'socketpair', 'reason': set([('file', 'f_op')])},
+               {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+               {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+               {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+               {'call': 'splice', 'reason': set([('fd', 'file')])},
+               {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+               {'call': 'preadv', 'reason': set([('fd', 'file')])},
+               {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+               {'call': 'shmat', 'reason': set([('file', 'f_op')])},
+               {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+               {'call': 'socket', 'reason': set([('file', 'f_op')])},
+               {'call': 'pipe2', 'reason': set([('file', 'f_op')])},
+               {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+               {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+               {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+               {'call': 'perf_event_open',
+                'reason': set([('fd', 'file'), ('file', 'f_op')])},
+               {'call': 'shmdt', 'reason': set([('file', 'f_op')])},
+               {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+               {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+               {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+               {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+               {'call': 'acct', 'reason': set([('file', 'f_op')])},
+               {'call': 'open', 'reason': set([('file', 'f_op')])},
+               {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+               {'call': 'rt_tgsigqueueinfo',
+                'reason': set([('sigval', 'sival_ptr')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('fd', 'file'),
+                               ('mqueue_inode_info', 'notify_owner'),
+                               ('sigevent', 'sigev_notify'),
+                               ('sigevent', 'sigev_signo'),
+                               ('sigval', 'sival_ptr')])},
+               {'call': 'dup', 'reason': set([('file', 'f_op')])},
+               {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+               {'call': 'setns', 'reason': set([('file', 'f_op')])},
+               {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+               {'call': 'listen', 'reason': set([('fd', 'file')])},
+               {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('fd', 'file'),
+                               ('mqueue_inode_info', 'notify_owner'),
+                               ('sigevent', 'sigev_notify'),
+                               ('sigevent', 'sigev_signo'),
+                               ('sigval', 'sival_ptr')])},
+               {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'shmctl', 'reason': set([('file', 'f_op')])},
+               {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+               {'call': 'swapon', 'reason': set([('file', 'f_op')])},
+               {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+               {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+               {'call': 'llseek', 'reason': set([('fd', 'file')])},
+               {'call': 'mmap_pgoff', 'reason': set([('file', 'f_op')])},
+               {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+               {'call': 'readv', 'reason': set([('fd', 'file')])},
+               {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+               {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+               {'call': 'rt_sigreturn',
+                'reason': set([('sigval', 'sival_ptr')])},
+               {'call': 'write', 'reason': set([('fd', 'file')])},
+               {'call': 'tkill', 'reason': set([('sigval', 'sival_ptr')])},
+               {'call': 'mq_notify',
+                'reason': set([('fd', 'file'),
+                               ('mqueue_inode_info', 'notify_owner'),
+                               ('sigevent', 'sigev_notify'),
+                               ('sigevent', 'sigev_signo'),
+                               ('sigval', 'sival_ptr'),
+                               ('sk_buff', 'data')])},
+               {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_open', 'reason': set([('file', 'f_op')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('file', 'f_op')])},
+               {'call': 'bind', 'reason': set([('fd', 'file')])},
+               {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'mq_open': [{'call': 'sysfs', 'reason': set([('filename', 'name')])},
+             {'call': 'eventfd2', 'reason': set([('path', 'dentry')])},
+             {'call': 'mq_unlink', 'reason': set([('filename', 'name')])},
+             {'call': 'swapoff',
+              'reason': set([('filename', 'name'), ('path', 'dentry')])},
+             {'call': 'pivot_root', 'reason': set([('path', 'dentry')])},
+             {'call': 'memfd_create', 'reason': set([('path', 'dentry')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('path', 'dentry')])},
+             {'call': 'dup3', 'reason': set([('path', 'dentry')])},
+             {'call': 'unshare', 'reason': set([('path', 'dentry')])},
+             {'call': 'epoll_create1', 'reason': set([('path', 'dentry')])},
+             {'call': 'epoll_ctl', 'reason': set([('path', 'dentry')])},
+             {'call': 'flock', 'reason': set([('path', 'dentry')])},
+             {'call': 'openat',
+              'reason': set([('filename', 'name'), ('path', 'dentry')])},
+             {'call': 'lookup_dcookie', 'reason': set([('path', 'dentry')])},
+             {'call': 'uselib',
+              'reason': set([('filename', 'name'), ('path', 'dentry')])},
+             {'call': 'renameat2', 'reason': set([('filename', 'name')])},
+             {'call': 'accept4', 'reason': set([('path', 'dentry')])},
+             {'call': 'socketpair', 'reason': set([('path', 'dentry')])},
+             {'call': 'getcwd', 'reason': set([('path', 'dentry')])},
+             {'call': 'shmat', 'reason': set([('path', 'dentry')])},
+             {'call': 'socket', 'reason': set([('path', 'dentry')])},
+             {'call': 'symlinkat', 'reason': set([('filename', 'name')])},
+             {'call': 'pipe2', 'reason': set([('path', 'dentry')])},
+             {'call': 'perf_event_open', 'reason': set([('path', 'dentry')])},
+             {'call': 'shmdt', 'reason': set([('path', 'dentry')])},
+             {'call': 'quotactl',
+              'reason': set([('filename', 'name'), ('path', 'dentry')])},
+             {'call': 'acct',
+              'reason': set([('filename', 'name'), ('path', 'dentry')])},
+             {'call': 'open',
+              'reason': set([('filename', 'name'), ('path', 'dentry')])},
+             {'call': 'unlink', 'reason': set([('filename', 'name')])},
+             {'call': 'rmdir', 'reason': set([('filename', 'name')])},
+             {'call': 'dup', 'reason': set([('path', 'dentry')])},
+             {'call': 'setns', 'reason': set([('path', 'dentry')])},
+             {'call': 'shmctl', 'reason': set([('path', 'dentry')])},
+             {'call': 'swapon',
+              'reason': set([('filename', 'name'), ('path', 'dentry')])},
+             {'call': 'mmap_pgoff', 'reason': set([('path', 'dentry')])},
+             {'call': 'mq_open',
+              'reason': set([('filename', 'name'), ('path', 'dentry')])},
+             {'call': 'unlinkat', 'reason': set([('filename', 'name')])},
+             {'call': 'open_by_handle_at',
+              'reason': set([('path', 'dentry')])}],
+ 'mq_timedreceive': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+                     {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+                     {'call': 'msgrcv', 'reason': set([('msg_msg', 'm_ts')])},
+                     {'call': 'eventfd2',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+                     {'call': 'swapoff',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'fremovexattr',
+                      'reason': set([('fd', 'file')])},
+                     {'call': 'readahead', 'reason': set([('fd', 'file')])},
+                     {'call': 'getdents', 'reason': set([('fd', 'file')])},
+                     {'call': 'writev', 'reason': set([('fd', 'file')])},
+                     {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+                     {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+                     {'call': 'pread64', 'reason': set([('fd', 'file')])},
+                     {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+                     {'call': 'memfd_create',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'remap_file_pages',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'dup3',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'read', 'reason': set([('fd', 'file')])},
+                     {'call': 'fchown', 'reason': set([('fd', 'file')])},
+                     {'call': 'mq_timedreceive',
+                      'reason': set([('fd', 'file'),
+                                     ('mq_attr', 'mq_curmsgs'),
+                                     ('mq_attr', 'mq_msgsize'),
+                                     ('mqueue_inode_info', 'node_cache'),
+                                     ('msg_msg', 'm_ts')])},
+                     {'call': 'utime', 'reason': set([('fd', 'file')])},
+                     {'call': 'fsync', 'reason': set([('fd', 'file')])},
+                     {'call': 'bpf', 'reason': set([('fd', 'file')])},
+                     {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+                     {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+                     {'call': 'sendto', 'reason': set([('fd', 'file')])},
+                     {'call': 'epoll_create1',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'tee', 'reason': set([('fd', 'file')])},
+                     {'call': 'sync_file_range',
+                      'reason': set([('fd', 'file')])},
+                     {'call': 'lseek', 'reason': set([('fd', 'file')])},
+                     {'call': 'connect', 'reason': set([('fd', 'file')])},
+                     {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+                     {'call': 'epoll_ctl',
+                      'reason': set([('fd', 'file'),
+                                     ('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'flock',
+                      'reason': set([('fd', 'file'),
+                                     ('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+                     {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+                     {'call': 'openat',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'uselib',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'accept4',
+                      'reason': set([('fd', 'file'),
+                                     ('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+                     {'call': 'inotify_rm_watch',
+                      'reason': set([('fd', 'file')])},
+                     {'call': 'socketpair',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+                     {'call': 'inotify_add_watch',
+                      'reason': set([('fd', 'file')])},
+                     {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+                     {'call': 'splice', 'reason': set([('fd', 'file')])},
+                     {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+                     {'call': 'preadv', 'reason': set([('fd', 'file')])},
+                     {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+                     {'call': 'shmat',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+                     {'call': 'socket',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'pipe2',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+                     {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+                     {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+                     {'call': 'perf_event_open',
+                      'reason': set([('fd', 'file'),
+                                     ('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'shmdt',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+                     {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+                     {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+                     {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+                     {'call': 'acct',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'open',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+                     {'call': 'mq_getsetattr',
+                      'reason': set([('fd', 'file'),
+                                     ('file', 'f_flags'),
+                                     ('mq_attr', 'mq_curmsgs'),
+                                     ('mq_attr', 'mq_msgsize'),
+                                     ('mqueue_inode_info', 'node_cache')])},
+                     {'call': 'dup',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+                     {'call': 'setns',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+                     {'call': 'listen', 'reason': set([('fd', 'file')])},
+                     {'call': 'copy_file_range',
+                      'reason': set([('fd', 'file')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('fd', 'file'),
+                                     ('mq_attr', 'mq_curmsgs'),
+                                     ('mq_attr', 'mq_msgsize'),
+                                     ('mqueue_inode_info', 'node_cache'),
+                                     ('msg_msg', 'm_ts')])},
+                     {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+                     {'call': 'shmctl',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+                     {'call': 'swapon',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+                     {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+                     {'call': 'llseek', 'reason': set([('fd', 'file')])},
+                     {'call': 'mmap_pgoff',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+                     {'call': 'readv', 'reason': set([('fd', 'file')])},
+                     {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+                     {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+                     {'call': 'msgsnd', 'reason': set([('msg_msg', 'm_ts')])},
+                     {'call': 'write', 'reason': set([('fd', 'file')])},
+                     {'call': 'mq_notify',
+                      'reason': set([('fd', 'file'),
+                                     ('mq_attr', 'mq_curmsgs'),
+                                     ('mq_attr', 'mq_msgsize'),
+                                     ('mqueue_inode_info', 'node_cache')])},
+                     {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+                     {'call': 'mq_open',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op'),
+                                     ('mq_attr', 'mq_curmsgs'),
+                                     ('mq_attr', 'mq_msgsize')])},
+                     {'call': 'open_by_handle_at',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'bind', 'reason': set([('fd', 'file')])},
+                     {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+                     {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'mq_timedsend': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+                  {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+                  {'call': 'eventfd2',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+                  {'call': 'swapoff',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+                  {'call': 'readahead', 'reason': set([('fd', 'file')])},
+                  {'call': 'getdents', 'reason': set([('fd', 'file')])},
+                  {'call': 'writev', 'reason': set([('fd', 'file')])},
+                  {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+                  {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+                  {'call': 'pread64', 'reason': set([('fd', 'file')])},
+                  {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+                  {'call': 'memfd_create',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'remap_file_pages',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'dup3',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'read', 'reason': set([('fd', 'file')])},
+                  {'call': 'fchown', 'reason': set([('fd', 'file')])},
+                  {'call': 'mq_timedreceive',
+                   'reason': set([('fd', 'file'),
+                                  ('mq_attr', 'mq_curmsgs'),
+                                  ('mq_attr', 'mq_maxmsg'),
+                                  ('mq_attr', 'mq_msgsize'),
+                                  ('mqueue_inode_info', 'node_cache')])},
+                  {'call': 'utime', 'reason': set([('fd', 'file')])},
+                  {'call': 'fsync', 'reason': set([('fd', 'file')])},
+                  {'call': 'bpf', 'reason': set([('fd', 'file')])},
+                  {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+                  {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+                  {'call': 'sendto', 'reason': set([('fd', 'file')])},
+                  {'call': 'epoll_create1',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'tee', 'reason': set([('fd', 'file')])},
+                  {'call': 'sync_file_range',
+                   'reason': set([('fd', 'file')])},
+                  {'call': 'lseek', 'reason': set([('fd', 'file')])},
+                  {'call': 'connect', 'reason': set([('fd', 'file')])},
+                  {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+                  {'call': 'epoll_ctl',
+                   'reason': set([('fd', 'file'),
+                                  ('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'flock',
+                   'reason': set([('fd', 'file'),
+                                  ('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+                  {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+                  {'call': 'openat',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'uselib',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'accept4',
+                   'reason': set([('fd', 'file'),
+                                  ('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+                  {'call': 'inotify_rm_watch',
+                   'reason': set([('fd', 'file')])},
+                  {'call': 'socketpair',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+                  {'call': 'inotify_add_watch',
+                   'reason': set([('fd', 'file')])},
+                  {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+                  {'call': 'splice', 'reason': set([('fd', 'file')])},
+                  {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+                  {'call': 'preadv', 'reason': set([('fd', 'file')])},
+                  {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+                  {'call': 'shmat',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+                  {'call': 'socket',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'pipe2',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+                  {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+                  {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+                  {'call': 'perf_event_open',
+                   'reason': set([('fd', 'file'),
+                                  ('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'shmdt',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+                  {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+                  {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+                  {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+                  {'call': 'acct',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'open',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+                  {'call': 'mq_getsetattr',
+                   'reason': set([('fd', 'file'),
+                                  ('file', 'f_flags'),
+                                  ('mq_attr', 'mq_curmsgs'),
+                                  ('mq_attr', 'mq_maxmsg'),
+                                  ('mq_attr', 'mq_msgsize'),
+                                  ('mqueue_inode_info', 'node_cache')])},
+                  {'call': 'dup',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+                  {'call': 'setns',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+                  {'call': 'listen', 'reason': set([('fd', 'file')])},
+                  {'call': 'copy_file_range',
+                   'reason': set([('fd', 'file')])},
+                  {'call': 'mq_timedsend',
+                   'reason': set([('fd', 'file'),
+                                  ('mq_attr', 'mq_curmsgs'),
+                                  ('mq_attr', 'mq_maxmsg'),
+                                  ('mq_attr', 'mq_msgsize'),
+                                  ('mqueue_inode_info', 'node_cache')])},
+                  {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+                  {'call': 'shmctl',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+                  {'call': 'swapon',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+                  {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+                  {'call': 'llseek', 'reason': set([('fd', 'file')])},
+                  {'call': 'mmap_pgoff',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+                  {'call': 'readv', 'reason': set([('fd', 'file')])},
+                  {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+                  {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+                  {'call': 'write', 'reason': set([('fd', 'file')])},
+                  {'call': 'mq_notify',
+                   'reason': set([('fd', 'file'),
+                                  ('mq_attr', 'mq_curmsgs'),
+                                  ('mq_attr', 'mq_maxmsg'),
+                                  ('mq_attr', 'mq_msgsize'),
+                                  ('mqueue_inode_info', 'node_cache')])},
+                  {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+                  {'call': 'mq_open',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op'),
+                                  ('mq_attr', 'mq_curmsgs'),
+                                  ('mq_attr', 'mq_maxmsg'),
+                                  ('mq_attr', 'mq_msgsize')])},
+                  {'call': 'open_by_handle_at',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'bind', 'reason': set([('fd', 'file')])},
+                  {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+                  {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'mremap': [{'call': 'keyctl',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'msgrcv',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'personality')])},
+            {'call': 'swapoff', 'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'ioprio_set',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'personality',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'remap_file_pages',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'io_getevents',
+             'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'getppid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'capget',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'signal',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'semtimedop',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'umount',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'setsid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sigaltstack',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'migrate_pages',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('task_struct', 'personality')])},
+            {'call': 'getitimer',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'setpgid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'getsid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'prlimit64',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'shmdt',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'getpgid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'brk',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'getpriority',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sigaction',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'setns',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'personality')])},
+            {'call': 'get_mempolicy',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'ptrace',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'munlockall',
+             'reason': set([('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'pkey_mprotect',
+             'reason': set([('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'madvise',
+             'reason': set([('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'getrusage',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('task_struct', 'personality')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'setitimer',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'ioprio_get',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'vfork',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'io_setup', 'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'mprotect',
+             'reason': set([('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'mremap',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'io_destroy',
+             'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'mbind', 'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'prctl',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('task_struct', 'personality'),
+                            ('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'move_pages',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('task_struct', 'personality')])},
+            {'call': 'modify_ldt',
+             'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'munlock',
+             'reason': set([('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'setpriority',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'mincore',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'clone',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'io_cancel',
+             'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'mlockall',
+             'reason': set([('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])}],
+ 'msgctl': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'msgrcv',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb'),
+                            ('mm_segment_t', 'seg')])},
+            {'call': 'mq_unlink',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'msgget',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setparam',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioprio_set', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'semtimedop',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb'),
+                            ('mm_segment_t', 'seg')])},
+            {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'semctl',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'shmget',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'msgctl',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb'),
+                            ('msqid64_ds', 'msg_qbytes')])},
+            {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sigaltstack', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setattr',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'migrate_pages',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getitimer', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'semget',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'shmat',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'prlimit64', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'perf_event_open',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getpriority', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setns',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb'),
+                            ('mm_segment_t', 'seg')])},
+            {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'get_robust_list',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'shmctl',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'sched_getattr',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getrusage', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setitimer', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioprio_get', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'move_pages', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'msgsnd',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'setpriority', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'mq_open',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'sched_getparam',
+             'reason': set([('mm_segment_t', 'seg')])}],
+ 'msgrcv': [{'call': 'msgrcv', 'reason': set([('msg_msg', 'm_ts')])},
+            {'call': 'mq_timedreceive', 'reason': set([('msg_msg', 'm_ts')])},
+            {'call': 'mq_timedsend', 'reason': set([('msg_msg', 'm_ts')])},
+            {'call': 'msgsnd', 'reason': set([('msg_msg', 'm_ts')])}],
+ 'msgsnd': [{'call': 'msgrcv',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'mq_unlink',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'msgget',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'semtimedop',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'semctl',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'shmget',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'msgctl',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'semget',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'shmat',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'setns',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'shmctl',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'msgsnd',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'mq_open',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])}],
+ 'munlock': [{'call': 'keyctl', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'rt_sigtimedwait',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'msgrcv', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'kill', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_getaffinity',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_setparam',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'ioprio_set', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'getppid', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'capget', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_setaffinity',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'signal', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'semtimedop', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'umount', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_rr_get_interval',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'rt_sigprocmask',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'setsid', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sigaltstack', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_setattr',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'migrate_pages',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'getitimer', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'setpgid', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'getsid', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'prlimit64', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'perf_event_open',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'shmdt',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'rt_sigaction', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'getpgid', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'brk',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'getpriority', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sigaction', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'setns', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'fork', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'get_mempolicy',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'get_robust_list',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'mq_timedsend', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_getscheduler',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'ptrace', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'munlockall',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'pkey_mprotect',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'madvise',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'sched_getattr',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'getrusage', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_setscheduler',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'setitimer', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'ioprio_get', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'vfork', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'mprotect',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'mremap',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'prctl',
+              'reason': set([('task_struct', 'mm'),
+                             ('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'move_pages', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'munlock',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'setpriority', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'mincore',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'clone', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_getparam',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'mlockall',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])}],
+ 'munlockall': [{'call': 'remap_file_pages',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'shmdt',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'brk',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'get_mempolicy',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'munlockall',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'pkey_mprotect',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'madvise',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'mprotect',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'mremap',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'prctl',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'munlock',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'mincore',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'mlockall',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])}],
+ 'name_to_handle_at': [{'call': 'name_to_handle_at',
+                        'reason': set([('file_handle', 'handle_bytes')])},
+                       {'call': 'syncfs',
+                        'reason': set([('super_block', 's_export_op')])},
+                       {'call': 'eventfd2',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'swapoff',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'pivot_root',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'memfd_create',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'remap_file_pages',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'dup3',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'ustat',
+                        'reason': set([('super_block', 's_export_op')])},
+                       {'call': 'unshare',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'umount',
+                        'reason': set([('super_block', 's_export_op')])},
+                       {'call': 'epoll_create1',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'epoll_ctl',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'flock',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'openat',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'lookup_dcookie',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'uselib',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'accept4',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'socketpair',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'getcwd',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'shmat',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'socket',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'pipe2',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'perf_event_open',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'shmdt',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'quotactl',
+                        'reason': set([('path', 'dentry'),
+                                       ('path', 'mnt'),
+                                       ('super_block', 's_export_op')])},
+                       {'call': 'acct',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'open',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'dup',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'setns',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'shmctl',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'swapon',
+                        'reason': set([('path', 'dentry'),
+                                       ('path', 'mnt'),
+                                       ('super_block', 's_export_op')])},
+                       {'call': 'mmap_pgoff',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'mq_open',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'open_by_handle_at',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'nanosleep': [{'call': 'rt_sigtimedwait',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'mq_unlink',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'swapoff',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'fchmod',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'memfd_create',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'readlinkat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'io_getevents',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'fchown',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'utime',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'semtimedop',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'settimeofday',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'timerfd_gettime',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'pselect6',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'uselib',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'fchmodat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'timer_settime',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'ftruncate',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'timer_gettime',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'ioctl',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'linkat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'stime',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'futimesat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'poll',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'select',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'unlink',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'nanosleep',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'faccessat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'swapon',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'epoll_wait',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'fchownat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'fstat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'timerfd_settime',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'mq_notify',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'sendfile',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'newfstat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'clock_nanosleep',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'unlinkat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'futex',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'recvmmsg',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'sendfile64',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'ppoll',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])}],
+ 'newfstat': [{'call': 'newlstat',
+               'reason': set([('compat_stat', 'st_ino'),
+                              ('compat_stat', 'st_nlink'),
+                              ('stat', 'st_ino'),
+                              ('stat', 'st_nlink')])},
+              {'call': 'newfstatat',
+               'reason': set([('compat_stat', 'st_ino'),
+                              ('compat_stat', 'st_nlink'),
+                              ('stat', 'st_ino'),
+                              ('stat', 'st_nlink')])},
+              {'call': 'newstat',
+               'reason': set([('compat_stat', 'st_ino'),
+                              ('compat_stat', 'st_nlink'),
+                              ('stat', 'st_ino'),
+                              ('stat', 'st_nlink')])},
+              {'call': 'fstat',
+               'reason': set([('kstat', 'dev'),
+                              ('kstat', 'ino'),
+                              ('kstat', 'nlink'),
+                              ('kstat', 'rdev'),
+                              ('kstat', 'size')])},
+              {'call': 'newfstat',
+               'reason': set([('compat_stat', 'st_ino'),
+                              ('compat_stat', 'st_nlink'),
+                              ('kstat', 'dev'),
+                              ('kstat', 'ino'),
+                              ('kstat', 'nlink'),
+                              ('kstat', 'rdev'),
+                              ('kstat', 'size'),
+                              ('stat', 'st_ino'),
+                              ('stat', 'st_nlink')])}],
+ 'newfstatat': [{'call': 'newlstat',
+                 'reason': set([('compat_stat', 'st_ino'),
+                                ('compat_stat', 'st_nlink'),
+                                ('stat', 'st_ino'),
+                                ('stat', 'st_nlink')])},
+                {'call': 'newfstatat',
+                 'reason': set([('compat_stat', 'st_ino'),
+                                ('compat_stat', 'st_nlink'),
+                                ('stat', 'st_ino'),
+                                ('stat', 'st_nlink')])},
+                {'call': 'newstat',
+                 'reason': set([('compat_stat', 'st_ino'),
+                                ('compat_stat', 'st_nlink'),
+                                ('stat', 'st_ino'),
+                                ('stat', 'st_nlink')])},
+                {'call': 'fstat',
+                 'reason': set([('kstat', 'dev'),
+                                ('kstat', 'ino'),
+                                ('kstat', 'nlink'),
+                                ('kstat', 'rdev'),
+                                ('kstat', 'size')])},
+                {'call': 'newfstat',
+                 'reason': set([('compat_stat', 'st_ino'),
+                                ('compat_stat', 'st_nlink'),
+                                ('kstat', 'dev'),
+                                ('kstat', 'ino'),
+                                ('kstat', 'nlink'),
+                                ('kstat', 'rdev'),
+                                ('kstat', 'size'),
+                                ('stat', 'st_ino'),
+                                ('stat', 'st_nlink')])}],
+ 'newlstat': [{'call': 'newlstat',
+               'reason': set([('compat_stat', 'st_ino'),
+                              ('compat_stat', 'st_nlink'),
+                              ('stat', 'st_ino'),
+                              ('stat', 'st_nlink')])},
+              {'call': 'newfstatat',
+               'reason': set([('compat_stat', 'st_ino'),
+                              ('compat_stat', 'st_nlink'),
+                              ('stat', 'st_ino'),
+                              ('stat', 'st_nlink')])},
+              {'call': 'newstat',
+               'reason': set([('compat_stat', 'st_ino'),
+                              ('compat_stat', 'st_nlink'),
+                              ('stat', 'st_ino'),
+                              ('stat', 'st_nlink')])},
+              {'call': 'fstat',
+               'reason': set([('kstat', 'dev'),
+                              ('kstat', 'ino'),
+                              ('kstat', 'nlink'),
+                              ('kstat', 'rdev'),
+                              ('kstat', 'size')])},
+              {'call': 'newfstat',
+               'reason': set([('compat_stat', 'st_ino'),
+                              ('compat_stat', 'st_nlink'),
+                              ('kstat', 'dev'),
+                              ('kstat', 'ino'),
+                              ('kstat', 'nlink'),
+                              ('kstat', 'rdev'),
+                              ('kstat', 'size'),
+                              ('stat', 'st_ino'),
+                              ('stat', 'st_nlink')])}],
+ 'newstat': [{'call': 'newlstat',
+              'reason': set([('compat_stat', 'st_ino'),
+                             ('compat_stat', 'st_nlink'),
+                             ('stat', 'st_ino'),
+                             ('stat', 'st_nlink')])},
+             {'call': 'newfstatat',
+              'reason': set([('compat_stat', 'st_ino'),
+                             ('compat_stat', 'st_nlink'),
+                             ('stat', 'st_ino'),
+                             ('stat', 'st_nlink')])},
+             {'call': 'newstat',
+              'reason': set([('compat_stat', 'st_ino'),
+                             ('compat_stat', 'st_nlink'),
+                             ('stat', 'st_ino'),
+                             ('stat', 'st_nlink')])},
+             {'call': 'fstat',
+              'reason': set([('kstat', 'dev'),
+                             ('kstat', 'ino'),
+                             ('kstat', 'nlink'),
+                             ('kstat', 'rdev'),
+                             ('kstat', 'size')])},
+             {'call': 'newfstat',
+              'reason': set([('compat_stat', 'st_ino'),
+                             ('compat_stat', 'st_nlink'),
+                             ('kstat', 'dev'),
+                             ('kstat', 'ino'),
+                             ('kstat', 'nlink'),
+                             ('kstat', 'rdev'),
+                             ('kstat', 'size'),
+                             ('stat', 'st_ino'),
+                             ('stat', 'st_nlink')])}],
+ 'newuname': [{'call': 'keyctl',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'msgrcv',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'kill',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ioprio_set',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'personality',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getppid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'capget',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'signal',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'umount',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setsid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'migrate_pages',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getitimer',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setpgid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getsid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'prlimit64',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getpgid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getpriority',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sigaction',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setns',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'fork',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ptrace',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getrusage',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setitimer',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ioprio_get',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'vfork',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'prctl',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'move_pages',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setpriority',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'clone',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'personality')])}],
+ 'old_getrlimit': [{'call': 'setrlimit',
+                    'reason': set([('rlimit', 'rlim_cur'),
+                                   ('rlimit', 'rlim_max')])},
+                   {'call': 'old_getrlimit',
+                    'reason': set([('rlimit', 'rlim_cur'),
+                                   ('rlimit', 'rlim_max')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('rlimit', 'rlim_cur'),
+                                   ('rlimit', 'rlim_max')])}],
+ 'old_readdir': [{'call': 'syncfs',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'vmsplice',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'pwritev64',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'fremovexattr',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'readahead',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'getdents',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'writev',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'preadv64',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'fchmod',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'pread64',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'signalfd4',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'read',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'fchown',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'mq_timedreceive',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'utime',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'fsync',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'bpf',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'recvfrom',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'fsetxattr',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'sendto',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'tee',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'sync_file_range',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'lseek',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'connect',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'getsockname',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'epoll_ctl',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'flock',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'pwritev',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'fchdir',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'accept4',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'old_readdir',
+                  'reason': set([('compat_readdir_callback', 'result'),
+                                 ('fd', 'file'),
+                                 ('fd', 'flags'),
+                                 ('readdir_callback', 'result')])},
+                 {'call': 'inotify_rm_watch',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'utimensat',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'inotify_add_watch',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'preadv2',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'splice',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'ftruncate',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'preadv',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'getpeername',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'setsockopt',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'fcntl',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'ioctl',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'pwrite64',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'perf_event_open',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'pwritev64v2',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'futimesat',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'pwritev2',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'shutdown',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'getsockopt',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'mq_getsetattr',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'fdatasync',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'getdents64',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'listen',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'copy_file_range',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'mq_timedsend',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'fgetxattr',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'fcntl64',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'fallocate',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'epoll_wait',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'llseek',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'preadv64v2',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'readv',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'fstatfs',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'fstatfs64',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'write',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'mq_notify',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'sendfile',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'bind',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'flistxattr',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                 {'call': 'sendfile64',
+                  'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'olduname': [{'call': 'keyctl',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'msgrcv',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'kill',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setparam',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'ioprio_set',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'personality',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getppid',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'capget',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'signal',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'semtimedop',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'umount',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setsid',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sigaltstack',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setattr',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'migrate_pages',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getitimer',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setpgid',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getsid',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'prlimit64',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'perf_event_open',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getpgid',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getpriority',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sigaction',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setns',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'fork',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'get_robust_list',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'ptrace',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_getattr',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getrusage',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setitimer',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'ioprio_get',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'vfork',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'prctl',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'move_pages',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setpriority',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'clone',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_getparam',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])}],
+ 'open_by_handle_at': [{'call': 'eventfd2',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'swapoff',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'pivot_root',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'memfd_create',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'remap_file_pages',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'dup3',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'unshare',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'epoll_create1',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'epoll_ctl',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'flock',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'openat',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'lookup_dcookie',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'uselib',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'accept4',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'socketpair',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'getcwd',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'shmat',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'socket',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'pipe2',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'perf_event_open',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'shmdt',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'quotactl',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'acct',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'open',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'dup',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'setns',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'shmctl',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'swapon',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'mmap_pgoff',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'mq_open',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'open_by_handle_at',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'perf_event_open': [{'call': 'syncfs',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'keyctl',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'rt_sigtimedwait',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'vmsplice',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'msgrcv',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'eventfd2',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'mq_unlink',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'pwritev64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'kill',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'swapoff',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'fremovexattr',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'readahead',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'getdents',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'timer_delete',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'sched_getaffinity',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'writev',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'preadv64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'sched_setparam',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'fchmod',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'setgid',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'pread64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'pivot_root',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'signalfd4',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'memfd_create',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'ioprio_set',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'delete_module',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'remap_file_pages',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'dup3',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'readlinkat',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'read',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'io_getevents',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'getppid',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'fchown',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'ioperm',
+                      'reason': set([('mm_segment_t', 'seg')])},
+                     {'call': 'mq_timedreceive',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'capget',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'utime',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'sched_setaffinity',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'ustat',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'fsync',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'bpf',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'unshare',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'signal',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'setreuid',
+                      'reason': set([('list_head', 'prev'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'semtimedop',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'umount',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'recvfrom',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fsetxattr',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'timer_create',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'sendto',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'mkdirat',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'sched_rr_get_interval',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'epoll_create1',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'timerfd_gettime',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'tee',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'semctl',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'sync_file_range',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'lseek',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'connect',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'getsockname',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'epoll_ctl',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'flock',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'pwritev',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fchdir',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'openat',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'lookup_dcookie',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'uselib',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'renameat2',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'rt_sigprocmask',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'accept4',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'msgctl',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'reboot',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'setsid',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'set_trip_temp',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'sigaltstack',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'sched_setattr',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'old_readdir',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'inotify_rm_watch',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'socketpair',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'utimensat',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'migrate_pages',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'getitimer',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'fchmodat',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'setpgid',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'init_module',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'setresgid',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'getcwd',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'inotify_add_watch',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'get_trip_temp',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'preadv2',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'timer_settime',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'setregid',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'splice',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'ftruncate',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'timer_gettime',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'preadv',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'getpeername',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'getsid',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'shmat',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'setsockopt',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'mknodat',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'socket',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'symlinkat',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'pipe2',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'fcntl',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'ioctl',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'prlimit64',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'pwrite64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'perf_event_open',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('file', 'f_op'),
+                                     ('hw_perf_event', 'sample_period'),
+                                     ('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('perf_cpu_context', 'online'),
+                                     ('perf_event', 'addr_filters_offs'),
+                                     ('perf_event', 'attach_state'),
+                                     ('perf_event', 'clock'),
+                                     ('perf_event', 'cpu'),
+                                     ('perf_event', 'ctx'),
+                                     ('perf_event', 'destroy'),
+                                     ('perf_event', 'event_caps'),
+                                     ('perf_event', 'group_caps'),
+                                     ('perf_event', 'group_leader'),
+                                     ('perf_event', 'header_size'),
+                                     ('perf_event', 'id_header_size'),
+                                     ('perf_event', 'nr_siblings'),
+                                     ('perf_event', 'ns'),
+                                     ('perf_event', 'parent'),
+                                     ('perf_event', 'pmu'),
+                                     ('perf_event', 'prog'),
+                                     ('perf_event', 'read_size'),
+                                     ('perf_event_attr', '__reserved_1'),
+                                     ('perf_event_attr', 'disabled'),
+                                     ('perf_event_attr', 'exclude_hv'),
+                                     ('perf_event_attr', 'exclude_kernel'),
+                                     ('perf_event_attr', 'exclude_user'),
+                                     ('perf_event_attr', 'exclusive'),
+                                     ('perf_event_attr', 'freq'),
+                                     ('perf_event_attr', 'inherit'),
+                                     ('perf_event_attr', 'namespaces'),
+                                     ('perf_event_attr', 'pinned'),
+                                     ('perf_event_attr', 'read_format'),
+                                     ('perf_event_attr', 'sample_freq'),
+                                     ('perf_event_attr',
+                                      'sample_max_stack'),
+                                     ('perf_event_attr', 'sample_period'),
+                                     ('perf_event_attr',
+                                      'sample_regs_intr'),
+                                     ('perf_event_attr',
+                                      'sample_regs_user'),
+                                     ('perf_event_attr',
+                                      'sample_stack_user'),
+                                     ('perf_event_attr', 'sample_type'),
+                                     ('perf_event_attr', 'use_clockid'),
+                                     ('perf_event_context', 'parent_ctx'),
+                                     ('perf_event_context', 'task'),
+                                     ('perf_event_context',
+                                      'task_ctx_data'),
+                                     ('pmu', 'capabilities'),
+                                     ('pmu', 'module'),
+                                     ('pmu', 'nr_addr_filters'),
+                                     ('pmu', 'task_ctx_nr'),
+                                     ('pmu', 'task_ctx_size'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'linkat',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'getgroups16',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'shmdt',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'pwritev64v2',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'quotactl',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'rt_sigaction',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'futimesat',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'request_key',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'getpgid',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'brk', 'reason': set([('list_head', 'prev')])},
+                     {'call': 'pwritev2',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'shutdown',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'acct',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'open',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'unlink',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'getsockopt',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'exit_group',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'getpriority',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'sigaction',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'mq_getsetattr',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'faccessat',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'rmdir',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'dup',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'fdatasync',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'setgroups16',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'setns',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'getdents64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'listen',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fork',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'get_mempolicy',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'io_submit',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'get_robust_list',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'copy_file_range',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'sched_yield',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'sched_getscheduler',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'fgetxattr',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'ptrace',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'shmctl',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'fcntl64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'munlockall',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'swapon',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'fallocate',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'pkey_mprotect',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'madvise',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'epoll_wait',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'sched_getattr',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'fchownat',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'getrusage',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'timerfd_settime',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'sched_setscheduler',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'setresuid',
+                      'reason': set([('list_head', 'prev'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'setitimer',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'ioprio_get',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'vfork',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'setuid',
+                      'reason': set([('list_head', 'prev'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'llseek',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'io_setup',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'mprotect',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'mmap_pgoff',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'mremap',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'io_destroy',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'mbind',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'preadv64v2',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'readv',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'prctl',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'move_pages',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'timerfd_create',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'fstatfs',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'modify_ldt',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'getgroups',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'fstatfs64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'dup2', 'reason': set([('list_head', 'prev')])},
+                     {'call': 'get_curr_temp',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'msgsnd',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'write',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'munlock',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'setpriority',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'inotify_init1',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'mincore',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'mq_notify',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'sendfile',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'timer_getoverrun',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'kexec_load',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'clone',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'mq_open',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'setgroups',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'unlinkat',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'sched_getparam',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'io_cancel',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'open_by_handle_at',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'bind',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'flistxattr',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'finit_module',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'sendfile64',
+                      'reason': set([('fd', 'file'),
+                                     ('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'mlockall',
+                      'reason': set([('list_head', 'prev')])}],
+ 'pivot_root': [{'call': 'eventfd2',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'mq_unlink',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent'),
+                                ('vfsmount', 'mnt_flags'),
+                                ('vfsmount', 'mnt_root')])},
+                {'call': 'swapoff',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'pivot_root',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent'),
+                                ('mount', 'mnt_ns'),
+                                ('mount', 'mnt_parent'),
+                                ('path', 'dentry'),
+                                ('path', 'mnt'),
+                                ('vfsmount', 'mnt_flags'),
+                                ('vfsmount', 'mnt_root')])},
+                {'call': 'memfd_create',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'dup3',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'unshare',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'umount',
+                 'reason': set([('mount', 'mnt_ns'),
+                                ('mount', 'mnt_parent'),
+                                ('vfsmount', 'mnt_flags'),
+                                ('vfsmount', 'mnt_root')])},
+                {'call': 'mkdirat',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent')])},
+                {'call': 'epoll_create1',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'epoll_ctl',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'flock',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'openat',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'lookup_dcookie',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'uselib',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'renameat2',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent')])},
+                {'call': 'accept4',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'socketpair',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'getcwd',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent'),
+                                ('mount', 'mnt_ns'),
+                                ('mount', 'mnt_parent'),
+                                ('path', 'dentry'),
+                                ('path', 'mnt'),
+                                ('vfsmount', 'mnt_flags'),
+                                ('vfsmount', 'mnt_root')])},
+                {'call': 'ftruncate',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent')])},
+                {'call': 'shmat',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'mknodat',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent')])},
+                {'call': 'socket',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'symlinkat',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent')])},
+                {'call': 'pipe2',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'linkat',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent')])},
+                {'call': 'shmdt',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'quotactl',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'acct',
+                 'reason': set([('path', 'dentry'),
+                                ('path', 'mnt'),
+                                ('vfsmount', 'mnt_flags'),
+                                ('vfsmount', 'mnt_root')])},
+                {'call': 'open',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'unlink',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent')])},
+                {'call': 'rmdir',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent')])},
+                {'call': 'dup',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'setns',
+                 'reason': set([('nsproxy', 'mnt_ns'),
+                                ('path', 'dentry'),
+                                ('path', 'mnt')])},
+                {'call': 'shmctl',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'swapon',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'mmap_pgoff',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'mq_open',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent'),
+                                ('path', 'dentry'),
+                                ('path', 'mnt'),
+                                ('vfsmount', 'mnt_flags'),
+                                ('vfsmount', 'mnt_root')])},
+                {'call': 'unlinkat',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent')])},
+                {'call': 'open_by_handle_at',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'pkey_alloc': [{'call': 'swapoff',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'pkey_alloc',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'io_getevents',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'pkey_free',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'migrate_pages',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'shmdt',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'brk',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'get_mempolicy',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'getrusage',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'io_setup',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'mremap',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'io_destroy',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'mbind',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'prctl',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'move_pages',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'modify_ldt',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'mincore',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'io_cancel',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])}],
+ 'pkey_mprotect': [{'call': 'keyctl',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'rt_sigtimedwait',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'msgrcv',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'kill',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'sched_getaffinity',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'sched_setparam',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'ioprio_set',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'personality',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'remap_file_pages',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'getppid',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'capget',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'sched_setaffinity',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'signal',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'semtimedop',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'umount',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'sched_rr_get_interval',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'rt_sigprocmask',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'setsid',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'sigaltstack',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'sched_setattr',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'migrate_pages',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'getitimer',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'setpgid',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'getsid',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'shmdt',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'rt_sigaction',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'getpgid',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'brk',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'getpriority',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'sigaction',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'setns',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'fork',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'get_mempolicy',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'get_robust_list',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'sched_getscheduler',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'ptrace',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'munlockall',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'pkey_mprotect',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'madvise',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'sched_getattr',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'getrusage',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'sched_setscheduler',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'setitimer',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'ioprio_get',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'vfork',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'mprotect',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'mremap',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'prctl',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality'),
+                                   ('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'move_pages',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'munlock',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'setpriority',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'mincore',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'clone',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'sched_getparam',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'mlockall',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])}],
+ 'poll': [{'call': 'poll', 'reason': set([('poll_list', 'len')])},
+          {'call': 'ppoll', 'reason': set([('poll_list', 'len')])}],
+ 'ppoll': [{'call': 'keyctl',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigtimedwait',
+            'reason': set([('task_struct', 'personality'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'msgrcv',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mq_unlink',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'kill', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'swapoff',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_getaffinity',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setparam',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'fchmod',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'memfd_create',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'ioprio_set',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'personality',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'readlinkat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'io_getevents',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'getppid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'fchown',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('task_struct', 'personality'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'capget',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'utime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_setaffinity',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'signal',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'semtimedop',
+            'reason': set([('task_struct', 'personality'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'umount',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'settimeofday',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('task_struct', 'personality'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'timerfd_gettime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'pselect6',
+            'reason': set([('compat_timespec', 'tv_nsec'),
+                           ('compat_timespec', 'tv_sec'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'uselib',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'rt_sigprocmask',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setsid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sigaltstack',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setattr',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'migrate_pages',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getitimer',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'fchmodat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'setpgid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'inotify_add_watch',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'timer_settime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'ftruncate',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'timer_gettime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'getsid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ioctl',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'prlimit64',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'perf_event_open',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'linkat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'stime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'rt_sigaction',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'futimesat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'getpgid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'poll',
+            'reason': set([('poll_list', 'len'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'select',
+            'reason': set([('compat_timespec', 'tv_nsec'),
+                           ('compat_timespec', 'tv_sec'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'unlink',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'getpriority',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sigaction',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'nanosleep',
+            'reason': set([('compat_timespec', 'tv_nsec'),
+                           ('compat_timespec', 'tv_sec'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'mq_getsetattr',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'faccessat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'setns', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'fork', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'get_robust_list',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('task_struct', 'personality'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'sched_getscheduler',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ptrace',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'swapon',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'epoll_wait',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_getattr',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'fchownat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'getrusage',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'fstat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'timerfd_settime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_setscheduler',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setitimer',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ioprio_get',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'vfork', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'prctl', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'move_pages',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setpriority',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mq_notify',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sendfile',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'newfstat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'clone', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'clock_nanosleep',
+            'reason': set([('compat_timespec', 'tv_nsec'),
+                           ('compat_timespec', 'tv_sec'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'unlinkat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_getparam',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'futex',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'recvmmsg',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sendfile64',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'ppoll',
+            'reason': set([('compat_timespec', 'tv_nsec'),
+                           ('compat_timespec', 'tv_sec'),
+                           ('poll_list', 'len'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])}],
+ 'prctl': [{'call': 'keyctl',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'rt_sigtimedwait',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'msgrcv',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'kill',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'swapoff', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'sched_getaffinity',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_setparam',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'ioprio_set',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'personality',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'remap_file_pages',
+            'reason': set([('mm_struct', 'flags')])},
+           {'call': 'io_getevents', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'getppid',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'capget',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_setaffinity',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'signal',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'setreuid', 'reason': set([('task_struct', 'flags')])},
+           {'call': 'semtimedop',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'umount',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'rt_sigprocmask',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'setsid',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sigaltstack',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_setattr',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'migrate_pages',
+            'reason': set([('mm_struct', 'flags'),
+                           ('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'getitimer',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'setpgid',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'getsid',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'prlimit64',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'perf_event_open',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'shmdt', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'rt_sigaction',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'getpgid',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'brk', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'getpriority',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sigaction',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'setns',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'fork',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'get_mempolicy', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'get_robust_list',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_getscheduler',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'ptrace',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_getattr',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'getrusage',
+            'reason': set([('mm_struct', 'flags'),
+                           ('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_setscheduler',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'setresuid', 'reason': set([('task_struct', 'flags')])},
+           {'call': 'setitimer',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'ioprio_get',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'vfork',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'setuid', 'reason': set([('task_struct', 'flags')])},
+           {'call': 'io_setup', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'mremap', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'io_destroy', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'mbind', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'prctl',
+            'reason': set([('mm_struct', 'flags'),
+                           ('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'move_pages',
+            'reason': set([('mm_struct', 'flags'),
+                           ('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'modify_ldt', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'setpriority',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'mincore', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'clone',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_getparam',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'io_cancel', 'reason': set([('mm_struct', 'flags')])}],
+ 'pread64': [{'call': 'syncfs',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'vmsplice',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pwritev64',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fremovexattr',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'readahead',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'getdents',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'writev',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'preadv64',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'fchmod',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'pread64',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'signalfd4',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('file', 'f_mode')])},
+             {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+             {'call': 'read',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'fchown',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'utime',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'fsync',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'bpf',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'recvfrom',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'fsetxattr',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'sendto',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+             {'call': 'tee',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'sync_file_range',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'lseek',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'connect',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'getsockname',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'epoll_ctl',
+              'reason': set([('fd', 'file'),
+                             ('fd', 'flags'),
+                             ('file', 'f_mode')])},
+             {'call': 'flock',
+              'reason': set([('fd', 'file'),
+                             ('fd', 'flags'),
+                             ('file', 'f_mode')])},
+             {'call': 'pwritev',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'fchdir',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+             {'call': 'accept4',
+              'reason': set([('fd', 'file'),
+                             ('fd', 'flags'),
+                             ('file', 'f_mode')])},
+             {'call': 'old_readdir',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'inotify_rm_watch',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+             {'call': 'utimensat',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'inotify_add_watch',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'preadv2',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'splice',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'ftruncate',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'preadv',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'getpeername',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'setsockopt',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fcntl',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'ioctl',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'pwrite64',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'perf_event_open',
+              'reason': set([('fd', 'file'),
+                             ('fd', 'flags'),
+                             ('file', 'f_mode')])},
+             {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pwritev64v2',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'futimesat',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'pwritev2',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'shutdown',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'getsockopt',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'mq_getsetattr',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fdatasync',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+             {'call': 'getdents64',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'listen',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'copy_file_range',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'mq_timedsend',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'fgetxattr',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fcntl64',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fallocate',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'epoll_wait',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'llseek',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'preadv64v2',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'readv',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'fstatfs',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'fstatfs64',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'write',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'mq_notify',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'sendfile',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open_by_handle_at',
+              'reason': set([('file', 'f_mode')])},
+             {'call': 'bind',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'flistxattr',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])},
+             {'call': 'sendfile64',
+              'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'preadv': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+            {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+            {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+            {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+            {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+            {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+            {'call': 'readahead', 'reason': set([('fd', 'file')])},
+            {'call': 'getdents', 'reason': set([('fd', 'file')])},
+            {'call': 'writev', 'reason': set([('fd', 'file')])},
+            {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+            {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+            {'call': 'pread64', 'reason': set([('fd', 'file')])},
+            {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+            {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+            {'call': 'remap_file_pages', 'reason': set([('file', 'f_mode')])},
+            {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+            {'call': 'read', 'reason': set([('fd', 'file')])},
+            {'call': 'fchown', 'reason': set([('fd', 'file')])},
+            {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+            {'call': 'utime', 'reason': set([('fd', 'file')])},
+            {'call': 'fsync', 'reason': set([('fd', 'file')])},
+            {'call': 'bpf', 'reason': set([('fd', 'file')])},
+            {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+            {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+            {'call': 'sendto', 'reason': set([('fd', 'file')])},
+            {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+            {'call': 'tee', 'reason': set([('fd', 'file')])},
+            {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+            {'call': 'lseek', 'reason': set([('fd', 'file')])},
+            {'call': 'connect', 'reason': set([('fd', 'file')])},
+            {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+            {'call': 'epoll_ctl',
+             'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+            {'call': 'flock',
+             'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+            {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+            {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+            {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+            {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+            {'call': 'accept4',
+             'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+            {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+            {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+            {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+            {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+            {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+            {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+            {'call': 'splice', 'reason': set([('fd', 'file')])},
+            {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+            {'call': 'preadv', 'reason': set([('fd', 'file')])},
+            {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+            {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+            {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+            {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+            {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+            {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+            {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+            {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+            {'call': 'perf_event_open',
+             'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+            {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+            {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+            {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+            {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+            {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+            {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+            {'call': 'open', 'reason': set([('file', 'f_mode')])},
+            {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+            {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+            {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+            {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+            {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+            {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+            {'call': 'listen', 'reason': set([('fd', 'file')])},
+            {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+            {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+            {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+            {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+            {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+            {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+            {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+            {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+            {'call': 'llseek', 'reason': set([('fd', 'file')])},
+            {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+            {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+            {'call': 'readv', 'reason': set([('fd', 'file')])},
+            {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+            {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+            {'call': 'write', 'reason': set([('fd', 'file')])},
+            {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+            {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+            {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('file', 'f_mode')])},
+            {'call': 'bind', 'reason': set([('fd', 'file')])},
+            {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+            {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'preadv2': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+             {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+             {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+             {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+             {'call': 'readahead', 'reason': set([('fd', 'file')])},
+             {'call': 'getdents', 'reason': set([('fd', 'file')])},
+             {'call': 'writev', 'reason': set([('fd', 'file')])},
+             {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+             {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+             {'call': 'pread64', 'reason': set([('fd', 'file')])},
+             {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+             {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('file', 'f_mode')])},
+             {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+             {'call': 'read', 'reason': set([('fd', 'file')])},
+             {'call': 'fchown', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+             {'call': 'utime', 'reason': set([('fd', 'file')])},
+             {'call': 'fsync', 'reason': set([('fd', 'file')])},
+             {'call': 'bpf', 'reason': set([('fd', 'file')])},
+             {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+             {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+             {'call': 'sendto', 'reason': set([('fd', 'file')])},
+             {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+             {'call': 'tee', 'reason': set([('fd', 'file')])},
+             {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+             {'call': 'lseek', 'reason': set([('fd', 'file')])},
+             {'call': 'connect', 'reason': set([('fd', 'file')])},
+             {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+             {'call': 'epoll_ctl',
+              'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+             {'call': 'flock',
+              'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+             {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+             {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+             {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+             {'call': 'accept4',
+              'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+             {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+             {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+             {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+             {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+             {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+             {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+             {'call': 'splice', 'reason': set([('fd', 'file')])},
+             {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+             {'call': 'preadv', 'reason': set([('fd', 'file')])},
+             {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+             {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+             {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+             {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+             {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+             {'call': 'perf_event_open',
+              'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+             {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+             {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+             {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+             {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+             {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+             {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+             {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+             {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+             {'call': 'listen', 'reason': set([('fd', 'file')])},
+             {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+             {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+             {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+             {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+             {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+             {'call': 'llseek', 'reason': set([('fd', 'file')])},
+             {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+             {'call': 'readv', 'reason': set([('fd', 'file')])},
+             {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+             {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+             {'call': 'write', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+             {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open_by_handle_at',
+              'reason': set([('file', 'f_mode')])},
+             {'call': 'bind', 'reason': set([('fd', 'file')])},
+             {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+             {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'preadv64': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+              {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+              {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+              {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+              {'call': 'readahead', 'reason': set([('fd', 'file')])},
+              {'call': 'getdents', 'reason': set([('fd', 'file')])},
+              {'call': 'writev', 'reason': set([('fd', 'file')])},
+              {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+              {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+              {'call': 'pread64', 'reason': set([('fd', 'file')])},
+              {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+              {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+              {'call': 'read', 'reason': set([('fd', 'file')])},
+              {'call': 'fchown', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+              {'call': 'utime', 'reason': set([('fd', 'file')])},
+              {'call': 'fsync', 'reason': set([('fd', 'file')])},
+              {'call': 'bpf', 'reason': set([('fd', 'file')])},
+              {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+              {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+              {'call': 'sendto', 'reason': set([('fd', 'file')])},
+              {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+              {'call': 'tee', 'reason': set([('fd', 'file')])},
+              {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+              {'call': 'lseek', 'reason': set([('fd', 'file')])},
+              {'call': 'connect', 'reason': set([('fd', 'file')])},
+              {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+              {'call': 'epoll_ctl',
+               'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+              {'call': 'flock',
+               'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+              {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+              {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+              {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+              {'call': 'accept4',
+               'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+              {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+              {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+              {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+              {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+              {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+              {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+              {'call': 'splice', 'reason': set([('fd', 'file')])},
+              {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+              {'call': 'preadv', 'reason': set([('fd', 'file')])},
+              {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+              {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+              {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+              {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+              {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+              {'call': 'perf_event_open',
+               'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+              {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+              {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+              {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+              {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+              {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+              {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+              {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+              {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+              {'call': 'listen', 'reason': set([('fd', 'file')])},
+              {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+              {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+              {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+              {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+              {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+              {'call': 'llseek', 'reason': set([('fd', 'file')])},
+              {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+              {'call': 'readv', 'reason': set([('fd', 'file')])},
+              {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+              {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+              {'call': 'write', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+              {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'bind', 'reason': set([('fd', 'file')])},
+              {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+              {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'preadv64v2': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+                {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+                {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+                {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+                {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+                {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+                {'call': 'readahead', 'reason': set([('fd', 'file')])},
+                {'call': 'getdents', 'reason': set([('fd', 'file')])},
+                {'call': 'writev', 'reason': set([('fd', 'file')])},
+                {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+                {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+                {'call': 'pread64', 'reason': set([('fd', 'file')])},
+                {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+                {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('file', 'f_mode')])},
+                {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+                {'call': 'read', 'reason': set([('fd', 'file')])},
+                {'call': 'fchown', 'reason': set([('fd', 'file')])},
+                {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+                {'call': 'utime', 'reason': set([('fd', 'file')])},
+                {'call': 'fsync', 'reason': set([('fd', 'file')])},
+                {'call': 'bpf', 'reason': set([('fd', 'file')])},
+                {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+                {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+                {'call': 'sendto', 'reason': set([('fd', 'file')])},
+                {'call': 'epoll_create1',
+                 'reason': set([('file', 'f_mode')])},
+                {'call': 'tee', 'reason': set([('fd', 'file')])},
+                {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+                {'call': 'lseek', 'reason': set([('fd', 'file')])},
+                {'call': 'connect', 'reason': set([('fd', 'file')])},
+                {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+                {'call': 'epoll_ctl',
+                 'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+                {'call': 'flock',
+                 'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+                {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+                {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+                {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+                {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+                {'call': 'accept4',
+                 'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+                {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+                {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+                {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+                {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+                {'call': 'inotify_add_watch',
+                 'reason': set([('fd', 'file')])},
+                {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+                {'call': 'splice', 'reason': set([('fd', 'file')])},
+                {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+                {'call': 'preadv', 'reason': set([('fd', 'file')])},
+                {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+                {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+                {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+                {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+                {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+                {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+                {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+                {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+                {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+                {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+                {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+                {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+                {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+                {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+                {'call': 'open', 'reason': set([('file', 'f_mode')])},
+                {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+                {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+                {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+                {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+                {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+                {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+                {'call': 'listen', 'reason': set([('fd', 'file')])},
+                {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+                {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+                {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+                {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+                {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+                {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+                {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+                {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+                {'call': 'llseek', 'reason': set([('fd', 'file')])},
+                {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+                {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+                {'call': 'readv', 'reason': set([('fd', 'file')])},
+                {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+                {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+                {'call': 'write', 'reason': set([('fd', 'file')])},
+                {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+                {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+                {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+                {'call': 'open_by_handle_at',
+                 'reason': set([('file', 'f_mode')])},
+                {'call': 'bind', 'reason': set([('fd', 'file')])},
+                {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+                {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'prlimit64': [{'call': 'keyctl',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setfsuid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'msgrcv',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'kill',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getresuid16', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'getresgid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_setparam',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setgid',
+                'reason': set([('cred', 'egid'),
+                               ('cred', 'gid'),
+                               ('cred', 'sgid'),
+                               ('cred', 'user_ns')])},
+               {'call': 'ioprio_set',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'capset', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'getppid',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getresgid16', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'capget',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setfsgid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'unshare', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'signal',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setreuid',
+                'reason': set([('cred', 'euid'),
+                               ('cred', 'suid'),
+                               ('cred', 'uid'),
+                               ('cred', 'user_ns')])},
+               {'call': 'semtimedop',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'umount',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'epoll_create1',
+                'reason': set([('cred', 'user_ns')])},
+               {'call': 'getresuid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setsid',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sigaltstack',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_setattr',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setrlimit',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max')])},
+               {'call': 'migrate_pages',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getitimer',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setpgid',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setresgid',
+                'reason': set([('cred', 'egid'),
+                               ('cred', 'gid'),
+                               ('cred', 'sgid'),
+                               ('cred', 'user_ns')])},
+               {'call': 'setregid',
+                'reason': set([('cred', 'egid'),
+                               ('cred', 'gid'),
+                               ('cred', 'sgid'),
+                               ('cred', 'user_ns')])},
+               {'call': 'getsid',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'old_getrlimit',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max')])},
+               {'call': 'prlimit64',
+                'reason': set([('cred', 'user_ns'),
+                               ('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max'),
+                               ('rlimit64', 'rlim_cur'),
+                               ('rlimit64', 'rlim_max'),
+                               ('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'perf_event_open',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getgroups16', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getpgid',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getpriority',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sigaction',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'faccessat', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'setns',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'fork',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'get_robust_list',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'ptrace',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_getattr',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getrusage',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setresuid',
+                'reason': set([('cred', 'euid'),
+                               ('cred', 'suid'),
+                               ('cred', 'uid'),
+                               ('cred', 'user_ns')])},
+               {'call': 'setitimer',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'ioprio_get',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'vfork',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setuid',
+                'reason': set([('cred', 'euid'),
+                               ('cred', 'suid'),
+                               ('cred', 'uid'),
+                               ('cred', 'user_ns')])},
+               {'call': 'prctl',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'move_pages',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getgroups', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'setpriority',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'clone',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_getparam',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])}],
+ 'pselect6': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_unlink',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'swapoff',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sched_setparam',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fchmod',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'memfd_create',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'ioprio_set',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'readlinkat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'io_getevents',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fchown',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'utime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'semtimedop',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'settimeofday',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timerfd_gettime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'pselect6',
+               'reason': set([('compat_timespec', 'tv_nsec'),
+                              ('compat_timespec', 'tv_sec'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'uselib',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sigaltstack',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sched_setattr',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'migrate_pages',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'getitimer', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fchmodat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'inotify_add_watch',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timer_settime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'ftruncate',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timer_gettime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'ioctl',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'prlimit64', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'perf_event_open',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'linkat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'stime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'futimesat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'poll',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'select',
+               'reason': set([('compat_timespec', 'tv_nsec'),
+                              ('compat_timespec', 'tv_sec'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'unlink',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'getpriority',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'nanosleep',
+               'reason': set([('compat_timespec', 'tv_nsec'),
+                              ('compat_timespec', 'tv_sec'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'mq_getsetattr',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'faccessat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'get_robust_list',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'swapon',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'epoll_wait',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_getattr',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fchownat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'getrusage', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fstat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timerfd_settime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'setitimer', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'ioprio_get',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'move_pages',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'setpriority',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_notify',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sendfile',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'newfstat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'clock_nanosleep',
+               'reason': set([('compat_timespec', 'tv_nsec'),
+                              ('compat_timespec', 'tv_sec'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'unlinkat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_getparam',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'futex',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'recvmmsg',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sendfile64',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'ppoll',
+               'reason': set([('compat_timespec', 'tv_nsec'),
+                              ('compat_timespec', 'tv_sec'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])}],
+ 'ptrace': [{'call': 'keyctl',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'msgrcv',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'kill',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'pause', 'reason': set([('task_struct', 'state')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'ioprio_set',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'getppid',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'capget',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'signal',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'setreuid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'semtimedop',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'umount',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'setsid',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'sigaltstack',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'migrate_pages',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'getitimer',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'setpgid',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'rt_sigsuspend',
+             'reason': set([('task_struct', 'state')])},
+            {'call': 'getsid',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'prlimit64',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'getpgid',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'getpriority',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'sigaction',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'setns',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'fork',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'ptrace',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'epoll_wait', 'reason': set([('task_struct', 'state')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'getrusage',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'setresuid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'setitimer',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'ioprio_get',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'vfork',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'setuid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'prctl',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'move_pages',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'setpriority',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'clone',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'sigsuspend', 'reason': set([('task_struct', 'state')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])}],
+ 'pwrite64': [{'call': 'syncfs',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'vmsplice',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pwritev64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fremovexattr',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'readahead',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'getdents',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'writev',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'preadv64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fchmod',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'pread64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'signalfd4',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+              {'call': 'read',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fchown',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'utime',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fsync',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'bpf',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'recvfrom',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fsetxattr',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'sendto',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+              {'call': 'tee',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'sync_file_range',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'lseek',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'connect',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'getsockname',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'epoll_ctl',
+               'reason': set([('fd', 'file'),
+                              ('fd', 'flags'),
+                              ('file', 'f_mode')])},
+              {'call': 'flock',
+               'reason': set([('fd', 'file'),
+                              ('fd', 'flags'),
+                              ('file', 'f_mode')])},
+              {'call': 'pwritev',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fchdir',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+              {'call': 'accept4',
+               'reason': set([('fd', 'file'),
+                              ('fd', 'flags'),
+                              ('file', 'f_mode')])},
+              {'call': 'old_readdir',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'inotify_rm_watch',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+              {'call': 'utimensat',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'inotify_add_watch',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'preadv2',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'splice',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'ftruncate',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'preadv',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'getpeername',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'setsockopt',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fcntl',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'ioctl',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'pwrite64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'perf_event_open',
+               'reason': set([('fd', 'file'),
+                              ('fd', 'flags'),
+                              ('file', 'f_mode')])},
+              {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pwritev64v2',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'futimesat',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'pwritev2',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'shutdown',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'getsockopt',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'mq_getsetattr',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fdatasync',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+              {'call': 'getdents64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'listen',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'copy_file_range',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fgetxattr',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fcntl64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fallocate',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'epoll_wait',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'llseek',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'preadv64v2',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'readv',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fstatfs',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fstatfs64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'write',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'mq_notify',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'sendfile',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'bind',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'flistxattr',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'sendfile64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'pwritev': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+             {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+             {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+             {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+             {'call': 'readahead', 'reason': set([('fd', 'file')])},
+             {'call': 'getdents', 'reason': set([('fd', 'file')])},
+             {'call': 'writev', 'reason': set([('fd', 'file')])},
+             {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+             {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+             {'call': 'pread64', 'reason': set([('fd', 'file')])},
+             {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+             {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('file', 'f_mode')])},
+             {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+             {'call': 'read', 'reason': set([('fd', 'file')])},
+             {'call': 'fchown', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+             {'call': 'utime', 'reason': set([('fd', 'file')])},
+             {'call': 'fsync', 'reason': set([('fd', 'file')])},
+             {'call': 'bpf', 'reason': set([('fd', 'file')])},
+             {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+             {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+             {'call': 'sendto', 'reason': set([('fd', 'file')])},
+             {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+             {'call': 'tee', 'reason': set([('fd', 'file')])},
+             {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+             {'call': 'lseek', 'reason': set([('fd', 'file')])},
+             {'call': 'connect', 'reason': set([('fd', 'file')])},
+             {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+             {'call': 'epoll_ctl',
+              'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+             {'call': 'flock',
+              'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+             {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+             {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+             {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+             {'call': 'accept4',
+              'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+             {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+             {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+             {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+             {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+             {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+             {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+             {'call': 'splice', 'reason': set([('fd', 'file')])},
+             {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+             {'call': 'preadv', 'reason': set([('fd', 'file')])},
+             {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+             {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+             {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+             {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+             {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+             {'call': 'perf_event_open',
+              'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+             {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+             {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+             {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+             {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+             {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+             {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+             {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+             {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+             {'call': 'listen', 'reason': set([('fd', 'file')])},
+             {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+             {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+             {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+             {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+             {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+             {'call': 'llseek', 'reason': set([('fd', 'file')])},
+             {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+             {'call': 'readv', 'reason': set([('fd', 'file')])},
+             {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+             {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+             {'call': 'write', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+             {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+             {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open_by_handle_at',
+              'reason': set([('file', 'f_mode')])},
+             {'call': 'bind', 'reason': set([('fd', 'file')])},
+             {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+             {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'pwritev2': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+              {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+              {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+              {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+              {'call': 'readahead', 'reason': set([('fd', 'file')])},
+              {'call': 'getdents', 'reason': set([('fd', 'file')])},
+              {'call': 'writev', 'reason': set([('fd', 'file')])},
+              {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+              {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+              {'call': 'pread64', 'reason': set([('fd', 'file')])},
+              {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+              {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+              {'call': 'read', 'reason': set([('fd', 'file')])},
+              {'call': 'fchown', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+              {'call': 'utime', 'reason': set([('fd', 'file')])},
+              {'call': 'fsync', 'reason': set([('fd', 'file')])},
+              {'call': 'bpf', 'reason': set([('fd', 'file')])},
+              {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+              {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+              {'call': 'sendto', 'reason': set([('fd', 'file')])},
+              {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+              {'call': 'tee', 'reason': set([('fd', 'file')])},
+              {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+              {'call': 'lseek', 'reason': set([('fd', 'file')])},
+              {'call': 'connect', 'reason': set([('fd', 'file')])},
+              {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+              {'call': 'epoll_ctl',
+               'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+              {'call': 'flock',
+               'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+              {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+              {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+              {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+              {'call': 'accept4',
+               'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+              {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+              {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+              {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+              {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+              {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+              {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+              {'call': 'splice', 'reason': set([('fd', 'file')])},
+              {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+              {'call': 'preadv', 'reason': set([('fd', 'file')])},
+              {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+              {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+              {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+              {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+              {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+              {'call': 'perf_event_open',
+               'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+              {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+              {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+              {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+              {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+              {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+              {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+              {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+              {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+              {'call': 'listen', 'reason': set([('fd', 'file')])},
+              {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+              {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+              {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+              {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+              {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+              {'call': 'llseek', 'reason': set([('fd', 'file')])},
+              {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+              {'call': 'readv', 'reason': set([('fd', 'file')])},
+              {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+              {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+              {'call': 'write', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+              {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'bind', 'reason': set([('fd', 'file')])},
+              {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+              {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'pwritev64': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+               {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+               {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+               {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+               {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+               {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+               {'call': 'readahead', 'reason': set([('fd', 'file')])},
+               {'call': 'getdents', 'reason': set([('fd', 'file')])},
+               {'call': 'writev', 'reason': set([('fd', 'file')])},
+               {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+               {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+               {'call': 'pread64', 'reason': set([('fd', 'file')])},
+               {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+               {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('file', 'f_mode')])},
+               {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+               {'call': 'read', 'reason': set([('fd', 'file')])},
+               {'call': 'fchown', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+               {'call': 'utime', 'reason': set([('fd', 'file')])},
+               {'call': 'fsync', 'reason': set([('fd', 'file')])},
+               {'call': 'bpf', 'reason': set([('fd', 'file')])},
+               {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+               {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'sendto', 'reason': set([('fd', 'file')])},
+               {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+               {'call': 'tee', 'reason': set([('fd', 'file')])},
+               {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+               {'call': 'lseek', 'reason': set([('fd', 'file')])},
+               {'call': 'connect', 'reason': set([('fd', 'file')])},
+               {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+               {'call': 'epoll_ctl',
+                'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+               {'call': 'flock',
+                'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+               {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+               {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+               {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+               {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+               {'call': 'accept4',
+                'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+               {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+               {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+               {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+               {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+               {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+               {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+               {'call': 'splice', 'reason': set([('fd', 'file')])},
+               {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+               {'call': 'preadv', 'reason': set([('fd', 'file')])},
+               {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+               {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+               {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+               {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+               {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+               {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+               {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+               {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+               {'call': 'perf_event_open',
+                'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+               {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+               {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+               {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+               {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+               {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+               {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+               {'call': 'open', 'reason': set([('file', 'f_mode')])},
+               {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+               {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+               {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+               {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+               {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+               {'call': 'listen', 'reason': set([('fd', 'file')])},
+               {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+               {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+               {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+               {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+               {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+               {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+               {'call': 'llseek', 'reason': set([('fd', 'file')])},
+               {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+               {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+               {'call': 'readv', 'reason': set([('fd', 'file')])},
+               {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+               {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+               {'call': 'write', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+               {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('file', 'f_mode')])},
+               {'call': 'bind', 'reason': set([('fd', 'file')])},
+               {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'pwritev64v2': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+                 {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+                 {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+                 {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+                 {'call': 'readahead', 'reason': set([('fd', 'file')])},
+                 {'call': 'getdents', 'reason': set([('fd', 'file')])},
+                 {'call': 'writev', 'reason': set([('fd', 'file')])},
+                 {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+                 {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+                 {'call': 'pread64', 'reason': set([('fd', 'file')])},
+                 {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+                 {'call': 'memfd_create',
+                  'reason': set([('file', 'f_mode')])},
+                 {'call': 'remap_file_pages',
+                  'reason': set([('file', 'f_mode')])},
+                 {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'read', 'reason': set([('fd', 'file')])},
+                 {'call': 'fchown', 'reason': set([('fd', 'file')])},
+                 {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+                 {'call': 'utime', 'reason': set([('fd', 'file')])},
+                 {'call': 'fsync', 'reason': set([('fd', 'file')])},
+                 {'call': 'bpf', 'reason': set([('fd', 'file')])},
+                 {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+                 {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+                 {'call': 'sendto', 'reason': set([('fd', 'file')])},
+                 {'call': 'epoll_create1',
+                  'reason': set([('file', 'f_mode')])},
+                 {'call': 'tee', 'reason': set([('fd', 'file')])},
+                 {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+                 {'call': 'lseek', 'reason': set([('fd', 'file')])},
+                 {'call': 'connect', 'reason': set([('fd', 'file')])},
+                 {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+                 {'call': 'epoll_ctl',
+                  'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+                 {'call': 'flock',
+                  'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+                 {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+                 {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+                 {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'accept4',
+                  'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+                 {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+                 {'call': 'inotify_rm_watch',
+                  'reason': set([('fd', 'file')])},
+                 {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+                 {'call': 'inotify_add_watch',
+                  'reason': set([('fd', 'file')])},
+                 {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+                 {'call': 'splice', 'reason': set([('fd', 'file')])},
+                 {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+                 {'call': 'preadv', 'reason': set([('fd', 'file')])},
+                 {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+                 {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+                 {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+                 {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+                 {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+                 {'call': 'perf_event_open',
+                  'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+                 {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+                 {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+                 {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+                 {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+                 {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'open', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+                 {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+                 {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+                 {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+                 {'call': 'listen', 'reason': set([('fd', 'file')])},
+                 {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+                 {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+                 {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+                 {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+                 {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+                 {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+                 {'call': 'llseek', 'reason': set([('fd', 'file')])},
+                 {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+                 {'call': 'readv', 'reason': set([('fd', 'file')])},
+                 {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+                 {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+                 {'call': 'write', 'reason': set([('fd', 'file')])},
+                 {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+                 {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+                 {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'open_by_handle_at',
+                  'reason': set([('file', 'f_mode')])},
+                 {'call': 'bind', 'reason': set([('fd', 'file')])},
+                 {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+                 {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'quotactl': [{'call': 'syncfs',
+               'reason': set([('super_block', 's_flags'),
+                              ('super_block', 's_qcop'),
+                              ('super_block', 's_quota_types')])},
+              {'call': 'sysfs', 'reason': set([('filename', 'name')])},
+              {'call': 'mq_unlink', 'reason': set([('filename', 'name')])},
+              {'call': 'swapoff', 'reason': set([('filename', 'name')])},
+              {'call': 'ustat',
+               'reason': set([('super_block', 's_flags'),
+                              ('super_block', 's_qcop'),
+                              ('super_block', 's_quota_types')])},
+              {'call': 'umount',
+               'reason': set([('super_block', 's_flags'),
+                              ('super_block', 's_qcop'),
+                              ('super_block', 's_quota_types')])},
+              {'call': 'openat', 'reason': set([('filename', 'name')])},
+              {'call': 'uselib', 'reason': set([('filename', 'name')])},
+              {'call': 'renameat2', 'reason': set([('filename', 'name')])},
+              {'call': 'symlinkat', 'reason': set([('filename', 'name')])},
+              {'call': 'quotactl',
+               'reason': set([('filename', 'name'),
+                              ('super_block', 's_flags'),
+                              ('super_block', 's_qcop'),
+                              ('super_block', 's_quota_types')])},
+              {'call': 'acct', 'reason': set([('filename', 'name')])},
+              {'call': 'open', 'reason': set([('filename', 'name')])},
+              {'call': 'unlink', 'reason': set([('filename', 'name')])},
+              {'call': 'rmdir', 'reason': set([('filename', 'name')])},
+              {'call': 'swapon',
+               'reason': set([('filename', 'name'),
+                              ('super_block', 's_flags'),
+                              ('super_block', 's_qcop'),
+                              ('super_block', 's_quota_types')])},
+              {'call': 'mq_open', 'reason': set([('filename', 'name')])},
+              {'call': 'unlinkat', 'reason': set([('filename', 'name')])}],
+ 'read': [{'call': 'syncfs',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'vmsplice',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'pwritev64',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'fremovexattr',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'readahead',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'getdents',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'writev',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'preadv64',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'fchmod',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'pread64',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'signalfd4',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'read', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'fchown',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'mq_timedreceive',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'utime', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'fsync', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'bpf', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'recvfrom',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'fsetxattr',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'sendto',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'tee', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'sync_file_range',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'lseek', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'connect',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'getsockname',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'epoll_ctl',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'flock', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'pwritev',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'fchdir',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'accept4',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'old_readdir',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'inotify_rm_watch',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'utimensat',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'inotify_add_watch',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'preadv2',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'splice',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'ftruncate',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'preadv',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'getpeername',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'setsockopt',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'fcntl', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'ioctl', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'pwrite64',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'perf_event_open',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'pwritev64v2',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'futimesat',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'pwritev2',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'shutdown',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'getsockopt',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'mq_getsetattr',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'fdatasync',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'getdents64',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'listen',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'copy_file_range',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'mq_timedsend',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'fgetxattr',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'fcntl64',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'fallocate',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'epoll_wait',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'llseek',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'preadv64v2',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'readv', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'fstatfs',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'fstatfs64',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'write', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'mq_notify',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'sendfile',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'bind', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'flistxattr',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])},
+          {'call': 'sendfile64',
+           'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'readahead': [{'call': 'syncfs',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'vmsplice',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+               {'call': 'mq_unlink',
+                'reason': set([('address_space', 'a_ops')])},
+               {'call': 'pwritev64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'swapoff',
+                'reason': set([('address_space', 'a_ops'),
+                               ('file', 'f_mode')])},
+               {'call': 'fremovexattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'readahead',
+                'reason': set([('address_space', 'a_ops'),
+                               ('fd', 'file'),
+                               ('fd', 'flags')])},
+               {'call': 'getdents',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'writev',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'preadv64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fchmod',
+                'reason': set([('address_space', 'a_ops'),
+                               ('fd', 'file'),
+                               ('fd', 'flags')])},
+               {'call': 'pread64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'signalfd4',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'memfd_create',
+                'reason': set([('address_space', 'a_ops'),
+                               ('file', 'f_mode')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('file', 'f_mode')])},
+               {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+               {'call': 'readlinkat',
+                'reason': set([('address_space', 'a_ops')])},
+               {'call': 'read',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fchown',
+                'reason': set([('address_space', 'a_ops'),
+                               ('fd', 'file'),
+                               ('fd', 'flags')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('address_space', 'a_ops'),
+                               ('fd', 'file'),
+                               ('fd', 'flags')])},
+               {'call': 'utime',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fsync',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'bpf',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'recvfrom',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fsetxattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sendto',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+               {'call': 'tee',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sync_file_range',
+                'reason': set([('address_space', 'a_ops'),
+                               ('fd', 'file'),
+                               ('fd', 'flags')])},
+               {'call': 'lseek',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'connect',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getsockname',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'epoll_ctl',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('file', 'f_mode')])},
+               {'call': 'flock',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('file', 'f_mode')])},
+               {'call': 'pwritev',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fchdir',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+               {'call': 'uselib',
+                'reason': set([('address_space', 'a_ops'),
+                               ('file', 'f_mode')])},
+               {'call': 'accept4',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('file', 'f_mode')])},
+               {'call': 'old_readdir',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'inotify_rm_watch',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+               {'call': 'utimensat',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fchmodat',
+                'reason': set([('address_space', 'a_ops')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('address_space', 'a_ops'),
+                               ('fd', 'file'),
+                               ('fd', 'flags')])},
+               {'call': 'preadv2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'splice',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'ftruncate',
+                'reason': set([('address_space', 'a_ops'),
+                               ('fd', 'file'),
+                               ('fd', 'flags')])},
+               {'call': 'preadv',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getpeername',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'shmat',
+                'reason': set([('address_space', 'a_ops'),
+                               ('file', 'f_mode')])},
+               {'call': 'setsockopt',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+               {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+               {'call': 'fcntl',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'ioctl',
+                'reason': set([('address_space', 'a_ops'),
+                               ('fd', 'file'),
+                               ('fd', 'flags')])},
+               {'call': 'pwrite64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'perf_event_open',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('file', 'f_mode')])},
+               {'call': 'linkat',
+                'reason': set([('address_space', 'a_ops')])},
+               {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+               {'call': 'pwritev64v2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'futimesat',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pwritev2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'shutdown',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+               {'call': 'open', 'reason': set([('file', 'f_mode')])},
+               {'call': 'unlink',
+                'reason': set([('address_space', 'a_ops')])},
+               {'call': 'getsockopt',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('address_space', 'a_ops'),
+                               ('fd', 'file'),
+                               ('fd', 'flags')])},
+               {'call': 'faccessat',
+                'reason': set([('address_space', 'a_ops')])},
+               {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+               {'call': 'fdatasync',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+               {'call': 'getdents64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'listen',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'copy_file_range',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('address_space', 'a_ops'),
+                               ('fd', 'file'),
+                               ('fd', 'flags')])},
+               {'call': 'fgetxattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+               {'call': 'fcntl64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'swapon',
+                'reason': set([('address_space', 'a_ops'),
+                               ('file', 'f_mode')])},
+               {'call': 'fallocate',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'epoll_wait',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fchownat',
+                'reason': set([('address_space', 'a_ops')])},
+               {'call': 'llseek',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+               {'call': 'preadv64v2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'readv',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fstatfs',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fstatfs64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'write',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_notify',
+                'reason': set([('address_space', 'a_ops'),
+                               ('fd', 'file'),
+                               ('fd', 'flags')])},
+               {'call': 'sendfile',
+                'reason': set([('address_space', 'a_ops'),
+                               ('fd', 'file'),
+                               ('fd', 'flags')])},
+               {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+               {'call': 'unlinkat',
+                'reason': set([('address_space', 'a_ops')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('file', 'f_mode')])},
+               {'call': 'bind',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'flistxattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sendfile64',
+                'reason': set([('address_space', 'a_ops'),
+                               ('fd', 'file'),
+                               ('fd', 'flags')])}],
+ 'readlinkat': [{'call': 'eventfd2', 'reason': set([('path', 'dentry')])},
+                {'call': 'swapoff', 'reason': set([('path', 'dentry')])},
+                {'call': 'pivot_root', 'reason': set([('path', 'dentry')])},
+                {'call': 'memfd_create', 'reason': set([('path', 'dentry')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('path', 'dentry')])},
+                {'call': 'dup3', 'reason': set([('path', 'dentry')])},
+                {'call': 'unshare', 'reason': set([('path', 'dentry')])},
+                {'call': 'epoll_create1',
+                 'reason': set([('path', 'dentry')])},
+                {'call': 'epoll_ctl', 'reason': set([('path', 'dentry')])},
+                {'call': 'flock', 'reason': set([('path', 'dentry')])},
+                {'call': 'openat', 'reason': set([('path', 'dentry')])},
+                {'call': 'lookup_dcookie',
+                 'reason': set([('path', 'dentry')])},
+                {'call': 'uselib', 'reason': set([('path', 'dentry')])},
+                {'call': 'accept4', 'reason': set([('path', 'dentry')])},
+                {'call': 'socketpair', 'reason': set([('path', 'dentry')])},
+                {'call': 'getcwd', 'reason': set([('path', 'dentry')])},
+                {'call': 'shmat', 'reason': set([('path', 'dentry')])},
+                {'call': 'socket', 'reason': set([('path', 'dentry')])},
+                {'call': 'pipe2', 'reason': set([('path', 'dentry')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('path', 'dentry')])},
+                {'call': 'shmdt', 'reason': set([('path', 'dentry')])},
+                {'call': 'quotactl', 'reason': set([('path', 'dentry')])},
+                {'call': 'acct', 'reason': set([('path', 'dentry')])},
+                {'call': 'open', 'reason': set([('path', 'dentry')])},
+                {'call': 'dup', 'reason': set([('path', 'dentry')])},
+                {'call': 'setns', 'reason': set([('path', 'dentry')])},
+                {'call': 'shmctl', 'reason': set([('path', 'dentry')])},
+                {'call': 'swapon', 'reason': set([('path', 'dentry')])},
+                {'call': 'mmap_pgoff', 'reason': set([('path', 'dentry')])},
+                {'call': 'mq_open', 'reason': set([('path', 'dentry')])},
+                {'call': 'open_by_handle_at',
+                 'reason': set([('path', 'dentry')])}],
+ 'readv': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+           {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+           {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+           {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+           {'call': 'readahead', 'reason': set([('fd', 'file')])},
+           {'call': 'getdents', 'reason': set([('fd', 'file')])},
+           {'call': 'writev', 'reason': set([('fd', 'file')])},
+           {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+           {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+           {'call': 'pread64', 'reason': set([('fd', 'file')])},
+           {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+           {'call': 'read', 'reason': set([('fd', 'file')])},
+           {'call': 'fchown', 'reason': set([('fd', 'file')])},
+           {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+           {'call': 'utime', 'reason': set([('fd', 'file')])},
+           {'call': 'fsync', 'reason': set([('fd', 'file')])},
+           {'call': 'bpf', 'reason': set([('fd', 'file')])},
+           {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+           {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+           {'call': 'sendto', 'reason': set([('fd', 'file')])},
+           {'call': 'tee', 'reason': set([('fd', 'file')])},
+           {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+           {'call': 'lseek', 'reason': set([('fd', 'file')])},
+           {'call': 'connect', 'reason': set([('fd', 'file')])},
+           {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+           {'call': 'epoll_ctl', 'reason': set([('fd', 'file')])},
+           {'call': 'flock', 'reason': set([('fd', 'file')])},
+           {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+           {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+           {'call': 'accept4', 'reason': set([('fd', 'file')])},
+           {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+           {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+           {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+           {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+           {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+           {'call': 'splice', 'reason': set([('fd', 'file')])},
+           {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+           {'call': 'preadv', 'reason': set([('fd', 'file')])},
+           {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+           {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+           {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+           {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+           {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+           {'call': 'perf_event_open', 'reason': set([('fd', 'file')])},
+           {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+           {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+           {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+           {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+           {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+           {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+           {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+           {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+           {'call': 'listen', 'reason': set([('fd', 'file')])},
+           {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+           {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+           {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+           {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+           {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+           {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+           {'call': 'llseek', 'reason': set([('fd', 'file')])},
+           {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+           {'call': 'readv', 'reason': set([('fd', 'file')])},
+           {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+           {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+           {'call': 'write', 'reason': set([('fd', 'file')])},
+           {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+           {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+           {'call': 'bind', 'reason': set([('fd', 'file')])},
+           {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+           {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'reboot': [{'call': 'reboot', 'reason': set([('pid_namespace', 'user_ns')])},
+            {'call': 'perf_event_open',
+             'reason': set([('pid_namespace', 'user_ns')])},
+            {'call': 'acct', 'reason': set([('pid_namespace', 'user_ns')])},
+            {'call': 'setns', 'reason': set([('pid_namespace', 'user_ns')])}],
+ 'recvfrom': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+              {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+              {'call': 'eventfd2', 'reason': set([('file', 'f_flags')])},
+              {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+              {'call': 'swapoff', 'reason': set([('file', 'f_flags')])},
+              {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+              {'call': 'readahead', 'reason': set([('fd', 'file')])},
+              {'call': 'getdents', 'reason': set([('fd', 'file')])},
+              {'call': 'writev', 'reason': set([('fd', 'file')])},
+              {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+              {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+              {'call': 'pread64', 'reason': set([('fd', 'file')])},
+              {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+              {'call': 'memfd_create', 'reason': set([('file', 'f_flags')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('file', 'f_flags')])},
+              {'call': 'dup3', 'reason': set([('file', 'f_flags')])},
+              {'call': 'read', 'reason': set([('fd', 'file')])},
+              {'call': 'fchown', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+              {'call': 'utime', 'reason': set([('fd', 'file')])},
+              {'call': 'fsync', 'reason': set([('fd', 'file')])},
+              {'call': 'bpf', 'reason': set([('fd', 'file')])},
+              {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+              {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+              {'call': 'sendto', 'reason': set([('fd', 'file')])},
+              {'call': 'epoll_create1', 'reason': set([('file', 'f_flags')])},
+              {'call': 'tee', 'reason': set([('fd', 'file')])},
+              {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+              {'call': 'lseek', 'reason': set([('fd', 'file')])},
+              {'call': 'connect', 'reason': set([('fd', 'file')])},
+              {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+              {'call': 'epoll_ctl',
+               'reason': set([('fd', 'file'), ('file', 'f_flags')])},
+              {'call': 'flock',
+               'reason': set([('fd', 'file'), ('file', 'f_flags')])},
+              {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+              {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+              {'call': 'openat', 'reason': set([('file', 'f_flags')])},
+              {'call': 'uselib', 'reason': set([('file', 'f_flags')])},
+              {'call': 'accept4',
+               'reason': set([('fd', 'file'), ('file', 'f_flags')])},
+              {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+              {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+              {'call': 'socketpair', 'reason': set([('file', 'f_flags')])},
+              {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+              {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+              {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+              {'call': 'splice', 'reason': set([('fd', 'file')])},
+              {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+              {'call': 'preadv', 'reason': set([('fd', 'file')])},
+              {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+              {'call': 'shmat', 'reason': set([('file', 'f_flags')])},
+              {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+              {'call': 'socket', 'reason': set([('file', 'f_flags')])},
+              {'call': 'pipe2', 'reason': set([('file', 'f_flags')])},
+              {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+              {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+              {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+              {'call': 'perf_event_open',
+               'reason': set([('fd', 'file'), ('file', 'f_flags')])},
+              {'call': 'shmdt', 'reason': set([('file', 'f_flags')])},
+              {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+              {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+              {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+              {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+              {'call': 'acct', 'reason': set([('file', 'f_flags')])},
+              {'call': 'open', 'reason': set([('file', 'f_flags')])},
+              {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_getsetattr',
+               'reason': set([('fd', 'file'), ('file', 'f_flags')])},
+              {'call': 'dup', 'reason': set([('file', 'f_flags')])},
+              {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+              {'call': 'setns', 'reason': set([('file', 'f_flags')])},
+              {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+              {'call': 'listen', 'reason': set([('fd', 'file')])},
+              {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+              {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+              {'call': 'shmctl', 'reason': set([('file', 'f_flags')])},
+              {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+              {'call': 'swapon', 'reason': set([('file', 'f_flags')])},
+              {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+              {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+              {'call': 'llseek', 'reason': set([('fd', 'file')])},
+              {'call': 'mmap_pgoff', 'reason': set([('file', 'f_flags')])},
+              {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+              {'call': 'readv', 'reason': set([('fd', 'file')])},
+              {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+              {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+              {'call': 'write', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+              {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_open', 'reason': set([('file', 'f_flags')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('file', 'f_flags')])},
+              {'call': 'bind', 'reason': set([('fd', 'file')])},
+              {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+              {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'recvmmsg': [{'call': 'rt_sigtimedwait',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'mq_unlink',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'swapoff',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'fchmod',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'memfd_create',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'readlinkat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'io_getevents',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'fchown',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'utime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'semtimedop',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'recvfrom',
+               'reason': set([('msghdr', 'msg_flags'),
+                              ('socket', 'file'),
+                              ('socket', 'sk')])},
+              {'call': 'settimeofday',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sendto',
+               'reason': set([('msghdr', 'msg_flags'),
+                              ('socket', 'file'),
+                              ('socket', 'sk')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timerfd_gettime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'connect',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'getsockname',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'pselect6',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'uselib',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'accept4',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'fchmodat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'inotify_add_watch',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timer_settime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'ftruncate',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timer_gettime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'getpeername',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'setsockopt',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'ioctl',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'linkat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sendmsg',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'stime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'futimesat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'shutdown',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'poll',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'select',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'unlink',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'getsockopt',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'nanosleep',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'mq_getsetattr',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'faccessat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'listen',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'swapon',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'epoll_wait',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'fchownat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'fstat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timerfd_settime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'recvmsg',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'mq_notify',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sendfile',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sendmmsg',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'newfstat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'clock_nanosleep',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'unlinkat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'bind',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'futex',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'recvmmsg',
+               'reason': set([('socket', 'file'),
+                              ('socket', 'sk'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sendfile64',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'ppoll',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])}],
+ 'recvmsg': [{'call': 'recvfrom', 'reason': set([('socket', 'file')])},
+             {'call': 'sendto', 'reason': set([('socket', 'file')])},
+             {'call': 'connect', 'reason': set([('socket', 'file')])},
+             {'call': 'getsockname', 'reason': set([('socket', 'file')])},
+             {'call': 'accept4', 'reason': set([('socket', 'file')])},
+             {'call': 'getpeername', 'reason': set([('socket', 'file')])},
+             {'call': 'setsockopt', 'reason': set([('socket', 'file')])},
+             {'call': 'sendmsg', 'reason': set([('socket', 'file')])},
+             {'call': 'shutdown', 'reason': set([('socket', 'file')])},
+             {'call': 'getsockopt', 'reason': set([('socket', 'file')])},
+             {'call': 'listen', 'reason': set([('socket', 'file')])},
+             {'call': 'recvmsg', 'reason': set([('socket', 'file')])},
+             {'call': 'sendmmsg', 'reason': set([('socket', 'file')])},
+             {'call': 'bind', 'reason': set([('socket', 'file')])},
+             {'call': 'recvmmsg', 'reason': set([('socket', 'file')])}],
+ 'remap_file_pages': [{'call': 'remap_file_pages',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'shmdt',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'brk',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'get_mempolicy',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'munlockall',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'pkey_mprotect',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'madvise',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'mprotect',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'mremap',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'prctl',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'munlock',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'mincore',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'mlockall',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])}],
+ 'removexattr': [{'call': 'eventfd2',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'swapoff',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'pivot_root',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'memfd_create',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'remap_file_pages',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'dup3',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'unshare',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'epoll_create1',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'epoll_ctl',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'flock',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'openat',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'lookup_dcookie',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'uselib',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'accept4',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'socketpair',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'getcwd',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'shmat',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'socket',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'pipe2',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'perf_event_open',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'shmdt',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'quotactl',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'acct',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'open',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'dup',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'setns',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'shmctl',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'swapon',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'mmap_pgoff',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'mq_open',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'open_by_handle_at',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'renameat2': [{'call': 'sysfs',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'eventfd2',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'mq_unlink',
+                'reason': set([('dentry', 'd_inode'),
+                               ('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'swapoff',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt'),
+                               ('path', 'dentry'),
+                               ('path', 'mnt')])},
+               {'call': 'pivot_root',
+                'reason': set([('dentry', 'd_inode'),
+                               ('path', 'dentry'),
+                               ('path', 'mnt')])},
+               {'call': 'memfd_create',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'dup3',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'unshare',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'mkdirat', 'reason': set([('dentry', 'd_inode')])},
+               {'call': 'epoll_create1',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'epoll_ctl',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'flock',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'openat',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt'),
+                               ('path', 'dentry'),
+                               ('path', 'mnt')])},
+               {'call': 'lookup_dcookie',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'uselib',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt'),
+                               ('path', 'dentry'),
+                               ('path', 'mnt')])},
+               {'call': 'renameat2',
+                'reason': set([('dentry', 'd_inode'),
+                               ('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'accept4',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'socketpair',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'getcwd',
+                'reason': set([('dentry', 'd_inode'),
+                               ('path', 'dentry'),
+                               ('path', 'mnt')])},
+               {'call': 'ftruncate', 'reason': set([('dentry', 'd_inode')])},
+               {'call': 'shmat',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'mknodat', 'reason': set([('dentry', 'd_inode')])},
+               {'call': 'socket',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'symlinkat',
+                'reason': set([('dentry', 'd_inode'),
+                               ('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'pipe2',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'perf_event_open',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'linkat', 'reason': set([('dentry', 'd_inode')])},
+               {'call': 'shmdt',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'quotactl',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt'),
+                               ('path', 'dentry'),
+                               ('path', 'mnt')])},
+               {'call': 'acct',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt'),
+                               ('path', 'dentry'),
+                               ('path', 'mnt')])},
+               {'call': 'open',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt'),
+                               ('path', 'dentry'),
+                               ('path', 'mnt')])},
+               {'call': 'unlink',
+                'reason': set([('dentry', 'd_inode'),
+                               ('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'rmdir',
+                'reason': set([('dentry', 'd_inode'),
+                               ('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'dup',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'setns',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'shmctl',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'swapon',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt'),
+                               ('path', 'dentry'),
+                               ('path', 'mnt')])},
+               {'call': 'mmap_pgoff',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'mq_open',
+                'reason': set([('dentry', 'd_inode'),
+                               ('filename', 'name'),
+                               ('filename', 'refcnt'),
+                               ('path', 'dentry'),
+                               ('path', 'mnt')])},
+               {'call': 'unlinkat',
+                'reason': set([('dentry', 'd_inode'),
+                               ('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'rmdir': [{'call': 'eventfd2',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'mq_unlink', 'reason': set([('dentry', 'd_inode')])},
+           {'call': 'swapoff',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'pivot_root',
+            'reason': set([('dentry', 'd_inode'),
+                           ('path', 'dentry'),
+                           ('path', 'mnt')])},
+           {'call': 'memfd_create',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'remap_file_pages',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'dup3',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'unshare',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'mkdirat', 'reason': set([('dentry', 'd_inode')])},
+           {'call': 'epoll_create1',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'epoll_ctl',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'flock',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'openat',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'lookup_dcookie',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'uselib',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'renameat2', 'reason': set([('dentry', 'd_inode')])},
+           {'call': 'accept4',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'socketpair',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'getcwd',
+            'reason': set([('dentry', 'd_inode'),
+                           ('path', 'dentry'),
+                           ('path', 'mnt')])},
+           {'call': 'ftruncate', 'reason': set([('dentry', 'd_inode')])},
+           {'call': 'shmat',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'mknodat', 'reason': set([('dentry', 'd_inode')])},
+           {'call': 'socket',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'symlinkat', 'reason': set([('dentry', 'd_inode')])},
+           {'call': 'pipe2',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'perf_event_open',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'linkat', 'reason': set([('dentry', 'd_inode')])},
+           {'call': 'shmdt',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'quotactl',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'acct',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'open',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'unlink', 'reason': set([('dentry', 'd_inode')])},
+           {'call': 'rmdir', 'reason': set([('dentry', 'd_inode')])},
+           {'call': 'dup',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'setns',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'shmctl',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'swapon',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'mmap_pgoff',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'mq_open',
+            'reason': set([('dentry', 'd_inode'),
+                           ('path', 'dentry'),
+                           ('path', 'mnt')])},
+           {'call': 'unlinkat', 'reason': set([('dentry', 'd_inode')])},
+           {'call': 'open_by_handle_at',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'rt_sigqueueinfo': [{'call': 'rt_sigtimedwait',
+                      'reason': set([('siginfo', 'si_code')])},
+                     {'call': 'kill',
+                      'reason': set([('siginfo', 'si_code')])},
+                     {'call': 'timer_create',
+                      'reason': set([('siginfo', 'si_code')])},
+                     {'call': 'rt_sigqueueinfo',
+                      'reason': set([('siginfo', 'si_code')])},
+                     {'call': 'tgkill',
+                      'reason': set([('siginfo', 'si_code')])},
+                     {'call': 'rt_tgsigqueueinfo',
+                      'reason': set([('siginfo', 'si_code')])},
+                     {'call': 'rt_sigreturn',
+                      'reason': set([('siginfo', 'si_code')])},
+                     {'call': 'tkill',
+                      'reason': set([('siginfo', 'si_code')])}],
+ 'rt_sigreturn': [{'call': 'keyctl',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'rt_sigtimedwait',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'msgrcv',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'kill',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_getaffinity',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_setparam',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'ioprio_set',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'getppid',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'ioperm',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'mq_timedreceive',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'capget',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_setaffinity',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'signal',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'semtimedop',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'umount',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_rr_get_interval',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'rt_sigprocmask',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'setsid',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sigaltstack',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_setattr',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'migrate_pages',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'getitimer',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'setpgid',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'getsid',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'prlimit64',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'perf_event_open',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'rt_sigaction',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'getpgid',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'getpriority',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sigaction',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'setns',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'fork',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'get_robust_list',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'mq_timedsend',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_getscheduler',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'ptrace',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_getattr',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'getrusage',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_setscheduler',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'setitimer',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'ioprio_get',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'vfork',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'prctl',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'move_pages',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'rt_sigreturn',
+                   'reason': set([('thread_struct', 'uaccess_err')])},
+                  {'call': 'setpriority',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'clone',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_getparam',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])}],
+ 'rt_sigtimedwait': [{'call': 'keyctl',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'rt_sigtimedwait',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'msgrcv',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'kill',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_getaffinity',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_setparam',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'ioprio_set',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'getppid',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'ioperm',
+                      'reason': set([('mm_segment_t', 'seg')])},
+                     {'call': 'mq_timedreceive',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'capget',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_setaffinity',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'signal',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'semtimedop',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'umount',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'timer_create',
+                      'reason': set([('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo')])},
+                     {'call': 'sched_rr_get_interval',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'rt_sigqueueinfo',
+                      'reason': set([('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo')])},
+                     {'call': 'tgkill',
+                      'reason': set([('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo')])},
+                     {'call': 'rt_sigprocmask',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'setsid',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sigaltstack',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_setattr',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'migrate_pages',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'getitimer',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'setpgid',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'getsid',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'prlimit64',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'perf_event_open',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'rt_sigaction',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'getpgid',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'getpriority',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sigaction',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'rt_tgsigqueueinfo',
+                      'reason': set([('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo')])},
+                     {'call': 'setns',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'fork',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'get_robust_list',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_getscheduler',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'ptrace',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_getattr',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'getrusage',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_setscheduler',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'setitimer',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'ioprio_get',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'vfork',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'prctl',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'move_pages',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'rt_sigreturn',
+                      'reason': set([('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo')])},
+                     {'call': 'tkill',
+                      'reason': set([('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo')])},
+                     {'call': 'setpriority',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'clone',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_getparam',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])}],
+ 'rt_tgsigqueueinfo': [{'call': 'rt_sigtimedwait',
+                        'reason': set([('siginfo', 'si_code')])},
+                       {'call': 'kill',
+                        'reason': set([('siginfo', 'si_code')])},
+                       {'call': 'timer_create',
+                        'reason': set([('siginfo', 'si_code')])},
+                       {'call': 'rt_sigqueueinfo',
+                        'reason': set([('siginfo', 'si_code')])},
+                       {'call': 'tgkill',
+                        'reason': set([('siginfo', 'si_code')])},
+                       {'call': 'rt_tgsigqueueinfo',
+                        'reason': set([('siginfo', 'si_code')])},
+                       {'call': 'rt_sigreturn',
+                        'reason': set([('siginfo', 'si_code')])},
+                       {'call': 'tkill',
+                        'reason': set([('siginfo', 'si_code')])}],
+ 'sched_getattr': [{'call': 'keyctl',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'rt_sigtimedwait',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'msgrcv',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'kill',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_getaffinity',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_setparam',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'ioprio_set',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'getppid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'ioperm',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'capget',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_setaffinity',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'signal',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'semtimedop',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'umount',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_rr_get_interval',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'rt_sigprocmask',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'setsid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sigaltstack',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_setattr',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('sched_attr', 'size'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'migrate_pages',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'getitimer',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'setpgid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'getsid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'rt_sigaction',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'getpgid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'getpriority',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sigaction',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'setns',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'fork',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'get_robust_list',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_getscheduler',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'ptrace',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_getattr',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('sched_attr', 'size'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'getrusage',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_setscheduler',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'setitimer',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'ioprio_get',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'vfork',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'prctl',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'move_pages',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'setpriority',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'clone',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_getparam',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])}],
+ 'sched_getparam': [{'call': 'keyctl',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'rt_sigtimedwait',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'msgrcv',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'kill',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_getaffinity',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_setparam',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'ioprio_set',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'getppid',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'mq_timedreceive',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'capget',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_setaffinity',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'signal',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'semtimedop',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'umount',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_rr_get_interval',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'rt_sigprocmask',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'setsid',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sigaltstack',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_setattr',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'migrate_pages',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'getitimer',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'setpgid',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'getsid',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'prlimit64',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'perf_event_open',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'rt_sigaction',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'getpgid',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'getpriority',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sigaction',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'setns',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'fork',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'get_robust_list',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'mq_timedsend',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_getscheduler',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'ptrace',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_getattr',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'getrusage',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_setscheduler',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'setitimer',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'ioprio_get',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'vfork',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'prctl',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'move_pages',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'setpriority',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'clone',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_getparam',
+                     'reason': set([('task_struct', 'policy')])}],
+ 'sched_getscheduler': [{'call': 'keyctl',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'rt_sigtimedwait',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'msgrcv',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'kill',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_getaffinity',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_setparam',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'ioprio_set',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'getppid',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'mq_timedreceive',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'capget',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_setaffinity',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'signal',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'semtimedop',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'umount',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_rr_get_interval',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'rt_sigprocmask',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'setsid',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sigaltstack',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_setattr',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'migrate_pages',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'getitimer',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'setpgid',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'getsid',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'prlimit64',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'perf_event_open',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'rt_sigaction',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'getpgid',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'getpriority',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sigaction',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'setns',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'fork',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'get_robust_list',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'mq_timedsend',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_getscheduler',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'ptrace',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_getattr',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'getrusage',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_setscheduler',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'setitimer',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'ioprio_get',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'vfork',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'prctl',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'move_pages',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'setpriority',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'clone',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_getparam',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])}],
+ 'sched_rr_get_interval': [{'call': 'sched_rr_get_interval',
+                            'reason': set([('rq_flags', 'flags')])}],
+ 'sched_setaffinity': [{'call': 'keyctl',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'rt_sigtimedwait',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'setfsuid',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'msgrcv',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'kill',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'getresuid16',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'getresgid',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'sched_getaffinity',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'sched_setparam',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'setgid',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'ioprio_set',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'capset',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'getppid',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'mq_timedreceive',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'getresgid16',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'capget',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'sched_setaffinity',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'setfsgid',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'unshare',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'signal',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'setreuid',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags')])},
+                       {'call': 'semtimedop',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'umount',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'sched_rr_get_interval',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'epoll_create1',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'getresuid',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'rt_sigprocmask',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'setsid',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'sigaltstack',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'sched_setattr',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'migrate_pages',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'getitimer',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'setpgid',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'setresgid',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'setregid',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'getsid',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'prlimit64',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'perf_event_open',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'getgroups16',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'rt_sigaction',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'getpgid',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'getpriority',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'sigaction',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'faccessat',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'setns',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'fork',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'get_robust_list',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'mq_timedsend',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'sched_getscheduler',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'ptrace',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'sched_getattr',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'getrusage',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'sched_setscheduler',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'setresuid',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags')])},
+                       {'call': 'setitimer',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'ioprio_get',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'vfork',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'setuid',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags')])},
+                       {'call': 'prctl',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'move_pages',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'getgroups',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'setpriority',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'clone',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'sched_getparam',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])}],
+ 'sched_setattr': [{'call': 'keyctl',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'rt_sigtimedwait',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'msgrcv',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_getaffinity',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_setparam',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'ioprio_set',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getppid',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'ioperm',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'capget',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_setaffinity',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'signal',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'semtimedop',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'umount',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_rr_get_interval',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'rt_sigprocmask',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'setsid',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sigaltstack',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_setattr',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('sched_attr', 'sched_policy')])},
+                   {'call': 'migrate_pages',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getitimer',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'setpgid',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getsid',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'rt_sigaction',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getpgid',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getpriority',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sigaction',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'setns',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'get_robust_list',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_getscheduler',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'ptrace',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_getattr',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('sched_attr', 'sched_policy')])},
+                   {'call': 'getrusage',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_setscheduler',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'setitimer',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'ioprio_get',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'vfork',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'prctl',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'move_pages',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'setpriority',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'clone',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_getparam',
+                    'reason': set([('mm_segment_t', 'seg')])}],
+ 'select': [{'call': 'keyctl',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'personality'),
+                            ('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'msgrcv',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'mq_unlink',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'personality')])},
+            {'call': 'swapoff',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fchmod',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'memfd_create',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'ioprio_set',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'personality',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'dup3', 'reason': set([('files_struct', 'fdt')])},
+            {'call': 'readlinkat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'io_getevents',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'getppid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fchown',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'personality'),
+                            ('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'capget',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'utime',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'unshare', 'reason': set([('files_struct', 'fdt')])},
+            {'call': 'signal',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'semtimedop',
+             'reason': set([('task_struct', 'personality'),
+                            ('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'umount',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'settimeofday',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'personality'),
+                            ('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'timerfd_gettime',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'pselect6',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'uselib',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'setsid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sigaltstack',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'migrate_pages',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'getitimer',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fchmodat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'setpgid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'inotify_add_watch',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'timer_settime',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'ftruncate',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'timer_gettime',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'getsid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'ioctl',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'prlimit64',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'linkat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'stime',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'futimesat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'getpgid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'poll',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'select',
+             'reason': set([('fd_set_bits', 'ex'),
+                            ('fd_set_bits', 'in'),
+                            ('fd_set_bits', 'out'),
+                            ('fd_set_bits', 'res_ex'),
+                            ('fd_set_bits', 'res_in'),
+                            ('fd_set_bits', 'res_out'),
+                            ('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'unlink',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'getpriority',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sigaction',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'nanosleep',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'mq_getsetattr',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'faccessat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'setns',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'personality')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'personality'),
+                            ('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'ptrace',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'swapon',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'epoll_wait',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fchownat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'getrusage',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fstat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'timerfd_settime',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'setitimer',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'ioprio_get',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'vfork',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'prctl',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'move_pages',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'dup2', 'reason': set([('files_struct', 'fdt')])},
+            {'call': 'setpriority',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'mq_notify',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sendfile',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'newfstat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'clone',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'clock_nanosleep',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'unlinkat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'futex',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'recvmmsg',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sendfile64',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'ppoll',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])}],
+ 'semctl': [{'call': 'semtimedop',
+             'reason': set([('sem_array', 'sem_nsems')])},
+            {'call': 'semctl', 'reason': set([('sem_array', 'sem_nsems')])}],
+ 'semtimedop': [{'call': 'syncfs', 'reason': set([('list_head', 'prev')])},
+                {'call': 'keyctl', 'reason': set([('list_head', 'prev')])},
+                {'call': 'rt_sigtimedwait',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'vmsplice', 'reason': set([('list_head', 'prev')])},
+                {'call': 'msgrcv',
+                 'reason': set([('kern_ipc_perm', 'deleted'),
+                                ('list_head', 'prev')])},
+                {'call': 'eventfd2', 'reason': set([('list_head', 'prev')])},
+                {'call': 'mq_unlink',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'kill', 'reason': set([('list_head', 'prev')])},
+                {'call': 'swapoff',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'readahead', 'reason': set([('list_head', 'prev')])},
+                {'call': 'timer_delete',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'sched_getaffinity',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'sched_setparam',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'fchmod',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'setgid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'pivot_root',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'memfd_create',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'ioprio_set',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'delete_module',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'dup3', 'reason': set([('list_head', 'prev')])},
+                {'call': 'readlinkat',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'io_getevents',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'getppid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'fchown',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'mq_timedreceive',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'capget', 'reason': set([('list_head', 'prev')])},
+                {'call': 'utime',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'sched_setaffinity',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'ustat', 'reason': set([('list_head', 'prev')])},
+                {'call': 'bpf', 'reason': set([('list_head', 'prev')])},
+                {'call': 'unshare', 'reason': set([('list_head', 'prev')])},
+                {'call': 'signal', 'reason': set([('list_head', 'prev')])},
+                {'call': 'setreuid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'semtimedop',
+                 'reason': set([('kern_ipc_perm', 'deleted'),
+                                ('list_head', 'prev'),
+                                ('sem_array', 'complex_count'),
+                                ('sem_array', 'sem_nsems'),
+                                ('sem_array', 'use_global_lock'),
+                                ('sem_queue', 'dupsop'),
+                                ('sem_queue', 'nsops'),
+                                ('sem_undo', 'semid'),
+                                ('sembuf', 'sem_flg'),
+                                ('sembuf', 'sem_num'),
+                                ('sembuf', 'sem_op'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'umount', 'reason': set([('list_head', 'prev')])},
+                {'call': 'settimeofday',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'timer_create',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'mkdirat', 'reason': set([('list_head', 'prev')])},
+                {'call': 'sched_rr_get_interval',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'epoll_create1',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'timerfd_gettime',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'tee', 'reason': set([('list_head', 'prev')])},
+                {'call': 'semctl',
+                 'reason': set([('kern_ipc_perm', 'deleted'),
+                                ('list_head', 'prev'),
+                                ('sem_array', 'complex_count'),
+                                ('sem_array', 'sem_nsems'),
+                                ('sem_array', 'use_global_lock'),
+                                ('sem_undo', 'semid')])},
+                {'call': 'sync_file_range',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'epoll_ctl', 'reason': set([('list_head', 'prev')])},
+                {'call': 'flock', 'reason': set([('list_head', 'prev')])},
+                {'call': 'openat', 'reason': set([('list_head', 'prev')])},
+                {'call': 'lookup_dcookie',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'pselect6',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'uselib',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'renameat2', 'reason': set([('list_head', 'prev')])},
+                {'call': 'rt_sigprocmask',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'accept4', 'reason': set([('list_head', 'prev')])},
+                {'call': 'msgctl',
+                 'reason': set([('kern_ipc_perm', 'deleted'),
+                                ('list_head', 'prev')])},
+                {'call': 'reboot', 'reason': set([('list_head', 'prev')])},
+                {'call': 'setsid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'set_trip_temp',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'sigaltstack',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'sched_setattr',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'inotify_rm_watch',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'socketpair',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'migrate_pages',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'getitimer', 'reason': set([('list_head', 'prev')])},
+                {'call': 'fchmodat',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'setpgid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'init_module',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'setresgid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'getcwd', 'reason': set([('list_head', 'prev')])},
+                {'call': 'inotify_add_watch',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'get_trip_temp',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'timer_settime',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'setregid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'splice', 'reason': set([('list_head', 'prev')])},
+                {'call': 'ftruncate',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'timer_gettime',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'getsid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'shmat',
+                 'reason': set([('kern_ipc_perm', 'deleted'),
+                                ('list_head', 'prev')])},
+                {'call': 'mknodat', 'reason': set([('list_head', 'prev')])},
+                {'call': 'socket', 'reason': set([('list_head', 'prev')])},
+                {'call': 'symlinkat', 'reason': set([('list_head', 'prev')])},
+                {'call': 'pipe2', 'reason': set([('list_head', 'prev')])},
+                {'call': 'ioctl',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'prlimit64', 'reason': set([('list_head', 'prev')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'linkat',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'stime',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'getgroups16',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'shmdt', 'reason': set([('list_head', 'prev')])},
+                {'call': 'quotactl', 'reason': set([('list_head', 'prev')])},
+                {'call': 'rt_sigaction',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'futimesat',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'request_key',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'getpgid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'brk', 'reason': set([('list_head', 'prev')])},
+                {'call': 'acct', 'reason': set([('list_head', 'prev')])},
+                {'call': 'poll',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'open', 'reason': set([('list_head', 'prev')])},
+                {'call': 'select',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'unlink',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'exit_group',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'getpriority',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'sigaction', 'reason': set([('list_head', 'prev')])},
+                {'call': 'nanosleep',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'mq_getsetattr',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'faccessat',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'rmdir', 'reason': set([('list_head', 'prev')])},
+                {'call': 'dup', 'reason': set([('list_head', 'prev')])},
+                {'call': 'setgroups16',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'setns', 'reason': set([('list_head', 'prev')])},
+                {'call': 'fork', 'reason': set([('list_head', 'prev')])},
+                {'call': 'get_mempolicy',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'io_submit', 'reason': set([('list_head', 'prev')])},
+                {'call': 'get_robust_list',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'mq_timedsend',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'sched_yield',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'sched_getscheduler',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'ptrace', 'reason': set([('list_head', 'prev')])},
+                {'call': 'shmctl',
+                 'reason': set([('kern_ipc_perm', 'deleted'),
+                                ('list_head', 'prev')])},
+                {'call': 'munlockall',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'swapon',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'pkey_mprotect',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'madvise', 'reason': set([('list_head', 'prev')])},
+                {'call': 'epoll_wait',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'sched_getattr',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'fchownat',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'getrusage', 'reason': set([('list_head', 'prev')])},
+                {'call': 'fstat',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'timerfd_settime',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'sched_setscheduler',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'setresuid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'setitimer', 'reason': set([('list_head', 'prev')])},
+                {'call': 'ioprio_get',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'vfork', 'reason': set([('list_head', 'prev')])},
+                {'call': 'setuid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'io_setup', 'reason': set([('list_head', 'prev')])},
+                {'call': 'mprotect', 'reason': set([('list_head', 'prev')])},
+                {'call': 'mmap_pgoff',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'mremap', 'reason': set([('list_head', 'prev')])},
+                {'call': 'io_destroy',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'mbind', 'reason': set([('list_head', 'prev')])},
+                {'call': 'prctl', 'reason': set([('list_head', 'prev')])},
+                {'call': 'move_pages',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'timerfd_create',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'modify_ldt',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'getgroups', 'reason': set([('list_head', 'prev')])},
+                {'call': 'dup2', 'reason': set([('list_head', 'prev')])},
+                {'call': 'get_curr_temp',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'msgsnd',
+                 'reason': set([('kern_ipc_perm', 'deleted'),
+                                ('list_head', 'prev')])},
+                {'call': 'munlock', 'reason': set([('list_head', 'prev')])},
+                {'call': 'setpriority',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'inotify_init1',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'mincore', 'reason': set([('list_head', 'prev')])},
+                {'call': 'mq_notify',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'sendfile',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'timer_getoverrun',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'newfstat',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'kexec_load',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'clone', 'reason': set([('list_head', 'prev')])},
+                {'call': 'mq_open', 'reason': set([('list_head', 'prev')])},
+                {'call': 'setgroups', 'reason': set([('list_head', 'prev')])},
+                {'call': 'clock_nanosleep',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'unlinkat',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'sched_getparam',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'io_cancel', 'reason': set([('list_head', 'prev')])},
+                {'call': 'open_by_handle_at',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'futex',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'recvmmsg',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'finit_module',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'sendfile64',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'mlockall', 'reason': set([('list_head', 'prev')])},
+                {'call': 'ppoll',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])}],
+ 'sendfile': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+              {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+              {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+              {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+              {'call': 'readahead', 'reason': set([('fd', 'file')])},
+              {'call': 'getdents', 'reason': set([('fd', 'file')])},
+              {'call': 'writev', 'reason': set([('fd', 'file')])},
+              {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+              {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+              {'call': 'pread64', 'reason': set([('fd', 'file')])},
+              {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+              {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+              {'call': 'read', 'reason': set([('fd', 'file')])},
+              {'call': 'fchown', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+              {'call': 'utime', 'reason': set([('fd', 'file')])},
+              {'call': 'fsync', 'reason': set([('fd', 'file')])},
+              {'call': 'bpf', 'reason': set([('fd', 'file')])},
+              {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+              {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+              {'call': 'sendto', 'reason': set([('fd', 'file')])},
+              {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+              {'call': 'tee', 'reason': set([('fd', 'file')])},
+              {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+              {'call': 'lseek', 'reason': set([('fd', 'file')])},
+              {'call': 'connect', 'reason': set([('fd', 'file')])},
+              {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+              {'call': 'epoll_ctl',
+               'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+              {'call': 'flock',
+               'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+              {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+              {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+              {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+              {'call': 'accept4',
+               'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+              {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+              {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+              {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+              {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+              {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+              {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+              {'call': 'splice', 'reason': set([('fd', 'file')])},
+              {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+              {'call': 'preadv', 'reason': set([('fd', 'file')])},
+              {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+              {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+              {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+              {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+              {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+              {'call': 'perf_event_open',
+               'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+              {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+              {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+              {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+              {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+              {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+              {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+              {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+              {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+              {'call': 'listen', 'reason': set([('fd', 'file')])},
+              {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+              {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+              {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+              {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+              {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+              {'call': 'llseek', 'reason': set([('fd', 'file')])},
+              {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+              {'call': 'readv', 'reason': set([('fd', 'file')])},
+              {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+              {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+              {'call': 'write', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+              {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'bind', 'reason': set([('fd', 'file')])},
+              {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+              {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'sendfile64': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+                {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+                {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+                {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+                {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+                {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+                {'call': 'readahead', 'reason': set([('fd', 'file')])},
+                {'call': 'getdents', 'reason': set([('fd', 'file')])},
+                {'call': 'writev', 'reason': set([('fd', 'file')])},
+                {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+                {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+                {'call': 'pread64', 'reason': set([('fd', 'file')])},
+                {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+                {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('file', 'f_mode')])},
+                {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+                {'call': 'read', 'reason': set([('fd', 'file')])},
+                {'call': 'fchown', 'reason': set([('fd', 'file')])},
+                {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+                {'call': 'utime', 'reason': set([('fd', 'file')])},
+                {'call': 'fsync', 'reason': set([('fd', 'file')])},
+                {'call': 'bpf', 'reason': set([('fd', 'file')])},
+                {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+                {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+                {'call': 'sendto', 'reason': set([('fd', 'file')])},
+                {'call': 'epoll_create1',
+                 'reason': set([('file', 'f_mode')])},
+                {'call': 'tee', 'reason': set([('fd', 'file')])},
+                {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+                {'call': 'lseek', 'reason': set([('fd', 'file')])},
+                {'call': 'connect', 'reason': set([('fd', 'file')])},
+                {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+                {'call': 'epoll_ctl',
+                 'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+                {'call': 'flock',
+                 'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+                {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+                {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+                {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+                {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+                {'call': 'accept4',
+                 'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+                {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+                {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+                {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+                {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+                {'call': 'inotify_add_watch',
+                 'reason': set([('fd', 'file')])},
+                {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+                {'call': 'splice', 'reason': set([('fd', 'file')])},
+                {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+                {'call': 'preadv', 'reason': set([('fd', 'file')])},
+                {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+                {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+                {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+                {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+                {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+                {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+                {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+                {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('fd', 'file'), ('file', 'f_mode')])},
+                {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+                {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+                {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+                {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+                {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+                {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+                {'call': 'open', 'reason': set([('file', 'f_mode')])},
+                {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+                {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+                {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+                {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+                {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+                {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+                {'call': 'listen', 'reason': set([('fd', 'file')])},
+                {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+                {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+                {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+                {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+                {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+                {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+                {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+                {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+                {'call': 'llseek', 'reason': set([('fd', 'file')])},
+                {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+                {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+                {'call': 'readv', 'reason': set([('fd', 'file')])},
+                {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+                {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+                {'call': 'write', 'reason': set([('fd', 'file')])},
+                {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+                {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+                {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+                {'call': 'open_by_handle_at',
+                 'reason': set([('file', 'f_mode')])},
+                {'call': 'bind', 'reason': set([('fd', 'file')])},
+                {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+                {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'sendmmsg': [{'call': 'recvfrom', 'reason': set([('socket', 'file')])},
+              {'call': 'sendto', 'reason': set([('socket', 'file')])},
+              {'call': 'connect', 'reason': set([('socket', 'file')])},
+              {'call': 'getsockname', 'reason': set([('socket', 'file')])},
+              {'call': 'accept4', 'reason': set([('socket', 'file')])},
+              {'call': 'getpeername', 'reason': set([('socket', 'file')])},
+              {'call': 'setsockopt', 'reason': set([('socket', 'file')])},
+              {'call': 'sendmsg', 'reason': set([('socket', 'file')])},
+              {'call': 'shutdown', 'reason': set([('socket', 'file')])},
+              {'call': 'getsockopt', 'reason': set([('socket', 'file')])},
+              {'call': 'listen', 'reason': set([('socket', 'file')])},
+              {'call': 'recvmsg', 'reason': set([('socket', 'file')])},
+              {'call': 'sendmmsg', 'reason': set([('socket', 'file')])},
+              {'call': 'bind', 'reason': set([('socket', 'file')])},
+              {'call': 'recvmmsg', 'reason': set([('socket', 'file')])}],
+ 'sendmsg': [{'call': 'recvfrom', 'reason': set([('socket', 'file')])},
+             {'call': 'sendto', 'reason': set([('socket', 'file')])},
+             {'call': 'connect', 'reason': set([('socket', 'file')])},
+             {'call': 'getsockname', 'reason': set([('socket', 'file')])},
+             {'call': 'accept4', 'reason': set([('socket', 'file')])},
+             {'call': 'getpeername', 'reason': set([('socket', 'file')])},
+             {'call': 'setsockopt', 'reason': set([('socket', 'file')])},
+             {'call': 'sendmsg', 'reason': set([('socket', 'file')])},
+             {'call': 'shutdown', 'reason': set([('socket', 'file')])},
+             {'call': 'getsockopt', 'reason': set([('socket', 'file')])},
+             {'call': 'listen', 'reason': set([('socket', 'file')])},
+             {'call': 'recvmsg', 'reason': set([('socket', 'file')])},
+             {'call': 'sendmmsg', 'reason': set([('socket', 'file')])},
+             {'call': 'bind', 'reason': set([('socket', 'file')])},
+             {'call': 'recvmmsg', 'reason': set([('socket', 'file')])}],
+ 'sendto': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+            {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+            {'call': 'eventfd2', 'reason': set([('file', 'f_flags')])},
+            {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+            {'call': 'swapoff', 'reason': set([('file', 'f_flags')])},
+            {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+            {'call': 'readahead', 'reason': set([('fd', 'file')])},
+            {'call': 'getdents', 'reason': set([('fd', 'file')])},
+            {'call': 'writev', 'reason': set([('fd', 'file')])},
+            {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+            {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+            {'call': 'pread64', 'reason': set([('fd', 'file')])},
+            {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+            {'call': 'memfd_create', 'reason': set([('file', 'f_flags')])},
+            {'call': 'remap_file_pages',
+             'reason': set([('file', 'f_flags')])},
+            {'call': 'dup3', 'reason': set([('file', 'f_flags')])},
+            {'call': 'read', 'reason': set([('fd', 'file')])},
+            {'call': 'fchown', 'reason': set([('fd', 'file')])},
+            {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+            {'call': 'utime', 'reason': set([('fd', 'file')])},
+            {'call': 'fsync', 'reason': set([('fd', 'file')])},
+            {'call': 'bpf', 'reason': set([('fd', 'file')])},
+            {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+            {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+            {'call': 'sendto', 'reason': set([('fd', 'file')])},
+            {'call': 'epoll_create1', 'reason': set([('file', 'f_flags')])},
+            {'call': 'tee', 'reason': set([('fd', 'file')])},
+            {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+            {'call': 'lseek', 'reason': set([('fd', 'file')])},
+            {'call': 'connect', 'reason': set([('fd', 'file')])},
+            {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+            {'call': 'epoll_ctl',
+             'reason': set([('fd', 'file'), ('file', 'f_flags')])},
+            {'call': 'flock',
+             'reason': set([('fd', 'file'), ('file', 'f_flags')])},
+            {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+            {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+            {'call': 'openat', 'reason': set([('file', 'f_flags')])},
+            {'call': 'uselib', 'reason': set([('file', 'f_flags')])},
+            {'call': 'accept4',
+             'reason': set([('fd', 'file'), ('file', 'f_flags')])},
+            {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+            {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+            {'call': 'socketpair', 'reason': set([('file', 'f_flags')])},
+            {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+            {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+            {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+            {'call': 'splice', 'reason': set([('fd', 'file')])},
+            {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+            {'call': 'preadv', 'reason': set([('fd', 'file')])},
+            {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+            {'call': 'shmat', 'reason': set([('file', 'f_flags')])},
+            {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+            {'call': 'socket', 'reason': set([('file', 'f_flags')])},
+            {'call': 'pipe2', 'reason': set([('file', 'f_flags')])},
+            {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+            {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+            {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+            {'call': 'perf_event_open',
+             'reason': set([('fd', 'file'), ('file', 'f_flags')])},
+            {'call': 'shmdt', 'reason': set([('file', 'f_flags')])},
+            {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+            {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+            {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+            {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+            {'call': 'acct', 'reason': set([('file', 'f_flags')])},
+            {'call': 'open', 'reason': set([('file', 'f_flags')])},
+            {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+            {'call': 'mq_getsetattr',
+             'reason': set([('fd', 'file'), ('file', 'f_flags')])},
+            {'call': 'dup', 'reason': set([('file', 'f_flags')])},
+            {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+            {'call': 'setns', 'reason': set([('file', 'f_flags')])},
+            {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+            {'call': 'listen', 'reason': set([('fd', 'file')])},
+            {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+            {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+            {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+            {'call': 'shmctl', 'reason': set([('file', 'f_flags')])},
+            {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+            {'call': 'swapon', 'reason': set([('file', 'f_flags')])},
+            {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+            {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+            {'call': 'llseek', 'reason': set([('fd', 'file')])},
+            {'call': 'mmap_pgoff', 'reason': set([('file', 'f_flags')])},
+            {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+            {'call': 'readv', 'reason': set([('fd', 'file')])},
+            {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+            {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+            {'call': 'write', 'reason': set([('fd', 'file')])},
+            {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+            {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+            {'call': 'mq_open', 'reason': set([('file', 'f_flags')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('file', 'f_flags')])},
+            {'call': 'bind', 'reason': set([('fd', 'file')])},
+            {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+            {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'set_mempolicy': [{'call': 'set_mempolicy',
+                    'reason': set([('mempolicy', 'mode')])},
+                   {'call': 'get_mempolicy',
+                    'reason': set([('mempolicy', 'mode')])},
+                   {'call': 'mbind', 'reason': set([('mempolicy', 'mode')])}],
+ 'set_thread_area': [{'call': 'keyctl',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'rt_sigtimedwait',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'msgrcv',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'kill',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_getaffinity',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'arch_prctl',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_setparam',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'ioprio_set',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'getppid',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'ioperm',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'mq_timedreceive',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'capget',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_setaffinity',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'signal',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'semtimedop',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'umount',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_rr_get_interval',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'rt_sigprocmask',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'setsid',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sigaltstack',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_setattr',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'migrate_pages',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'getitimer',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'setpgid',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'getsid',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'prlimit64',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'perf_event_open',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'rt_sigaction',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'getpgid',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'getpriority',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sigaction',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'setns',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'fork',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'get_robust_list',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_getscheduler',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'ptrace',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_getattr',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'getrusage',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_setscheduler',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'setitimer',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'ioprio_get',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'vfork',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'prctl',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'move_pages',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'setpriority',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'clone',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_getparam',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])}],
+ 'set_trip_temp': [{'call': 'set_trip_temp',
+                    'reason': set([('pkg_device', 'cpu'),
+                                   ('pkg_device', 'tj_max')])},
+                   {'call': 'get_trip_temp',
+                    'reason': set([('pkg_device', 'cpu'),
+                                   ('pkg_device', 'tj_max')])},
+                   {'call': 'get_curr_temp',
+                    'reason': set([('pkg_device', 'cpu'),
+                                   ('pkg_device', 'tj_max')])}],
+ 'setdomainname': [{'call': 'setns',
+                    'reason': set([('uts_namespace', 'user_ns')])}],
+ 'setfsgid': [{'call': 'keyctl',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setfsuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getresuid16', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'getresgid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setgid',
+               'reason': set([('cred', 'egid'),
+                              ('cred', 'fsgid'),
+                              ('cred', 'gid'),
+                              ('cred', 'sgid'),
+                              ('cred', 'user_ns')])},
+              {'call': 'ioprio_set',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'capset', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getresgid16', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'setfsgid',
+               'reason': set([('cred', 'fsgid'), ('cred', 'user_ns')])},
+              {'call': 'unshare', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setreuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'epoll_create1', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'getresuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'migrate_pages',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setresgid',
+               'reason': set([('cred', 'egid'),
+                              ('cred', 'fsgid'),
+                              ('cred', 'gid'),
+                              ('cred', 'sgid'),
+                              ('cred', 'user_ns')])},
+              {'call': 'setregid',
+               'reason': set([('cred', 'egid'),
+                              ('cred', 'fsgid'),
+                              ('cred', 'gid'),
+                              ('cred', 'sgid'),
+                              ('cred', 'user_ns')])},
+              {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'prlimit64',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getgroups16', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpriority',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'faccessat',
+               'reason': set([('cred', 'fsgid'), ('cred', 'user_ns')])},
+              {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setresuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'ioprio_get',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'move_pages',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getgroups', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'setpriority',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'cred')])}],
+ 'setfsuid': [{'call': 'keyctl',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setfsuid',
+               'reason': set([('cred', 'fsuid'), ('cred', 'user_ns')])},
+              {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getresuid16', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'getresgid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setgid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'ioprio_set',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'capset', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getresgid16', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'setfsgid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'unshare', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setreuid',
+               'reason': set([('cred', 'euid'),
+                              ('cred', 'fsuid'),
+                              ('cred', 'suid'),
+                              ('cred', 'uid'),
+                              ('cred', 'user_ns')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'epoll_create1', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'getresuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'migrate_pages',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setresgid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'setregid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'prlimit64',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getgroups16', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpriority',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'faccessat',
+               'reason': set([('cred', 'fsuid'), ('cred', 'user_ns')])},
+              {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setresuid',
+               'reason': set([('cred', 'euid'),
+                              ('cred', 'fsuid'),
+                              ('cred', 'suid'),
+                              ('cred', 'uid'),
+                              ('cred', 'user_ns')])},
+              {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'ioprio_get',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setuid',
+               'reason': set([('cred', 'euid'),
+                              ('cred', 'fsuid'),
+                              ('cred', 'suid'),
+                              ('cred', 'uid'),
+                              ('cred', 'user_ns')])},
+              {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'move_pages',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getgroups', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'setpriority',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'cred')])}],
+ 'setgid': [{'call': 'keyctl',
+             'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setfsuid', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getresuid16', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'getresgid', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setgid',
+             'reason': set([('cred', 'gid'),
+                            ('cred', 'sgid'),
+                            ('cred', 'user_ns')])},
+            {'call': 'ioprio_set',
+             'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+            {'call': 'capset', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getresgid16', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+            {'call': 'setfsgid', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'unshare', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setreuid', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'semtimedop', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'epoll_create1', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'getresuid', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sigaltstack', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'migrate_pages',
+             'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+            {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setresgid',
+             'reason': set([('cred', 'gid'),
+                            ('cred', 'sgid'),
+                            ('cred', 'user_ns')])},
+            {'call': 'setregid',
+             'reason': set([('cred', 'gid'),
+                            ('cred', 'sgid'),
+                            ('cred', 'user_ns')])},
+            {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prlimit64',
+             'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getgroups16', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpriority',
+             'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+            {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'faccessat', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setresuid', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_get',
+             'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+            {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setuid', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'move_pages', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getgroups', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'setpriority',
+             'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+            {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'cred')])}],
+ 'setgroups16': [{'call': 'setgroups16',
+                  'reason': set([('group_info', 'ngroups')])},
+                 {'call': 'setgroups',
+                  'reason': set([('group_info', 'ngroups')])}],
+ 'sethostname': [{'call': 'setns',
+                  'reason': set([('uts_namespace', 'user_ns')])}],
+ 'setitimer': [{'call': 'waitid',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'settimeofday',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'timer_create',
+                'reason': set([('signal_struct', 'it_real_incr')])},
+               {'call': 'adjtimex',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'getitimer',
+                'reason': set([('itimerval', 'it_interval'),
+                               ('itimerval', 'it_value'),
+                               ('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'select',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'exit_group',
+                'reason': set([('signal_struct', 'it_real_incr')])},
+               {'call': 'wait4',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'getrusage',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'setitimer',
+                'reason': set([('itimerval', 'it_interval'),
+                               ('itimerval', 'it_value'),
+                               ('signal_struct', 'it_real_incr'),
+                               ('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'clock_adjtime',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'alarm',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'ppoll',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])}],
+ 'setns': [{'call': 'setns',
+            'reason': set([('nsproxy', 'cgroup_ns'),
+                           ('nsproxy', 'ipc_ns'),
+                           ('nsproxy', 'mnt_ns'),
+                           ('nsproxy', 'net_ns'),
+                           ('nsproxy', 'pid_ns_for_children'),
+                           ('nsproxy', 'uts_ns')])}],
+ 'setpgid': [{'call': 'keyctl',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'rt_sigtimedwait',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'msgrcv',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'kill',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'sched_getaffinity',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'sched_setparam',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'ioprio_set',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'getppid',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'capget',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'sched_setaffinity',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'signal',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'setreuid', 'reason': set([('task_struct', 'flags')])},
+             {'call': 'semtimedop',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'umount',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'timer_create',
+              'reason': set([('signal_struct', 'leader')])},
+             {'call': 'sched_rr_get_interval',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'rt_sigprocmask',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'setsid',
+              'reason': set([('signal_struct', 'leader'),
+                             ('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'sigaltstack',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'sched_setattr',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'migrate_pages',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'getitimer',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'setpgid',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'getsid',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'prlimit64',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'perf_event_open',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'rt_sigaction',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'getpgid',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'exit_group',
+              'reason': set([('signal_struct', 'leader')])},
+             {'call': 'getpriority',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'sigaction',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'setns',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'fork',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'get_robust_list',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'mq_timedsend',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'sched_getscheduler',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'ptrace',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'sched_getattr',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'getrusage',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'sched_setscheduler',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'setresuid', 'reason': set([('task_struct', 'flags')])},
+             {'call': 'setitimer',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'ioprio_get',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'vfork',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'setuid', 'reason': set([('task_struct', 'flags')])},
+             {'call': 'prctl',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'move_pages',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'setpriority',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'clone',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'sched_getparam',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])}],
+ 'setpriority': [{'call': 'keyctl',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'rt_sigtimedwait',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'msgrcv',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'kill',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_getaffinity',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_setparam',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'ioprio_set',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getppid',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'mq_timedreceive',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'capget',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_setaffinity',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'signal',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setreuid', 'reason': set([('cred', 'uid')])},
+                 {'call': 'semtimedop',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'umount',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_rr_get_interval',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'rt_sigprocmask',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setsid',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sigaltstack',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_setattr',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'migrate_pages',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getitimer',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setpgid',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getsid',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'prlimit64',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'perf_event_open',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'rt_sigaction',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getpgid',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getpriority',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sigaction',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setns',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'fork',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'get_robust_list',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'mq_timedsend',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_getscheduler',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'ptrace',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_getattr',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getrusage',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_setscheduler',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setresuid', 'reason': set([('cred', 'uid')])},
+                 {'call': 'setitimer',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'ioprio_get',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'vfork',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setuid', 'reason': set([('cred', 'uid')])},
+                 {'call': 'prctl',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'move_pages',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setpriority',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'clone',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_getparam',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])}],
+ 'setregid': [{'call': 'keyctl',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setfsuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getresuid16', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'getresgid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setgid',
+               'reason': set([('cred', 'egid'),
+                              ('cred', 'gid'),
+                              ('cred', 'sgid'),
+                              ('cred', 'user_ns')])},
+              {'call': 'ioprio_set',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'capset', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getresgid16', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'setfsgid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'unshare', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setreuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'epoll_create1', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'getresuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'migrate_pages',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setresgid',
+               'reason': set([('cred', 'egid'),
+                              ('cred', 'gid'),
+                              ('cred', 'sgid'),
+                              ('cred', 'user_ns')])},
+              {'call': 'setregid',
+               'reason': set([('cred', 'egid'),
+                              ('cred', 'gid'),
+                              ('cred', 'sgid'),
+                              ('cred', 'user_ns')])},
+              {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'prlimit64',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getgroups16', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpriority',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'faccessat', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setresuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'ioprio_get',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'move_pages',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getgroups', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'setpriority',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'cred')])}],
+ 'setresgid': [{'call': 'keyctl',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setfsuid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getresuid16', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'getresgid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setparam',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setgid',
+                'reason': set([('cred', 'egid'),
+                               ('cred', 'gid'),
+                               ('cred', 'sgid'),
+                               ('cred', 'user_ns')])},
+               {'call': 'ioprio_set',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'capset', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getresgid16', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'setfsgid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'unshare', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setreuid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'semtimedop',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'epoll_create1',
+                'reason': set([('cred', 'user_ns')])},
+               {'call': 'getresuid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaltstack',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'migrate_pages',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'getitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setresgid',
+                'reason': set([('cred', 'egid'),
+                               ('cred', 'gid'),
+                               ('cred', 'sgid'),
+                               ('cred', 'user_ns')])},
+               {'call': 'setregid',
+                'reason': set([('cred', 'egid'),
+                               ('cred', 'gid'),
+                               ('cred', 'sgid'),
+                               ('cred', 'user_ns')])},
+               {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prlimit64',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'perf_event_open',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getgroups16', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpriority',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'faccessat', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'get_robust_list',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getrusage',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setresuid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'setitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_get',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setuid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'move_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getgroups', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'setpriority',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getparam',
+                'reason': set([('task_struct', 'cred')])}],
+ 'setresuid': [{'call': 'keyctl',
+                'reason': set([('cred', 'user'),
+                               ('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setfsuid',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getresuid16',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'getresgid',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setparam',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setgid',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'ioprio_set',
+                'reason': set([('cred', 'user'),
+                               ('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'capset',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getresgid16',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('cred', 'user'),
+                               ('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'setfsgid',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'unshare',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setreuid',
+                'reason': set([('cred', 'euid'),
+                               ('cred', 'suid'),
+                               ('cred', 'uid'),
+                               ('cred', 'user'),
+                               ('cred', 'user_ns')])},
+               {'call': 'semtimedop',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'epoll_create1',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'getresuid',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaltstack',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'migrate_pages',
+                'reason': set([('cred', 'user'),
+                               ('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'getitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setresgid',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'setregid',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prlimit64',
+                'reason': set([('cred', 'user'),
+                               ('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'perf_event_open',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getgroups16',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpriority',
+                'reason': set([('cred', 'user'),
+                               ('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'faccessat',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'get_robust_list',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getrusage',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setresuid',
+                'reason': set([('cred', 'euid'),
+                               ('cred', 'suid'),
+                               ('cred', 'uid'),
+                               ('cred', 'user'),
+                               ('cred', 'user_ns')])},
+               {'call': 'setitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_get',
+                'reason': set([('cred', 'user'),
+                               ('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setuid',
+                'reason': set([('cred', 'euid'),
+                               ('cred', 'suid'),
+                               ('cred', 'uid'),
+                               ('cred', 'user'),
+                               ('cred', 'user_ns')])},
+               {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'move_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getgroups',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'setpriority',
+                'reason': set([('cred', 'user'),
+                               ('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getparam',
+                'reason': set([('task_struct', 'cred')])}],
+ 'setreuid': [{'call': 'keyctl',
+               'reason': set([('cred', 'user'),
+                              ('cred', 'user_ns'),
+                              ('task_struct', 'cred')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setfsuid',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getresuid16',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'getresgid',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setgid',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'ioprio_set',
+               'reason': set([('cred', 'user'),
+                              ('cred', 'user_ns'),
+                              ('task_struct', 'cred')])},
+              {'call': 'capset',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getresgid16',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('cred', 'user'),
+                              ('cred', 'user_ns'),
+                              ('task_struct', 'cred')])},
+              {'call': 'setfsgid',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'unshare',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setreuid',
+               'reason': set([('cred', 'euid'),
+                              ('cred', 'suid'),
+                              ('cred', 'uid'),
+                              ('cred', 'user'),
+                              ('cred', 'user_ns')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'epoll_create1',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'getresuid',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'migrate_pages',
+               'reason': set([('cred', 'user'),
+                              ('cred', 'user_ns'),
+                              ('task_struct', 'cred')])},
+              {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setresgid',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'setregid',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'prlimit64',
+               'reason': set([('cred', 'user'),
+                              ('cred', 'user_ns'),
+                              ('task_struct', 'cred')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getgroups16',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpriority',
+               'reason': set([('cred', 'user'),
+                              ('cred', 'user_ns'),
+                              ('task_struct', 'cred')])},
+              {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'faccessat',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setresuid',
+               'reason': set([('cred', 'euid'),
+                              ('cred', 'suid'),
+                              ('cred', 'uid'),
+                              ('cred', 'user'),
+                              ('cred', 'user_ns')])},
+              {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'ioprio_get',
+               'reason': set([('cred', 'user'),
+                              ('cred', 'user_ns'),
+                              ('task_struct', 'cred')])},
+              {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setuid',
+               'reason': set([('cred', 'euid'),
+                              ('cred', 'suid'),
+                              ('cred', 'uid'),
+                              ('cred', 'user'),
+                              ('cred', 'user_ns')])},
+              {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'move_pages',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getgroups',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'setpriority',
+               'reason': set([('cred', 'user'),
+                              ('cred', 'user_ns'),
+                              ('task_struct', 'cred')])},
+              {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'cred')])}],
+ 'setrlimit': [{'call': 'keyctl',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'msgrcv',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'kill',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_setparam',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'ioprio_set',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getppid',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'capget',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'signal',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'semtimedop',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'umount',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setsid',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sigaltstack',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_setattr',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setrlimit',
+                'reason': set([('compat_rlimit', 'rlim_cur'),
+                               ('compat_rlimit', 'rlim_max'),
+                               ('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max')])},
+               {'call': 'migrate_pages',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getitimer',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setpgid',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getsid',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'old_getrlimit',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max')])},
+               {'call': 'prlimit64',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'perf_event_open',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getpgid',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getpriority',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sigaction',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setns',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'fork',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'get_robust_list',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'ptrace',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_getattr',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getrusage',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setitimer',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'ioprio_get',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'vfork',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'prctl',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'move_pages',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setpriority',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getrlimit',
+                'reason': set([('compat_rlimit', 'rlim_cur'),
+                               ('compat_rlimit', 'rlim_max')])},
+               {'call': 'clone',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_getparam',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])}],
+ 'setsid': [{'call': 'timer_create',
+             'reason': set([('signal_struct', 'leader')])},
+            {'call': 'setsid', 'reason': set([('signal_struct', 'leader')])},
+            {'call': 'exit_group',
+             'reason': set([('signal_struct', 'leader')])}],
+ 'setsockopt': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+                {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+                {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+                {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+                {'call': 'readahead', 'reason': set([('fd', 'file')])},
+                {'call': 'getdents', 'reason': set([('fd', 'file')])},
+                {'call': 'writev', 'reason': set([('fd', 'file')])},
+                {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+                {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+                {'call': 'pread64', 'reason': set([('fd', 'file')])},
+                {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+                {'call': 'read', 'reason': set([('fd', 'file')])},
+                {'call': 'fchown', 'reason': set([('fd', 'file')])},
+                {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+                {'call': 'utime', 'reason': set([('fd', 'file')])},
+                {'call': 'fsync', 'reason': set([('fd', 'file')])},
+                {'call': 'bpf', 'reason': set([('fd', 'file')])},
+                {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+                {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+                {'call': 'sendto', 'reason': set([('fd', 'file')])},
+                {'call': 'tee', 'reason': set([('fd', 'file')])},
+                {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+                {'call': 'lseek', 'reason': set([('fd', 'file')])},
+                {'call': 'connect', 'reason': set([('fd', 'file')])},
+                {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+                {'call': 'epoll_ctl', 'reason': set([('fd', 'file')])},
+                {'call': 'flock', 'reason': set([('fd', 'file')])},
+                {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+                {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+                {'call': 'accept4',
+                 'reason': set([('fd', 'file'),
+                                ('proto_ops', 'compat_setsockopt')])},
+                {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+                {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+                {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+                {'call': 'inotify_add_watch',
+                 'reason': set([('fd', 'file')])},
+                {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+                {'call': 'splice', 'reason': set([('fd', 'file')])},
+                {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+                {'call': 'preadv', 'reason': set([('fd', 'file')])},
+                {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+                {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+                {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+                {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+                {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+                {'call': 'perf_event_open', 'reason': set([('fd', 'file')])},
+                {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+                {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+                {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+                {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+                {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+                {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+                {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+                {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+                {'call': 'listen', 'reason': set([('fd', 'file')])},
+                {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+                {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+                {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+                {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+                {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+                {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+                {'call': 'llseek', 'reason': set([('fd', 'file')])},
+                {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+                {'call': 'readv', 'reason': set([('fd', 'file')])},
+                {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+                {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+                {'call': 'write', 'reason': set([('fd', 'file')])},
+                {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+                {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+                {'call': 'bind', 'reason': set([('fd', 'file')])},
+                {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+                {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'settimeofday': [{'call': 'waitid',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'settimeofday',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec'),
+                                  ('timezone', 'tz_minuteswest')])},
+                  {'call': 'adjtimex',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'getitimer',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'select',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'wait4',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'getrusage',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'setitimer',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'clock_adjtime',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'alarm',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'ppoll',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])}],
+ 'setuid': [{'call': 'keyctl',
+             'reason': set([('cred', 'user'),
+                            ('cred', 'user_ns'),
+                            ('task_struct', 'cred')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setfsuid',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getresuid16',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'getresgid',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setgid',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'ioprio_set',
+             'reason': set([('cred', 'user'),
+                            ('cred', 'user_ns'),
+                            ('task_struct', 'cred')])},
+            {'call': 'capset',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getresgid16',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('cred', 'user'),
+                            ('cred', 'user_ns'),
+                            ('task_struct', 'cred')])},
+            {'call': 'setfsgid',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'unshare',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setreuid',
+             'reason': set([('cred', 'suid'),
+                            ('cred', 'uid'),
+                            ('cred', 'user'),
+                            ('cred', 'user_ns')])},
+            {'call': 'semtimedop', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'epoll_create1',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'getresuid',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sigaltstack', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'migrate_pages',
+             'reason': set([('cred', 'user'),
+                            ('cred', 'user_ns'),
+                            ('task_struct', 'cred')])},
+            {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setresgid',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'setregid',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prlimit64',
+             'reason': set([('cred', 'user'),
+                            ('cred', 'user_ns'),
+                            ('task_struct', 'cred')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getgroups16',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpriority',
+             'reason': set([('cred', 'user'),
+                            ('cred', 'user_ns'),
+                            ('task_struct', 'cred')])},
+            {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'faccessat',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setresuid',
+             'reason': set([('cred', 'suid'),
+                            ('cred', 'uid'),
+                            ('cred', 'user'),
+                            ('cred', 'user_ns')])},
+            {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_get',
+             'reason': set([('cred', 'user'),
+                            ('cred', 'user_ns'),
+                            ('task_struct', 'cred')])},
+            {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setuid',
+             'reason': set([('cred', 'suid'),
+                            ('cred', 'uid'),
+                            ('cred', 'user'),
+                            ('cred', 'user_ns')])},
+            {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'move_pages', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getgroups',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'setpriority',
+             'reason': set([('cred', 'user'),
+                            ('cred', 'user_ns'),
+                            ('task_struct', 'cred')])},
+            {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'cred')])}],
+ 'setxattr': [{'call': 'eventfd2',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'swapoff',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'pivot_root',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'memfd_create',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'dup3',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'unshare',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'epoll_create1',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'epoll_ctl',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'flock',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'openat',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'lookup_dcookie',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'uselib',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'accept4',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'socketpair',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'getcwd',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'shmat',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'socket',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'pipe2',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'perf_event_open',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'shmdt',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'quotactl',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'acct',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'open',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'dup',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'setns',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'shmctl',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'swapon',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'mmap_pgoff',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'mq_open',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'shmat': [{'call': 'keyctl', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'rt_sigtimedwait',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'msgrcv', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'eventfd2', 'reason': set([('path', 'dentry')])},
+           {'call': 'kill', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'swapoff', 'reason': set([('path', 'dentry')])},
+           {'call': 'sched_getaffinity',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_setparam', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'pivot_root', 'reason': set([('path', 'dentry')])},
+           {'call': 'memfd_create', 'reason': set([('path', 'dentry')])},
+           {'call': 'ioprio_set', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'remap_file_pages', 'reason': set([('path', 'dentry')])},
+           {'call': 'dup3', 'reason': set([('path', 'dentry')])},
+           {'call': 'getppid', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'capget', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_setaffinity',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'unshare', 'reason': set([('path', 'dentry')])},
+           {'call': 'signal', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'semtimedop', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'umount', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'epoll_create1', 'reason': set([('path', 'dentry')])},
+           {'call': 'epoll_ctl', 'reason': set([('path', 'dentry')])},
+           {'call': 'flock', 'reason': set([('path', 'dentry')])},
+           {'call': 'openat', 'reason': set([('path', 'dentry')])},
+           {'call': 'lookup_dcookie', 'reason': set([('path', 'dentry')])},
+           {'call': 'uselib', 'reason': set([('path', 'dentry')])},
+           {'call': 'rt_sigprocmask', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'accept4', 'reason': set([('path', 'dentry')])},
+           {'call': 'setsid', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sigaltstack', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_setattr', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'socketpair', 'reason': set([('path', 'dentry')])},
+           {'call': 'migrate_pages', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'getitimer', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'setpgid', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'getcwd', 'reason': set([('path', 'dentry')])},
+           {'call': 'getsid', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'shmat',
+            'reason': set([('path', 'dentry'),
+                           ('shmid_kernel', 'shm_file')])},
+           {'call': 'socket', 'reason': set([('path', 'dentry')])},
+           {'call': 'pipe2', 'reason': set([('path', 'dentry')])},
+           {'call': 'prlimit64', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'perf_event_open',
+            'reason': set([('path', 'dentry'), ('task_struct', 'mm')])},
+           {'call': 'shmdt', 'reason': set([('path', 'dentry')])},
+           {'call': 'quotactl', 'reason': set([('path', 'dentry')])},
+           {'call': 'rt_sigaction', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'getpgid', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'acct', 'reason': set([('path', 'dentry')])},
+           {'call': 'open', 'reason': set([('path', 'dentry')])},
+           {'call': 'getpriority', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sigaction', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'dup', 'reason': set([('path', 'dentry')])},
+           {'call': 'setns',
+            'reason': set([('path', 'dentry'), ('task_struct', 'mm')])},
+           {'call': 'fork', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'get_robust_list',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'mq_timedsend', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_getscheduler',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'ptrace', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'shmctl',
+            'reason': set([('path', 'dentry'),
+                           ('shmid_kernel', 'shm_file')])},
+           {'call': 'swapon', 'reason': set([('path', 'dentry')])},
+           {'call': 'sched_getattr', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'getrusage', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_setscheduler',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'setitimer', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'ioprio_get', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'vfork', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'mmap_pgoff', 'reason': set([('path', 'dentry')])},
+           {'call': 'prctl', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'move_pages', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'setpriority', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'clone', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'mq_open', 'reason': set([('path', 'dentry')])},
+           {'call': 'sched_getparam', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'open_by_handle_at', 'reason': set([('path', 'dentry')])}],
+ 'shmctl': [{'call': 'keyctl',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'msgrcv',
+             'reason': set([('ipc_namespace', 'user_ns'),
+                            ('kern_ipc_perm', 'deleted'),
+                            ('kern_ipc_perm', 'mode'),
+                            ('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'eventfd2', 'reason': set([('file', 'f_op')])},
+            {'call': 'mq_unlink',
+             'reason': set([('ipc_namespace', 'user_ns')])},
+            {'call': 'kill',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'swapoff', 'reason': set([('file', 'f_op')])},
+            {'call': 'msgget', 'reason': set([('ipc_namespace', 'user_ns')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'sched_setparam',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'memfd_create', 'reason': set([('file', 'f_op')])},
+            {'call': 'ioprio_set',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'remap_file_pages', 'reason': set([('file', 'f_op')])},
+            {'call': 'dup3', 'reason': set([('file', 'f_op')])},
+            {'call': 'getppid',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'capget',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'signal',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'semtimedop',
+             'reason': set([('ipc_namespace', 'user_ns'),
+                            ('kern_ipc_perm', 'deleted'),
+                            ('kern_ipc_perm', 'mode'),
+                            ('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'umount',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'epoll_create1', 'reason': set([('file', 'f_op')])},
+            {'call': 'semctl',
+             'reason': set([('ipc_namespace', 'user_ns'),
+                            ('kern_ipc_perm', 'deleted'),
+                            ('kern_ipc_perm', 'mode')])},
+            {'call': 'epoll_ctl', 'reason': set([('file', 'f_op')])},
+            {'call': 'flock', 'reason': set([('file', 'f_op')])},
+            {'call': 'openat', 'reason': set([('file', 'f_op')])},
+            {'call': 'shmget', 'reason': set([('ipc_namespace', 'user_ns')])},
+            {'call': 'uselib', 'reason': set([('file', 'f_op')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'accept4', 'reason': set([('file', 'f_op')])},
+            {'call': 'msgctl',
+             'reason': set([('ipc_namespace', 'user_ns'),
+                            ('kern_ipc_perm', 'deleted'),
+                            ('kern_ipc_perm', 'mode')])},
+            {'call': 'setsid',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'sigaltstack',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'sched_setattr',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'socketpair', 'reason': set([('file', 'f_op')])},
+            {'call': 'migrate_pages',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'getitimer',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'setpgid',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'semget', 'reason': set([('ipc_namespace', 'user_ns')])},
+            {'call': 'getsid',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'shmat',
+             'reason': set([('file', 'f_op'),
+                            ('ipc_namespace', 'user_ns'),
+                            ('kern_ipc_perm', 'deleted'),
+                            ('kern_ipc_perm', 'mode')])},
+            {'call': 'socket', 'reason': set([('file', 'f_op')])},
+            {'call': 'pipe2', 'reason': set([('file', 'f_op')])},
+            {'call': 'prlimit64',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'perf_event_open',
+             'reason': set([('file', 'f_op'),
+                            ('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'shmdt', 'reason': set([('file', 'f_op')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'getpgid',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'acct', 'reason': set([('file', 'f_op')])},
+            {'call': 'open', 'reason': set([('file', 'f_op')])},
+            {'call': 'getpriority',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'sigaction',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'dup', 'reason': set([('file', 'f_op')])},
+            {'call': 'setns',
+             'reason': set([('file', 'f_op'),
+                            ('ipc_namespace', 'user_ns'),
+                            ('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'fork',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'get_robust_list',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'ptrace',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'shmctl',
+             'reason': set([('file', 'f_op'),
+                            ('ipc_namespace', 'user_ns'),
+                            ('kern_ipc_perm', 'deleted'),
+                            ('kern_ipc_perm', 'mode'),
+                            ('shminfo64', 'shmmax')])},
+            {'call': 'swapon', 'reason': set([('file', 'f_op')])},
+            {'call': 'sched_getattr',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'getrusage',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'setitimer',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'ioprio_get',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'vfork',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'mmap_pgoff', 'reason': set([('file', 'f_op')])},
+            {'call': 'prctl',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'move_pages',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'msgsnd',
+             'reason': set([('ipc_namespace', 'user_ns'),
+                            ('kern_ipc_perm', 'deleted'),
+                            ('kern_ipc_perm', 'mode')])},
+            {'call': 'setpriority',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'clone',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'mq_open',
+             'reason': set([('file', 'f_op'), ('ipc_namespace', 'user_ns')])},
+            {'call': 'sched_getparam',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'open_by_handle_at', 'reason': set([('file', 'f_op')])}],
+ 'shmdt': [{'call': 'remap_file_pages',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'shmdt',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'brk',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'get_mempolicy',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'munlockall',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'pkey_mprotect',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'madvise',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'mprotect',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'mremap',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'prctl',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'munlock',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'mincore',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'mlockall',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])}],
+ 'shutdown': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+              {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+              {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+              {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+              {'call': 'readahead', 'reason': set([('fd', 'file')])},
+              {'call': 'getdents', 'reason': set([('fd', 'file')])},
+              {'call': 'writev', 'reason': set([('fd', 'file')])},
+              {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+              {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+              {'call': 'pread64', 'reason': set([('fd', 'file')])},
+              {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+              {'call': 'read', 'reason': set([('fd', 'file')])},
+              {'call': 'fchown', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+              {'call': 'utime', 'reason': set([('fd', 'file')])},
+              {'call': 'fsync', 'reason': set([('fd', 'file')])},
+              {'call': 'bpf', 'reason': set([('fd', 'file')])},
+              {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+              {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+              {'call': 'sendto', 'reason': set([('fd', 'file')])},
+              {'call': 'tee', 'reason': set([('fd', 'file')])},
+              {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+              {'call': 'lseek', 'reason': set([('fd', 'file')])},
+              {'call': 'connect', 'reason': set([('fd', 'file')])},
+              {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+              {'call': 'epoll_ctl', 'reason': set([('fd', 'file')])},
+              {'call': 'flock', 'reason': set([('fd', 'file')])},
+              {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+              {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+              {'call': 'accept4', 'reason': set([('fd', 'file')])},
+              {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+              {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+              {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+              {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+              {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+              {'call': 'splice', 'reason': set([('fd', 'file')])},
+              {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+              {'call': 'preadv', 'reason': set([('fd', 'file')])},
+              {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+              {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+              {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+              {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+              {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+              {'call': 'perf_event_open', 'reason': set([('fd', 'file')])},
+              {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+              {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+              {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+              {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+              {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+              {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+              {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+              {'call': 'listen', 'reason': set([('fd', 'file')])},
+              {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+              {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+              {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+              {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+              {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+              {'call': 'llseek', 'reason': set([('fd', 'file')])},
+              {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+              {'call': 'readv', 'reason': set([('fd', 'file')])},
+              {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+              {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+              {'call': 'write', 'reason': set([('fd', 'file')])},
+              {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+              {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+              {'call': 'bind', 'reason': set([('fd', 'file')])},
+              {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+              {'call': 'sendfile64', 'reason': set([('fd', 'file')])}],
+ 'sigaction': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setparam',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ioprio_set',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'semtimedop',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sigaltstack',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setattr',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'migrate_pages',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getitimer',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'prlimit64',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'perf_event_open',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getpriority',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sigaction',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'get_robust_list',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getattr',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getrusage',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setitimer',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ioprio_get',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'move_pages',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setpriority',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getparam',
+                'reason': set([('mm_segment_t', 'seg')])}],
+ 'signalfd4': [{'call': 'syncfs',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'vmsplice',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'eventfd2', 'reason': set([('file', 'f_op')])},
+               {'call': 'pwritev64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'swapoff', 'reason': set([('file', 'f_op')])},
+               {'call': 'fremovexattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'readahead',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getdents',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'writev',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'preadv64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fchmod',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pread64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'signalfd4',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'memfd_create', 'reason': set([('file', 'f_op')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('file', 'f_op')])},
+               {'call': 'dup3', 'reason': set([('file', 'f_op')])},
+               {'call': 'read',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fchown',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'utime',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fsync',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'bpf',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'recvfrom',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fsetxattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sendto',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'epoll_create1', 'reason': set([('file', 'f_op')])},
+               {'call': 'tee',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sync_file_range',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'lseek',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'connect',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getsockname',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'epoll_ctl',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('file', 'f_op')])},
+               {'call': 'flock',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('file', 'f_op')])},
+               {'call': 'pwritev',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fchdir',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'openat', 'reason': set([('file', 'f_op')])},
+               {'call': 'uselib', 'reason': set([('file', 'f_op')])},
+               {'call': 'accept4',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('file', 'f_op')])},
+               {'call': 'old_readdir',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'inotify_rm_watch',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'socketpair', 'reason': set([('file', 'f_op')])},
+               {'call': 'utimensat',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'preadv2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'splice',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'ftruncate',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'preadv',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'getpeername',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'shmat', 'reason': set([('file', 'f_op')])},
+               {'call': 'setsockopt',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'socket', 'reason': set([('file', 'f_op')])},
+               {'call': 'pipe2', 'reason': set([('file', 'f_op')])},
+               {'call': 'fcntl',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'ioctl',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pwrite64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'perf_event_open',
+                'reason': set([('fd', 'file'),
+                               ('fd', 'flags'),
+                               ('file', 'f_op')])},
+               {'call': 'shmdt', 'reason': set([('file', 'f_op')])},
+               {'call': 'pwritev64v2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'futimesat',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'pwritev2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'shutdown',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'acct', 'reason': set([('file', 'f_op')])},
+               {'call': 'open', 'reason': set([('file', 'f_op')])},
+               {'call': 'getsockopt',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'dup', 'reason': set([('file', 'f_op')])},
+               {'call': 'fdatasync',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'setns', 'reason': set([('file', 'f_op')])},
+               {'call': 'getdents64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'listen',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'copy_file_range',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fgetxattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'shmctl', 'reason': set([('file', 'f_op')])},
+               {'call': 'fcntl64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'swapon', 'reason': set([('file', 'f_op')])},
+               {'call': 'fallocate',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'epoll_wait',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'llseek',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mmap_pgoff', 'reason': set([('file', 'f_op')])},
+               {'call': 'preadv64v2',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'readv',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fstatfs',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'fstatfs64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'write',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_notify',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sendfile',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'mq_open', 'reason': set([('file', 'f_op')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('file', 'f_op')])},
+               {'call': 'bind',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'flistxattr',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])},
+               {'call': 'sendfile64',
+                'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'splice': [{'call': 'syncfs',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'vmsplice',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'eventfd2',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'pwritev64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'swapoff',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'fremovexattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'readahead',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getdents',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'writev',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'preadv64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fchmod',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pread64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'signalfd4',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'memfd_create',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'remap_file_pages',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'dup3',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'read',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fchown',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'utime',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fsync',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'bpf', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'recvfrom',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fsetxattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sendto',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'epoll_create1',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'tee', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sync_file_range',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'lseek',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'connect',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getsockname',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'epoll_ctl',
+             'reason': set([('fd', 'file'),
+                            ('fd', 'flags'),
+                            ('file', 'f_flags'),
+                            ('file', 'f_mode')])},
+            {'call': 'flock',
+             'reason': set([('fd', 'file'),
+                            ('fd', 'flags'),
+                            ('file', 'f_flags'),
+                            ('file', 'f_mode')])},
+            {'call': 'pwritev',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fchdir',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'openat',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'uselib',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'accept4',
+             'reason': set([('fd', 'file'),
+                            ('fd', 'flags'),
+                            ('file', 'f_flags'),
+                            ('file', 'f_mode')])},
+            {'call': 'old_readdir',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'inotify_rm_watch',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'socketpair',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'utimensat',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'inotify_add_watch',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'preadv2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'splice',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'ftruncate',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'preadv',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getpeername',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'shmat',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'setsockopt',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'socket',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'pipe2',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'fcntl',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'ioctl',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pwrite64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'perf_event_open',
+             'reason': set([('fd', 'file'),
+                            ('fd', 'flags'),
+                            ('file', 'f_flags'),
+                            ('file', 'f_mode')])},
+            {'call': 'shmdt',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'pwritev64v2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'futimesat',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pwritev2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'shutdown',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'acct',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'open',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'getsockopt',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_getsetattr',
+             'reason': set([('fd', 'file'),
+                            ('fd', 'flags'),
+                            ('file', 'f_flags')])},
+            {'call': 'dup',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'fdatasync',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'setns',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'getdents64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'listen',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'copy_file_range',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fgetxattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'shmctl',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'fcntl64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'swapon',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'fallocate',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'epoll_wait',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'llseek',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mmap_pgoff',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'preadv64v2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'readv',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fstatfs',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fstatfs64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'write',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_notify',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sendfile',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_open',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'bind',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'flistxattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sendfile64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'stat': [{'call': 'lstat',
+           'reason': set([('__old_kernel_stat', 'st_ino'),
+                          ('__old_kernel_stat', 'st_nlink')])},
+          {'call': 'stat',
+           'reason': set([('__old_kernel_stat', 'st_ino'),
+                          ('__old_kernel_stat', 'st_nlink')])},
+          {'call': 'fstat',
+           'reason': set([('__old_kernel_stat', 'st_ino'),
+                          ('__old_kernel_stat', 'st_nlink'),
+                          ('kstat', 'dev'),
+                          ('kstat', 'ino'),
+                          ('kstat', 'nlink'),
+                          ('kstat', 'rdev')])},
+          {'call': 'newfstat',
+           'reason': set([('kstat', 'dev'),
+                          ('kstat', 'ino'),
+                          ('kstat', 'nlink'),
+                          ('kstat', 'rdev')])}],
+ 'statfs': [{'call': 'ustat',
+             'reason': set([('kstatfs', 'f_ffree'), ('kstatfs', 'f_files')])},
+            {'call': 'fstatfs',
+             'reason': set([('kstatfs', 'f_ffree'), ('kstatfs', 'f_files')])},
+            {'call': 'statfs',
+             'reason': set([('kstatfs', 'f_ffree'), ('kstatfs', 'f_files')])},
+            {'call': 'fstatfs64',
+             'reason': set([('kstatfs', 'f_ffree'), ('kstatfs', 'f_files')])},
+            {'call': 'statfs64',
+             'reason': set([('kstatfs', 'f_ffree'), ('kstatfs', 'f_files')])}],
+ 'statfs64': [{'call': 'ustat',
+               'reason': set([('kstatfs', 'f_ffree'),
+                              ('kstatfs', 'f_files')])},
+              {'call': 'fstatfs',
+               'reason': set([('kstatfs', 'f_ffree'),
+                              ('kstatfs', 'f_files')])},
+              {'call': 'statfs',
+               'reason': set([('kstatfs', 'f_ffree'),
+                              ('kstatfs', 'f_files')])},
+              {'call': 'fstatfs64',
+               'reason': set([('kstatfs', 'f_ffree'),
+                              ('kstatfs', 'f_files')])},
+              {'call': 'statfs64',
+               'reason': set([('kstatfs', 'f_ffree'),
+                              ('kstatfs', 'f_files')])}],
+ 'swapoff': [{'call': 'keyctl', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'rt_sigtimedwait',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'msgrcv', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'eventfd2', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'kill', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'swapoff',
+              'reason': set([('file', 'f_mapping'),
+                             ('page', 'private'),
+                             ('swap_info_struct', 'cluster_info'),
+                             ('swap_info_struct', 'flags'),
+                             ('swap_info_struct', 'inuse_pages'),
+                             ('swap_info_struct', 'pages'),
+                             ('swap_info_struct', 'prio'),
+                             ('swap_info_struct', 'swap_map'),
+                             ('swp_entry_t', 'val')])},
+             {'call': 'sched_getaffinity',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_setparam',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'memfd_create', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'ioprio_set', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('file', 'f_mapping')])},
+             {'call': 'dup3', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'getppid', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'capget', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_setaffinity',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'signal', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'semtimedop', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'umount', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_rr_get_interval',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'epoll_create1',
+              'reason': set([('file', 'f_mapping')])},
+             {'call': 'epoll_ctl', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'flock', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'openat', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'uselib', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'rt_sigprocmask',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'accept4', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'setsid', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sigaltstack', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_setattr',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'socketpair', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'migrate_pages',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'getitimer', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'setpgid', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'getsid', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'shmat', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'socket', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'pipe2', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'prlimit64', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'perf_event_open',
+              'reason': set([('file', 'f_mapping'), ('task_struct', 'mm')])},
+             {'call': 'shmdt', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'rt_sigaction', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'getpgid', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'acct', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'open', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'getpriority', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sigaction', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'dup', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'setns',
+              'reason': set([('file', 'f_mapping'), ('task_struct', 'mm')])},
+             {'call': 'fork', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'get_robust_list',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'mq_timedsend', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_getscheduler',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'ptrace', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'shmctl', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'swapon',
+              'reason': set([('file', 'f_mapping'),
+                             ('page', 'private'),
+                             ('swap_info_struct', 'cluster_info'),
+                             ('swap_info_struct', 'flags'),
+                             ('swap_info_struct', 'inuse_pages'),
+                             ('swap_info_struct', 'pages'),
+                             ('swap_info_struct', 'prio'),
+                             ('swap_info_struct', 'swap_map')])},
+             {'call': 'sched_getattr',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'getrusage', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_setscheduler',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'setitimer', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'ioprio_get', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'vfork', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'prctl', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'move_pages', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'setpriority', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'clone', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'mq_open', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'sched_getparam',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'open_by_handle_at',
+              'reason': set([('file', 'f_mapping')])}],
+ 'swapon': [{'call': 'mq_unlink', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'swapoff',
+             'reason': set([('inode', 'i_flags'),
+                            ('swap_info_struct', 'bdev'),
+                            ('swap_info_struct', 'flags'),
+                            ('swap_info_struct', 'percpu_cluster'),
+                            ('swap_info_struct', 'type')])},
+            {'call': 'fchmod', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'memfd_create', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'readlinkat', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'fchown', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('inode', 'i_flags')])},
+            {'call': 'uselib', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'fchmodat', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'inotify_add_watch',
+             'reason': set([('inode', 'i_flags')])},
+            {'call': 'ftruncate', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'ioctl', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'linkat', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'unlink', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'mq_getsetattr', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'faccessat', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'mq_timedsend', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'swapon',
+             'reason': set([('inode', 'i_flags'),
+                            ('swap_info_struct', 'bdev'),
+                            ('swap_info_struct', 'flags'),
+                            ('swap_info_struct', 'percpu_cluster'),
+                            ('swap_info_struct', 'type')])},
+            {'call': 'fchownat', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'mq_notify', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'sendfile', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'unlinkat', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'sendfile64', 'reason': set([('inode', 'i_flags')])}],
+ 'symlinkat': [{'call': 'sysfs',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'mq_unlink',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'swapoff',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'openat',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'uselib',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'renameat2',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'symlinkat',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'quotactl',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'acct',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'open',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'unlink',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'rmdir',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'swapon',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'mq_open',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'unlinkat',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])}],
+ 'sync_file_range': [{'call': 'syncfs',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'vmsplice',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'pwritev64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fremovexattr',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'readahead',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'getdents',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'writev',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'preadv64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fchmod',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'pread64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'signalfd4',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'read',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fchown',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'mq_timedreceive',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'utime',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fsync',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'bpf',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'recvfrom',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fsetxattr',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'sendto',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'tee',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'sync_file_range',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'lseek',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'connect',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'getsockname',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'epoll_ctl',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'flock',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'pwritev',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fchdir',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'accept4',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'old_readdir',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'inotify_rm_watch',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'utimensat',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'inotify_add_watch',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'preadv2',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'splice',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'ftruncate',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'preadv',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'getpeername',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'setsockopt',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fcntl',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'ioctl',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'pwrite64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'perf_event_open',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'pwritev64v2',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'futimesat',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'pwritev2',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'shutdown',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'getsockopt',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'mq_getsetattr',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fdatasync',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'getdents64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'listen',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'copy_file_range',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fgetxattr',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fcntl64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fallocate',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'epoll_wait',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'llseek',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'preadv64v2',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'readv',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fstatfs',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'fstatfs64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'write',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'mq_notify',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'sendfile',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'bind',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'flistxattr',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])},
+                     {'call': 'sendfile64',
+                      'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'syncfs': [{'call': 'syncfs',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'vmsplice',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pwritev64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fremovexattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'readahead',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getdents',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'writev',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'preadv64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fchmod',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pread64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'signalfd4',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'read',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fchown',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'utime',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fsync',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'bpf', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'recvfrom',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fsetxattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sendto',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'tee', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sync_file_range',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'lseek',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'connect',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getsockname',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'epoll_ctl',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'flock',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pwritev',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fchdir',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'accept4',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'old_readdir',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'inotify_rm_watch',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'utimensat',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'inotify_add_watch',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'preadv2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'splice',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'ftruncate',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'preadv',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getpeername',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'setsockopt',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fcntl',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'ioctl',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pwrite64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'perf_event_open',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pwritev64v2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'futimesat',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'pwritev2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'shutdown',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getsockopt',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_getsetattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fdatasync',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'getdents64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'listen',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'copy_file_range',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fgetxattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fcntl64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fallocate',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'epoll_wait',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'llseek',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'preadv64v2',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'readv',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fstatfs',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'fstatfs64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'write',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'mq_notify',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sendfile',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'bind',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'flistxattr',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])},
+            {'call': 'sendfile64',
+             'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'sysctl': [{'call': 'sysctl',
+             'reason': set([('__sysctl_args', 'oldlenp'),
+                            ('__sysctl_args', 'oldval'),
+                            ('compat_sysctl_args', 'oldlenp'),
+                            ('compat_sysctl_args', 'oldval')])}],
+ 'sysfs': [{'call': 'sysfs',
+            'reason': set([('file_system_type', 'name'),
+                           ('file_system_type', 'owner'),
+                           ('filename', 'name')])},
+           {'call': 'mq_unlink', 'reason': set([('filename', 'name')])},
+           {'call': 'swapoff', 'reason': set([('filename', 'name')])},
+           {'call': 'openat', 'reason': set([('filename', 'name')])},
+           {'call': 'uselib', 'reason': set([('filename', 'name')])},
+           {'call': 'renameat2', 'reason': set([('filename', 'name')])},
+           {'call': 'symlinkat', 'reason': set([('filename', 'name')])},
+           {'call': 'quotactl', 'reason': set([('filename', 'name')])},
+           {'call': 'acct', 'reason': set([('filename', 'name')])},
+           {'call': 'open', 'reason': set([('filename', 'name')])},
+           {'call': 'unlink', 'reason': set([('filename', 'name')])},
+           {'call': 'rmdir', 'reason': set([('filename', 'name')])},
+           {'call': 'swapon', 'reason': set([('filename', 'name')])},
+           {'call': 'mq_open', 'reason': set([('filename', 'name')])},
+           {'call': 'unlinkat', 'reason': set([('filename', 'name')])}],
+ 'sysinfo': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'rt_sigtimedwait',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('timespec', 'tv_nsec')])},
+             {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'mq_unlink', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'swapoff', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sched_getaffinity',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sched_setparam',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'fchmod', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'memfd_create',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'ioprio_set', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'readlinkat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'io_getevents',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'fchown', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('timespec', 'tv_nsec')])},
+             {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'utime', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sched_setaffinity',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'semtimedop',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('timespec', 'tv_nsec')])},
+             {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'settimeofday',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sched_rr_get_interval',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('timespec', 'tv_nsec')])},
+             {'call': 'timerfd_gettime',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'pselect6', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'uselib', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'rt_sigprocmask',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sigaltstack',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sched_setattr',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'migrate_pages',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'getitimer', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'fchmodat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'inotify_add_watch',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'timer_settime',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'ftruncate', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'timer_gettime',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sysinfo',
+              'reason': set([('sysinfo', 'mem_unit'),
+                             ('sysinfo', 'totalram'),
+                             ('sysinfo', 'totalswap')])},
+             {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'ioctl', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'prlimit64', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'perf_event_open',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'linkat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'stime', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'rt_sigaction',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'futimesat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'poll', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'select', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'unlink', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'getpriority',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'nanosleep', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'mq_getsetattr',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'faccessat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'get_robust_list',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'mq_timedsend',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('timespec', 'tv_nsec')])},
+             {'call': 'sched_getscheduler',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'swapon', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'epoll_wait', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sched_getattr',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'fchownat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'getrusage', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'fstat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'timerfd_settime',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sched_setscheduler',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'setitimer', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'ioprio_get', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'move_pages', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'setpriority',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'mq_notify', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sendfile', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'newfstat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'clock_nanosleep',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'unlinkat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sched_getparam',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'futex', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'recvmmsg', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sendfile64', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'ppoll', 'reason': set([('timespec', 'tv_nsec')])}],
+ 'syslog': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setparam',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioprio_set', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'semtimedop', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sigaltstack', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setattr',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'migrate_pages',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getitimer', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'prlimit64', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'perf_event_open',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getpriority', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'get_robust_list',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_getattr',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getrusage', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setitimer', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioprio_get', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'move_pages', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setpriority', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_getparam',
+             'reason': set([('mm_segment_t', 'seg')])}],
+ 'tee': [{'call': 'syncfs', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'vmsplice',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+         {'call': 'pwritev64',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+         {'call': 'fremovexattr',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'readahead',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'getdents',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'writev', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'preadv64',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'fchmod', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'pread64',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'signalfd4',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+         {'call': 'remap_file_pages', 'reason': set([('file', 'f_mode')])},
+         {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+         {'call': 'read', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'fchown', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'mq_timedreceive',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'utime', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'fsync', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'bpf', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'recvfrom',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'fsetxattr',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'sendto', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+         {'call': 'tee', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'sync_file_range',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'lseek', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'connect',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'getsockname',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'epoll_ctl',
+          'reason': set([('fd', 'file'),
+                         ('fd', 'flags'),
+                         ('file', 'f_mode')])},
+         {'call': 'flock',
+          'reason': set([('fd', 'file'),
+                         ('fd', 'flags'),
+                         ('file', 'f_mode')])},
+         {'call': 'pwritev',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'fchdir', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+         {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+         {'call': 'accept4',
+          'reason': set([('fd', 'file'),
+                         ('fd', 'flags'),
+                         ('file', 'f_mode')])},
+         {'call': 'old_readdir',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'inotify_rm_watch',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+         {'call': 'utimensat',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'inotify_add_watch',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'preadv2',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'splice', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'ftruncate',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'preadv', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'getpeername',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+         {'call': 'setsockopt',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+         {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+         {'call': 'fcntl', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'ioctl', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'pwrite64',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'perf_event_open',
+          'reason': set([('fd', 'file'),
+                         ('fd', 'flags'),
+                         ('file', 'f_mode')])},
+         {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+         {'call': 'pwritev64v2',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'futimesat',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'pwritev2',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'shutdown',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+         {'call': 'open', 'reason': set([('file', 'f_mode')])},
+         {'call': 'getsockopt',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'mq_getsetattr',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+         {'call': 'fdatasync',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+         {'call': 'getdents64',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'listen', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'copy_file_range',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'mq_timedsend',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'fgetxattr',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+         {'call': 'fcntl64',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+         {'call': 'fallocate',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'epoll_wait',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'llseek', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+         {'call': 'preadv64v2',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'readv', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'fstatfs',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'fstatfs64',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'write', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'mq_notify',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'sendfile',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+         {'call': 'open_by_handle_at', 'reason': set([('file', 'f_mode')])},
+         {'call': 'bind', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'flistxattr',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])},
+         {'call': 'sendfile64',
+          'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'tgkill': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_set', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'semtimedop', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sigaltstack', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'migrate_pages',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prlimit64', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpriority', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_get', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'move_pages', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setpriority', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'cred')])}],
+ 'timer_create': [{'call': 'clock_getres',
+                   'reason': set([('k_clock', 'timer_create')])},
+                  {'call': 'timer_delete',
+                   'reason': set([('k_clock', 'timer_create'),
+                                  ('k_itimer', 'it_pid')])},
+                  {'call': 'timer_create',
+                   'reason': set([('k_clock', 'timer_create'),
+                                  ('k_itimer', 'it_pid')])},
+                  {'call': 'clock_gettime',
+                   'reason': set([('k_clock', 'timer_create')])},
+                  {'call': 'timer_settime',
+                   'reason': set([('k_clock', 'timer_create'),
+                                  ('k_itimer', 'it_pid')])},
+                  {'call': 'timer_gettime',
+                   'reason': set([('k_clock', 'timer_create'),
+                                  ('k_itimer', 'it_pid')])},
+                  {'call': 'clock_settime',
+                   'reason': set([('k_clock', 'timer_create')])},
+                  {'call': 'timer_getoverrun',
+                   'reason': set([('k_itimer', 'it_pid')])},
+                  {'call': 'clock_nanosleep',
+                   'reason': set([('k_clock', 'timer_create')])},
+                  {'call': 'clock_adjtime',
+                   'reason': set([('k_clock', 'timer_create')])}],
+ 'timer_delete': [{'call': 'keyctl',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'rt_sigtimedwait',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'msgrcv',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'kill',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'clock_getres',
+                   'reason': set([('k_clock', 'timer_del')])},
+                  {'call': 'timer_delete',
+                   'reason': set([('k_clock', 'timer_del'),
+                                  ('k_itimer', 'it_pid'),
+                                  ('k_itimer', 'it_signal'),
+                                  ('k_itimer', 'sigq')])},
+                  {'call': 'sched_getaffinity',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'sched_setparam',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'ioprio_set',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'getppid',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'mq_timedreceive',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'capget',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'sched_setaffinity',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'signal',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'semtimedop',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'umount',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'timer_create',
+                   'reason': set([('k_clock', 'timer_del'),
+                                  ('k_itimer', 'it_pid'),
+                                  ('k_itimer', 'it_signal'),
+                                  ('k_itimer', 'sigq')])},
+                  {'call': 'clock_gettime',
+                   'reason': set([('k_clock', 'timer_del')])},
+                  {'call': 'sched_rr_get_interval',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'rt_sigprocmask',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'setsid',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'sigaltstack',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'sched_setattr',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'migrate_pages',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'getitimer',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'setpgid',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'timer_settime',
+                   'reason': set([('k_clock', 'timer_del'),
+                                  ('k_itimer', 'it_pid'),
+                                  ('k_itimer', 'it_signal'),
+                                  ('k_itimer', 'sigq')])},
+                  {'call': 'timer_gettime',
+                   'reason': set([('k_clock', 'timer_del'),
+                                  ('k_itimer', 'it_pid'),
+                                  ('k_itimer', 'it_signal'),
+                                  ('k_itimer', 'sigq')])},
+                  {'call': 'getsid',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'prlimit64',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'perf_event_open',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'rt_sigaction',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'getpgid',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'clock_settime',
+                   'reason': set([('k_clock', 'timer_del')])},
+                  {'call': 'getpriority',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'sigaction',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'setns',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'fork',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'get_robust_list',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'mq_timedsend',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'sched_getscheduler',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'ptrace',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'sched_getattr',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'getrusage',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'sched_setscheduler',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'setitimer',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'ioprio_get',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'vfork',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'prctl',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'move_pages',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'setpriority',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'timer_getoverrun',
+                   'reason': set([('k_itimer', 'it_pid'),
+                                  ('k_itimer', 'it_signal'),
+                                  ('k_itimer', 'sigq')])},
+                  {'call': 'clone',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'clock_nanosleep',
+                   'reason': set([('k_clock', 'timer_del')])},
+                  {'call': 'sched_getparam',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'clock_adjtime',
+                   'reason': set([('k_clock', 'timer_del')])}],
+ 'timer_getoverrun': [{'call': 'keyctl',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'rt_sigtimedwait',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'msgrcv',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'kill',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'timer_delete',
+                       'reason': set([('k_itimer', 'it_signal')])},
+                      {'call': 'sched_getaffinity',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'sched_setparam',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'ioprio_set',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'getppid',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'mq_timedreceive',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'capget',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'sched_setaffinity',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'signal',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'semtimedop',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'umount',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'timer_create',
+                       'reason': set([('k_itimer', 'it_signal')])},
+                      {'call': 'sched_rr_get_interval',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'rt_sigprocmask',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'setsid',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'sigaltstack',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'sched_setattr',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'migrate_pages',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'getitimer',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'setpgid',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'timer_settime',
+                       'reason': set([('k_itimer', 'it_signal')])},
+                      {'call': 'timer_gettime',
+                       'reason': set([('k_itimer', 'it_signal')])},
+                      {'call': 'getsid',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'prlimit64',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'perf_event_open',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'rt_sigaction',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'getpgid',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'getpriority',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'sigaction',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'setns',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'fork',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'get_robust_list',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'mq_timedsend',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'sched_getscheduler',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'ptrace',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'sched_getattr',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'getrusage',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'sched_setscheduler',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'setitimer',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'ioprio_get',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'vfork',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'prctl',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'move_pages',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'setpriority',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'timer_getoverrun',
+                       'reason': set([('k_itimer', 'it_signal')])},
+                      {'call': 'clone',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'sched_getparam',
+                       'reason': set([('task_struct', 'signal')])}],
+ 'timer_gettime': [{'call': 'clock_getres',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'timer_delete',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'timer_create',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'clock_gettime',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'timer_settime',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'timer_gettime',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'clock_settime',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'clock_nanosleep',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'clock_adjtime',
+                    'reason': set([('k_clock', 'timer_get')])}],
+ 'timer_settime': [{'call': 'clock_getres',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'timer_delete',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'timer_create',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'clock_gettime',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'timer_settime',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'timer_gettime',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'clock_settime',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'clock_nanosleep',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'clock_adjtime',
+                    'reason': set([('k_clock', 'timer_set')])}],
+ 'timerfd_create': [{'call': 'timerfd_gettime',
+                     'reason': set([('timerfd_ctx', 'clockid')])},
+                    {'call': 'timerfd_settime',
+                     'reason': set([('timerfd_ctx', 'clockid')])},
+                    {'call': 'timerfd_create',
+                     'reason': set([('timerfd_ctx', 'clockid')])}],
+ 'timerfd_gettime': [{'call': 'timerfd_gettime',
+                      'reason': set([('timerfd_ctx', 'expired'),
+                                     ('timerfd_ctx', 'tintv')])},
+                     {'call': 'timerfd_settime',
+                      'reason': set([('timerfd_ctx', 'expired'),
+                                     ('timerfd_ctx', 'tintv')])},
+                     {'call': 'timerfd_create',
+                      'reason': set([('timerfd_ctx', 'expired'),
+                                     ('timerfd_ctx', 'tintv')])}],
+ 'timerfd_settime': [{'call': 'timerfd_gettime',
+                      'reason': set([('timerfd_ctx', 'expired'),
+                                     ('timerfd_ctx', 'tintv')])},
+                     {'call': 'timerfd_settime',
+                      'reason': set([('timerfd_ctx', 'expired'),
+                                     ('timerfd_ctx', 'tintv')])},
+                     {'call': 'timerfd_create',
+                      'reason': set([('timerfd_ctx', 'expired'),
+                                     ('timerfd_ctx', 'tintv')])}],
+ 'tkill': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'rt_sigtimedwait',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'sched_getaffinity',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'sched_setparam',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'ioprio_set', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'sched_setaffinity',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'semtimedop', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'rt_sigprocmask',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'sigaltstack', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'sched_setattr',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'migrate_pages',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'prlimit64', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'perf_event_open',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'rt_sigaction', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'getpriority', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'get_robust_list',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'mq_timedsend', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'sched_getscheduler',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'sched_getattr',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'sched_setscheduler',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'ioprio_get', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'move_pages', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'setpriority', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'sched_getparam',
+            'reason': set([('task_struct', 'cred')])}],
+ 'umount': [{'call': 'syncfs', 'reason': set([('super_block', 's_flags')])},
+            {'call': 'keyctl', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'msgrcv', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'eventfd2',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'mq_unlink',
+             'reason': set([('vfsmount', 'mnt_flags'),
+                            ('vfsmount', 'mnt_root')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'swapoff',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'pivot_root',
+             'reason': set([('mount', 'mnt_ns'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('vfsmount', 'mnt_flags'),
+                            ('vfsmount', 'mnt_root')])},
+            {'call': 'memfd_create',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'ioprio_set', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'remap_file_pages',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'dup3',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'getppid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'capget', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'ustat', 'reason': set([('super_block', 's_flags')])},
+            {'call': 'unshare',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'signal', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'setreuid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'semtimedop', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'umount',
+             'reason': set([('mount', 'mnt_ns'),
+                            ('super_block', 's_flags'),
+                            ('task_struct', 'flags'),
+                            ('vfsmount', 'mnt_flags'),
+                            ('vfsmount', 'mnt_root')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'epoll_create1',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'epoll_ctl',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'flock',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'openat',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'lookup_dcookie',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'uselib',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'accept4',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'setsid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'sigaltstack',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'socketpair',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'migrate_pages',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'getitimer', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'setpgid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'getcwd',
+             'reason': set([('mount', 'mnt_ns'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('vfsmount', 'mnt_flags'),
+                            ('vfsmount', 'mnt_root')])},
+            {'call': 'getsid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'shmat',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'socket',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'pipe2',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'prlimit64', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'perf_event_open',
+             'reason': set([('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('task_struct', 'flags')])},
+            {'call': 'shmdt',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'quotactl',
+             'reason': set([('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('super_block', 's_flags')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'getpgid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'acct',
+             'reason': set([('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('vfsmount', 'mnt_flags'),
+                            ('vfsmount', 'mnt_root')])},
+            {'call': 'open',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'getpriority',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'sigaction', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'dup',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'setns',
+             'reason': set([('nsproxy', 'mnt_ns'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('task_struct', 'flags')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'ptrace', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'shmctl',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'swapon',
+             'reason': set([('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('super_block', 's_flags')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'getrusage', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'setresuid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'setitimer', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'ioprio_get', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'vfork', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'setuid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'mmap_pgoff',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'prctl', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'move_pages', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'setpriority',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'clone', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'mq_open',
+             'reason': set([('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('vfsmount', 'mnt_flags'),
+                            ('vfsmount', 'mnt_root')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'uname': [{'call': 'keyctl',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigtimedwait',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'msgrcv',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'kill', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getaffinity',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setparam',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ioprio_set',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'personality',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getppid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'capget',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setaffinity',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'signal',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'semtimedop',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'umount',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigprocmask',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setsid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sigaltstack',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setattr',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'migrate_pages',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getitimer',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setpgid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getsid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'prlimit64',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'perf_event_open',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigaction',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getpgid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getpriority',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sigaction',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setns', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'fork', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'get_robust_list',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getscheduler',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ptrace',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getattr',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getrusage',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setscheduler',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setitimer',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ioprio_get',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'vfork', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'prctl', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'move_pages',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setpriority',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'clone', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getparam',
+            'reason': set([('task_struct', 'personality')])}],
+ 'unlink': [{'call': 'eventfd2',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'mq_unlink', 'reason': set([('dentry', 'd_inode')])},
+            {'call': 'swapoff',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'pivot_root',
+             'reason': set([('dentry', 'd_inode'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt')])},
+            {'call': 'memfd_create',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'remap_file_pages',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'dup3',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'unshare',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'mkdirat', 'reason': set([('dentry', 'd_inode')])},
+            {'call': 'epoll_create1',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'epoll_ctl',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'flock',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'openat',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'lookup_dcookie',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'uselib',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'renameat2', 'reason': set([('dentry', 'd_inode')])},
+            {'call': 'accept4',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'socketpair',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'getcwd',
+             'reason': set([('dentry', 'd_inode'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt')])},
+            {'call': 'ftruncate', 'reason': set([('dentry', 'd_inode')])},
+            {'call': 'shmat',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'mknodat', 'reason': set([('dentry', 'd_inode')])},
+            {'call': 'socket',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'symlinkat', 'reason': set([('dentry', 'd_inode')])},
+            {'call': 'pipe2',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'perf_event_open',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'linkat', 'reason': set([('dentry', 'd_inode')])},
+            {'call': 'shmdt',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'quotactl',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'acct',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'open',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'unlink', 'reason': set([('dentry', 'd_inode')])},
+            {'call': 'rmdir', 'reason': set([('dentry', 'd_inode')])},
+            {'call': 'dup',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'setns',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'shmctl',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'swapon',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'mmap_pgoff',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'mq_open',
+             'reason': set([('dentry', 'd_inode'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt')])},
+            {'call': 'unlinkat', 'reason': set([('dentry', 'd_inode')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'unlinkat': [{'call': 'eventfd2',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'mq_unlink', 'reason': set([('dentry', 'd_inode')])},
+              {'call': 'swapoff',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'pivot_root',
+               'reason': set([('dentry', 'd_inode'),
+                              ('path', 'dentry'),
+                              ('path', 'mnt')])},
+              {'call': 'memfd_create',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'dup3',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'unshare',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'mkdirat', 'reason': set([('dentry', 'd_inode')])},
+              {'call': 'epoll_create1',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'epoll_ctl',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'flock',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'openat',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'lookup_dcookie',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'uselib',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'renameat2', 'reason': set([('dentry', 'd_inode')])},
+              {'call': 'accept4',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'socketpair',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'getcwd',
+               'reason': set([('dentry', 'd_inode'),
+                              ('path', 'dentry'),
+                              ('path', 'mnt')])},
+              {'call': 'ftruncate', 'reason': set([('dentry', 'd_inode')])},
+              {'call': 'shmat',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'mknodat', 'reason': set([('dentry', 'd_inode')])},
+              {'call': 'socket',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'symlinkat', 'reason': set([('dentry', 'd_inode')])},
+              {'call': 'pipe2',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'perf_event_open',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'linkat', 'reason': set([('dentry', 'd_inode')])},
+              {'call': 'shmdt',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'quotactl',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'acct',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'open',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'unlink', 'reason': set([('dentry', 'd_inode')])},
+              {'call': 'rmdir', 'reason': set([('dentry', 'd_inode')])},
+              {'call': 'dup',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'setns',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'shmctl',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'swapon',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'mmap_pgoff',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'mq_open',
+               'reason': set([('dentry', 'd_inode'),
+                              ('path', 'dentry'),
+                              ('path', 'mnt')])},
+              {'call': 'unlinkat', 'reason': set([('dentry', 'd_inode')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'unshare': [{'call': 'unshare', 'reason': set([('fs_struct', 'users')])}],
+ 'uselib': [{'call': 'syncfs', 'reason': set([('super_block', 's_iflags')])},
+            {'call': 'mq_unlink', 'reason': set([('vfsmount', 'mnt_flags')])},
+            {'call': 'pivot_root',
+             'reason': set([('vfsmount', 'mnt_flags')])},
+            {'call': 'ustat', 'reason': set([('super_block', 's_iflags')])},
+            {'call': 'umount',
+             'reason': set([('super_block', 's_iflags'),
+                            ('vfsmount', 'mnt_flags')])},
+            {'call': 'uselib',
+             'reason': set([('linux_binfmt', 'load_shlib'),
+                            ('linux_binfmt', 'module')])},
+            {'call': 'getcwd', 'reason': set([('vfsmount', 'mnt_flags')])},
+            {'call': 'quotactl',
+             'reason': set([('super_block', 's_iflags')])},
+            {'call': 'acct', 'reason': set([('vfsmount', 'mnt_flags')])},
+            {'call': 'swapon', 'reason': set([('super_block', 's_iflags')])},
+            {'call': 'mq_open', 'reason': set([('vfsmount', 'mnt_flags')])}],
+ 'ustat': [{'call': 'syncfs', 'reason': set([('super_block', 's_root')])},
+           {'call': 'ustat', 'reason': set([('super_block', 's_root')])},
+           {'call': 'umount', 'reason': set([('super_block', 's_root')])},
+           {'call': 'quotactl', 'reason': set([('super_block', 's_root')])},
+           {'call': 'swapon', 'reason': set([('super_block', 's_root')])}],
+ 'utime': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+           {'call': 'rt_sigtimedwait',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+           {'call': 'mq_unlink', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+           {'call': 'swapoff', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+           {'call': 'readahead', 'reason': set([('fd', 'file')])},
+           {'call': 'getdents', 'reason': set([('fd', 'file')])},
+           {'call': 'writev', 'reason': set([('fd', 'file')])},
+           {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+           {'call': 'fchmod',
+            'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+           {'call': 'pread64', 'reason': set([('fd', 'file')])},
+           {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+           {'call': 'memfd_create', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'readlinkat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'read', 'reason': set([('fd', 'file')])},
+           {'call': 'io_getevents', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'fchown',
+            'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+           {'call': 'utime',
+            'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+           {'call': 'fsync', 'reason': set([('fd', 'file')])},
+           {'call': 'bpf', 'reason': set([('fd', 'file')])},
+           {'call': 'semtimedop', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+           {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+           {'call': 'settimeofday', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'sendto', 'reason': set([('fd', 'file')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'timerfd_gettime',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'tee', 'reason': set([('fd', 'file')])},
+           {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+           {'call': 'lseek', 'reason': set([('fd', 'file')])},
+           {'call': 'connect', 'reason': set([('fd', 'file')])},
+           {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+           {'call': 'epoll_ctl', 'reason': set([('fd', 'file')])},
+           {'call': 'flock', 'reason': set([('fd', 'file')])},
+           {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+           {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+           {'call': 'pselect6', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'uselib', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'accept4', 'reason': set([('fd', 'file')])},
+           {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+           {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+           {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+           {'call': 'fchmodat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'inotify_add_watch',
+            'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+           {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+           {'call': 'timer_settime',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'splice', 'reason': set([('fd', 'file')])},
+           {'call': 'ftruncate',
+            'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+           {'call': 'timer_gettime',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'preadv', 'reason': set([('fd', 'file')])},
+           {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+           {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+           {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+           {'call': 'ioctl',
+            'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+           {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+           {'call': 'perf_event_open', 'reason': set([('fd', 'file')])},
+           {'call': 'linkat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'stime', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+           {'call': 'futimesat',
+            'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+           {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+           {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+           {'call': 'poll', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'select', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'unlink', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+           {'call': 'nanosleep', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'mq_getsetattr',
+            'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+           {'call': 'faccessat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+           {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+           {'call': 'listen', 'reason': set([('fd', 'file')])},
+           {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+           {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+           {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+           {'call': 'swapon', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+           {'call': 'epoll_wait',
+            'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+           {'call': 'fchownat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'fstat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'timerfd_settime',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'llseek', 'reason': set([('fd', 'file')])},
+           {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+           {'call': 'readv', 'reason': set([('fd', 'file')])},
+           {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+           {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+           {'call': 'write', 'reason': set([('fd', 'file')])},
+           {'call': 'mq_notify',
+            'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+           {'call': 'sendfile',
+            'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+           {'call': 'newfstat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'clock_nanosleep',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'unlinkat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'bind', 'reason': set([('fd', 'file')])},
+           {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+           {'call': 'futex', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'recvmmsg', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'sendfile64',
+            'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+           {'call': 'ppoll', 'reason': set([('timespec', 'tv_nsec')])}],
+ 'utimensat': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_unlink',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+               {'call': 'swapoff', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+               {'call': 'readahead', 'reason': set([('fd', 'file')])},
+               {'call': 'getdents', 'reason': set([('fd', 'file')])},
+               {'call': 'writev', 'reason': set([('fd', 'file')])},
+               {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+               {'call': 'fchmod',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'pread64', 'reason': set([('fd', 'file')])},
+               {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+               {'call': 'memfd_create',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'readlinkat',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'read', 'reason': set([('fd', 'file')])},
+               {'call': 'io_getevents',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fchown',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'utime',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'fsync', 'reason': set([('fd', 'file')])},
+               {'call': 'bpf', 'reason': set([('fd', 'file')])},
+               {'call': 'semtimedop',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+               {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'settimeofday',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'sendto', 'reason': set([('fd', 'file')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'timerfd_gettime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'tee', 'reason': set([('fd', 'file')])},
+               {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+               {'call': 'lseek', 'reason': set([('fd', 'file')])},
+               {'call': 'connect', 'reason': set([('fd', 'file')])},
+               {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+               {'call': 'epoll_ctl', 'reason': set([('fd', 'file')])},
+               {'call': 'flock', 'reason': set([('fd', 'file')])},
+               {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+               {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+               {'call': 'pselect6', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'uselib', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'accept4', 'reason': set([('fd', 'file')])},
+               {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+               {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+               {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+               {'call': 'fchmodat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+               {'call': 'timer_settime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'splice', 'reason': set([('fd', 'file')])},
+               {'call': 'ftruncate',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'timer_gettime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'preadv', 'reason': set([('fd', 'file')])},
+               {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+               {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+               {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+               {'call': 'ioctl',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+               {'call': 'perf_event_open', 'reason': set([('fd', 'file')])},
+               {'call': 'linkat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'stime', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+               {'call': 'futimesat',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+               {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+               {'call': 'poll', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'select', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'unlink', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+               {'call': 'nanosleep',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'faccessat',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+               {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+               {'call': 'listen', 'reason': set([('fd', 'file')])},
+               {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+               {'call': 'swapon', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+               {'call': 'epoll_wait',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'fchownat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fstat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'timerfd_settime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'llseek', 'reason': set([('fd', 'file')])},
+               {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+               {'call': 'readv', 'reason': set([('fd', 'file')])},
+               {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+               {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+               {'call': 'write', 'reason': set([('fd', 'file')])},
+               {'call': 'mq_notify',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'sendfile',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'newfstat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'clock_nanosleep',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'unlinkat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'bind', 'reason': set([('fd', 'file')])},
+               {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+               {'call': 'futex', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'recvmmsg', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'sendfile64',
+                'reason': set([('fd', 'file'), ('timespec', 'tv_nsec')])},
+               {'call': 'ppoll', 'reason': set([('timespec', 'tv_nsec')])}],
+ 'vmsplice': [{'call': 'syncfs',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'vmsplice',
+               'reason': set([('fd', 'file'),
+                              ('fd', 'flags'),
+                              ('splice_desc', 'total_len')])},
+              {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pwritev64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fremovexattr',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'readahead',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'getdents',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'writev',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'preadv64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fchmod',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'pread64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'signalfd4',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+              {'call': 'read',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fchown',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'utime',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fsync',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'bpf',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'recvfrom',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fsetxattr',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'sendto',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+              {'call': 'tee',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'sync_file_range',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'lseek',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'connect',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'getsockname',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'epoll_ctl',
+               'reason': set([('fd', 'file'),
+                              ('fd', 'flags'),
+                              ('file', 'f_mode')])},
+              {'call': 'flock',
+               'reason': set([('fd', 'file'),
+                              ('fd', 'flags'),
+                              ('file', 'f_mode')])},
+              {'call': 'pwritev',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fchdir',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+              {'call': 'accept4',
+               'reason': set([('fd', 'file'),
+                              ('fd', 'flags'),
+                              ('file', 'f_mode')])},
+              {'call': 'old_readdir',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'inotify_rm_watch',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+              {'call': 'utimensat',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'inotify_add_watch',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'preadv2',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'splice',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'ftruncate',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'preadv',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'getpeername',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'setsockopt',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fcntl',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'ioctl',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'pwrite64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'perf_event_open',
+               'reason': set([('fd', 'file'),
+                              ('fd', 'flags'),
+                              ('file', 'f_mode')])},
+              {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pwritev64v2',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'futimesat',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'pwritev2',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'shutdown',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'getsockopt',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'mq_getsetattr',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fdatasync',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+              {'call': 'getdents64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'listen',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'copy_file_range',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fgetxattr',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fcntl64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fallocate',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'epoll_wait',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'llseek',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'preadv64v2',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'readv',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fstatfs',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'fstatfs64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'write',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'mq_notify',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'sendfile',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'bind',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'flistxattr',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])},
+              {'call': 'sendfile64',
+               'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'write': [{'call': 'syncfs',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'vmsplice',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pwritev64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fremovexattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'readahead',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getdents',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'writev',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'preadv64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fchmod',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pread64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'signalfd4',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'read', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fchown',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'utime',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fsync',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'bpf', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'recvfrom',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fsetxattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'sendto',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'tee', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'sync_file_range',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'lseek',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'connect',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getsockname',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'epoll_ctl',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'flock',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pwritev',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fchdir',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'accept4',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'old_readdir',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'inotify_rm_watch',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'utimensat',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'inotify_add_watch',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'preadv2',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'splice',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'ftruncate',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'preadv',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getpeername',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'setsockopt',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fcntl',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'ioctl',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pwrite64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'perf_event_open',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pwritev64v2',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'futimesat',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'pwritev2',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'shutdown',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getsockopt',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_getsetattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fdatasync',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'getdents64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'listen',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'copy_file_range',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fgetxattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fcntl64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fallocate',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'epoll_wait',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'llseek',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'preadv64v2',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'readv',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fstatfs',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'fstatfs64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'write',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'mq_notify',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'sendfile',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'bind', 'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'flistxattr',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])},
+           {'call': 'sendfile64',
+            'reason': set([('fd', 'file'), ('fd', 'flags')])}],
+ 'writev': [{'call': 'syncfs', 'reason': set([('fd', 'file')])},
+            {'call': 'vmsplice', 'reason': set([('fd', 'file')])},
+            {'call': 'pwritev64', 'reason': set([('fd', 'file')])},
+            {'call': 'fremovexattr', 'reason': set([('fd', 'file')])},
+            {'call': 'readahead', 'reason': set([('fd', 'file')])},
+            {'call': 'getdents', 'reason': set([('fd', 'file')])},
+            {'call': 'writev', 'reason': set([('fd', 'file')])},
+            {'call': 'preadv64', 'reason': set([('fd', 'file')])},
+            {'call': 'fchmod', 'reason': set([('fd', 'file')])},
+            {'call': 'pread64', 'reason': set([('fd', 'file')])},
+            {'call': 'signalfd4', 'reason': set([('fd', 'file')])},
+            {'call': 'read', 'reason': set([('fd', 'file')])},
+            {'call': 'fchown', 'reason': set([('fd', 'file')])},
+            {'call': 'mq_timedreceive', 'reason': set([('fd', 'file')])},
+            {'call': 'utime', 'reason': set([('fd', 'file')])},
+            {'call': 'fsync', 'reason': set([('fd', 'file')])},
+            {'call': 'bpf', 'reason': set([('fd', 'file')])},
+            {'call': 'recvfrom', 'reason': set([('fd', 'file')])},
+            {'call': 'fsetxattr', 'reason': set([('fd', 'file')])},
+            {'call': 'sendto', 'reason': set([('fd', 'file')])},
+            {'call': 'tee', 'reason': set([('fd', 'file')])},
+            {'call': 'sync_file_range', 'reason': set([('fd', 'file')])},
+            {'call': 'lseek', 'reason': set([('fd', 'file')])},
+            {'call': 'connect', 'reason': set([('fd', 'file')])},
+            {'call': 'getsockname', 'reason': set([('fd', 'file')])},
+            {'call': 'epoll_ctl', 'reason': set([('fd', 'file')])},
+            {'call': 'flock', 'reason': set([('fd', 'file')])},
+            {'call': 'pwritev', 'reason': set([('fd', 'file')])},
+            {'call': 'fchdir', 'reason': set([('fd', 'file')])},
+            {'call': 'accept4', 'reason': set([('fd', 'file')])},
+            {'call': 'old_readdir', 'reason': set([('fd', 'file')])},
+            {'call': 'inotify_rm_watch', 'reason': set([('fd', 'file')])},
+            {'call': 'utimensat', 'reason': set([('fd', 'file')])},
+            {'call': 'inotify_add_watch', 'reason': set([('fd', 'file')])},
+            {'call': 'preadv2', 'reason': set([('fd', 'file')])},
+            {'call': 'splice', 'reason': set([('fd', 'file')])},
+            {'call': 'ftruncate', 'reason': set([('fd', 'file')])},
+            {'call': 'preadv', 'reason': set([('fd', 'file')])},
+            {'call': 'getpeername', 'reason': set([('fd', 'file')])},
+            {'call': 'setsockopt', 'reason': set([('fd', 'file')])},
+            {'call': 'fcntl', 'reason': set([('fd', 'file')])},
+            {'call': 'ioctl', 'reason': set([('fd', 'file')])},
+            {'call': 'pwrite64', 'reason': set([('fd', 'file')])},
+            {'call': 'perf_event_open', 'reason': set([('fd', 'file')])},
+            {'call': 'pwritev64v2', 'reason': set([('fd', 'file')])},
+            {'call': 'futimesat', 'reason': set([('fd', 'file')])},
+            {'call': 'pwritev2', 'reason': set([('fd', 'file')])},
+            {'call': 'shutdown', 'reason': set([('fd', 'file')])},
+            {'call': 'getsockopt', 'reason': set([('fd', 'file')])},
+            {'call': 'mq_getsetattr', 'reason': set([('fd', 'file')])},
+            {'call': 'fdatasync', 'reason': set([('fd', 'file')])},
+            {'call': 'getdents64', 'reason': set([('fd', 'file')])},
+            {'call': 'listen', 'reason': set([('fd', 'file')])},
+            {'call': 'copy_file_range', 'reason': set([('fd', 'file')])},
+            {'call': 'mq_timedsend', 'reason': set([('fd', 'file')])},
+            {'call': 'fgetxattr', 'reason': set([('fd', 'file')])},
+            {'call': 'fcntl64', 'reason': set([('fd', 'file')])},
+            {'call': 'fallocate', 'reason': set([('fd', 'file')])},
+            {'call': 'epoll_wait', 'reason': set([('fd', 'file')])},
+            {'call': 'llseek', 'reason': set([('fd', 'file')])},
+            {'call': 'preadv64v2', 'reason': set([('fd', 'file')])},
+            {'call': 'readv', 'reason': set([('fd', 'file')])},
+            {'call': 'fstatfs', 'reason': set([('fd', 'file')])},
+            {'call': 'fstatfs64', 'reason': set([('fd', 'file')])},
+            {'call': 'write', 'reason': set([('fd', 'file')])},
+            {'call': 'mq_notify', 'reason': set([('fd', 'file')])},
+            {'call': 'sendfile', 'reason': set([('fd', 'file')])},
+            {'call': 'bind', 'reason': set([('fd', 'file')])},
+            {'call': 'flistxattr', 'reason': set([('fd', 'file')])},
+            {'call': 'sendfile64', 'reason': set([('fd', 'file')])}]}
--- /dev/null	Fri Dec 21 15:00:33 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/implicit_dependencies/with_structs/implicit_dependencies_verbose.json	Fri Dec 21 15:00:33 2018
@@ -0,0 +1,1 @@
+{"setdomainname": [{"reason": ["uts_namespace->user_ns"], "call": "setns"}], "name_to_handle_at": [{"reason": ["super_block->s_export_op"], "call": "syncfs"}, {"reason": ["path->dentry", "path->mnt"], "call": "eventfd2"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapoff"}, {"reason": ["path->dentry", "path->mnt"], "call": "pivot_root"}, {"reason": ["path->dentry", "path->mnt"], "call": "memfd_create"}, {"reason": ["path->dentry", "path->mnt"], "call": "remap_file_pages"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup3"}, {"reason": ["super_block->s_export_op"], "call": "ustat"}, {"reason": ["path->dentry", "path->mnt"], "call": "unshare"}, {"reason": ["super_block->s_export_op"], "call": "umount"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_create1"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_ctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "flock"}, {"reason": ["path->dentry", "path->mnt"], "call": "openat"}, {"reason": ["path->dentry", "path->mnt"], "call": "lookup_dcookie"}, {"reason": ["path->dentry", "path->mnt"], "call": "uselib"}, {"reason": ["path->dentry", "path->mnt"], "call": "accept4"}, {"reason": ["path->dentry", "path->mnt"], "call": "socketpair"}, {"reason": ["path->dentry", "path->mnt"], "call": "getcwd"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmat"}, {"reason": ["path->dentry", "path->mnt"], "call": "socket"}, {"reason": ["path->dentry", "path->mnt"], "call": "pipe2"}, {"reason": ["path->dentry", "path->mnt"], "call": "perf_event_open"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmdt"}, {"reason": ["super_block->s_export_op", "path->dentry", "path->mnt"], "call": "quotactl"}, {"reason": ["path->dentry", "path->mnt"], "call": "acct"}, {"reason": ["path->dentry", "path->mnt"], "call": "open"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup"}, {"reason": ["path->dentry", "path->mnt"], "call": "setns"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmctl"}, {"reason": ["super_block->s_export_op", "path->dentry", "path->mnt"], "call": "swapon"}, {"reason": ["path->dentry", "path->mnt"], "call": "mmap_pgoff"}, {"reason": ["path->dentry", "path->mnt"], "call": "mq_open"}, {"reason": ["path->dentry", "path->mnt"], "call": "open_by_handle_at"}], "syncfs": [{"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "lseek": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "rt_sigtimedwait": [{"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "msgrcv"}, {"reason": ["siginfo->si_code", "task_struct->timer_slack_ns", "mm_segment_t->seg", "siginfo->si_signo"], "call": "kill"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sched_setparam"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "ioprio_set"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "capget"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "signal"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "umount"}, {"reason": ["siginfo->si_signo", "siginfo->si_code"], "call": "timer_create"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sched_rr_get_interval"}, {"reason": ["siginfo->si_signo", "siginfo->si_code"], "call": "rt_sigqueueinfo"}, {"reason": ["siginfo->si_signo", "siginfo->si_code"], "call": "tgkill"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "setsid"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "setpgid"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "getsid"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "perf_event_open"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "getpgid"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sigaction"}, {"reason": ["siginfo->si_signo", "siginfo->si_code"], "call": "rt_tgsigqueueinfo"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "setns"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "fork"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "ptrace"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "vfork"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "prctl"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "move_pages"}, {"reason": ["siginfo->si_signo", "siginfo->si_code"], "call": "rt_sigreturn"}, {"reason": ["siginfo->si_signo", "siginfo->si_code"], "call": "tkill"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "clone"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sched_getparam"}], "vmsplice": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["fd->flags", "file->f_mode"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["fd->flags", "file->f_mode"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "setfsuid": [{"reason": ["cred->user_ns", "task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["cred->user_ns"], "call": "getresuid16"}, {"reason": ["cred->user_ns"], "call": "getresgid"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["cred->user_ns"], "call": "setgid"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "ioprio_set"}, {"reason": ["cred->user_ns"], "call": "capset"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["cred->user_ns"], "call": "getresgid16"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["cred->user_ns"], "call": "setfsgid"}, {"reason": ["cred->user_ns"], "call": "unshare"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["cred->uid", "cred->user_ns", "cred->suid", "cred->euid", "cred->fsuid"], "call": "setreuid"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["cred->user_ns"], "call": "epoll_create1"}, {"reason": ["cred->user_ns"], "call": "getresuid"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["cred->user_ns"], "call": "setresgid"}, {"reason": ["cred->user_ns"], "call": "setregid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["cred->user_ns"], "call": "getgroups16"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["cred->user_ns", "cred->fsuid"], "call": "faccessat"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["cred->uid", "cred->user_ns", "cred->suid", "cred->euid", "cred->fsuid"], "call": "setresuid"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["cred->uid", "cred->user_ns", "cred->suid", "cred->euid", "cred->fsuid"], "call": "setuid"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["cred->user_ns"], "call": "getgroups"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "msgrcv": [{"reason": ["msg_msg->m_ts"], "call": "mq_timedreceive"}, {"reason": ["msg_msg->m_ts"], "call": "mq_timedsend"}, {"reason": ["msg_msg->m_ts"], "call": "msgsnd"}], "uname": [{"reason": ["task_struct->personality"], "call": "keyctl"}, {"reason": ["task_struct->personality"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality"], "call": "msgrcv"}, {"reason": ["task_struct->personality"], "call": "kill"}, {"reason": ["task_struct->personality"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality"], "call": "sched_setparam"}, {"reason": ["task_struct->personality"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["task_struct->personality"], "call": "getppid"}, {"reason": ["task_struct->personality"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality"], "call": "capget"}, {"reason": ["task_struct->personality"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality"], "call": "signal"}, {"reason": ["task_struct->personality"], "call": "semtimedop"}, {"reason": ["task_struct->personality"], "call": "umount"}, {"reason": ["task_struct->personality"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->personality"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality"], "call": "setsid"}, {"reason": ["task_struct->personality"], "call": "sigaltstack"}, {"reason": ["task_struct->personality"], "call": "sched_setattr"}, {"reason": ["task_struct->personality"], "call": "migrate_pages"}, {"reason": ["task_struct->personality"], "call": "getitimer"}, {"reason": ["task_struct->personality"], "call": "setpgid"}, {"reason": ["task_struct->personality"], "call": "getsid"}, {"reason": ["task_struct->personality"], "call": "prlimit64"}, {"reason": ["task_struct->personality"], "call": "perf_event_open"}, {"reason": ["task_struct->personality"], "call": "rt_sigaction"}, {"reason": ["task_struct->personality"], "call": "getpgid"}, {"reason": ["task_struct->personality"], "call": "getpriority"}, {"reason": ["task_struct->personality"], "call": "sigaction"}, {"reason": ["task_struct->personality"], "call": "setns"}, {"reason": ["task_struct->personality"], "call": "fork"}, {"reason": ["task_struct->personality"], "call": "get_robust_list"}, {"reason": ["task_struct->personality"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality"], "call": "ptrace"}, {"reason": ["task_struct->personality"], "call": "sched_getattr"}, {"reason": ["task_struct->personality"], "call": "getrusage"}, {"reason": ["task_struct->personality"], "call": "sched_setscheduler"}, {"reason": ["task_struct->personality"], "call": "setitimer"}, {"reason": ["task_struct->personality"], "call": "ioprio_get"}, {"reason": ["task_struct->personality"], "call": "vfork"}, {"reason": ["task_struct->personality"], "call": "prctl"}, {"reason": ["task_struct->personality"], "call": "move_pages"}, {"reason": ["task_struct->personality"], "call": "setpriority"}, {"reason": ["task_struct->personality"], "call": "clone"}, {"reason": ["task_struct->personality"], "call": "sched_getparam"}], "kill": [{"reason": ["task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["task_struct->cred"], "call": "ioprio_set"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "io_getevents": [{"reason": ["task_struct->timer_slack_ns"], "call": "keyctl"}, {"reason": ["task_struct->timer_slack_ns"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->timer_slack_ns"], "call": "msgrcv"}, {"reason": ["task_struct->timer_slack_ns"], "call": "kill"}, {"reason": ["mm_struct->ioctx_table"], "call": "swapoff"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sched_getaffinity"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sched_setparam"}, {"reason": ["task_struct->timer_slack_ns"], "call": "ioprio_set"}, {"reason": ["mm_struct->ioctx_table"], "call": "remap_file_pages"}, {"reason": ["task_struct->timer_slack_ns"], "call": "getppid"}, {"reason": ["task_struct->timer_slack_ns"], "call": "mq_timedreceive"}, {"reason": ["task_struct->timer_slack_ns"], "call": "capget"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sched_setaffinity"}, {"reason": ["task_struct->timer_slack_ns"], "call": "signal"}, {"reason": ["task_struct->timer_slack_ns"], "call": "semtimedop"}, {"reason": ["task_struct->timer_slack_ns"], "call": "umount"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->timer_slack_ns"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->timer_slack_ns"], "call": "setsid"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sigaltstack"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sched_setattr"}, {"reason": ["task_struct->timer_slack_ns", "mm_struct->ioctx_table"], "call": "migrate_pages"}, {"reason": ["task_struct->timer_slack_ns"], "call": "getitimer"}, {"reason": ["task_struct->timer_slack_ns"], "call": "setpgid"}, {"reason": ["task_struct->timer_slack_ns"], "call": "getsid"}, {"reason": ["task_struct->timer_slack_ns"], "call": "prlimit64"}, {"reason": ["task_struct->timer_slack_ns"], "call": "perf_event_open"}, {"reason": ["mm_struct->ioctx_table"], "call": "shmdt"}, {"reason": ["task_struct->timer_slack_ns"], "call": "rt_sigaction"}, {"reason": ["task_struct->timer_slack_ns"], "call": "getpgid"}, {"reason": ["mm_struct->ioctx_table"], "call": "brk"}, {"reason": ["task_struct->timer_slack_ns"], "call": "getpriority"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sigaction"}, {"reason": ["task_struct->timer_slack_ns"], "call": "setns"}, {"reason": ["task_struct->timer_slack_ns"], "call": "fork"}, {"reason": ["mm_struct->ioctx_table"], "call": "get_mempolicy"}, {"reason": ["kioctx->user_id"], "call": "io_submit"}, {"reason": ["task_struct->timer_slack_ns"], "call": "get_robust_list"}, {"reason": ["task_struct->timer_slack_ns"], "call": "mq_timedsend"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sched_getscheduler"}, {"reason": ["task_struct->timer_slack_ns"], "call": "ptrace"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sched_getattr"}, {"reason": ["task_struct->timer_slack_ns", "mm_struct->ioctx_table"], "call": "getrusage"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sched_setscheduler"}, {"reason": ["task_struct->timer_slack_ns"], "call": "setitimer"}, {"reason": ["task_struct->timer_slack_ns"], "call": "ioprio_get"}, {"reason": ["task_struct->timer_slack_ns"], "call": "vfork"}, {"reason": ["kioctx_table->nr", "kioctx->user_id", "mm_struct->ioctx_table"], "call": "io_setup"}, {"reason": ["mm_struct->ioctx_table"], "call": "mremap"}, {"reason": ["kioctx_table->nr", "kioctx->user_id", "mm_struct->ioctx_table"], "call": "io_destroy"}, {"reason": ["mm_struct->ioctx_table"], "call": "mbind"}, {"reason": ["task_struct->timer_slack_ns", "mm_struct->ioctx_table"], "call": "prctl"}, {"reason": ["task_struct->timer_slack_ns", "mm_struct->ioctx_table"], "call": "move_pages"}, {"reason": ["mm_struct->ioctx_table"], "call": "modify_ldt"}, {"reason": ["task_struct->timer_slack_ns"], "call": "setpriority"}, {"reason": ["mm_struct->ioctx_table"], "call": "mincore"}, {"reason": ["task_struct->timer_slack_ns"], "call": "clone"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sched_getparam"}, {"reason": ["kioctx_table->nr", "kioctx->user_id", "mm_struct->ioctx_table"], "call": "io_cancel"}], "swapoff": [{"reason": ["task_struct->mm"], "call": "keyctl"}, {"reason": ["task_struct->mm"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->mm"], "call": "msgrcv"}, {"reason": ["file->f_mapping"], "call": "eventfd2"}, {"reason": ["task_struct->mm"], "call": "kill"}, {"reason": ["task_struct->mm"], "call": "sched_getaffinity"}, {"reason": ["task_struct->mm"], "call": "sched_setparam"}, {"reason": ["file->f_mapping"], "call": "memfd_create"}, {"reason": ["task_struct->mm"], "call": "ioprio_set"}, {"reason": ["file->f_mapping"], "call": "remap_file_pages"}, {"reason": ["file->f_mapping"], "call": "dup3"}, {"reason": ["task_struct->mm"], "call": "getppid"}, {"reason": ["task_struct->mm"], "call": "mq_timedreceive"}, {"reason": ["task_struct->mm"], "call": "capget"}, {"reason": ["task_struct->mm"], "call": "sched_setaffinity"}, {"reason": ["task_struct->mm"], "call": "signal"}, {"reason": ["task_struct->mm"], "call": "semtimedop"}, {"reason": ["task_struct->mm"], "call": "umount"}, {"reason": ["task_struct->mm"], "call": "sched_rr_get_interval"}, {"reason": ["file->f_mapping"], "call": "epoll_create1"}, {"reason": ["file->f_mapping"], "call": "epoll_ctl"}, {"reason": ["file->f_mapping"], "call": "flock"}, {"reason": ["file->f_mapping"], "call": "openat"}, {"reason": ["file->f_mapping"], "call": "uselib"}, {"reason": ["task_struct->mm"], "call": "rt_sigprocmask"}, {"reason": ["file->f_mapping"], "call": "accept4"}, {"reason": ["task_struct->mm"], "call": "setsid"}, {"reason": ["task_struct->mm"], "call": "sigaltstack"}, {"reason": ["task_struct->mm"], "call": "sched_setattr"}, {"reason": ["file->f_mapping"], "call": "socketpair"}, {"reason": ["task_struct->mm"], "call": "migrate_pages"}, {"reason": ["task_struct->mm"], "call": "getitimer"}, {"reason": ["task_struct->mm"], "call": "setpgid"}, {"reason": ["task_struct->mm"], "call": "getsid"}, {"reason": ["file->f_mapping"], "call": "shmat"}, {"reason": ["file->f_mapping"], "call": "socket"}, {"reason": ["file->f_mapping"], "call": "pipe2"}, {"reason": ["task_struct->mm"], "call": "prlimit64"}, {"reason": ["task_struct->mm", "file->f_mapping"], "call": "perf_event_open"}, {"reason": ["file->f_mapping"], "call": "shmdt"}, {"reason": ["task_struct->mm"], "call": "rt_sigaction"}, {"reason": ["task_struct->mm"], "call": "getpgid"}, {"reason": ["file->f_mapping"], "call": "acct"}, {"reason": ["file->f_mapping"], "call": "open"}, {"reason": ["task_struct->mm"], "call": "getpriority"}, {"reason": ["task_struct->mm"], "call": "sigaction"}, {"reason": ["file->f_mapping"], "call": "dup"}, {"reason": ["task_struct->mm", "file->f_mapping"], "call": "setns"}, {"reason": ["task_struct->mm"], "call": "fork"}, {"reason": ["task_struct->mm"], "call": "get_robust_list"}, {"reason": ["task_struct->mm"], "call": "mq_timedsend"}, {"reason": ["task_struct->mm"], "call": "sched_getscheduler"}, {"reason": ["task_struct->mm"], "call": "ptrace"}, {"reason": ["file->f_mapping"], "call": "shmctl"}, {"reason": ["swap_info_struct->swap_map", "swap_info_struct->flags", "swap_info_struct->inuse_pages", "swap_info_struct->cluster_info", "file->f_mapping", "swap_info_struct->prio", "page->private", "swap_info_struct->pages"], "call": "swapon"}, {"reason": ["task_struct->mm"], "call": "sched_getattr"}, {"reason": ["task_struct->mm"], "call": "getrusage"}, {"reason": ["task_struct->mm"], "call": "sched_setscheduler"}, {"reason": ["task_struct->mm"], "call": "setitimer"}, {"reason": ["task_struct->mm"], "call": "ioprio_get"}, {"reason": ["task_struct->mm"], "call": "vfork"}, {"reason": ["file->f_mapping"], "call": "mmap_pgoff"}, {"reason": ["task_struct->mm"], "call": "prctl"}, {"reason": ["task_struct->mm"], "call": "move_pages"}, {"reason": ["task_struct->mm"], "call": "setpriority"}, {"reason": ["task_struct->mm"], "call": "clone"}, {"reason": ["file->f_mapping"], "call": "mq_open"}, {"reason": ["task_struct->mm"], "call": "sched_getparam"}, {"reason": ["file->f_mapping"], "call": "open_by_handle_at"}], "getgroups16": [{"reason": ["cred->group_info", "task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["cred->group_info"], "call": "setfsuid"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["cred->group_info"], "call": "getresuid16"}, {"reason": ["cred->group_info"], "call": "getresgid"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["cred->group_info"], "call": "setgid"}, {"reason": ["cred->group_info", "task_struct->cred"], "call": "ioprio_set"}, {"reason": ["cred->group_info"], "call": "capset"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["cred->group_info"], "call": "getresgid16"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["cred->group_info", "task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["cred->group_info"], "call": "setfsgid"}, {"reason": ["cred->group_info"], "call": "unshare"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["cred->group_info"], "call": "setreuid"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["cred->group_info"], "call": "epoll_create1"}, {"reason": ["cred->group_info"], "call": "getresuid"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["cred->group_info", "task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["cred->group_info"], "call": "setresgid"}, {"reason": ["cred->group_info"], "call": "setregid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["cred->group_info", "task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["cred->group_info", "task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["cred->group_info"], "call": "faccessat"}, {"reason": ["group_info->ngroups"], "call": "setgroups16"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["cred->group_info"], "call": "setresuid"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["cred->group_info", "task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["cred->group_info"], "call": "setuid"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["cred->group_info"], "call": "getgroups"}, {"reason": ["cred->group_info", "task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["group_info->ngroups"], "call": "setgroups"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "newlstat": [{"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newfstatat"}, {"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newstat"}, {"reason": ["kstat->size", "kstat->nlink", "kstat->ino", "kstat->rdev", "kstat->dev"], "call": "fstat"}, {"reason": ["stat->st_nlink", "kstat->nlink", "kstat->ino", "kstat->dev", "compat_stat->st_nlink", "kstat->size", "stat->st_ino", "compat_stat->st_ino", "kstat->rdev"], "call": "newfstat"}], "pkey_alloc": [{"reason": ["mm_context_t->pkey_allocation_map"], "call": "swapoff"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "remap_file_pages"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "io_getevents"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "pkey_free"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "migrate_pages"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "shmdt"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "brk"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "get_mempolicy"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "getrusage"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "io_setup"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "mremap"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "io_destroy"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "mbind"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "prctl"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "move_pages"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "modify_ldt"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "mincore"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "io_cancel"}], "readahead": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["address_space->a_ops"], "call": "mq_unlink"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["address_space->a_ops", "file->f_mode"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["address_space->a_ops", "fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["address_space->a_ops", "file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["address_space->a_ops"], "call": "readlinkat"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["address_space->a_ops", "fd->flags"], "call": "fchown"}, {"reason": ["address_space->a_ops", "fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["address_space->a_ops", "fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["fd->flags", "file->f_mode"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["address_space->a_ops", "file->f_mode"], "call": "uselib"}, {"reason": ["fd->flags", "file->f_mode"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["address_space->a_ops"], "call": "fchmodat"}, {"reason": ["address_space->a_ops", "fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["address_space->a_ops", "fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["address_space->a_ops", "file->f_mode"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["address_space->a_ops", "fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["address_space->a_ops"], "call": "linkat"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["address_space->a_ops"], "call": "unlink"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["address_space->a_ops", "fd->flags"], "call": "mq_getsetattr"}, {"reason": ["address_space->a_ops"], "call": "faccessat"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["address_space->a_ops", "fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["address_space->a_ops", "file->f_mode"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["address_space->a_ops"], "call": "fchownat"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["address_space->a_ops", "fd->flags"], "call": "mq_notify"}, {"reason": ["address_space->a_ops", "fd->flags"], "call": "sendfile"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["address_space->a_ops"], "call": "unlinkat"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["address_space->a_ops", "fd->flags"], "call": "sendfile64"}], "newfstatat": [{"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newlstat"}, {"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newstat"}, {"reason": ["kstat->size", "kstat->nlink", "kstat->ino", "kstat->rdev", "kstat->dev"], "call": "fstat"}, {"reason": ["stat->st_nlink", "kstat->nlink", "kstat->ino", "kstat->dev", "compat_stat->st_nlink", "kstat->size", "stat->st_ino", "compat_stat->st_ino", "kstat->rdev"], "call": "newfstat"}], "preadv": [{"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "getdents": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg", "fd->flags"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["mm_segment_t->seg", "fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["mm_segment_t->seg"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["mm_segment_t->seg", "fd->flags"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "getresgid": [{"reason": ["task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["task_struct->cred"], "call": "ioprio_set"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "sethostname": [{"reason": ["uts_namespace->user_ns"], "call": "setns"}], "timer_delete": [{"reason": ["task_struct->signal"], "call": "keyctl"}, {"reason": ["task_struct->signal"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->signal"], "call": "msgrcv"}, {"reason": ["task_struct->signal"], "call": "kill"}, {"reason": ["k_clock->timer_del"], "call": "clock_getres"}, {"reason": ["task_struct->signal"], "call": "sched_getaffinity"}, {"reason": ["task_struct->signal"], "call": "sched_setparam"}, {"reason": ["task_struct->signal"], "call": "ioprio_set"}, {"reason": ["task_struct->signal"], "call": "getppid"}, {"reason": ["task_struct->signal"], "call": "mq_timedreceive"}, {"reason": ["task_struct->signal"], "call": "capget"}, {"reason": ["task_struct->signal"], "call": "sched_setaffinity"}, {"reason": ["task_struct->signal"], "call": "signal"}, {"reason": ["task_struct->signal"], "call": "semtimedop"}, {"reason": ["task_struct->signal"], "call": "umount"}, {"reason": ["k_clock->timer_del", "k_itimer->it_pid", "k_itimer->it_signal", "k_itimer->sigq"], "call": "timer_create"}, {"reason": ["k_clock->timer_del"], "call": "clock_gettime"}, {"reason": ["task_struct->signal"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->signal"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->signal"], "call": "setsid"}, {"reason": ["task_struct->signal"], "call": "sigaltstack"}, {"reason": ["task_struct->signal"], "call": "sched_setattr"}, {"reason": ["task_struct->signal"], "call": "migrate_pages"}, {"reason": ["task_struct->signal"], "call": "getitimer"}, {"reason": ["task_struct->signal"], "call": "setpgid"}, {"reason": ["k_clock->timer_del", "k_itimer->it_pid", "k_itimer->it_signal", "k_itimer->sigq"], "call": "timer_settime"}, {"reason": ["k_clock->timer_del", "k_itimer->it_pid", "k_itimer->it_signal", "k_itimer->sigq"], "call": "timer_gettime"}, {"reason": ["task_struct->signal"], "call": "getsid"}, {"reason": ["task_struct->signal"], "call": "prlimit64"}, {"reason": ["task_struct->signal"], "call": "perf_event_open"}, {"reason": ["task_struct->signal"], "call": "rt_sigaction"}, {"reason": ["task_struct->signal"], "call": "getpgid"}, {"reason": ["k_clock->timer_del"], "call": "clock_settime"}, {"reason": ["task_struct->signal"], "call": "getpriority"}, {"reason": ["task_struct->signal"], "call": "sigaction"}, {"reason": ["task_struct->signal"], "call": "setns"}, {"reason": ["task_struct->signal"], "call": "fork"}, {"reason": ["task_struct->signal"], "call": "get_robust_list"}, {"reason": ["task_struct->signal"], "call": "mq_timedsend"}, {"reason": ["task_struct->signal"], "call": "sched_getscheduler"}, {"reason": ["task_struct->signal"], "call": "ptrace"}, {"reason": ["task_struct->signal"], "call": "sched_getattr"}, {"reason": ["task_struct->signal"], "call": "getrusage"}, {"reason": ["task_struct->signal"], "call": "sched_setscheduler"}, {"reason": ["task_struct->signal"], "call": "setitimer"}, {"reason": ["task_struct->signal"], "call": "ioprio_get"}, {"reason": ["task_struct->signal"], "call": "vfork"}, {"reason": ["task_struct->signal"], "call": "prctl"}, {"reason": ["task_struct->signal"], "call": "move_pages"}, {"reason": ["task_struct->signal"], "call": "setpriority"}, {"reason": ["k_itimer->it_pid", "k_itimer->it_signal", "k_itimer->sigq"], "call": "timer_getoverrun"}, {"reason": ["task_struct->signal"], "call": "clone"}, {"reason": ["k_clock->timer_del"], "call": "clock_nanosleep"}, {"reason": ["task_struct->signal"], "call": "sched_getparam"}, {"reason": ["k_clock->timer_del"], "call": "clock_adjtime"}], "pwritev2": [{"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "fchmod": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["path->dentry", "path->mnt"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["path->dentry", "path->mnt"], "call": "pivot_root"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["path->dentry", "path->mnt"], "call": "memfd_create"}, {"reason": ["path->dentry", "path->mnt"], "call": "remap_file_pages"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["path->dentry", "path->mnt"], "call": "unshare"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "path->dentry", "path->mnt"], "call": "epoll_ctl"}, {"reason": ["fd->flags", "path->dentry", "path->mnt"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["path->dentry", "path->mnt"], "call": "openat"}, {"reason": ["path->dentry", "path->mnt"], "call": "lookup_dcookie"}, {"reason": ["path->dentry", "path->mnt"], "call": "uselib"}, {"reason": ["fd->flags", "path->dentry", "path->mnt"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["path->dentry", "path->mnt"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["path->dentry", "path->mnt"], "call": "getcwd"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["path->dentry", "path->mnt"], "call": "socket"}, {"reason": ["path->dentry", "path->mnt"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags", "path->dentry", "path->mnt"], "call": "perf_event_open"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["path->dentry", "path->mnt"], "call": "quotactl"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["path->dentry", "path->mnt"], "call": "acct"}, {"reason": ["path->dentry", "path->mnt"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["path->dentry", "path->mnt"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["path->dentry", "path->mnt"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["path->dentry", "path->mnt"], "call": "mq_open"}, {"reason": ["path->dentry", "path->mnt"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "setgid": [{"reason": ["cred->user_ns", "task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["cred->user_ns"], "call": "setfsuid"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["cred->user_ns"], "call": "getresuid16"}, {"reason": ["cred->user_ns"], "call": "getresgid"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "ioprio_set"}, {"reason": ["cred->user_ns"], "call": "capset"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["cred->user_ns"], "call": "getresgid16"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["cred->user_ns"], "call": "setfsgid"}, {"reason": ["cred->user_ns"], "call": "unshare"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["cred->user_ns"], "call": "setreuid"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["cred->user_ns"], "call": "epoll_create1"}, {"reason": ["cred->user_ns"], "call": "getresuid"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["cred->user_ns", "cred->sgid", "cred->gid"], "call": "setresgid"}, {"reason": ["cred->user_ns", "cred->sgid", "cred->gid"], "call": "setregid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["cred->user_ns"], "call": "getgroups16"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["cred->user_ns"], "call": "faccessat"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["cred->user_ns"], "call": "setresuid"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["cred->user_ns"], "call": "setuid"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["cred->user_ns"], "call": "getgroups"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "pivot_root": [{"reason": ["path->dentry", "path->mnt"], "call": "eventfd2"}, {"reason": ["dentry->d_inode", "dentry->d_parent", "vfsmount->mnt_flags", "vfsmount->mnt_root"], "call": "mq_unlink"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapoff"}, {"reason": ["path->dentry", "path->mnt"], "call": "memfd_create"}, {"reason": ["path->dentry", "path->mnt"], "call": "remap_file_pages"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup3"}, {"reason": ["path->dentry", "path->mnt"], "call": "unshare"}, {"reason": ["mount->mnt_parent", "mount->mnt_ns", "vfsmount->mnt_flags", "vfsmount->mnt_root"], "call": "umount"}, {"reason": ["dentry->d_inode", "dentry->d_parent"], "call": "mkdirat"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_create1"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_ctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "flock"}, {"reason": ["path->dentry", "path->mnt"], "call": "openat"}, {"reason": ["path->dentry", "path->mnt"], "call": "lookup_dcookie"}, {"reason": ["path->dentry", "path->mnt"], "call": "uselib"}, {"reason": ["dentry->d_inode", "dentry->d_parent"], "call": "renameat2"}, {"reason": ["path->dentry", "path->mnt"], "call": "accept4"}, {"reason": ["path->dentry", "path->mnt"], "call": "socketpair"}, {"reason": ["dentry->d_inode", "vfsmount->mnt_root", "dentry->d_parent", "path->dentry", "path->mnt", "mount->mnt_parent", "mount->mnt_ns", "vfsmount->mnt_flags"], "call": "getcwd"}, {"reason": ["dentry->d_inode", "dentry->d_parent"], "call": "ftruncate"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmat"}, {"reason": ["dentry->d_inode", "dentry->d_parent"], "call": "mknodat"}, {"reason": ["path->dentry", "path->mnt"], "call": "socket"}, {"reason": ["dentry->d_inode", "dentry->d_parent"], "call": "symlinkat"}, {"reason": ["path->dentry", "path->mnt"], "call": "pipe2"}, {"reason": ["path->dentry", "path->mnt"], "call": "perf_event_open"}, {"reason": ["dentry->d_inode", "dentry->d_parent"], "call": "linkat"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmdt"}, {"reason": ["path->dentry", "path->mnt"], "call": "quotactl"}, {"reason": ["vfsmount->mnt_flags", "path->dentry", "path->mnt", "vfsmount->mnt_root"], "call": "acct"}, {"reason": ["path->dentry", "path->mnt"], "call": "open"}, {"reason": ["dentry->d_inode", "dentry->d_parent"], "call": "unlink"}, {"reason": ["dentry->d_inode", "dentry->d_parent"], "call": "rmdir"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup"}, {"reason": ["path->dentry", "nsproxy->mnt_ns", "path->mnt"], "call": "setns"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapon"}, {"reason": ["path->dentry", "path->mnt"], "call": "mmap_pgoff"}, {"reason": ["dentry->d_inode", "vfsmount->mnt_root", "dentry->d_parent", "path->dentry", "path->mnt", "vfsmount->mnt_flags"], "call": "mq_open"}, {"reason": ["dentry->d_inode", "dentry->d_parent"], "call": "unlinkat"}, {"reason": ["path->dentry", "path->mnt"], "call": "open_by_handle_at"}], "getuid16": [{"reason": ["task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["task_struct->cred"], "call": "ioprio_set"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "epoll_wait": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["file->f_op"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["file->f_op"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_op"], "call": "memfd_create"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["file->f_op"], "call": "remap_file_pages"}, {"reason": ["file->f_op"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg", "fd->flags"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["file->f_op"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["file->f_op", "fd->flags"], "call": "epoll_ctl"}, {"reason": ["file->f_op", "fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_op"], "call": "openat"}, {"reason": ["file->f_op"], "call": "uselib"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["file->f_op", "fd->flags"], "call": "accept4"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["file->f_op"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["file->f_op"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_op"], "call": "socket"}, {"reason": ["file->f_op"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["file->f_op", "mm_segment_t->seg", "fd->flags"], "call": "perf_event_open"}, {"reason": ["file->f_op"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_op"], "call": "acct"}, {"reason": ["file->f_op"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_op"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_op", "mm_segment_t->seg"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["mm_segment_t->seg", "fd->flags"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["file->f_op"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["file->f_op"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_op"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["file->f_op"], "call": "mq_open"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}, {"reason": ["file->f_op"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "ioprio_set": [{"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "kill"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_setparam"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "signal"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_setattr"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "setpgid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "getsid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sigaction"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "vfork"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_getparam"}], "capset": [{"reason": ["task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["task_struct->cred"], "call": "ioprio_set"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "delete_module": [{"reason": ["module->exit", "module->init", "module->state"], "call": "init_module"}, {"reason": ["module->exit", "module->init", "module->state"], "call": "finit_module"}], "remap_file_pages": [{"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_file", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "shmdt"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_file", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "brk"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_file", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "get_mempolicy"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_file", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_file", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_file", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "madvise"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_file", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_file", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mremap"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_file", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "prctl"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_file", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "munlock"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_file", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mincore"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_file", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mlockall"}], "dup3": [{"reason": ["files_struct->resize_in_progress", "files_struct->fdt", "fdtable->max_fds"], "call": "unshare"}, {"reason": ["fdtable->max_fds"], "call": "select"}, {"reason": ["files_struct->resize_in_progress", "files_struct->fdt", "fdtable->max_fds"], "call": "dup2"}], "readlinkat": [{"reason": ["path->dentry"], "call": "eventfd2"}, {"reason": ["path->dentry"], "call": "swapoff"}, {"reason": ["path->dentry"], "call": "pivot_root"}, {"reason": ["path->dentry"], "call": "memfd_create"}, {"reason": ["path->dentry"], "call": "remap_file_pages"}, {"reason": ["path->dentry"], "call": "dup3"}, {"reason": ["path->dentry"], "call": "unshare"}, {"reason": ["path->dentry"], "call": "epoll_create1"}, {"reason": ["path->dentry"], "call": "epoll_ctl"}, {"reason": ["path->dentry"], "call": "flock"}, {"reason": ["path->dentry"], "call": "openat"}, {"reason": ["path->dentry"], "call": "lookup_dcookie"}, {"reason": ["path->dentry"], "call": "uselib"}, {"reason": ["path->dentry"], "call": "accept4"}, {"reason": ["path->dentry"], "call": "socketpair"}, {"reason": ["path->dentry"], "call": "getcwd"}, {"reason": ["path->dentry"], "call": "shmat"}, {"reason": ["path->dentry"], "call": "socket"}, {"reason": ["path->dentry"], "call": "pipe2"}, {"reason": ["path->dentry"], "call": "perf_event_open"}, {"reason": ["path->dentry"], "call": "shmdt"}, {"reason": ["path->dentry"], "call": "quotactl"}, {"reason": ["path->dentry"], "call": "acct"}, {"reason": ["path->dentry"], "call": "open"}, {"reason": ["path->dentry"], "call": "dup"}, {"reason": ["path->dentry"], "call": "setns"}, {"reason": ["path->dentry"], "call": "shmctl"}, {"reason": ["path->dentry"], "call": "swapon"}, {"reason": ["path->dentry"], "call": "mmap_pgoff"}, {"reason": ["path->dentry"], "call": "mq_open"}, {"reason": ["path->dentry"], "call": "open_by_handle_at"}], "read": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "getppid": [{"reason": ["task_struct->real_parent"], "call": "keyctl"}, {"reason": ["task_struct->real_parent"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->real_parent"], "call": "msgrcv"}, {"reason": ["task_struct->real_parent"], "call": "kill"}, {"reason": ["task_struct->real_parent"], "call": "sched_getaffinity"}, {"reason": ["task_struct->real_parent"], "call": "sched_setparam"}, {"reason": ["task_struct->real_parent"], "call": "ioprio_set"}, {"reason": ["task_struct->real_parent"], "call": "mq_timedreceive"}, {"reason": ["task_struct->real_parent"], "call": "capget"}, {"reason": ["task_struct->real_parent"], "call": "sched_setaffinity"}, {"reason": ["task_struct->real_parent"], "call": "signal"}, {"reason": ["task_struct->real_parent"], "call": "semtimedop"}, {"reason": ["task_struct->real_parent"], "call": "umount"}, {"reason": ["task_struct->real_parent"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->real_parent"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->real_parent"], "call": "setsid"}, {"reason": ["task_struct->real_parent"], "call": "sigaltstack"}, {"reason": ["task_struct->real_parent"], "call": "sched_setattr"}, {"reason": ["task_struct->real_parent"], "call": "migrate_pages"}, {"reason": ["task_struct->real_parent"], "call": "getitimer"}, {"reason": ["task_struct->real_parent"], "call": "setpgid"}, {"reason": ["task_struct->real_parent"], "call": "getsid"}, {"reason": ["task_struct->real_parent"], "call": "prlimit64"}, {"reason": ["task_struct->real_parent"], "call": "perf_event_open"}, {"reason": ["task_struct->real_parent"], "call": "rt_sigaction"}, {"reason": ["task_struct->real_parent"], "call": "getpgid"}, {"reason": ["task_struct->real_parent"], "call": "getpriority"}, {"reason": ["task_struct->real_parent"], "call": "sigaction"}, {"reason": ["task_struct->real_parent"], "call": "setns"}, {"reason": ["task_struct->real_parent"], "call": "fork"}, {"reason": ["task_struct->real_parent"], "call": "get_robust_list"}, {"reason": ["task_struct->real_parent"], "call": "mq_timedsend"}, {"reason": ["task_struct->real_parent"], "call": "sched_getscheduler"}, {"reason": ["task_struct->real_parent"], "call": "ptrace"}, {"reason": ["task_struct->real_parent"], "call": "sched_getattr"}, {"reason": ["task_struct->real_parent"], "call": "getrusage"}, {"reason": ["task_struct->real_parent"], "call": "sched_setscheduler"}, {"reason": ["task_struct->real_parent"], "call": "setitimer"}, {"reason": ["task_struct->real_parent"], "call": "ioprio_get"}, {"reason": ["task_struct->real_parent"], "call": "vfork"}, {"reason": ["task_struct->real_parent"], "call": "prctl"}, {"reason": ["task_struct->real_parent"], "call": "move_pages"}, {"reason": ["task_struct->real_parent"], "call": "setpriority"}, {"reason": ["task_struct->real_parent"], "call": "clone"}, {"reason": ["task_struct->real_parent"], "call": "sched_getparam"}], "fchown": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["path->dentry"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["path->dentry"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["path->dentry"], "call": "pivot_root"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["path->dentry"], "call": "memfd_create"}, {"reason": ["path->dentry"], "call": "remap_file_pages"}, {"reason": ["path->dentry"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["path->dentry"], "call": "unshare"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["path->dentry"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "path->dentry"], "call": "epoll_ctl"}, {"reason": ["fd->flags", "path->dentry"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["path->dentry"], "call": "openat"}, {"reason": ["path->dentry"], "call": "lookup_dcookie"}, {"reason": ["path->dentry"], "call": "uselib"}, {"reason": ["fd->flags", "path->dentry"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["path->dentry"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["path->dentry"], "call": "getcwd"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["path->dentry"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["path->dentry"], "call": "socket"}, {"reason": ["path->dentry"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags", "path->dentry"], "call": "perf_event_open"}, {"reason": ["path->dentry"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["path->dentry"], "call": "quotactl"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["path->dentry"], "call": "acct"}, {"reason": ["path->dentry"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["path->dentry"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["path->dentry"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["path->dentry"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["path->dentry"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["path->dentry"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["path->dentry"], "call": "mq_open"}, {"reason": ["path->dentry"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "stat": [{"reason": ["__old_kernel_stat->st_nlink", "__old_kernel_stat->st_ino"], "call": "lstat"}, {"reason": ["kstat->ino", "kstat->nlink", "__old_kernel_stat->st_nlink", "kstat->dev", "__old_kernel_stat->st_ino", "kstat->rdev"], "call": "fstat"}, {"reason": ["kstat->ino", "kstat->nlink", "kstat->rdev", "kstat->dev"], "call": "newfstat"}], "ioperm": [{"reason": ["thread_struct->io_bitmap_ptr"], "call": "keyctl"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "rt_sigtimedwait"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "msgrcv"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "kill"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sched_getaffinity"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sched_setparam"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "ioprio_set"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "getppid"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "mq_timedreceive"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "capget"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sched_setaffinity"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "signal"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "semtimedop"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "umount"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sched_rr_get_interval"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "rt_sigprocmask"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "setsid"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sigaltstack"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sched_setattr"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "migrate_pages"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "getitimer"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "setpgid"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "getsid"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "prlimit64"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "perf_event_open"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "rt_sigaction"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "getpgid"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "getpriority"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sigaction"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "setns"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "fork"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "get_robust_list"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "mq_timedsend"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sched_getscheduler"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "ptrace"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sched_getattr"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "getrusage"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sched_setscheduler"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "setitimer"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "ioprio_get"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "vfork"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "prctl"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "move_pages"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "setpriority"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "clone"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sched_getparam"}], "mq_timedreceive": [{"reason": ["msg_msg->m_ts"], "call": "msgrcv"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "dup3"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "flock"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "openat"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "uselib"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "accept4"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "shmat"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "socket"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "acct"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "open"}, {"reason": ["mqueue_inode_info->node_cache", "mq_attr->mq_curmsgs", "file->f_flags", "mq_attr->mq_msgsize"], "call": "mq_getsetattr"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "dup"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "setns"}, {"reason": ["mqueue_inode_info->node_cache", "mq_attr->mq_curmsgs", "msg_msg->m_ts", "mq_attr->mq_msgsize"], "call": "mq_timedsend"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "swapon"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["msg_msg->m_ts"], "call": "msgsnd"}, {"reason": ["mqueue_inode_info->node_cache", "mq_attr->mq_curmsgs", "mq_attr->mq_msgsize"], "call": "mq_notify"}, {"reason": ["file->f_op", "mq_attr->mq_curmsgs", "file->f_mode", "file->f_flags", "mq_attr->mq_msgsize"], "call": "mq_open"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "open_by_handle_at"}], "utime": [{"reason": ["timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["timespec->tv_nsec"], "call": "fchown"}, {"reason": ["timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_nsec"], "call": "uselib"}, {"reason": ["timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_nsec"], "call": "stime"}, {"reason": ["timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["timespec->tv_nsec"], "call": "poll"}, {"reason": ["timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_nsec"], "call": "unlink"}, {"reason": ["timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["timespec->tv_nsec"], "call": "fstat"}, {"reason": ["timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["timespec->tv_nsec"], "call": "newfstat"}, {"reason": ["timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["timespec->tv_nsec"], "call": "ppoll"}], "sched_setaffinity": [{"reason": ["cred->user_ns", "task_struct->real_cred", "task_struct->flags"], "call": "keyctl"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "rt_sigtimedwait"}, {"reason": ["cred->user_ns"], "call": "setfsuid"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "msgrcv"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "kill"}, {"reason": ["cred->user_ns"], "call": "getresuid16"}, {"reason": ["cred->user_ns"], "call": "getresgid"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "sched_getaffinity"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "sched_setparam"}, {"reason": ["cred->user_ns"], "call": "setgid"}, {"reason": ["cred->user_ns", "task_struct->real_cred", "task_struct->flags"], "call": "ioprio_set"}, {"reason": ["cred->user_ns"], "call": "capset"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "getppid"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "mq_timedreceive"}, {"reason": ["cred->user_ns"], "call": "getresgid16"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "capget"}, {"reason": ["cred->user_ns"], "call": "setfsgid"}, {"reason": ["cred->user_ns"], "call": "unshare"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "signal"}, {"reason": ["cred->user_ns", "task_struct->flags"], "call": "setreuid"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "semtimedop"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "umount"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "sched_rr_get_interval"}, {"reason": ["cred->user_ns"], "call": "epoll_create1"}, {"reason": ["cred->user_ns"], "call": "getresuid"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "setsid"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "sigaltstack"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "sched_setattr"}, {"reason": ["cred->user_ns", "task_struct->real_cred", "task_struct->flags"], "call": "migrate_pages"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "getitimer"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "setpgid"}, {"reason": ["cred->user_ns"], "call": "setresgid"}, {"reason": ["cred->user_ns"], "call": "setregid"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "getsid"}, {"reason": ["cred->user_ns", "task_struct->real_cred", "task_struct->flags"], "call": "prlimit64"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "perf_event_open"}, {"reason": ["cred->user_ns"], "call": "getgroups16"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "rt_sigaction"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "getpgid"}, {"reason": ["cred->user_ns", "task_struct->real_cred", "task_struct->flags"], "call": "getpriority"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "sigaction"}, {"reason": ["cred->user_ns"], "call": "faccessat"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "setns"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "fork"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "get_robust_list"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "mq_timedsend"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "sched_getscheduler"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "ptrace"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "sched_getattr"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "getrusage"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "sched_setscheduler"}, {"reason": ["cred->user_ns", "task_struct->flags"], "call": "setresuid"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "setitimer"}, {"reason": ["cred->user_ns", "task_struct->real_cred", "task_struct->flags"], "call": "ioprio_get"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "vfork"}, {"reason": ["cred->user_ns", "task_struct->flags"], "call": "setuid"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "prctl"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "move_pages"}, {"reason": ["cred->user_ns"], "call": "getgroups"}, {"reason": ["cred->user_ns", "task_struct->real_cred", "task_struct->flags"], "call": "setpriority"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "clone"}, {"reason": ["task_struct->real_cred", "task_struct->flags"], "call": "sched_getparam"}], "ustat": [{"reason": ["super_block->s_root"], "call": "syncfs"}, {"reason": ["super_block->s_root"], "call": "umount"}, {"reason": ["super_block->s_root"], "call": "quotactl"}, {"reason": ["super_block->s_root"], "call": "swapon"}], "setfsgid": [{"reason": ["cred->user_ns", "task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["cred->user_ns"], "call": "setfsuid"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["cred->user_ns"], "call": "getresuid16"}, {"reason": ["cred->user_ns"], "call": "getresgid"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["cred->user_ns", "cred->sgid", "cred->gid", "cred->egid", "cred->fsgid"], "call": "setgid"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "ioprio_set"}, {"reason": ["cred->user_ns"], "call": "capset"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["cred->user_ns"], "call": "getresgid16"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["cred->user_ns"], "call": "unshare"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["cred->user_ns"], "call": "setreuid"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["cred->user_ns"], "call": "epoll_create1"}, {"reason": ["cred->user_ns"], "call": "getresuid"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["cred->user_ns", "cred->sgid", "cred->gid", "cred->egid", "cred->fsgid"], "call": "setresgid"}, {"reason": ["cred->user_ns", "cred->sgid", "cred->gid", "cred->egid", "cred->fsgid"], "call": "setregid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["cred->user_ns"], "call": "getgroups16"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["cred->user_ns", "cred->fsgid"], "call": "faccessat"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["cred->user_ns"], "call": "setresuid"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["cred->user_ns"], "call": "setuid"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["cred->user_ns"], "call": "getgroups"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "bpf": [{"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["file->f_op", "file->private_data"], "call": "eventfd2"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["file->f_op", "file->private_data"], "call": "swapoff"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["file->f_op", "file->private_data"], "call": "memfd_create"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["file->f_op", "file->private_data"], "call": "remap_file_pages"}, {"reason": ["file->f_op", "file->private_data"], "call": "dup3"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["file->f_op", "file->private_data"], "call": "epoll_create1"}, {"reason": ["file->f_op", "file->private_data"], "call": "epoll_ctl"}, {"reason": ["file->f_op", "file->private_data"], "call": "flock"}, {"reason": ["file->f_op", "file->private_data"], "call": "openat"}, {"reason": ["file->f_op", "file->private_data"], "call": "uselib"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["file->f_op", "file->private_data"], "call": "accept4"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["file->f_op", "file->private_data"], "call": "socketpair"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["file->f_op", "file->private_data"], "call": "shmat"}, {"reason": ["file->f_op", "file->private_data"], "call": "socket"}, {"reason": ["file->f_op", "file->private_data"], "call": "pipe2"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["file->f_op", "mm_segment_t->seg", "bpf_prog->aux", "file->private_data"], "call": "perf_event_open"}, {"reason": ["file->f_op", "file->private_data"], "call": "shmdt"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["file->f_op", "file->private_data"], "call": "acct"}, {"reason": ["file->f_op", "file->private_data"], "call": "open"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["file->f_op", "file->private_data"], "call": "dup"}, {"reason": ["file->f_op", "mm_segment_t->seg", "file->private_data"], "call": "setns"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["file->f_op", "file->private_data"], "call": "shmctl"}, {"reason": ["file->f_op", "file->private_data"], "call": "swapon"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["file->f_op", "file->private_data"], "call": "mmap_pgoff"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["file->f_op", "file->private_data"], "call": "mq_open"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}, {"reason": ["file->f_op", "file->private_data"], "call": "open_by_handle_at"}], "newstat": [{"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newlstat"}, {"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newfstatat"}, {"reason": ["kstat->size", "kstat->nlink", "kstat->ino", "kstat->rdev", "kstat->dev"], "call": "fstat"}, {"reason": ["stat->st_nlink", "kstat->nlink", "kstat->ino", "kstat->dev", "compat_stat->st_nlink", "kstat->size", "stat->st_ino", "compat_stat->st_ino", "kstat->rdev"], "call": "newfstat"}], "setreuid": [{"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["cred->user", "cred->user_ns"], "call": "setfsuid"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["cred->user", "cred->user_ns"], "call": "getresuid16"}, {"reason": ["cred->user", "cred->user_ns"], "call": "getresgid"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["cred->user", "cred->user_ns"], "call": "setgid"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "ioprio_set"}, {"reason": ["cred->user", "cred->user_ns"], "call": "capset"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["cred->user", "cred->user_ns"], "call": "getresgid16"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["cred->user", "cred->user_ns"], "call": "setfsgid"}, {"reason": ["cred->user", "cred->user_ns"], "call": "unshare"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["cred->user", "cred->user_ns"], "call": "epoll_create1"}, {"reason": ["cred->user", "cred->user_ns"], "call": "getresuid"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["cred->user", "cred->user_ns"], "call": "setresgid"}, {"reason": ["cred->user", "cred->user_ns"], "call": "setregid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["cred->user", "cred->user_ns"], "call": "getgroups16"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["cred->user", "cred->user_ns"], "call": "faccessat"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["cred->uid", "cred->user", "cred->suid", "cred->euid", "cred->user_ns"], "call": "setresuid"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["cred->uid", "cred->user", "cred->suid", "cred->euid", "cred->user_ns"], "call": "setuid"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["cred->user", "cred->user_ns"], "call": "getgroups"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "semtimedop": [{"reason": ["list_head->prev"], "call": "syncfs"}, {"reason": ["list_head->prev"], "call": "keyctl"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["list_head->prev"], "call": "vmsplice"}, {"reason": ["kern_ipc_perm->deleted", "list_head->prev"], "call": "msgrcv"}, {"reason": ["list_head->prev"], "call": "eventfd2"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["list_head->prev"], "call": "kill"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["list_head->prev"], "call": "readahead"}, {"reason": ["list_head->prev"], "call": "timer_delete"}, {"reason": ["list_head->prev"], "call": "sched_getaffinity"}, {"reason": ["list_head->prev"], "call": "sched_setparam"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["list_head->prev"], "call": "setgid"}, {"reason": ["list_head->prev"], "call": "pivot_root"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["list_head->prev"], "call": "ioprio_set"}, {"reason": ["list_head->prev"], "call": "delete_module"}, {"reason": ["list_head->prev"], "call": "remap_file_pages"}, {"reason": ["list_head->prev"], "call": "dup3"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["list_head->prev"], "call": "getppid"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "fchown"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["list_head->prev"], "call": "capget"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "utime"}, {"reason": ["list_head->prev"], "call": "sched_setaffinity"}, {"reason": ["list_head->prev"], "call": "ustat"}, {"reason": ["list_head->prev"], "call": "bpf"}, {"reason": ["list_head->prev"], "call": "unshare"}, {"reason": ["list_head->prev"], "call": "signal"}, {"reason": ["list_head->prev"], "call": "setreuid"}, {"reason": ["list_head->prev"], "call": "umount"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["list_head->prev"], "call": "timer_create"}, {"reason": ["list_head->prev"], "call": "mkdirat"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["list_head->prev"], "call": "epoll_create1"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["list_head->prev"], "call": "tee"}, {"reason": ["kern_ipc_perm->deleted", "sem_array->sem_nsems", "sem_array->use_global_lock", "sem_array->complex_count", "sem_undo->semid", "list_head->prev"], "call": "semctl"}, {"reason": ["list_head->prev"], "call": "sync_file_range"}, {"reason": ["list_head->prev"], "call": "epoll_ctl"}, {"reason": ["list_head->prev"], "call": "flock"}, {"reason": ["list_head->prev"], "call": "openat"}, {"reason": ["list_head->prev"], "call": "lookup_dcookie"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "uselib"}, {"reason": ["list_head->prev"], "call": "renameat2"}, {"reason": ["list_head->prev"], "call": "rt_sigprocmask"}, {"reason": ["list_head->prev"], "call": "accept4"}, {"reason": ["kern_ipc_perm->deleted", "list_head->prev"], "call": "msgctl"}, {"reason": ["list_head->prev"], "call": "reboot"}, {"reason": ["list_head->prev"], "call": "setsid"}, {"reason": ["list_head->prev"], "call": "set_trip_temp"}, {"reason": ["list_head->prev"], "call": "sigaltstack"}, {"reason": ["list_head->prev"], "call": "sched_setattr"}, {"reason": ["list_head->prev"], "call": "inotify_rm_watch"}, {"reason": ["list_head->prev"], "call": "socketpair"}, {"reason": ["list_head->prev"], "call": "migrate_pages"}, {"reason": ["list_head->prev"], "call": "getitimer"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["list_head->prev"], "call": "setpgid"}, {"reason": ["list_head->prev"], "call": "init_module"}, {"reason": ["list_head->prev"], "call": "setresgid"}, {"reason": ["list_head->prev"], "call": "getcwd"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["list_head->prev"], "call": "get_trip_temp"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["list_head->prev"], "call": "setregid"}, {"reason": ["list_head->prev"], "call": "splice"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["list_head->prev"], "call": "getsid"}, {"reason": ["kern_ipc_perm->deleted", "list_head->prev"], "call": "shmat"}, {"reason": ["list_head->prev"], "call": "mknodat"}, {"reason": ["list_head->prev"], "call": "socket"}, {"reason": ["list_head->prev"], "call": "symlinkat"}, {"reason": ["list_head->prev"], "call": "pipe2"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["list_head->prev"], "call": "prlimit64"}, {"reason": ["list_head->prev"], "call": "perf_event_open"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "stime"}, {"reason": ["list_head->prev"], "call": "getgroups16"}, {"reason": ["list_head->prev"], "call": "shmdt"}, {"reason": ["list_head->prev"], "call": "quotactl"}, {"reason": ["list_head->prev"], "call": "rt_sigaction"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["list_head->prev"], "call": "request_key"}, {"reason": ["list_head->prev"], "call": "getpgid"}, {"reason": ["list_head->prev"], "call": "brk"}, {"reason": ["list_head->prev"], "call": "acct"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "poll"}, {"reason": ["list_head->prev"], "call": "open"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "select"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "unlink"}, {"reason": ["list_head->prev"], "call": "exit_group"}, {"reason": ["list_head->prev"], "call": "getpriority"}, {"reason": ["list_head->prev"], "call": "sigaction"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["list_head->prev"], "call": "rmdir"}, {"reason": ["list_head->prev"], "call": "dup"}, {"reason": ["list_head->prev"], "call": "setgroups16"}, {"reason": ["list_head->prev"], "call": "setns"}, {"reason": ["list_head->prev"], "call": "fork"}, {"reason": ["list_head->prev"], "call": "get_mempolicy"}, {"reason": ["list_head->prev"], "call": "io_submit"}, {"reason": ["list_head->prev"], "call": "get_robust_list"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["list_head->prev"], "call": "sched_yield"}, {"reason": ["list_head->prev"], "call": "sched_getscheduler"}, {"reason": ["list_head->prev"], "call": "ptrace"}, {"reason": ["kern_ipc_perm->deleted", "list_head->prev"], "call": "shmctl"}, {"reason": ["list_head->prev"], "call": "munlockall"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "swapon"}, {"reason": ["list_head->prev"], "call": "pkey_mprotect"}, {"reason": ["list_head->prev"], "call": "madvise"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["list_head->prev"], "call": "sched_getattr"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["list_head->prev"], "call": "getrusage"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fstat"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["list_head->prev"], "call": "sched_setscheduler"}, {"reason": ["list_head->prev"], "call": "setresuid"}, {"reason": ["list_head->prev"], "call": "setitimer"}, {"reason": ["list_head->prev"], "call": "ioprio_get"}, {"reason": ["list_head->prev"], "call": "vfork"}, {"reason": ["list_head->prev"], "call": "setuid"}, {"reason": ["list_head->prev"], "call": "io_setup"}, {"reason": ["list_head->prev"], "call": "mprotect"}, {"reason": ["list_head->prev"], "call": "mmap_pgoff"}, {"reason": ["list_head->prev"], "call": "mremap"}, {"reason": ["list_head->prev"], "call": "io_destroy"}, {"reason": ["list_head->prev"], "call": "mbind"}, {"reason": ["list_head->prev"], "call": "prctl"}, {"reason": ["list_head->prev"], "call": "move_pages"}, {"reason": ["list_head->prev"], "call": "timerfd_create"}, {"reason": ["list_head->prev"], "call": "modify_ldt"}, {"reason": ["list_head->prev"], "call": "getgroups"}, {"reason": ["list_head->prev"], "call": "dup2"}, {"reason": ["list_head->prev"], "call": "get_curr_temp"}, {"reason": ["kern_ipc_perm->deleted", "list_head->prev"], "call": "msgsnd"}, {"reason": ["list_head->prev"], "call": "munlock"}, {"reason": ["list_head->prev"], "call": "setpriority"}, {"reason": ["list_head->prev"], "call": "inotify_init1"}, {"reason": ["list_head->prev"], "call": "mincore"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["list_head->prev"], "call": "timer_getoverrun"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "newfstat"}, {"reason": ["list_head->prev"], "call": "kexec_load"}, {"reason": ["list_head->prev"], "call": "clone"}, {"reason": ["list_head->prev"], "call": "mq_open"}, {"reason": ["list_head->prev"], "call": "setgroups"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["list_head->prev"], "call": "sched_getparam"}, {"reason": ["list_head->prev"], "call": "io_cancel"}, {"reason": ["list_head->prev"], "call": "open_by_handle_at"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["list_head->prev"], "call": "finit_module"}, {"reason": ["list_head->prev", "timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["list_head->prev"], "call": "mlockall"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ppoll"}], "umount": [{"reason": ["super_block->s_flags"], "call": "syncfs"}, {"reason": ["task_struct->flags"], "call": "keyctl"}, {"reason": ["task_struct->flags"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->flags"], "call": "msgrcv"}, {"reason": ["path->dentry", "path->mnt"], "call": "eventfd2"}, {"reason": ["vfsmount->mnt_flags", "vfsmount->mnt_root"], "call": "mq_unlink"}, {"reason": ["task_struct->flags"], "call": "kill"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapoff"}, {"reason": ["task_struct->flags"], "call": "sched_getaffinity"}, {"reason": ["task_struct->flags"], "call": "sched_setparam"}, {"reason": ["mount->mnt_ns", "vfsmount->mnt_flags", "path->dentry", "path->mnt", "vfsmount->mnt_root"], "call": "pivot_root"}, {"reason": ["path->dentry", "path->mnt"], "call": "memfd_create"}, {"reason": ["task_struct->flags"], "call": "ioprio_set"}, {"reason": ["path->dentry", "path->mnt"], "call": "remap_file_pages"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup3"}, {"reason": ["task_struct->flags"], "call": "getppid"}, {"reason": ["task_struct->flags"], "call": "mq_timedreceive"}, {"reason": ["task_struct->flags"], "call": "capget"}, {"reason": ["task_struct->flags"], "call": "sched_setaffinity"}, {"reason": ["super_block->s_flags"], "call": "ustat"}, {"reason": ["path->dentry", "path->mnt"], "call": "unshare"}, {"reason": ["task_struct->flags"], "call": "signal"}, {"reason": ["task_struct->flags"], "call": "setreuid"}, {"reason": ["task_struct->flags"], "call": "semtimedop"}, {"reason": ["task_struct->flags"], "call": "sched_rr_get_interval"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_create1"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_ctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "flock"}, {"reason": ["path->dentry", "path->mnt"], "call": "openat"}, {"reason": ["path->dentry", "path->mnt"], "call": "lookup_dcookie"}, {"reason": ["path->dentry", "path->mnt"], "call": "uselib"}, {"reason": ["task_struct->flags"], "call": "rt_sigprocmask"}, {"reason": ["path->dentry", "path->mnt"], "call": "accept4"}, {"reason": ["task_struct->flags"], "call": "setsid"}, {"reason": ["task_struct->flags"], "call": "sigaltstack"}, {"reason": ["task_struct->flags"], "call": "sched_setattr"}, {"reason": ["path->dentry", "path->mnt"], "call": "socketpair"}, {"reason": ["task_struct->flags"], "call": "migrate_pages"}, {"reason": ["task_struct->flags"], "call": "getitimer"}, {"reason": ["task_struct->flags"], "call": "setpgid"}, {"reason": ["mount->mnt_ns", "vfsmount->mnt_flags", "path->dentry", "path->mnt", "vfsmount->mnt_root"], "call": "getcwd"}, {"reason": ["task_struct->flags"], "call": "getsid"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmat"}, {"reason": ["path->dentry", "path->mnt"], "call": "socket"}, {"reason": ["path->dentry", "path->mnt"], "call": "pipe2"}, {"reason": ["task_struct->flags"], "call": "prlimit64"}, {"reason": ["path->dentry", "task_struct->flags", "path->mnt"], "call": "perf_event_open"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmdt"}, {"reason": ["path->dentry", "path->mnt", "super_block->s_flags"], "call": "quotactl"}, {"reason": ["task_struct->flags"], "call": "rt_sigaction"}, {"reason": ["task_struct->flags"], "call": "getpgid"}, {"reason": ["vfsmount->mnt_flags", "path->dentry", "path->mnt", "vfsmount->mnt_root"], "call": "acct"}, {"reason": ["path->dentry", "path->mnt"], "call": "open"}, {"reason": ["task_struct->flags"], "call": "getpriority"}, {"reason": ["task_struct->flags"], "call": "sigaction"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup"}, {"reason": ["path->dentry", "nsproxy->mnt_ns", "task_struct->flags", "path->mnt"], "call": "setns"}, {"reason": ["task_struct->flags"], "call": "fork"}, {"reason": ["task_struct->flags"], "call": "get_robust_list"}, {"reason": ["task_struct->flags"], "call": "mq_timedsend"}, {"reason": ["task_struct->flags"], "call": "sched_getscheduler"}, {"reason": ["task_struct->flags"], "call": "ptrace"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmctl"}, {"reason": ["path->dentry", "path->mnt", "super_block->s_flags"], "call": "swapon"}, {"reason": ["task_struct->flags"], "call": "sched_getattr"}, {"reason": ["task_struct->flags"], "call": "getrusage"}, {"reason": ["task_struct->flags"], "call": "sched_setscheduler"}, {"reason": ["task_struct->flags"], "call": "setresuid"}, {"reason": ["task_struct->flags"], "call": "setitimer"}, {"reason": ["task_struct->flags"], "call": "ioprio_get"}, {"reason": ["task_struct->flags"], "call": "vfork"}, {"reason": ["task_struct->flags"], "call": "setuid"}, {"reason": ["path->dentry", "path->mnt"], "call": "mmap_pgoff"}, {"reason": ["task_struct->flags"], "call": "prctl"}, {"reason": ["task_struct->flags"], "call": "move_pages"}, {"reason": ["task_struct->flags"], "call": "setpriority"}, {"reason": ["task_struct->flags"], "call": "clone"}, {"reason": ["vfsmount->mnt_flags", "path->dentry", "path->mnt", "vfsmount->mnt_root"], "call": "mq_open"}, {"reason": ["task_struct->flags"], "call": "sched_getparam"}, {"reason": ["path->dentry", "path->mnt"], "call": "open_by_handle_at"}], "recvfrom": [{"reason": ["file->f_flags"], "call": "eventfd2"}, {"reason": ["file->f_flags"], "call": "swapoff"}, {"reason": ["file->f_flags"], "call": "memfd_create"}, {"reason": ["file->f_flags"], "call": "remap_file_pages"}, {"reason": ["file->f_flags"], "call": "dup3"}, {"reason": ["file->f_flags"], "call": "epoll_create1"}, {"reason": ["file->f_flags"], "call": "epoll_ctl"}, {"reason": ["file->f_flags"], "call": "flock"}, {"reason": ["file->f_flags"], "call": "openat"}, {"reason": ["file->f_flags"], "call": "uselib"}, {"reason": ["file->f_flags"], "call": "accept4"}, {"reason": ["file->f_flags"], "call": "socketpair"}, {"reason": ["file->f_flags"], "call": "shmat"}, {"reason": ["file->f_flags"], "call": "socket"}, {"reason": ["file->f_flags"], "call": "pipe2"}, {"reason": ["file->f_flags"], "call": "perf_event_open"}, {"reason": ["file->f_flags"], "call": "shmdt"}, {"reason": ["file->f_flags"], "call": "acct"}, {"reason": ["file->f_flags"], "call": "open"}, {"reason": ["file->f_flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_flags"], "call": "dup"}, {"reason": ["file->f_flags"], "call": "setns"}, {"reason": ["file->f_flags"], "call": "shmctl"}, {"reason": ["file->f_flags"], "call": "swapon"}, {"reason": ["file->f_flags"], "call": "mmap_pgoff"}, {"reason": ["file->f_flags"], "call": "mq_open"}, {"reason": ["file->f_flags"], "call": "open_by_handle_at"}], "old_readdir": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "setrlimit": [{"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "keyctl"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "msgrcv"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "kill"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "sched_getaffinity"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "sched_setparam"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "ioprio_set"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "getppid"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "mq_timedreceive"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "capget"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "sched_setaffinity"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "signal"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "semtimedop"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "umount"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "setsid"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "sigaltstack"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "sched_setattr"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "migrate_pages"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "getitimer"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "setpgid"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "getsid"}, {"reason": ["rlimit->rlim_max", "rlimit->rlim_cur"], "call": "old_getrlimit"}, {"reason": ["task_struct->sighand", "rlimit->rlim_max", "task_struct->group_leader", "rlimit->rlim_cur"], "call": "prlimit64"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "perf_event_open"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "rt_sigaction"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "getpgid"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "getpriority"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "sigaction"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "setns"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "fork"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "get_robust_list"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "mq_timedsend"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "sched_getscheduler"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "ptrace"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "sched_getattr"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "getrusage"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "sched_setscheduler"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "setitimer"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "ioprio_get"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "vfork"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "prctl"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "move_pages"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "setpriority"}, {"reason": ["compat_rlimit->rlim_cur", "compat_rlimit->rlim_max"], "call": "getrlimit"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "clone"}, {"reason": ["task_struct->sighand", "task_struct->group_leader"], "call": "sched_getparam"}], "timer_create": [{"reason": ["k_clock->timer_create"], "call": "clock_getres"}, {"reason": ["k_itimer->it_pid", "k_clock->timer_create"], "call": "timer_delete"}, {"reason": ["k_clock->timer_create"], "call": "clock_gettime"}, {"reason": ["k_itimer->it_pid", "k_clock->timer_create"], "call": "timer_settime"}, {"reason": ["k_itimer->it_pid", "k_clock->timer_create"], "call": "timer_gettime"}, {"reason": ["k_clock->timer_create"], "call": "clock_settime"}, {"reason": ["k_itimer->it_pid"], "call": "timer_getoverrun"}, {"reason": ["k_clock->timer_create"], "call": "clock_nanosleep"}, {"reason": ["k_clock->timer_create"], "call": "clock_adjtime"}], "sendto": [{"reason": ["file->f_flags"], "call": "eventfd2"}, {"reason": ["file->f_flags"], "call": "swapoff"}, {"reason": ["file->f_flags"], "call": "memfd_create"}, {"reason": ["file->f_flags"], "call": "remap_file_pages"}, {"reason": ["file->f_flags"], "call": "dup3"}, {"reason": ["file->f_flags"], "call": "epoll_create1"}, {"reason": ["file->f_flags"], "call": "epoll_ctl"}, {"reason": ["file->f_flags"], "call": "flock"}, {"reason": ["file->f_flags"], "call": "openat"}, {"reason": ["file->f_flags"], "call": "uselib"}, {"reason": ["file->f_flags"], "call": "accept4"}, {"reason": ["file->f_flags"], "call": "socketpair"}, {"reason": ["file->f_flags"], "call": "shmat"}, {"reason": ["file->f_flags"], "call": "socket"}, {"reason": ["file->f_flags"], "call": "pipe2"}, {"reason": ["file->f_flags"], "call": "perf_event_open"}, {"reason": ["file->f_flags"], "call": "shmdt"}, {"reason": ["file->f_flags"], "call": "acct"}, {"reason": ["file->f_flags"], "call": "open"}, {"reason": ["file->f_flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_flags"], "call": "dup"}, {"reason": ["file->f_flags"], "call": "setns"}, {"reason": ["file->f_flags"], "call": "shmctl"}, {"reason": ["file->f_flags"], "call": "swapon"}, {"reason": ["file->f_flags"], "call": "mmap_pgoff"}, {"reason": ["file->f_flags"], "call": "mq_open"}, {"reason": ["file->f_flags"], "call": "open_by_handle_at"}], "mkdirat": [{"reason": ["super_block->s_flags"], "call": "syncfs"}, {"reason": ["super_block->s_flags"], "call": "ustat"}, {"reason": ["super_block->s_flags"], "call": "umount"}, {"reason": ["super_block->s_flags"], "call": "quotactl"}, {"reason": ["super_block->s_flags"], "call": "swapon"}], "lgetxattr": [{"reason": ["path->dentry"], "call": "eventfd2"}, {"reason": ["path->dentry"], "call": "swapoff"}, {"reason": ["path->dentry"], "call": "pivot_root"}, {"reason": ["path->dentry"], "call": "memfd_create"}, {"reason": ["path->dentry"], "call": "remap_file_pages"}, {"reason": ["path->dentry"], "call": "dup3"}, {"reason": ["path->dentry"], "call": "unshare"}, {"reason": ["path->dentry"], "call": "epoll_create1"}, {"reason": ["path->dentry"], "call": "epoll_ctl"}, {"reason": ["path->dentry"], "call": "flock"}, {"reason": ["path->dentry"], "call": "openat"}, {"reason": ["path->dentry"], "call": "lookup_dcookie"}, {"reason": ["path->dentry"], "call": "uselib"}, {"reason": ["path->dentry"], "call": "accept4"}, {"reason": ["path->dentry"], "call": "socketpair"}, {"reason": ["path->dentry"], "call": "getcwd"}, {"reason": ["path->dentry"], "call": "shmat"}, {"reason": ["path->dentry"], "call": "socket"}, {"reason": ["path->dentry"], "call": "pipe2"}, {"reason": ["path->dentry"], "call": "perf_event_open"}, {"reason": ["path->dentry"], "call": "shmdt"}, {"reason": ["path->dentry"], "call": "quotactl"}, {"reason": ["path->dentry"], "call": "acct"}, {"reason": ["path->dentry"], "call": "open"}, {"reason": ["path->dentry"], "call": "dup"}, {"reason": ["path->dentry"], "call": "setns"}, {"reason": ["path->dentry"], "call": "shmctl"}, {"reason": ["path->dentry"], "call": "swapon"}, {"reason": ["path->dentry"], "call": "mmap_pgoff"}, {"reason": ["path->dentry"], "call": "mq_open"}, {"reason": ["path->dentry"], "call": "open_by_handle_at"}], "linkat": [{"reason": ["path->mnt"], "call": "eventfd2"}, {"reason": ["path->mnt"], "call": "swapoff"}, {"reason": ["path->mnt"], "call": "pivot_root"}, {"reason": ["path->mnt"], "call": "memfd_create"}, {"reason": ["path->mnt"], "call": "remap_file_pages"}, {"reason": ["path->mnt"], "call": "dup3"}, {"reason": ["path->mnt"], "call": "unshare"}, {"reason": ["path->mnt"], "call": "epoll_create1"}, {"reason": ["path->mnt"], "call": "epoll_ctl"}, {"reason": ["path->mnt"], "call": "flock"}, {"reason": ["path->mnt"], "call": "openat"}, {"reason": ["path->mnt"], "call": "lookup_dcookie"}, {"reason": ["path->mnt"], "call": "uselib"}, {"reason": ["path->mnt"], "call": "accept4"}, {"reason": ["path->mnt"], "call": "socketpair"}, {"reason": ["path->mnt"], "call": "getcwd"}, {"reason": ["path->mnt"], "call": "shmat"}, {"reason": ["path->mnt"], "call": "socket"}, {"reason": ["path->mnt"], "call": "pipe2"}, {"reason": ["path->mnt"], "call": "perf_event_open"}, {"reason": ["path->mnt"], "call": "shmdt"}, {"reason": ["path->mnt"], "call": "quotactl"}, {"reason": ["path->mnt"], "call": "acct"}, {"reason": ["path->mnt"], "call": "open"}, {"reason": ["path->mnt"], "call": "dup"}, {"reason": ["path->mnt"], "call": "setns"}, {"reason": ["path->mnt"], "call": "shmctl"}, {"reason": ["path->mnt"], "call": "swapon"}, {"reason": ["path->mnt"], "call": "mmap_pgoff"}, {"reason": ["path->mnt"], "call": "mq_open"}, {"reason": ["path->mnt"], "call": "open_by_handle_at"}], "getresuid16": [{"reason": ["task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["task_struct->cred"], "call": "ioprio_set"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "newuname": [{"reason": ["task_struct->personality"], "call": "keyctl"}, {"reason": ["task_struct->personality"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality"], "call": "msgrcv"}, {"reason": ["task_struct->personality"], "call": "kill"}, {"reason": ["task_struct->personality"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality"], "call": "sched_setparam"}, {"reason": ["task_struct->personality"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["task_struct->personality"], "call": "getppid"}, {"reason": ["task_struct->personality"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality"], "call": "capget"}, {"reason": ["task_struct->personality"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality"], "call": "signal"}, {"reason": ["task_struct->personality"], "call": "semtimedop"}, {"reason": ["task_struct->personality"], "call": "umount"}, {"reason": ["task_struct->personality"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->personality"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality"], "call": "setsid"}, {"reason": ["task_struct->personality"], "call": "sigaltstack"}, {"reason": ["task_struct->personality"], "call": "sched_setattr"}, {"reason": ["task_struct->personality"], "call": "migrate_pages"}, {"reason": ["task_struct->personality"], "call": "getitimer"}, {"reason": ["task_struct->personality"], "call": "setpgid"}, {"reason": ["task_struct->personality"], "call": "getsid"}, {"reason": ["task_struct->personality"], "call": "prlimit64"}, {"reason": ["task_struct->personality"], "call": "perf_event_open"}, {"reason": ["task_struct->personality"], "call": "rt_sigaction"}, {"reason": ["task_struct->personality"], "call": "getpgid"}, {"reason": ["task_struct->personality"], "call": "getpriority"}, {"reason": ["task_struct->personality"], "call": "sigaction"}, {"reason": ["task_struct->personality"], "call": "setns"}, {"reason": ["task_struct->personality"], "call": "fork"}, {"reason": ["task_struct->personality"], "call": "get_robust_list"}, {"reason": ["task_struct->personality"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality"], "call": "ptrace"}, {"reason": ["task_struct->personality"], "call": "sched_getattr"}, {"reason": ["task_struct->personality"], "call": "getrusage"}, {"reason": ["task_struct->personality"], "call": "sched_setscheduler"}, {"reason": ["task_struct->personality"], "call": "setitimer"}, {"reason": ["task_struct->personality"], "call": "ioprio_get"}, {"reason": ["task_struct->personality"], "call": "vfork"}, {"reason": ["task_struct->personality"], "call": "prctl"}, {"reason": ["task_struct->personality"], "call": "move_pages"}, {"reason": ["task_struct->personality"], "call": "setpriority"}, {"reason": ["task_struct->personality"], "call": "clone"}, {"reason": ["task_struct->personality"], "call": "sched_getparam"}], "epoll_create1": [{"reason": ["cred->user", "task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["cred->user"], "call": "setfsuid"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["cred->user"], "call": "getresuid16"}, {"reason": ["cred->user"], "call": "getresgid"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["cred->user"], "call": "setgid"}, {"reason": ["cred->user", "task_struct->cred"], "call": "ioprio_set"}, {"reason": ["cred->user"], "call": "capset"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["cred->user"], "call": "getresgid16"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["cred->user", "task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["cred->user"], "call": "setfsgid"}, {"reason": ["cred->user"], "call": "unshare"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["cred->user"], "call": "setreuid"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["cred->user"], "call": "getresuid"}, {"reason": ["eventpoll->ws", "eventpoll->user"], "call": "epoll_ctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["cred->user", "task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["cred->user"], "call": "setresgid"}, {"reason": ["cred->user"], "call": "setregid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["cred->user", "task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["cred->user"], "call": "getgroups16"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["cred->user", "task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["cred->user"], "call": "faccessat"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["eventpoll->ws", "eventpoll->user"], "call": "epoll_wait"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["cred->user"], "call": "setresuid"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["cred->user", "task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["cred->user"], "call": "setuid"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["cred->user"], "call": "getgroups"}, {"reason": ["cred->user", "task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "olduname": [{"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "kill"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "capget"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "signal"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "umount"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "setsid"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "getsid"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "setns"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "fork"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "vfork"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "prctl"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "clone"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sched_getparam"}], "tee": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["fd->flags", "file->f_mode"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["fd->flags", "file->f_mode"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "semctl": [{"reason": ["sem_array->sem_nsems"], "call": "semtimedop"}], "syslog": [{"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "setns"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}], "rt_sigqueueinfo": [{"reason": ["siginfo->si_code"], "call": "rt_sigtimedwait"}, {"reason": ["siginfo->si_code"], "call": "kill"}, {"reason": ["siginfo->si_code"], "call": "timer_create"}, {"reason": ["siginfo->si_code"], "call": "tgkill"}, {"reason": ["siginfo->si_code"], "call": "rt_tgsigqueueinfo"}, {"reason": ["siginfo->si_code"], "call": "rt_sigreturn"}, {"reason": ["siginfo->si_code"], "call": "tkill"}], "sync_file_range": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "llseek": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "getgid": [{"reason": ["task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["task_struct->cred"], "call": "ioprio_set"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "lsetxattr": [{"reason": ["path->dentry", "path->mnt"], "call": "eventfd2"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapoff"}, {"reason": ["path->dentry", "path->mnt"], "call": "pivot_root"}, {"reason": ["path->dentry", "path->mnt"], "call": "memfd_create"}, {"reason": ["path->dentry", "path->mnt"], "call": "remap_file_pages"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup3"}, {"reason": ["path->dentry", "path->mnt"], "call": "unshare"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_create1"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_ctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "flock"}, {"reason": ["path->dentry", "path->mnt"], "call": "openat"}, {"reason": ["path->dentry", "path->mnt"], "call": "lookup_dcookie"}, {"reason": ["path->dentry", "path->mnt"], "call": "uselib"}, {"reason": ["path->dentry", "path->mnt"], "call": "accept4"}, {"reason": ["path->dentry", "path->mnt"], "call": "socketpair"}, {"reason": ["path->dentry", "path->mnt"], "call": "getcwd"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmat"}, {"reason": ["path->dentry", "path->mnt"], "call": "socket"}, {"reason": ["path->dentry", "path->mnt"], "call": "pipe2"}, {"reason": ["path->dentry", "path->mnt"], "call": "perf_event_open"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmdt"}, {"reason": ["path->dentry", "path->mnt"], "call": "quotactl"}, {"reason": ["path->dentry", "path->mnt"], "call": "acct"}, {"reason": ["path->dentry", "path->mnt"], "call": "open"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup"}, {"reason": ["path->dentry", "path->mnt"], "call": "setns"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapon"}, {"reason": ["path->dentry", "path->mnt"], "call": "mmap_pgoff"}, {"reason": ["path->dentry", "path->mnt"], "call": "mq_open"}, {"reason": ["path->dentry", "path->mnt"], "call": "open_by_handle_at"}], "pwritev": [{"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "llistxattr": [{"reason": ["path->dentry"], "call": "eventfd2"}, {"reason": ["path->dentry"], "call": "swapoff"}, {"reason": ["path->dentry"], "call": "pivot_root"}, {"reason": ["path->dentry"], "call": "memfd_create"}, {"reason": ["path->dentry"], "call": "remap_file_pages"}, {"reason": ["path->dentry"], "call": "dup3"}, {"reason": ["path->dentry"], "call": "unshare"}, {"reason": ["path->dentry"], "call": "epoll_create1"}, {"reason": ["path->dentry"], "call": "epoll_ctl"}, {"reason": ["path->dentry"], "call": "flock"}, {"reason": ["path->dentry"], "call": "openat"}, {"reason": ["path->dentry"], "call": "lookup_dcookie"}, {"reason": ["path->dentry"], "call": "uselib"}, {"reason": ["path->dentry"], "call": "accept4"}, {"reason": ["path->dentry"], "call": "socketpair"}, {"reason": ["path->dentry"], "call": "getcwd"}, {"reason": ["path->dentry"], "call": "shmat"}, {"reason": ["path->dentry"], "call": "socket"}, {"reason": ["path->dentry"], "call": "pipe2"}, {"reason": ["path->dentry"], "call": "perf_event_open"}, {"reason": ["path->dentry"], "call": "shmdt"}, {"reason": ["path->dentry"], "call": "quotactl"}, {"reason": ["path->dentry"], "call": "acct"}, {"reason": ["path->dentry"], "call": "open"}, {"reason": ["path->dentry"], "call": "dup"}, {"reason": ["path->dentry"], "call": "setns"}, {"reason": ["path->dentry"], "call": "shmctl"}, {"reason": ["path->dentry"], "call": "swapon"}, {"reason": ["path->dentry"], "call": "mmap_pgoff"}, {"reason": ["path->dentry"], "call": "mq_open"}, {"reason": ["path->dentry"], "call": "open_by_handle_at"}], "tgkill": [{"reason": ["task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["task_struct->cred"], "call": "ioprio_set"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "pselect6": [{"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg", "timespec->tv_sec", "timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchown"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg", "timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "utime"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg", "timespec->tv_sec", "timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["mm_segment_t->seg", "timespec->tv_sec", "timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "uselib"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "stime"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "poll"}, {"reason": ["compat_timespec->tv_sec", "compat_timespec->tv_nsec", "timespec->tv_sec", "timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlink"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["compat_timespec->tv_sec", "compat_timespec->tv_nsec", "timespec->tv_sec", "timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["mm_segment_t->seg"], "call": "setns"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg", "timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fstat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "newfstat"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["compat_timespec->tv_sec", "compat_timespec->tv_nsec", "timespec->tv_sec", "timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["compat_timespec->tv_sec", "compat_timespec->tv_nsec", "timespec->tv_sec", "timespec->tv_nsec"], "call": "ppoll"}], "uselib": [{"reason": ["super_block->s_iflags"], "call": "syncfs"}, {"reason": ["vfsmount->mnt_flags"], "call": "mq_unlink"}, {"reason": ["vfsmount->mnt_flags"], "call": "pivot_root"}, {"reason": ["super_block->s_iflags"], "call": "ustat"}, {"reason": ["vfsmount->mnt_flags", "super_block->s_iflags"], "call": "umount"}, {"reason": ["vfsmount->mnt_flags"], "call": "getcwd"}, {"reason": ["super_block->s_iflags"], "call": "quotactl"}, {"reason": ["vfsmount->mnt_flags"], "call": "acct"}, {"reason": ["super_block->s_iflags"], "call": "swapon"}, {"reason": ["vfsmount->mnt_flags"], "call": "mq_open"}], "sysfs": [{"reason": ["filename->name"], "call": "mq_unlink"}, {"reason": ["filename->name"], "call": "swapoff"}, {"reason": ["filename->name"], "call": "openat"}, {"reason": ["filename->name"], "call": "uselib"}, {"reason": ["filename->name"], "call": "renameat2"}, {"reason": ["filename->name"], "call": "symlinkat"}, {"reason": ["filename->name"], "call": "quotactl"}, {"reason": ["filename->name"], "call": "acct"}, {"reason": ["filename->name"], "call": "open"}, {"reason": ["filename->name"], "call": "unlink"}, {"reason": ["filename->name"], "call": "rmdir"}, {"reason": ["filename->name"], "call": "swapon"}, {"reason": ["filename->name"], "call": "mq_open"}, {"reason": ["filename->name"], "call": "unlinkat"}], "msgctl": [{"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["ipc_namespace->msg_ctlmnb", "mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["ipc_namespace->msg_ctlmnb"], "call": "mq_unlink"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["ipc_namespace->msg_ctlmnb"], "call": "msgget"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["ipc_namespace->msg_ctlmnb", "mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["ipc_namespace->msg_ctlmnb"], "call": "semctl"}, {"reason": ["ipc_namespace->msg_ctlmnb"], "call": "shmget"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["ipc_namespace->msg_ctlmnb"], "call": "semget"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["ipc_namespace->msg_ctlmnb"], "call": "shmat"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["ipc_namespace->msg_ctlmnb", "mm_segment_t->seg"], "call": "setns"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["ipc_namespace->msg_ctlmnb"], "call": "shmctl"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["ipc_namespace->msg_ctlmnb"], "call": "msgsnd"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["ipc_namespace->msg_ctlmnb"], "call": "mq_open"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}], "reboot": [{"reason": ["pid_namespace->user_ns"], "call": "perf_event_open"}, {"reason": ["pid_namespace->user_ns"], "call": "acct"}, {"reason": ["pid_namespace->user_ns"], "call": "setns"}], "fremovexattr": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "setsid": [{"reason": ["signal_struct->leader"], "call": "timer_create"}, {"reason": ["signal_struct->leader"], "call": "exit_group"}], "timerfd_create": [{"reason": ["timerfd_ctx->clockid"], "call": "timerfd_gettime"}, {"reason": ["timerfd_ctx->clockid"], "call": "timerfd_settime"}], "set_trip_temp": [{"reason": ["pkg_device->cpu", "pkg_device->tj_max"], "call": "get_trip_temp"}, {"reason": ["pkg_device->cpu", "pkg_device->tj_max"], "call": "get_curr_temp"}], "sched_setattr": [{"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "setns"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["mm_segment_t->seg", "sched_attr->sched_policy"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}], "inotify_rm_watch": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["file->f_op"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["file->f_op"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_op"], "call": "memfd_create"}, {"reason": ["file->f_op"], "call": "remap_file_pages"}, {"reason": ["file->f_op"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["file->f_op"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["file->f_op", "fd->flags"], "call": "epoll_ctl"}, {"reason": ["file->f_op", "fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_op"], "call": "openat"}, {"reason": ["file->f_op"], "call": "uselib"}, {"reason": ["file->f_op", "fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["file->f_op"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["file->f_op"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_op"], "call": "socket"}, {"reason": ["file->f_op"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["file->f_op", "fd->flags"], "call": "perf_event_open"}, {"reason": ["file->f_op"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_op"], "call": "acct"}, {"reason": ["file->f_op"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_op"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_op"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_op"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["file->f_op"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_op"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["file->f_op"], "call": "mq_open"}, {"reason": ["file->f_op"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "renameat2": [{"reason": ["filename->refcnt", "filename->name"], "call": "sysfs"}, {"reason": ["path->dentry", "path->mnt"], "call": "eventfd2"}, {"reason": ["dentry->d_inode", "filename->refcnt", "filename->name"], "call": "mq_unlink"}, {"reason": ["filename->refcnt", "filename->name", "path->dentry", "path->mnt"], "call": "swapoff"}, {"reason": ["dentry->d_inode", "path->dentry", "path->mnt"], "call": "pivot_root"}, {"reason": ["path->dentry", "path->mnt"], "call": "memfd_create"}, {"reason": ["path->dentry", "path->mnt"], "call": "remap_file_pages"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup3"}, {"reason": ["path->dentry", "path->mnt"], "call": "unshare"}, {"reason": ["dentry->d_inode"], "call": "mkdirat"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_create1"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_ctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "flock"}, {"reason": ["filename->refcnt", "filename->name", "path->dentry", "path->mnt"], "call": "openat"}, {"reason": ["path->dentry", "path->mnt"], "call": "lookup_dcookie"}, {"reason": ["filename->refcnt", "filename->name", "path->dentry", "path->mnt"], "call": "uselib"}, {"reason": ["path->dentry", "path->mnt"], "call": "accept4"}, {"reason": ["path->dentry", "path->mnt"], "call": "socketpair"}, {"reason": ["dentry->d_inode", "path->dentry", "path->mnt"], "call": "getcwd"}, {"reason": ["dentry->d_inode"], "call": "ftruncate"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmat"}, {"reason": ["dentry->d_inode"], "call": "mknodat"}, {"reason": ["path->dentry", "path->mnt"], "call": "socket"}, {"reason": ["dentry->d_inode", "filename->refcnt", "filename->name"], "call": "symlinkat"}, {"reason": ["path->dentry", "path->mnt"], "call": "pipe2"}, {"reason": ["path->dentry", "path->mnt"], "call": "perf_event_open"}, {"reason": ["dentry->d_inode"], "call": "linkat"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmdt"}, {"reason": ["filename->refcnt", "filename->name", "path->dentry", "path->mnt"], "call": "quotactl"}, {"reason": ["filename->refcnt", "filename->name", "path->dentry", "path->mnt"], "call": "acct"}, {"reason": ["filename->refcnt", "filename->name", "path->dentry", "path->mnt"], "call": "open"}, {"reason": ["dentry->d_inode", "filename->refcnt", "filename->name"], "call": "unlink"}, {"reason": ["dentry->d_inode", "filename->refcnt", "filename->name"], "call": "rmdir"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup"}, {"reason": ["path->dentry", "path->mnt"], "call": "setns"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmctl"}, {"reason": ["filename->refcnt", "filename->name", "path->dentry", "path->mnt"], "call": "swapon"}, {"reason": ["path->dentry", "path->mnt"], "call": "mmap_pgoff"}, {"reason": ["dentry->d_inode", "filename->refcnt", "filename->name", "path->dentry", "path->mnt"], "call": "mq_open"}, {"reason": ["dentry->d_inode", "filename->refcnt", "filename->name"], "call": "unlinkat"}, {"reason": ["path->dentry", "path->mnt"], "call": "open_by_handle_at"}], "keyctl": [{"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "rt_sigtimedwait"}, {"reason": ["cred->session_keyring"], "call": "setfsuid"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "msgrcv"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "kill"}, {"reason": ["cred->session_keyring"], "call": "getresuid16"}, {"reason": ["cred->session_keyring"], "call": "getresgid"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "sched_getaffinity"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "sched_setparam"}, {"reason": ["cred->sgid", "cred->session_keyring", "cred->egid", "cred->gid"], "call": "setgid"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "cred->session_keyring", "task_struct->cred", "task_struct->pid"], "call": "ioprio_set"}, {"reason": ["cred->session_keyring"], "call": "capset"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "getppid"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "mq_timedreceive"}, {"reason": ["cred->session_keyring"], "call": "getresgid16"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "capget"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "cred->session_keyring", "task_struct->cred", "task_struct->pid"], "call": "sched_setaffinity"}, {"reason": ["cred->session_keyring"], "call": "setfsgid"}, {"reason": ["cred->session_keyring"], "call": "unshare"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "signal"}, {"reason": ["cred->uid", "cred->euid", "cred->suid", "cred->session_keyring"], "call": "setreuid"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "semtimedop"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "umount"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "sched_rr_get_interval"}, {"reason": ["cred->session_keyring"], "call": "epoll_create1"}, {"reason": ["cred->session_keyring"], "call": "getresuid"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "setsid"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "sigaltstack"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "sched_setattr"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "cred->session_keyring", "task_struct->cred", "task_struct->pid"], "call": "migrate_pages"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "getitimer"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "setpgid"}, {"reason": ["cred->sgid", "cred->session_keyring", "cred->egid", "cred->gid"], "call": "setresgid"}, {"reason": ["cred->sgid", "cred->session_keyring", "cred->egid", "cred->gid"], "call": "setregid"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "getsid"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "cred->session_keyring", "task_struct->cred", "task_struct->pid"], "call": "prlimit64"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "perf_event_open"}, {"reason": ["cred->session_keyring"], "call": "getgroups16"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "rt_sigaction"}, {"reason": ["key_type->read", "key_type->name", "key->quotalen", "key->serial", "key->description", "key->perm"], "call": "request_key"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "getpgid"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "cred->session_keyring", "task_struct->cred", "task_struct->pid"], "call": "getpriority"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "sigaction"}, {"reason": ["cred->session_keyring"], "call": "faccessat"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "setns"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "fork"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "get_robust_list"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "mq_timedsend"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "sched_getscheduler"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "ptrace"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "sched_getattr"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "getrusage"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "sched_setscheduler"}, {"reason": ["cred->uid", "cred->euid", "cred->suid", "cred->session_keyring"], "call": "setresuid"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "setitimer"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "cred->session_keyring", "task_struct->cred", "task_struct->pid"], "call": "ioprio_get"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "vfork"}, {"reason": ["cred->uid", "cred->euid", "cred->suid", "cred->session_keyring"], "call": "setuid"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "prctl"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "move_pages"}, {"reason": ["cred->session_keyring"], "call": "getgroups"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "cred->session_keyring", "task_struct->cred", "task_struct->pid"], "call": "setpriority"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "clone"}, {"reason": ["task_struct->mm", "task_struct->real_cred", "task_struct->cred", "task_struct->pid"], "call": "sched_getparam"}], "settimeofday": [{"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "waitid"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "adjtimex"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "getitimer"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "select"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "wait4"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "getrusage"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "setitimer"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "clock_adjtime"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "alarm"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "ppoll"}], "utimensat": [{"reason": ["timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["timespec->tv_nsec"], "call": "fchown"}, {"reason": ["timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["timespec->tv_nsec"], "call": "utime"}, {"reason": ["timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_nsec"], "call": "uselib"}, {"reason": ["timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_nsec"], "call": "stime"}, {"reason": ["timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["timespec->tv_nsec"], "call": "poll"}, {"reason": ["timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_nsec"], "call": "unlink"}, {"reason": ["timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["timespec->tv_nsec"], "call": "fstat"}, {"reason": ["timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["timespec->tv_nsec"], "call": "newfstat"}, {"reason": ["timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["timespec->tv_nsec"], "call": "ppoll"}], "fcntl": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["fd->flags", "file->f_mode"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["fd->flags", "file->f_mode"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "migrate_pages": [{"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "msgrcv"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "kill"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "sched_setparam"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "ioprio_set"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "capget"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "signal"}, {"reason": ["cred->uid", "cred->euid", "cred->suid"], "call": "setreuid"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "umount"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "setsid"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "setpgid"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "getsid"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "perf_event_open"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "getpgid"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "sigaction"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "setns"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "fork"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "ptrace"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["cred->uid", "cred->euid", "cred->suid"], "call": "setresuid"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "vfork"}, {"reason": ["cred->uid", "cred->euid", "cred->suid"], "call": "setuid"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "prctl"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "move_pages"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "clone"}, {"reason": ["mm_segment_t->seg", "task_struct->real_cred", "task_struct->cred"], "call": "sched_getparam"}], "getitimer": [{"reason": ["signal_struct->it_real_incr"], "call": "timer_create"}, {"reason": ["signal_struct->it_real_incr"], "call": "exit_group"}, {"reason": ["signal_struct->it_real_incr"], "call": "setitimer"}], "fchmodat": [{"reason": ["path->dentry", "path->mnt"], "call": "eventfd2"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapoff"}, {"reason": ["path->dentry", "path->mnt"], "call": "pivot_root"}, {"reason": ["path->dentry", "path->mnt"], "call": "memfd_create"}, {"reason": ["path->dentry", "path->mnt"], "call": "remap_file_pages"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup3"}, {"reason": ["path->dentry", "path->mnt"], "call": "unshare"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_create1"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_ctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "flock"}, {"reason": ["path->dentry", "path->mnt"], "call": "openat"}, {"reason": ["path->dentry", "path->mnt"], "call": "lookup_dcookie"}, {"reason": ["path->dentry", "path->mnt"], "call": "uselib"}, {"reason": ["path->dentry", "path->mnt"], "call": "accept4"}, {"reason": ["path->dentry", "path->mnt"], "call": "socketpair"}, {"reason": ["path->dentry", "path->mnt"], "call": "getcwd"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmat"}, {"reason": ["path->dentry", "path->mnt"], "call": "socket"}, {"reason": ["path->dentry", "path->mnt"], "call": "pipe2"}, {"reason": ["path->dentry", "path->mnt"], "call": "perf_event_open"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmdt"}, {"reason": ["path->dentry", "path->mnt"], "call": "quotactl"}, {"reason": ["path->dentry", "path->mnt"], "call": "acct"}, {"reason": ["path->dentry", "path->mnt"], "call": "open"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup"}, {"reason": ["path->dentry", "path->mnt"], "call": "setns"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapon"}, {"reason": ["path->dentry", "path->mnt"], "call": "mmap_pgoff"}, {"reason": ["path->dentry", "path->mnt"], "call": "mq_open"}, {"reason": ["path->dentry", "path->mnt"], "call": "open_by_handle_at"}], "lstat": [{"reason": ["__old_kernel_stat->st_nlink", "__old_kernel_stat->st_ino"], "call": "stat"}, {"reason": ["kstat->ino", "kstat->nlink", "__old_kernel_stat->st_nlink", "kstat->dev", "__old_kernel_stat->st_ino", "kstat->rdev"], "call": "fstat"}, {"reason": ["kstat->ino", "kstat->nlink", "kstat->rdev", "kstat->dev"], "call": "newfstat"}], "init_module": [{"reason": ["module->args", "module->kp", "module_layout->base", "module_layout->size", "module->num_kp"], "call": "delete_module"}, {"reason": ["module->args", "load_info->num_debug", "module->kp", "load_info->debug", "load_info->hdr", "load_info->len", "module_layout->size", "module_layout->base", "module->num_kp"], "call": "finit_module"}], "setresgid": [{"reason": ["cred->user_ns", "task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["cred->user_ns"], "call": "setfsuid"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["cred->user_ns"], "call": "getresuid16"}, {"reason": ["cred->user_ns"], "call": "getresgid"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["cred->user_ns", "cred->sgid", "cred->egid", "cred->gid"], "call": "setgid"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "ioprio_set"}, {"reason": ["cred->user_ns"], "call": "capset"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["cred->user_ns"], "call": "getresgid16"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["cred->user_ns"], "call": "setfsgid"}, {"reason": ["cred->user_ns"], "call": "unshare"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["cred->user_ns"], "call": "setreuid"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["cred->user_ns"], "call": "epoll_create1"}, {"reason": ["cred->user_ns"], "call": "getresuid"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["cred->user_ns", "cred->sgid", "cred->egid", "cred->gid"], "call": "setregid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["cred->user_ns"], "call": "getgroups16"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["cred->user_ns"], "call": "faccessat"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["cred->user_ns"], "call": "setresuid"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["cred->user_ns"], "call": "setuid"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["cred->user_ns"], "call": "getgroups"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "getcwd": [{"reason": ["path->dentry", "path->mnt"], "call": "eventfd2"}, {"reason": ["dentry->d_parent", "vfsmount->mnt_root"], "call": "mq_unlink"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapoff"}, {"reason": ["dentry->d_parent", "path->dentry", "path->mnt", "vfsmount->mnt_root"], "call": "pivot_root"}, {"reason": ["path->dentry", "path->mnt"], "call": "memfd_create"}, {"reason": ["path->dentry", "path->mnt"], "call": "remap_file_pages"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup3"}, {"reason": ["path->dentry", "path->mnt"], "call": "unshare"}, {"reason": ["vfsmount->mnt_root"], "call": "umount"}, {"reason": ["dentry->d_parent"], "call": "mkdirat"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_create1"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_ctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "flock"}, {"reason": ["path->dentry", "path->mnt"], "call": "openat"}, {"reason": ["path->dentry", "path->mnt"], "call": "lookup_dcookie"}, {"reason": ["path->dentry", "path->mnt"], "call": "uselib"}, {"reason": ["dentry->d_parent"], "call": "renameat2"}, {"reason": ["path->dentry", "path->mnt"], "call": "accept4"}, {"reason": ["path->dentry", "path->mnt"], "call": "socketpair"}, {"reason": ["dentry->d_parent"], "call": "ftruncate"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmat"}, {"reason": ["dentry->d_parent"], "call": "mknodat"}, {"reason": ["path->dentry", "path->mnt"], "call": "socket"}, {"reason": ["dentry->d_parent"], "call": "symlinkat"}, {"reason": ["path->dentry", "path->mnt"], "call": "pipe2"}, {"reason": ["path->dentry", "path->mnt"], "call": "perf_event_open"}, {"reason": ["dentry->d_parent"], "call": "linkat"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmdt"}, {"reason": ["path->dentry", "path->mnt"], "call": "quotactl"}, {"reason": ["path->dentry", "path->mnt", "vfsmount->mnt_root"], "call": "acct"}, {"reason": ["path->dentry", "path->mnt"], "call": "open"}, {"reason": ["dentry->d_parent"], "call": "unlink"}, {"reason": ["dentry->d_parent"], "call": "rmdir"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup"}, {"reason": ["path->dentry", "path->mnt"], "call": "setns"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapon"}, {"reason": ["path->dentry", "path->mnt"], "call": "mmap_pgoff"}, {"reason": ["dentry->d_parent", "path->dentry", "path->mnt", "vfsmount->mnt_root"], "call": "mq_open"}, {"reason": ["dentry->d_parent"], "call": "unlinkat"}, {"reason": ["path->dentry", "path->mnt"], "call": "open_by_handle_at"}], "inotify_add_watch": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["file->f_op"], "call": "eventfd2"}, {"reason": ["dentry->d_inode"], "call": "mq_unlink"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["file->f_op"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["dentry->d_inode"], "call": "pivot_root"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_op"], "call": "memfd_create"}, {"reason": ["file->f_op"], "call": "remap_file_pages"}, {"reason": ["file->f_op"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["dentry->d_inode"], "call": "mkdirat"}, {"reason": ["file->f_op"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["file->f_op", "fd->flags"], "call": "epoll_ctl"}, {"reason": ["file->f_op", "fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_op"], "call": "openat"}, {"reason": ["file->f_op"], "call": "uselib"}, {"reason": ["dentry->d_inode"], "call": "renameat2"}, {"reason": ["file->f_op", "fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["file->f_op"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["dentry->d_inode"], "call": "getcwd"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["dentry->d_inode", "fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["file->f_op"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["dentry->d_inode"], "call": "mknodat"}, {"reason": ["file->f_op"], "call": "socket"}, {"reason": ["dentry->d_inode"], "call": "symlinkat"}, {"reason": ["file->f_op"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["file->f_op", "fd->flags"], "call": "perf_event_open"}, {"reason": ["dentry->d_inode"], "call": "linkat"}, {"reason": ["file->f_op"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_op"], "call": "acct"}, {"reason": ["file->f_op"], "call": "open"}, {"reason": ["dentry->d_inode"], "call": "unlink"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["dentry->d_inode"], "call": "rmdir"}, {"reason": ["file->f_op"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_op"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_op"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["file->f_op"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_op"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["dentry->d_inode", "file->f_op"], "call": "mq_open"}, {"reason": ["dentry->d_inode"], "call": "unlinkat"}, {"reason": ["file->f_op"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "preadv2": [{"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "timer_settime": [{"reason": ["k_clock->timer_set"], "call": "clock_getres"}, {"reason": ["k_clock->timer_set"], "call": "timer_delete"}, {"reason": ["k_clock->timer_set"], "call": "timer_create"}, {"reason": ["k_clock->timer_set"], "call": "clock_gettime"}, {"reason": ["k_clock->timer_set"], "call": "timer_gettime"}, {"reason": ["k_clock->timer_set"], "call": "clock_settime"}, {"reason": ["k_clock->timer_set"], "call": "clock_nanosleep"}, {"reason": ["k_clock->timer_set"], "call": "clock_adjtime"}], "setregid": [{"reason": ["cred->user_ns", "task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["cred->user_ns"], "call": "setfsuid"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["cred->user_ns"], "call": "getresuid16"}, {"reason": ["cred->user_ns"], "call": "getresgid"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["cred->user_ns", "cred->sgid", "cred->egid", "cred->gid"], "call": "setgid"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "ioprio_set"}, {"reason": ["cred->user_ns"], "call": "capset"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["cred->user_ns"], "call": "getresgid16"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["cred->user_ns"], "call": "setfsgid"}, {"reason": ["cred->user_ns"], "call": "unshare"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["cred->user_ns"], "call": "setreuid"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["cred->user_ns"], "call": "epoll_create1"}, {"reason": ["cred->user_ns"], "call": "getresuid"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["cred->user_ns", "cred->sgid", "cred->egid", "cred->gid"], "call": "setresgid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["cred->user_ns"], "call": "getgroups16"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["cred->user_ns"], "call": "faccessat"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["cred->user_ns"], "call": "setresuid"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["cred->user_ns"], "call": "setuid"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["cred->user_ns"], "call": "getgroups"}, {"reason": ["cred->user_ns", "task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "fchdir": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["path->dentry"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["path->dentry"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["path->dentry"], "call": "pivot_root"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["path->dentry"], "call": "memfd_create"}, {"reason": ["path->dentry"], "call": "remap_file_pages"}, {"reason": ["path->dentry"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["path->dentry"], "call": "unshare"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["path->dentry"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "path->dentry"], "call": "epoll_ctl"}, {"reason": ["fd->flags", "path->dentry"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["path->dentry"], "call": "openat"}, {"reason": ["path->dentry"], "call": "lookup_dcookie"}, {"reason": ["path->dentry"], "call": "uselib"}, {"reason": ["fd->flags", "path->dentry"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["path->dentry"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["path->dentry"], "call": "getcwd"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["path->dentry"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["path->dentry"], "call": "socket"}, {"reason": ["path->dentry"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags", "path->dentry"], "call": "perf_event_open"}, {"reason": ["path->dentry"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["path->dentry"], "call": "quotactl"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["path->dentry"], "call": "acct"}, {"reason": ["path->dentry"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["path->dentry"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["path->dentry"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["path->dentry"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["path->dentry"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["path->dentry"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["path->dentry"], "call": "mq_open"}, {"reason": ["path->dentry"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "ftruncate": [{"reason": ["file->f_flags", "file->f_mode"], "call": "eventfd2"}, {"reason": ["inode->i_flags", "inode->i_sb"], "call": "mq_unlink"}, {"reason": ["inode->i_flags", "inode->i_sb", "file->f_flags", "file->f_mode"], "call": "swapoff"}, {"reason": ["inode->i_flags", "inode->i_sb"], "call": "fchmod"}, {"reason": ["inode->i_flags", "inode->i_sb", "file->f_flags", "file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "dup3"}, {"reason": ["inode->i_flags", "inode->i_sb"], "call": "readlinkat"}, {"reason": ["inode->i_flags", "inode->i_sb"], "call": "fchown"}, {"reason": ["inode->i_flags", "inode->i_sb"], "call": "mq_timedreceive"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "flock"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "openat"}, {"reason": ["inode->i_flags", "inode->i_sb", "file->f_flags", "file->f_mode"], "call": "uselib"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "accept4"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "socketpair"}, {"reason": ["inode->i_flags", "inode->i_sb"], "call": "fchmodat"}, {"reason": ["inode->i_flags", "inode->i_sb"], "call": "inotify_add_watch"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "shmat"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "socket"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "pipe2"}, {"reason": ["inode->i_flags", "inode->i_sb"], "call": "ioctl"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["inode->i_flags", "inode->i_sb"], "call": "linkat"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "acct"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "open"}, {"reason": ["inode->i_flags", "inode->i_sb"], "call": "unlink"}, {"reason": ["inode->i_flags", "inode->i_sb", "file->f_flags"], "call": "mq_getsetattr"}, {"reason": ["inode->i_flags", "inode->i_sb"], "call": "faccessat"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "dup"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "setns"}, {"reason": ["inode->i_flags", "inode->i_sb"], "call": "mq_timedsend"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "shmctl"}, {"reason": ["inode->i_flags", "inode->i_sb", "file->f_flags", "file->f_mode"], "call": "swapon"}, {"reason": ["inode->i_flags", "inode->i_sb"], "call": "fchownat"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["inode->i_flags", "inode->i_sb"], "call": "mq_notify"}, {"reason": ["inode->i_flags", "inode->i_sb"], "call": "sendfile"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "mq_open"}, {"reason": ["inode->i_flags", "inode->i_sb"], "call": "unlinkat"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "open_by_handle_at"}, {"reason": ["inode->i_flags", "inode->i_sb"], "call": "sendfile64"}], "timer_gettime": [{"reason": ["k_clock->timer_get"], "call": "clock_getres"}, {"reason": ["k_clock->timer_get"], "call": "timer_delete"}, {"reason": ["k_clock->timer_get"], "call": "timer_create"}, {"reason": ["k_clock->timer_get"], "call": "clock_gettime"}, {"reason": ["k_clock->timer_get"], "call": "timer_settime"}, {"reason": ["k_clock->timer_get"], "call": "clock_settime"}, {"reason": ["k_clock->timer_get"], "call": "clock_nanosleep"}, {"reason": ["k_clock->timer_get"], "call": "clock_adjtime"}], "msgsnd": [{"reason": ["ipc_namespace->msg_ctlmax"], "call": "msgrcv"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "mq_unlink"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "msgget"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "semtimedop"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "semctl"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "shmget"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "msgctl"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "semget"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "shmat"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "setns"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "shmctl"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "mq_open"}], "sysinfo": [{"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg", "timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["timespec->tv_nsec"], "call": "fchown"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg", "timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["timespec->tv_nsec"], "call": "utime"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg", "timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["mm_segment_t->seg", "timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_nsec"], "call": "uselib"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_nsec"], "call": "stime"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["timespec->tv_nsec"], "call": "poll"}, {"reason": ["timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_nsec"], "call": "unlink"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["mm_segment_t->seg"], "call": "setns"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg", "timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["timespec->tv_nsec"], "call": "fstat"}, {"reason": ["timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["timespec->tv_nsec"], "call": "newfstat"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}, {"reason": ["timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["timespec->tv_nsec"], "call": "ppoll"}], "geteuid16": [{"reason": ["task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["task_struct->cred"], "call": "ioprio_set"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "setpgid": [{"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "keyctl"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "msgrcv"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "kill"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "sched_getaffinity"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "sched_setparam"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "ioprio_set"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "getppid"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "mq_timedreceive"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "capget"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "sched_setaffinity"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "signal"}, {"reason": ["task_struct->flags"], "call": "setreuid"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "semtimedop"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "umount"}, {"reason": ["signal_struct->leader"], "call": "timer_create"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "signal_struct->leader", "task_struct->signal"], "call": "setsid"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "sigaltstack"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "sched_setattr"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "migrate_pages"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "getitimer"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "getsid"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "prlimit64"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "perf_event_open"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "rt_sigaction"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "getpgid"}, {"reason": ["signal_struct->leader"], "call": "exit_group"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "getpriority"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "sigaction"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "setns"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "fork"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "get_robust_list"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "mq_timedsend"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "sched_getscheduler"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "ptrace"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "sched_getattr"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "getrusage"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "sched_setscheduler"}, {"reason": ["task_struct->flags"], "call": "setresuid"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "setitimer"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "ioprio_get"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "vfork"}, {"reason": ["task_struct->flags"], "call": "setuid"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "prctl"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "move_pages"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "setpriority"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "clone"}, {"reason": ["task_struct->exit_signal", "task_struct->real_parent", "task_struct->flags", "task_struct->signal"], "call": "sched_getparam"}], "mknodat": [{"reason": ["super_block->s_flags"], "call": "syncfs"}, {"reason": ["super_block->s_flags"], "call": "ustat"}, {"reason": ["super_block->s_flags"], "call": "umount"}, {"reason": ["super_block->s_flags"], "call": "quotactl"}, {"reason": ["super_block->s_flags"], "call": "swapon"}], "shmat": [{"reason": ["task_struct->mm"], "call": "keyctl"}, {"reason": ["task_struct->mm"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->mm"], "call": "msgrcv"}, {"reason": ["path->dentry"], "call": "eventfd2"}, {"reason": ["task_struct->mm"], "call": "kill"}, {"reason": ["path->dentry"], "call": "swapoff"}, {"reason": ["task_struct->mm"], "call": "sched_getaffinity"}, {"reason": ["task_struct->mm"], "call": "sched_setparam"}, {"reason": ["path->dentry"], "call": "pivot_root"}, {"reason": ["path->dentry"], "call": "memfd_create"}, {"reason": ["task_struct->mm"], "call": "ioprio_set"}, {"reason": ["path->dentry"], "call": "remap_file_pages"}, {"reason": ["path->dentry"], "call": "dup3"}, {"reason": ["task_struct->mm"], "call": "getppid"}, {"reason": ["task_struct->mm"], "call": "mq_timedreceive"}, {"reason": ["task_struct->mm"], "call": "capget"}, {"reason": ["task_struct->mm"], "call": "sched_setaffinity"}, {"reason": ["path->dentry"], "call": "unshare"}, {"reason": ["task_struct->mm"], "call": "signal"}, {"reason": ["task_struct->mm"], "call": "semtimedop"}, {"reason": ["task_struct->mm"], "call": "umount"}, {"reason": ["task_struct->mm"], "call": "sched_rr_get_interval"}, {"reason": ["path->dentry"], "call": "epoll_create1"}, {"reason": ["path->dentry"], "call": "epoll_ctl"}, {"reason": ["path->dentry"], "call": "flock"}, {"reason": ["path->dentry"], "call": "openat"}, {"reason": ["path->dentry"], "call": "lookup_dcookie"}, {"reason": ["path->dentry"], "call": "uselib"}, {"reason": ["task_struct->mm"], "call": "rt_sigprocmask"}, {"reason": ["path->dentry"], "call": "accept4"}, {"reason": ["task_struct->mm"], "call": "setsid"}, {"reason": ["task_struct->mm"], "call": "sigaltstack"}, {"reason": ["task_struct->mm"], "call": "sched_setattr"}, {"reason": ["path->dentry"], "call": "socketpair"}, {"reason": ["task_struct->mm"], "call": "migrate_pages"}, {"reason": ["task_struct->mm"], "call": "getitimer"}, {"reason": ["task_struct->mm"], "call": "setpgid"}, {"reason": ["path->dentry"], "call": "getcwd"}, {"reason": ["task_struct->mm"], "call": "getsid"}, {"reason": ["path->dentry"], "call": "socket"}, {"reason": ["path->dentry"], "call": "pipe2"}, {"reason": ["task_struct->mm"], "call": "prlimit64"}, {"reason": ["task_struct->mm", "path->dentry"], "call": "perf_event_open"}, {"reason": ["path->dentry"], "call": "shmdt"}, {"reason": ["path->dentry"], "call": "quotactl"}, {"reason": ["task_struct->mm"], "call": "rt_sigaction"}, {"reason": ["task_struct->mm"], "call": "getpgid"}, {"reason": ["path->dentry"], "call": "acct"}, {"reason": ["path->dentry"], "call": "open"}, {"reason": ["task_struct->mm"], "call": "getpriority"}, {"reason": ["task_struct->mm"], "call": "sigaction"}, {"reason": ["path->dentry"], "call": "dup"}, {"reason": ["task_struct->mm", "path->dentry"], "call": "setns"}, {"reason": ["task_struct->mm"], "call": "fork"}, {"reason": ["task_struct->mm"], "call": "get_robust_list"}, {"reason": ["task_struct->mm"], "call": "mq_timedsend"}, {"reason": ["task_struct->mm"], "call": "sched_getscheduler"}, {"reason": ["task_struct->mm"], "call": "ptrace"}, {"reason": ["path->dentry", "shmid_kernel->shm_file"], "call": "shmctl"}, {"reason": ["path->dentry"], "call": "swapon"}, {"reason": ["task_struct->mm"], "call": "sched_getattr"}, {"reason": ["task_struct->mm"], "call": "getrusage"}, {"reason": ["task_struct->mm"], "call": "sched_setscheduler"}, {"reason": ["task_struct->mm"], "call": "setitimer"}, {"reason": ["task_struct->mm"], "call": "ioprio_get"}, {"reason": ["task_struct->mm"], "call": "vfork"}, {"reason": ["path->dentry"], "call": "mmap_pgoff"}, {"reason": ["task_struct->mm"], "call": "prctl"}, {"reason": ["task_struct->mm"], "call": "move_pages"}, {"reason": ["task_struct->mm"], "call": "setpriority"}, {"reason": ["task_struct->mm"], "call": "clone"}, {"reason": ["path->dentry"], "call": "mq_open"}, {"reason": ["task_struct->mm"], "call": "sched_getparam"}, {"reason": ["path->dentry"], "call": "open_by_handle_at"}], "setsockopt": [{"reason": ["proto_ops->compat_setsockopt"], "call": "accept4"}], "old_getrlimit": [{"reason": ["rlimit->rlim_max", "rlimit->rlim_cur"], "call": "setrlimit"}, {"reason": ["rlimit->rlim_max", "rlimit->rlim_cur"], "call": "prlimit64"}], "msync": [{"reason": ["vm_area_struct->vm_flags", "vm_area_struct->vm_file"], "call": "remap_file_pages"}, {"reason": ["vm_area_struct->vm_flags", "vm_area_struct->vm_file"], "call": "shmdt"}, {"reason": ["vm_area_struct->vm_flags", "vm_area_struct->vm_file"], "call": "brk"}, {"reason": ["vm_area_struct->vm_flags", "vm_area_struct->vm_file"], "call": "get_mempolicy"}, {"reason": ["vm_area_struct->vm_flags", "vm_area_struct->vm_file"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_flags", "vm_area_struct->vm_file"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_flags", "vm_area_struct->vm_file"], "call": "madvise"}, {"reason": ["vm_area_struct->vm_flags", "vm_area_struct->vm_file"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_flags", "vm_area_struct->vm_file"], "call": "mremap"}, {"reason": ["vm_area_struct->vm_flags", "vm_area_struct->vm_file"], "call": "prctl"}, {"reason": ["vm_area_struct->vm_flags", "vm_area_struct->vm_file"], "call": "munlock"}, {"reason": ["vm_area_struct->vm_flags", "vm_area_struct->vm_file"], "call": "mincore"}, {"reason": ["vm_area_struct->vm_flags", "vm_area_struct->vm_file"], "call": "mlockall"}], "getegid16": [{"reason": ["task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["task_struct->cred"], "call": "ioprio_set"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "ioctl": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "prlimit64": [{"reason": ["task_struct->sighand", "cred->user_ns", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["cred->user_ns"], "call": "setfsuid"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "kill"}, {"reason": ["cred->user_ns"], "call": "getresuid16"}, {"reason": ["cred->user_ns"], "call": "getresgid"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "sched_setparam"}, {"reason": ["cred->user_ns", "cred->sgid", "cred->egid", "cred->gid"], "call": "setgid"}, {"reason": ["task_struct->sighand", "cred->user_ns", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "ioprio_set"}, {"reason": ["cred->user_ns"], "call": "capset"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["cred->user_ns"], "call": "getresgid16"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->sighand", "cred->user_ns", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["cred->user_ns"], "call": "setfsgid"}, {"reason": ["cred->user_ns"], "call": "unshare"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "signal"}, {"reason": ["cred->uid", "cred->user_ns", "cred->suid", "cred->euid"], "call": "setreuid"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["cred->user_ns"], "call": "epoll_create1"}, {"reason": ["cred->user_ns"], "call": "getresuid"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "sched_setattr"}, {"reason": ["rlimit->rlim_max", "rlimit->rlim_cur"], "call": "setrlimit"}, {"reason": ["task_struct->sighand", "cred->user_ns", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "setpgid"}, {"reason": ["cred->user_ns", "cred->sgid", "cred->egid", "cred->gid"], "call": "setresgid"}, {"reason": ["cred->user_ns", "cred->sgid", "cred->egid", "cred->gid"], "call": "setregid"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "getsid"}, {"reason": ["rlimit->rlim_max", "rlimit->rlim_cur"], "call": "old_getrlimit"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "perf_event_open"}, {"reason": ["cred->user_ns"], "call": "getgroups16"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->sighand", "cred->user_ns", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "sigaction"}, {"reason": ["cred->user_ns"], "call": "faccessat"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["cred->uid", "cred->user_ns", "cred->suid", "cred->euid"], "call": "setresuid"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->sighand", "cred->user_ns", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "vfork"}, {"reason": ["cred->uid", "cred->user_ns", "cred->suid", "cred->euid"], "call": "setuid"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "move_pages"}, {"reason": ["cred->user_ns"], "call": "getgroups"}, {"reason": ["task_struct->sighand", "cred->user_ns", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->sighand", "task_struct->real_cred", "task_struct->group_leader", "task_struct->cred"], "call": "sched_getparam"}], "set_mempolicy": [{"reason": ["mempolicy->mode"], "call": "get_mempolicy"}, {"reason": ["mempolicy->mode"], "call": "mbind"}], "pwrite64": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["fd->flags", "file->f_mode"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["fd->flags", "file->f_mode"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "perf_event_open": [{"reason": ["list_head->prev", "fd->flags"], "call": "syncfs"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "keyctl"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "rt_sigtimedwait"}, {"reason": ["list_head->prev", "fd->flags"], "call": "vmsplice"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "msgrcv"}, {"reason": ["file->f_op", "list_head->prev"], "call": "eventfd2"}, {"reason": ["list_head->prev"], "call": "mq_unlink"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "kill"}, {"reason": ["file->f_op", "list_head->prev"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["list_head->prev", "fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["list_head->prev"], "call": "timer_delete"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "sched_getaffinity"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "sched_setparam"}, {"reason": ["list_head->prev", "fd->flags"], "call": "fchmod"}, {"reason": ["list_head->prev"], "call": "setgid"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["list_head->prev"], "call": "pivot_root"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_op", "list_head->prev"], "call": "memfd_create"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "ioprio_set"}, {"reason": ["list_head->prev"], "call": "delete_module"}, {"reason": ["file->f_op", "list_head->prev"], "call": "remap_file_pages"}, {"reason": ["file->f_op", "list_head->prev"], "call": "dup3"}, {"reason": ["list_head->prev"], "call": "readlinkat"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["list_head->prev"], "call": "io_getevents"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "getppid"}, {"reason": ["list_head->prev", "fd->flags"], "call": "fchown"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["list_head->prev", "fd->flags", "mm_segment_t->seg", "task_struct->flags"], "call": "mq_timedreceive"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "capget"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "sched_setaffinity"}, {"reason": ["list_head->prev"], "call": "ustat"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["list_head->prev", "fd->flags"], "call": "bpf"}, {"reason": ["list_head->prev"], "call": "unshare"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "signal"}, {"reason": ["list_head->prev", "task_struct->flags"], "call": "setreuid"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "semtimedop"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "umount"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["list_head->prev"], "call": "timer_create"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["list_head->prev"], "call": "mkdirat"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "sched_rr_get_interval"}, {"reason": ["file->f_op", "list_head->prev"], "call": "epoll_create1"}, {"reason": ["list_head->prev"], "call": "timerfd_gettime"}, {"reason": ["list_head->prev", "fd->flags"], "call": "tee"}, {"reason": ["list_head->prev"], "call": "semctl"}, {"reason": ["list_head->prev", "fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["file->f_op", "list_head->prev", "fd->flags"], "call": "epoll_ctl"}, {"reason": ["file->f_op", "list_head->prev", "fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_op", "list_head->prev"], "call": "openat"}, {"reason": ["list_head->prev"], "call": "lookup_dcookie"}, {"reason": ["file->f_op", "list_head->prev"], "call": "uselib"}, {"reason": ["list_head->prev"], "call": "renameat2"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "rt_sigprocmask"}, {"reason": ["file->f_op", "list_head->prev", "fd->flags"], "call": "accept4"}, {"reason": ["list_head->prev"], "call": "msgctl"}, {"reason": ["list_head->prev"], "call": "reboot"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "setsid"}, {"reason": ["list_head->prev"], "call": "set_trip_temp"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "sigaltstack"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "sched_setattr"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["list_head->prev", "fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["file->f_op", "list_head->prev"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "migrate_pages"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "getitimer"}, {"reason": ["list_head->prev"], "call": "fchmodat"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "setpgid"}, {"reason": ["list_head->prev"], "call": "init_module"}, {"reason": ["list_head->prev"], "call": "setresgid"}, {"reason": ["list_head->prev"], "call": "getcwd"}, {"reason": ["list_head->prev", "fd->flags"], "call": "inotify_add_watch"}, {"reason": ["list_head->prev"], "call": "get_trip_temp"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["list_head->prev"], "call": "timer_settime"}, {"reason": ["list_head->prev"], "call": "setregid"}, {"reason": ["list_head->prev", "fd->flags"], "call": "splice"}, {"reason": ["list_head->prev", "fd->flags"], "call": "ftruncate"}, {"reason": ["list_head->prev"], "call": "timer_gettime"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "getsid"}, {"reason": ["file->f_op", "list_head->prev"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["list_head->prev"], "call": "mknodat"}, {"reason": ["file->f_op", "list_head->prev"], "call": "socket"}, {"reason": ["list_head->prev"], "call": "symlinkat"}, {"reason": ["file->f_op", "list_head->prev"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["list_head->prev", "fd->flags"], "call": "ioctl"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "prlimit64"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["list_head->prev"], "call": "linkat"}, {"reason": ["list_head->prev"], "call": "getgroups16"}, {"reason": ["file->f_op", "list_head->prev"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["list_head->prev"], "call": "quotactl"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "rt_sigaction"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["list_head->prev"], "call": "request_key"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "getpgid"}, {"reason": ["list_head->prev"], "call": "brk"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_op", "list_head->prev"], "call": "acct"}, {"reason": ["file->f_op", "list_head->prev"], "call": "open"}, {"reason": ["list_head->prev"], "call": "unlink"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["list_head->prev"], "call": "exit_group"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "getpriority"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "sigaction"}, {"reason": ["list_head->prev", "fd->flags"], "call": "mq_getsetattr"}, {"reason": ["list_head->prev"], "call": "faccessat"}, {"reason": ["list_head->prev"], "call": "rmdir"}, {"reason": ["file->f_op", "list_head->prev"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["list_head->prev"], "call": "setgroups16"}, {"reason": ["file->f_op", "list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "fork"}, {"reason": ["list_head->prev"], "call": "get_mempolicy"}, {"reason": ["list_head->prev"], "call": "io_submit"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "get_robust_list"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["list_head->prev", "fd->flags", "mm_segment_t->seg", "task_struct->flags"], "call": "mq_timedsend"}, {"reason": ["list_head->prev"], "call": "sched_yield"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "sched_getscheduler"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "ptrace"}, {"reason": ["file->f_op", "list_head->prev"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["list_head->prev"], "call": "munlockall"}, {"reason": ["file->f_op", "list_head->prev"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["list_head->prev"], "call": "pkey_mprotect"}, {"reason": ["list_head->prev"], "call": "madvise"}, {"reason": ["list_head->prev", "fd->flags"], "call": "epoll_wait"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "sched_getattr"}, {"reason": ["list_head->prev"], "call": "fchownat"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "getrusage"}, {"reason": ["list_head->prev"], "call": "timerfd_settime"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "sched_setscheduler"}, {"reason": ["list_head->prev", "task_struct->flags"], "call": "setresuid"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "setitimer"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "ioprio_get"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "vfork"}, {"reason": ["list_head->prev", "task_struct->flags"], "call": "setuid"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["list_head->prev"], "call": "io_setup"}, {"reason": ["list_head->prev"], "call": "mprotect"}, {"reason": ["file->f_op", "list_head->prev"], "call": "mmap_pgoff"}, {"reason": ["list_head->prev"], "call": "mremap"}, {"reason": ["list_head->prev"], "call": "io_destroy"}, {"reason": ["list_head->prev"], "call": "mbind"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "prctl"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "move_pages"}, {"reason": ["list_head->prev"], "call": "timerfd_create"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["list_head->prev"], "call": "modify_ldt"}, {"reason": ["list_head->prev"], "call": "getgroups"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["list_head->prev"], "call": "dup2"}, {"reason": ["list_head->prev"], "call": "get_curr_temp"}, {"reason": ["list_head->prev"], "call": "msgsnd"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["list_head->prev"], "call": "munlock"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "setpriority"}, {"reason": ["list_head->prev"], "call": "inotify_init1"}, {"reason": ["list_head->prev"], "call": "mincore"}, {"reason": ["list_head->prev", "fd->flags"], "call": "mq_notify"}, {"reason": ["list_head->prev", "fd->flags"], "call": "sendfile"}, {"reason": ["list_head->prev"], "call": "timer_getoverrun"}, {"reason": ["list_head->prev"], "call": "kexec_load"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "clone"}, {"reason": ["file->f_op", "list_head->prev"], "call": "mq_open"}, {"reason": ["list_head->prev"], "call": "setgroups"}, {"reason": ["list_head->prev"], "call": "unlinkat"}, {"reason": ["list_head->prev", "mm_segment_t->seg", "task_struct->flags"], "call": "sched_getparam"}, {"reason": ["list_head->prev"], "call": "io_cancel"}, {"reason": ["file->f_op", "list_head->prev"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["list_head->prev"], "call": "finit_module"}, {"reason": ["list_head->prev", "fd->flags"], "call": "sendfile64"}, {"reason": ["list_head->prev"], "call": "mlockall"}], "removexattr": [{"reason": ["path->dentry", "path->mnt"], "call": "eventfd2"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapoff"}, {"reason": ["path->dentry", "path->mnt"], "call": "pivot_root"}, {"reason": ["path->dentry", "path->mnt"], "call": "memfd_create"}, {"reason": ["path->dentry", "path->mnt"], "call": "remap_file_pages"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup3"}, {"reason": ["path->dentry", "path->mnt"], "call": "unshare"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_create1"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_ctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "flock"}, {"reason": ["path->dentry", "path->mnt"], "call": "openat"}, {"reason": ["path->dentry", "path->mnt"], "call": "lookup_dcookie"}, {"reason": ["path->dentry", "path->mnt"], "call": "uselib"}, {"reason": ["path->dentry", "path->mnt"], "call": "accept4"}, {"reason": ["path->dentry", "path->mnt"], "call": "socketpair"}, {"reason": ["path->dentry", "path->mnt"], "call": "getcwd"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmat"}, {"reason": ["path->dentry", "path->mnt"], "call": "socket"}, {"reason": ["path->dentry", "path->mnt"], "call": "pipe2"}, {"reason": ["path->dentry", "path->mnt"], "call": "perf_event_open"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmdt"}, {"reason": ["path->dentry", "path->mnt"], "call": "quotactl"}, {"reason": ["path->dentry", "path->mnt"], "call": "acct"}, {"reason": ["path->dentry", "path->mnt"], "call": "open"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup"}, {"reason": ["path->dentry", "path->mnt"], "call": "setns"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapon"}, {"reason": ["path->dentry", "path->mnt"], "call": "mmap_pgoff"}, {"reason": ["path->dentry", "path->mnt"], "call": "mq_open"}, {"reason": ["path->dentry", "path->mnt"], "call": "open_by_handle_at"}], "sendmsg": [{"reason": ["socket->file"], "call": "recvfrom"}, {"reason": ["socket->file"], "call": "sendto"}, {"reason": ["socket->file"], "call": "connect"}, {"reason": ["socket->file"], "call": "getsockname"}, {"reason": ["socket->file"], "call": "accept4"}, {"reason": ["socket->file"], "call": "getpeername"}, {"reason": ["socket->file"], "call": "setsockopt"}, {"reason": ["socket->file"], "call": "shutdown"}, {"reason": ["socket->file"], "call": "getsockopt"}, {"reason": ["socket->file"], "call": "listen"}, {"reason": ["socket->file"], "call": "recvmsg"}, {"reason": ["socket->file"], "call": "sendmmsg"}, {"reason": ["socket->file"], "call": "bind"}, {"reason": ["socket->file"], "call": "recvmmsg"}], "epoll_ctl": [{"reason": ["fd->flags", "list_head->next"], "call": "syncfs"}, {"reason": ["list_head->next"], "call": "keyctl"}, {"reason": ["list_head->next"], "call": "rt_sigtimedwait"}, {"reason": ["fd->flags", "list_head->next"], "call": "vmsplice"}, {"reason": ["list_head->next"], "call": "msgrcv"}, {"reason": ["file->f_op", "list_head->next"], "call": "eventfd2"}, {"reason": ["list_head->next"], "call": "mq_unlink"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["list_head->next"], "call": "kill"}, {"reason": ["file->f_op", "list_head->next"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags", "list_head->next"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["list_head->next"], "call": "timer_delete"}, {"reason": ["list_head->next"], "call": "sched_getaffinity"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["list_head->next"], "call": "sched_setparam"}, {"reason": ["fd->flags", "list_head->next"], "call": "fchmod"}, {"reason": ["list_head->next"], "call": "setgid"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["list_head->next"], "call": "pivot_root"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_op", "list_head->next"], "call": "memfd_create"}, {"reason": ["list_head->next"], "call": "ioprio_set"}, {"reason": ["list_head->next"], "call": "delete_module"}, {"reason": ["file->f_op", "list_head->next"], "call": "remap_file_pages"}, {"reason": ["file->f_op", "list_head->next"], "call": "dup3"}, {"reason": ["list_head->next"], "call": "readlinkat"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["list_head->next"], "call": "io_getevents"}, {"reason": ["list_head->next"], "call": "getppid"}, {"reason": ["fd->flags", "list_head->next"], "call": "fchown"}, {"reason": ["fd->flags", "list_head->next"], "call": "mq_timedreceive"}, {"reason": ["list_head->next"], "call": "capget"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["list_head->next"], "call": "sched_setaffinity"}, {"reason": ["list_head->next"], "call": "ustat"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags", "list_head->next"], "call": "bpf"}, {"reason": ["list_head->next"], "call": "unshare"}, {"reason": ["list_head->next"], "call": "signal"}, {"reason": ["list_head->next"], "call": "setreuid"}, {"reason": ["list_head->next"], "call": "semtimedop"}, {"reason": ["list_head->next"], "call": "umount"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["list_head->next"], "call": "timer_create"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["list_head->next"], "call": "mkdirat"}, {"reason": ["list_head->next"], "call": "sched_rr_get_interval"}, {"reason": ["file->f_op", "epitem->ws", "epoll_event->events", "list_head->next", "epitem->nwait"], "call": "epoll_create1"}, {"reason": ["list_head->next"], "call": "timerfd_gettime"}, {"reason": ["fd->flags", "list_head->next"], "call": "tee"}, {"reason": ["list_head->next"], "call": "semctl"}, {"reason": ["fd->flags", "list_head->next"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["file->f_op", "fd->flags", "list_head->next"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_op", "list_head->next"], "call": "openat"}, {"reason": ["list_head->next"], "call": "lookup_dcookie"}, {"reason": ["file->f_op", "list_head->next"], "call": "uselib"}, {"reason": ["list_head->next"], "call": "renameat2"}, {"reason": ["list_head->next"], "call": "rt_sigprocmask"}, {"reason": ["file->f_op", "fd->flags", "list_head->next"], "call": "accept4"}, {"reason": ["list_head->next"], "call": "msgctl"}, {"reason": ["list_head->next"], "call": "reboot"}, {"reason": ["list_head->next"], "call": "setsid"}, {"reason": ["list_head->next"], "call": "set_trip_temp"}, {"reason": ["list_head->next"], "call": "sigaltstack"}, {"reason": ["list_head->next"], "call": "sched_setattr"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags", "list_head->next"], "call": "inotify_rm_watch"}, {"reason": ["file->f_op", "list_head->next"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["list_head->next"], "call": "migrate_pages"}, {"reason": ["list_head->next"], "call": "getitimer"}, {"reason": ["list_head->next"], "call": "fchmodat"}, {"reason": ["list_head->next"], "call": "setpgid"}, {"reason": ["list_head->next"], "call": "init_module"}, {"reason": ["list_head->next"], "call": "setresgid"}, {"reason": ["list_head->next"], "call": "getcwd"}, {"reason": ["fd->flags", "list_head->next"], "call": "inotify_add_watch"}, {"reason": ["list_head->next"], "call": "get_trip_temp"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["list_head->next"], "call": "timer_settime"}, {"reason": ["list_head->next"], "call": "setregid"}, {"reason": ["fd->flags", "list_head->next"], "call": "splice"}, {"reason": ["fd->flags", "list_head->next"], "call": "ftruncate"}, {"reason": ["list_head->next"], "call": "timer_gettime"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["list_head->next"], "call": "getsid"}, {"reason": ["file->f_op", "list_head->next"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["list_head->next"], "call": "mknodat"}, {"reason": ["file->f_op", "list_head->next"], "call": "socket"}, {"reason": ["list_head->next"], "call": "symlinkat"}, {"reason": ["file->f_op", "list_head->next"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags", "list_head->next"], "call": "ioctl"}, {"reason": ["list_head->next"], "call": "prlimit64"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["file->f_op", "fd->flags", "list_head->next"], "call": "perf_event_open"}, {"reason": ["list_head->next"], "call": "linkat"}, {"reason": ["list_head->next"], "call": "getgroups16"}, {"reason": ["file->f_op", "list_head->next"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["list_head->next"], "call": "quotactl"}, {"reason": ["list_head->next"], "call": "rt_sigaction"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["list_head->next"], "call": "request_key"}, {"reason": ["list_head->next"], "call": "getpgid"}, {"reason": ["list_head->next"], "call": "brk"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_op", "list_head->next"], "call": "acct"}, {"reason": ["file->f_op", "list_head->next"], "call": "open"}, {"reason": ["list_head->next"], "call": "unlink"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["list_head->next"], "call": "exit_group"}, {"reason": ["list_head->next"], "call": "getpriority"}, {"reason": ["list_head->next"], "call": "sigaction"}, {"reason": ["fd->flags", "list_head->next"], "call": "mq_getsetattr"}, {"reason": ["list_head->next"], "call": "faccessat"}, {"reason": ["list_head->next"], "call": "rmdir"}, {"reason": ["file->f_op", "list_head->next"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["list_head->next"], "call": "setgroups16"}, {"reason": ["file->f_op", "list_head->next"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["list_head->next"], "call": "fork"}, {"reason": ["list_head->next"], "call": "get_mempolicy"}, {"reason": ["list_head->next"], "call": "io_submit"}, {"reason": ["list_head->next"], "call": "get_robust_list"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags", "list_head->next"], "call": "mq_timedsend"}, {"reason": ["list_head->next"], "call": "sched_yield"}, {"reason": ["list_head->next"], "call": "sched_getscheduler"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["list_head->next"], "call": "ptrace"}, {"reason": ["file->f_op", "list_head->next"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["list_head->next"], "call": "munlockall"}, {"reason": ["file->f_op", "list_head->next"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["list_head->next"], "call": "pkey_mprotect"}, {"reason": ["list_head->next"], "call": "madvise"}, {"reason": ["fd->flags", "list_head->next"], "call": "epoll_wait"}, {"reason": ["list_head->next"], "call": "sched_getattr"}, {"reason": ["list_head->next"], "call": "fchownat"}, {"reason": ["list_head->next"], "call": "getrusage"}, {"reason": ["list_head->next"], "call": "timerfd_settime"}, {"reason": ["list_head->next"], "call": "sched_setscheduler"}, {"reason": ["list_head->next"], "call": "setresuid"}, {"reason": ["list_head->next"], "call": "setitimer"}, {"reason": ["list_head->next"], "call": "ioprio_get"}, {"reason": ["list_head->next"], "call": "vfork"}, {"reason": ["list_head->next"], "call": "setuid"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["list_head->next"], "call": "io_setup"}, {"reason": ["list_head->next"], "call": "mprotect"}, {"reason": ["file->f_op", "list_head->next"], "call": "mmap_pgoff"}, {"reason": ["list_head->next"], "call": "mremap"}, {"reason": ["list_head->next"], "call": "io_destroy"}, {"reason": ["list_head->next"], "call": "mbind"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["list_head->next"], "call": "prctl"}, {"reason": ["list_head->next"], "call": "move_pages"}, {"reason": ["list_head->next"], "call": "timerfd_create"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["list_head->next"], "call": "modify_ldt"}, {"reason": ["list_head->next"], "call": "getgroups"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["list_head->next"], "call": "dup2"}, {"reason": ["list_head->next"], "call": "get_curr_temp"}, {"reason": ["list_head->next"], "call": "msgsnd"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["list_head->next"], "call": "munlock"}, {"reason": ["list_head->next"], "call": "setpriority"}, {"reason": ["list_head->next"], "call": "inotify_init1"}, {"reason": ["list_head->next"], "call": "mincore"}, {"reason": ["fd->flags", "list_head->next"], "call": "mq_notify"}, {"reason": ["fd->flags", "list_head->next"], "call": "sendfile"}, {"reason": ["list_head->next"], "call": "timer_getoverrun"}, {"reason": ["list_head->next"], "call": "kexec_load"}, {"reason": ["list_head->next"], "call": "clone"}, {"reason": ["file->f_op", "list_head->next"], "call": "mq_open"}, {"reason": ["list_head->next"], "call": "setgroups"}, {"reason": ["list_head->next"], "call": "unlinkat"}, {"reason": ["list_head->next"], "call": "sched_getparam"}, {"reason": ["list_head->next"], "call": "io_cancel"}, {"reason": ["file->f_op", "list_head->next"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["list_head->next"], "call": "finit_module"}, {"reason": ["fd->flags", "list_head->next"], "call": "sendfile64"}, {"reason": ["list_head->next"], "call": "mlockall"}], "rt_tgsigqueueinfo": [{"reason": ["siginfo->si_code"], "call": "rt_sigtimedwait"}, {"reason": ["siginfo->si_code"], "call": "kill"}, {"reason": ["siginfo->si_code"], "call": "timer_create"}, {"reason": ["siginfo->si_code"], "call": "rt_sigqueueinfo"}, {"reason": ["siginfo->si_code"], "call": "tgkill"}, {"reason": ["siginfo->si_code"], "call": "rt_sigreturn"}, {"reason": ["siginfo->si_code"], "call": "tkill"}], "pwritev64v2": [{"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "splice": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "file->f_flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["fd->flags", "file->f_flags", "file->f_mode"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "openat"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "uselib"}, {"reason": ["fd->flags", "file->f_flags", "file->f_mode"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "socket"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags", "file->f_flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "acct"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags", "file->f_flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "setxattr": [{"reason": ["path->dentry", "path->mnt"], "call": "eventfd2"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapoff"}, {"reason": ["path->dentry", "path->mnt"], "call": "pivot_root"}, {"reason": ["path->dentry", "path->mnt"], "call": "memfd_create"}, {"reason": ["path->dentry", "path->mnt"], "call": "remap_file_pages"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup3"}, {"reason": ["path->dentry", "path->mnt"], "call": "unshare"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_create1"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_ctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "flock"}, {"reason": ["path->dentry", "path->mnt"], "call": "openat"}, {"reason": ["path->dentry", "path->mnt"], "call": "lookup_dcookie"}, {"reason": ["path->dentry", "path->mnt"], "call": "uselib"}, {"reason": ["path->dentry", "path->mnt"], "call": "accept4"}, {"reason": ["path->dentry", "path->mnt"], "call": "socketpair"}, {"reason": ["path->dentry", "path->mnt"], "call": "getcwd"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmat"}, {"reason": ["path->dentry", "path->mnt"], "call": "socket"}, {"reason": ["path->dentry", "path->mnt"], "call": "pipe2"}, {"reason": ["path->dentry", "path->mnt"], "call": "perf_event_open"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmdt"}, {"reason": ["path->dentry", "path->mnt"], "call": "quotactl"}, {"reason": ["path->dentry", "path->mnt"], "call": "acct"}, {"reason": ["path->dentry", "path->mnt"], "call": "open"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup"}, {"reason": ["path->dentry", "path->mnt"], "call": "setns"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapon"}, {"reason": ["path->dentry", "path->mnt"], "call": "mmap_pgoff"}, {"reason": ["path->dentry", "path->mnt"], "call": "mq_open"}, {"reason": ["path->dentry", "path->mnt"], "call": "open_by_handle_at"}], "symlinkat": [{"reason": ["filename->refcnt", "filename->name"], "call": "sysfs"}, {"reason": ["filename->refcnt", "filename->name"], "call": "mq_unlink"}, {"reason": ["filename->refcnt", "filename->name"], "call": "swapoff"}, {"reason": ["filename->refcnt", "filename->name"], "call": "openat"}, {"reason": ["filename->refcnt", "filename->name"], "call": "uselib"}, {"reason": ["filename->refcnt", "filename->name"], "call": "renameat2"}, {"reason": ["filename->refcnt", "filename->name"], "call": "quotactl"}, {"reason": ["filename->refcnt", "filename->name"], "call": "acct"}, {"reason": ["filename->refcnt", "filename->name"], "call": "open"}, {"reason": ["filename->refcnt", "filename->name"], "call": "unlink"}, {"reason": ["filename->refcnt", "filename->name"], "call": "rmdir"}, {"reason": ["filename->refcnt", "filename->name"], "call": "swapon"}, {"reason": ["filename->refcnt", "filename->name"], "call": "mq_open"}, {"reason": ["filename->refcnt", "filename->name"], "call": "unlinkat"}], "brk": [{"reason": ["mm_struct->brk", "mm_struct->start_brk", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->start_data"], "call": "swapoff"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->brk", "mm_struct->start_brk", "vm_area_struct->vm_flags", "mm_struct->start_data"], "call": "remap_file_pages"}, {"reason": ["mm_struct->brk", "mm_struct->start_brk", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->start_data"], "call": "io_getevents"}, {"reason": ["mm_struct->brk", "mm_struct->start_brk", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->start_data"], "call": "migrate_pages"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->brk", "mm_struct->start_brk", "vm_area_struct->vm_flags", "mm_struct->start_data"], "call": "shmdt"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->brk", "mm_struct->start_brk", "vm_area_struct->vm_flags", "mm_struct->start_data"], "call": "get_mempolicy"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "mm_struct->def_flags"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "madvise"}, {"reason": ["mm_struct->brk", "mm_struct->start_brk", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->start_data"], "call": "getrusage"}, {"reason": ["mm_struct->brk", "mm_struct->start_brk", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->start_data"], "call": "io_setup"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->brk", "mm_struct->start_brk", "vm_area_struct->vm_flags", "mm_struct->start_data"], "call": "mremap"}, {"reason": ["mm_struct->brk", "mm_struct->start_brk", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->start_data"], "call": "io_destroy"}, {"reason": ["mm_struct->brk", "mm_struct->start_brk", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->start_data"], "call": "mbind"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->brk", "mm_struct->start_brk", "vm_area_struct->vm_flags", "mm_struct->start_data"], "call": "prctl"}, {"reason": ["mm_struct->brk", "mm_struct->start_brk", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->start_data"], "call": "move_pages"}, {"reason": ["mm_struct->brk", "mm_struct->start_brk", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->start_data"], "call": "modify_ldt"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "munlock"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->brk", "mm_struct->start_brk", "vm_area_struct->vm_flags", "mm_struct->start_data"], "call": "mincore"}, {"reason": ["mm_struct->brk", "mm_struct->start_brk", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->start_data"], "call": "io_cancel"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "mm_struct->def_flags"], "call": "mlockall"}], "fsetxattr": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "acct": [{"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "poll": [{"reason": ["poll_list->len"], "call": "ppoll"}], "clock_settime": [{"reason": ["k_clock->clock_set"], "call": "clock_getres"}, {"reason": ["k_clock->clock_set"], "call": "timer_delete"}, {"reason": ["k_clock->clock_set"], "call": "timer_create"}, {"reason": ["k_clock->clock_set"], "call": "clock_gettime"}, {"reason": ["k_clock->clock_set"], "call": "timer_settime"}, {"reason": ["k_clock->clock_set"], "call": "timer_gettime"}, {"reason": ["k_clock->clock_set"], "call": "clock_nanosleep"}, {"reason": ["k_clock->clock_set"], "call": "clock_adjtime"}], "select": [{"reason": ["task_struct->personality"], "call": "keyctl"}, {"reason": ["task_struct->personality", "timespec->tv_sec", "timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality"], "call": "msgrcv"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["task_struct->personality"], "call": "kill"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["task_struct->personality"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality"], "call": "sched_setparam"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["task_struct->personality"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["files_struct->fdt"], "call": "dup3"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["task_struct->personality"], "call": "getppid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchown"}, {"reason": ["task_struct->personality", "timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality"], "call": "capget"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "utime"}, {"reason": ["task_struct->personality"], "call": "sched_setaffinity"}, {"reason": ["files_struct->fdt"], "call": "unshare"}, {"reason": ["task_struct->personality"], "call": "signal"}, {"reason": ["task_struct->personality", "timespec->tv_sec", "timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["task_struct->personality"], "call": "umount"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["task_struct->personality", "timespec->tv_sec", "timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "uselib"}, {"reason": ["task_struct->personality"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality"], "call": "setsid"}, {"reason": ["task_struct->personality"], "call": "sigaltstack"}, {"reason": ["task_struct->personality"], "call": "sched_setattr"}, {"reason": ["task_struct->personality"], "call": "migrate_pages"}, {"reason": ["task_struct->personality"], "call": "getitimer"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["task_struct->personality"], "call": "setpgid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["task_struct->personality"], "call": "getsid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["task_struct->personality"], "call": "prlimit64"}, {"reason": ["task_struct->personality"], "call": "perf_event_open"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "stime"}, {"reason": ["task_struct->personality"], "call": "rt_sigaction"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["task_struct->personality"], "call": "getpgid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "poll"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlink"}, {"reason": ["task_struct->personality"], "call": "getpriority"}, {"reason": ["task_struct->personality"], "call": "sigaction"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["task_struct->personality"], "call": "setns"}, {"reason": ["task_struct->personality"], "call": "fork"}, {"reason": ["task_struct->personality"], "call": "get_robust_list"}, {"reason": ["task_struct->personality", "timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality"], "call": "ptrace"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["task_struct->personality"], "call": "sched_getattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["task_struct->personality"], "call": "getrusage"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fstat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["task_struct->personality"], "call": "sched_setscheduler"}, {"reason": ["task_struct->personality"], "call": "setitimer"}, {"reason": ["task_struct->personality"], "call": "ioprio_get"}, {"reason": ["task_struct->personality"], "call": "vfork"}, {"reason": ["task_struct->personality"], "call": "prctl"}, {"reason": ["task_struct->personality"], "call": "move_pages"}, {"reason": ["files_struct->fdt"], "call": "dup2"}, {"reason": ["task_struct->personality"], "call": "setpriority"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "newfstat"}, {"reason": ["task_struct->personality"], "call": "clone"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["task_struct->personality"], "call": "sched_getparam"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ppoll"}], "unlink": [{"reason": ["path->dentry", "path->mnt"], "call": "eventfd2"}, {"reason": ["dentry->d_inode"], "call": "mq_unlink"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapoff"}, {"reason": ["dentry->d_inode", "path->dentry", "path->mnt"], "call": "pivot_root"}, {"reason": ["path->dentry", "path->mnt"], "call": "memfd_create"}, {"reason": ["path->dentry", "path->mnt"], "call": "remap_file_pages"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup3"}, {"reason": ["path->dentry", "path->mnt"], "call": "unshare"}, {"reason": ["dentry->d_inode"], "call": "mkdirat"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_create1"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_ctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "flock"}, {"reason": ["path->dentry", "path->mnt"], "call": "openat"}, {"reason": ["path->dentry", "path->mnt"], "call": "lookup_dcookie"}, {"reason": ["path->dentry", "path->mnt"], "call": "uselib"}, {"reason": ["dentry->d_inode"], "call": "renameat2"}, {"reason": ["path->dentry", "path->mnt"], "call": "accept4"}, {"reason": ["path->dentry", "path->mnt"], "call": "socketpair"}, {"reason": ["dentry->d_inode", "path->dentry", "path->mnt"], "call": "getcwd"}, {"reason": ["dentry->d_inode"], "call": "ftruncate"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmat"}, {"reason": ["dentry->d_inode"], "call": "mknodat"}, {"reason": ["path->dentry", "path->mnt"], "call": "socket"}, {"reason": ["dentry->d_inode"], "call": "symlinkat"}, {"reason": ["path->dentry", "path->mnt"], "call": "pipe2"}, {"reason": ["path->dentry", "path->mnt"], "call": "perf_event_open"}, {"reason": ["dentry->d_inode"], "call": "linkat"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmdt"}, {"reason": ["path->dentry", "path->mnt"], "call": "quotactl"}, {"reason": ["path->dentry", "path->mnt"], "call": "acct"}, {"reason": ["path->dentry", "path->mnt"], "call": "open"}, {"reason": ["dentry->d_inode"], "call": "rmdir"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup"}, {"reason": ["path->dentry", "path->mnt"], "call": "setns"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapon"}, {"reason": ["path->dentry", "path->mnt"], "call": "mmap_pgoff"}, {"reason": ["dentry->d_inode", "path->dentry", "path->mnt"], "call": "mq_open"}, {"reason": ["dentry->d_inode"], "call": "unlinkat"}, {"reason": ["path->dentry", "path->mnt"], "call": "open_by_handle_at"}], "getsockopt": [{"reason": ["proto_ops->compat_getsockopt"], "call": "accept4"}], "getpriority": [{"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "kill"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_setparam"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "ioprio_set"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "signal"}, {"reason": ["cred->uid"], "call": "setreuid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_setattr"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "setpgid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "getsid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sigaction"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["cred->uid"], "call": "setresuid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "vfork"}, {"reason": ["cred->uid"], "call": "setuid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_getparam"}], "listxattr": [{"reason": ["path->dentry"], "call": "eventfd2"}, {"reason": ["path->dentry"], "call": "swapoff"}, {"reason": ["path->dentry"], "call": "pivot_root"}, {"reason": ["path->dentry"], "call": "memfd_create"}, {"reason": ["path->dentry"], "call": "remap_file_pages"}, {"reason": ["path->dentry"], "call": "dup3"}, {"reason": ["path->dentry"], "call": "unshare"}, {"reason": ["path->dentry"], "call": "epoll_create1"}, {"reason": ["path->dentry"], "call": "epoll_ctl"}, {"reason": ["path->dentry"], "call": "flock"}, {"reason": ["path->dentry"], "call": "openat"}, {"reason": ["path->dentry"], "call": "lookup_dcookie"}, {"reason": ["path->dentry"], "call": "uselib"}, {"reason": ["path->dentry"], "call": "accept4"}, {"reason": ["path->dentry"], "call": "socketpair"}, {"reason": ["path->dentry"], "call": "getcwd"}, {"reason": ["path->dentry"], "call": "shmat"}, {"reason": ["path->dentry"], "call": "socket"}, {"reason": ["path->dentry"], "call": "pipe2"}, {"reason": ["path->dentry"], "call": "perf_event_open"}, {"reason": ["path->dentry"], "call": "shmdt"}, {"reason": ["path->dentry"], "call": "quotactl"}, {"reason": ["path->dentry"], "call": "acct"}, {"reason": ["path->dentry"], "call": "open"}, {"reason": ["path->dentry"], "call": "dup"}, {"reason": ["path->dentry"], "call": "setns"}, {"reason": ["path->dentry"], "call": "shmctl"}, {"reason": ["path->dentry"], "call": "swapon"}, {"reason": ["path->dentry"], "call": "mmap_pgoff"}, {"reason": ["path->dentry"], "call": "mq_open"}, {"reason": ["path->dentry"], "call": "open_by_handle_at"}], "sigaction": [{"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "setns"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}], "nanosleep": [{"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchown"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "utime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "uselib"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "stime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "poll"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlink"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fstat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "newfstat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ppoll"}], "quotactl": [{"reason": ["super_block->s_qcop", "super_block->s_quota_types", "super_block->s_flags"], "call": "syncfs"}, {"reason": ["filename->name"], "call": "sysfs"}, {"reason": ["filename->name"], "call": "mq_unlink"}, {"reason": ["filename->name"], "call": "swapoff"}, {"reason": ["super_block->s_qcop", "super_block->s_quota_types", "super_block->s_flags"], "call": "ustat"}, {"reason": ["super_block->s_qcop", "super_block->s_quota_types", "super_block->s_flags"], "call": "umount"}, {"reason": ["filename->name"], "call": "openat"}, {"reason": ["filename->name"], "call": "uselib"}, {"reason": ["filename->name"], "call": "renameat2"}, {"reason": ["filename->name"], "call": "symlinkat"}, {"reason": ["filename->name"], "call": "acct"}, {"reason": ["filename->name"], "call": "open"}, {"reason": ["filename->name"], "call": "unlink"}, {"reason": ["filename->name"], "call": "rmdir"}, {"reason": ["super_block->s_qcop", "filename->name", "super_block->s_quota_types", "super_block->s_flags"], "call": "swapon"}, {"reason": ["filename->name"], "call": "mq_open"}, {"reason": ["filename->name"], "call": "unlinkat"}], "mq_getsetattr": [{"reason": ["file->f_op"], "call": "eventfd2"}, {"reason": ["file->f_op"], "call": "swapoff"}, {"reason": ["file->f_op"], "call": "memfd_create"}, {"reason": ["file->f_op"], "call": "remap_file_pages"}, {"reason": ["file->f_op"], "call": "dup3"}, {"reason": ["mq_attr->mq_flags"], "call": "mq_timedreceive"}, {"reason": ["file->f_op"], "call": "epoll_create1"}, {"reason": ["file->f_op"], "call": "epoll_ctl"}, {"reason": ["file->f_op"], "call": "flock"}, {"reason": ["file->f_op"], "call": "openat"}, {"reason": ["file->f_op"], "call": "uselib"}, {"reason": ["file->f_op"], "call": "accept4"}, {"reason": ["file->f_op"], "call": "socketpair"}, {"reason": ["file->f_op"], "call": "shmat"}, {"reason": ["file->f_op"], "call": "socket"}, {"reason": ["file->f_op"], "call": "pipe2"}, {"reason": ["file->f_op"], "call": "perf_event_open"}, {"reason": ["file->f_op"], "call": "shmdt"}, {"reason": ["file->f_op"], "call": "acct"}, {"reason": ["file->f_op"], "call": "open"}, {"reason": ["file->f_op"], "call": "dup"}, {"reason": ["file->f_op"], "call": "setns"}, {"reason": ["mq_attr->mq_flags"], "call": "mq_timedsend"}, {"reason": ["file->f_op"], "call": "shmctl"}, {"reason": ["file->f_op"], "call": "swapon"}, {"reason": ["file->f_op"], "call": "mmap_pgoff"}, {"reason": ["mq_attr->mq_flags"], "call": "mq_notify"}, {"reason": ["file->f_op", "mq_attr->mq_flags"], "call": "mq_open"}, {"reason": ["file->f_op"], "call": "open_by_handle_at"}], "faccessat": [{"reason": ["task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["path->mnt"], "call": "eventfd2"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["path->mnt"], "call": "swapoff"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["path->mnt"], "call": "pivot_root"}, {"reason": ["path->mnt"], "call": "memfd_create"}, {"reason": ["task_struct->cred"], "call": "ioprio_set"}, {"reason": ["path->mnt"], "call": "remap_file_pages"}, {"reason": ["path->mnt"], "call": "dup3"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["path->mnt"], "call": "unshare"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["cred->uid"], "call": "setreuid"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["path->mnt"], "call": "epoll_create1"}, {"reason": ["path->mnt"], "call": "epoll_ctl"}, {"reason": ["path->mnt"], "call": "flock"}, {"reason": ["path->mnt"], "call": "openat"}, {"reason": ["path->mnt"], "call": "lookup_dcookie"}, {"reason": ["path->mnt"], "call": "uselib"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["path->mnt"], "call": "accept4"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["path->mnt"], "call": "socketpair"}, {"reason": ["task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["path->mnt"], "call": "getcwd"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["path->mnt"], "call": "shmat"}, {"reason": ["path->mnt"], "call": "socket"}, {"reason": ["path->mnt"], "call": "pipe2"}, {"reason": ["task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred", "path->mnt"], "call": "perf_event_open"}, {"reason": ["path->mnt"], "call": "shmdt"}, {"reason": ["path->mnt"], "call": "quotactl"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["path->mnt"], "call": "acct"}, {"reason": ["path->mnt"], "call": "open"}, {"reason": ["task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["path->mnt"], "call": "dup"}, {"reason": ["task_struct->cred", "path->mnt"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["path->mnt"], "call": "shmctl"}, {"reason": ["path->mnt"], "call": "swapon"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["cred->uid"], "call": "setresuid"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["cred->uid"], "call": "setuid"}, {"reason": ["path->mnt"], "call": "mmap_pgoff"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["path->mnt"], "call": "mq_open"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}, {"reason": ["path->mnt"], "call": "open_by_handle_at"}], "rmdir": [{"reason": ["path->dentry", "path->mnt"], "call": "eventfd2"}, {"reason": ["dentry->d_inode"], "call": "mq_unlink"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapoff"}, {"reason": ["dentry->d_inode", "path->dentry", "path->mnt"], "call": "pivot_root"}, {"reason": ["path->dentry", "path->mnt"], "call": "memfd_create"}, {"reason": ["path->dentry", "path->mnt"], "call": "remap_file_pages"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup3"}, {"reason": ["path->dentry", "path->mnt"], "call": "unshare"}, {"reason": ["dentry->d_inode"], "call": "mkdirat"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_create1"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_ctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "flock"}, {"reason": ["path->dentry", "path->mnt"], "call": "openat"}, {"reason": ["path->dentry", "path->mnt"], "call": "lookup_dcookie"}, {"reason": ["path->dentry", "path->mnt"], "call": "uselib"}, {"reason": ["dentry->d_inode"], "call": "renameat2"}, {"reason": ["path->dentry", "path->mnt"], "call": "accept4"}, {"reason": ["path->dentry", "path->mnt"], "call": "socketpair"}, {"reason": ["dentry->d_inode", "path->dentry", "path->mnt"], "call": "getcwd"}, {"reason": ["dentry->d_inode"], "call": "ftruncate"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmat"}, {"reason": ["dentry->d_inode"], "call": "mknodat"}, {"reason": ["path->dentry", "path->mnt"], "call": "socket"}, {"reason": ["dentry->d_inode"], "call": "symlinkat"}, {"reason": ["path->dentry", "path->mnt"], "call": "pipe2"}, {"reason": ["path->dentry", "path->mnt"], "call": "perf_event_open"}, {"reason": ["dentry->d_inode"], "call": "linkat"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmdt"}, {"reason": ["path->dentry", "path->mnt"], "call": "quotactl"}, {"reason": ["path->dentry", "path->mnt"], "call": "acct"}, {"reason": ["path->dentry", "path->mnt"], "call": "open"}, {"reason": ["dentry->d_inode"], "call": "unlink"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup"}, {"reason": ["path->dentry", "path->mnt"], "call": "setns"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapon"}, {"reason": ["path->dentry", "path->mnt"], "call": "mmap_pgoff"}, {"reason": ["dentry->d_inode", "path->dentry", "path->mnt"], "call": "mq_open"}, {"reason": ["dentry->d_inode"], "call": "unlinkat"}, {"reason": ["path->dentry", "path->mnt"], "call": "open_by_handle_at"}], "fallocate": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "setgroups16": [{"reason": ["group_info->ngroups"], "call": "setgroups"}], "getdents64": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg", "fd->flags"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["mm_segment_t->seg", "fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["mm_segment_t->seg"], "call": "setns"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["mm_segment_t->seg", "fd->flags"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "io_cancel": [{"reason": ["mm_struct->ioctx_table"], "call": "swapoff"}, {"reason": ["mm_struct->ioctx_table"], "call": "remap_file_pages"}, {"reason": ["kioctx_table->nr", "kioctx->user_id", "mm_struct->ioctx_table"], "call": "io_getevents"}, {"reason": ["mm_struct->ioctx_table"], "call": "migrate_pages"}, {"reason": ["mm_struct->ioctx_table"], "call": "shmdt"}, {"reason": ["mm_struct->ioctx_table"], "call": "brk"}, {"reason": ["mm_struct->ioctx_table"], "call": "get_mempolicy"}, {"reason": ["kioctx->user_id"], "call": "io_submit"}, {"reason": ["mm_struct->ioctx_table"], "call": "getrusage"}, {"reason": ["kioctx_table->nr", "kioctx->user_id", "mm_struct->ioctx_table"], "call": "io_setup"}, {"reason": ["mm_struct->ioctx_table"], "call": "mremap"}, {"reason": ["kioctx_table->nr", "kioctx->user_id", "mm_struct->ioctx_table"], "call": "io_destroy"}, {"reason": ["mm_struct->ioctx_table"], "call": "mbind"}, {"reason": ["mm_struct->ioctx_table"], "call": "prctl"}, {"reason": ["mm_struct->ioctx_table"], "call": "move_pages"}, {"reason": ["mm_struct->ioctx_table"], "call": "modify_ldt"}, {"reason": ["mm_struct->ioctx_table"], "call": "mincore"}], "get_mempolicy": [{"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "keyctl"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "msgrcv"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "kill"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "sched_getaffinity"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "sched_setparam"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "ioprio_set"}, {"reason": ["vm_area_struct->vm_ops"], "call": "remap_file_pages"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "getppid"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "mq_timedreceive"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "capget"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "sched_setaffinity"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "signal"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "semtimedop"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "umount"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "setsid"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "sigaltstack"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "sched_setattr"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "migrate_pages"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "getitimer"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "setpgid"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "getsid"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "prlimit64"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev", "mempolicy->mode"], "call": "set_mempolicy"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "perf_event_open"}, {"reason": ["vm_area_struct->vm_ops"], "call": "shmdt"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "rt_sigaction"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "getpgid"}, {"reason": ["vm_area_struct->vm_ops"], "call": "brk"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "getpriority"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "sigaction"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "setns"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "fork"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "get_robust_list"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "mq_timedsend"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "sched_getscheduler"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "ptrace"}, {"reason": ["vm_area_struct->vm_ops"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_ops"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_ops"], "call": "madvise"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "sched_getattr"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "getrusage"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "sched_setscheduler"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "setitimer"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "ioprio_get"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "vfork"}, {"reason": ["vm_area_struct->vm_ops"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_ops"], "call": "mremap"}, {"reason": ["mempolicy->mode"], "call": "mbind"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev", "vm_area_struct->vm_ops"], "call": "prctl"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "move_pages"}, {"reason": ["vm_area_struct->vm_ops"], "call": "munlock"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "setpriority"}, {"reason": ["vm_area_struct->vm_ops"], "call": "mincore"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "clone"}, {"reason": ["task_struct->mempolicy", "task_struct->il_prev"], "call": "sched_getparam"}, {"reason": ["vm_area_struct->vm_ops"], "call": "mlockall"}], "io_submit": [{"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "setns"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}], "inotify_init1": [{"reason": ["task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["task_struct->cred"], "call": "ioprio_set"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["fsnotify_group->overflow_event", "inotify_group_private_data->ucounts"], "call": "inotify_rm_watch"}, {"reason": ["task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["fsnotify_group->overflow_event", "inotify_group_private_data->ucounts"], "call": "inotify_add_watch"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "futimesat": [{"reason": ["timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["timespec->tv_nsec"], "call": "fchown"}, {"reason": ["timeval->tv_usec"], "call": "waitid"}, {"reason": ["timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["timespec->tv_nsec"], "call": "utime"}, {"reason": ["timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["timeval->tv_usec", "timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["timeval->tv_usec"], "call": "adjtimex"}, {"reason": ["timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_nsec"], "call": "uselib"}, {"reason": ["timeval->tv_usec"], "call": "getitimer"}, {"reason": ["timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_nsec"], "call": "stime"}, {"reason": ["timespec->tv_nsec"], "call": "poll"}, {"reason": ["timeval->tv_usec", "timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_nsec"], "call": "unlink"}, {"reason": ["timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timeval->tv_usec"], "call": "wait4"}, {"reason": ["timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["timeval->tv_usec"], "call": "getrusage"}, {"reason": ["timespec->tv_nsec"], "call": "fstat"}, {"reason": ["timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["timeval->tv_usec"], "call": "setitimer"}, {"reason": ["timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["timespec->tv_nsec"], "call": "newfstat"}, {"reason": ["timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["timeval->tv_usec"], "call": "clock_adjtime"}, {"reason": ["timeval->tv_usec"], "call": "alarm"}, {"reason": ["timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["timeval->tv_usec", "timespec->tv_nsec"], "call": "ppoll"}], "mq_timedsend": [{"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "dup3"}, {"reason": ["mqueue_inode_info->node_cache", "mq_attr->mq_curmsgs", "mq_attr->mq_maxmsg", "mq_attr->mq_msgsize"], "call": "mq_timedreceive"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "flock"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "openat"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "uselib"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "accept4"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "shmat"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "socket"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "acct"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "open"}, {"reason": ["mqueue_inode_info->node_cache", "mq_attr->mq_curmsgs", "mq_attr->mq_maxmsg", "file->f_flags", "mq_attr->mq_msgsize"], "call": "mq_getsetattr"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "dup"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "setns"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "swapon"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["mqueue_inode_info->node_cache", "mq_attr->mq_curmsgs", "mq_attr->mq_maxmsg", "mq_attr->mq_msgsize"], "call": "mq_notify"}, {"reason": ["mq_attr->mq_curmsgs", "file->f_op", "mq_attr->mq_maxmsg", "file->f_mode", "file->f_flags", "mq_attr->mq_msgsize"], "call": "mq_open"}, {"reason": ["file->f_op", "file->f_flags", "file->f_mode"], "call": "open_by_handle_at"}], "getresgid16": [{"reason": ["task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["task_struct->cred"], "call": "ioprio_set"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "sched_getscheduler": [{"reason": ["task_struct->sched_reset_on_fork"], "call": "keyctl"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "msgrcv"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "kill"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "sched_getaffinity"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "sched_setparam"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "ioprio_set"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "getppid"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "mq_timedreceive"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "capget"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "sched_setaffinity"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "signal"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "semtimedop"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "umount"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "setsid"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "sigaltstack"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "sched_setattr"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "migrate_pages"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "getitimer"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "setpgid"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "getsid"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "prlimit64"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "perf_event_open"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "rt_sigaction"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "getpgid"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "getpriority"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "sigaction"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "setns"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "fork"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "get_robust_list"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "mq_timedsend"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "ptrace"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "sched_getattr"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "getrusage"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "sched_setscheduler"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "setitimer"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "ioprio_get"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "vfork"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "prctl"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "move_pages"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "setpriority"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "clone"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "sched_getparam"}], "fgetxattr": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "ptrace": [{"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "keyctl"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "msgrcv"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "kill"}, {"reason": ["task_struct->state"], "call": "pause"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "sched_getaffinity"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "sched_setparam"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "ioprio_set"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "getppid"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "mq_timedreceive"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "capget"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "sched_setaffinity"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "signal"}, {"reason": ["task_struct->flags"], "call": "setreuid"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "semtimedop"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "umount"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "setsid"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "sigaltstack"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "sched_setattr"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "migrate_pages"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "getitimer"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "setpgid"}, {"reason": ["task_struct->state"], "call": "rt_sigsuspend"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "getsid"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "prlimit64"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "perf_event_open"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "rt_sigaction"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "getpgid"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "getpriority"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "sigaction"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "setns"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "fork"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "get_robust_list"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "mq_timedsend"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "sched_getscheduler"}, {"reason": ["task_struct->state"], "call": "epoll_wait"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "sched_getattr"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "getrusage"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "sched_setscheduler"}, {"reason": ["task_struct->flags"], "call": "setresuid"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "setitimer"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "ioprio_get"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "vfork"}, {"reason": ["task_struct->flags"], "call": "setuid"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "prctl"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "move_pages"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "setpriority"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "clone"}, {"reason": ["task_struct->state"], "call": "sigsuspend"}, {"reason": ["task_struct->exit_state", "task_struct->parent", "task_struct->state", "task_struct->real_parent", "task_struct->ptrace", "task_struct->flags"], "call": "sched_getparam"}], "shmctl": [{"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["kern_ipc_perm->mode", "kern_ipc_perm->deleted", "mm_segment_t->seg", "ipc_namespace->user_ns", "task_struct->cred"], "call": "msgrcv"}, {"reason": ["file->f_op"], "call": "eventfd2"}, {"reason": ["ipc_namespace->user_ns"], "call": "mq_unlink"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "kill"}, {"reason": ["file->f_op"], "call": "swapoff"}, {"reason": ["ipc_namespace->user_ns"], "call": "msgget"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "sched_setparam"}, {"reason": ["file->f_op"], "call": "memfd_create"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "ioprio_set"}, {"reason": ["file->f_op"], "call": "remap_file_pages"}, {"reason": ["file->f_op"], "call": "dup3"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "capget"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "signal"}, {"reason": ["kern_ipc_perm->mode", "kern_ipc_perm->deleted", "mm_segment_t->seg", "ipc_namespace->user_ns", "task_struct->cred"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "umount"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["file->f_op"], "call": "epoll_create1"}, {"reason": ["kern_ipc_perm->mode", "kern_ipc_perm->deleted", "ipc_namespace->user_ns"], "call": "semctl"}, {"reason": ["file->f_op"], "call": "epoll_ctl"}, {"reason": ["file->f_op"], "call": "flock"}, {"reason": ["file->f_op"], "call": "openat"}, {"reason": ["ipc_namespace->user_ns"], "call": "shmget"}, {"reason": ["file->f_op"], "call": "uselib"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["file->f_op"], "call": "accept4"}, {"reason": ["kern_ipc_perm->mode", "kern_ipc_perm->deleted", "ipc_namespace->user_ns"], "call": "msgctl"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "setsid"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "sched_setattr"}, {"reason": ["file->f_op"], "call": "socketpair"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "setpgid"}, {"reason": ["ipc_namespace->user_ns"], "call": "semget"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "getsid"}, {"reason": ["file->f_op", "kern_ipc_perm->deleted", "ipc_namespace->user_ns", "kern_ipc_perm->mode"], "call": "shmat"}, {"reason": ["file->f_op"], "call": "socket"}, {"reason": ["file->f_op"], "call": "pipe2"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "prlimit64"}, {"reason": ["file->f_op", "mm_segment_t->seg", "task_struct->cred"], "call": "perf_event_open"}, {"reason": ["file->f_op"], "call": "shmdt"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "getpgid"}, {"reason": ["file->f_op"], "call": "acct"}, {"reason": ["file->f_op"], "call": "open"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "sigaction"}, {"reason": ["file->f_op"], "call": "dup"}, {"reason": ["file->f_op", "mm_segment_t->seg", "task_struct->cred", "ipc_namespace->user_ns"], "call": "setns"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "fork"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "ptrace"}, {"reason": ["file->f_op"], "call": "swapon"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "vfork"}, {"reason": ["file->f_op"], "call": "mmap_pgoff"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "prctl"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "move_pages"}, {"reason": ["kern_ipc_perm->mode", "kern_ipc_perm->deleted", "ipc_namespace->user_ns"], "call": "msgsnd"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "clone"}, {"reason": ["file->f_op", "ipc_namespace->user_ns"], "call": "mq_open"}, {"reason": ["mm_segment_t->seg", "task_struct->cred"], "call": "sched_getparam"}, {"reason": ["file->f_op"], "call": "open_by_handle_at"}], "fcntl64": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["fd->flags", "file->f_mode"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["fd->flags", "file->f_mode"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["fd->flags", "flock->l_len", "flock->l_start"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "munlockall": [{"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "remap_file_pages"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "shmdt"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "brk"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "get_mempolicy"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "madvise"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mremap"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "prctl"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "munlock"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mincore"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mlockall"}], "swapon": [{"reason": ["inode->i_flags"], "call": "mq_unlink"}, {"reason": ["inode->i_flags", "swap_info_struct->bdev", "swap_info_struct->type", "swap_info_struct->percpu_cluster", "swap_info_struct->flags"], "call": "swapoff"}, {"reason": ["inode->i_flags"], "call": "fchmod"}, {"reason": ["inode->i_flags"], "call": "memfd_create"}, {"reason": ["inode->i_flags"], "call": "readlinkat"}, {"reason": ["inode->i_flags"], "call": "fchown"}, {"reason": ["inode->i_flags"], "call": "mq_timedreceive"}, {"reason": ["inode->i_flags"], "call": "uselib"}, {"reason": ["inode->i_flags"], "call": "fchmodat"}, {"reason": ["inode->i_flags"], "call": "inotify_add_watch"}, {"reason": ["inode->i_flags"], "call": "ftruncate"}, {"reason": ["inode->i_flags"], "call": "ioctl"}, {"reason": ["inode->i_flags"], "call": "linkat"}, {"reason": ["inode->i_flags"], "call": "unlink"}, {"reason": ["inode->i_flags"], "call": "mq_getsetattr"}, {"reason": ["inode->i_flags"], "call": "faccessat"}, {"reason": ["inode->i_flags"], "call": "mq_timedsend"}, {"reason": ["inode->i_flags"], "call": "fchownat"}, {"reason": ["inode->i_flags"], "call": "mq_notify"}, {"reason": ["inode->i_flags"], "call": "sendfile"}, {"reason": ["inode->i_flags"], "call": "unlinkat"}, {"reason": ["inode->i_flags"], "call": "sendfile64"}], "pkey_mprotect": [{"reason": ["task_struct->personality", "task_struct->mm"], "call": "keyctl"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "msgrcv"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "kill"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sched_setparam"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "remap_file_pages"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "getppid"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "capget"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "signal"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "semtimedop"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "umount"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "setsid"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sigaltstack"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sched_setattr"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "migrate_pages"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "getitimer"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "setpgid"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "getsid"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "prlimit64"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "perf_event_open"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "shmdt"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "rt_sigaction"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "getpgid"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "brk"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "getpriority"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sigaction"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "setns"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "fork"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "get_mempolicy"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "get_robust_list"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "ptrace"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "madvise"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sched_getattr"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "getrusage"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sched_setscheduler"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "setitimer"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "ioprio_get"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "vfork"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mremap"}, {"reason": ["task_struct->personality", "task_struct->mm", "vm_area_struct->vm_flags", "vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "prctl"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "move_pages"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "munlock"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "setpriority"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mincore"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "clone"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sched_getparam"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mlockall"}], "signalfd4": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["file->f_op"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["file->f_op"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["file->f_op"], "call": "memfd_create"}, {"reason": ["file->f_op"], "call": "remap_file_pages"}, {"reason": ["file->f_op"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["file->f_op"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["file->f_op", "fd->flags"], "call": "epoll_ctl"}, {"reason": ["file->f_op", "fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_op"], "call": "openat"}, {"reason": ["file->f_op"], "call": "uselib"}, {"reason": ["file->f_op", "fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["file->f_op"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["file->f_op"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_op"], "call": "socket"}, {"reason": ["file->f_op"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["file->f_op", "fd->flags"], "call": "perf_event_open"}, {"reason": ["file->f_op"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_op"], "call": "acct"}, {"reason": ["file->f_op"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_op"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_op"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_op"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["file->f_op"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_op"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["file->f_op"], "call": "mq_open"}, {"reason": ["file->f_op"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "madvise": [{"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "remap_file_pages"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "shmdt"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "brk"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "get_mempolicy"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mremap"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "prctl"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "munlock"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mincore"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mlockall"}], "getresuid": [{"reason": ["task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["task_struct->cred"], "call": "ioprio_set"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "statfs": [{"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "ustat"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "fstatfs"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "fstatfs64"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "statfs64"}], "mount": [{"reason": ["task_struct->personality"], "call": "keyctl"}, {"reason": ["task_struct->personality"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality"], "call": "msgrcv"}, {"reason": ["task_struct->personality"], "call": "kill"}, {"reason": ["task_struct->personality"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality"], "call": "sched_setparam"}, {"reason": ["task_struct->personality"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["task_struct->personality"], "call": "getppid"}, {"reason": ["task_struct->personality"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality"], "call": "capget"}, {"reason": ["task_struct->personality"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality"], "call": "signal"}, {"reason": ["task_struct->personality"], "call": "semtimedop"}, {"reason": ["task_struct->personality"], "call": "umount"}, {"reason": ["task_struct->personality"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->personality"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality"], "call": "setsid"}, {"reason": ["task_struct->personality"], "call": "sigaltstack"}, {"reason": ["task_struct->personality"], "call": "sched_setattr"}, {"reason": ["task_struct->personality"], "call": "migrate_pages"}, {"reason": ["task_struct->personality"], "call": "getitimer"}, {"reason": ["task_struct->personality"], "call": "setpgid"}, {"reason": ["task_struct->personality"], "call": "getsid"}, {"reason": ["task_struct->personality"], "call": "prlimit64"}, {"reason": ["task_struct->personality"], "call": "perf_event_open"}, {"reason": ["task_struct->personality"], "call": "rt_sigaction"}, {"reason": ["task_struct->personality"], "call": "getpgid"}, {"reason": ["task_struct->personality"], "call": "getpriority"}, {"reason": ["task_struct->personality"], "call": "sigaction"}, {"reason": ["task_struct->personality"], "call": "setns"}, {"reason": ["task_struct->personality"], "call": "fork"}, {"reason": ["task_struct->personality"], "call": "get_robust_list"}, {"reason": ["task_struct->personality"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality"], "call": "ptrace"}, {"reason": ["task_struct->personality"], "call": "sched_getattr"}, {"reason": ["task_struct->personality"], "call": "getrusage"}, {"reason": ["task_struct->personality"], "call": "sched_setscheduler"}, {"reason": ["task_struct->personality"], "call": "setitimer"}, {"reason": ["task_struct->personality"], "call": "ioprio_get"}, {"reason": ["task_struct->personality"], "call": "vfork"}, {"reason": ["task_struct->personality"], "call": "prctl"}, {"reason": ["task_struct->personality"], "call": "move_pages"}, {"reason": ["task_struct->personality"], "call": "setpriority"}, {"reason": ["task_struct->personality"], "call": "clone"}, {"reason": ["task_struct->personality"], "call": "sched_getparam"}], "timerfd_gettime": [{"reason": ["timerfd_ctx->tintv", "timerfd_ctx->expired"], "call": "timerfd_settime"}, {"reason": ["timerfd_ctx->tintv", "timerfd_ctx->expired"], "call": "timerfd_create"}], "fchownat": [{"reason": ["path->dentry"], "call": "eventfd2"}, {"reason": ["path->dentry"], "call": "swapoff"}, {"reason": ["path->dentry"], "call": "pivot_root"}, {"reason": ["path->dentry"], "call": "memfd_create"}, {"reason": ["path->dentry"], "call": "remap_file_pages"}, {"reason": ["path->dentry"], "call": "dup3"}, {"reason": ["path->dentry"], "call": "unshare"}, {"reason": ["path->dentry"], "call": "epoll_create1"}, {"reason": ["path->dentry"], "call": "epoll_ctl"}, {"reason": ["path->dentry"], "call": "flock"}, {"reason": ["path->dentry"], "call": "openat"}, {"reason": ["path->dentry"], "call": "lookup_dcookie"}, {"reason": ["path->dentry"], "call": "uselib"}, {"reason": ["path->dentry"], "call": "accept4"}, {"reason": ["path->dentry"], "call": "socketpair"}, {"reason": ["path->dentry"], "call": "getcwd"}, {"reason": ["path->dentry"], "call": "shmat"}, {"reason": ["path->dentry"], "call": "socket"}, {"reason": ["path->dentry"], "call": "pipe2"}, {"reason": ["path->dentry"], "call": "perf_event_open"}, {"reason": ["path->dentry"], "call": "shmdt"}, {"reason": ["path->dentry"], "call": "quotactl"}, {"reason": ["path->dentry"], "call": "acct"}, {"reason": ["path->dentry"], "call": "open"}, {"reason": ["path->dentry"], "call": "dup"}, {"reason": ["path->dentry"], "call": "setns"}, {"reason": ["path->dentry"], "call": "shmctl"}, {"reason": ["path->dentry"], "call": "swapon"}, {"reason": ["path->dentry"], "call": "mmap_pgoff"}, {"reason": ["path->dentry"], "call": "mq_open"}, {"reason": ["path->dentry"], "call": "open_by_handle_at"}], "getrusage": [{"reason": ["signal_struct->maxrss"], "call": "timer_create"}, {"reason": ["signal_struct->maxrss"], "call": "exit_group"}], "fstat": [{"reason": ["__old_kernel_stat->st_nlink", "__old_kernel_stat->st_ino"], "call": "lstat"}, {"reason": ["__old_kernel_stat->st_nlink", "__old_kernel_stat->st_ino"], "call": "stat"}, {"reason": ["kstat->ino", "kstat->nlink", "kstat->rdev", "kstat->dev"], "call": "newfstat"}], "timerfd_settime": [{"reason": ["timerfd_ctx->tintv", "timerfd_ctx->expired"], "call": "timerfd_gettime"}, {"reason": ["timerfd_ctx->tintv", "timerfd_ctx->expired"], "call": "timerfd_create"}], "setresuid": [{"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["cred->user", "cred->user_ns"], "call": "setfsuid"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["cred->user", "cred->user_ns"], "call": "getresuid16"}, {"reason": ["cred->user", "cred->user_ns"], "call": "getresgid"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["cred->user", "cred->user_ns"], "call": "setgid"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "ioprio_set"}, {"reason": ["cred->user", "cred->user_ns"], "call": "capset"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["cred->user", "cred->user_ns"], "call": "getresgid16"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["cred->user", "cred->user_ns"], "call": "setfsgid"}, {"reason": ["cred->user", "cred->user_ns"], "call": "unshare"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["cred->uid", "cred->user", "cred->suid", "cred->euid", "cred->user_ns"], "call": "setreuid"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["cred->user", "cred->user_ns"], "call": "epoll_create1"}, {"reason": ["cred->user", "cred->user_ns"], "call": "getresuid"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["cred->user", "cred->user_ns"], "call": "setresgid"}, {"reason": ["cred->user", "cred->user_ns"], "call": "setregid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["cred->user", "cred->user_ns"], "call": "getgroups16"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["cred->user", "cred->user_ns"], "call": "faccessat"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["cred->uid", "cred->user", "cred->suid", "cred->euid", "cred->user_ns"], "call": "setuid"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["cred->user", "cred->user_ns"], "call": "getgroups"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "ioprio_get": [{"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "keyctl"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "msgrcv"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "kill"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "sched_getaffinity"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "sched_setparam"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "ioprio_set"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "getppid"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "mq_timedreceive"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "capget"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "sched_setaffinity"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "signal"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "semtimedop"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "umount"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "setsid"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "sigaltstack"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "sched_setattr"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "migrate_pages"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "getitimer"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "setpgid"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "getsid"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "prlimit64"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "perf_event_open"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "rt_sigaction"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "getpgid"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "getpriority"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "sigaction"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "setns"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "fork"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "get_robust_list"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "mq_timedsend"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "sched_getscheduler"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "ptrace"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "sched_getattr"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "getrusage"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "sched_setscheduler"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "setitimer"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "vfork"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "prctl"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "move_pages"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "setpriority"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "clone"}, {"reason": ["task_struct->real_cred", "task_struct->cred", "task_struct->io_context"], "call": "sched_getparam"}], "setuid": [{"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["cred->user", "cred->user_ns"], "call": "setfsuid"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["cred->user", "cred->user_ns"], "call": "getresuid16"}, {"reason": ["cred->user", "cred->user_ns"], "call": "getresgid"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["cred->user", "cred->user_ns"], "call": "setgid"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "ioprio_set"}, {"reason": ["cred->user", "cred->user_ns"], "call": "capset"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["cred->user", "cred->user_ns"], "call": "getresgid16"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["cred->user", "cred->user_ns"], "call": "setfsgid"}, {"reason": ["cred->user", "cred->user_ns"], "call": "unshare"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["cred->uid", "cred->user_ns", "cred->suid", "cred->user"], "call": "setreuid"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["cred->user", "cred->user_ns"], "call": "epoll_create1"}, {"reason": ["cred->user", "cred->user_ns"], "call": "getresuid"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["cred->user", "cred->user_ns"], "call": "setresgid"}, {"reason": ["cred->user", "cred->user_ns"], "call": "setregid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["cred->user", "cred->user_ns"], "call": "getgroups16"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["cred->user", "cred->user_ns"], "call": "faccessat"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["cred->uid", "cred->user_ns", "cred->suid", "cred->user"], "call": "setresuid"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["cred->user", "cred->user_ns"], "call": "getgroups"}, {"reason": ["cred->user", "cred->user_ns", "task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "io_setup": [{"reason": ["kioctx->cpu", "kioctx->max_reqs", "kioctx->req_batch", "kioctx->mmap_base", "kioctx->mmap_size"], "call": "io_getevents"}, {"reason": ["kioctx->cpu", "kioctx->max_reqs", "kioctx->req_batch", "kioctx->mmap_base", "kioctx->mmap_size"], "call": "io_submit"}, {"reason": ["kioctx->cpu", "kioctx->max_reqs", "kioctx->req_batch", "kioctx->mmap_base", "kioctx->mmap_size"], "call": "io_destroy"}, {"reason": ["kioctx->cpu", "kioctx->max_reqs", "kioctx->req_batch", "kioctx->mmap_base", "kioctx->mmap_size"], "call": "io_cancel"}], "mprotect": [{"reason": ["task_struct->personality", "task_struct->mm"], "call": "keyctl"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "msgrcv"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "kill"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sched_setparam"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "remap_file_pages"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "getppid"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "capget"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "signal"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "semtimedop"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "umount"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "setsid"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sigaltstack"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sched_setattr"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "migrate_pages"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "getitimer"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "setpgid"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "getsid"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "prlimit64"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "perf_event_open"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "shmdt"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "rt_sigaction"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "getpgid"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "brk"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "getpriority"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sigaction"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "setns"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "fork"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "get_mempolicy"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "get_robust_list"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "ptrace"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "madvise"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sched_getattr"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "getrusage"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sched_setscheduler"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "setitimer"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "ioprio_get"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "vfork"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mremap"}, {"reason": ["task_struct->personality", "task_struct->mm", "vm_area_struct->vm_flags", "vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "prctl"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "move_pages"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "munlock"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "setpriority"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mincore"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "clone"}, {"reason": ["task_struct->personality", "task_struct->mm"], "call": "sched_getparam"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mlockall"}], "mmap_pgoff": [{"reason": ["file->f_op"], "call": "eventfd2"}, {"reason": ["file->f_op"], "call": "swapoff"}, {"reason": ["file->f_op"], "call": "memfd_create"}, {"reason": ["file->f_op"], "call": "remap_file_pages"}, {"reason": ["file->f_op"], "call": "dup3"}, {"reason": ["file->f_op"], "call": "epoll_create1"}, {"reason": ["file->f_op"], "call": "epoll_ctl"}, {"reason": ["file->f_op"], "call": "flock"}, {"reason": ["file->f_op"], "call": "openat"}, {"reason": ["file->f_op"], "call": "uselib"}, {"reason": ["file->f_op"], "call": "accept4"}, {"reason": ["file->f_op"], "call": "socketpair"}, {"reason": ["file->f_op"], "call": "shmat"}, {"reason": ["file->f_op"], "call": "socket"}, {"reason": ["file->f_op"], "call": "pipe2"}, {"reason": ["file->f_op"], "call": "perf_event_open"}, {"reason": ["file->f_op"], "call": "shmdt"}, {"reason": ["file->f_op"], "call": "acct"}, {"reason": ["file->f_op"], "call": "open"}, {"reason": ["file->f_op"], "call": "dup"}, {"reason": ["file->f_op"], "call": "setns"}, {"reason": ["file->f_op"], "call": "shmctl"}, {"reason": ["file->f_op"], "call": "swapon"}, {"reason": ["file->f_op"], "call": "mq_open"}, {"reason": ["file->f_op"], "call": "open_by_handle_at"}], "mremap": [{"reason": ["task_struct->personality"], "call": "keyctl"}, {"reason": ["task_struct->personality"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality"], "call": "msgrcv"}, {"reason": ["task_struct->personality"], "call": "kill"}, {"reason": ["mm_struct->map_count"], "call": "swapoff"}, {"reason": ["task_struct->personality"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality"], "call": "sched_setparam"}, {"reason": ["task_struct->personality"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_next", "vm_area_struct->vm_file", "vm_area_struct->vm_ops", "vm_area_struct->vm_flags", "mm_struct->map_count", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "remap_file_pages"}, {"reason": ["mm_struct->map_count"], "call": "io_getevents"}, {"reason": ["task_struct->personality"], "call": "getppid"}, {"reason": ["task_struct->personality"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality"], "call": "capget"}, {"reason": ["task_struct->personality"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality"], "call": "signal"}, {"reason": ["task_struct->personality"], "call": "semtimedop"}, {"reason": ["task_struct->personality"], "call": "umount"}, {"reason": ["task_struct->personality"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->personality"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality"], "call": "setsid"}, {"reason": ["task_struct->personality"], "call": "sigaltstack"}, {"reason": ["task_struct->personality"], "call": "sched_setattr"}, {"reason": ["task_struct->personality", "mm_struct->map_count"], "call": "migrate_pages"}, {"reason": ["task_struct->personality"], "call": "getitimer"}, {"reason": ["task_struct->personality"], "call": "setpgid"}, {"reason": ["task_struct->personality"], "call": "getsid"}, {"reason": ["task_struct->personality"], "call": "prlimit64"}, {"reason": ["task_struct->personality"], "call": "perf_event_open"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_next", "vm_area_struct->vm_file", "vm_area_struct->vm_ops", "vm_area_struct->vm_flags", "mm_struct->map_count", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "shmdt"}, {"reason": ["task_struct->personality"], "call": "rt_sigaction"}, {"reason": ["task_struct->personality"], "call": "getpgid"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_next", "vm_area_struct->vm_file", "vm_area_struct->vm_ops", "vm_area_struct->vm_flags", "mm_struct->map_count", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "brk"}, {"reason": ["task_struct->personality"], "call": "getpriority"}, {"reason": ["task_struct->personality"], "call": "sigaction"}, {"reason": ["task_struct->personality"], "call": "setns"}, {"reason": ["task_struct->personality"], "call": "fork"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_next", "vm_area_struct->vm_file", "vm_area_struct->vm_ops", "vm_area_struct->vm_flags", "mm_struct->map_count", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "get_mempolicy"}, {"reason": ["task_struct->personality"], "call": "get_robust_list"}, {"reason": ["task_struct->personality"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality"], "call": "ptrace"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_next", "vm_area_struct->vm_file", "vm_area_struct->vm_ops", "vm_area_struct->vm_flags", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_next", "vm_area_struct->vm_file", "vm_area_struct->vm_ops", "vm_area_struct->vm_flags", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_next", "vm_area_struct->vm_file", "vm_area_struct->vm_ops", "vm_area_struct->vm_flags", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "madvise"}, {"reason": ["task_struct->personality"], "call": "sched_getattr"}, {"reason": ["task_struct->personality", "mm_struct->map_count"], "call": "getrusage"}, {"reason": ["task_struct->personality"], "call": "sched_setscheduler"}, {"reason": ["task_struct->personality"], "call": "setitimer"}, {"reason": ["task_struct->personality"], "call": "ioprio_get"}, {"reason": ["task_struct->personality"], "call": "vfork"}, {"reason": ["mm_struct->map_count"], "call": "io_setup"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_next", "vm_area_struct->vm_file", "vm_area_struct->vm_ops", "vm_area_struct->vm_flags", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "mprotect"}, {"reason": ["mm_struct->map_count"], "call": "io_destroy"}, {"reason": ["mm_struct->map_count"], "call": "mbind"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_next", "task_struct->personality", "vm_area_struct->vm_file", "vm_area_struct->vm_ops", "vm_area_struct->vm_flags", "mm_struct->map_count", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "prctl"}, {"reason": ["task_struct->personality", "mm_struct->map_count"], "call": "move_pages"}, {"reason": ["mm_struct->map_count"], "call": "modify_ldt"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_next", "vm_area_struct->vm_file", "vm_area_struct->vm_ops", "vm_area_struct->vm_flags", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "munlock"}, {"reason": ["task_struct->personality"], "call": "setpriority"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_next", "vm_area_struct->vm_file", "vm_area_struct->vm_ops", "vm_area_struct->vm_flags", "mm_struct->map_count", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "mincore"}, {"reason": ["task_struct->personality"], "call": "clone"}, {"reason": ["task_struct->personality"], "call": "sched_getparam"}, {"reason": ["mm_struct->map_count"], "call": "io_cancel"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_next", "vm_area_struct->vm_file", "vm_area_struct->vm_ops", "vm_area_struct->vm_flags", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "mlockall"}], "geteuid": [{"reason": ["task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["task_struct->cred"], "call": "ioprio_set"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "io_destroy": [{"reason": ["mm_struct->ioctx_table"], "call": "swapoff"}, {"reason": ["mm_struct->ioctx_table"], "call": "remap_file_pages"}, {"reason": ["kioctx->max_reqs", "kioctx_table->nr", "kioctx->mmap_size", "kioctx->mmap_base", "mm_struct->ioctx_table", "kioctx->user_id"], "call": "io_getevents"}, {"reason": ["mm_struct->ioctx_table"], "call": "migrate_pages"}, {"reason": ["mm_struct->ioctx_table"], "call": "shmdt"}, {"reason": ["mm_struct->ioctx_table"], "call": "brk"}, {"reason": ["mm_struct->ioctx_table"], "call": "get_mempolicy"}, {"reason": ["kioctx->max_reqs", "kioctx->user_id", "kioctx->mmap_base", "kioctx->mmap_size"], "call": "io_submit"}, {"reason": ["mm_struct->ioctx_table"], "call": "getrusage"}, {"reason": ["kioctx->max_reqs", "kioctx_table->nr", "kioctx->mmap_size", "kioctx->mmap_base", "mm_struct->ioctx_table", "kioctx->user_id"], "call": "io_setup"}, {"reason": ["mm_struct->ioctx_table"], "call": "mremap"}, {"reason": ["mm_struct->ioctx_table"], "call": "mbind"}, {"reason": ["mm_struct->ioctx_table"], "call": "prctl"}, {"reason": ["mm_struct->ioctx_table"], "call": "move_pages"}, {"reason": ["mm_struct->ioctx_table"], "call": "modify_ldt"}, {"reason": ["mm_struct->ioctx_table"], "call": "mincore"}, {"reason": ["kioctx->max_reqs", "kioctx_table->nr", "kioctx->mmap_size", "kioctx->mmap_base", "mm_struct->ioctx_table", "kioctx->user_id"], "call": "io_cancel"}], "pread64": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["fd->flags", "file->f_mode"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["fd->flags", "file->f_mode"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "preadv64v2": [{"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "prctl": [{"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "keyctl"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "msgrcv"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "kill"}, {"reason": ["mm_struct->flags"], "call": "swapoff"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sched_setparam"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["mm_struct->flags"], "call": "remap_file_pages"}, {"reason": ["mm_struct->flags"], "call": "io_getevents"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "getppid"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "capget"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "signal"}, {"reason": ["task_struct->flags"], "call": "setreuid"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "semtimedop"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "umount"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "setsid"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sigaltstack"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sched_setattr"}, {"reason": ["mm_struct->flags", "task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "migrate_pages"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "getitimer"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "setpgid"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "getsid"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "prlimit64"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "perf_event_open"}, {"reason": ["mm_struct->flags"], "call": "shmdt"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "rt_sigaction"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "getpgid"}, {"reason": ["mm_struct->flags"], "call": "brk"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "getpriority"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sigaction"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "setns"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "fork"}, {"reason": ["mm_struct->flags"], "call": "get_mempolicy"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "get_robust_list"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "ptrace"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sched_getattr"}, {"reason": ["mm_struct->flags", "task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "getrusage"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sched_setscheduler"}, {"reason": ["task_struct->flags"], "call": "setresuid"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "setitimer"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "ioprio_get"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "vfork"}, {"reason": ["task_struct->flags"], "call": "setuid"}, {"reason": ["mm_struct->flags"], "call": "io_setup"}, {"reason": ["mm_struct->flags"], "call": "mremap"}, {"reason": ["mm_struct->flags"], "call": "io_destroy"}, {"reason": ["mm_struct->flags"], "call": "mbind"}, {"reason": ["mm_struct->flags", "task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "move_pages"}, {"reason": ["mm_struct->flags"], "call": "modify_ldt"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "setpriority"}, {"reason": ["mm_struct->flags"], "call": "mincore"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "clone"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sched_getparam"}, {"reason": ["mm_struct->flags"], "call": "io_cancel"}], "copy_file_range": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "flock": [{"reason": ["fd->flags", "super_block->s_flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["super_block->s_flags"], "call": "ustat"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["super_block->s_flags"], "call": "umount"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["fd->flags", "file->f_mode"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["super_block->s_flags"], "call": "quotactl"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["super_block->s_flags", "file->f_mode"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "fstatfs": [{"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "ustat"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "statfs"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "fstatfs64"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "statfs64"}], "modify_ldt": [{"reason": ["mm_context_t->ldt"], "call": "swapoff"}, {"reason": ["mm_context_t->ldt"], "call": "remap_file_pages"}, {"reason": ["mm_context_t->ldt"], "call": "io_getevents"}, {"reason": ["user_desc->limit_in_pages", "user_desc->read_exec_only", "user_desc->limit", "user_desc->useable", "user_desc->contents", "user_desc->seg_32bit", "user_desc->seg_not_present", "user_desc->entry_number", "user_desc->base_addr"], "call": "get_thread_area"}, {"reason": ["mm_context_t->ldt"], "call": "migrate_pages"}, {"reason": ["mm_context_t->ldt"], "call": "shmdt"}, {"reason": ["mm_context_t->ldt"], "call": "brk"}, {"reason": ["mm_context_t->ldt"], "call": "get_mempolicy"}, {"reason": ["mm_context_t->ldt"], "call": "getrusage"}, {"reason": ["mm_context_t->ldt"], "call": "io_setup"}, {"reason": ["mm_context_t->ldt"], "call": "mremap"}, {"reason": ["mm_context_t->ldt"], "call": "io_destroy"}, {"reason": ["mm_context_t->ldt"], "call": "mbind"}, {"reason": ["mm_context_t->ldt"], "call": "prctl"}, {"reason": ["mm_context_t->ldt"], "call": "move_pages"}, {"reason": ["mm_context_t->ldt"], "call": "mincore"}, {"reason": ["user_desc->limit_in_pages", "user_desc->read_exec_only", "user_desc->limit", "user_desc->useable", "user_desc->contents", "user_desc->seg_32bit", "user_desc->base_addr", "user_desc->entry_number", "user_desc->seg_not_present"], "call": "set_thread_area"}, {"reason": ["mm_context_t->ldt"], "call": "io_cancel"}], "sched_getattr": [{"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "kill"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "mq_timedreceive"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "capget"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "signal"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "umount"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "setsid"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg", "sched_attr->size"], "call": "sched_setattr"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "getsid"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "setns"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "fork"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "mq_timedsend"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "vfork"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "prctl"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "clone"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "sched_getparam"}], "sched_getparam": [{"reason": ["task_struct->policy"], "call": "keyctl"}, {"reason": ["task_struct->policy"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->policy"], "call": "msgrcv"}, {"reason": ["task_struct->policy"], "call": "kill"}, {"reason": ["task_struct->policy"], "call": "sched_getaffinity"}, {"reason": ["task_struct->policy"], "call": "sched_setparam"}, {"reason": ["task_struct->policy"], "call": "ioprio_set"}, {"reason": ["task_struct->policy"], "call": "getppid"}, {"reason": ["task_struct->policy"], "call": "mq_timedreceive"}, {"reason": ["task_struct->policy"], "call": "capget"}, {"reason": ["task_struct->policy"], "call": "sched_setaffinity"}, {"reason": ["task_struct->policy"], "call": "signal"}, {"reason": ["task_struct->policy"], "call": "semtimedop"}, {"reason": ["task_struct->policy"], "call": "umount"}, {"reason": ["task_struct->policy"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->policy"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->policy"], "call": "setsid"}, {"reason": ["task_struct->policy"], "call": "sigaltstack"}, {"reason": ["task_struct->policy"], "call": "sched_setattr"}, {"reason": ["task_struct->policy"], "call": "migrate_pages"}, {"reason": ["task_struct->policy"], "call": "getitimer"}, {"reason": ["task_struct->policy"], "call": "setpgid"}, {"reason": ["task_struct->policy"], "call": "getsid"}, {"reason": ["task_struct->policy"], "call": "prlimit64"}, {"reason": ["task_struct->policy"], "call": "perf_event_open"}, {"reason": ["task_struct->policy"], "call": "rt_sigaction"}, {"reason": ["task_struct->policy"], "call": "getpgid"}, {"reason": ["task_struct->policy"], "call": "getpriority"}, {"reason": ["task_struct->policy"], "call": "sigaction"}, {"reason": ["task_struct->policy"], "call": "setns"}, {"reason": ["task_struct->policy"], "call": "fork"}, {"reason": ["task_struct->policy"], "call": "get_robust_list"}, {"reason": ["task_struct->policy"], "call": "mq_timedsend"}, {"reason": ["task_struct->policy"], "call": "sched_getscheduler"}, {"reason": ["task_struct->policy"], "call": "ptrace"}, {"reason": ["task_struct->policy"], "call": "sched_getattr"}, {"reason": ["task_struct->policy"], "call": "getrusage"}, {"reason": ["task_struct->policy"], "call": "sched_setscheduler"}, {"reason": ["task_struct->policy"], "call": "setitimer"}, {"reason": ["task_struct->policy"], "call": "ioprio_get"}, {"reason": ["task_struct->policy"], "call": "vfork"}, {"reason": ["task_struct->policy"], "call": "prctl"}, {"reason": ["task_struct->policy"], "call": "move_pages"}, {"reason": ["task_struct->policy"], "call": "setpriority"}, {"reason": ["task_struct->policy"], "call": "clone"}], "fstatfs64": [{"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "ustat"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "fstatfs"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "statfs"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "statfs64"}], "rt_sigreturn": [{"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "msgrcv"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "kill"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sched_setparam"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "ioprio_set"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "getppid"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "capget"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "signal"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "umount"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sched_rr_get_interval"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "setsid"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "setpgid"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "getsid"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "perf_event_open"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "getpgid"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sigaction"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "setns"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "fork"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "ptrace"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "vfork"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "prctl"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "move_pages"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "clone"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sched_getparam"}], "write": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "tkill": [{"reason": ["task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["task_struct->cred"], "call": "ioprio_set"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "munlock": [{"reason": ["task_struct->mm"], "call": "keyctl"}, {"reason": ["task_struct->mm"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->mm"], "call": "msgrcv"}, {"reason": ["task_struct->mm"], "call": "kill"}, {"reason": ["task_struct->mm"], "call": "sched_getaffinity"}, {"reason": ["task_struct->mm"], "call": "sched_setparam"}, {"reason": ["task_struct->mm"], "call": "ioprio_set"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "remap_file_pages"}, {"reason": ["task_struct->mm"], "call": "getppid"}, {"reason": ["task_struct->mm"], "call": "mq_timedreceive"}, {"reason": ["task_struct->mm"], "call": "capget"}, {"reason": ["task_struct->mm"], "call": "sched_setaffinity"}, {"reason": ["task_struct->mm"], "call": "signal"}, {"reason": ["task_struct->mm"], "call": "semtimedop"}, {"reason": ["task_struct->mm"], "call": "umount"}, {"reason": ["task_struct->mm"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->mm"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->mm"], "call": "setsid"}, {"reason": ["task_struct->mm"], "call": "sigaltstack"}, {"reason": ["task_struct->mm"], "call": "sched_setattr"}, {"reason": ["task_struct->mm"], "call": "migrate_pages"}, {"reason": ["task_struct->mm"], "call": "getitimer"}, {"reason": ["task_struct->mm"], "call": "setpgid"}, {"reason": ["task_struct->mm"], "call": "getsid"}, {"reason": ["task_struct->mm"], "call": "prlimit64"}, {"reason": ["task_struct->mm"], "call": "perf_event_open"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "shmdt"}, {"reason": ["task_struct->mm"], "call": "rt_sigaction"}, {"reason": ["task_struct->mm"], "call": "getpgid"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "brk"}, {"reason": ["task_struct->mm"], "call": "getpriority"}, {"reason": ["task_struct->mm"], "call": "sigaction"}, {"reason": ["task_struct->mm"], "call": "setns"}, {"reason": ["task_struct->mm"], "call": "fork"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "get_mempolicy"}, {"reason": ["task_struct->mm"], "call": "get_robust_list"}, {"reason": ["task_struct->mm"], "call": "mq_timedsend"}, {"reason": ["task_struct->mm"], "call": "sched_getscheduler"}, {"reason": ["task_struct->mm"], "call": "ptrace"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "madvise"}, {"reason": ["task_struct->mm"], "call": "sched_getattr"}, {"reason": ["task_struct->mm"], "call": "getrusage"}, {"reason": ["task_struct->mm"], "call": "sched_setscheduler"}, {"reason": ["task_struct->mm"], "call": "setitimer"}, {"reason": ["task_struct->mm"], "call": "ioprio_get"}, {"reason": ["task_struct->mm"], "call": "vfork"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mremap"}, {"reason": ["vm_area_struct->vm_start", "task_struct->mm", "vm_area_struct->vm_end"], "call": "prctl"}, {"reason": ["task_struct->mm"], "call": "move_pages"}, {"reason": ["task_struct->mm"], "call": "setpriority"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mincore"}, {"reason": ["task_struct->mm"], "call": "clone"}, {"reason": ["task_struct->mm"], "call": "sched_getparam"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mlockall"}], "setpriority": [{"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "kill"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_setparam"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "ioprio_set"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "signal"}, {"reason": ["cred->uid"], "call": "setreuid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_setattr"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "setpgid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "getsid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sigaction"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["cred->uid"], "call": "setresuid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "vfork"}, {"reason": ["cred->uid"], "call": "setuid"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->real_cred", "task_struct->cred"], "call": "sched_getparam"}], "recvmsg": [{"reason": ["socket->file"], "call": "recvfrom"}, {"reason": ["socket->file"], "call": "sendto"}, {"reason": ["socket->file"], "call": "connect"}, {"reason": ["socket->file"], "call": "getsockname"}, {"reason": ["socket->file"], "call": "accept4"}, {"reason": ["socket->file"], "call": "getpeername"}, {"reason": ["socket->file"], "call": "setsockopt"}, {"reason": ["socket->file"], "call": "sendmsg"}, {"reason": ["socket->file"], "call": "shutdown"}, {"reason": ["socket->file"], "call": "getsockopt"}, {"reason": ["socket->file"], "call": "listen"}, {"reason": ["socket->file"], "call": "sendmmsg"}, {"reason": ["socket->file"], "call": "bind"}, {"reason": ["socket->file"], "call": "recvmmsg"}], "shmdt": [{"reason": ["vm_area_struct->vm_pgoff", "vm_area_struct->vm_ops", "vm_area_struct->vm_file"], "call": "remap_file_pages"}, {"reason": ["vm_area_struct->vm_pgoff", "vm_area_struct->vm_ops", "vm_area_struct->vm_file"], "call": "brk"}, {"reason": ["vm_area_struct->vm_pgoff", "vm_area_struct->vm_ops", "vm_area_struct->vm_file"], "call": "get_mempolicy"}, {"reason": ["vm_area_struct->vm_pgoff", "vm_area_struct->vm_ops", "vm_area_struct->vm_file"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_pgoff", "vm_area_struct->vm_ops", "vm_area_struct->vm_file"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_pgoff", "vm_area_struct->vm_ops", "vm_area_struct->vm_file"], "call": "madvise"}, {"reason": ["vm_area_struct->vm_pgoff", "vm_area_struct->vm_ops", "vm_area_struct->vm_file"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_pgoff", "vm_area_struct->vm_ops", "vm_area_struct->vm_file"], "call": "mremap"}, {"reason": ["vm_area_struct->vm_pgoff", "vm_area_struct->vm_ops", "vm_area_struct->vm_file"], "call": "prctl"}, {"reason": ["vm_area_struct->vm_pgoff", "vm_area_struct->vm_ops", "vm_area_struct->vm_file"], "call": "munlock"}, {"reason": ["vm_area_struct->vm_pgoff", "vm_area_struct->vm_ops", "vm_area_struct->vm_file"], "call": "mincore"}, {"reason": ["vm_area_struct->vm_pgoff", "vm_area_struct->vm_ops", "vm_area_struct->vm_file"], "call": "mlockall"}], "getrlimit": [{"reason": ["rlimit->rlim_max", "rlimit->rlim_cur"], "call": "setrlimit"}, {"reason": ["rlimit->rlim_max", "rlimit->rlim_cur"], "call": "old_getrlimit"}, {"reason": ["rlimit->rlim_max", "rlimit->rlim_cur"], "call": "prlimit64"}], "mincore": [{"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "kill"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["vm_area_struct->vm_start"], "call": "remap_file_pages"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "mq_timedreceive"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "capget"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "signal"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "umount"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "setsid"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "getsid"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["vm_area_struct->vm_start"], "call": "shmdt"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["vm_area_struct->vm_start"], "call": "brk"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "setns"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "fork"}, {"reason": ["vm_area_struct->vm_start"], "call": "get_mempolicy"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "mq_timedsend"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["vm_area_struct->vm_start"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_start"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_start"], "call": "madvise"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "vfork"}, {"reason": ["vm_area_struct->vm_start"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_start"], "call": "mremap"}, {"reason": ["vm_area_struct->vm_start", "task_struct->mm", "mm_segment_t->seg"], "call": "prctl"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["vm_area_struct->vm_start"], "call": "munlock"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "clone"}, {"reason": ["task_struct->mm", "mm_segment_t->seg"], "call": "sched_getparam"}, {"reason": ["vm_area_struct->vm_start"], "call": "mlockall"}], "mq_notify": [{"reason": ["sigval->sival_ptr"], "call": "rt_sigtimedwait"}, {"reason": ["file->f_op"], "call": "eventfd2"}, {"reason": ["file->f_op"], "call": "swapoff"}, {"reason": ["file->f_op"], "call": "memfd_create"}, {"reason": ["file->f_op"], "call": "remap_file_pages"}, {"reason": ["file->f_op"], "call": "dup3"}, {"reason": ["sigval->sival_ptr", "sigevent->sigev_signo", "mqueue_inode_info->notify_owner", "sigevent->sigev_notify"], "call": "mq_timedreceive"}, {"reason": ["sigval->sival_ptr", "sigevent->sigev_signo", "sigevent->sigev_notify"], "call": "timer_create"}, {"reason": ["file->f_op"], "call": "epoll_create1"}, {"reason": ["sigval->sival_ptr"], "call": "rt_sigqueueinfo"}, {"reason": ["file->f_op"], "call": "epoll_ctl"}, {"reason": ["file->f_op"], "call": "flock"}, {"reason": ["sigval->sival_ptr"], "call": "tgkill"}, {"reason": ["file->f_op"], "call": "openat"}, {"reason": ["file->f_op"], "call": "uselib"}, {"reason": ["file->f_op"], "call": "accept4"}, {"reason": ["file->f_op"], "call": "socketpair"}, {"reason": ["file->f_op"], "call": "shmat"}, {"reason": ["file->f_op"], "call": "socket"}, {"reason": ["file->f_op"], "call": "pipe2"}, {"reason": ["file->f_op"], "call": "perf_event_open"}, {"reason": ["file->f_op"], "call": "shmdt"}, {"reason": ["file->f_op"], "call": "acct"}, {"reason": ["file->f_op"], "call": "open"}, {"reason": ["sigval->sival_ptr"], "call": "rt_tgsigqueueinfo"}, {"reason": ["sigval->sival_ptr", "sigevent->sigev_signo", "mqueue_inode_info->notify_owner", "sigevent->sigev_notify"], "call": "mq_getsetattr"}, {"reason": ["file->f_op"], "call": "dup"}, {"reason": ["file->f_op"], "call": "setns"}, {"reason": ["sigval->sival_ptr", "sigevent->sigev_signo", "mqueue_inode_info->notify_owner", "sigevent->sigev_notify"], "call": "mq_timedsend"}, {"reason": ["file->f_op"], "call": "shmctl"}, {"reason": ["file->f_op"], "call": "swapon"}, {"reason": ["file->f_op"], "call": "mmap_pgoff"}, {"reason": ["sigval->sival_ptr"], "call": "rt_sigreturn"}, {"reason": ["sigval->sival_ptr"], "call": "tkill"}, {"reason": ["file->f_op"], "call": "mq_open"}, {"reason": ["file->f_op"], "call": "open_by_handle_at"}], "sendfile": [{"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "sendmmsg": [{"reason": ["socket->file"], "call": "recvfrom"}, {"reason": ["socket->file"], "call": "sendto"}, {"reason": ["socket->file"], "call": "connect"}, {"reason": ["socket->file"], "call": "getsockname"}, {"reason": ["socket->file"], "call": "accept4"}, {"reason": ["socket->file"], "call": "getpeername"}, {"reason": ["socket->file"], "call": "setsockopt"}, {"reason": ["socket->file"], "call": "sendmsg"}, {"reason": ["socket->file"], "call": "shutdown"}, {"reason": ["socket->file"], "call": "getsockopt"}, {"reason": ["socket->file"], "call": "listen"}, {"reason": ["socket->file"], "call": "recvmsg"}, {"reason": ["socket->file"], "call": "bind"}, {"reason": ["socket->file"], "call": "recvmmsg"}], "timer_getoverrun": [{"reason": ["task_struct->signal"], "call": "keyctl"}, {"reason": ["task_struct->signal"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->signal"], "call": "msgrcv"}, {"reason": ["task_struct->signal"], "call": "kill"}, {"reason": ["k_itimer->it_signal"], "call": "timer_delete"}, {"reason": ["task_struct->signal"], "call": "sched_getaffinity"}, {"reason": ["task_struct->signal"], "call": "sched_setparam"}, {"reason": ["task_struct->signal"], "call": "ioprio_set"}, {"reason": ["task_struct->signal"], "call": "getppid"}, {"reason": ["task_struct->signal"], "call": "mq_timedreceive"}, {"reason": ["task_struct->signal"], "call": "capget"}, {"reason": ["task_struct->signal"], "call": "sched_setaffinity"}, {"reason": ["task_struct->signal"], "call": "signal"}, {"reason": ["task_struct->signal"], "call": "semtimedop"}, {"reason": ["task_struct->signal"], "call": "umount"}, {"reason": ["k_itimer->it_signal"], "call": "timer_create"}, {"reason": ["task_struct->signal"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->signal"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->signal"], "call": "setsid"}, {"reason": ["task_struct->signal"], "call": "sigaltstack"}, {"reason": ["task_struct->signal"], "call": "sched_setattr"}, {"reason": ["task_struct->signal"], "call": "migrate_pages"}, {"reason": ["task_struct->signal"], "call": "getitimer"}, {"reason": ["task_struct->signal"], "call": "setpgid"}, {"reason": ["k_itimer->it_signal"], "call": "timer_settime"}, {"reason": ["k_itimer->it_signal"], "call": "timer_gettime"}, {"reason": ["task_struct->signal"], "call": "getsid"}, {"reason": ["task_struct->signal"], "call": "prlimit64"}, {"reason": ["task_struct->signal"], "call": "perf_event_open"}, {"reason": ["task_struct->signal"], "call": "rt_sigaction"}, {"reason": ["task_struct->signal"], "call": "getpgid"}, {"reason": ["task_struct->signal"], "call": "getpriority"}, {"reason": ["task_struct->signal"], "call": "sigaction"}, {"reason": ["task_struct->signal"], "call": "setns"}, {"reason": ["task_struct->signal"], "call": "fork"}, {"reason": ["task_struct->signal"], "call": "get_robust_list"}, {"reason": ["task_struct->signal"], "call": "mq_timedsend"}, {"reason": ["task_struct->signal"], "call": "sched_getscheduler"}, {"reason": ["task_struct->signal"], "call": "ptrace"}, {"reason": ["task_struct->signal"], "call": "sched_getattr"}, {"reason": ["task_struct->signal"], "call": "getrusage"}, {"reason": ["task_struct->signal"], "call": "sched_setscheduler"}, {"reason": ["task_struct->signal"], "call": "setitimer"}, {"reason": ["task_struct->signal"], "call": "ioprio_get"}, {"reason": ["task_struct->signal"], "call": "vfork"}, {"reason": ["task_struct->signal"], "call": "prctl"}, {"reason": ["task_struct->signal"], "call": "move_pages"}, {"reason": ["task_struct->signal"], "call": "setpriority"}, {"reason": ["task_struct->signal"], "call": "clone"}, {"reason": ["task_struct->signal"], "call": "sched_getparam"}], "mlock2": [{"reason": ["task_struct->mm"], "call": "keyctl"}, {"reason": ["task_struct->mm"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->mm"], "call": "msgrcv"}, {"reason": ["task_struct->mm"], "call": "kill"}, {"reason": ["task_struct->mm"], "call": "sched_getaffinity"}, {"reason": ["task_struct->mm"], "call": "sched_setparam"}, {"reason": ["task_struct->mm"], "call": "ioprio_set"}, {"reason": ["task_struct->mm"], "call": "getppid"}, {"reason": ["task_struct->mm"], "call": "mq_timedreceive"}, {"reason": ["task_struct->mm"], "call": "capget"}, {"reason": ["task_struct->mm"], "call": "sched_setaffinity"}, {"reason": ["task_struct->mm"], "call": "signal"}, {"reason": ["task_struct->mm"], "call": "semtimedop"}, {"reason": ["task_struct->mm"], "call": "umount"}, {"reason": ["task_struct->mm"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->mm"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->mm"], "call": "setsid"}, {"reason": ["task_struct->mm"], "call": "sigaltstack"}, {"reason": ["task_struct->mm"], "call": "sched_setattr"}, {"reason": ["task_struct->mm"], "call": "migrate_pages"}, {"reason": ["task_struct->mm"], "call": "getitimer"}, {"reason": ["task_struct->mm"], "call": "setpgid"}, {"reason": ["task_struct->mm"], "call": "getsid"}, {"reason": ["task_struct->mm"], "call": "prlimit64"}, {"reason": ["task_struct->mm"], "call": "perf_event_open"}, {"reason": ["task_struct->mm"], "call": "rt_sigaction"}, {"reason": ["task_struct->mm"], "call": "getpgid"}, {"reason": ["task_struct->mm"], "call": "getpriority"}, {"reason": ["task_struct->mm"], "call": "sigaction"}, {"reason": ["task_struct->mm"], "call": "setns"}, {"reason": ["task_struct->mm"], "call": "fork"}, {"reason": ["task_struct->mm"], "call": "get_robust_list"}, {"reason": ["task_struct->mm"], "call": "mq_timedsend"}, {"reason": ["task_struct->mm"], "call": "sched_getscheduler"}, {"reason": ["task_struct->mm"], "call": "ptrace"}, {"reason": ["task_struct->mm"], "call": "sched_getattr"}, {"reason": ["task_struct->mm"], "call": "getrusage"}, {"reason": ["task_struct->mm"], "call": "sched_setscheduler"}, {"reason": ["task_struct->mm"], "call": "setitimer"}, {"reason": ["task_struct->mm"], "call": "ioprio_get"}, {"reason": ["task_struct->mm"], "call": "vfork"}, {"reason": ["task_struct->mm"], "call": "prctl"}, {"reason": ["task_struct->mm"], "call": "move_pages"}, {"reason": ["task_struct->mm"], "call": "setpriority"}, {"reason": ["task_struct->mm"], "call": "clone"}, {"reason": ["task_struct->mm"], "call": "sched_getparam"}], "newfstat": [{"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newlstat"}, {"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newfstatat"}, {"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newstat"}, {"reason": ["kstat->size", "kstat->nlink", "kstat->ino", "kstat->rdev", "kstat->dev"], "call": "fstat"}], "lremovexattr": [{"reason": ["path->dentry", "path->mnt"], "call": "eventfd2"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapoff"}, {"reason": ["path->dentry", "path->mnt"], "call": "pivot_root"}, {"reason": ["path->dentry", "path->mnt"], "call": "memfd_create"}, {"reason": ["path->dentry", "path->mnt"], "call": "remap_file_pages"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup3"}, {"reason": ["path->dentry", "path->mnt"], "call": "unshare"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_create1"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_ctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "flock"}, {"reason": ["path->dentry", "path->mnt"], "call": "openat"}, {"reason": ["path->dentry", "path->mnt"], "call": "lookup_dcookie"}, {"reason": ["path->dentry", "path->mnt"], "call": "uselib"}, {"reason": ["path->dentry", "path->mnt"], "call": "accept4"}, {"reason": ["path->dentry", "path->mnt"], "call": "socketpair"}, {"reason": ["path->dentry", "path->mnt"], "call": "getcwd"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmat"}, {"reason": ["path->dentry", "path->mnt"], "call": "socket"}, {"reason": ["path->dentry", "path->mnt"], "call": "pipe2"}, {"reason": ["path->dentry", "path->mnt"], "call": "perf_event_open"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmdt"}, {"reason": ["path->dentry", "path->mnt"], "call": "quotactl"}, {"reason": ["path->dentry", "path->mnt"], "call": "acct"}, {"reason": ["path->dentry", "path->mnt"], "call": "open"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup"}, {"reason": ["path->dentry", "path->mnt"], "call": "setns"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapon"}, {"reason": ["path->dentry", "path->mnt"], "call": "mmap_pgoff"}, {"reason": ["path->dentry", "path->mnt"], "call": "mq_open"}, {"reason": ["path->dentry", "path->mnt"], "call": "open_by_handle_at"}], "preadv64": [{"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "pwritev64": [{"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "getxattr": [{"reason": ["path->dentry"], "call": "eventfd2"}, {"reason": ["path->dentry"], "call": "swapoff"}, {"reason": ["path->dentry"], "call": "pivot_root"}, {"reason": ["path->dentry"], "call": "memfd_create"}, {"reason": ["path->dentry"], "call": "remap_file_pages"}, {"reason": ["path->dentry"], "call": "dup3"}, {"reason": ["path->dentry"], "call": "unshare"}, {"reason": ["path->dentry"], "call": "epoll_create1"}, {"reason": ["path->dentry"], "call": "epoll_ctl"}, {"reason": ["path->dentry"], "call": "flock"}, {"reason": ["path->dentry"], "call": "openat"}, {"reason": ["path->dentry"], "call": "lookup_dcookie"}, {"reason": ["path->dentry"], "call": "uselib"}, {"reason": ["path->dentry"], "call": "accept4"}, {"reason": ["path->dentry"], "call": "socketpair"}, {"reason": ["path->dentry"], "call": "getcwd"}, {"reason": ["path->dentry"], "call": "shmat"}, {"reason": ["path->dentry"], "call": "socket"}, {"reason": ["path->dentry"], "call": "pipe2"}, {"reason": ["path->dentry"], "call": "perf_event_open"}, {"reason": ["path->dentry"], "call": "shmdt"}, {"reason": ["path->dentry"], "call": "quotactl"}, {"reason": ["path->dentry"], "call": "acct"}, {"reason": ["path->dentry"], "call": "open"}, {"reason": ["path->dentry"], "call": "dup"}, {"reason": ["path->dentry"], "call": "setns"}, {"reason": ["path->dentry"], "call": "shmctl"}, {"reason": ["path->dentry"], "call": "swapon"}, {"reason": ["path->dentry"], "call": "mmap_pgoff"}, {"reason": ["path->dentry"], "call": "mq_open"}, {"reason": ["path->dentry"], "call": "open_by_handle_at"}], "mq_open": [{"reason": ["filename->name"], "call": "sysfs"}, {"reason": ["path->dentry"], "call": "eventfd2"}, {"reason": ["filename->name"], "call": "mq_unlink"}, {"reason": ["filename->name", "path->dentry"], "call": "swapoff"}, {"reason": ["path->dentry"], "call": "pivot_root"}, {"reason": ["path->dentry"], "call": "memfd_create"}, {"reason": ["path->dentry"], "call": "remap_file_pages"}, {"reason": ["path->dentry"], "call": "dup3"}, {"reason": ["path->dentry"], "call": "unshare"}, {"reason": ["path->dentry"], "call": "epoll_create1"}, {"reason": ["path->dentry"], "call": "epoll_ctl"}, {"reason": ["path->dentry"], "call": "flock"}, {"reason": ["filename->name", "path->dentry"], "call": "openat"}, {"reason": ["path->dentry"], "call": "lookup_dcookie"}, {"reason": ["filename->name", "path->dentry"], "call": "uselib"}, {"reason": ["filename->name"], "call": "renameat2"}, {"reason": ["path->dentry"], "call": "accept4"}, {"reason": ["path->dentry"], "call": "socketpair"}, {"reason": ["path->dentry"], "call": "getcwd"}, {"reason": ["path->dentry"], "call": "shmat"}, {"reason": ["path->dentry"], "call": "socket"}, {"reason": ["filename->name"], "call": "symlinkat"}, {"reason": ["path->dentry"], "call": "pipe2"}, {"reason": ["path->dentry"], "call": "perf_event_open"}, {"reason": ["path->dentry"], "call": "shmdt"}, {"reason": ["filename->name", "path->dentry"], "call": "quotactl"}, {"reason": ["filename->name", "path->dentry"], "call": "acct"}, {"reason": ["filename->name", "path->dentry"], "call": "open"}, {"reason": ["filename->name"], "call": "unlink"}, {"reason": ["filename->name"], "call": "rmdir"}, {"reason": ["path->dentry"], "call": "dup"}, {"reason": ["path->dentry"], "call": "setns"}, {"reason": ["path->dentry"], "call": "shmctl"}, {"reason": ["filename->name", "path->dentry"], "call": "swapon"}, {"reason": ["path->dentry"], "call": "mmap_pgoff"}, {"reason": ["filename->name"], "call": "unlinkat"}, {"reason": ["path->dentry"], "call": "open_by_handle_at"}], "statfs64": [{"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "ustat"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "fstatfs"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "statfs"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "fstatfs64"}], "getgid16": [{"reason": ["task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["task_struct->cred"], "call": "ioprio_set"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "set_thread_area": [{"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "keyctl"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "rt_sigtimedwait"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "msgrcv"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "kill"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sched_getaffinity"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "arch_prctl"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sched_setparam"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "ioprio_set"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "getppid"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "ioperm"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "mq_timedreceive"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "capget"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sched_setaffinity"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "signal"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "semtimedop"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "umount"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sched_rr_get_interval"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "rt_sigprocmask"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "setsid"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sigaltstack"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sched_setattr"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "migrate_pages"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "getitimer"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "setpgid"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "getsid"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "prlimit64"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "perf_event_open"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "rt_sigaction"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "getpgid"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "getpriority"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sigaction"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "setns"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "fork"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "get_robust_list"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "mq_timedsend"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sched_getscheduler"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "ptrace"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sched_getattr"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "getrusage"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sched_setscheduler"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "setitimer"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "ioprio_get"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "vfork"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "prctl"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "move_pages"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "setpriority"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "clone"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sched_getparam"}], "getegid": [{"reason": ["task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["task_struct->cred"], "call": "ioprio_set"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "clock_nanosleep": [{"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["k_clock->nsleep"], "call": "clock_getres"}, {"reason": ["k_clock->nsleep"], "call": "timer_delete"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchown"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "utime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["k_clock->nsleep"], "call": "timer_create"}, {"reason": ["k_clock->nsleep"], "call": "clock_gettime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "uselib"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec", "k_clock->nsleep"], "call": "timer_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec", "k_clock->nsleep"], "call": "timer_gettime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "stime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "poll"}, {"reason": ["k_clock->nsleep"], "call": "clock_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlink"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fstat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "newfstat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["k_clock->nsleep"], "call": "clock_adjtime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ppoll"}], "unlinkat": [{"reason": ["path->dentry", "path->mnt"], "call": "eventfd2"}, {"reason": ["dentry->d_inode"], "call": "mq_unlink"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapoff"}, {"reason": ["dentry->d_inode", "path->dentry", "path->mnt"], "call": "pivot_root"}, {"reason": ["path->dentry", "path->mnt"], "call": "memfd_create"}, {"reason": ["path->dentry", "path->mnt"], "call": "remap_file_pages"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup3"}, {"reason": ["path->dentry", "path->mnt"], "call": "unshare"}, {"reason": ["dentry->d_inode"], "call": "mkdirat"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_create1"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_ctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "flock"}, {"reason": ["path->dentry", "path->mnt"], "call": "openat"}, {"reason": ["path->dentry", "path->mnt"], "call": "lookup_dcookie"}, {"reason": ["path->dentry", "path->mnt"], "call": "uselib"}, {"reason": ["dentry->d_inode"], "call": "renameat2"}, {"reason": ["path->dentry", "path->mnt"], "call": "accept4"}, {"reason": ["path->dentry", "path->mnt"], "call": "socketpair"}, {"reason": ["dentry->d_inode", "path->dentry", "path->mnt"], "call": "getcwd"}, {"reason": ["dentry->d_inode"], "call": "ftruncate"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmat"}, {"reason": ["dentry->d_inode"], "call": "mknodat"}, {"reason": ["path->dentry", "path->mnt"], "call": "socket"}, {"reason": ["dentry->d_inode"], "call": "symlinkat"}, {"reason": ["path->dentry", "path->mnt"], "call": "pipe2"}, {"reason": ["path->dentry", "path->mnt"], "call": "perf_event_open"}, {"reason": ["dentry->d_inode"], "call": "linkat"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmdt"}, {"reason": ["path->dentry", "path->mnt"], "call": "quotactl"}, {"reason": ["path->dentry", "path->mnt"], "call": "acct"}, {"reason": ["path->dentry", "path->mnt"], "call": "open"}, {"reason": ["dentry->d_inode"], "call": "unlink"}, {"reason": ["dentry->d_inode"], "call": "rmdir"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup"}, {"reason": ["path->dentry", "path->mnt"], "call": "setns"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapon"}, {"reason": ["path->dentry", "path->mnt"], "call": "mmap_pgoff"}, {"reason": ["dentry->d_inode", "path->dentry", "path->mnt"], "call": "mq_open"}, {"reason": ["path->dentry", "path->mnt"], "call": "open_by_handle_at"}], "getgroups": [{"reason": ["cred->group_info", "task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["cred->group_info"], "call": "setfsuid"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["cred->group_info"], "call": "getresuid16"}, {"reason": ["cred->group_info"], "call": "getresgid"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["cred->group_info"], "call": "setgid"}, {"reason": ["cred->group_info", "task_struct->cred"], "call": "ioprio_set"}, {"reason": ["cred->group_info"], "call": "capset"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["cred->group_info"], "call": "getresgid16"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["cred->group_info", "task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["cred->group_info"], "call": "setfsgid"}, {"reason": ["cred->group_info"], "call": "unshare"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["cred->group_info"], "call": "setreuid"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["cred->group_info"], "call": "epoll_create1"}, {"reason": ["cred->group_info"], "call": "getresuid"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["cred->group_info", "task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["cred->group_info"], "call": "setresgid"}, {"reason": ["cred->group_info"], "call": "setregid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["cred->group_info", "task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["cred->group_info"], "call": "getgroups16"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["cred->group_info", "task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["cred->group_info"], "call": "faccessat"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["cred->group_info"], "call": "setresuid"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["cred->group_info", "task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["cred->group_info"], "call": "setuid"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["cred->group_info", "task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "clock_adjtime": [{"reason": ["k_clock->clock_adj"], "call": "clock_getres"}, {"reason": ["k_clock->clock_adj"], "call": "timer_delete"}, {"reason": ["k_clock->clock_adj"], "call": "timer_create"}, {"reason": ["k_clock->clock_adj"], "call": "clock_gettime"}, {"reason": ["k_clock->clock_adj"], "call": "timer_settime"}, {"reason": ["k_clock->clock_adj"], "call": "timer_gettime"}, {"reason": ["k_clock->clock_adj"], "call": "clock_settime"}, {"reason": ["k_clock->clock_adj"], "call": "clock_nanosleep"}], "getuid": [{"reason": ["task_struct->cred"], "call": "keyctl"}, {"reason": ["task_struct->cred"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->cred"], "call": "msgrcv"}, {"reason": ["task_struct->cred"], "call": "kill"}, {"reason": ["task_struct->cred"], "call": "sched_getaffinity"}, {"reason": ["task_struct->cred"], "call": "sched_setparam"}, {"reason": ["task_struct->cred"], "call": "ioprio_set"}, {"reason": ["task_struct->cred"], "call": "getppid"}, {"reason": ["task_struct->cred"], "call": "mq_timedreceive"}, {"reason": ["task_struct->cred"], "call": "capget"}, {"reason": ["task_struct->cred"], "call": "sched_setaffinity"}, {"reason": ["task_struct->cred"], "call": "signal"}, {"reason": ["task_struct->cred"], "call": "semtimedop"}, {"reason": ["task_struct->cred"], "call": "umount"}, {"reason": ["task_struct->cred"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->cred"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->cred"], "call": "setsid"}, {"reason": ["task_struct->cred"], "call": "sigaltstack"}, {"reason": ["task_struct->cred"], "call": "sched_setattr"}, {"reason": ["task_struct->cred"], "call": "migrate_pages"}, {"reason": ["task_struct->cred"], "call": "getitimer"}, {"reason": ["task_struct->cred"], "call": "setpgid"}, {"reason": ["task_struct->cred"], "call": "getsid"}, {"reason": ["task_struct->cred"], "call": "prlimit64"}, {"reason": ["task_struct->cred"], "call": "perf_event_open"}, {"reason": ["task_struct->cred"], "call": "rt_sigaction"}, {"reason": ["task_struct->cred"], "call": "getpgid"}, {"reason": ["task_struct->cred"], "call": "getpriority"}, {"reason": ["task_struct->cred"], "call": "sigaction"}, {"reason": ["task_struct->cred"], "call": "setns"}, {"reason": ["task_struct->cred"], "call": "fork"}, {"reason": ["task_struct->cred"], "call": "get_robust_list"}, {"reason": ["task_struct->cred"], "call": "mq_timedsend"}, {"reason": ["task_struct->cred"], "call": "sched_getscheduler"}, {"reason": ["task_struct->cred"], "call": "ptrace"}, {"reason": ["task_struct->cred"], "call": "sched_getattr"}, {"reason": ["task_struct->cred"], "call": "getrusage"}, {"reason": ["task_struct->cred"], "call": "sched_setscheduler"}, {"reason": ["task_struct->cred"], "call": "setitimer"}, {"reason": ["task_struct->cred"], "call": "ioprio_get"}, {"reason": ["task_struct->cred"], "call": "vfork"}, {"reason": ["task_struct->cred"], "call": "prctl"}, {"reason": ["task_struct->cred"], "call": "move_pages"}, {"reason": ["task_struct->cred"], "call": "setpriority"}, {"reason": ["task_struct->cred"], "call": "clone"}, {"reason": ["task_struct->cred"], "call": "sched_getparam"}], "open_by_handle_at": [{"reason": ["path->dentry", "path->mnt"], "call": "eventfd2"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapoff"}, {"reason": ["path->dentry", "path->mnt"], "call": "pivot_root"}, {"reason": ["path->dentry", "path->mnt"], "call": "memfd_create"}, {"reason": ["path->dentry", "path->mnt"], "call": "remap_file_pages"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup3"}, {"reason": ["path->dentry", "path->mnt"], "call": "unshare"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_create1"}, {"reason": ["path->dentry", "path->mnt"], "call": "epoll_ctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "flock"}, {"reason": ["path->dentry", "path->mnt"], "call": "openat"}, {"reason": ["path->dentry", "path->mnt"], "call": "lookup_dcookie"}, {"reason": ["path->dentry", "path->mnt"], "call": "uselib"}, {"reason": ["path->dentry", "path->mnt"], "call": "accept4"}, {"reason": ["path->dentry", "path->mnt"], "call": "socketpair"}, {"reason": ["path->dentry", "path->mnt"], "call": "getcwd"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmat"}, {"reason": ["path->dentry", "path->mnt"], "call": "socket"}, {"reason": ["path->dentry", "path->mnt"], "call": "pipe2"}, {"reason": ["path->dentry", "path->mnt"], "call": "perf_event_open"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmdt"}, {"reason": ["path->dentry", "path->mnt"], "call": "quotactl"}, {"reason": ["path->dentry", "path->mnt"], "call": "acct"}, {"reason": ["path->dentry", "path->mnt"], "call": "open"}, {"reason": ["path->dentry", "path->mnt"], "call": "dup"}, {"reason": ["path->dentry", "path->mnt"], "call": "setns"}, {"reason": ["path->dentry", "path->mnt"], "call": "shmctl"}, {"reason": ["path->dentry", "path->mnt"], "call": "swapon"}, {"reason": ["path->dentry", "path->mnt"], "call": "mmap_pgoff"}, {"reason": ["path->dentry", "path->mnt"], "call": "mq_open"}], "setitimer": [{"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "waitid"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "settimeofday"}, {"reason": ["signal_struct->it_real_incr"], "call": "timer_create"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "adjtimex"}, {"reason": ["itimerval->it_value", "itimerval->it_interval", "timeval->tv_usec", "timeval->tv_sec"], "call": "getitimer"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "select"}, {"reason": ["signal_struct->it_real_incr"], "call": "exit_group"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "wait4"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "getrusage"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "clock_adjtime"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "alarm"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "ppoll"}], "alarm": [{"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "waitid"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "settimeofday"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "adjtimex"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "getitimer"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "select"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "wait4"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "getrusage"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "setitimer"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "clock_adjtime"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "ppoll"}], "flistxattr": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "futex": [{"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchown"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "utime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "uselib"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "stime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "poll"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlink"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fstat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "newfstat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ppoll"}], "recvmmsg": [{"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchown"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "utime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["socket->file", "msghdr->msg_flags", "socket->sk"], "call": "recvfrom"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["socket->file", "msghdr->msg_flags", "socket->sk"], "call": "sendto"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["socket->file", "socket->sk"], "call": "connect"}, {"reason": ["socket->file", "socket->sk"], "call": "getsockname"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "uselib"}, {"reason": ["socket->file", "socket->sk"], "call": "accept4"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["socket->file", "socket->sk"], "call": "getpeername"}, {"reason": ["socket->file", "socket->sk"], "call": "setsockopt"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "linkat"}, {"reason": ["socket->file", "socket->sk"], "call": "sendmsg"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "stime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["socket->file", "socket->sk"], "call": "shutdown"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "poll"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlink"}, {"reason": ["socket->file", "socket->sk"], "call": "getsockopt"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["socket->file", "socket->sk"], "call": "listen"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fstat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["socket->file", "socket->sk"], "call": "recvmsg"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["socket->file", "socket->sk"], "call": "sendmmsg"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "newfstat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["socket->file", "socket->sk"], "call": "bind"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ppoll"}], "finit_module": [{"reason": ["module->args", "module->kp", "module_layout->base", "module_layout->size", "module->num_kp"], "call": "delete_module"}, {"reason": ["module->args", "load_info->num_debug", "module->kp", "load_info->debug", "module_layout->size", "module_layout->base", "module->num_kp"], "call": "init_module"}], "sendfile64": [{"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "mlockall": [{"reason": ["task_struct->personality"], "call": "keyctl"}, {"reason": ["task_struct->personality"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality"], "call": "msgrcv"}, {"reason": ["task_struct->personality"], "call": "kill"}, {"reason": ["mm_struct->total_vm"], "call": "swapoff"}, {"reason": ["task_struct->personality"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality"], "call": "sched_setparam"}, {"reason": ["task_struct->personality"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->total_vm", "vm_area_struct->vm_end"], "call": "remap_file_pages"}, {"reason": ["mm_struct->total_vm"], "call": "io_getevents"}, {"reason": ["task_struct->personality"], "call": "getppid"}, {"reason": ["task_struct->personality"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality"], "call": "capget"}, {"reason": ["task_struct->personality"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality"], "call": "signal"}, {"reason": ["task_struct->personality"], "call": "semtimedop"}, {"reason": ["task_struct->personality"], "call": "umount"}, {"reason": ["task_struct->personality"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->personality"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality"], "call": "setsid"}, {"reason": ["task_struct->personality"], "call": "sigaltstack"}, {"reason": ["task_struct->personality"], "call": "sched_setattr"}, {"reason": ["task_struct->personality", "mm_struct->total_vm"], "call": "migrate_pages"}, {"reason": ["task_struct->personality"], "call": "getitimer"}, {"reason": ["task_struct->personality"], "call": "setpgid"}, {"reason": ["task_struct->personality"], "call": "getsid"}, {"reason": ["task_struct->personality"], "call": "prlimit64"}, {"reason": ["task_struct->personality"], "call": "perf_event_open"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->total_vm", "vm_area_struct->vm_end"], "call": "shmdt"}, {"reason": ["task_struct->personality"], "call": "rt_sigaction"}, {"reason": ["task_struct->personality"], "call": "getpgid"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->total_vm", "vm_area_struct->vm_end"], "call": "brk"}, {"reason": ["task_struct->personality"], "call": "getpriority"}, {"reason": ["task_struct->personality"], "call": "sigaction"}, {"reason": ["task_struct->personality"], "call": "setns"}, {"reason": ["task_struct->personality"], "call": "fork"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->total_vm", "vm_area_struct->vm_end"], "call": "get_mempolicy"}, {"reason": ["task_struct->personality"], "call": "get_robust_list"}, {"reason": ["task_struct->personality"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality"], "call": "ptrace"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "madvise"}, {"reason": ["task_struct->personality"], "call": "sched_getattr"}, {"reason": ["task_struct->personality", "mm_struct->total_vm"], "call": "getrusage"}, {"reason": ["task_struct->personality"], "call": "sched_setscheduler"}, {"reason": ["task_struct->personality"], "call": "setitimer"}, {"reason": ["task_struct->personality"], "call": "ioprio_get"}, {"reason": ["task_struct->personality"], "call": "vfork"}, {"reason": ["mm_struct->total_vm"], "call": "io_setup"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->total_vm", "vm_area_struct->vm_end"], "call": "mremap"}, {"reason": ["mm_struct->total_vm"], "call": "io_destroy"}, {"reason": ["mm_struct->total_vm"], "call": "mbind"}, {"reason": ["vm_area_struct->vm_start", "task_struct->personality", "mm_struct->total_vm", "vm_area_struct->vm_end"], "call": "prctl"}, {"reason": ["task_struct->personality", "mm_struct->total_vm"], "call": "move_pages"}, {"reason": ["mm_struct->total_vm"], "call": "modify_ldt"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "munlock"}, {"reason": ["task_struct->personality"], "call": "setpriority"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->total_vm", "vm_area_struct->vm_end"], "call": "mincore"}, {"reason": ["task_struct->personality"], "call": "clone"}, {"reason": ["task_struct->personality"], "call": "sched_getparam"}, {"reason": ["mm_struct->total_vm"], "call": "io_cancel"}], "ppoll": [{"reason": ["task_struct->personality"], "call": "keyctl"}, {"reason": ["task_struct->personality", "timespec->tv_sec", "timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality"], "call": "msgrcv"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["task_struct->personality"], "call": "kill"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["task_struct->personality"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality"], "call": "sched_setparam"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["task_struct->personality"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["task_struct->personality"], "call": "getppid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchown"}, {"reason": ["task_struct->personality", "timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality"], "call": "capget"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "utime"}, {"reason": ["task_struct->personality"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality"], "call": "signal"}, {"reason": ["task_struct->personality", "timespec->tv_sec", "timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["task_struct->personality"], "call": "umount"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["task_struct->personality", "timespec->tv_sec", "timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["compat_timespec->tv_sec", "compat_timespec->tv_nsec", "timespec->tv_sec", "timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "uselib"}, {"reason": ["task_struct->personality"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality"], "call": "setsid"}, {"reason": ["task_struct->personality"], "call": "sigaltstack"}, {"reason": ["task_struct->personality"], "call": "sched_setattr"}, {"reason": ["task_struct->personality"], "call": "migrate_pages"}, {"reason": ["task_struct->personality"], "call": "getitimer"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["task_struct->personality"], "call": "setpgid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["task_struct->personality"], "call": "getsid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["task_struct->personality"], "call": "prlimit64"}, {"reason": ["task_struct->personality"], "call": "perf_event_open"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "stime"}, {"reason": ["task_struct->personality"], "call": "rt_sigaction"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["task_struct->personality"], "call": "getpgid"}, {"reason": ["poll_list->len", "timespec->tv_sec", "timespec->tv_nsec"], "call": "poll"}, {"reason": ["compat_timespec->tv_sec", "compat_timespec->tv_nsec", "timespec->tv_sec", "timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlink"}, {"reason": ["task_struct->personality"], "call": "getpriority"}, {"reason": ["task_struct->personality"], "call": "sigaction"}, {"reason": ["compat_timespec->tv_sec", "compat_timespec->tv_nsec", "timespec->tv_sec", "timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["task_struct->personality"], "call": "setns"}, {"reason": ["task_struct->personality"], "call": "fork"}, {"reason": ["task_struct->personality"], "call": "get_robust_list"}, {"reason": ["task_struct->personality", "timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality"], "call": "ptrace"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["task_struct->personality"], "call": "sched_getattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["task_struct->personality"], "call": "getrusage"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fstat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["task_struct->personality"], "call": "sched_setscheduler"}, {"reason": ["task_struct->personality"], "call": "setitimer"}, {"reason": ["task_struct->personality"], "call": "ioprio_get"}, {"reason": ["task_struct->personality"], "call": "vfork"}, {"reason": ["task_struct->personality"], "call": "prctl"}, {"reason": ["task_struct->personality"], "call": "move_pages"}, {"reason": ["task_struct->personality"], "call": "setpriority"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "newfstat"}, {"reason": ["task_struct->personality"], "call": "clone"}, {"reason": ["compat_timespec->tv_sec", "compat_timespec->tv_nsec", "timespec->tv_sec", "timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["task_struct->personality"], "call": "sched_getparam"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile64"}], "mlock": [{"reason": ["task_struct->mm"], "call": "keyctl"}, {"reason": ["task_struct->mm"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->mm"], "call": "msgrcv"}, {"reason": ["task_struct->mm"], "call": "kill"}, {"reason": ["task_struct->mm"], "call": "sched_getaffinity"}, {"reason": ["task_struct->mm"], "call": "sched_setparam"}, {"reason": ["task_struct->mm"], "call": "ioprio_set"}, {"reason": ["task_struct->mm"], "call": "getppid"}, {"reason": ["task_struct->mm"], "call": "mq_timedreceive"}, {"reason": ["task_struct->mm"], "call": "capget"}, {"reason": ["task_struct->mm"], "call": "sched_setaffinity"}, {"reason": ["task_struct->mm"], "call": "signal"}, {"reason": ["task_struct->mm"], "call": "semtimedop"}, {"reason": ["task_struct->mm"], "call": "umount"}, {"reason": ["task_struct->mm"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->mm"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->mm"], "call": "setsid"}, {"reason": ["task_struct->mm"], "call": "sigaltstack"}, {"reason": ["task_struct->mm"], "call": "sched_setattr"}, {"reason": ["task_struct->mm"], "call": "migrate_pages"}, {"reason": ["task_struct->mm"], "call": "getitimer"}, {"reason": ["task_struct->mm"], "call": "setpgid"}, {"reason": ["task_struct->mm"], "call": "getsid"}, {"reason": ["task_struct->mm"], "call": "prlimit64"}, {"reason": ["task_struct->mm"], "call": "perf_event_open"}, {"reason": ["task_struct->mm"], "call": "rt_sigaction"}, {"reason": ["task_struct->mm"], "call": "getpgid"}, {"reason": ["task_struct->mm"], "call": "getpriority"}, {"reason": ["task_struct->mm"], "call": "sigaction"}, {"reason": ["task_struct->mm"], "call": "setns"}, {"reason": ["task_struct->mm"], "call": "fork"}, {"reason": ["task_struct->mm"], "call": "get_robust_list"}, {"reason": ["task_struct->mm"], "call": "mq_timedsend"}, {"reason": ["task_struct->mm"], "call": "sched_getscheduler"}, {"reason": ["task_struct->mm"], "call": "ptrace"}, {"reason": ["task_struct->mm"], "call": "sched_getattr"}, {"reason": ["task_struct->mm"], "call": "getrusage"}, {"reason": ["task_struct->mm"], "call": "sched_setscheduler"}, {"reason": ["task_struct->mm"], "call": "setitimer"}, {"reason": ["task_struct->mm"], "call": "ioprio_get"}, {"reason": ["task_struct->mm"], "call": "vfork"}, {"reason": ["task_struct->mm"], "call": "prctl"}, {"reason": ["task_struct->mm"], "call": "move_pages"}, {"reason": ["task_struct->mm"], "call": "setpriority"}, {"reason": ["task_struct->mm"], "call": "clone"}, {"reason": ["task_struct->mm"], "call": "sched_getparam"}]}
--- /dev/null	Fri Dec 21 15:00:33 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/implicit_dependencies/with_structs/implicit_dependencies_verbose.pretty	Fri Dec 21 15:00:33 2018
@@ -0,0 +1,18235 @@
+{'acct': [{'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+          {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+          {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+          {'call': 'remap_file_pages', 'reason': set([('file', 'f_mode')])},
+          {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+          {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+          {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+          {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+          {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+          {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+          {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+          {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+          {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+          {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+          {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+          {'call': 'perf_event_open', 'reason': set([('file', 'f_mode')])},
+          {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+          {'call': 'open', 'reason': set([('file', 'f_mode')])},
+          {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+          {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+          {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+          {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+          {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+          {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+          {'call': 'open_by_handle_at', 'reason': set([('file', 'f_mode')])}],
+ 'alarm': [{'call': 'waitid',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'settimeofday',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'adjtimex',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'getitimer',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'select',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'wait4',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'getrusage',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'setitimer',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'clock_adjtime',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'ppoll',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])}],
+ 'bpf': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'rt_sigtimedwait',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'eventfd2',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'swapoff',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'sched_getaffinity',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'sched_setparam', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'memfd_create',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'ioprio_set', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'remap_file_pages',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'dup3',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'mq_timedreceive',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'sched_setaffinity',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'semtimedop', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'sched_rr_get_interval',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'epoll_create1',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'epoll_ctl',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'flock',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'openat',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'uselib',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'rt_sigprocmask', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'accept4',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'sigaltstack', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'sched_setattr', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'socketpair',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'migrate_pages', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'getitimer', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'shmat',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'socket',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'pipe2',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'prlimit64', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'perf_event_open',
+          'reason': set([('bpf_prog', 'aux'),
+                         ('file', 'f_op'),
+                         ('file', 'private_data'),
+                         ('mm_segment_t', 'seg')])},
+         {'call': 'shmdt',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'rt_sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'acct',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'open',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'getpriority', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'dup',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'setns',
+          'reason': set([('file', 'f_op'),
+                         ('file', 'private_data'),
+                         ('mm_segment_t', 'seg')])},
+         {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'get_robust_list',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'mq_timedsend', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'sched_getscheduler',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'shmctl',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'swapon',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'sched_getattr', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'getrusage', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'sched_setscheduler',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'setitimer', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'ioprio_get', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'mmap_pgoff',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'move_pages', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'setpriority', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'mq_open',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])},
+         {'call': 'sched_getparam', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'open_by_handle_at',
+          'reason': set([('file', 'f_op'), ('file', 'private_data')])}],
+ 'brk': [{'call': 'swapoff',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'remap_file_pages',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'io_getevents',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'migrate_pages',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'shmdt',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'get_mempolicy',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'munlockall',
+          'reason': set([('mm_struct', 'def_flags'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'pkey_mprotect',
+          'reason': set([('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'madvise',
+          'reason': set([('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'getrusage',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'io_setup',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'mprotect',
+          'reason': set([('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'mremap',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'io_destroy',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'mbind',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'prctl',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'move_pages',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'modify_ldt',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'munlock',
+          'reason': set([('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'mincore',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'io_cancel',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'mlockall',
+          'reason': set([('mm_struct', 'def_flags'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])}],
+ 'capset': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_set', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'semtimedop', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sigaltstack', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'migrate_pages',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prlimit64', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpriority', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_get', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'move_pages', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setpriority', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'cred')])}],
+ 'clock_adjtime': [{'call': 'clock_getres',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'timer_delete',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'timer_create',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'clock_gettime',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'timer_settime',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'timer_gettime',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'clock_settime',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'clock_nanosleep',
+                    'reason': set([('k_clock', 'clock_adj')])}],
+ 'clock_nanosleep': [{'call': 'rt_sigtimedwait',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'mq_unlink',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'swapoff',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'clock_getres',
+                      'reason': set([('k_clock', 'nsleep')])},
+                     {'call': 'timer_delete',
+                      'reason': set([('k_clock', 'nsleep')])},
+                     {'call': 'fchmod',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'memfd_create',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'readlinkat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'io_getevents',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'fchown',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'mq_timedreceive',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'utime',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'semtimedop',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'settimeofday',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'timer_create',
+                      'reason': set([('k_clock', 'nsleep')])},
+                     {'call': 'clock_gettime',
+                      'reason': set([('k_clock', 'nsleep')])},
+                     {'call': 'sched_rr_get_interval',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'timerfd_gettime',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'pselect6',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'uselib',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'fchmodat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'inotify_add_watch',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'timer_settime',
+                      'reason': set([('k_clock', 'nsleep'),
+                                     ('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'ftruncate',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'timer_gettime',
+                      'reason': set([('k_clock', 'nsleep'),
+                                     ('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'ioctl',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'linkat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'stime',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'futimesat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'poll',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'clock_settime',
+                      'reason': set([('k_clock', 'nsleep')])},
+                     {'call': 'select',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'unlink',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'nanosleep',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'mq_getsetattr',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'faccessat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'swapon',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'epoll_wait',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'fchownat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'fstat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'timerfd_settime',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'mq_notify',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'sendfile',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'newfstat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'unlinkat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'clock_adjtime',
+                      'reason': set([('k_clock', 'nsleep')])},
+                     {'call': 'futex',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'recvmmsg',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'sendfile64',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'ppoll',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])}],
+ 'clock_settime': [{'call': 'clock_getres',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'timer_delete',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'timer_create',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'clock_gettime',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'timer_settime',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'timer_gettime',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'clock_nanosleep',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'clock_adjtime',
+                    'reason': set([('k_clock', 'clock_set')])}],
+ 'copy_file_range': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+                     {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fremovexattr',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                     {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+                     {'call': 'read', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+                     {'call': 'mq_timedreceive',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                     {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+                     {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                     {'call': 'tee', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sync_file_range',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                     {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getsockname',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+                     {'call': 'flock', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                     {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+                     {'call': 'old_readdir',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'inotify_rm_watch',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+                     {'call': 'inotify_add_watch',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                     {'call': 'splice', 'reason': set([('fd', 'flags')])},
+                     {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getpeername',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                     {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'perf_event_open',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'pwritev64v2',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                     {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+                     {'call': 'mq_getsetattr',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+                     {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+                     {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+                     {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'write', 'reason': set([('fd', 'flags')])},
+                     {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+                     {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                     {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'delete_module': [{'call': 'init_module',
+                    'reason': set([('module', 'exit'),
+                                   ('module', 'init'),
+                                   ('module', 'state')])},
+                   {'call': 'finit_module',
+                    'reason': set([('module', 'exit'),
+                                   ('module', 'init'),
+                                   ('module', 'state')])}],
+ 'dup3': [{'call': 'unshare',
+           'reason': set([('fdtable', 'max_fds'),
+                          ('files_struct', 'fdt'),
+                          ('files_struct', 'resize_in_progress')])},
+          {'call': 'select', 'reason': set([('fdtable', 'max_fds')])},
+          {'call': 'dup2',
+           'reason': set([('fdtable', 'max_fds'),
+                          ('files_struct', 'fdt'),
+                          ('files_struct', 'resize_in_progress')])}],
+ 'epoll_create1': [{'call': 'keyctl',
+                    'reason': set([('cred', 'user'),
+                                   ('task_struct', 'cred')])},
+                   {'call': 'rt_sigtimedwait',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setfsuid', 'reason': set([('cred', 'user')])},
+                   {'call': 'msgrcv',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getresuid16', 'reason': set([('cred', 'user')])},
+                   {'call': 'getresgid', 'reason': set([('cred', 'user')])},
+                   {'call': 'sched_getaffinity',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_setparam',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setgid', 'reason': set([('cred', 'user')])},
+                   {'call': 'ioprio_set',
+                    'reason': set([('cred', 'user'),
+                                   ('task_struct', 'cred')])},
+                   {'call': 'capset', 'reason': set([('cred', 'user')])},
+                   {'call': 'getppid',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getresgid16', 'reason': set([('cred', 'user')])},
+                   {'call': 'capget',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_setaffinity',
+                    'reason': set([('cred', 'user'),
+                                   ('task_struct', 'cred')])},
+                   {'call': 'setfsgid', 'reason': set([('cred', 'user')])},
+                   {'call': 'unshare', 'reason': set([('cred', 'user')])},
+                   {'call': 'signal',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setreuid', 'reason': set([('cred', 'user')])},
+                   {'call': 'semtimedop',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'umount',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_rr_get_interval',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getresuid', 'reason': set([('cred', 'user')])},
+                   {'call': 'epoll_ctl',
+                    'reason': set([('eventpoll', 'user'),
+                                   ('eventpoll', 'ws')])},
+                   {'call': 'rt_sigprocmask',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setsid',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sigaltstack',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_setattr',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'migrate_pages',
+                    'reason': set([('cred', 'user'),
+                                   ('task_struct', 'cred')])},
+                   {'call': 'getitimer',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setpgid',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setresgid', 'reason': set([('cred', 'user')])},
+                   {'call': 'setregid', 'reason': set([('cred', 'user')])},
+                   {'call': 'getsid',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('cred', 'user'),
+                                   ('task_struct', 'cred')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getgroups16', 'reason': set([('cred', 'user')])},
+                   {'call': 'rt_sigaction',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getpgid',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getpriority',
+                    'reason': set([('cred', 'user'),
+                                   ('task_struct', 'cred')])},
+                   {'call': 'sigaction',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'faccessat', 'reason': set([('cred', 'user')])},
+                   {'call': 'setns',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+                   {'call': 'get_robust_list',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_getscheduler',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'ptrace',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'epoll_wait',
+                    'reason': set([('eventpoll', 'user'),
+                                   ('eventpoll', 'ws')])},
+                   {'call': 'sched_getattr',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getrusage',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_setscheduler',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setresuid', 'reason': set([('cred', 'user')])},
+                   {'call': 'setitimer',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'ioprio_get',
+                    'reason': set([('cred', 'user'),
+                                   ('task_struct', 'cred')])},
+                   {'call': 'vfork',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setuid', 'reason': set([('cred', 'user')])},
+                   {'call': 'prctl',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'move_pages',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getgroups', 'reason': set([('cred', 'user')])},
+                   {'call': 'setpriority',
+                    'reason': set([('cred', 'user'),
+                                   ('task_struct', 'cred')])},
+                   {'call': 'clone',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_getparam',
+                    'reason': set([('task_struct', 'cred')])}],
+ 'epoll_ctl': [{'call': 'syncfs',
+                'reason': set([('fd', 'flags'), ('list_head', 'next')])},
+               {'call': 'keyctl', 'reason': set([('list_head', 'next')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'vmsplice',
+                'reason': set([('fd', 'flags'), ('list_head', 'next')])},
+               {'call': 'msgrcv', 'reason': set([('list_head', 'next')])},
+               {'call': 'eventfd2',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'mq_unlink', 'reason': set([('list_head', 'next')])},
+               {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+               {'call': 'kill', 'reason': set([('list_head', 'next')])},
+               {'call': 'swapoff',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'readahead',
+                'reason': set([('fd', 'flags'), ('list_head', 'next')])},
+               {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+               {'call': 'timer_delete',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'writev', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+               {'call': 'sched_setparam',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'fchmod',
+                'reason': set([('fd', 'flags'), ('list_head', 'next')])},
+               {'call': 'setgid', 'reason': set([('list_head', 'next')])},
+               {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+               {'call': 'pivot_root', 'reason': set([('list_head', 'next')])},
+               {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+               {'call': 'memfd_create',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'ioprio_set', 'reason': set([('list_head', 'next')])},
+               {'call': 'delete_module',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'dup3',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'readlinkat', 'reason': set([('list_head', 'next')])},
+               {'call': 'read', 'reason': set([('fd', 'flags')])},
+               {'call': 'io_getevents',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'getppid', 'reason': set([('list_head', 'next')])},
+               {'call': 'fchown',
+                'reason': set([('fd', 'flags'), ('list_head', 'next')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('fd', 'flags'), ('list_head', 'next')])},
+               {'call': 'capget', 'reason': set([('list_head', 'next')])},
+               {'call': 'utime', 'reason': set([('fd', 'flags')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'ustat', 'reason': set([('list_head', 'next')])},
+               {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+               {'call': 'bpf',
+                'reason': set([('fd', 'flags'), ('list_head', 'next')])},
+               {'call': 'unshare', 'reason': set([('list_head', 'next')])},
+               {'call': 'signal', 'reason': set([('list_head', 'next')])},
+               {'call': 'setreuid', 'reason': set([('list_head', 'next')])},
+               {'call': 'semtimedop', 'reason': set([('list_head', 'next')])},
+               {'call': 'umount', 'reason': set([('list_head', 'next')])},
+               {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'timer_create',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+               {'call': 'mkdirat', 'reason': set([('list_head', 'next')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'epoll_create1',
+                'reason': set([('epitem', 'nwait'),
+                               ('epitem', 'ws'),
+                               ('epoll_event', 'events'),
+                               ('file', 'f_op'),
+                               ('list_head', 'next')])},
+               {'call': 'timerfd_gettime',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'tee',
+                'reason': set([('fd', 'flags'), ('list_head', 'next')])},
+               {'call': 'semctl', 'reason': set([('list_head', 'next')])},
+               {'call': 'sync_file_range',
+                'reason': set([('fd', 'flags'), ('list_head', 'next')])},
+               {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'connect', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+               {'call': 'flock',
+                'reason': set([('fd', 'flags'),
+                               ('file', 'f_op'),
+                               ('list_head', 'next')])},
+               {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'openat',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'lookup_dcookie',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'uselib',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'renameat2', 'reason': set([('list_head', 'next')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'accept4',
+                'reason': set([('fd', 'flags'),
+                               ('file', 'f_op'),
+                               ('list_head', 'next')])},
+               {'call': 'msgctl', 'reason': set([('list_head', 'next')])},
+               {'call': 'reboot', 'reason': set([('list_head', 'next')])},
+               {'call': 'setsid', 'reason': set([('list_head', 'next')])},
+               {'call': 'set_trip_temp',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'sigaltstack',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'sched_setattr',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_rm_watch',
+                'reason': set([('fd', 'flags'), ('list_head', 'next')])},
+               {'call': 'socketpair',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+               {'call': 'migrate_pages',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'getitimer', 'reason': set([('list_head', 'next')])},
+               {'call': 'fchmodat', 'reason': set([('list_head', 'next')])},
+               {'call': 'setpgid', 'reason': set([('list_head', 'next')])},
+               {'call': 'init_module',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'setresgid', 'reason': set([('list_head', 'next')])},
+               {'call': 'getcwd', 'reason': set([('list_head', 'next')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('fd', 'flags'), ('list_head', 'next')])},
+               {'call': 'get_trip_temp',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+               {'call': 'timer_settime',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'setregid', 'reason': set([('list_head', 'next')])},
+               {'call': 'splice',
+                'reason': set([('fd', 'flags'), ('list_head', 'next')])},
+               {'call': 'ftruncate',
+                'reason': set([('fd', 'flags'), ('list_head', 'next')])},
+               {'call': 'timer_gettime',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+               {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsid', 'reason': set([('list_head', 'next')])},
+               {'call': 'shmat',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'mknodat', 'reason': set([('list_head', 'next')])},
+               {'call': 'socket',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'symlinkat', 'reason': set([('list_head', 'next')])},
+               {'call': 'pipe2',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+               {'call': 'ioctl',
+                'reason': set([('fd', 'flags'), ('list_head', 'next')])},
+               {'call': 'prlimit64', 'reason': set([('list_head', 'next')])},
+               {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+               {'call': 'perf_event_open',
+                'reason': set([('fd', 'flags'),
+                               ('file', 'f_op'),
+                               ('list_head', 'next')])},
+               {'call': 'linkat', 'reason': set([('list_head', 'next')])},
+               {'call': 'getgroups16',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'shmdt',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'quotactl', 'reason': set([('list_head', 'next')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+               {'call': 'request_key',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'getpgid', 'reason': set([('list_head', 'next')])},
+               {'call': 'brk', 'reason': set([('list_head', 'next')])},
+               {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+               {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+               {'call': 'acct',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'open',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'unlink', 'reason': set([('list_head', 'next')])},
+               {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'exit_group', 'reason': set([('list_head', 'next')])},
+               {'call': 'getpriority',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'sigaction', 'reason': set([('list_head', 'next')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('fd', 'flags'), ('list_head', 'next')])},
+               {'call': 'faccessat', 'reason': set([('list_head', 'next')])},
+               {'call': 'rmdir', 'reason': set([('list_head', 'next')])},
+               {'call': 'dup',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+               {'call': 'setgroups16',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'setns',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+               {'call': 'listen', 'reason': set([('fd', 'flags')])},
+               {'call': 'fork', 'reason': set([('list_head', 'next')])},
+               {'call': 'get_mempolicy',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'io_submit', 'reason': set([('list_head', 'next')])},
+               {'call': 'get_robust_list',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('fd', 'flags'), ('list_head', 'next')])},
+               {'call': 'sched_yield',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'ptrace', 'reason': set([('list_head', 'next')])},
+               {'call': 'shmctl',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+               {'call': 'munlockall', 'reason': set([('list_head', 'next')])},
+               {'call': 'swapon',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+               {'call': 'pkey_mprotect',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'madvise', 'reason': set([('list_head', 'next')])},
+               {'call': 'epoll_wait',
+                'reason': set([('fd', 'flags'), ('list_head', 'next')])},
+               {'call': 'sched_getattr',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'fchownat', 'reason': set([('list_head', 'next')])},
+               {'call': 'getrusage', 'reason': set([('list_head', 'next')])},
+               {'call': 'timerfd_settime',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'setresuid', 'reason': set([('list_head', 'next')])},
+               {'call': 'setitimer', 'reason': set([('list_head', 'next')])},
+               {'call': 'ioprio_get', 'reason': set([('list_head', 'next')])},
+               {'call': 'vfork', 'reason': set([('list_head', 'next')])},
+               {'call': 'setuid', 'reason': set([('list_head', 'next')])},
+               {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'io_setup', 'reason': set([('list_head', 'next')])},
+               {'call': 'mprotect', 'reason': set([('list_head', 'next')])},
+               {'call': 'mmap_pgoff',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'mremap', 'reason': set([('list_head', 'next')])},
+               {'call': 'io_destroy', 'reason': set([('list_head', 'next')])},
+               {'call': 'mbind', 'reason': set([('list_head', 'next')])},
+               {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'readv', 'reason': set([('fd', 'flags')])},
+               {'call': 'prctl', 'reason': set([('list_head', 'next')])},
+               {'call': 'move_pages', 'reason': set([('list_head', 'next')])},
+               {'call': 'timerfd_create',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'modify_ldt', 'reason': set([('list_head', 'next')])},
+               {'call': 'getgroups', 'reason': set([('list_head', 'next')])},
+               {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+               {'call': 'dup2', 'reason': set([('list_head', 'next')])},
+               {'call': 'get_curr_temp',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'msgsnd', 'reason': set([('list_head', 'next')])},
+               {'call': 'write', 'reason': set([('fd', 'flags')])},
+               {'call': 'munlock', 'reason': set([('list_head', 'next')])},
+               {'call': 'setpriority',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'inotify_init1',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'mincore', 'reason': set([('list_head', 'next')])},
+               {'call': 'mq_notify',
+                'reason': set([('fd', 'flags'), ('list_head', 'next')])},
+               {'call': 'sendfile',
+                'reason': set([('fd', 'flags'), ('list_head', 'next')])},
+               {'call': 'timer_getoverrun',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'kexec_load', 'reason': set([('list_head', 'next')])},
+               {'call': 'clone', 'reason': set([('list_head', 'next')])},
+               {'call': 'mq_open',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'setgroups', 'reason': set([('list_head', 'next')])},
+               {'call': 'unlinkat', 'reason': set([('list_head', 'next')])},
+               {'call': 'sched_getparam',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'io_cancel', 'reason': set([('list_head', 'next')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('file', 'f_op'), ('list_head', 'next')])},
+               {'call': 'bind', 'reason': set([('fd', 'flags')])},
+               {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'finit_module',
+                'reason': set([('list_head', 'next')])},
+               {'call': 'sendfile64',
+                'reason': set([('fd', 'flags'), ('list_head', 'next')])},
+               {'call': 'mlockall', 'reason': set([('list_head', 'next')])}],
+ 'epoll_wait': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+                {'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'rt_sigtimedwait',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+                {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'eventfd2', 'reason': set([('file', 'f_op')])},
+                {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+                {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'swapoff', 'reason': set([('file', 'f_op')])},
+                {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+                {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                {'call': 'sched_getaffinity',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                {'call': 'sched_setparam',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+                {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+                {'call': 'memfd_create', 'reason': set([('file', 'f_op')])},
+                {'call': 'ioprio_set',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('file', 'f_op')])},
+                {'call': 'dup3', 'reason': set([('file', 'f_op')])},
+                {'call': 'read', 'reason': set([('fd', 'flags')])},
+                {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+                {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'mq_timedreceive',
+                 'reason': set([('fd', 'flags'), ('mm_segment_t', 'seg')])},
+                {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                {'call': 'sched_setaffinity',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+                {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'semtimedop',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                {'call': 'sched_rr_get_interval',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'epoll_create1', 'reason': set([('file', 'f_op')])},
+                {'call': 'tee', 'reason': set([('fd', 'flags')])},
+                {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+                {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+                {'call': 'epoll_ctl',
+                 'reason': set([('fd', 'flags'), ('file', 'f_op')])},
+                {'call': 'flock',
+                 'reason': set([('fd', 'flags'), ('file', 'f_op')])},
+                {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                {'call': 'openat', 'reason': set([('file', 'f_op')])},
+                {'call': 'uselib', 'reason': set([('file', 'f_op')])},
+                {'call': 'rt_sigprocmask',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'accept4',
+                 'reason': set([('fd', 'flags'), ('file', 'f_op')])},
+                {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sigaltstack',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sched_setattr',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+                {'call': 'inotify_rm_watch',
+                 'reason': set([('fd', 'flags')])},
+                {'call': 'socketpair', 'reason': set([('file', 'f_op')])},
+                {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+                {'call': 'migrate_pages',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'getitimer',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'inotify_add_watch',
+                 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                {'call': 'splice', 'reason': set([('fd', 'flags')])},
+                {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+                {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'shmat', 'reason': set([('file', 'f_op')])},
+                {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+                {'call': 'socket', 'reason': set([('file', 'f_op')])},
+                {'call': 'pipe2', 'reason': set([('file', 'f_op')])},
+                {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+                {'call': 'prlimit64',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('fd', 'flags'),
+                                ('file', 'f_op'),
+                                ('mm_segment_t', 'seg')])},
+                {'call': 'shmdt', 'reason': set([('file', 'f_op')])},
+                {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+                {'call': 'rt_sigaction',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+                {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                {'call': 'acct', 'reason': set([('file', 'f_op')])},
+                {'call': 'open', 'reason': set([('file', 'f_op')])},
+                {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+                {'call': 'getpriority',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sigaction',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'dup', 'reason': set([('file', 'f_op')])},
+                {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+                {'call': 'setns',
+                 'reason': set([('file', 'f_op'), ('mm_segment_t', 'seg')])},
+                {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+                {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'get_robust_list',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+                {'call': 'mq_timedsend',
+                 'reason': set([('fd', 'flags'), ('mm_segment_t', 'seg')])},
+                {'call': 'sched_getscheduler',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'shmctl', 'reason': set([('file', 'f_op')])},
+                {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                {'call': 'swapon', 'reason': set([('file', 'f_op')])},
+                {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+                {'call': 'sched_getattr',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'getrusage',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sched_setscheduler',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'setitimer',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'ioprio_get',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                {'call': 'mmap_pgoff', 'reason': set([('file', 'f_op')])},
+                {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+                {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'move_pages',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+                {'call': 'write', 'reason': set([('fd', 'flags')])},
+                {'call': 'setpriority',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+                {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+                {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'mq_open', 'reason': set([('file', 'f_op')])},
+                {'call': 'sched_getparam',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'open_by_handle_at',
+                 'reason': set([('file', 'f_op')])},
+                {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'faccessat': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'eventfd2', 'reason': set([('path', 'mnt')])},
+               {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'swapoff', 'reason': set([('path', 'mnt')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setparam',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'pivot_root', 'reason': set([('path', 'mnt')])},
+               {'call': 'memfd_create', 'reason': set([('path', 'mnt')])},
+               {'call': 'ioprio_set',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'remap_file_pages', 'reason': set([('path', 'mnt')])},
+               {'call': 'dup3', 'reason': set([('path', 'mnt')])},
+               {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'unshare', 'reason': set([('path', 'mnt')])},
+               {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setreuid', 'reason': set([('cred', 'uid')])},
+               {'call': 'semtimedop',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'epoll_create1', 'reason': set([('path', 'mnt')])},
+               {'call': 'epoll_ctl', 'reason': set([('path', 'mnt')])},
+               {'call': 'flock', 'reason': set([('path', 'mnt')])},
+               {'call': 'openat', 'reason': set([('path', 'mnt')])},
+               {'call': 'lookup_dcookie', 'reason': set([('path', 'mnt')])},
+               {'call': 'uselib', 'reason': set([('path', 'mnt')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'accept4', 'reason': set([('path', 'mnt')])},
+               {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaltstack',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'socketpair', 'reason': set([('path', 'mnt')])},
+               {'call': 'migrate_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getcwd', 'reason': set([('path', 'mnt')])},
+               {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'shmat', 'reason': set([('path', 'mnt')])},
+               {'call': 'socket', 'reason': set([('path', 'mnt')])},
+               {'call': 'pipe2', 'reason': set([('path', 'mnt')])},
+               {'call': 'prlimit64',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'perf_event_open',
+                'reason': set([('path', 'mnt'), ('task_struct', 'cred')])},
+               {'call': 'shmdt', 'reason': set([('path', 'mnt')])},
+               {'call': 'quotactl', 'reason': set([('path', 'mnt')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'acct', 'reason': set([('path', 'mnt')])},
+               {'call': 'open', 'reason': set([('path', 'mnt')])},
+               {'call': 'getpriority',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'dup', 'reason': set([('path', 'mnt')])},
+               {'call': 'setns',
+                'reason': set([('path', 'mnt'), ('task_struct', 'cred')])},
+               {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'get_robust_list',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'shmctl', 'reason': set([('path', 'mnt')])},
+               {'call': 'swapon', 'reason': set([('path', 'mnt')])},
+               {'call': 'sched_getattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getrusage',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setresuid', 'reason': set([('cred', 'uid')])},
+               {'call': 'setitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_get',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setuid', 'reason': set([('cred', 'uid')])},
+               {'call': 'mmap_pgoff', 'reason': set([('path', 'mnt')])},
+               {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'move_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpriority',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_open', 'reason': set([('path', 'mnt')])},
+               {'call': 'sched_getparam',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('path', 'mnt')])}],
+ 'fallocate': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+               {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+               {'call': 'writev', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+               {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+               {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+               {'call': 'read', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+               {'call': 'utime', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+               {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+               {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+               {'call': 'tee', 'reason': set([('fd', 'flags')])},
+               {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'connect', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+               {'call': 'flock', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+               {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+               {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('fd', 'flags')])},
+               {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+               {'call': 'splice', 'reason': set([('fd', 'flags')])},
+               {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+               {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+               {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+               {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+               {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+               {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+               {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+               {'call': 'listen', 'reason': set([('fd', 'flags')])},
+               {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+               {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+               {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'readv', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+               {'call': 'write', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+               {'call': 'bind', 'reason': set([('fd', 'flags')])},
+               {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'fchdir': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+            {'call': 'eventfd2', 'reason': set([('path', 'dentry')])},
+            {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+            {'call': 'swapoff', 'reason': set([('path', 'dentry')])},
+            {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+            {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+            {'call': 'writev', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+            {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+            {'call': 'pivot_root', 'reason': set([('path', 'dentry')])},
+            {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+            {'call': 'memfd_create', 'reason': set([('path', 'dentry')])},
+            {'call': 'remap_file_pages', 'reason': set([('path', 'dentry')])},
+            {'call': 'dup3', 'reason': set([('path', 'dentry')])},
+            {'call': 'read', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+            {'call': 'utime', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+            {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+            {'call': 'unshare', 'reason': set([('path', 'dentry')])},
+            {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_create1', 'reason': set([('path', 'dentry')])},
+            {'call': 'tee', 'reason': set([('fd', 'flags')])},
+            {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'connect', 'reason': set([('fd', 'flags')])},
+            {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_ctl',
+             'reason': set([('fd', 'flags'), ('path', 'dentry')])},
+            {'call': 'flock',
+             'reason': set([('fd', 'flags'), ('path', 'dentry')])},
+            {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+            {'call': 'openat', 'reason': set([('path', 'dentry')])},
+            {'call': 'lookup_dcookie', 'reason': set([('path', 'dentry')])},
+            {'call': 'uselib', 'reason': set([('path', 'dentry')])},
+            {'call': 'accept4',
+             'reason': set([('fd', 'flags'), ('path', 'dentry')])},
+            {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'socketpair', 'reason': set([('path', 'dentry')])},
+            {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+            {'call': 'getcwd', 'reason': set([('path', 'dentry')])},
+            {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+            {'call': 'splice', 'reason': set([('fd', 'flags')])},
+            {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+            {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+            {'call': 'shmat', 'reason': set([('path', 'dentry')])},
+            {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'socket', 'reason': set([('path', 'dentry')])},
+            {'call': 'pipe2', 'reason': set([('path', 'dentry')])},
+            {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+            {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+            {'call': 'perf_event_open',
+             'reason': set([('fd', 'flags'), ('path', 'dentry')])},
+            {'call': 'shmdt', 'reason': set([('path', 'dentry')])},
+            {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'quotactl', 'reason': set([('path', 'dentry')])},
+            {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+            {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+            {'call': 'acct', 'reason': set([('path', 'dentry')])},
+            {'call': 'open', 'reason': set([('path', 'dentry')])},
+            {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'dup', 'reason': set([('path', 'dentry')])},
+            {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+            {'call': 'setns', 'reason': set([('path', 'dentry')])},
+            {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+            {'call': 'listen', 'reason': set([('fd', 'flags')])},
+            {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+            {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'shmctl', 'reason': set([('path', 'dentry')])},
+            {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+            {'call': 'swapon', 'reason': set([('path', 'dentry')])},
+            {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+            {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'mmap_pgoff', 'reason': set([('path', 'dentry')])},
+            {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'readv', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+            {'call': 'write', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_open', 'reason': set([('path', 'dentry')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('path', 'dentry')])},
+            {'call': 'bind', 'reason': set([('fd', 'flags')])},
+            {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'fchmod': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+            {'call': 'eventfd2',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+            {'call': 'swapoff',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+            {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+            {'call': 'writev', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+            {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+            {'call': 'pivot_root',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+            {'call': 'memfd_create',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'remap_file_pages',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'dup3',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'read', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+            {'call': 'utime', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+            {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+            {'call': 'unshare',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_create1',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'tee', 'reason': set([('fd', 'flags')])},
+            {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'connect', 'reason': set([('fd', 'flags')])},
+            {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_ctl',
+             'reason': set([('fd', 'flags'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt')])},
+            {'call': 'flock',
+             'reason': set([('fd', 'flags'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt')])},
+            {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'openat',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'lookup_dcookie',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'uselib',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'accept4',
+             'reason': set([('fd', 'flags'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt')])},
+            {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'socketpair',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+            {'call': 'getcwd',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+            {'call': 'splice', 'reason': set([('fd', 'flags')])},
+            {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+            {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+            {'call': 'shmat',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'socket',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'pipe2',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+            {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+            {'call': 'perf_event_open',
+             'reason': set([('fd', 'flags'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt')])},
+            {'call': 'shmdt',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'quotactl',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+            {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+            {'call': 'acct',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'open',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'dup',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+            {'call': 'setns',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+            {'call': 'listen', 'reason': set([('fd', 'flags')])},
+            {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+            {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'shmctl',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+            {'call': 'swapon',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+            {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'mmap_pgoff',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'readv', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+            {'call': 'write', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_open',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'bind', 'reason': set([('fd', 'flags')])},
+            {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'fchmodat': [{'call': 'eventfd2',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'swapoff',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'pivot_root',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'memfd_create',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'dup3',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'unshare',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'epoll_create1',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'epoll_ctl',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'flock',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'openat',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'lookup_dcookie',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'uselib',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'accept4',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'socketpair',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'getcwd',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'shmat',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'socket',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'pipe2',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'perf_event_open',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'shmdt',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'quotactl',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'acct',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'open',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'dup',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'setns',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'shmctl',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'swapon',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'mmap_pgoff',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'mq_open',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'fchown': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+            {'call': 'eventfd2', 'reason': set([('path', 'dentry')])},
+            {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+            {'call': 'swapoff', 'reason': set([('path', 'dentry')])},
+            {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+            {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+            {'call': 'writev', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+            {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+            {'call': 'pivot_root', 'reason': set([('path', 'dentry')])},
+            {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+            {'call': 'memfd_create', 'reason': set([('path', 'dentry')])},
+            {'call': 'remap_file_pages', 'reason': set([('path', 'dentry')])},
+            {'call': 'dup3', 'reason': set([('path', 'dentry')])},
+            {'call': 'read', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+            {'call': 'utime', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+            {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+            {'call': 'unshare', 'reason': set([('path', 'dentry')])},
+            {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_create1', 'reason': set([('path', 'dentry')])},
+            {'call': 'tee', 'reason': set([('fd', 'flags')])},
+            {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'connect', 'reason': set([('fd', 'flags')])},
+            {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_ctl',
+             'reason': set([('fd', 'flags'), ('path', 'dentry')])},
+            {'call': 'flock',
+             'reason': set([('fd', 'flags'), ('path', 'dentry')])},
+            {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'openat', 'reason': set([('path', 'dentry')])},
+            {'call': 'lookup_dcookie', 'reason': set([('path', 'dentry')])},
+            {'call': 'uselib', 'reason': set([('path', 'dentry')])},
+            {'call': 'accept4',
+             'reason': set([('fd', 'flags'), ('path', 'dentry')])},
+            {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'socketpair', 'reason': set([('path', 'dentry')])},
+            {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+            {'call': 'getcwd', 'reason': set([('path', 'dentry')])},
+            {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+            {'call': 'splice', 'reason': set([('fd', 'flags')])},
+            {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+            {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+            {'call': 'shmat', 'reason': set([('path', 'dentry')])},
+            {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'socket', 'reason': set([('path', 'dentry')])},
+            {'call': 'pipe2', 'reason': set([('path', 'dentry')])},
+            {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+            {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+            {'call': 'perf_event_open',
+             'reason': set([('fd', 'flags'), ('path', 'dentry')])},
+            {'call': 'shmdt', 'reason': set([('path', 'dentry')])},
+            {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'quotactl', 'reason': set([('path', 'dentry')])},
+            {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+            {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+            {'call': 'acct', 'reason': set([('path', 'dentry')])},
+            {'call': 'open', 'reason': set([('path', 'dentry')])},
+            {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'dup', 'reason': set([('path', 'dentry')])},
+            {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+            {'call': 'setns', 'reason': set([('path', 'dentry')])},
+            {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+            {'call': 'listen', 'reason': set([('fd', 'flags')])},
+            {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+            {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'shmctl', 'reason': set([('path', 'dentry')])},
+            {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+            {'call': 'swapon', 'reason': set([('path', 'dentry')])},
+            {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+            {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'mmap_pgoff', 'reason': set([('path', 'dentry')])},
+            {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'readv', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+            {'call': 'write', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_open', 'reason': set([('path', 'dentry')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('path', 'dentry')])},
+            {'call': 'bind', 'reason': set([('fd', 'flags')])},
+            {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'fchownat': [{'call': 'eventfd2', 'reason': set([('path', 'dentry')])},
+              {'call': 'swapoff', 'reason': set([('path', 'dentry')])},
+              {'call': 'pivot_root', 'reason': set([('path', 'dentry')])},
+              {'call': 'memfd_create', 'reason': set([('path', 'dentry')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('path', 'dentry')])},
+              {'call': 'dup3', 'reason': set([('path', 'dentry')])},
+              {'call': 'unshare', 'reason': set([('path', 'dentry')])},
+              {'call': 'epoll_create1', 'reason': set([('path', 'dentry')])},
+              {'call': 'epoll_ctl', 'reason': set([('path', 'dentry')])},
+              {'call': 'flock', 'reason': set([('path', 'dentry')])},
+              {'call': 'openat', 'reason': set([('path', 'dentry')])},
+              {'call': 'lookup_dcookie', 'reason': set([('path', 'dentry')])},
+              {'call': 'uselib', 'reason': set([('path', 'dentry')])},
+              {'call': 'accept4', 'reason': set([('path', 'dentry')])},
+              {'call': 'socketpair', 'reason': set([('path', 'dentry')])},
+              {'call': 'getcwd', 'reason': set([('path', 'dentry')])},
+              {'call': 'shmat', 'reason': set([('path', 'dentry')])},
+              {'call': 'socket', 'reason': set([('path', 'dentry')])},
+              {'call': 'pipe2', 'reason': set([('path', 'dentry')])},
+              {'call': 'perf_event_open',
+               'reason': set([('path', 'dentry')])},
+              {'call': 'shmdt', 'reason': set([('path', 'dentry')])},
+              {'call': 'quotactl', 'reason': set([('path', 'dentry')])},
+              {'call': 'acct', 'reason': set([('path', 'dentry')])},
+              {'call': 'open', 'reason': set([('path', 'dentry')])},
+              {'call': 'dup', 'reason': set([('path', 'dentry')])},
+              {'call': 'setns', 'reason': set([('path', 'dentry')])},
+              {'call': 'shmctl', 'reason': set([('path', 'dentry')])},
+              {'call': 'swapon', 'reason': set([('path', 'dentry')])},
+              {'call': 'mmap_pgoff', 'reason': set([('path', 'dentry')])},
+              {'call': 'mq_open', 'reason': set([('path', 'dentry')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('path', 'dentry')])}],
+ 'fcntl': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+           {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+           {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+           {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+           {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+           {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+           {'call': 'writev', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+           {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+           {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+           {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+           {'call': 'remap_file_pages', 'reason': set([('file', 'f_mode')])},
+           {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+           {'call': 'read', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+           {'call': 'utime', 'reason': set([('fd', 'flags')])},
+           {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+           {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+           {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+           {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+           {'call': 'tee', 'reason': set([('fd', 'flags')])},
+           {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+           {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+           {'call': 'connect', 'reason': set([('fd', 'flags')])},
+           {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_ctl',
+            'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+           {'call': 'flock',
+            'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+           {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+           {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+           {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+           {'call': 'accept4',
+            'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+           {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+           {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+           {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+           {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+           {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+           {'call': 'splice', 'reason': set([('fd', 'flags')])},
+           {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+           {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+           {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+           {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+           {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+           {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+           {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+           {'call': 'perf_event_open',
+            'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+           {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+           {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+           {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+           {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+           {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+           {'call': 'open', 'reason': set([('file', 'f_mode')])},
+           {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+           {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+           {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+           {'call': 'listen', 'reason': set([('fd', 'flags')])},
+           {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+           {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+           {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+           {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+           {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+           {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+           {'call': 'readv', 'reason': set([('fd', 'flags')])},
+           {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+           {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+           {'call': 'write', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+           {'call': 'open_by_handle_at', 'reason': set([('file', 'f_mode')])},
+           {'call': 'bind', 'reason': set([('fd', 'flags')])},
+           {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'fcntl64': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+             {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+             {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+             {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+             {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+             {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+             {'call': 'writev', 'reason': set([('fd', 'flags')])},
+             {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+             {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+             {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+             {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+             {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('file', 'f_mode')])},
+             {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+             {'call': 'read', 'reason': set([('fd', 'flags')])},
+             {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+             {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+             {'call': 'utime', 'reason': set([('fd', 'flags')])},
+             {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+             {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+             {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+             {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+             {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+             {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+             {'call': 'tee', 'reason': set([('fd', 'flags')])},
+             {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+             {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+             {'call': 'connect', 'reason': set([('fd', 'flags')])},
+             {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+             {'call': 'epoll_ctl',
+              'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+             {'call': 'flock',
+              'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+             {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+             {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+             {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+             {'call': 'accept4',
+              'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+             {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+             {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+             {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+             {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+             {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+             {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+             {'call': 'splice', 'reason': set([('fd', 'flags')])},
+             {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+             {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+             {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+             {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+             {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fcntl',
+              'reason': set([('fd', 'flags'),
+                             ('flock', 'l_len'),
+                             ('flock', 'l_start')])},
+             {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+             {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+             {'call': 'perf_event_open',
+              'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+             {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+             {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+             {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+             {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+             {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+             {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+             {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+             {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+             {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+             {'call': 'listen', 'reason': set([('fd', 'flags')])},
+             {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+             {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+             {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+             {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+             {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+             {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+             {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+             {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+             {'call': 'readv', 'reason': set([('fd', 'flags')])},
+             {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+             {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+             {'call': 'write', 'reason': set([('fd', 'flags')])},
+             {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+             {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+             {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open_by_handle_at',
+              'reason': set([('file', 'f_mode')])},
+             {'call': 'bind', 'reason': set([('fd', 'flags')])},
+             {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+             {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'fgetxattr': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+               {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+               {'call': 'writev', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+               {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+               {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+               {'call': 'read', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+               {'call': 'utime', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+               {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+               {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+               {'call': 'tee', 'reason': set([('fd', 'flags')])},
+               {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'connect', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+               {'call': 'flock', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+               {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+               {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('fd', 'flags')])},
+               {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+               {'call': 'splice', 'reason': set([('fd', 'flags')])},
+               {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+               {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+               {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+               {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+               {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+               {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+               {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+               {'call': 'listen', 'reason': set([('fd', 'flags')])},
+               {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+               {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+               {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'readv', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+               {'call': 'write', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+               {'call': 'bind', 'reason': set([('fd', 'flags')])},
+               {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'finit_module': [{'call': 'delete_module',
+                   'reason': set([('module', 'args'),
+                                  ('module', 'kp'),
+                                  ('module', 'num_kp'),
+                                  ('module_layout', 'base'),
+                                  ('module_layout', 'size')])},
+                  {'call': 'init_module',
+                   'reason': set([('load_info', 'debug'),
+                                  ('load_info', 'num_debug'),
+                                  ('module', 'args'),
+                                  ('module', 'kp'),
+                                  ('module', 'num_kp'),
+                                  ('module_layout', 'base'),
+                                  ('module_layout', 'size')])}],
+ 'flistxattr': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+                {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+                {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+                {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+                {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+                {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+                {'call': 'read', 'reason': set([('fd', 'flags')])},
+                {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+                {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+                {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+                {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                {'call': 'tee', 'reason': set([('fd', 'flags')])},
+                {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+                {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+                {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+                {'call': 'flock', 'reason': set([('fd', 'flags')])},
+                {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+                {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+                {'call': 'inotify_rm_watch',
+                 'reason': set([('fd', 'flags')])},
+                {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+                {'call': 'inotify_add_watch',
+                 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                {'call': 'splice', 'reason': set([('fd', 'flags')])},
+                {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+                {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+                {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+                {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+                {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+                {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+                {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+                {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+                {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+                {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+                {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+                {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+                {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+                {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+                {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+                {'call': 'write', 'reason': set([('fd', 'flags')])},
+                {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+                {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+                {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'flock': [{'call': 'syncfs',
+            'reason': set([('fd', 'flags'), ('super_block', 's_flags')])},
+           {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+           {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+           {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+           {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+           {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+           {'call': 'writev', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+           {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+           {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+           {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+           {'call': 'remap_file_pages', 'reason': set([('file', 'f_mode')])},
+           {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+           {'call': 'read', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+           {'call': 'utime', 'reason': set([('fd', 'flags')])},
+           {'call': 'ustat', 'reason': set([('super_block', 's_flags')])},
+           {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+           {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+           {'call': 'umount', 'reason': set([('super_block', 's_flags')])},
+           {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+           {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+           {'call': 'tee', 'reason': set([('fd', 'flags')])},
+           {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+           {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+           {'call': 'connect', 'reason': set([('fd', 'flags')])},
+           {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_ctl',
+            'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+           {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+           {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+           {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+           {'call': 'accept4',
+            'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+           {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+           {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+           {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+           {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+           {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+           {'call': 'splice', 'reason': set([('fd', 'flags')])},
+           {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+           {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+           {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+           {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+           {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+           {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+           {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+           {'call': 'perf_event_open',
+            'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+           {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+           {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+           {'call': 'quotactl', 'reason': set([('super_block', 's_flags')])},
+           {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+           {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+           {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+           {'call': 'open', 'reason': set([('file', 'f_mode')])},
+           {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+           {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+           {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+           {'call': 'listen', 'reason': set([('fd', 'flags')])},
+           {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+           {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+           {'call': 'swapon',
+            'reason': set([('file', 'f_mode'), ('super_block', 's_flags')])},
+           {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+           {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+           {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+           {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+           {'call': 'readv', 'reason': set([('fd', 'flags')])},
+           {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+           {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+           {'call': 'write', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+           {'call': 'open_by_handle_at', 'reason': set([('file', 'f_mode')])},
+           {'call': 'bind', 'reason': set([('fd', 'flags')])},
+           {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'fremovexattr': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+                  {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+                  {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+                  {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                  {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                  {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+                  {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+                  {'call': 'read', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+                  {'call': 'mq_timedreceive',
+                   'reason': set([('fd', 'flags')])},
+                  {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                  {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+                  {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+                  {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                  {'call': 'tee', 'reason': set([('fd', 'flags')])},
+                  {'call': 'sync_file_range',
+                   'reason': set([('fd', 'flags')])},
+                  {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                  {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                  {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+                  {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+                  {'call': 'flock', 'reason': set([('fd', 'flags')])},
+                  {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                  {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+                  {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+                  {'call': 'inotify_rm_watch',
+                   'reason': set([('fd', 'flags')])},
+                  {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+                  {'call': 'inotify_add_watch',
+                   'reason': set([('fd', 'flags')])},
+                  {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                  {'call': 'splice', 'reason': set([('fd', 'flags')])},
+                  {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+                  {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                  {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+                  {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                  {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+                  {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'perf_event_open',
+                   'reason': set([('fd', 'flags')])},
+                  {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+                  {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+                  {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                  {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                  {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+                  {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+                  {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                  {'call': 'copy_file_range',
+                   'reason': set([('fd', 'flags')])},
+                  {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+                  {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+                  {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                  {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+                  {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'write', 'reason': set([('fd', 'flags')])},
+                  {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+                  {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+                  {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                  {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+                  {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'fsetxattr': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+               {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+               {'call': 'writev', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+               {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+               {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+               {'call': 'read', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+               {'call': 'utime', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+               {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+               {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+               {'call': 'tee', 'reason': set([('fd', 'flags')])},
+               {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'connect', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+               {'call': 'flock', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+               {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+               {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('fd', 'flags')])},
+               {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+               {'call': 'splice', 'reason': set([('fd', 'flags')])},
+               {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+               {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+               {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+               {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+               {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+               {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+               {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+               {'call': 'listen', 'reason': set([('fd', 'flags')])},
+               {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+               {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+               {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'readv', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+               {'call': 'write', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+               {'call': 'bind', 'reason': set([('fd', 'flags')])},
+               {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'fstat': [{'call': 'lstat',
+            'reason': set([('__old_kernel_stat', 'st_ino'),
+                           ('__old_kernel_stat', 'st_nlink')])},
+           {'call': 'stat',
+            'reason': set([('__old_kernel_stat', 'st_ino'),
+                           ('__old_kernel_stat', 'st_nlink')])},
+           {'call': 'newfstat',
+            'reason': set([('kstat', 'dev'),
+                           ('kstat', 'ino'),
+                           ('kstat', 'nlink'),
+                           ('kstat', 'rdev')])}],
+ 'fstatfs': [{'call': 'ustat',
+              'reason': set([('kstatfs', 'f_ffree'),
+                             ('kstatfs', 'f_files')])},
+             {'call': 'statfs',
+              'reason': set([('kstatfs', 'f_ffree'),
+                             ('kstatfs', 'f_files')])},
+             {'call': 'fstatfs64',
+              'reason': set([('kstatfs', 'f_ffree'),
+                             ('kstatfs', 'f_files')])},
+             {'call': 'statfs64',
+              'reason': set([('kstatfs', 'f_ffree'),
+                             ('kstatfs', 'f_files')])}],
+ 'fstatfs64': [{'call': 'ustat',
+                'reason': set([('kstatfs', 'f_ffree'),
+                               ('kstatfs', 'f_files')])},
+               {'call': 'fstatfs',
+                'reason': set([('kstatfs', 'f_ffree'),
+                               ('kstatfs', 'f_files')])},
+               {'call': 'statfs',
+                'reason': set([('kstatfs', 'f_ffree'),
+                               ('kstatfs', 'f_files')])},
+               {'call': 'statfs64',
+                'reason': set([('kstatfs', 'f_ffree'),
+                               ('kstatfs', 'f_files')])}],
+ 'ftruncate': [{'call': 'eventfd2',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'mq_unlink',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'swapoff',
+                'reason': set([('file', 'f_flags'),
+                               ('file', 'f_mode'),
+                               ('inode', 'i_flags'),
+                               ('inode', 'i_sb')])},
+               {'call': 'fchmod',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'memfd_create',
+                'reason': set([('file', 'f_flags'),
+                               ('file', 'f_mode'),
+                               ('inode', 'i_flags'),
+                               ('inode', 'i_sb')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'dup3',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'readlinkat',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'fchown',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'epoll_create1',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'epoll_ctl',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'flock',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'openat',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'uselib',
+                'reason': set([('file', 'f_flags'),
+                               ('file', 'f_mode'),
+                               ('inode', 'i_flags'),
+                               ('inode', 'i_sb')])},
+               {'call': 'accept4',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'socketpair',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'fchmodat',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'shmat',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'socket',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'pipe2',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'ioctl',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'perf_event_open',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'linkat',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'shmdt',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'acct',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'open',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'unlink',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('file', 'f_flags'),
+                               ('inode', 'i_flags'),
+                               ('inode', 'i_sb')])},
+               {'call': 'faccessat',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'dup',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'setns',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'shmctl',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'swapon',
+                'reason': set([('file', 'f_flags'),
+                               ('file', 'f_mode'),
+                               ('inode', 'i_flags'),
+                               ('inode', 'i_sb')])},
+               {'call': 'fchownat',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'mmap_pgoff',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'mq_notify',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'sendfile',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'mq_open',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'unlinkat',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'sendfile64',
+                'reason': set([('inode', 'i_flags'), ('inode', 'i_sb')])}],
+ 'futex': [{'call': 'rt_sigtimedwait',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'mq_unlink',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'swapoff',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'fchmod',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'memfd_create',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'readlinkat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'io_getevents',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'fchown',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'utime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'semtimedop',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'settimeofday',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'timerfd_gettime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'pselect6',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'uselib',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'fchmodat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'inotify_add_watch',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'timer_settime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'ftruncate',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'timer_gettime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'ioctl',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'linkat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'stime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'futimesat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'poll',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'select',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'unlink',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'nanosleep',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'mq_getsetattr',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'faccessat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'swapon',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'epoll_wait',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'fchownat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'fstat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'timerfd_settime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'mq_notify',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sendfile',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'newfstat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'clock_nanosleep',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'unlinkat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'recvmmsg',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sendfile64',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'ppoll',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])}],
+ 'futimesat': [{'call': 'rt_sigtimedwait',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'mq_unlink',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'swapoff', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fchmod', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'memfd_create',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'readlinkat',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'io_getevents',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fchown', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'waitid', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'utime', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'semtimedop',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'settimeofday',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'timerfd_gettime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'adjtimex', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'pselect6', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'uselib', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'getitimer', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'fchmodat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'timer_settime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'ftruncate',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'timer_gettime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'ioctl', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'linkat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'stime', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'poll', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'select',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'unlink', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'nanosleep',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'faccessat',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'swapon', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'wait4', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'epoll_wait',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fchownat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'getrusage', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'fstat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'timerfd_settime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'setitimer', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'mq_notify',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'sendfile', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'newfstat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'clock_nanosleep',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'unlinkat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'clock_adjtime',
+                'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'alarm', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'futex', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'recvmmsg', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'sendfile64',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'ppoll',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timeval', 'tv_usec')])}],
+ 'get_mempolicy': [{'call': 'keyctl',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'rt_sigtimedwait',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'msgrcv',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'kill',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'sched_getaffinity',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'sched_setparam',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'ioprio_set',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'remap_file_pages',
+                    'reason': set([('vm_area_struct', 'vm_ops')])},
+                   {'call': 'getppid',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'capget',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'sched_setaffinity',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'signal',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'semtimedop',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'umount',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'sched_rr_get_interval',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'rt_sigprocmask',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'setsid',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'sigaltstack',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'sched_setattr',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'migrate_pages',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'getitimer',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'setpgid',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'getsid',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'set_mempolicy',
+                    'reason': set([('mempolicy', 'mode'),
+                                   ('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'shmdt',
+                    'reason': set([('vm_area_struct', 'vm_ops')])},
+                   {'call': 'rt_sigaction',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'getpgid',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'brk',
+                    'reason': set([('vm_area_struct', 'vm_ops')])},
+                   {'call': 'getpriority',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'sigaction',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'setns',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'fork',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'get_robust_list',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'sched_getscheduler',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'ptrace',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'munlockall',
+                    'reason': set([('vm_area_struct', 'vm_ops')])},
+                   {'call': 'pkey_mprotect',
+                    'reason': set([('vm_area_struct', 'vm_ops')])},
+                   {'call': 'madvise',
+                    'reason': set([('vm_area_struct', 'vm_ops')])},
+                   {'call': 'sched_getattr',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'getrusage',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'sched_setscheduler',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'setitimer',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'ioprio_get',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'vfork',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'mprotect',
+                    'reason': set([('vm_area_struct', 'vm_ops')])},
+                   {'call': 'mremap',
+                    'reason': set([('vm_area_struct', 'vm_ops')])},
+                   {'call': 'mbind', 'reason': set([('mempolicy', 'mode')])},
+                   {'call': 'prctl',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy'),
+                                   ('vm_area_struct', 'vm_ops')])},
+                   {'call': 'move_pages',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'munlock',
+                    'reason': set([('vm_area_struct', 'vm_ops')])},
+                   {'call': 'setpriority',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'mincore',
+                    'reason': set([('vm_area_struct', 'vm_ops')])},
+                   {'call': 'clone',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'sched_getparam',
+                    'reason': set([('task_struct', 'il_prev'),
+                                   ('task_struct', 'mempolicy')])},
+                   {'call': 'mlockall',
+                    'reason': set([('vm_area_struct', 'vm_ops')])}],
+ 'getcwd': [{'call': 'eventfd2',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'mq_unlink',
+             'reason': set([('dentry', 'd_parent'),
+                            ('vfsmount', 'mnt_root')])},
+            {'call': 'swapoff',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'pivot_root',
+             'reason': set([('dentry', 'd_parent'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('vfsmount', 'mnt_root')])},
+            {'call': 'memfd_create',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'remap_file_pages',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'dup3',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'unshare',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'umount', 'reason': set([('vfsmount', 'mnt_root')])},
+            {'call': 'mkdirat', 'reason': set([('dentry', 'd_parent')])},
+            {'call': 'epoll_create1',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'epoll_ctl',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'flock',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'openat',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'lookup_dcookie',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'uselib',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'renameat2', 'reason': set([('dentry', 'd_parent')])},
+            {'call': 'accept4',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'socketpair',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'ftruncate', 'reason': set([('dentry', 'd_parent')])},
+            {'call': 'shmat',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'mknodat', 'reason': set([('dentry', 'd_parent')])},
+            {'call': 'socket',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'symlinkat', 'reason': set([('dentry', 'd_parent')])},
+            {'call': 'pipe2',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'perf_event_open',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'linkat', 'reason': set([('dentry', 'd_parent')])},
+            {'call': 'shmdt',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'quotactl',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'acct',
+             'reason': set([('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('vfsmount', 'mnt_root')])},
+            {'call': 'open',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'unlink', 'reason': set([('dentry', 'd_parent')])},
+            {'call': 'rmdir', 'reason': set([('dentry', 'd_parent')])},
+            {'call': 'dup',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'setns',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'shmctl',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'swapon',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'mmap_pgoff',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'mq_open',
+             'reason': set([('dentry', 'd_parent'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('vfsmount', 'mnt_root')])},
+            {'call': 'unlinkat', 'reason': set([('dentry', 'd_parent')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'getdents': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+              {'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+              {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+              {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'writev', 'reason': set([('fd', 'flags')])},
+              {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+              {'call': 'sched_setparam',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+              {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+              {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+              {'call': 'ioprio_set',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'read', 'reason': set([('fd', 'flags')])},
+              {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+              {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('fd', 'flags'), ('mm_segment_t', 'seg')])},
+              {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'utime', 'reason': set([('fd', 'flags')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+              {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+              {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'semtimedop',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+              {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'tee', 'reason': set([('fd', 'flags')])},
+              {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+              {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+              {'call': 'connect', 'reason': set([('fd', 'flags')])},
+              {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+              {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+              {'call': 'flock', 'reason': set([('fd', 'flags')])},
+              {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+              {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+              {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sigaltstack',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sched_setattr',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+              {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+              {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+              {'call': 'migrate_pages',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'getitimer', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+              {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+              {'call': 'splice', 'reason': set([('fd', 'flags')])},
+              {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+              {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+              {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+              {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+              {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+              {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+              {'call': 'prlimit64', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+              {'call': 'perf_event_open',
+               'reason': set([('fd', 'flags'), ('mm_segment_t', 'seg')])},
+              {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+              {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+              {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+              {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+              {'call': 'getpriority',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+              {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+              {'call': 'listen', 'reason': set([('fd', 'flags')])},
+              {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'get_robust_list',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('fd', 'flags'), ('mm_segment_t', 'seg')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+              {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+              {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+              {'call': 'sched_getattr',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'getrusage', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'setitimer', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'ioprio_get',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+              {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+              {'call': 'readv', 'reason': set([('fd', 'flags')])},
+              {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'move_pages',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+              {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+              {'call': 'write', 'reason': set([('fd', 'flags')])},
+              {'call': 'setpriority',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+              {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+              {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sched_getparam',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'bind', 'reason': set([('fd', 'flags')])},
+              {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'getdents64': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+                {'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'rt_sigtimedwait',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+                {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+                {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+                {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                {'call': 'sched_getaffinity',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                {'call': 'sched_setparam',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+                {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+                {'call': 'ioprio_set',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'read', 'reason': set([('fd', 'flags')])},
+                {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+                {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'mq_timedreceive',
+                 'reason': set([('fd', 'flags'), ('mm_segment_t', 'seg')])},
+                {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                {'call': 'sched_setaffinity',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+                {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'semtimedop',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                {'call': 'sched_rr_get_interval',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'tee', 'reason': set([('fd', 'flags')])},
+                {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+                {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+                {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+                {'call': 'flock', 'reason': set([('fd', 'flags')])},
+                {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                {'call': 'rt_sigprocmask',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+                {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sigaltstack',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sched_setattr',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+                {'call': 'inotify_rm_watch',
+                 'reason': set([('fd', 'flags')])},
+                {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+                {'call': 'migrate_pages',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'getitimer',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'inotify_add_watch',
+                 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                {'call': 'splice', 'reason': set([('fd', 'flags')])},
+                {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+                {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+                {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+                {'call': 'prlimit64',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('fd', 'flags'), ('mm_segment_t', 'seg')])},
+                {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+                {'call': 'rt_sigaction',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+                {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+                {'call': 'getpriority',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sigaction',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+                {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'get_robust_list',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+                {'call': 'mq_timedsend',
+                 'reason': set([('fd', 'flags'), ('mm_segment_t', 'seg')])},
+                {'call': 'sched_getscheduler',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+                {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+                {'call': 'sched_getattr',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'getrusage',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sched_setscheduler',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'setitimer',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'ioprio_get',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+                {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'move_pages',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+                {'call': 'write', 'reason': set([('fd', 'flags')])},
+                {'call': 'setpriority',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+                {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+                {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sched_getparam',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'getegid': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'rt_sigtimedwait',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_getaffinity',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_setparam',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'ioprio_set', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_setaffinity',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'semtimedop', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_rr_get_interval',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'rt_sigprocmask',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sigaltstack',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_setattr',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'migrate_pages',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'prlimit64', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'perf_event_open',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'rt_sigaction',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'getpriority',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'get_robust_list',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'mq_timedsend',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_getscheduler',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_getattr',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_setscheduler',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'ioprio_get', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'move_pages', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'setpriority',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_getparam',
+              'reason': set([('task_struct', 'cred')])}],
+ 'getegid16': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setparam',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_set',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'semtimedop',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaltstack',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'migrate_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prlimit64',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'perf_event_open',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpriority',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'get_robust_list',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getrusage',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_get',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'move_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpriority',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getparam',
+                'reason': set([('task_struct', 'cred')])}],
+ 'geteuid': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'rt_sigtimedwait',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_getaffinity',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_setparam',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'ioprio_set', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_setaffinity',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'semtimedop', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_rr_get_interval',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'rt_sigprocmask',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sigaltstack',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_setattr',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'migrate_pages',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'prlimit64', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'perf_event_open',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'rt_sigaction',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'getpriority',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'get_robust_list',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'mq_timedsend',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_getscheduler',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_getattr',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_setscheduler',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'ioprio_get', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'move_pages', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'setpriority',
+              'reason': set([('task_struct', 'cred')])},
+             {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+             {'call': 'sched_getparam',
+              'reason': set([('task_struct', 'cred')])}],
+ 'geteuid16': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setparam',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_set',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'semtimedop',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaltstack',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'migrate_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prlimit64',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'perf_event_open',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpriority',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'get_robust_list',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getrusage',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_get',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'move_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpriority',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getparam',
+                'reason': set([('task_struct', 'cred')])}],
+ 'getgid': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_set', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'semtimedop', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sigaltstack', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'migrate_pages',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prlimit64', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpriority', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_get', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'move_pages', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setpriority', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'cred')])}],
+ 'getgid16': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'ioprio_set',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'migrate_pages',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'prlimit64', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpriority',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'ioprio_get',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'move_pages',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setpriority',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'cred')])}],
+ 'getgroups': [{'call': 'keyctl',
+                'reason': set([('cred', 'group_info'),
+                               ('task_struct', 'cred')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setfsuid', 'reason': set([('cred', 'group_info')])},
+               {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getresuid16',
+                'reason': set([('cred', 'group_info')])},
+               {'call': 'getresgid', 'reason': set([('cred', 'group_info')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setparam',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setgid', 'reason': set([('cred', 'group_info')])},
+               {'call': 'ioprio_set',
+                'reason': set([('cred', 'group_info'),
+                               ('task_struct', 'cred')])},
+               {'call': 'capset', 'reason': set([('cred', 'group_info')])},
+               {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getresgid16',
+                'reason': set([('cred', 'group_info')])},
+               {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('cred', 'group_info'),
+                               ('task_struct', 'cred')])},
+               {'call': 'setfsgid', 'reason': set([('cred', 'group_info')])},
+               {'call': 'unshare', 'reason': set([('cred', 'group_info')])},
+               {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setreuid', 'reason': set([('cred', 'group_info')])},
+               {'call': 'semtimedop',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'epoll_create1',
+                'reason': set([('cred', 'group_info')])},
+               {'call': 'getresuid', 'reason': set([('cred', 'group_info')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaltstack',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'migrate_pages',
+                'reason': set([('cred', 'group_info'),
+                               ('task_struct', 'cred')])},
+               {'call': 'getitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setresgid', 'reason': set([('cred', 'group_info')])},
+               {'call': 'setregid', 'reason': set([('cred', 'group_info')])},
+               {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prlimit64',
+                'reason': set([('cred', 'group_info'),
+                               ('task_struct', 'cred')])},
+               {'call': 'perf_event_open',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getgroups16',
+                'reason': set([('cred', 'group_info')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpriority',
+                'reason': set([('cred', 'group_info'),
+                               ('task_struct', 'cred')])},
+               {'call': 'sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'faccessat', 'reason': set([('cred', 'group_info')])},
+               {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'get_robust_list',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getrusage',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setresuid', 'reason': set([('cred', 'group_info')])},
+               {'call': 'setitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_get',
+                'reason': set([('cred', 'group_info'),
+                               ('task_struct', 'cred')])},
+               {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setuid', 'reason': set([('cred', 'group_info')])},
+               {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'move_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpriority',
+                'reason': set([('cred', 'group_info'),
+                               ('task_struct', 'cred')])},
+               {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getparam',
+                'reason': set([('task_struct', 'cred')])}],
+ 'getgroups16': [{'call': 'keyctl',
+                  'reason': set([('cred', 'group_info'),
+                                 ('task_struct', 'cred')])},
+                 {'call': 'rt_sigtimedwait',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setfsuid',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getresuid16',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'getresgid',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'sched_getaffinity',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setparam',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setgid', 'reason': set([('cred', 'group_info')])},
+                 {'call': 'ioprio_set',
+                  'reason': set([('cred', 'group_info'),
+                                 ('task_struct', 'cred')])},
+                 {'call': 'capset', 'reason': set([('cred', 'group_info')])},
+                 {'call': 'getppid',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'mq_timedreceive',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getresgid16',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setaffinity',
+                  'reason': set([('cred', 'group_info'),
+                                 ('task_struct', 'cred')])},
+                 {'call': 'setfsgid',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'unshare', 'reason': set([('cred', 'group_info')])},
+                 {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setreuid',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'semtimedop',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_rr_get_interval',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'epoll_create1',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'getresuid',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'rt_sigprocmask',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sigaltstack',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setattr',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'migrate_pages',
+                  'reason': set([('cred', 'group_info'),
+                                 ('task_struct', 'cred')])},
+                 {'call': 'getitimer',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setpgid',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setresgid',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'setregid',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'prlimit64',
+                  'reason': set([('cred', 'group_info'),
+                                 ('task_struct', 'cred')])},
+                 {'call': 'perf_event_open',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'rt_sigaction',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getpgid',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getpriority',
+                  'reason': set([('cred', 'group_info'),
+                                 ('task_struct', 'cred')])},
+                 {'call': 'sigaction',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'faccessat',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'setgroups16',
+                  'reason': set([('group_info', 'ngroups')])},
+                 {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'get_robust_list',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'mq_timedsend',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_getscheduler',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_getattr',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getrusage',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setscheduler',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setresuid',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'setitimer',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'ioprio_get',
+                  'reason': set([('cred', 'group_info'),
+                                 ('task_struct', 'cred')])},
+                 {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setuid', 'reason': set([('cred', 'group_info')])},
+                 {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'move_pages',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getgroups',
+                  'reason': set([('cred', 'group_info')])},
+                 {'call': 'setpriority',
+                  'reason': set([('cred', 'group_info'),
+                                 ('task_struct', 'cred')])},
+                 {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setgroups',
+                  'reason': set([('group_info', 'ngroups')])},
+                 {'call': 'sched_getparam',
+                  'reason': set([('task_struct', 'cred')])}],
+ 'getitimer': [{'call': 'timer_create',
+                'reason': set([('signal_struct', 'it_real_incr')])},
+               {'call': 'exit_group',
+                'reason': set([('signal_struct', 'it_real_incr')])},
+               {'call': 'setitimer',
+                'reason': set([('signal_struct', 'it_real_incr')])}],
+ 'getppid': [{'call': 'keyctl',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'rt_sigtimedwait',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'msgrcv',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'kill',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sched_getaffinity',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sched_setparam',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'ioprio_set',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'capget',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sched_setaffinity',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'signal',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'semtimedop',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'umount',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sched_rr_get_interval',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'rt_sigprocmask',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'setsid',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sigaltstack',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sched_setattr',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'migrate_pages',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'getitimer',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'setpgid',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'getsid',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'prlimit64',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'perf_event_open',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'rt_sigaction',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'getpgid',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'getpriority',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sigaction',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'setns',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'fork',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'get_robust_list',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'mq_timedsend',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sched_getscheduler',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'ptrace',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sched_getattr',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'getrusage',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sched_setscheduler',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'setitimer',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'ioprio_get',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'vfork',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'prctl',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'move_pages',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'setpriority',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'clone',
+              'reason': set([('task_struct', 'real_parent')])},
+             {'call': 'sched_getparam',
+              'reason': set([('task_struct', 'real_parent')])}],
+ 'getpriority': [{'call': 'keyctl',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'rt_sigtimedwait',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'msgrcv',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'kill',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_getaffinity',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_setparam',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'ioprio_set',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getppid',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'mq_timedreceive',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'capget',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_setaffinity',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'signal',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setreuid', 'reason': set([('cred', 'uid')])},
+                 {'call': 'semtimedop',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'umount',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_rr_get_interval',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'rt_sigprocmask',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setsid',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sigaltstack',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_setattr',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'migrate_pages',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getitimer',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setpgid',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getsid',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'prlimit64',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'perf_event_open',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'rt_sigaction',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getpgid',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sigaction',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setns',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'fork',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'get_robust_list',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'mq_timedsend',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_getscheduler',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'ptrace',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_getattr',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getrusage',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_setscheduler',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setresuid', 'reason': set([('cred', 'uid')])},
+                 {'call': 'setitimer',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'ioprio_get',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'vfork',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setuid', 'reason': set([('cred', 'uid')])},
+                 {'call': 'prctl',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'move_pages',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setpriority',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'clone',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_getparam',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])}],
+ 'getresgid': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setparam',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_set',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'semtimedop',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaltstack',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'migrate_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prlimit64',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'perf_event_open',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpriority',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'get_robust_list',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getrusage',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_get',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'move_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpriority',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getparam',
+                'reason': set([('task_struct', 'cred')])}],
+ 'getresgid16': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'rt_sigtimedwait',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_getaffinity',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setparam',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'ioprio_set',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getppid',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'mq_timedreceive',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setaffinity',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'semtimedop',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_rr_get_interval',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'rt_sigprocmask',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sigaltstack',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setattr',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'migrate_pages',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getitimer',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setpgid',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'prlimit64',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'perf_event_open',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'rt_sigaction',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getpgid',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getpriority',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sigaction',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'get_robust_list',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'mq_timedsend',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_getscheduler',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_getattr',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getrusage',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setscheduler',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setitimer',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'ioprio_get',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'move_pages',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setpriority',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_getparam',
+                  'reason': set([('task_struct', 'cred')])}],
+ 'getresuid': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setparam',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_set',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'semtimedop',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaltstack',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'migrate_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prlimit64',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'perf_event_open',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpriority',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'get_robust_list',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getrusage',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_get',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'move_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpriority',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getparam',
+                'reason': set([('task_struct', 'cred')])}],
+ 'getresuid16': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'rt_sigtimedwait',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_getaffinity',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setparam',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'ioprio_set',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getppid',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'mq_timedreceive',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setaffinity',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'semtimedop',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_rr_get_interval',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'rt_sigprocmask',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sigaltstack',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setattr',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'migrate_pages',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getitimer',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setpgid',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'prlimit64',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'perf_event_open',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'rt_sigaction',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getpgid',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getpriority',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sigaction',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'get_robust_list',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'mq_timedsend',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_getscheduler',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_getattr',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'getrusage',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_setscheduler',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setitimer',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'ioprio_get',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'move_pages',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'setpriority',
+                  'reason': set([('task_struct', 'cred')])},
+                 {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+                 {'call': 'sched_getparam',
+                  'reason': set([('task_struct', 'cred')])}],
+ 'getrlimit': [{'call': 'setrlimit',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max')])},
+               {'call': 'old_getrlimit',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max')])},
+               {'call': 'prlimit64',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max')])}],
+ 'getrusage': [{'call': 'timer_create',
+                'reason': set([('signal_struct', 'maxrss')])},
+               {'call': 'exit_group',
+                'reason': set([('signal_struct', 'maxrss')])}],
+ 'getsockopt': [{'call': 'accept4',
+                 'reason': set([('proto_ops', 'compat_getsockopt')])}],
+ 'getuid': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_set', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'semtimedop', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sigaltstack', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'migrate_pages',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prlimit64', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpriority', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_get', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'move_pages', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setpriority', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'cred')])}],
+ 'getuid16': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'ioprio_set',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'migrate_pages',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'prlimit64', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpriority',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'ioprio_get',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'move_pages',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setpriority',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'cred')])}],
+ 'getxattr': [{'call': 'eventfd2', 'reason': set([('path', 'dentry')])},
+              {'call': 'swapoff', 'reason': set([('path', 'dentry')])},
+              {'call': 'pivot_root', 'reason': set([('path', 'dentry')])},
+              {'call': 'memfd_create', 'reason': set([('path', 'dentry')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('path', 'dentry')])},
+              {'call': 'dup3', 'reason': set([('path', 'dentry')])},
+              {'call': 'unshare', 'reason': set([('path', 'dentry')])},
+              {'call': 'epoll_create1', 'reason': set([('path', 'dentry')])},
+              {'call': 'epoll_ctl', 'reason': set([('path', 'dentry')])},
+              {'call': 'flock', 'reason': set([('path', 'dentry')])},
+              {'call': 'openat', 'reason': set([('path', 'dentry')])},
+              {'call': 'lookup_dcookie', 'reason': set([('path', 'dentry')])},
+              {'call': 'uselib', 'reason': set([('path', 'dentry')])},
+              {'call': 'accept4', 'reason': set([('path', 'dentry')])},
+              {'call': 'socketpair', 'reason': set([('path', 'dentry')])},
+              {'call': 'getcwd', 'reason': set([('path', 'dentry')])},
+              {'call': 'shmat', 'reason': set([('path', 'dentry')])},
+              {'call': 'socket', 'reason': set([('path', 'dentry')])},
+              {'call': 'pipe2', 'reason': set([('path', 'dentry')])},
+              {'call': 'perf_event_open',
+               'reason': set([('path', 'dentry')])},
+              {'call': 'shmdt', 'reason': set([('path', 'dentry')])},
+              {'call': 'quotactl', 'reason': set([('path', 'dentry')])},
+              {'call': 'acct', 'reason': set([('path', 'dentry')])},
+              {'call': 'open', 'reason': set([('path', 'dentry')])},
+              {'call': 'dup', 'reason': set([('path', 'dentry')])},
+              {'call': 'setns', 'reason': set([('path', 'dentry')])},
+              {'call': 'shmctl', 'reason': set([('path', 'dentry')])},
+              {'call': 'swapon', 'reason': set([('path', 'dentry')])},
+              {'call': 'mmap_pgoff', 'reason': set([('path', 'dentry')])},
+              {'call': 'mq_open', 'reason': set([('path', 'dentry')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('path', 'dentry')])}],
+ 'init_module': [{'call': 'delete_module',
+                  'reason': set([('module', 'args'),
+                                 ('module', 'kp'),
+                                 ('module', 'num_kp'),
+                                 ('module_layout', 'base'),
+                                 ('module_layout', 'size')])},
+                 {'call': 'finit_module',
+                  'reason': set([('load_info', 'debug'),
+                                 ('load_info', 'hdr'),
+                                 ('load_info', 'len'),
+                                 ('load_info', 'num_debug'),
+                                 ('module', 'args'),
+                                 ('module', 'kp'),
+                                 ('module', 'num_kp'),
+                                 ('module_layout', 'base'),
+                                 ('module_layout', 'size')])}],
+ 'inotify_add_watch': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+                       {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+                       {'call': 'eventfd2',
+                        'reason': set([('file', 'f_op')])},
+                       {'call': 'mq_unlink',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'pwritev64',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'swapoff', 'reason': set([('file', 'f_op')])},
+                       {'call': 'fremovexattr',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'readahead',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                       {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                       {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                       {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+                       {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                       {'call': 'pivot_root',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'signalfd4',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'memfd_create',
+                        'reason': set([('file', 'f_op')])},
+                       {'call': 'remap_file_pages',
+                        'reason': set([('file', 'f_op')])},
+                       {'call': 'dup3', 'reason': set([('file', 'f_op')])},
+                       {'call': 'read', 'reason': set([('fd', 'flags')])},
+                       {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+                       {'call': 'mq_timedreceive',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                       {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                       {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+                       {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                       {'call': 'fsetxattr',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                       {'call': 'mkdirat',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'epoll_create1',
+                        'reason': set([('file', 'f_op')])},
+                       {'call': 'tee', 'reason': set([('fd', 'flags')])},
+                       {'call': 'sync_file_range',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                       {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                       {'call': 'getsockname',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'epoll_ctl',
+                        'reason': set([('fd', 'flags'), ('file', 'f_op')])},
+                       {'call': 'flock',
+                        'reason': set([('fd', 'flags'), ('file', 'f_op')])},
+                       {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                       {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                       {'call': 'openat', 'reason': set([('file', 'f_op')])},
+                       {'call': 'uselib', 'reason': set([('file', 'f_op')])},
+                       {'call': 'renameat2',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'accept4',
+                        'reason': set([('fd', 'flags'), ('file', 'f_op')])},
+                       {'call': 'old_readdir',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'inotify_rm_watch',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'socketpair',
+                        'reason': set([('file', 'f_op')])},
+                       {'call': 'utimensat',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'getcwd',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                       {'call': 'splice', 'reason': set([('fd', 'flags')])},
+                       {'call': 'ftruncate',
+                        'reason': set([('dentry', 'd_inode'),
+                                       ('fd', 'flags')])},
+                       {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                       {'call': 'getpeername',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'shmat', 'reason': set([('file', 'f_op')])},
+                       {'call': 'setsockopt',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'mknodat',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'socket', 'reason': set([('file', 'f_op')])},
+                       {'call': 'symlinkat',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'pipe2', 'reason': set([('file', 'f_op')])},
+                       {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                       {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+                       {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                       {'call': 'perf_event_open',
+                        'reason': set([('fd', 'flags'), ('file', 'f_op')])},
+                       {'call': 'linkat',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'shmdt', 'reason': set([('file', 'f_op')])},
+                       {'call': 'pwritev64v2',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'futimesat',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                       {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                       {'call': 'acct', 'reason': set([('file', 'f_op')])},
+                       {'call': 'open', 'reason': set([('file', 'f_op')])},
+                       {'call': 'unlink',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'getsockopt',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'mq_getsetattr',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'rmdir',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'dup', 'reason': set([('file', 'f_op')])},
+                       {'call': 'fdatasync',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'setns', 'reason': set([('file', 'f_op')])},
+                       {'call': 'getdents64',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                       {'call': 'copy_file_range',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'mq_timedsend',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'fgetxattr',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'shmctl', 'reason': set([('file', 'f_op')])},
+                       {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                       {'call': 'swapon', 'reason': set([('file', 'f_op')])},
+                       {'call': 'fallocate',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'epoll_wait',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                       {'call': 'mmap_pgoff',
+                        'reason': set([('file', 'f_op')])},
+                       {'call': 'preadv64v2',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                       {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                       {'call': 'fstatfs64',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'write', 'reason': set([('fd', 'flags')])},
+                       {'call': 'mq_notify',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+                       {'call': 'mq_open',
+                        'reason': set([('dentry', 'd_inode'),
+                                       ('file', 'f_op')])},
+                       {'call': 'unlinkat',
+                        'reason': set([('dentry', 'd_inode')])},
+                       {'call': 'open_by_handle_at',
+                        'reason': set([('file', 'f_op')])},
+                       {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                       {'call': 'flistxattr',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'sendfile64',
+                        'reason': set([('fd', 'flags')])}],
+ 'inotify_init1': [{'call': 'keyctl',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'rt_sigtimedwait',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'msgrcv',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_getaffinity',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_setparam',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'ioprio_set',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getppid',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'capget',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_setaffinity',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'signal',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'semtimedop',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'umount',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_rr_get_interval',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'rt_sigprocmask',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setsid',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sigaltstack',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_setattr',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'inotify_rm_watch',
+                    'reason': set([('fsnotify_group', 'overflow_event'),
+                                   ('inotify_group_private_data',
+                                    'ucounts')])},
+                   {'call': 'migrate_pages',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getitimer',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setpgid',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'inotify_add_watch',
+                    'reason': set([('fsnotify_group', 'overflow_event'),
+                                   ('inotify_group_private_data',
+                                    'ucounts')])},
+                   {'call': 'getsid',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'rt_sigaction',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getpgid',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getpriority',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sigaction',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setns',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+                   {'call': 'get_robust_list',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_getscheduler',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'ptrace',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_getattr',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'getrusage',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_setscheduler',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setitimer',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'ioprio_get',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'vfork',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'prctl',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'move_pages',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'setpriority',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'clone',
+                    'reason': set([('task_struct', 'cred')])},
+                   {'call': 'sched_getparam',
+                    'reason': set([('task_struct', 'cred')])}],
+ 'inotify_rm_watch': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+                      {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+                      {'call': 'eventfd2', 'reason': set([('file', 'f_op')])},
+                      {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+                      {'call': 'swapoff', 'reason': set([('file', 'f_op')])},
+                      {'call': 'fremovexattr',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+                      {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                      {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                      {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                      {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+                      {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                      {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+                      {'call': 'memfd_create',
+                       'reason': set([('file', 'f_op')])},
+                      {'call': 'remap_file_pages',
+                       'reason': set([('file', 'f_op')])},
+                      {'call': 'dup3', 'reason': set([('file', 'f_op')])},
+                      {'call': 'read', 'reason': set([('fd', 'flags')])},
+                      {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+                      {'call': 'mq_timedreceive',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                      {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                      {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+                      {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                      {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+                      {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                      {'call': 'epoll_create1',
+                       'reason': set([('file', 'f_op')])},
+                      {'call': 'tee', 'reason': set([('fd', 'flags')])},
+                      {'call': 'sync_file_range',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                      {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                      {'call': 'getsockname',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'epoll_ctl',
+                       'reason': set([('fd', 'flags'), ('file', 'f_op')])},
+                      {'call': 'flock',
+                       'reason': set([('fd', 'flags'), ('file', 'f_op')])},
+                      {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                      {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                      {'call': 'openat', 'reason': set([('file', 'f_op')])},
+                      {'call': 'uselib', 'reason': set([('file', 'f_op')])},
+                      {'call': 'accept4',
+                       'reason': set([('fd', 'flags'), ('file', 'f_op')])},
+                      {'call': 'old_readdir',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'socketpair',
+                       'reason': set([('file', 'f_op')])},
+                      {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+                      {'call': 'inotify_add_watch',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                      {'call': 'splice', 'reason': set([('fd', 'flags')])},
+                      {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+                      {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                      {'call': 'getpeername',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'shmat', 'reason': set([('file', 'f_op')])},
+                      {'call': 'setsockopt',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'socket', 'reason': set([('file', 'f_op')])},
+                      {'call': 'pipe2', 'reason': set([('file', 'f_op')])},
+                      {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                      {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+                      {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                      {'call': 'perf_event_open',
+                       'reason': set([('fd', 'flags'), ('file', 'f_op')])},
+                      {'call': 'shmdt', 'reason': set([('file', 'f_op')])},
+                      {'call': 'pwritev64v2',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+                      {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                      {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                      {'call': 'acct', 'reason': set([('file', 'f_op')])},
+                      {'call': 'open', 'reason': set([('file', 'f_op')])},
+                      {'call': 'getsockopt',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'mq_getsetattr',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'dup', 'reason': set([('file', 'f_op')])},
+                      {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+                      {'call': 'setns', 'reason': set([('file', 'f_op')])},
+                      {'call': 'getdents64',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                      {'call': 'copy_file_range',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'mq_timedsend',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+                      {'call': 'shmctl', 'reason': set([('file', 'f_op')])},
+                      {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                      {'call': 'swapon', 'reason': set([('file', 'f_op')])},
+                      {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+                      {'call': 'epoll_wait',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                      {'call': 'mmap_pgoff',
+                       'reason': set([('file', 'f_op')])},
+                      {'call': 'preadv64v2',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                      {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                      {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+                      {'call': 'write', 'reason': set([('fd', 'flags')])},
+                      {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+                      {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+                      {'call': 'mq_open', 'reason': set([('file', 'f_op')])},
+                      {'call': 'open_by_handle_at',
+                       'reason': set([('file', 'f_op')])},
+                      {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                      {'call': 'flistxattr',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'sendfile64',
+                       'reason': set([('fd', 'flags')])}],
+ 'io_cancel': [{'call': 'swapoff',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'io_getevents',
+                'reason': set([('kioctx', 'user_id'),
+                               ('kioctx_table', 'nr'),
+                               ('mm_struct', 'ioctx_table')])},
+               {'call': 'migrate_pages',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'shmdt',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'brk', 'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'get_mempolicy',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'io_submit', 'reason': set([('kioctx', 'user_id')])},
+               {'call': 'getrusage',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'io_setup',
+                'reason': set([('kioctx', 'user_id'),
+                               ('kioctx_table', 'nr'),
+                               ('mm_struct', 'ioctx_table')])},
+               {'call': 'mremap',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'io_destroy',
+                'reason': set([('kioctx', 'user_id'),
+                               ('kioctx_table', 'nr'),
+                               ('mm_struct', 'ioctx_table')])},
+               {'call': 'mbind',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'prctl',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'move_pages',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'modify_ldt',
+                'reason': set([('mm_struct', 'ioctx_table')])},
+               {'call': 'mincore',
+                'reason': set([('mm_struct', 'ioctx_table')])}],
+ 'io_destroy': [{'call': 'swapoff',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'io_getevents',
+                 'reason': set([('kioctx', 'max_reqs'),
+                                ('kioctx', 'mmap_base'),
+                                ('kioctx', 'mmap_size'),
+                                ('kioctx', 'user_id'),
+                                ('kioctx_table', 'nr'),
+                                ('mm_struct', 'ioctx_table')])},
+                {'call': 'migrate_pages',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'shmdt',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'brk',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'get_mempolicy',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'io_submit',
+                 'reason': set([('kioctx', 'max_reqs'),
+                                ('kioctx', 'mmap_base'),
+                                ('kioctx', 'mmap_size'),
+                                ('kioctx', 'user_id')])},
+                {'call': 'getrusage',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'io_setup',
+                 'reason': set([('kioctx', 'max_reqs'),
+                                ('kioctx', 'mmap_base'),
+                                ('kioctx', 'mmap_size'),
+                                ('kioctx', 'user_id'),
+                                ('kioctx_table', 'nr'),
+                                ('mm_struct', 'ioctx_table')])},
+                {'call': 'mremap',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'mbind',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'prctl',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'move_pages',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'modify_ldt',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'mincore',
+                 'reason': set([('mm_struct', 'ioctx_table')])},
+                {'call': 'io_cancel',
+                 'reason': set([('kioctx', 'max_reqs'),
+                                ('kioctx', 'mmap_base'),
+                                ('kioctx', 'mmap_size'),
+                                ('kioctx', 'user_id'),
+                                ('kioctx_table', 'nr'),
+                                ('mm_struct', 'ioctx_table')])}],
+ 'io_getevents': [{'call': 'keyctl',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'rt_sigtimedwait',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'msgrcv',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'kill',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'swapoff',
+                   'reason': set([('mm_struct', 'ioctx_table')])},
+                  {'call': 'sched_getaffinity',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_setparam',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'ioprio_set',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'remap_file_pages',
+                   'reason': set([('mm_struct', 'ioctx_table')])},
+                  {'call': 'getppid',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'mq_timedreceive',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'capget',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_setaffinity',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'signal',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'semtimedop',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'umount',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_rr_get_interval',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'rt_sigprocmask',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'setsid',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sigaltstack',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_setattr',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'migrate_pages',
+                   'reason': set([('mm_struct', 'ioctx_table'),
+                                  ('task_struct', 'timer_slack_ns')])},
+                  {'call': 'getitimer',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'setpgid',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'getsid',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'prlimit64',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'perf_event_open',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'shmdt',
+                   'reason': set([('mm_struct', 'ioctx_table')])},
+                  {'call': 'rt_sigaction',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'getpgid',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'brk',
+                   'reason': set([('mm_struct', 'ioctx_table')])},
+                  {'call': 'getpriority',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sigaction',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'setns',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'fork',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'get_mempolicy',
+                   'reason': set([('mm_struct', 'ioctx_table')])},
+                  {'call': 'io_submit',
+                   'reason': set([('kioctx', 'user_id')])},
+                  {'call': 'get_robust_list',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'mq_timedsend',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_getscheduler',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'ptrace',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_getattr',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'getrusage',
+                   'reason': set([('mm_struct', 'ioctx_table'),
+                                  ('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_setscheduler',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'setitimer',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'ioprio_get',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'vfork',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'io_setup',
+                   'reason': set([('kioctx', 'user_id'),
+                                  ('kioctx_table', 'nr'),
+                                  ('mm_struct', 'ioctx_table')])},
+                  {'call': 'mremap',
+                   'reason': set([('mm_struct', 'ioctx_table')])},
+                  {'call': 'io_destroy',
+                   'reason': set([('kioctx', 'user_id'),
+                                  ('kioctx_table', 'nr'),
+                                  ('mm_struct', 'ioctx_table')])},
+                  {'call': 'mbind',
+                   'reason': set([('mm_struct', 'ioctx_table')])},
+                  {'call': 'prctl',
+                   'reason': set([('mm_struct', 'ioctx_table'),
+                                  ('task_struct', 'timer_slack_ns')])},
+                  {'call': 'move_pages',
+                   'reason': set([('mm_struct', 'ioctx_table'),
+                                  ('task_struct', 'timer_slack_ns')])},
+                  {'call': 'modify_ldt',
+                   'reason': set([('mm_struct', 'ioctx_table')])},
+                  {'call': 'setpriority',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'mincore',
+                   'reason': set([('mm_struct', 'ioctx_table')])},
+                  {'call': 'clone',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_getparam',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'io_cancel',
+                   'reason': set([('kioctx', 'user_id'),
+                                  ('kioctx_table', 'nr'),
+                                  ('mm_struct', 'ioctx_table')])}],
+ 'io_setup': [{'call': 'io_getevents',
+               'reason': set([('kioctx', 'cpu'),
+                              ('kioctx', 'max_reqs'),
+                              ('kioctx', 'mmap_base'),
+                              ('kioctx', 'mmap_size'),
+                              ('kioctx', 'req_batch')])},
+              {'call': 'io_submit',
+               'reason': set([('kioctx', 'cpu'),
+                              ('kioctx', 'max_reqs'),
+                              ('kioctx', 'mmap_base'),
+                              ('kioctx', 'mmap_size'),
+                              ('kioctx', 'req_batch')])},
+              {'call': 'io_destroy',
+               'reason': set([('kioctx', 'cpu'),
+                              ('kioctx', 'max_reqs'),
+                              ('kioctx', 'mmap_base'),
+                              ('kioctx', 'mmap_size'),
+                              ('kioctx', 'req_batch')])},
+              {'call': 'io_cancel',
+               'reason': set([('kioctx', 'cpu'),
+                              ('kioctx', 'max_reqs'),
+                              ('kioctx', 'mmap_base'),
+                              ('kioctx', 'mmap_size'),
+                              ('kioctx', 'req_batch')])}],
+ 'io_submit': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setparam',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ioprio_set',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'semtimedop',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sigaltstack',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setattr',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'migrate_pages',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getitimer',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'prlimit64',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'perf_event_open',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getpriority',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sigaction',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'get_robust_list',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getattr',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getrusage',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setitimer',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ioprio_get',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'move_pages',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setpriority',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getparam',
+                'reason': set([('mm_segment_t', 'seg')])}],
+ 'ioctl': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+           {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+           {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+           {'call': 'writev', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+           {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+           {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+           {'call': 'read', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+           {'call': 'utime', 'reason': set([('fd', 'flags')])},
+           {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+           {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+           {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+           {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+           {'call': 'tee', 'reason': set([('fd', 'flags')])},
+           {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+           {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+           {'call': 'connect', 'reason': set([('fd', 'flags')])},
+           {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+           {'call': 'flock', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+           {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+           {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+           {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+           {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+           {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+           {'call': 'splice', 'reason': set([('fd', 'flags')])},
+           {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+           {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+           {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+           {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+           {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+           {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+           {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+           {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+           {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+           {'call': 'listen', 'reason': set([('fd', 'flags')])},
+           {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+           {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+           {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+           {'call': 'readv', 'reason': set([('fd', 'flags')])},
+           {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+           {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+           {'call': 'write', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+           {'call': 'bind', 'reason': set([('fd', 'flags')])},
+           {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'ioperm': [{'call': 'keyctl',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'msgrcv',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'kill',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_setparam',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'ioprio_set',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'getppid',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'capget',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'signal',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'semtimedop',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'umount',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'setsid',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sigaltstack',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_setattr',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'migrate_pages',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'getitimer',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'setpgid',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'getsid',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'prlimit64',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'perf_event_open',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'getpgid',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'getpriority',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sigaction',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'setns',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'fork',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'get_robust_list',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'ptrace',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_getattr',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'getrusage',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'setitimer',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'ioprio_get',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'vfork',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'prctl',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'move_pages',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'setpriority',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'clone',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_getparam',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])}],
+ 'ioprio_get': [{'call': 'keyctl',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'rt_sigtimedwait',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'msgrcv',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'kill',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_getaffinity',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_setparam',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'ioprio_set',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getppid',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'mq_timedreceive',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'capget',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_setaffinity',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'signal',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'semtimedop',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'umount',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_rr_get_interval',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'rt_sigprocmask',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'setsid',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sigaltstack',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_setattr',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'migrate_pages',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getitimer',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'setpgid',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getsid',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'prlimit64',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'rt_sigaction',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getpgid',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getpriority',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sigaction',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'setns',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'fork',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'get_robust_list',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'mq_timedsend',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_getscheduler',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'ptrace',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_getattr',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getrusage',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_setscheduler',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'setitimer',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'vfork',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'prctl',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'move_pages',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'setpriority',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'clone',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_getparam',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'io_context'),
+                                ('task_struct', 'real_cred')])}],
+ 'ioprio_set': [{'call': 'keyctl',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'rt_sigtimedwait',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'msgrcv',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'kill',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_getaffinity',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_setparam',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getppid',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'mq_timedreceive',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'capget',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_setaffinity',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'signal',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'semtimedop',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'umount',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_rr_get_interval',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'rt_sigprocmask',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'setsid',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sigaltstack',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_setattr',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'migrate_pages',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getitimer',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'setpgid',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getsid',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'prlimit64',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'rt_sigaction',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getpgid',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getpriority',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sigaction',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'setns',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'fork',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'get_robust_list',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'mq_timedsend',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_getscheduler',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'ptrace',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_getattr',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'getrusage',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_setscheduler',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'setitimer',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'ioprio_get',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'vfork',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'prctl',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'move_pages',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'setpriority',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'clone',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])},
+                {'call': 'sched_getparam',
+                 'reason': set([('task_struct', 'cred'),
+                                ('task_struct', 'real_cred')])}],
+ 'keyctl': [{'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'setfsuid',
+             'reason': set([('cred', 'session_keyring')])},
+            {'call': 'msgrcv',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'kill',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'getresuid16',
+             'reason': set([('cred', 'session_keyring')])},
+            {'call': 'getresgid',
+             'reason': set([('cred', 'session_keyring')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'setgid',
+             'reason': set([('cred', 'egid'),
+                            ('cred', 'gid'),
+                            ('cred', 'session_keyring'),
+                            ('cred', 'sgid')])},
+            {'call': 'ioprio_set',
+             'reason': set([('cred', 'session_keyring'),
+                            ('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'capset', 'reason': set([('cred', 'session_keyring')])},
+            {'call': 'getppid',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'getresgid16',
+             'reason': set([('cred', 'session_keyring')])},
+            {'call': 'capget',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('cred', 'session_keyring'),
+                            ('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'setfsgid',
+             'reason': set([('cred', 'session_keyring')])},
+            {'call': 'unshare', 'reason': set([('cred', 'session_keyring')])},
+            {'call': 'signal',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'setreuid',
+             'reason': set([('cred', 'euid'),
+                            ('cred', 'session_keyring'),
+                            ('cred', 'suid'),
+                            ('cred', 'uid')])},
+            {'call': 'semtimedop',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'umount',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'epoll_create1',
+             'reason': set([('cred', 'session_keyring')])},
+            {'call': 'getresuid',
+             'reason': set([('cred', 'session_keyring')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'setsid',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'sigaltstack',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'migrate_pages',
+             'reason': set([('cred', 'session_keyring'),
+                            ('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'getitimer',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'setpgid',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'setresgid',
+             'reason': set([('cred', 'egid'),
+                            ('cred', 'gid'),
+                            ('cred', 'session_keyring'),
+                            ('cred', 'sgid')])},
+            {'call': 'setregid',
+             'reason': set([('cred', 'egid'),
+                            ('cred', 'gid'),
+                            ('cred', 'session_keyring'),
+                            ('cred', 'sgid')])},
+            {'call': 'getsid',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'prlimit64',
+             'reason': set([('cred', 'session_keyring'),
+                            ('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'getgroups16',
+             'reason': set([('cred', 'session_keyring')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'request_key',
+             'reason': set([('key', 'description'),
+                            ('key', 'perm'),
+                            ('key', 'quotalen'),
+                            ('key', 'serial'),
+                            ('key_type', 'name'),
+                            ('key_type', 'read')])},
+            {'call': 'getpgid',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'getpriority',
+             'reason': set([('cred', 'session_keyring'),
+                            ('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'sigaction',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'faccessat',
+             'reason': set([('cred', 'session_keyring')])},
+            {'call': 'setns',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'fork',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'ptrace',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'getrusage',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'setresuid',
+             'reason': set([('cred', 'euid'),
+                            ('cred', 'session_keyring'),
+                            ('cred', 'suid'),
+                            ('cred', 'uid')])},
+            {'call': 'setitimer',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'ioprio_get',
+             'reason': set([('cred', 'session_keyring'),
+                            ('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'vfork',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'setuid',
+             'reason': set([('cred', 'euid'),
+                            ('cred', 'session_keyring'),
+                            ('cred', 'suid'),
+                            ('cred', 'uid')])},
+            {'call': 'prctl',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'move_pages',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'getgroups',
+             'reason': set([('cred', 'session_keyring')])},
+            {'call': 'setpriority',
+             'reason': set([('cred', 'session_keyring'),
+                            ('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'clone',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'cred'),
+                            ('task_struct', 'mm'),
+                            ('task_struct', 'pid'),
+                            ('task_struct', 'real_cred')])}],
+ 'kill': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'rt_sigtimedwait',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'sched_getaffinity',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'sched_setparam',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'ioprio_set', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'mq_timedreceive',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'sched_setaffinity',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'semtimedop', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'sched_rr_get_interval',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'rt_sigprocmask',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'sigaltstack', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'sched_setattr', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'migrate_pages', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'prlimit64', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'perf_event_open',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'rt_sigaction', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'getpriority', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'get_robust_list',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'mq_timedsend', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'sched_getscheduler',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'sched_getattr', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'sched_setscheduler',
+           'reason': set([('task_struct', 'cred')])},
+          {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'ioprio_get', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'move_pages', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'setpriority', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+          {'call': 'sched_getparam',
+           'reason': set([('task_struct', 'cred')])}],
+ 'lgetxattr': [{'call': 'eventfd2', 'reason': set([('path', 'dentry')])},
+               {'call': 'swapoff', 'reason': set([('path', 'dentry')])},
+               {'call': 'pivot_root', 'reason': set([('path', 'dentry')])},
+               {'call': 'memfd_create', 'reason': set([('path', 'dentry')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('path', 'dentry')])},
+               {'call': 'dup3', 'reason': set([('path', 'dentry')])},
+               {'call': 'unshare', 'reason': set([('path', 'dentry')])},
+               {'call': 'epoll_create1', 'reason': set([('path', 'dentry')])},
+               {'call': 'epoll_ctl', 'reason': set([('path', 'dentry')])},
+               {'call': 'flock', 'reason': set([('path', 'dentry')])},
+               {'call': 'openat', 'reason': set([('path', 'dentry')])},
+               {'call': 'lookup_dcookie',
+                'reason': set([('path', 'dentry')])},
+               {'call': 'uselib', 'reason': set([('path', 'dentry')])},
+               {'call': 'accept4', 'reason': set([('path', 'dentry')])},
+               {'call': 'socketpair', 'reason': set([('path', 'dentry')])},
+               {'call': 'getcwd', 'reason': set([('path', 'dentry')])},
+               {'call': 'shmat', 'reason': set([('path', 'dentry')])},
+               {'call': 'socket', 'reason': set([('path', 'dentry')])},
+               {'call': 'pipe2', 'reason': set([('path', 'dentry')])},
+               {'call': 'perf_event_open',
+                'reason': set([('path', 'dentry')])},
+               {'call': 'shmdt', 'reason': set([('path', 'dentry')])},
+               {'call': 'quotactl', 'reason': set([('path', 'dentry')])},
+               {'call': 'acct', 'reason': set([('path', 'dentry')])},
+               {'call': 'open', 'reason': set([('path', 'dentry')])},
+               {'call': 'dup', 'reason': set([('path', 'dentry')])},
+               {'call': 'setns', 'reason': set([('path', 'dentry')])},
+               {'call': 'shmctl', 'reason': set([('path', 'dentry')])},
+               {'call': 'swapon', 'reason': set([('path', 'dentry')])},
+               {'call': 'mmap_pgoff', 'reason': set([('path', 'dentry')])},
+               {'call': 'mq_open', 'reason': set([('path', 'dentry')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('path', 'dentry')])}],
+ 'linkat': [{'call': 'eventfd2', 'reason': set([('path', 'mnt')])},
+            {'call': 'swapoff', 'reason': set([('path', 'mnt')])},
+            {'call': 'pivot_root', 'reason': set([('path', 'mnt')])},
+            {'call': 'memfd_create', 'reason': set([('path', 'mnt')])},
+            {'call': 'remap_file_pages', 'reason': set([('path', 'mnt')])},
+            {'call': 'dup3', 'reason': set([('path', 'mnt')])},
+            {'call': 'unshare', 'reason': set([('path', 'mnt')])},
+            {'call': 'epoll_create1', 'reason': set([('path', 'mnt')])},
+            {'call': 'epoll_ctl', 'reason': set([('path', 'mnt')])},
+            {'call': 'flock', 'reason': set([('path', 'mnt')])},
+            {'call': 'openat', 'reason': set([('path', 'mnt')])},
+            {'call': 'lookup_dcookie', 'reason': set([('path', 'mnt')])},
+            {'call': 'uselib', 'reason': set([('path', 'mnt')])},
+            {'call': 'accept4', 'reason': set([('path', 'mnt')])},
+            {'call': 'socketpair', 'reason': set([('path', 'mnt')])},
+            {'call': 'getcwd', 'reason': set([('path', 'mnt')])},
+            {'call': 'shmat', 'reason': set([('path', 'mnt')])},
+            {'call': 'socket', 'reason': set([('path', 'mnt')])},
+            {'call': 'pipe2', 'reason': set([('path', 'mnt')])},
+            {'call': 'perf_event_open', 'reason': set([('path', 'mnt')])},
+            {'call': 'shmdt', 'reason': set([('path', 'mnt')])},
+            {'call': 'quotactl', 'reason': set([('path', 'mnt')])},
+            {'call': 'acct', 'reason': set([('path', 'mnt')])},
+            {'call': 'open', 'reason': set([('path', 'mnt')])},
+            {'call': 'dup', 'reason': set([('path', 'mnt')])},
+            {'call': 'setns', 'reason': set([('path', 'mnt')])},
+            {'call': 'shmctl', 'reason': set([('path', 'mnt')])},
+            {'call': 'swapon', 'reason': set([('path', 'mnt')])},
+            {'call': 'mmap_pgoff', 'reason': set([('path', 'mnt')])},
+            {'call': 'mq_open', 'reason': set([('path', 'mnt')])},
+            {'call': 'open_by_handle_at', 'reason': set([('path', 'mnt')])}],
+ 'listxattr': [{'call': 'eventfd2', 'reason': set([('path', 'dentry')])},
+               {'call': 'swapoff', 'reason': set([('path', 'dentry')])},
+               {'call': 'pivot_root', 'reason': set([('path', 'dentry')])},
+               {'call': 'memfd_create', 'reason': set([('path', 'dentry')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('path', 'dentry')])},
+               {'call': 'dup3', 'reason': set([('path', 'dentry')])},
+               {'call': 'unshare', 'reason': set([('path', 'dentry')])},
+               {'call': 'epoll_create1', 'reason': set([('path', 'dentry')])},
+               {'call': 'epoll_ctl', 'reason': set([('path', 'dentry')])},
+               {'call': 'flock', 'reason': set([('path', 'dentry')])},
+               {'call': 'openat', 'reason': set([('path', 'dentry')])},
+               {'call': 'lookup_dcookie',
+                'reason': set([('path', 'dentry')])},
+               {'call': 'uselib', 'reason': set([('path', 'dentry')])},
+               {'call': 'accept4', 'reason': set([('path', 'dentry')])},
+               {'call': 'socketpair', 'reason': set([('path', 'dentry')])},
+               {'call': 'getcwd', 'reason': set([('path', 'dentry')])},
+               {'call': 'shmat', 'reason': set([('path', 'dentry')])},
+               {'call': 'socket', 'reason': set([('path', 'dentry')])},
+               {'call': 'pipe2', 'reason': set([('path', 'dentry')])},
+               {'call': 'perf_event_open',
+                'reason': set([('path', 'dentry')])},
+               {'call': 'shmdt', 'reason': set([('path', 'dentry')])},
+               {'call': 'quotactl', 'reason': set([('path', 'dentry')])},
+               {'call': 'acct', 'reason': set([('path', 'dentry')])},
+               {'call': 'open', 'reason': set([('path', 'dentry')])},
+               {'call': 'dup', 'reason': set([('path', 'dentry')])},
+               {'call': 'setns', 'reason': set([('path', 'dentry')])},
+               {'call': 'shmctl', 'reason': set([('path', 'dentry')])},
+               {'call': 'swapon', 'reason': set([('path', 'dentry')])},
+               {'call': 'mmap_pgoff', 'reason': set([('path', 'dentry')])},
+               {'call': 'mq_open', 'reason': set([('path', 'dentry')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('path', 'dentry')])}],
+ 'llistxattr': [{'call': 'eventfd2', 'reason': set([('path', 'dentry')])},
+                {'call': 'swapoff', 'reason': set([('path', 'dentry')])},
+                {'call': 'pivot_root', 'reason': set([('path', 'dentry')])},
+                {'call': 'memfd_create', 'reason': set([('path', 'dentry')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('path', 'dentry')])},
+                {'call': 'dup3', 'reason': set([('path', 'dentry')])},
+                {'call': 'unshare', 'reason': set([('path', 'dentry')])},
+                {'call': 'epoll_create1',
+                 'reason': set([('path', 'dentry')])},
+                {'call': 'epoll_ctl', 'reason': set([('path', 'dentry')])},
+                {'call': 'flock', 'reason': set([('path', 'dentry')])},
+                {'call': 'openat', 'reason': set([('path', 'dentry')])},
+                {'call': 'lookup_dcookie',
+                 'reason': set([('path', 'dentry')])},
+                {'call': 'uselib', 'reason': set([('path', 'dentry')])},
+                {'call': 'accept4', 'reason': set([('path', 'dentry')])},
+                {'call': 'socketpair', 'reason': set([('path', 'dentry')])},
+                {'call': 'getcwd', 'reason': set([('path', 'dentry')])},
+                {'call': 'shmat', 'reason': set([('path', 'dentry')])},
+                {'call': 'socket', 'reason': set([('path', 'dentry')])},
+                {'call': 'pipe2', 'reason': set([('path', 'dentry')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('path', 'dentry')])},
+                {'call': 'shmdt', 'reason': set([('path', 'dentry')])},
+                {'call': 'quotactl', 'reason': set([('path', 'dentry')])},
+                {'call': 'acct', 'reason': set([('path', 'dentry')])},
+                {'call': 'open', 'reason': set([('path', 'dentry')])},
+                {'call': 'dup', 'reason': set([('path', 'dentry')])},
+                {'call': 'setns', 'reason': set([('path', 'dentry')])},
+                {'call': 'shmctl', 'reason': set([('path', 'dentry')])},
+                {'call': 'swapon', 'reason': set([('path', 'dentry')])},
+                {'call': 'mmap_pgoff', 'reason': set([('path', 'dentry')])},
+                {'call': 'mq_open', 'reason': set([('path', 'dentry')])},
+                {'call': 'open_by_handle_at',
+                 'reason': set([('path', 'dentry')])}],
+ 'llseek': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+            {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+            {'call': 'writev', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+            {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+            {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+            {'call': 'read', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+            {'call': 'utime', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+            {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+            {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+            {'call': 'tee', 'reason': set([('fd', 'flags')])},
+            {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'connect', 'reason': set([('fd', 'flags')])},
+            {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+            {'call': 'flock', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+            {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+            {'call': 'splice', 'reason': set([('fd', 'flags')])},
+            {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+            {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+            {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+            {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+            {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+            {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+            {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+            {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+            {'call': 'listen', 'reason': set([('fd', 'flags')])},
+            {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+            {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'readv', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+            {'call': 'write', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+            {'call': 'bind', 'reason': set([('fd', 'flags')])},
+            {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'lremovexattr': [{'call': 'eventfd2',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'swapoff',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'pivot_root',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'memfd_create',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'remap_file_pages',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'dup3',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'unshare',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'epoll_create1',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'epoll_ctl',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'flock',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'openat',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'lookup_dcookie',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'uselib',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'accept4',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'socketpair',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'getcwd',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'shmat',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'socket',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'pipe2',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'perf_event_open',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'shmdt',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'quotactl',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'acct',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'open',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'dup',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'setns',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'shmctl',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'swapon',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'mmap_pgoff',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'mq_open',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                  {'call': 'open_by_handle_at',
+                   'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'lseek': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+           {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+           {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+           {'call': 'writev', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+           {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+           {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+           {'call': 'read', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+           {'call': 'utime', 'reason': set([('fd', 'flags')])},
+           {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+           {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+           {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+           {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+           {'call': 'tee', 'reason': set([('fd', 'flags')])},
+           {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+           {'call': 'connect', 'reason': set([('fd', 'flags')])},
+           {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+           {'call': 'flock', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+           {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+           {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+           {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+           {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+           {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+           {'call': 'splice', 'reason': set([('fd', 'flags')])},
+           {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+           {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+           {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+           {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+           {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+           {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+           {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+           {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+           {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+           {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+           {'call': 'listen', 'reason': set([('fd', 'flags')])},
+           {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+           {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+           {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+           {'call': 'readv', 'reason': set([('fd', 'flags')])},
+           {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+           {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+           {'call': 'write', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+           {'call': 'bind', 'reason': set([('fd', 'flags')])},
+           {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'lsetxattr': [{'call': 'eventfd2',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'swapoff',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'pivot_root',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'memfd_create',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'dup3',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'unshare',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'epoll_create1',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'epoll_ctl',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'flock',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'openat',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'lookup_dcookie',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'uselib',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'accept4',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'socketpair',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'getcwd',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'shmat',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'socket',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'pipe2',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'perf_event_open',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'shmdt',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'quotactl',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'acct',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'open',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'dup',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'setns',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'shmctl',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'swapon',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'mmap_pgoff',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'mq_open',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'lstat': [{'call': 'stat',
+            'reason': set([('__old_kernel_stat', 'st_ino'),
+                           ('__old_kernel_stat', 'st_nlink')])},
+           {'call': 'fstat',
+            'reason': set([('__old_kernel_stat', 'st_ino'),
+                           ('__old_kernel_stat', 'st_nlink'),
+                           ('kstat', 'dev'),
+                           ('kstat', 'ino'),
+                           ('kstat', 'nlink'),
+                           ('kstat', 'rdev')])},
+           {'call': 'newfstat',
+            'reason': set([('kstat', 'dev'),
+                           ('kstat', 'ino'),
+                           ('kstat', 'nlink'),
+                           ('kstat', 'rdev')])}],
+ 'madvise': [{'call': 'remap_file_pages',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'shmdt',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'brk',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'get_mempolicy',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'munlockall',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'pkey_mprotect',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'mprotect',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'mremap',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'prctl',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'munlock',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'mincore',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'mlockall',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])}],
+ 'migrate_pages': [{'call': 'keyctl',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'rt_sigtimedwait',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'msgrcv',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'kill',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sched_getaffinity',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sched_setparam',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'ioprio_set',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'getppid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'ioperm',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'capget',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sched_setaffinity',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'signal',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'setreuid',
+                    'reason': set([('cred', 'euid'),
+                                   ('cred', 'suid'),
+                                   ('cred', 'uid')])},
+                   {'call': 'semtimedop',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'umount',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sched_rr_get_interval',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'rt_sigprocmask',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'setsid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sigaltstack',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sched_setattr',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'getitimer',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'setpgid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'getsid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'rt_sigaction',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'getpgid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'getpriority',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sigaction',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'setns',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'fork',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'get_robust_list',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sched_getscheduler',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'ptrace',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sched_getattr',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'getrusage',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sched_setscheduler',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'setresuid',
+                    'reason': set([('cred', 'euid'),
+                                   ('cred', 'suid'),
+                                   ('cred', 'uid')])},
+                   {'call': 'setitimer',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'ioprio_get',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'vfork',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'setuid',
+                    'reason': set([('cred', 'euid'),
+                                   ('cred', 'suid'),
+                                   ('cred', 'uid')])},
+                   {'call': 'prctl',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'move_pages',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'setpriority',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'clone',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])},
+                   {'call': 'sched_getparam',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'cred'),
+                                   ('task_struct', 'real_cred')])}],
+ 'mincore': [{'call': 'keyctl',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'rt_sigtimedwait',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'msgrcv',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'kill',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'sched_getaffinity',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'sched_setparam',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'ioprio_set',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'getppid',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'capget',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'sched_setaffinity',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'signal',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'semtimedop',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'umount',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'sched_rr_get_interval',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'rt_sigprocmask',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'setsid',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'sigaltstack',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'sched_setattr',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'migrate_pages',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'getitimer',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'setpgid',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'getsid',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'prlimit64',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'perf_event_open',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'shmdt',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'rt_sigaction',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'getpgid',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'brk', 'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'getpriority',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'sigaction',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'setns',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'fork',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'get_mempolicy',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'get_robust_list',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'mq_timedsend',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'sched_getscheduler',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'ptrace',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'munlockall',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'pkey_mprotect',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'madvise',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'sched_getattr',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'getrusage',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'sched_setscheduler',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'setitimer',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'ioprio_get',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'vfork',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'mprotect',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'mremap',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'prctl',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'move_pages',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'munlock',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'setpriority',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'clone',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'sched_getparam',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('task_struct', 'mm')])},
+             {'call': 'mlockall',
+              'reason': set([('vm_area_struct', 'vm_start')])}],
+ 'mkdirat': [{'call': 'syncfs', 'reason': set([('super_block', 's_flags')])},
+             {'call': 'ustat', 'reason': set([('super_block', 's_flags')])},
+             {'call': 'umount', 'reason': set([('super_block', 's_flags')])},
+             {'call': 'quotactl',
+              'reason': set([('super_block', 's_flags')])},
+             {'call': 'swapon', 'reason': set([('super_block', 's_flags')])}],
+ 'mknodat': [{'call': 'syncfs', 'reason': set([('super_block', 's_flags')])},
+             {'call': 'ustat', 'reason': set([('super_block', 's_flags')])},
+             {'call': 'umount', 'reason': set([('super_block', 's_flags')])},
+             {'call': 'quotactl',
+              'reason': set([('super_block', 's_flags')])},
+             {'call': 'swapon', 'reason': set([('super_block', 's_flags')])}],
+ 'mlock': [{'call': 'keyctl', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'rt_sigtimedwait',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'msgrcv', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'kill', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_getaffinity',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_setparam', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'ioprio_set', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'getppid', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'capget', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_setaffinity',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'signal', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'semtimedop', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'umount', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'rt_sigprocmask', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'setsid', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sigaltstack', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_setattr', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'migrate_pages', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'getitimer', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'setpgid', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'getsid', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'prlimit64', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'perf_event_open',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'rt_sigaction', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'getpgid', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'getpriority', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sigaction', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'setns', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'fork', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'get_robust_list',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'mq_timedsend', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_getscheduler',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'ptrace', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_getattr', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'getrusage', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_setscheduler',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'setitimer', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'ioprio_get', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'vfork', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'prctl', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'move_pages', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'setpriority', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'clone', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_getparam', 'reason': set([('task_struct', 'mm')])}],
+ 'mlock2': [{'call': 'keyctl', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'msgrcv', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'ioprio_set', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'getppid', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'capget', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'signal', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'semtimedop', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'umount', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'setsid', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'sigaltstack', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'sched_setattr', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'migrate_pages', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'getitimer', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'setpgid', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'getsid', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'prlimit64', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'rt_sigaction', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'getpgid', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'getpriority', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'sigaction', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'setns', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'mq_timedsend', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'ptrace', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'sched_getattr', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'getrusage', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'mm')])},
+            {'call': 'setitimer', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'ioprio_get', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'vfork', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'prctl', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'move_pages', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'setpriority', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'clone', 'reason': set([('task_struct', 'mm')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'mm')])}],
+ 'mlockall': [{'call': 'keyctl',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'msgrcv',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'kill',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'swapoff', 'reason': set([('mm_struct', 'total_vm')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ioprio_set',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'personality',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'io_getevents',
+               'reason': set([('mm_struct', 'total_vm')])},
+              {'call': 'getppid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'capget',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'signal',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'umount',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setsid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'migrate_pages',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getitimer',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setpgid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getsid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'prlimit64',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'shmdt',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getpgid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'brk',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'getpriority',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sigaction',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setns',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'fork',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'get_mempolicy',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ptrace',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'munlockall',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'pkey_mprotect',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'madvise',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getrusage',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setitimer',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ioprio_get',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'vfork',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'io_setup',
+               'reason': set([('mm_struct', 'total_vm')])},
+              {'call': 'mprotect',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'mremap',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'io_destroy',
+               'reason': set([('mm_struct', 'total_vm')])},
+              {'call': 'mbind', 'reason': set([('mm_struct', 'total_vm')])},
+              {'call': 'prctl',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('task_struct', 'personality'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'move_pages',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'modify_ldt',
+               'reason': set([('mm_struct', 'total_vm')])},
+              {'call': 'munlock',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'setpriority',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'mincore',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'clone',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'io_cancel',
+               'reason': set([('mm_struct', 'total_vm')])}],
+ 'mmap_pgoff': [{'call': 'eventfd2', 'reason': set([('file', 'f_op')])},
+                {'call': 'swapoff', 'reason': set([('file', 'f_op')])},
+                {'call': 'memfd_create', 'reason': set([('file', 'f_op')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('file', 'f_op')])},
+                {'call': 'dup3', 'reason': set([('file', 'f_op')])},
+                {'call': 'epoll_create1', 'reason': set([('file', 'f_op')])},
+                {'call': 'epoll_ctl', 'reason': set([('file', 'f_op')])},
+                {'call': 'flock', 'reason': set([('file', 'f_op')])},
+                {'call': 'openat', 'reason': set([('file', 'f_op')])},
+                {'call': 'uselib', 'reason': set([('file', 'f_op')])},
+                {'call': 'accept4', 'reason': set([('file', 'f_op')])},
+                {'call': 'socketpair', 'reason': set([('file', 'f_op')])},
+                {'call': 'shmat', 'reason': set([('file', 'f_op')])},
+                {'call': 'socket', 'reason': set([('file', 'f_op')])},
+                {'call': 'pipe2', 'reason': set([('file', 'f_op')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('file', 'f_op')])},
+                {'call': 'shmdt', 'reason': set([('file', 'f_op')])},
+                {'call': 'acct', 'reason': set([('file', 'f_op')])},
+                {'call': 'open', 'reason': set([('file', 'f_op')])},
+                {'call': 'dup', 'reason': set([('file', 'f_op')])},
+                {'call': 'setns', 'reason': set([('file', 'f_op')])},
+                {'call': 'shmctl', 'reason': set([('file', 'f_op')])},
+                {'call': 'swapon', 'reason': set([('file', 'f_op')])},
+                {'call': 'mq_open', 'reason': set([('file', 'f_op')])},
+                {'call': 'open_by_handle_at',
+                 'reason': set([('file', 'f_op')])}],
+ 'modify_ldt': [{'call': 'swapoff', 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'io_getevents',
+                 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'get_thread_area',
+                 'reason': set([('user_desc', 'base_addr'),
+                                ('user_desc', 'contents'),
+                                ('user_desc', 'entry_number'),
+                                ('user_desc', 'limit'),
+                                ('user_desc', 'limit_in_pages'),
+                                ('user_desc', 'read_exec_only'),
+                                ('user_desc', 'seg_32bit'),
+                                ('user_desc', 'seg_not_present'),
+                                ('user_desc', 'useable')])},
+                {'call': 'migrate_pages',
+                 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'shmdt', 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'brk', 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'get_mempolicy',
+                 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'getrusage',
+                 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'io_setup',
+                 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'mremap', 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'io_destroy',
+                 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'mbind', 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'prctl', 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'move_pages',
+                 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'mincore', 'reason': set([('mm_context_t', 'ldt')])},
+                {'call': 'set_thread_area',
+                 'reason': set([('user_desc', 'base_addr'),
+                                ('user_desc', 'contents'),
+                                ('user_desc', 'entry_number'),
+                                ('user_desc', 'limit'),
+                                ('user_desc', 'limit_in_pages'),
+                                ('user_desc', 'read_exec_only'),
+                                ('user_desc', 'seg_32bit'),
+                                ('user_desc', 'seg_not_present'),
+                                ('user_desc', 'useable')])},
+                {'call': 'io_cancel',
+                 'reason': set([('mm_context_t', 'ldt')])}],
+ 'mount': [{'call': 'keyctl',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigtimedwait',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'msgrcv',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'kill', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getaffinity',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setparam',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ioprio_set',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'personality',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getppid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'capget',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setaffinity',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'signal',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'semtimedop',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'umount',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigprocmask',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setsid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sigaltstack',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setattr',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'migrate_pages',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getitimer',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setpgid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getsid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'prlimit64',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'perf_event_open',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigaction',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getpgid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getpriority',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sigaction',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setns', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'fork', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'get_robust_list',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getscheduler',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ptrace',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getattr',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getrusage',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setscheduler',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setitimer',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ioprio_get',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'vfork', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'prctl', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'move_pages',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setpriority',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'clone', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getparam',
+            'reason': set([('task_struct', 'personality')])}],
+ 'mprotect': [{'call': 'keyctl',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'msgrcv',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'kill',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'ioprio_set',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'personality',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'getppid',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'capget',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'signal',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'umount',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setsid',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'migrate_pages',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getitimer',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setpgid',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getsid',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'prlimit64',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'shmdt',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getpgid',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'brk',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'getpriority',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sigaction',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setns',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'fork',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'get_mempolicy',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'ptrace',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'munlockall',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'pkey_mprotect',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'madvise',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getrusage',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setitimer',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'ioprio_get',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'vfork',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'mremap',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'prctl',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'move_pages',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'munlock',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'setpriority',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'mincore',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'clone',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'mm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'mlockall',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])}],
+ 'mq_getsetattr': [{'call': 'eventfd2', 'reason': set([('file', 'f_op')])},
+                   {'call': 'swapoff', 'reason': set([('file', 'f_op')])},
+                   {'call': 'memfd_create',
+                    'reason': set([('file', 'f_op')])},
+                   {'call': 'remap_file_pages',
+                    'reason': set([('file', 'f_op')])},
+                   {'call': 'dup3', 'reason': set([('file', 'f_op')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('mq_attr', 'mq_flags')])},
+                   {'call': 'epoll_create1',
+                    'reason': set([('file', 'f_op')])},
+                   {'call': 'epoll_ctl', 'reason': set([('file', 'f_op')])},
+                   {'call': 'flock', 'reason': set([('file', 'f_op')])},
+                   {'call': 'openat', 'reason': set([('file', 'f_op')])},
+                   {'call': 'uselib', 'reason': set([('file', 'f_op')])},
+                   {'call': 'accept4', 'reason': set([('file', 'f_op')])},
+                   {'call': 'socketpair', 'reason': set([('file', 'f_op')])},
+                   {'call': 'shmat', 'reason': set([('file', 'f_op')])},
+                   {'call': 'socket', 'reason': set([('file', 'f_op')])},
+                   {'call': 'pipe2', 'reason': set([('file', 'f_op')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('file', 'f_op')])},
+                   {'call': 'shmdt', 'reason': set([('file', 'f_op')])},
+                   {'call': 'acct', 'reason': set([('file', 'f_op')])},
+                   {'call': 'open', 'reason': set([('file', 'f_op')])},
+                   {'call': 'dup', 'reason': set([('file', 'f_op')])},
+                   {'call': 'setns', 'reason': set([('file', 'f_op')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('mq_attr', 'mq_flags')])},
+                   {'call': 'shmctl', 'reason': set([('file', 'f_op')])},
+                   {'call': 'swapon', 'reason': set([('file', 'f_op')])},
+                   {'call': 'mmap_pgoff', 'reason': set([('file', 'f_op')])},
+                   {'call': 'mq_notify',
+                    'reason': set([('mq_attr', 'mq_flags')])},
+                   {'call': 'mq_open',
+                    'reason': set([('file', 'f_op'),
+                                   ('mq_attr', 'mq_flags')])},
+                   {'call': 'open_by_handle_at',
+                    'reason': set([('file', 'f_op')])}],
+ 'mq_notify': [{'call': 'rt_sigtimedwait',
+                'reason': set([('sigval', 'sival_ptr')])},
+               {'call': 'eventfd2', 'reason': set([('file', 'f_op')])},
+               {'call': 'swapoff', 'reason': set([('file', 'f_op')])},
+               {'call': 'memfd_create', 'reason': set([('file', 'f_op')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('file', 'f_op')])},
+               {'call': 'dup3', 'reason': set([('file', 'f_op')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('mqueue_inode_info', 'notify_owner'),
+                               ('sigevent', 'sigev_notify'),
+                               ('sigevent', 'sigev_signo'),
+                               ('sigval', 'sival_ptr')])},
+               {'call': 'timer_create',
+                'reason': set([('sigevent', 'sigev_notify'),
+                               ('sigevent', 'sigev_signo'),
+                               ('sigval', 'sival_ptr')])},
+               {'call': 'epoll_create1', 'reason': set([('file', 'f_op')])},
+               {'call': 'rt_sigqueueinfo',
+                'reason': set([('sigval', 'sival_ptr')])},
+               {'call': 'epoll_ctl', 'reason': set([('file', 'f_op')])},
+               {'call': 'flock', 'reason': set([('file', 'f_op')])},
+               {'call': 'tgkill', 'reason': set([('sigval', 'sival_ptr')])},
+               {'call': 'openat', 'reason': set([('file', 'f_op')])},
+               {'call': 'uselib', 'reason': set([('file', 'f_op')])},
+               {'call': 'accept4', 'reason': set([('file', 'f_op')])},
+               {'call': 'socketpair', 'reason': set([('file', 'f_op')])},
+               {'call': 'shmat', 'reason': set([('file', 'f_op')])},
+               {'call': 'socket', 'reason': set([('file', 'f_op')])},
+               {'call': 'pipe2', 'reason': set([('file', 'f_op')])},
+               {'call': 'perf_event_open', 'reason': set([('file', 'f_op')])},
+               {'call': 'shmdt', 'reason': set([('file', 'f_op')])},
+               {'call': 'acct', 'reason': set([('file', 'f_op')])},
+               {'call': 'open', 'reason': set([('file', 'f_op')])},
+               {'call': 'rt_tgsigqueueinfo',
+                'reason': set([('sigval', 'sival_ptr')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('mqueue_inode_info', 'notify_owner'),
+                               ('sigevent', 'sigev_notify'),
+                               ('sigevent', 'sigev_signo'),
+                               ('sigval', 'sival_ptr')])},
+               {'call': 'dup', 'reason': set([('file', 'f_op')])},
+               {'call': 'setns', 'reason': set([('file', 'f_op')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('mqueue_inode_info', 'notify_owner'),
+                               ('sigevent', 'sigev_notify'),
+                               ('sigevent', 'sigev_signo'),
+                               ('sigval', 'sival_ptr')])},
+               {'call': 'shmctl', 'reason': set([('file', 'f_op')])},
+               {'call': 'swapon', 'reason': set([('file', 'f_op')])},
+               {'call': 'mmap_pgoff', 'reason': set([('file', 'f_op')])},
+               {'call': 'rt_sigreturn',
+                'reason': set([('sigval', 'sival_ptr')])},
+               {'call': 'tkill', 'reason': set([('sigval', 'sival_ptr')])},
+               {'call': 'mq_open', 'reason': set([('file', 'f_op')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('file', 'f_op')])}],
+ 'mq_open': [{'call': 'sysfs', 'reason': set([('filename', 'name')])},
+             {'call': 'eventfd2', 'reason': set([('path', 'dentry')])},
+             {'call': 'mq_unlink', 'reason': set([('filename', 'name')])},
+             {'call': 'swapoff',
+              'reason': set([('filename', 'name'), ('path', 'dentry')])},
+             {'call': 'pivot_root', 'reason': set([('path', 'dentry')])},
+             {'call': 'memfd_create', 'reason': set([('path', 'dentry')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('path', 'dentry')])},
+             {'call': 'dup3', 'reason': set([('path', 'dentry')])},
+             {'call': 'unshare', 'reason': set([('path', 'dentry')])},
+             {'call': 'epoll_create1', 'reason': set([('path', 'dentry')])},
+             {'call': 'epoll_ctl', 'reason': set([('path', 'dentry')])},
+             {'call': 'flock', 'reason': set([('path', 'dentry')])},
+             {'call': 'openat',
+              'reason': set([('filename', 'name'), ('path', 'dentry')])},
+             {'call': 'lookup_dcookie', 'reason': set([('path', 'dentry')])},
+             {'call': 'uselib',
+              'reason': set([('filename', 'name'), ('path', 'dentry')])},
+             {'call': 'renameat2', 'reason': set([('filename', 'name')])},
+             {'call': 'accept4', 'reason': set([('path', 'dentry')])},
+             {'call': 'socketpair', 'reason': set([('path', 'dentry')])},
+             {'call': 'getcwd', 'reason': set([('path', 'dentry')])},
+             {'call': 'shmat', 'reason': set([('path', 'dentry')])},
+             {'call': 'socket', 'reason': set([('path', 'dentry')])},
+             {'call': 'symlinkat', 'reason': set([('filename', 'name')])},
+             {'call': 'pipe2', 'reason': set([('path', 'dentry')])},
+             {'call': 'perf_event_open', 'reason': set([('path', 'dentry')])},
+             {'call': 'shmdt', 'reason': set([('path', 'dentry')])},
+             {'call': 'quotactl',
+              'reason': set([('filename', 'name'), ('path', 'dentry')])},
+             {'call': 'acct',
+              'reason': set([('filename', 'name'), ('path', 'dentry')])},
+             {'call': 'open',
+              'reason': set([('filename', 'name'), ('path', 'dentry')])},
+             {'call': 'unlink', 'reason': set([('filename', 'name')])},
+             {'call': 'rmdir', 'reason': set([('filename', 'name')])},
+             {'call': 'dup', 'reason': set([('path', 'dentry')])},
+             {'call': 'setns', 'reason': set([('path', 'dentry')])},
+             {'call': 'shmctl', 'reason': set([('path', 'dentry')])},
+             {'call': 'swapon',
+              'reason': set([('filename', 'name'), ('path', 'dentry')])},
+             {'call': 'mmap_pgoff', 'reason': set([('path', 'dentry')])},
+             {'call': 'unlinkat', 'reason': set([('filename', 'name')])},
+             {'call': 'open_by_handle_at',
+              'reason': set([('path', 'dentry')])}],
+ 'mq_timedreceive': [{'call': 'msgrcv', 'reason': set([('msg_msg', 'm_ts')])},
+                     {'call': 'eventfd2',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'swapoff',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'memfd_create',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'remap_file_pages',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'dup3',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'epoll_create1',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'epoll_ctl',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'flock',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'openat',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'uselib',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'accept4',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'socketpair',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'shmat',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'socket',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'pipe2',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'perf_event_open',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'shmdt',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'acct',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'open',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'mq_getsetattr',
+                      'reason': set([('file', 'f_flags'),
+                                     ('mq_attr', 'mq_curmsgs'),
+                                     ('mq_attr', 'mq_msgsize'),
+                                     ('mqueue_inode_info', 'node_cache')])},
+                     {'call': 'dup',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'setns',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('mq_attr', 'mq_curmsgs'),
+                                     ('mq_attr', 'mq_msgsize'),
+                                     ('mqueue_inode_info', 'node_cache'),
+                                     ('msg_msg', 'm_ts')])},
+                     {'call': 'shmctl',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'swapon',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'mmap_pgoff',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])},
+                     {'call': 'msgsnd', 'reason': set([('msg_msg', 'm_ts')])},
+                     {'call': 'mq_notify',
+                      'reason': set([('mq_attr', 'mq_curmsgs'),
+                                     ('mq_attr', 'mq_msgsize'),
+                                     ('mqueue_inode_info', 'node_cache')])},
+                     {'call': 'mq_open',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op'),
+                                     ('mq_attr', 'mq_curmsgs'),
+                                     ('mq_attr', 'mq_msgsize')])},
+                     {'call': 'open_by_handle_at',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('file', 'f_op')])}],
+ 'mq_timedsend': [{'call': 'eventfd2',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'swapoff',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'memfd_create',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'remap_file_pages',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'dup3',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'mq_timedreceive',
+                   'reason': set([('mq_attr', 'mq_curmsgs'),
+                                  ('mq_attr', 'mq_maxmsg'),
+                                  ('mq_attr', 'mq_msgsize'),
+                                  ('mqueue_inode_info', 'node_cache')])},
+                  {'call': 'epoll_create1',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'epoll_ctl',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'flock',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'openat',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'uselib',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'accept4',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'socketpair',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'shmat',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'socket',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'pipe2',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'perf_event_open',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'shmdt',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'acct',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'open',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'mq_getsetattr',
+                   'reason': set([('file', 'f_flags'),
+                                  ('mq_attr', 'mq_curmsgs'),
+                                  ('mq_attr', 'mq_maxmsg'),
+                                  ('mq_attr', 'mq_msgsize'),
+                                  ('mqueue_inode_info', 'node_cache')])},
+                  {'call': 'dup',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'setns',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'shmctl',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'swapon',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'mmap_pgoff',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])},
+                  {'call': 'mq_notify',
+                   'reason': set([('mq_attr', 'mq_curmsgs'),
+                                  ('mq_attr', 'mq_maxmsg'),
+                                  ('mq_attr', 'mq_msgsize'),
+                                  ('mqueue_inode_info', 'node_cache')])},
+                  {'call': 'mq_open',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op'),
+                                  ('mq_attr', 'mq_curmsgs'),
+                                  ('mq_attr', 'mq_maxmsg'),
+                                  ('mq_attr', 'mq_msgsize')])},
+                  {'call': 'open_by_handle_at',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('file', 'f_op')])}],
+ 'mremap': [{'call': 'keyctl',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'msgrcv',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'personality')])},
+            {'call': 'swapoff', 'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'ioprio_set',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'personality',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'remap_file_pages',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'io_getevents',
+             'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'getppid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'capget',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'signal',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'semtimedop',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'umount',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'setsid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sigaltstack',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'migrate_pages',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('task_struct', 'personality')])},
+            {'call': 'getitimer',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'setpgid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'getsid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'prlimit64',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'shmdt',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'getpgid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'brk',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'getpriority',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sigaction',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'setns',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'personality')])},
+            {'call': 'get_mempolicy',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'ptrace',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'munlockall',
+             'reason': set([('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'pkey_mprotect',
+             'reason': set([('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'madvise',
+             'reason': set([('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'getrusage',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('task_struct', 'personality')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'setitimer',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'ioprio_get',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'vfork',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'io_setup', 'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'mprotect',
+             'reason': set([('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'io_destroy',
+             'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'mbind', 'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'prctl',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('task_struct', 'personality'),
+                            ('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'move_pages',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('task_struct', 'personality')])},
+            {'call': 'modify_ldt',
+             'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'munlock',
+             'reason': set([('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'setpriority',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'mincore',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'clone',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'io_cancel',
+             'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'mlockall',
+             'reason': set([('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_file'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_next'),
+                            ('vm_area_struct', 'vm_ops'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])}],
+ 'msgctl': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'msgrcv',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb'),
+                            ('mm_segment_t', 'seg')])},
+            {'call': 'mq_unlink',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'msgget',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setparam',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioprio_set', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'semtimedop',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb'),
+                            ('mm_segment_t', 'seg')])},
+            {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'semctl',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'shmget',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sigaltstack', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setattr',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'migrate_pages',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getitimer', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'semget',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'shmat',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'prlimit64', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'perf_event_open',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getpriority', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setns',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb'),
+                            ('mm_segment_t', 'seg')])},
+            {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'get_robust_list',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'shmctl',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'sched_getattr',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getrusage', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setitimer', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioprio_get', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'move_pages', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'msgsnd',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'setpriority', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'mq_open',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'sched_getparam',
+             'reason': set([('mm_segment_t', 'seg')])}],
+ 'msgrcv': [{'call': 'mq_timedreceive', 'reason': set([('msg_msg', 'm_ts')])},
+            {'call': 'mq_timedsend', 'reason': set([('msg_msg', 'm_ts')])},
+            {'call': 'msgsnd', 'reason': set([('msg_msg', 'm_ts')])}],
+ 'msgsnd': [{'call': 'msgrcv',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'mq_unlink',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'msgget',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'semtimedop',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'semctl',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'shmget',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'msgctl',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'semget',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'shmat',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'setns',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'shmctl',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'mq_open',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])}],
+ 'msync': [{'call': 'remap_file_pages',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_flags')])},
+           {'call': 'shmdt',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_flags')])},
+           {'call': 'brk',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_flags')])},
+           {'call': 'get_mempolicy',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_flags')])},
+           {'call': 'munlockall',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_flags')])},
+           {'call': 'pkey_mprotect',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_flags')])},
+           {'call': 'madvise',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_flags')])},
+           {'call': 'mprotect',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_flags')])},
+           {'call': 'mremap',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_flags')])},
+           {'call': 'prctl',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_flags')])},
+           {'call': 'munlock',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_flags')])},
+           {'call': 'mincore',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_flags')])},
+           {'call': 'mlockall',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_flags')])}],
+ 'munlock': [{'call': 'keyctl', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'rt_sigtimedwait',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'msgrcv', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'kill', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_getaffinity',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_setparam',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'ioprio_set', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'getppid', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'capget', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_setaffinity',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'signal', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'semtimedop', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'umount', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_rr_get_interval',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'rt_sigprocmask',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'setsid', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sigaltstack', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_setattr',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'migrate_pages',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'getitimer', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'setpgid', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'getsid', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'prlimit64', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'perf_event_open',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'shmdt',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'rt_sigaction', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'getpgid', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'brk',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'getpriority', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sigaction', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'setns', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'fork', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'get_mempolicy',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'get_robust_list',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'mq_timedsend', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_getscheduler',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'ptrace', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'munlockall',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'pkey_mprotect',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'madvise',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'sched_getattr',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'getrusage', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_setscheduler',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'setitimer', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'ioprio_get', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'vfork', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'mprotect',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'mremap',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'prctl',
+              'reason': set([('task_struct', 'mm'),
+                             ('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'move_pages', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'setpriority', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'mincore',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'clone', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_getparam',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'mlockall',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])}],
+ 'munlockall': [{'call': 'remap_file_pages',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'shmdt',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'brk',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'get_mempolicy',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'pkey_mprotect',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'madvise',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'mprotect',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'mremap',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'prctl',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'munlock',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'mincore',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'mlockall',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])}],
+ 'name_to_handle_at': [{'call': 'syncfs',
+                        'reason': set([('super_block', 's_export_op')])},
+                       {'call': 'eventfd2',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'swapoff',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'pivot_root',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'memfd_create',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'remap_file_pages',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'dup3',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'ustat',
+                        'reason': set([('super_block', 's_export_op')])},
+                       {'call': 'unshare',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'umount',
+                        'reason': set([('super_block', 's_export_op')])},
+                       {'call': 'epoll_create1',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'epoll_ctl',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'flock',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'openat',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'lookup_dcookie',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'uselib',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'accept4',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'socketpair',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'getcwd',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'shmat',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'socket',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'pipe2',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'perf_event_open',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'shmdt',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'quotactl',
+                        'reason': set([('path', 'dentry'),
+                                       ('path', 'mnt'),
+                                       ('super_block', 's_export_op')])},
+                       {'call': 'acct',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'open',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'dup',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'setns',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'shmctl',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'swapon',
+                        'reason': set([('path', 'dentry'),
+                                       ('path', 'mnt'),
+                                       ('super_block', 's_export_op')])},
+                       {'call': 'mmap_pgoff',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'mq_open',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'open_by_handle_at',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'nanosleep': [{'call': 'rt_sigtimedwait',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'mq_unlink',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'swapoff',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'fchmod',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'memfd_create',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'readlinkat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'io_getevents',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'fchown',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'utime',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'semtimedop',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'settimeofday',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'timerfd_gettime',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'pselect6',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'uselib',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'fchmodat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'timer_settime',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'ftruncate',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'timer_gettime',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'ioctl',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'linkat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'stime',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'futimesat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'poll',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'select',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'unlink',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'faccessat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'swapon',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'epoll_wait',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'fchownat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'fstat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'timerfd_settime',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'mq_notify',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'sendfile',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'newfstat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'clock_nanosleep',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'unlinkat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'futex',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'recvmmsg',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'sendfile64',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'ppoll',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])}],
+ 'newfstat': [{'call': 'newlstat',
+               'reason': set([('compat_stat', 'st_ino'),
+                              ('compat_stat', 'st_nlink'),
+                              ('stat', 'st_ino'),
+                              ('stat', 'st_nlink')])},
+              {'call': 'newfstatat',
+               'reason': set([('compat_stat', 'st_ino'),
+                              ('compat_stat', 'st_nlink'),
+                              ('stat', 'st_ino'),
+                              ('stat', 'st_nlink')])},
+              {'call': 'newstat',
+               'reason': set([('compat_stat', 'st_ino'),
+                              ('compat_stat', 'st_nlink'),
+                              ('stat', 'st_ino'),
+                              ('stat', 'st_nlink')])},
+              {'call': 'fstat',
+               'reason': set([('kstat', 'dev'),
+                              ('kstat', 'ino'),
+                              ('kstat', 'nlink'),
+                              ('kstat', 'rdev'),
+                              ('kstat', 'size')])}],
+ 'newfstatat': [{'call': 'newlstat',
+                 'reason': set([('compat_stat', 'st_ino'),
+                                ('compat_stat', 'st_nlink'),
+                                ('stat', 'st_ino'),
+                                ('stat', 'st_nlink')])},
+                {'call': 'newstat',
+                 'reason': set([('compat_stat', 'st_ino'),
+                                ('compat_stat', 'st_nlink'),
+                                ('stat', 'st_ino'),
+                                ('stat', 'st_nlink')])},
+                {'call': 'fstat',
+                 'reason': set([('kstat', 'dev'),
+                                ('kstat', 'ino'),
+                                ('kstat', 'nlink'),
+                                ('kstat', 'rdev'),
+                                ('kstat', 'size')])},
+                {'call': 'newfstat',
+                 'reason': set([('compat_stat', 'st_ino'),
+                                ('compat_stat', 'st_nlink'),
+                                ('kstat', 'dev'),
+                                ('kstat', 'ino'),
+                                ('kstat', 'nlink'),
+                                ('kstat', 'rdev'),
+                                ('kstat', 'size'),
+                                ('stat', 'st_ino'),
+                                ('stat', 'st_nlink')])}],
+ 'newlstat': [{'call': 'newfstatat',
+               'reason': set([('compat_stat', 'st_ino'),
+                              ('compat_stat', 'st_nlink'),
+                              ('stat', 'st_ino'),
+                              ('stat', 'st_nlink')])},
+              {'call': 'newstat',
+               'reason': set([('compat_stat', 'st_ino'),
+                              ('compat_stat', 'st_nlink'),
+                              ('stat', 'st_ino'),
+                              ('stat', 'st_nlink')])},
+              {'call': 'fstat',
+               'reason': set([('kstat', 'dev'),
+                              ('kstat', 'ino'),
+                              ('kstat', 'nlink'),
+                              ('kstat', 'rdev'),
+                              ('kstat', 'size')])},
+              {'call': 'newfstat',
+               'reason': set([('compat_stat', 'st_ino'),
+                              ('compat_stat', 'st_nlink'),
+                              ('kstat', 'dev'),
+                              ('kstat', 'ino'),
+                              ('kstat', 'nlink'),
+                              ('kstat', 'rdev'),
+                              ('kstat', 'size'),
+                              ('stat', 'st_ino'),
+                              ('stat', 'st_nlink')])}],
+ 'newstat': [{'call': 'newlstat',
+              'reason': set([('compat_stat', 'st_ino'),
+                             ('compat_stat', 'st_nlink'),
+                             ('stat', 'st_ino'),
+                             ('stat', 'st_nlink')])},
+             {'call': 'newfstatat',
+              'reason': set([('compat_stat', 'st_ino'),
+                             ('compat_stat', 'st_nlink'),
+                             ('stat', 'st_ino'),
+                             ('stat', 'st_nlink')])},
+             {'call': 'fstat',
+              'reason': set([('kstat', 'dev'),
+                             ('kstat', 'ino'),
+                             ('kstat', 'nlink'),
+                             ('kstat', 'rdev'),
+                             ('kstat', 'size')])},
+             {'call': 'newfstat',
+              'reason': set([('compat_stat', 'st_ino'),
+                             ('compat_stat', 'st_nlink'),
+                             ('kstat', 'dev'),
+                             ('kstat', 'ino'),
+                             ('kstat', 'nlink'),
+                             ('kstat', 'rdev'),
+                             ('kstat', 'size'),
+                             ('stat', 'st_ino'),
+                             ('stat', 'st_nlink')])}],
+ 'newuname': [{'call': 'keyctl',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'msgrcv',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'kill',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ioprio_set',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'personality',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getppid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'capget',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'signal',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'umount',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setsid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'migrate_pages',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getitimer',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setpgid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getsid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'prlimit64',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getpgid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getpriority',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sigaction',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setns',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'fork',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ptrace',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getrusage',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setitimer',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ioprio_get',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'vfork',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'prctl',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'move_pages',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setpriority',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'clone',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'personality')])}],
+ 'old_getrlimit': [{'call': 'setrlimit',
+                    'reason': set([('rlimit', 'rlim_cur'),
+                                   ('rlimit', 'rlim_max')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('rlimit', 'rlim_cur'),
+                                   ('rlimit', 'rlim_max')])}],
+ 'old_readdir': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+                 {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+                 {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+                 {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+                 {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                 {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                 {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+                 {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                 {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+                 {'call': 'read', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+                 {'call': 'mq_timedreceive',
+                  'reason': set([('fd', 'flags')])},
+                 {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                 {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+                 {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+                 {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                 {'call': 'tee', 'reason': set([('fd', 'flags')])},
+                 {'call': 'sync_file_range',
+                  'reason': set([('fd', 'flags')])},
+                 {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                 {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                 {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+                 {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+                 {'call': 'flock', 'reason': set([('fd', 'flags')])},
+                 {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                 {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+                 {'call': 'inotify_rm_watch',
+                  'reason': set([('fd', 'flags')])},
+                 {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+                 {'call': 'inotify_add_watch',
+                  'reason': set([('fd', 'flags')])},
+                 {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                 {'call': 'splice', 'reason': set([('fd', 'flags')])},
+                 {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+                 {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                 {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+                 {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                 {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+                 {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                 {'call': 'perf_event_open',
+                  'reason': set([('fd', 'flags')])},
+                 {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+                 {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+                 {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                 {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                 {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+                 {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+                 {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+                 {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                 {'call': 'copy_file_range',
+                  'reason': set([('fd', 'flags')])},
+                 {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+                 {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+                 {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                 {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+                 {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+                 {'call': 'write', 'reason': set([('fd', 'flags')])},
+                 {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+                 {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+                 {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                 {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+                 {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'olduname': [{'call': 'keyctl',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'msgrcv',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'kill',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setparam',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'ioprio_set',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'personality',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getppid',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'capget',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'signal',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'semtimedop',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'umount',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setsid',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sigaltstack',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setattr',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'migrate_pages',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getitimer',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setpgid',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getsid',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'prlimit64',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'perf_event_open',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getpgid',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getpriority',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sigaction',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setns',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'fork',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'get_robust_list',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'ptrace',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_getattr',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getrusage',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setitimer',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'ioprio_get',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'vfork',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'prctl',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'move_pages',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setpriority',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'clone',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_getparam',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])}],
+ 'open_by_handle_at': [{'call': 'eventfd2',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'swapoff',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'pivot_root',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'memfd_create',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'remap_file_pages',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'dup3',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'unshare',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'epoll_create1',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'epoll_ctl',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'flock',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'openat',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'lookup_dcookie',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'uselib',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'accept4',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'socketpair',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'getcwd',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'shmat',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'socket',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'pipe2',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'perf_event_open',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'shmdt',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'quotactl',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'acct',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'open',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'dup',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'setns',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'shmctl',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'swapon',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'mmap_pgoff',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                       {'call': 'mq_open',
+                        'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'perf_event_open': [{'call': 'syncfs',
+                      'reason': set([('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'keyctl',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'rt_sigtimedwait',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'vmsplice',
+                      'reason': set([('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'msgrcv',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'eventfd2',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'mq_unlink',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'kill',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'swapoff',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'fremovexattr',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'readahead',
+                      'reason': set([('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                     {'call': 'timer_delete',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'sched_getaffinity',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sched_setparam',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'fchmod',
+                      'reason': set([('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'setgid',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pivot_root',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+                     {'call': 'memfd_create',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'ioprio_set',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'delete_module',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'remap_file_pages',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'dup3',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'readlinkat',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'read', 'reason': set([('fd', 'flags')])},
+                     {'call': 'io_getevents',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'getppid',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'fchown',
+                      'reason': set([('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'ioperm',
+                      'reason': set([('mm_segment_t', 'seg')])},
+                     {'call': 'mq_timedreceive',
+                      'reason': set([('fd', 'flags'),
+                                     ('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'capget',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sched_setaffinity',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'ustat',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                     {'call': 'bpf',
+                      'reason': set([('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'unshare',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'signal',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'setreuid',
+                      'reason': set([('list_head', 'prev'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'semtimedop',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'umount',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+                     {'call': 'timer_create',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                     {'call': 'mkdirat',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'sched_rr_get_interval',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'epoll_create1',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'timerfd_gettime',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'tee',
+                      'reason': set([('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'semctl',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'sync_file_range',
+                      'reason': set([('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                     {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getsockname',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'epoll_ctl',
+                      'reason': set([('fd', 'flags'),
+                                     ('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'flock',
+                      'reason': set([('fd', 'flags'),
+                                     ('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                     {'call': 'openat',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'lookup_dcookie',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'uselib',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'renameat2',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'rt_sigprocmask',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'accept4',
+                      'reason': set([('fd', 'flags'),
+                                     ('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'msgctl',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'reboot',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'setsid',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'set_trip_temp',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'sigaltstack',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'sched_setattr',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'old_readdir',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'inotify_rm_watch',
+                      'reason': set([('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'socketpair',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+                     {'call': 'migrate_pages',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'getitimer',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'fchmodat',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'setpgid',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'init_module',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'setresgid',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'getcwd',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'inotify_add_watch',
+                      'reason': set([('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'get_trip_temp',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                     {'call': 'timer_settime',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'setregid',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'splice',
+                      'reason': set([('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'ftruncate',
+                      'reason': set([('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'timer_gettime',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getpeername',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'getsid',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'shmat',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+                     {'call': 'mknodat',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'socket',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'symlinkat',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'pipe2',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                     {'call': 'ioctl',
+                      'reason': set([('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'prlimit64',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'linkat',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'getgroups16',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'shmdt',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'pwritev64v2',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'quotactl',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'rt_sigaction',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+                     {'call': 'request_key',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'getpgid',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'brk', 'reason': set([('list_head', 'prev')])},
+                     {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                     {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                     {'call': 'acct',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'open',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'unlink',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+                     {'call': 'exit_group',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'getpriority',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'sigaction',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'mq_getsetattr',
+                      'reason': set([('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'faccessat',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'rmdir',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'dup',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+                     {'call': 'setgroups16',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'setns',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fork',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'get_mempolicy',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'io_submit',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'get_robust_list',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'copy_file_range',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('fd', 'flags'),
+                                     ('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'sched_yield',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'sched_getscheduler',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+                     {'call': 'ptrace',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'shmctl',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'munlockall',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'swapon',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pkey_mprotect',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'madvise',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'epoll_wait',
+                      'reason': set([('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'sched_getattr',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'fchownat',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'getrusage',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'timerfd_settime',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'sched_setscheduler',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'setresuid',
+                      'reason': set([('list_head', 'prev'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'setitimer',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'ioprio_get',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'vfork',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'setuid',
+                      'reason': set([('list_head', 'prev'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                     {'call': 'io_setup',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'mprotect',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'mmap_pgoff',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'mremap',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'io_destroy',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'mbind',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+                     {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                     {'call': 'prctl',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'move_pages',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'timerfd_create',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                     {'call': 'modify_ldt',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'getgroups',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'dup2', 'reason': set([('list_head', 'prev')])},
+                     {'call': 'get_curr_temp',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'msgsnd',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'write', 'reason': set([('fd', 'flags')])},
+                     {'call': 'munlock',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'setpriority',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'inotify_init1',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'mincore',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'mq_notify',
+                      'reason': set([('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'sendfile',
+                      'reason': set([('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'timer_getoverrun',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'kexec_load',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'clone',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'mq_open',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'setgroups',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'unlinkat',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'sched_getparam',
+                      'reason': set([('list_head', 'prev'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'io_cancel',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'open_by_handle_at',
+                      'reason': set([('file', 'f_op'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                     {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+                     {'call': 'finit_module',
+                      'reason': set([('list_head', 'prev')])},
+                     {'call': 'sendfile64',
+                      'reason': set([('fd', 'flags'),
+                                     ('list_head', 'prev')])},
+                     {'call': 'mlockall',
+                      'reason': set([('list_head', 'prev')])}],
+ 'pivot_root': [{'call': 'eventfd2',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'mq_unlink',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent'),
+                                ('vfsmount', 'mnt_flags'),
+                                ('vfsmount', 'mnt_root')])},
+                {'call': 'swapoff',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'memfd_create',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'dup3',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'unshare',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'umount',
+                 'reason': set([('mount', 'mnt_ns'),
+                                ('mount', 'mnt_parent'),
+                                ('vfsmount', 'mnt_flags'),
+                                ('vfsmount', 'mnt_root')])},
+                {'call': 'mkdirat',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent')])},
+                {'call': 'epoll_create1',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'epoll_ctl',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'flock',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'openat',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'lookup_dcookie',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'uselib',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'renameat2',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent')])},
+                {'call': 'accept4',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'socketpair',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'getcwd',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent'),
+                                ('mount', 'mnt_ns'),
+                                ('mount', 'mnt_parent'),
+                                ('path', 'dentry'),
+                                ('path', 'mnt'),
+                                ('vfsmount', 'mnt_flags'),
+                                ('vfsmount', 'mnt_root')])},
+                {'call': 'ftruncate',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent')])},
+                {'call': 'shmat',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'mknodat',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent')])},
+                {'call': 'socket',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'symlinkat',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent')])},
+                {'call': 'pipe2',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'linkat',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent')])},
+                {'call': 'shmdt',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'quotactl',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'acct',
+                 'reason': set([('path', 'dentry'),
+                                ('path', 'mnt'),
+                                ('vfsmount', 'mnt_flags'),
+                                ('vfsmount', 'mnt_root')])},
+                {'call': 'open',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'unlink',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent')])},
+                {'call': 'rmdir',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent')])},
+                {'call': 'dup',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'setns',
+                 'reason': set([('nsproxy', 'mnt_ns'),
+                                ('path', 'dentry'),
+                                ('path', 'mnt')])},
+                {'call': 'shmctl',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'swapon',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'mmap_pgoff',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                {'call': 'mq_open',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent'),
+                                ('path', 'dentry'),
+                                ('path', 'mnt'),
+                                ('vfsmount', 'mnt_flags'),
+                                ('vfsmount', 'mnt_root')])},
+                {'call': 'unlinkat',
+                 'reason': set([('dentry', 'd_inode'),
+                                ('dentry', 'd_parent')])},
+                {'call': 'open_by_handle_at',
+                 'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'pkey_alloc': [{'call': 'swapoff',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'io_getevents',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'pkey_free',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'migrate_pages',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'shmdt',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'brk',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'get_mempolicy',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'getrusage',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'io_setup',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'mremap',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'io_destroy',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'mbind',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'prctl',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'move_pages',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'modify_ldt',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'mincore',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'io_cancel',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])}],
+ 'pkey_mprotect': [{'call': 'keyctl',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'rt_sigtimedwait',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'msgrcv',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'kill',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'sched_getaffinity',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'sched_setparam',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'ioprio_set',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'personality',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'remap_file_pages',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'getppid',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'capget',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'sched_setaffinity',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'signal',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'semtimedop',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'umount',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'sched_rr_get_interval',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'rt_sigprocmask',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'setsid',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'sigaltstack',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'sched_setattr',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'migrate_pages',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'getitimer',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'setpgid',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'getsid',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'shmdt',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'rt_sigaction',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'getpgid',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'brk',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'getpriority',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'sigaction',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'setns',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'fork',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'get_mempolicy',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'get_robust_list',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'sched_getscheduler',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'ptrace',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'munlockall',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'madvise',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'sched_getattr',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'getrusage',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'sched_setscheduler',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'setitimer',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'ioprio_get',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'vfork',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'mprotect',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'mremap',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'prctl',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality'),
+                                   ('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'move_pages',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'munlock',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'setpriority',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'mincore',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'clone',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'sched_getparam',
+                    'reason': set([('task_struct', 'mm'),
+                                   ('task_struct', 'personality')])},
+                   {'call': 'mlockall',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])}],
+ 'poll': [{'call': 'ppoll', 'reason': set([('poll_list', 'len')])}],
+ 'ppoll': [{'call': 'keyctl',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigtimedwait',
+            'reason': set([('task_struct', 'personality'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'msgrcv',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mq_unlink',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'kill', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'swapoff',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_getaffinity',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setparam',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'fchmod',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'memfd_create',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'ioprio_set',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'personality',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'readlinkat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'io_getevents',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'getppid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'fchown',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('task_struct', 'personality'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'capget',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'utime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_setaffinity',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'signal',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'semtimedop',
+            'reason': set([('task_struct', 'personality'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'umount',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'settimeofday',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('task_struct', 'personality'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'timerfd_gettime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'pselect6',
+            'reason': set([('compat_timespec', 'tv_nsec'),
+                           ('compat_timespec', 'tv_sec'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'uselib',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'rt_sigprocmask',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setsid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sigaltstack',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setattr',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'migrate_pages',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getitimer',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'fchmodat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'setpgid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'inotify_add_watch',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'timer_settime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'ftruncate',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'timer_gettime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'getsid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ioctl',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'prlimit64',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'perf_event_open',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'linkat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'stime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'rt_sigaction',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'futimesat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'getpgid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'poll',
+            'reason': set([('poll_list', 'len'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'select',
+            'reason': set([('compat_timespec', 'tv_nsec'),
+                           ('compat_timespec', 'tv_sec'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'unlink',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'getpriority',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sigaction',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'nanosleep',
+            'reason': set([('compat_timespec', 'tv_nsec'),
+                           ('compat_timespec', 'tv_sec'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'mq_getsetattr',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'faccessat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'setns', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'fork', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'get_robust_list',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('task_struct', 'personality'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'sched_getscheduler',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ptrace',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'swapon',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'epoll_wait',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_getattr',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'fchownat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'getrusage',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'fstat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'timerfd_settime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_setscheduler',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setitimer',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ioprio_get',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'vfork', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'prctl', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'move_pages',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setpriority',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mq_notify',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sendfile',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'newfstat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'clone', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'clock_nanosleep',
+            'reason': set([('compat_timespec', 'tv_nsec'),
+                           ('compat_timespec', 'tv_sec'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'unlinkat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_getparam',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'futex',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'recvmmsg',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sendfile64',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])}],
+ 'prctl': [{'call': 'keyctl',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'rt_sigtimedwait',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'msgrcv',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'kill',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'swapoff', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'sched_getaffinity',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_setparam',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'ioprio_set',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'personality',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'remap_file_pages',
+            'reason': set([('mm_struct', 'flags')])},
+           {'call': 'io_getevents', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'getppid',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'capget',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_setaffinity',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'signal',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'setreuid', 'reason': set([('task_struct', 'flags')])},
+           {'call': 'semtimedop',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'umount',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'rt_sigprocmask',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'setsid',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sigaltstack',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_setattr',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'migrate_pages',
+            'reason': set([('mm_struct', 'flags'),
+                           ('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'getitimer',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'setpgid',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'getsid',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'prlimit64',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'perf_event_open',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'shmdt', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'rt_sigaction',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'getpgid',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'brk', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'getpriority',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sigaction',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'setns',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'fork',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'get_mempolicy', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'get_robust_list',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_getscheduler',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'ptrace',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_getattr',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'getrusage',
+            'reason': set([('mm_struct', 'flags'),
+                           ('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_setscheduler',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'setresuid', 'reason': set([('task_struct', 'flags')])},
+           {'call': 'setitimer',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'ioprio_get',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'vfork',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'setuid', 'reason': set([('task_struct', 'flags')])},
+           {'call': 'io_setup', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'mremap', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'io_destroy', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'mbind', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'move_pages',
+            'reason': set([('mm_struct', 'flags'),
+                           ('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'modify_ldt', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'setpriority',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'mincore', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'clone',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_getparam',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'io_cancel', 'reason': set([('mm_struct', 'flags')])}],
+ 'pread64': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+             {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+             {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+             {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+             {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+             {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+             {'call': 'writev', 'reason': set([('fd', 'flags')])},
+             {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+             {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+             {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+             {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('file', 'f_mode')])},
+             {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+             {'call': 'read', 'reason': set([('fd', 'flags')])},
+             {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+             {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+             {'call': 'utime', 'reason': set([('fd', 'flags')])},
+             {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+             {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+             {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+             {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+             {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+             {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+             {'call': 'tee', 'reason': set([('fd', 'flags')])},
+             {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+             {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+             {'call': 'connect', 'reason': set([('fd', 'flags')])},
+             {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+             {'call': 'epoll_ctl',
+              'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+             {'call': 'flock',
+              'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+             {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+             {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+             {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+             {'call': 'accept4',
+              'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+             {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+             {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+             {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+             {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+             {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+             {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+             {'call': 'splice', 'reason': set([('fd', 'flags')])},
+             {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+             {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+             {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+             {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+             {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+             {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+             {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+             {'call': 'perf_event_open',
+              'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+             {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+             {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+             {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+             {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+             {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+             {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+             {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+             {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+             {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+             {'call': 'listen', 'reason': set([('fd', 'flags')])},
+             {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+             {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+             {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+             {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+             {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+             {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+             {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+             {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+             {'call': 'readv', 'reason': set([('fd', 'flags')])},
+             {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+             {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+             {'call': 'write', 'reason': set([('fd', 'flags')])},
+             {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+             {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+             {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open_by_handle_at',
+              'reason': set([('file', 'f_mode')])},
+             {'call': 'bind', 'reason': set([('fd', 'flags')])},
+             {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+             {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'preadv': [{'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+            {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+            {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+            {'call': 'remap_file_pages', 'reason': set([('file', 'f_mode')])},
+            {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+            {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+            {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+            {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+            {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+            {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+            {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+            {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+            {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+            {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+            {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+            {'call': 'perf_event_open', 'reason': set([('file', 'f_mode')])},
+            {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+            {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+            {'call': 'open', 'reason': set([('file', 'f_mode')])},
+            {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+            {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+            {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+            {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+            {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+            {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('file', 'f_mode')])}],
+ 'preadv2': [{'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('file', 'f_mode')])},
+             {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+             {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+             {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+             {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+             {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+             {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+             {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+             {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'perf_event_open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+             {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+             {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+             {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+             {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+             {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open_by_handle_at',
+              'reason': set([('file', 'f_mode')])}],
+ 'preadv64': [{'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+              {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+              {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+              {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+              {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+              {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+              {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'perf_event_open',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+              {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+              {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+              {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+              {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('file', 'f_mode')])}],
+ 'preadv64v2': [{'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+                {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+                {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('file', 'f_mode')])},
+                {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+                {'call': 'epoll_create1',
+                 'reason': set([('file', 'f_mode')])},
+                {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+                {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+                {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+                {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+                {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+                {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+                {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+                {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+                {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('file', 'f_mode')])},
+                {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+                {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+                {'call': 'open', 'reason': set([('file', 'f_mode')])},
+                {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+                {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+                {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+                {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+                {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+                {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+                {'call': 'open_by_handle_at',
+                 'reason': set([('file', 'f_mode')])}],
+ 'prlimit64': [{'call': 'keyctl',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setfsuid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'msgrcv',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'kill',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getresuid16', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'getresgid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_setparam',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setgid',
+                'reason': set([('cred', 'egid'),
+                               ('cred', 'gid'),
+                               ('cred', 'sgid'),
+                               ('cred', 'user_ns')])},
+               {'call': 'ioprio_set',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'capset', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'getppid',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getresgid16', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'capget',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setfsgid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'unshare', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'signal',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setreuid',
+                'reason': set([('cred', 'euid'),
+                               ('cred', 'suid'),
+                               ('cred', 'uid'),
+                               ('cred', 'user_ns')])},
+               {'call': 'semtimedop',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'umount',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'epoll_create1',
+                'reason': set([('cred', 'user_ns')])},
+               {'call': 'getresuid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setsid',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sigaltstack',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_setattr',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setrlimit',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max')])},
+               {'call': 'migrate_pages',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getitimer',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setpgid',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setresgid',
+                'reason': set([('cred', 'egid'),
+                               ('cred', 'gid'),
+                               ('cred', 'sgid'),
+                               ('cred', 'user_ns')])},
+               {'call': 'setregid',
+                'reason': set([('cred', 'egid'),
+                               ('cred', 'gid'),
+                               ('cred', 'sgid'),
+                               ('cred', 'user_ns')])},
+               {'call': 'getsid',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'old_getrlimit',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max')])},
+               {'call': 'perf_event_open',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getgroups16', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getpgid',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getpriority',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sigaction',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'faccessat', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'setns',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'fork',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'get_robust_list',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'ptrace',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_getattr',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getrusage',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setresuid',
+                'reason': set([('cred', 'euid'),
+                               ('cred', 'suid'),
+                               ('cred', 'uid'),
+                               ('cred', 'user_ns')])},
+               {'call': 'setitimer',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'ioprio_get',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'vfork',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setuid',
+                'reason': set([('cred', 'euid'),
+                               ('cred', 'suid'),
+                               ('cred', 'uid'),
+                               ('cred', 'user_ns')])},
+               {'call': 'prctl',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'move_pages',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getgroups', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'setpriority',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'clone',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_getparam',
+                'reason': set([('task_struct', 'cred'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'real_cred'),
+                               ('task_struct', 'sighand')])}],
+ 'pselect6': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_unlink',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'swapoff',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sched_setparam',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fchmod',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'memfd_create',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'ioprio_set',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'readlinkat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'io_getevents',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fchown',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'utime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'semtimedop',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'settimeofday',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timerfd_gettime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'uselib',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sigaltstack',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sched_setattr',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'migrate_pages',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'getitimer', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fchmodat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'inotify_add_watch',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timer_settime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'ftruncate',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timer_gettime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'ioctl',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'prlimit64', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'perf_event_open',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'linkat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'stime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'futimesat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'poll',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'select',
+               'reason': set([('compat_timespec', 'tv_nsec'),
+                              ('compat_timespec', 'tv_sec'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'unlink',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'getpriority',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'nanosleep',
+               'reason': set([('compat_timespec', 'tv_nsec'),
+                              ('compat_timespec', 'tv_sec'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'mq_getsetattr',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'faccessat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'get_robust_list',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'swapon',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'epoll_wait',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_getattr',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fchownat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'getrusage', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fstat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timerfd_settime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'setitimer', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'ioprio_get',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'move_pages',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'setpriority',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_notify',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sendfile',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'newfstat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'clock_nanosleep',
+               'reason': set([('compat_timespec', 'tv_nsec'),
+                              ('compat_timespec', 'tv_sec'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'unlinkat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_getparam',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'futex',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'recvmmsg',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sendfile64',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'ppoll',
+               'reason': set([('compat_timespec', 'tv_nsec'),
+                              ('compat_timespec', 'tv_sec'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])}],
+ 'ptrace': [{'call': 'keyctl',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'msgrcv',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'kill',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'pause', 'reason': set([('task_struct', 'state')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'ioprio_set',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'getppid',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'capget',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'signal',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'setreuid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'semtimedop',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'umount',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'setsid',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'sigaltstack',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'migrate_pages',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'getitimer',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'setpgid',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'rt_sigsuspend',
+             'reason': set([('task_struct', 'state')])},
+            {'call': 'getsid',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'prlimit64',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'getpgid',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'getpriority',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'sigaction',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'setns',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'fork',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'epoll_wait', 'reason': set([('task_struct', 'state')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'getrusage',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'setresuid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'setitimer',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'ioprio_get',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'vfork',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'setuid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'prctl',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'move_pages',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'setpriority',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'clone',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])},
+            {'call': 'sigsuspend', 'reason': set([('task_struct', 'state')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'parent'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'real_parent'),
+                            ('task_struct', 'state')])}],
+ 'pwrite64': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+              {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+              {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+              {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+              {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+              {'call': 'writev', 'reason': set([('fd', 'flags')])},
+              {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+              {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+              {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+              {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+              {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+              {'call': 'read', 'reason': set([('fd', 'flags')])},
+              {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+              {'call': 'utime', 'reason': set([('fd', 'flags')])},
+              {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+              {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+              {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+              {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+              {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+              {'call': 'tee', 'reason': set([('fd', 'flags')])},
+              {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+              {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+              {'call': 'connect', 'reason': set([('fd', 'flags')])},
+              {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+              {'call': 'epoll_ctl',
+               'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+              {'call': 'flock',
+               'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+              {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+              {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+              {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+              {'call': 'accept4',
+               'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+              {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+              {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+              {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+              {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+              {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+              {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+              {'call': 'splice', 'reason': set([('fd', 'flags')])},
+              {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+              {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+              {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+              {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+              {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+              {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+              {'call': 'perf_event_open',
+               'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+              {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+              {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+              {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+              {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+              {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+              {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+              {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+              {'call': 'listen', 'reason': set([('fd', 'flags')])},
+              {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+              {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+              {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+              {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+              {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+              {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+              {'call': 'readv', 'reason': set([('fd', 'flags')])},
+              {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+              {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+              {'call': 'write', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+              {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'bind', 'reason': set([('fd', 'flags')])},
+              {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'pwritev': [{'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('file', 'f_mode')])},
+             {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+             {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+             {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+             {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+             {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+             {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+             {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+             {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'perf_event_open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+             {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+             {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+             {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+             {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+             {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open_by_handle_at',
+              'reason': set([('file', 'f_mode')])}],
+ 'pwritev2': [{'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+              {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+              {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+              {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+              {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+              {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+              {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'perf_event_open',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+              {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+              {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+              {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+              {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('file', 'f_mode')])}],
+ 'pwritev64': [{'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+               {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+               {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('file', 'f_mode')])},
+               {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+               {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+               {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+               {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+               {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+               {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+               {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+               {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+               {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+               {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+               {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+               {'call': 'perf_event_open',
+                'reason': set([('file', 'f_mode')])},
+               {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+               {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+               {'call': 'open', 'reason': set([('file', 'f_mode')])},
+               {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+               {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+               {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+               {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+               {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+               {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('file', 'f_mode')])}],
+ 'pwritev64v2': [{'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'memfd_create',
+                  'reason': set([('file', 'f_mode')])},
+                 {'call': 'remap_file_pages',
+                  'reason': set([('file', 'f_mode')])},
+                 {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'epoll_create1',
+                  'reason': set([('file', 'f_mode')])},
+                 {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'perf_event_open',
+                  'reason': set([('file', 'f_mode')])},
+                 {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'open', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'open_by_handle_at',
+                  'reason': set([('file', 'f_mode')])}],
+ 'quotactl': [{'call': 'syncfs',
+               'reason': set([('super_block', 's_flags'),
+                              ('super_block', 's_qcop'),
+                              ('super_block', 's_quota_types')])},
+              {'call': 'sysfs', 'reason': set([('filename', 'name')])},
+              {'call': 'mq_unlink', 'reason': set([('filename', 'name')])},
+              {'call': 'swapoff', 'reason': set([('filename', 'name')])},
+              {'call': 'ustat',
+               'reason': set([('super_block', 's_flags'),
+                              ('super_block', 's_qcop'),
+                              ('super_block', 's_quota_types')])},
+              {'call': 'umount',
+               'reason': set([('super_block', 's_flags'),
+                              ('super_block', 's_qcop'),
+                              ('super_block', 's_quota_types')])},
+              {'call': 'openat', 'reason': set([('filename', 'name')])},
+              {'call': 'uselib', 'reason': set([('filename', 'name')])},
+              {'call': 'renameat2', 'reason': set([('filename', 'name')])},
+              {'call': 'symlinkat', 'reason': set([('filename', 'name')])},
+              {'call': 'acct', 'reason': set([('filename', 'name')])},
+              {'call': 'open', 'reason': set([('filename', 'name')])},
+              {'call': 'unlink', 'reason': set([('filename', 'name')])},
+              {'call': 'rmdir', 'reason': set([('filename', 'name')])},
+              {'call': 'swapon',
+               'reason': set([('filename', 'name'),
+                              ('super_block', 's_flags'),
+                              ('super_block', 's_qcop'),
+                              ('super_block', 's_quota_types')])},
+              {'call': 'mq_open', 'reason': set([('filename', 'name')])},
+              {'call': 'unlinkat', 'reason': set([('filename', 'name')])}],
+ 'read': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+          {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+          {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+          {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+          {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+          {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+          {'call': 'writev', 'reason': set([('fd', 'flags')])},
+          {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+          {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+          {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+          {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+          {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+          {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+          {'call': 'utime', 'reason': set([('fd', 'flags')])},
+          {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+          {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+          {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+          {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+          {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+          {'call': 'tee', 'reason': set([('fd', 'flags')])},
+          {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+          {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+          {'call': 'connect', 'reason': set([('fd', 'flags')])},
+          {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+          {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+          {'call': 'flock', 'reason': set([('fd', 'flags')])},
+          {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+          {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+          {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+          {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+          {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+          {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+          {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+          {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+          {'call': 'splice', 'reason': set([('fd', 'flags')])},
+          {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+          {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+          {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+          {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+          {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+          {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+          {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+          {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+          {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+          {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+          {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+          {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+          {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+          {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+          {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+          {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+          {'call': 'listen', 'reason': set([('fd', 'flags')])},
+          {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+          {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+          {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+          {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+          {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+          {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+          {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+          {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+          {'call': 'readv', 'reason': set([('fd', 'flags')])},
+          {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+          {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+          {'call': 'write', 'reason': set([('fd', 'flags')])},
+          {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+          {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+          {'call': 'bind', 'reason': set([('fd', 'flags')])},
+          {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+          {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'readahead': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+               {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+               {'call': 'mq_unlink',
+                'reason': set([('address_space', 'a_ops')])},
+               {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+               {'call': 'swapoff',
+                'reason': set([('address_space', 'a_ops'),
+                               ('file', 'f_mode')])},
+               {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+               {'call': 'writev', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchmod',
+                'reason': set([('address_space', 'a_ops'), ('fd', 'flags')])},
+               {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+               {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+               {'call': 'memfd_create',
+                'reason': set([('address_space', 'a_ops'),
+                               ('file', 'f_mode')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('file', 'f_mode')])},
+               {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+               {'call': 'readlinkat',
+                'reason': set([('address_space', 'a_ops')])},
+               {'call': 'read', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchown',
+                'reason': set([('address_space', 'a_ops'), ('fd', 'flags')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('address_space', 'a_ops'), ('fd', 'flags')])},
+               {'call': 'utime', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+               {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+               {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+               {'call': 'tee', 'reason': set([('fd', 'flags')])},
+               {'call': 'sync_file_range',
+                'reason': set([('address_space', 'a_ops'), ('fd', 'flags')])},
+               {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'connect', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_ctl',
+                'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+               {'call': 'flock',
+                'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+               {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+               {'call': 'uselib',
+                'reason': set([('address_space', 'a_ops'),
+                               ('file', 'f_mode')])},
+               {'call': 'accept4',
+                'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+               {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+               {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+               {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchmodat',
+                'reason': set([('address_space', 'a_ops')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('address_space', 'a_ops'), ('fd', 'flags')])},
+               {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+               {'call': 'splice', 'reason': set([('fd', 'flags')])},
+               {'call': 'ftruncate',
+                'reason': set([('address_space', 'a_ops'), ('fd', 'flags')])},
+               {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+               {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+               {'call': 'shmat',
+                'reason': set([('address_space', 'a_ops'),
+                               ('file', 'f_mode')])},
+               {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+               {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+               {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+               {'call': 'ioctl',
+                'reason': set([('address_space', 'a_ops'), ('fd', 'flags')])},
+               {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+               {'call': 'perf_event_open',
+                'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+               {'call': 'linkat',
+                'reason': set([('address_space', 'a_ops')])},
+               {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+               {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+               {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+               {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+               {'call': 'open', 'reason': set([('file', 'f_mode')])},
+               {'call': 'unlink',
+                'reason': set([('address_space', 'a_ops')])},
+               {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('address_space', 'a_ops'), ('fd', 'flags')])},
+               {'call': 'faccessat',
+                'reason': set([('address_space', 'a_ops')])},
+               {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+               {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+               {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+               {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+               {'call': 'listen', 'reason': set([('fd', 'flags')])},
+               {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('address_space', 'a_ops'), ('fd', 'flags')])},
+               {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+               {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+               {'call': 'swapon',
+                'reason': set([('address_space', 'a_ops'),
+                               ('file', 'f_mode')])},
+               {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchownat',
+                'reason': set([('address_space', 'a_ops')])},
+               {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+               {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'readv', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+               {'call': 'write', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_notify',
+                'reason': set([('address_space', 'a_ops'), ('fd', 'flags')])},
+               {'call': 'sendfile',
+                'reason': set([('address_space', 'a_ops'), ('fd', 'flags')])},
+               {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+               {'call': 'unlinkat',
+                'reason': set([('address_space', 'a_ops')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('file', 'f_mode')])},
+               {'call': 'bind', 'reason': set([('fd', 'flags')])},
+               {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile64',
+                'reason': set([('address_space', 'a_ops'), ('fd', 'flags')])}],
+ 'readlinkat': [{'call': 'eventfd2', 'reason': set([('path', 'dentry')])},
+                {'call': 'swapoff', 'reason': set([('path', 'dentry')])},
+                {'call': 'pivot_root', 'reason': set([('path', 'dentry')])},
+                {'call': 'memfd_create', 'reason': set([('path', 'dentry')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('path', 'dentry')])},
+                {'call': 'dup3', 'reason': set([('path', 'dentry')])},
+                {'call': 'unshare', 'reason': set([('path', 'dentry')])},
+                {'call': 'epoll_create1',
+                 'reason': set([('path', 'dentry')])},
+                {'call': 'epoll_ctl', 'reason': set([('path', 'dentry')])},
+                {'call': 'flock', 'reason': set([('path', 'dentry')])},
+                {'call': 'openat', 'reason': set([('path', 'dentry')])},
+                {'call': 'lookup_dcookie',
+                 'reason': set([('path', 'dentry')])},
+                {'call': 'uselib', 'reason': set([('path', 'dentry')])},
+                {'call': 'accept4', 'reason': set([('path', 'dentry')])},
+                {'call': 'socketpair', 'reason': set([('path', 'dentry')])},
+                {'call': 'getcwd', 'reason': set([('path', 'dentry')])},
+                {'call': 'shmat', 'reason': set([('path', 'dentry')])},
+                {'call': 'socket', 'reason': set([('path', 'dentry')])},
+                {'call': 'pipe2', 'reason': set([('path', 'dentry')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('path', 'dentry')])},
+                {'call': 'shmdt', 'reason': set([('path', 'dentry')])},
+                {'call': 'quotactl', 'reason': set([('path', 'dentry')])},
+                {'call': 'acct', 'reason': set([('path', 'dentry')])},
+                {'call': 'open', 'reason': set([('path', 'dentry')])},
+                {'call': 'dup', 'reason': set([('path', 'dentry')])},
+                {'call': 'setns', 'reason': set([('path', 'dentry')])},
+                {'call': 'shmctl', 'reason': set([('path', 'dentry')])},
+                {'call': 'swapon', 'reason': set([('path', 'dentry')])},
+                {'call': 'mmap_pgoff', 'reason': set([('path', 'dentry')])},
+                {'call': 'mq_open', 'reason': set([('path', 'dentry')])},
+                {'call': 'open_by_handle_at',
+                 'reason': set([('path', 'dentry')])}],
+ 'reboot': [{'call': 'perf_event_open',
+             'reason': set([('pid_namespace', 'user_ns')])},
+            {'call': 'acct', 'reason': set([('pid_namespace', 'user_ns')])},
+            {'call': 'setns', 'reason': set([('pid_namespace', 'user_ns')])}],
+ 'recvfrom': [{'call': 'eventfd2', 'reason': set([('file', 'f_flags')])},
+              {'call': 'swapoff', 'reason': set([('file', 'f_flags')])},
+              {'call': 'memfd_create', 'reason': set([('file', 'f_flags')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('file', 'f_flags')])},
+              {'call': 'dup3', 'reason': set([('file', 'f_flags')])},
+              {'call': 'epoll_create1', 'reason': set([('file', 'f_flags')])},
+              {'call': 'epoll_ctl', 'reason': set([('file', 'f_flags')])},
+              {'call': 'flock', 'reason': set([('file', 'f_flags')])},
+              {'call': 'openat', 'reason': set([('file', 'f_flags')])},
+              {'call': 'uselib', 'reason': set([('file', 'f_flags')])},
+              {'call': 'accept4', 'reason': set([('file', 'f_flags')])},
+              {'call': 'socketpair', 'reason': set([('file', 'f_flags')])},
+              {'call': 'shmat', 'reason': set([('file', 'f_flags')])},
+              {'call': 'socket', 'reason': set([('file', 'f_flags')])},
+              {'call': 'pipe2', 'reason': set([('file', 'f_flags')])},
+              {'call': 'perf_event_open',
+               'reason': set([('file', 'f_flags')])},
+              {'call': 'shmdt', 'reason': set([('file', 'f_flags')])},
+              {'call': 'acct', 'reason': set([('file', 'f_flags')])},
+              {'call': 'open', 'reason': set([('file', 'f_flags')])},
+              {'call': 'mq_getsetattr', 'reason': set([('file', 'f_flags')])},
+              {'call': 'dup', 'reason': set([('file', 'f_flags')])},
+              {'call': 'setns', 'reason': set([('file', 'f_flags')])},
+              {'call': 'shmctl', 'reason': set([('file', 'f_flags')])},
+              {'call': 'swapon', 'reason': set([('file', 'f_flags')])},
+              {'call': 'mmap_pgoff', 'reason': set([('file', 'f_flags')])},
+              {'call': 'mq_open', 'reason': set([('file', 'f_flags')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('file', 'f_flags')])}],
+ 'recvmmsg': [{'call': 'rt_sigtimedwait',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'mq_unlink',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'swapoff',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'fchmod',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'memfd_create',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'readlinkat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'io_getevents',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'fchown',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'utime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'semtimedop',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'recvfrom',
+               'reason': set([('msghdr', 'msg_flags'),
+                              ('socket', 'file'),
+                              ('socket', 'sk')])},
+              {'call': 'settimeofday',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sendto',
+               'reason': set([('msghdr', 'msg_flags'),
+                              ('socket', 'file'),
+                              ('socket', 'sk')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timerfd_gettime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'connect',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'getsockname',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'pselect6',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'uselib',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'accept4',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'fchmodat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'inotify_add_watch',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timer_settime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'ftruncate',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timer_gettime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'getpeername',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'setsockopt',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'ioctl',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'linkat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sendmsg',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'stime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'futimesat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'shutdown',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'poll',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'select',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'unlink',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'getsockopt',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'nanosleep',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'mq_getsetattr',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'faccessat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'listen',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'swapon',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'epoll_wait',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'fchownat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'fstat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timerfd_settime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'recvmsg',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'mq_notify',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sendfile',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sendmmsg',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'newfstat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'clock_nanosleep',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'unlinkat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'bind',
+               'reason': set([('socket', 'file'), ('socket', 'sk')])},
+              {'call': 'futex',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sendfile64',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'ppoll',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])}],
+ 'recvmsg': [{'call': 'recvfrom', 'reason': set([('socket', 'file')])},
+             {'call': 'sendto', 'reason': set([('socket', 'file')])},
+             {'call': 'connect', 'reason': set([('socket', 'file')])},
+             {'call': 'getsockname', 'reason': set([('socket', 'file')])},
+             {'call': 'accept4', 'reason': set([('socket', 'file')])},
+             {'call': 'getpeername', 'reason': set([('socket', 'file')])},
+             {'call': 'setsockopt', 'reason': set([('socket', 'file')])},
+             {'call': 'sendmsg', 'reason': set([('socket', 'file')])},
+             {'call': 'shutdown', 'reason': set([('socket', 'file')])},
+             {'call': 'getsockopt', 'reason': set([('socket', 'file')])},
+             {'call': 'listen', 'reason': set([('socket', 'file')])},
+             {'call': 'sendmmsg', 'reason': set([('socket', 'file')])},
+             {'call': 'bind', 'reason': set([('socket', 'file')])},
+             {'call': 'recvmmsg', 'reason': set([('socket', 'file')])}],
+ 'remap_file_pages': [{'call': 'shmdt',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'brk',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'get_mempolicy',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'munlockall',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'pkey_mprotect',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'madvise',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'mprotect',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'mremap',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'prctl',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'munlock',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'mincore',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'mlockall',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_file'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])}],
+ 'removexattr': [{'call': 'eventfd2',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'swapoff',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'pivot_root',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'memfd_create',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'remap_file_pages',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'dup3',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'unshare',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'epoll_create1',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'epoll_ctl',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'flock',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'openat',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'lookup_dcookie',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'uselib',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'accept4',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'socketpair',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'getcwd',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'shmat',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'socket',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'pipe2',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'perf_event_open',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'shmdt',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'quotactl',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'acct',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'open',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'dup',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'setns',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'shmctl',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'swapon',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'mmap_pgoff',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'mq_open',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+                 {'call': 'open_by_handle_at',
+                  'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'renameat2': [{'call': 'sysfs',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'eventfd2',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'mq_unlink',
+                'reason': set([('dentry', 'd_inode'),
+                               ('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'swapoff',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt'),
+                               ('path', 'dentry'),
+                               ('path', 'mnt')])},
+               {'call': 'pivot_root',
+                'reason': set([('dentry', 'd_inode'),
+                               ('path', 'dentry'),
+                               ('path', 'mnt')])},
+               {'call': 'memfd_create',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'dup3',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'unshare',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'mkdirat', 'reason': set([('dentry', 'd_inode')])},
+               {'call': 'epoll_create1',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'epoll_ctl',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'flock',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'openat',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt'),
+                               ('path', 'dentry'),
+                               ('path', 'mnt')])},
+               {'call': 'lookup_dcookie',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'uselib',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt'),
+                               ('path', 'dentry'),
+                               ('path', 'mnt')])},
+               {'call': 'accept4',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'socketpair',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'getcwd',
+                'reason': set([('dentry', 'd_inode'),
+                               ('path', 'dentry'),
+                               ('path', 'mnt')])},
+               {'call': 'ftruncate', 'reason': set([('dentry', 'd_inode')])},
+               {'call': 'shmat',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'mknodat', 'reason': set([('dentry', 'd_inode')])},
+               {'call': 'socket',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'symlinkat',
+                'reason': set([('dentry', 'd_inode'),
+                               ('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'pipe2',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'perf_event_open',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'linkat', 'reason': set([('dentry', 'd_inode')])},
+               {'call': 'shmdt',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'quotactl',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt'),
+                               ('path', 'dentry'),
+                               ('path', 'mnt')])},
+               {'call': 'acct',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt'),
+                               ('path', 'dentry'),
+                               ('path', 'mnt')])},
+               {'call': 'open',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt'),
+                               ('path', 'dentry'),
+                               ('path', 'mnt')])},
+               {'call': 'unlink',
+                'reason': set([('dentry', 'd_inode'),
+                               ('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'rmdir',
+                'reason': set([('dentry', 'd_inode'),
+                               ('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'dup',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'setns',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'shmctl',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'swapon',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt'),
+                               ('path', 'dentry'),
+                               ('path', 'mnt')])},
+               {'call': 'mmap_pgoff',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+               {'call': 'mq_open',
+                'reason': set([('dentry', 'd_inode'),
+                               ('filename', 'name'),
+                               ('filename', 'refcnt'),
+                               ('path', 'dentry'),
+                               ('path', 'mnt')])},
+               {'call': 'unlinkat',
+                'reason': set([('dentry', 'd_inode'),
+                               ('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'rmdir': [{'call': 'eventfd2',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'mq_unlink', 'reason': set([('dentry', 'd_inode')])},
+           {'call': 'swapoff',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'pivot_root',
+            'reason': set([('dentry', 'd_inode'),
+                           ('path', 'dentry'),
+                           ('path', 'mnt')])},
+           {'call': 'memfd_create',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'remap_file_pages',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'dup3',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'unshare',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'mkdirat', 'reason': set([('dentry', 'd_inode')])},
+           {'call': 'epoll_create1',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'epoll_ctl',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'flock',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'openat',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'lookup_dcookie',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'uselib',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'renameat2', 'reason': set([('dentry', 'd_inode')])},
+           {'call': 'accept4',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'socketpair',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'getcwd',
+            'reason': set([('dentry', 'd_inode'),
+                           ('path', 'dentry'),
+                           ('path', 'mnt')])},
+           {'call': 'ftruncate', 'reason': set([('dentry', 'd_inode')])},
+           {'call': 'shmat',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'mknodat', 'reason': set([('dentry', 'd_inode')])},
+           {'call': 'socket',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'symlinkat', 'reason': set([('dentry', 'd_inode')])},
+           {'call': 'pipe2',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'perf_event_open',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'linkat', 'reason': set([('dentry', 'd_inode')])},
+           {'call': 'shmdt',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'quotactl',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'acct',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'open',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'unlink', 'reason': set([('dentry', 'd_inode')])},
+           {'call': 'dup',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'setns',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'shmctl',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'swapon',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'mmap_pgoff',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+           {'call': 'mq_open',
+            'reason': set([('dentry', 'd_inode'),
+                           ('path', 'dentry'),
+                           ('path', 'mnt')])},
+           {'call': 'unlinkat', 'reason': set([('dentry', 'd_inode')])},
+           {'call': 'open_by_handle_at',
+            'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'rt_sigqueueinfo': [{'call': 'rt_sigtimedwait',
+                      'reason': set([('siginfo', 'si_code')])},
+                     {'call': 'kill',
+                      'reason': set([('siginfo', 'si_code')])},
+                     {'call': 'timer_create',
+                      'reason': set([('siginfo', 'si_code')])},
+                     {'call': 'tgkill',
+                      'reason': set([('siginfo', 'si_code')])},
+                     {'call': 'rt_tgsigqueueinfo',
+                      'reason': set([('siginfo', 'si_code')])},
+                     {'call': 'rt_sigreturn',
+                      'reason': set([('siginfo', 'si_code')])},
+                     {'call': 'tkill',
+                      'reason': set([('siginfo', 'si_code')])}],
+ 'rt_sigreturn': [{'call': 'keyctl',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'rt_sigtimedwait',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'msgrcv',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'kill',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_getaffinity',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_setparam',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'ioprio_set',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'getppid',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'ioperm',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'mq_timedreceive',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'capget',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_setaffinity',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'signal',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'semtimedop',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'umount',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_rr_get_interval',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'rt_sigprocmask',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'setsid',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sigaltstack',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_setattr',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'migrate_pages',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'getitimer',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'setpgid',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'getsid',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'prlimit64',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'perf_event_open',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'rt_sigaction',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'getpgid',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'getpriority',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sigaction',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'setns',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'fork',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'get_robust_list',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'mq_timedsend',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_getscheduler',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'ptrace',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_getattr',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'getrusage',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_setscheduler',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'setitimer',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'ioprio_get',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'vfork',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'prctl',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'move_pages',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'setpriority',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'clone',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_getparam',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])}],
+ 'rt_sigtimedwait': [{'call': 'keyctl',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'msgrcv',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'kill',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_getaffinity',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_setparam',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'ioprio_set',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'getppid',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'ioperm',
+                      'reason': set([('mm_segment_t', 'seg')])},
+                     {'call': 'mq_timedreceive',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'capget',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_setaffinity',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'signal',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'semtimedop',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'umount',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'timer_create',
+                      'reason': set([('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo')])},
+                     {'call': 'sched_rr_get_interval',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'rt_sigqueueinfo',
+                      'reason': set([('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo')])},
+                     {'call': 'tgkill',
+                      'reason': set([('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo')])},
+                     {'call': 'rt_sigprocmask',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'setsid',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sigaltstack',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_setattr',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'migrate_pages',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'getitimer',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'setpgid',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'getsid',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'prlimit64',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'perf_event_open',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'rt_sigaction',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'getpgid',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'getpriority',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sigaction',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'rt_tgsigqueueinfo',
+                      'reason': set([('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo')])},
+                     {'call': 'setns',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'fork',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'get_robust_list',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_getscheduler',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'ptrace',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_getattr',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'getrusage',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_setscheduler',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'setitimer',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'ioprio_get',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'vfork',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'prctl',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'move_pages',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'rt_sigreturn',
+                      'reason': set([('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo')])},
+                     {'call': 'tkill',
+                      'reason': set([('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo')])},
+                     {'call': 'setpriority',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'clone',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_getparam',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])}],
+ 'rt_tgsigqueueinfo': [{'call': 'rt_sigtimedwait',
+                        'reason': set([('siginfo', 'si_code')])},
+                       {'call': 'kill',
+                        'reason': set([('siginfo', 'si_code')])},
+                       {'call': 'timer_create',
+                        'reason': set([('siginfo', 'si_code')])},
+                       {'call': 'rt_sigqueueinfo',
+                        'reason': set([('siginfo', 'si_code')])},
+                       {'call': 'tgkill',
+                        'reason': set([('siginfo', 'si_code')])},
+                       {'call': 'rt_sigreturn',
+                        'reason': set([('siginfo', 'si_code')])},
+                       {'call': 'tkill',
+                        'reason': set([('siginfo', 'si_code')])}],
+ 'sched_getattr': [{'call': 'keyctl',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'rt_sigtimedwait',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'msgrcv',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'kill',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_getaffinity',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_setparam',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'ioprio_set',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'getppid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'ioperm',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'capget',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_setaffinity',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'signal',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'semtimedop',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'umount',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_rr_get_interval',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'rt_sigprocmask',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'setsid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sigaltstack',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_setattr',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('sched_attr', 'size'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'migrate_pages',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'getitimer',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'setpgid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'getsid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'rt_sigaction',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'getpgid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'getpriority',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sigaction',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'setns',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'fork',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'get_robust_list',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_getscheduler',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'ptrace',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'getrusage',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_setscheduler',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'setitimer',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'ioprio_get',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'vfork',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'prctl',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'move_pages',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'setpriority',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'clone',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_getparam',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])}],
+ 'sched_getparam': [{'call': 'keyctl',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'rt_sigtimedwait',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'msgrcv',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'kill',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_getaffinity',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_setparam',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'ioprio_set',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'getppid',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'mq_timedreceive',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'capget',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_setaffinity',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'signal',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'semtimedop',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'umount',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_rr_get_interval',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'rt_sigprocmask',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'setsid',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sigaltstack',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_setattr',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'migrate_pages',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'getitimer',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'setpgid',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'getsid',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'prlimit64',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'perf_event_open',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'rt_sigaction',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'getpgid',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'getpriority',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sigaction',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'setns',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'fork',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'get_robust_list',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'mq_timedsend',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_getscheduler',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'ptrace',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_getattr',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'getrusage',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_setscheduler',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'setitimer',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'ioprio_get',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'vfork',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'prctl',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'move_pages',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'setpriority',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'clone',
+                     'reason': set([('task_struct', 'policy')])}],
+ 'sched_getscheduler': [{'call': 'keyctl',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'rt_sigtimedwait',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'msgrcv',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'kill',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_getaffinity',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_setparam',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'ioprio_set',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'getppid',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'mq_timedreceive',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'capget',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_setaffinity',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'signal',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'semtimedop',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'umount',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_rr_get_interval',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'rt_sigprocmask',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'setsid',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sigaltstack',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_setattr',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'migrate_pages',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'getitimer',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'setpgid',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'getsid',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'prlimit64',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'perf_event_open',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'rt_sigaction',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'getpgid',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'getpriority',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sigaction',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'setns',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'fork',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'get_robust_list',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'mq_timedsend',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'ptrace',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_getattr',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'getrusage',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_setscheduler',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'setitimer',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'ioprio_get',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'vfork',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'prctl',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'move_pages',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'setpriority',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'clone',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_getparam',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])}],
+ 'sched_setaffinity': [{'call': 'keyctl',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'rt_sigtimedwait',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'setfsuid',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'msgrcv',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'kill',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'getresuid16',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'getresgid',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'sched_getaffinity',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'sched_setparam',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'setgid',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'ioprio_set',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'capset',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'getppid',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'mq_timedreceive',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'getresgid16',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'capget',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'setfsgid',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'unshare',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'signal',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'setreuid',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags')])},
+                       {'call': 'semtimedop',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'umount',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'sched_rr_get_interval',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'epoll_create1',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'getresuid',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'rt_sigprocmask',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'setsid',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'sigaltstack',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'sched_setattr',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'migrate_pages',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'getitimer',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'setpgid',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'setresgid',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'setregid',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'getsid',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'prlimit64',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'perf_event_open',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'getgroups16',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'rt_sigaction',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'getpgid',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'getpriority',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'sigaction',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'faccessat',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'setns',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'fork',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'get_robust_list',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'mq_timedsend',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'sched_getscheduler',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'ptrace',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'sched_getattr',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'getrusage',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'sched_setscheduler',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'setresuid',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags')])},
+                       {'call': 'setitimer',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'ioprio_get',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'vfork',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'setuid',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags')])},
+                       {'call': 'prctl',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'move_pages',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'getgroups',
+                        'reason': set([('cred', 'user_ns')])},
+                       {'call': 'setpriority',
+                        'reason': set([('cred', 'user_ns'),
+                                       ('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'clone',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])},
+                       {'call': 'sched_getparam',
+                        'reason': set([('task_struct', 'flags'),
+                                       ('task_struct', 'real_cred')])}],
+ 'sched_setattr': [{'call': 'keyctl',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'rt_sigtimedwait',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'msgrcv',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_getaffinity',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_setparam',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'ioprio_set',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getppid',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'ioperm',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'capget',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_setaffinity',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'signal',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'semtimedop',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'umount',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_rr_get_interval',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'rt_sigprocmask',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'setsid',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sigaltstack',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'migrate_pages',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getitimer',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'setpgid',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getsid',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'rt_sigaction',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getpgid',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getpriority',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sigaction',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'setns',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'get_robust_list',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_getscheduler',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'ptrace',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_getattr',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('sched_attr', 'sched_policy')])},
+                   {'call': 'getrusage',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_setscheduler',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'setitimer',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'ioprio_get',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'vfork',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'prctl',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'move_pages',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'setpriority',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'clone',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_getparam',
+                    'reason': set([('mm_segment_t', 'seg')])}],
+ 'select': [{'call': 'keyctl',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'personality'),
+                            ('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'msgrcv',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'mq_unlink',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'personality')])},
+            {'call': 'swapoff',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fchmod',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'memfd_create',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'ioprio_set',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'personality',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'dup3', 'reason': set([('files_struct', 'fdt')])},
+            {'call': 'readlinkat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'io_getevents',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'getppid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fchown',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'personality'),
+                            ('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'capget',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'utime',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'unshare', 'reason': set([('files_struct', 'fdt')])},
+            {'call': 'signal',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'semtimedop',
+             'reason': set([('task_struct', 'personality'),
+                            ('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'umount',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'settimeofday',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'personality'),
+                            ('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'timerfd_gettime',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'pselect6',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'uselib',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'setsid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sigaltstack',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'migrate_pages',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'getitimer',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fchmodat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'setpgid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'inotify_add_watch',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'timer_settime',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'ftruncate',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'timer_gettime',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'getsid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'ioctl',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'prlimit64',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'linkat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'stime',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'futimesat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'getpgid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'poll',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'unlink',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'getpriority',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sigaction',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'nanosleep',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'mq_getsetattr',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'faccessat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'setns',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'personality')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'personality'),
+                            ('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'ptrace',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'swapon',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'epoll_wait',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fchownat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'getrusage',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fstat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'timerfd_settime',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'setitimer',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'ioprio_get',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'vfork',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'prctl',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'move_pages',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'dup2', 'reason': set([('files_struct', 'fdt')])},
+            {'call': 'setpriority',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'mq_notify',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sendfile',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'newfstat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'clone',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'clock_nanosleep',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'unlinkat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'futex',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'recvmmsg',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sendfile64',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'ppoll',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])}],
+ 'semctl': [{'call': 'semtimedop',
+             'reason': set([('sem_array', 'sem_nsems')])}],
+ 'semtimedop': [{'call': 'syncfs', 'reason': set([('list_head', 'prev')])},
+                {'call': 'keyctl', 'reason': set([('list_head', 'prev')])},
+                {'call': 'rt_sigtimedwait',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'vmsplice', 'reason': set([('list_head', 'prev')])},
+                {'call': 'msgrcv',
+                 'reason': set([('kern_ipc_perm', 'deleted'),
+                                ('list_head', 'prev')])},
+                {'call': 'eventfd2', 'reason': set([('list_head', 'prev')])},
+                {'call': 'mq_unlink',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'kill', 'reason': set([('list_head', 'prev')])},
+                {'call': 'swapoff',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'readahead', 'reason': set([('list_head', 'prev')])},
+                {'call': 'timer_delete',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'sched_getaffinity',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'sched_setparam',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'fchmod',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'setgid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'pivot_root',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'memfd_create',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'ioprio_set',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'delete_module',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'dup3', 'reason': set([('list_head', 'prev')])},
+                {'call': 'readlinkat',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'io_getevents',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'getppid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'fchown',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'mq_timedreceive',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'capget', 'reason': set([('list_head', 'prev')])},
+                {'call': 'utime',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'sched_setaffinity',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'ustat', 'reason': set([('list_head', 'prev')])},
+                {'call': 'bpf', 'reason': set([('list_head', 'prev')])},
+                {'call': 'unshare', 'reason': set([('list_head', 'prev')])},
+                {'call': 'signal', 'reason': set([('list_head', 'prev')])},
+                {'call': 'setreuid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'umount', 'reason': set([('list_head', 'prev')])},
+                {'call': 'settimeofday',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'timer_create',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'mkdirat', 'reason': set([('list_head', 'prev')])},
+                {'call': 'sched_rr_get_interval',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'epoll_create1',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'timerfd_gettime',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'tee', 'reason': set([('list_head', 'prev')])},
+                {'call': 'semctl',
+                 'reason': set([('kern_ipc_perm', 'deleted'),
+                                ('list_head', 'prev'),
+                                ('sem_array', 'complex_count'),
+                                ('sem_array', 'sem_nsems'),
+                                ('sem_array', 'use_global_lock'),
+                                ('sem_undo', 'semid')])},
+                {'call': 'sync_file_range',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'epoll_ctl', 'reason': set([('list_head', 'prev')])},
+                {'call': 'flock', 'reason': set([('list_head', 'prev')])},
+                {'call': 'openat', 'reason': set([('list_head', 'prev')])},
+                {'call': 'lookup_dcookie',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'pselect6',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'uselib',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'renameat2', 'reason': set([('list_head', 'prev')])},
+                {'call': 'rt_sigprocmask',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'accept4', 'reason': set([('list_head', 'prev')])},
+                {'call': 'msgctl',
+                 'reason': set([('kern_ipc_perm', 'deleted'),
+                                ('list_head', 'prev')])},
+                {'call': 'reboot', 'reason': set([('list_head', 'prev')])},
+                {'call': 'setsid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'set_trip_temp',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'sigaltstack',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'sched_setattr',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'inotify_rm_watch',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'socketpair',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'migrate_pages',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'getitimer', 'reason': set([('list_head', 'prev')])},
+                {'call': 'fchmodat',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'setpgid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'init_module',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'setresgid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'getcwd', 'reason': set([('list_head', 'prev')])},
+                {'call': 'inotify_add_watch',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'get_trip_temp',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'timer_settime',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'setregid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'splice', 'reason': set([('list_head', 'prev')])},
+                {'call': 'ftruncate',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'timer_gettime',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'getsid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'shmat',
+                 'reason': set([('kern_ipc_perm', 'deleted'),
+                                ('list_head', 'prev')])},
+                {'call': 'mknodat', 'reason': set([('list_head', 'prev')])},
+                {'call': 'socket', 'reason': set([('list_head', 'prev')])},
+                {'call': 'symlinkat', 'reason': set([('list_head', 'prev')])},
+                {'call': 'pipe2', 'reason': set([('list_head', 'prev')])},
+                {'call': 'ioctl',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'prlimit64', 'reason': set([('list_head', 'prev')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'linkat',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'stime',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'getgroups16',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'shmdt', 'reason': set([('list_head', 'prev')])},
+                {'call': 'quotactl', 'reason': set([('list_head', 'prev')])},
+                {'call': 'rt_sigaction',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'futimesat',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'request_key',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'getpgid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'brk', 'reason': set([('list_head', 'prev')])},
+                {'call': 'acct', 'reason': set([('list_head', 'prev')])},
+                {'call': 'poll',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'open', 'reason': set([('list_head', 'prev')])},
+                {'call': 'select',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'unlink',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'exit_group',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'getpriority',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'sigaction', 'reason': set([('list_head', 'prev')])},
+                {'call': 'nanosleep',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'mq_getsetattr',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'faccessat',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'rmdir', 'reason': set([('list_head', 'prev')])},
+                {'call': 'dup', 'reason': set([('list_head', 'prev')])},
+                {'call': 'setgroups16',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'setns', 'reason': set([('list_head', 'prev')])},
+                {'call': 'fork', 'reason': set([('list_head', 'prev')])},
+                {'call': 'get_mempolicy',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'io_submit', 'reason': set([('list_head', 'prev')])},
+                {'call': 'get_robust_list',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'mq_timedsend',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'sched_yield',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'sched_getscheduler',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'ptrace', 'reason': set([('list_head', 'prev')])},
+                {'call': 'shmctl',
+                 'reason': set([('kern_ipc_perm', 'deleted'),
+                                ('list_head', 'prev')])},
+                {'call': 'munlockall',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'swapon',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'pkey_mprotect',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'madvise', 'reason': set([('list_head', 'prev')])},
+                {'call': 'epoll_wait',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'sched_getattr',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'fchownat',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'getrusage', 'reason': set([('list_head', 'prev')])},
+                {'call': 'fstat',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'timerfd_settime',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'sched_setscheduler',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'setresuid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'setitimer', 'reason': set([('list_head', 'prev')])},
+                {'call': 'ioprio_get',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'vfork', 'reason': set([('list_head', 'prev')])},
+                {'call': 'setuid', 'reason': set([('list_head', 'prev')])},
+                {'call': 'io_setup', 'reason': set([('list_head', 'prev')])},
+                {'call': 'mprotect', 'reason': set([('list_head', 'prev')])},
+                {'call': 'mmap_pgoff',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'mremap', 'reason': set([('list_head', 'prev')])},
+                {'call': 'io_destroy',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'mbind', 'reason': set([('list_head', 'prev')])},
+                {'call': 'prctl', 'reason': set([('list_head', 'prev')])},
+                {'call': 'move_pages',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'timerfd_create',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'modify_ldt',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'getgroups', 'reason': set([('list_head', 'prev')])},
+                {'call': 'dup2', 'reason': set([('list_head', 'prev')])},
+                {'call': 'get_curr_temp',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'msgsnd',
+                 'reason': set([('kern_ipc_perm', 'deleted'),
+                                ('list_head', 'prev')])},
+                {'call': 'munlock', 'reason': set([('list_head', 'prev')])},
+                {'call': 'setpriority',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'inotify_init1',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'mincore', 'reason': set([('list_head', 'prev')])},
+                {'call': 'mq_notify',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'sendfile',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'timer_getoverrun',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'newfstat',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'kexec_load',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'clone', 'reason': set([('list_head', 'prev')])},
+                {'call': 'mq_open', 'reason': set([('list_head', 'prev')])},
+                {'call': 'setgroups', 'reason': set([('list_head', 'prev')])},
+                {'call': 'clock_nanosleep',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'unlinkat',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'sched_getparam',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'io_cancel', 'reason': set([('list_head', 'prev')])},
+                {'call': 'open_by_handle_at',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'futex',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'recvmmsg',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'finit_module',
+                 'reason': set([('list_head', 'prev')])},
+                {'call': 'sendfile64',
+                 'reason': set([('list_head', 'prev'),
+                                ('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'mlockall', 'reason': set([('list_head', 'prev')])},
+                {'call': 'ppoll',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])}],
+ 'sendfile': [{'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+              {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+              {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+              {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+              {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+              {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+              {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'perf_event_open',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+              {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+              {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+              {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+              {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('file', 'f_mode')])}],
+ 'sendfile64': [{'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+                {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+                {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('file', 'f_mode')])},
+                {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+                {'call': 'epoll_create1',
+                 'reason': set([('file', 'f_mode')])},
+                {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+                {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+                {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+                {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+                {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+                {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+                {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+                {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+                {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('file', 'f_mode')])},
+                {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+                {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+                {'call': 'open', 'reason': set([('file', 'f_mode')])},
+                {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+                {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+                {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+                {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+                {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+                {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+                {'call': 'open_by_handle_at',
+                 'reason': set([('file', 'f_mode')])}],
+ 'sendmmsg': [{'call': 'recvfrom', 'reason': set([('socket', 'file')])},
+              {'call': 'sendto', 'reason': set([('socket', 'file')])},
+              {'call': 'connect', 'reason': set([('socket', 'file')])},
+              {'call': 'getsockname', 'reason': set([('socket', 'file')])},
+              {'call': 'accept4', 'reason': set([('socket', 'file')])},
+              {'call': 'getpeername', 'reason': set([('socket', 'file')])},
+              {'call': 'setsockopt', 'reason': set([('socket', 'file')])},
+              {'call': 'sendmsg', 'reason': set([('socket', 'file')])},
+              {'call': 'shutdown', 'reason': set([('socket', 'file')])},
+              {'call': 'getsockopt', 'reason': set([('socket', 'file')])},
+              {'call': 'listen', 'reason': set([('socket', 'file')])},
+              {'call': 'recvmsg', 'reason': set([('socket', 'file')])},
+              {'call': 'bind', 'reason': set([('socket', 'file')])},
+              {'call': 'recvmmsg', 'reason': set([('socket', 'file')])}],
+ 'sendmsg': [{'call': 'recvfrom', 'reason': set([('socket', 'file')])},
+             {'call': 'sendto', 'reason': set([('socket', 'file')])},
+             {'call': 'connect', 'reason': set([('socket', 'file')])},
+             {'call': 'getsockname', 'reason': set([('socket', 'file')])},
+             {'call': 'accept4', 'reason': set([('socket', 'file')])},
+             {'call': 'getpeername', 'reason': set([('socket', 'file')])},
+             {'call': 'setsockopt', 'reason': set([('socket', 'file')])},
+             {'call': 'shutdown', 'reason': set([('socket', 'file')])},
+             {'call': 'getsockopt', 'reason': set([('socket', 'file')])},
+             {'call': 'listen', 'reason': set([('socket', 'file')])},
+             {'call': 'recvmsg', 'reason': set([('socket', 'file')])},
+             {'call': 'sendmmsg', 'reason': set([('socket', 'file')])},
+             {'call': 'bind', 'reason': set([('socket', 'file')])},
+             {'call': 'recvmmsg', 'reason': set([('socket', 'file')])}],
+ 'sendto': [{'call': 'eventfd2', 'reason': set([('file', 'f_flags')])},
+            {'call': 'swapoff', 'reason': set([('file', 'f_flags')])},
+            {'call': 'memfd_create', 'reason': set([('file', 'f_flags')])},
+            {'call': 'remap_file_pages',
+             'reason': set([('file', 'f_flags')])},
+            {'call': 'dup3', 'reason': set([('file', 'f_flags')])},
+            {'call': 'epoll_create1', 'reason': set([('file', 'f_flags')])},
+            {'call': 'epoll_ctl', 'reason': set([('file', 'f_flags')])},
+            {'call': 'flock', 'reason': set([('file', 'f_flags')])},
+            {'call': 'openat', 'reason': set([('file', 'f_flags')])},
+            {'call': 'uselib', 'reason': set([('file', 'f_flags')])},
+            {'call': 'accept4', 'reason': set([('file', 'f_flags')])},
+            {'call': 'socketpair', 'reason': set([('file', 'f_flags')])},
+            {'call': 'shmat', 'reason': set([('file', 'f_flags')])},
+            {'call': 'socket', 'reason': set([('file', 'f_flags')])},
+            {'call': 'pipe2', 'reason': set([('file', 'f_flags')])},
+            {'call': 'perf_event_open', 'reason': set([('file', 'f_flags')])},
+            {'call': 'shmdt', 'reason': set([('file', 'f_flags')])},
+            {'call': 'acct', 'reason': set([('file', 'f_flags')])},
+            {'call': 'open', 'reason': set([('file', 'f_flags')])},
+            {'call': 'mq_getsetattr', 'reason': set([('file', 'f_flags')])},
+            {'call': 'dup', 'reason': set([('file', 'f_flags')])},
+            {'call': 'setns', 'reason': set([('file', 'f_flags')])},
+            {'call': 'shmctl', 'reason': set([('file', 'f_flags')])},
+            {'call': 'swapon', 'reason': set([('file', 'f_flags')])},
+            {'call': 'mmap_pgoff', 'reason': set([('file', 'f_flags')])},
+            {'call': 'mq_open', 'reason': set([('file', 'f_flags')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('file', 'f_flags')])}],
+ 'set_mempolicy': [{'call': 'get_mempolicy',
+                    'reason': set([('mempolicy', 'mode')])},
+                   {'call': 'mbind', 'reason': set([('mempolicy', 'mode')])}],
+ 'set_thread_area': [{'call': 'keyctl',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'rt_sigtimedwait',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'msgrcv',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'kill',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_getaffinity',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'arch_prctl',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_setparam',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'ioprio_set',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'getppid',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'ioperm',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'mq_timedreceive',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'capget',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_setaffinity',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'signal',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'semtimedop',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'umount',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_rr_get_interval',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'rt_sigprocmask',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'setsid',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sigaltstack',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_setattr',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'migrate_pages',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'getitimer',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'setpgid',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'getsid',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'prlimit64',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'perf_event_open',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'rt_sigaction',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'getpgid',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'getpriority',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sigaction',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'setns',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'fork',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'get_robust_list',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_getscheduler',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'ptrace',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_getattr',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'getrusage',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_setscheduler',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'setitimer',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'ioprio_get',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'vfork',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'prctl',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'move_pages',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'setpriority',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'clone',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_getparam',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])}],
+ 'set_trip_temp': [{'call': 'get_trip_temp',
+                    'reason': set([('pkg_device', 'cpu'),
+                                   ('pkg_device', 'tj_max')])},
+                   {'call': 'get_curr_temp',
+                    'reason': set([('pkg_device', 'cpu'),
+                                   ('pkg_device', 'tj_max')])}],
+ 'setdomainname': [{'call': 'setns',
+                    'reason': set([('uts_namespace', 'user_ns')])}],
+ 'setfsgid': [{'call': 'keyctl',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setfsuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getresuid16', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'getresgid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setgid',
+               'reason': set([('cred', 'egid'),
+                              ('cred', 'fsgid'),
+                              ('cred', 'gid'),
+                              ('cred', 'sgid'),
+                              ('cred', 'user_ns')])},
+              {'call': 'ioprio_set',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'capset', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getresgid16', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'unshare', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setreuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'epoll_create1', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'getresuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'migrate_pages',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setresgid',
+               'reason': set([('cred', 'egid'),
+                              ('cred', 'fsgid'),
+                              ('cred', 'gid'),
+                              ('cred', 'sgid'),
+                              ('cred', 'user_ns')])},
+              {'call': 'setregid',
+               'reason': set([('cred', 'egid'),
+                              ('cred', 'fsgid'),
+                              ('cred', 'gid'),
+                              ('cred', 'sgid'),
+                              ('cred', 'user_ns')])},
+              {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'prlimit64',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getgroups16', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpriority',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'faccessat',
+               'reason': set([('cred', 'fsgid'), ('cred', 'user_ns')])},
+              {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setresuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'ioprio_get',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'move_pages',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getgroups', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'setpriority',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'cred')])}],
+ 'setfsuid': [{'call': 'keyctl',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getresuid16', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'getresgid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setgid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'ioprio_set',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'capset', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getresgid16', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'setfsgid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'unshare', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setreuid',
+               'reason': set([('cred', 'euid'),
+                              ('cred', 'fsuid'),
+                              ('cred', 'suid'),
+                              ('cred', 'uid'),
+                              ('cred', 'user_ns')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'epoll_create1', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'getresuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'migrate_pages',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setresgid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'setregid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'prlimit64',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getgroups16', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpriority',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'faccessat',
+               'reason': set([('cred', 'fsuid'), ('cred', 'user_ns')])},
+              {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setresuid',
+               'reason': set([('cred', 'euid'),
+                              ('cred', 'fsuid'),
+                              ('cred', 'suid'),
+                              ('cred', 'uid'),
+                              ('cred', 'user_ns')])},
+              {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'ioprio_get',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setuid',
+               'reason': set([('cred', 'euid'),
+                              ('cred', 'fsuid'),
+                              ('cred', 'suid'),
+                              ('cred', 'uid'),
+                              ('cred', 'user_ns')])},
+              {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'move_pages',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getgroups', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'setpriority',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'cred')])}],
+ 'setgid': [{'call': 'keyctl',
+             'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setfsuid', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getresuid16', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'getresgid', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_set',
+             'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+            {'call': 'capset', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getresgid16', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+            {'call': 'setfsgid', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'unshare', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setreuid', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'semtimedop', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'epoll_create1', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'getresuid', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sigaltstack', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'migrate_pages',
+             'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+            {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setresgid',
+             'reason': set([('cred', 'gid'),
+                            ('cred', 'sgid'),
+                            ('cred', 'user_ns')])},
+            {'call': 'setregid',
+             'reason': set([('cred', 'gid'),
+                            ('cred', 'sgid'),
+                            ('cred', 'user_ns')])},
+            {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prlimit64',
+             'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getgroups16', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpriority',
+             'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+            {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'faccessat', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setresuid', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_get',
+             'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+            {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setuid', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'move_pages', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getgroups', 'reason': set([('cred', 'user_ns')])},
+            {'call': 'setpriority',
+             'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+            {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'cred')])}],
+ 'setgroups16': [{'call': 'setgroups',
+                  'reason': set([('group_info', 'ngroups')])}],
+ 'sethostname': [{'call': 'setns',
+                  'reason': set([('uts_namespace', 'user_ns')])}],
+ 'setitimer': [{'call': 'waitid',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'settimeofday',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'timer_create',
+                'reason': set([('signal_struct', 'it_real_incr')])},
+               {'call': 'adjtimex',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'getitimer',
+                'reason': set([('itimerval', 'it_interval'),
+                               ('itimerval', 'it_value'),
+                               ('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'select',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'exit_group',
+                'reason': set([('signal_struct', 'it_real_incr')])},
+               {'call': 'wait4',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'getrusage',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'clock_adjtime',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'alarm',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'ppoll',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])}],
+ 'setpgid': [{'call': 'keyctl',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'rt_sigtimedwait',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'msgrcv',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'kill',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'sched_getaffinity',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'sched_setparam',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'ioprio_set',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'getppid',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'capget',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'sched_setaffinity',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'signal',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'setreuid', 'reason': set([('task_struct', 'flags')])},
+             {'call': 'semtimedop',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'umount',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'timer_create',
+              'reason': set([('signal_struct', 'leader')])},
+             {'call': 'sched_rr_get_interval',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'rt_sigprocmask',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'setsid',
+              'reason': set([('signal_struct', 'leader'),
+                             ('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'sigaltstack',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'sched_setattr',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'migrate_pages',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'getitimer',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'getsid',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'prlimit64',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'perf_event_open',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'rt_sigaction',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'getpgid',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'exit_group',
+              'reason': set([('signal_struct', 'leader')])},
+             {'call': 'getpriority',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'sigaction',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'setns',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'fork',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'get_robust_list',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'mq_timedsend',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'sched_getscheduler',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'ptrace',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'sched_getattr',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'getrusage',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'sched_setscheduler',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'setresuid', 'reason': set([('task_struct', 'flags')])},
+             {'call': 'setitimer',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'ioprio_get',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'vfork',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'setuid', 'reason': set([('task_struct', 'flags')])},
+             {'call': 'prctl',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'move_pages',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'setpriority',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'clone',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])},
+             {'call': 'sched_getparam',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags'),
+                             ('task_struct', 'real_parent'),
+                             ('task_struct', 'signal')])}],
+ 'setpriority': [{'call': 'keyctl',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'rt_sigtimedwait',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'msgrcv',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'kill',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_getaffinity',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_setparam',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'ioprio_set',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getppid',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'mq_timedreceive',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'capget',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_setaffinity',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'signal',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setreuid', 'reason': set([('cred', 'uid')])},
+                 {'call': 'semtimedop',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'umount',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_rr_get_interval',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'rt_sigprocmask',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setsid',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sigaltstack',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_setattr',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'migrate_pages',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getitimer',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setpgid',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getsid',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'prlimit64',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'perf_event_open',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'rt_sigaction',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getpgid',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getpriority',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sigaction',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setns',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'fork',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'get_robust_list',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'mq_timedsend',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_getscheduler',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'ptrace',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_getattr',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'getrusage',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_setscheduler',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setresuid', 'reason': set([('cred', 'uid')])},
+                 {'call': 'setitimer',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'ioprio_get',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'vfork',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'setuid', 'reason': set([('cred', 'uid')])},
+                 {'call': 'prctl',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'move_pages',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'clone',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])},
+                 {'call': 'sched_getparam',
+                  'reason': set([('task_struct', 'cred'),
+                                 ('task_struct', 'real_cred')])}],
+ 'setregid': [{'call': 'keyctl',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setfsuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getresuid16', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'getresgid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setgid',
+               'reason': set([('cred', 'egid'),
+                              ('cred', 'gid'),
+                              ('cred', 'sgid'),
+                              ('cred', 'user_ns')])},
+              {'call': 'ioprio_set',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'capset', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getresgid16', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'setfsgid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'unshare', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setreuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'epoll_create1', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'getresuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'migrate_pages',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setresgid',
+               'reason': set([('cred', 'egid'),
+                              ('cred', 'gid'),
+                              ('cred', 'sgid'),
+                              ('cred', 'user_ns')])},
+              {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'prlimit64',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getgroups16', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpriority',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'faccessat', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setresuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'ioprio_get',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setuid', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'move_pages',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getgroups', 'reason': set([('cred', 'user_ns')])},
+              {'call': 'setpriority',
+               'reason': set([('cred', 'user_ns'), ('task_struct', 'cred')])},
+              {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'cred')])}],
+ 'setresgid': [{'call': 'keyctl',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setfsuid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getresuid16', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'getresgid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setparam',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setgid',
+                'reason': set([('cred', 'egid'),
+                               ('cred', 'gid'),
+                               ('cred', 'sgid'),
+                               ('cred', 'user_ns')])},
+               {'call': 'ioprio_set',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'capset', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getresgid16', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'setfsgid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'unshare', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setreuid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'semtimedop',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'epoll_create1',
+                'reason': set([('cred', 'user_ns')])},
+               {'call': 'getresuid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaltstack',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'migrate_pages',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'getitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setregid',
+                'reason': set([('cred', 'egid'),
+                               ('cred', 'gid'),
+                               ('cred', 'sgid'),
+                               ('cred', 'user_ns')])},
+               {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prlimit64',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'perf_event_open',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getgroups16', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpriority',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'faccessat', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'get_robust_list',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getrusage',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setresuid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'setitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_get',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setuid', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'move_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getgroups', 'reason': set([('cred', 'user_ns')])},
+               {'call': 'setpriority',
+                'reason': set([('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getparam',
+                'reason': set([('task_struct', 'cred')])}],
+ 'setresuid': [{'call': 'keyctl',
+                'reason': set([('cred', 'user'),
+                               ('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setfsuid',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getresuid16',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'getresgid',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setparam',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setgid',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'ioprio_set',
+                'reason': set([('cred', 'user'),
+                               ('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'capset',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getresgid16',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('cred', 'user'),
+                               ('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'setfsgid',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'unshare',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setreuid',
+                'reason': set([('cred', 'euid'),
+                               ('cred', 'suid'),
+                               ('cred', 'uid'),
+                               ('cred', 'user'),
+                               ('cred', 'user_ns')])},
+               {'call': 'semtimedop',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'epoll_create1',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'getresuid',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sigaltstack',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'migrate_pages',
+                'reason': set([('cred', 'user'),
+                               ('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'getitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setresgid',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'setregid',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'prlimit64',
+                'reason': set([('cred', 'user'),
+                               ('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'perf_event_open',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getgroups16',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'getpriority',
+                'reason': set([('cred', 'user'),
+                               ('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'sigaction',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'faccessat',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'get_robust_list',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getattr',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getrusage',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'setitimer',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'ioprio_get',
+                'reason': set([('cred', 'user'),
+                               ('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'setuid',
+                'reason': set([('cred', 'euid'),
+                               ('cred', 'suid'),
+                               ('cred', 'uid'),
+                               ('cred', 'user'),
+                               ('cred', 'user_ns')])},
+               {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'move_pages',
+                'reason': set([('task_struct', 'cred')])},
+               {'call': 'getgroups',
+                'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+               {'call': 'setpriority',
+                'reason': set([('cred', 'user'),
+                               ('cred', 'user_ns'),
+                               ('task_struct', 'cred')])},
+               {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+               {'call': 'sched_getparam',
+                'reason': set([('task_struct', 'cred')])}],
+ 'setreuid': [{'call': 'keyctl',
+               'reason': set([('cred', 'user'),
+                              ('cred', 'user_ns'),
+                              ('task_struct', 'cred')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setfsuid',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getresuid16',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'getresgid',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setgid',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'ioprio_set',
+               'reason': set([('cred', 'user'),
+                              ('cred', 'user_ns'),
+                              ('task_struct', 'cred')])},
+              {'call': 'capset',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getresgid16',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('cred', 'user'),
+                              ('cred', 'user_ns'),
+                              ('task_struct', 'cred')])},
+              {'call': 'setfsgid',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'unshare',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'epoll_create1',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'getresuid',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'migrate_pages',
+               'reason': set([('cred', 'user'),
+                              ('cred', 'user_ns'),
+                              ('task_struct', 'cred')])},
+              {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setresgid',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'setregid',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'prlimit64',
+               'reason': set([('cred', 'user'),
+                              ('cred', 'user_ns'),
+                              ('task_struct', 'cred')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getgroups16',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'getpriority',
+               'reason': set([('cred', 'user'),
+                              ('cred', 'user_ns'),
+                              ('task_struct', 'cred')])},
+              {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'faccessat',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'setresuid',
+               'reason': set([('cred', 'euid'),
+                              ('cred', 'suid'),
+                              ('cred', 'uid'),
+                              ('cred', 'user'),
+                              ('cred', 'user_ns')])},
+              {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'ioprio_get',
+               'reason': set([('cred', 'user'),
+                              ('cred', 'user_ns'),
+                              ('task_struct', 'cred')])},
+              {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'setuid',
+               'reason': set([('cred', 'euid'),
+                              ('cred', 'suid'),
+                              ('cred', 'uid'),
+                              ('cred', 'user'),
+                              ('cred', 'user_ns')])},
+              {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'move_pages',
+               'reason': set([('task_struct', 'cred')])},
+              {'call': 'getgroups',
+               'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+              {'call': 'setpriority',
+               'reason': set([('cred', 'user'),
+                              ('cred', 'user_ns'),
+                              ('task_struct', 'cred')])},
+              {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'cred')])}],
+ 'setrlimit': [{'call': 'keyctl',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'msgrcv',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'kill',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_setparam',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'ioprio_set',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getppid',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'capget',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'signal',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'semtimedop',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'umount',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setsid',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sigaltstack',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_setattr',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'migrate_pages',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getitimer',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setpgid',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getsid',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'old_getrlimit',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max')])},
+               {'call': 'prlimit64',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max'),
+                               ('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'perf_event_open',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getpgid',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getpriority',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sigaction',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setns',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'fork',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'get_robust_list',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'ptrace',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_getattr',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getrusage',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setitimer',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'ioprio_get',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'vfork',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'prctl',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'move_pages',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'setpriority',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'getrlimit',
+                'reason': set([('compat_rlimit', 'rlim_cur'),
+                               ('compat_rlimit', 'rlim_max')])},
+               {'call': 'clone',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])},
+               {'call': 'sched_getparam',
+                'reason': set([('task_struct', 'group_leader'),
+                               ('task_struct', 'sighand')])}],
+ 'setsid': [{'call': 'timer_create',
+             'reason': set([('signal_struct', 'leader')])},
+            {'call': 'exit_group',
+             'reason': set([('signal_struct', 'leader')])}],
+ 'setsockopt': [{'call': 'accept4',
+                 'reason': set([('proto_ops', 'compat_setsockopt')])}],
+ 'settimeofday': [{'call': 'waitid',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'adjtimex',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'getitimer',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'select',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'wait4',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'getrusage',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'setitimer',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'clock_adjtime',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'alarm',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'ppoll',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])}],
+ 'setuid': [{'call': 'keyctl',
+             'reason': set([('cred', 'user'),
+                            ('cred', 'user_ns'),
+                            ('task_struct', 'cred')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setfsuid',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getresuid16',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'getresgid',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setgid',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'ioprio_set',
+             'reason': set([('cred', 'user'),
+                            ('cred', 'user_ns'),
+                            ('task_struct', 'cred')])},
+            {'call': 'capset',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getresgid16',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('cred', 'user'),
+                            ('cred', 'user_ns'),
+                            ('task_struct', 'cred')])},
+            {'call': 'setfsgid',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'unshare',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setreuid',
+             'reason': set([('cred', 'suid'),
+                            ('cred', 'uid'),
+                            ('cred', 'user'),
+                            ('cred', 'user_ns')])},
+            {'call': 'semtimedop', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'epoll_create1',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'getresuid',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sigaltstack', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'migrate_pages',
+             'reason': set([('cred', 'user'),
+                            ('cred', 'user_ns'),
+                            ('task_struct', 'cred')])},
+            {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setresgid',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'setregid',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prlimit64',
+             'reason': set([('cred', 'user'),
+                            ('cred', 'user_ns'),
+                            ('task_struct', 'cred')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getgroups16',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpriority',
+             'reason': set([('cred', 'user'),
+                            ('cred', 'user_ns'),
+                            ('task_struct', 'cred')])},
+            {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'faccessat',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setresuid',
+             'reason': set([('cred', 'suid'),
+                            ('cred', 'uid'),
+                            ('cred', 'user'),
+                            ('cred', 'user_ns')])},
+            {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_get',
+             'reason': set([('cred', 'user'),
+                            ('cred', 'user_ns'),
+                            ('task_struct', 'cred')])},
+            {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'move_pages', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getgroups',
+             'reason': set([('cred', 'user'), ('cred', 'user_ns')])},
+            {'call': 'setpriority',
+             'reason': set([('cred', 'user'),
+                            ('cred', 'user_ns'),
+                            ('task_struct', 'cred')])},
+            {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'cred')])}],
+ 'setxattr': [{'call': 'eventfd2',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'swapoff',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'pivot_root',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'memfd_create',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'dup3',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'unshare',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'epoll_create1',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'epoll_ctl',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'flock',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'openat',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'lookup_dcookie',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'uselib',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'accept4',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'socketpair',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'getcwd',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'shmat',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'socket',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'pipe2',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'perf_event_open',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'shmdt',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'quotactl',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'acct',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'open',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'dup',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'setns',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'shmctl',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'swapon',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'mmap_pgoff',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'mq_open',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'shmat': [{'call': 'keyctl', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'rt_sigtimedwait',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'msgrcv', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'eventfd2', 'reason': set([('path', 'dentry')])},
+           {'call': 'kill', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'swapoff', 'reason': set([('path', 'dentry')])},
+           {'call': 'sched_getaffinity',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_setparam', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'pivot_root', 'reason': set([('path', 'dentry')])},
+           {'call': 'memfd_create', 'reason': set([('path', 'dentry')])},
+           {'call': 'ioprio_set', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'remap_file_pages', 'reason': set([('path', 'dentry')])},
+           {'call': 'dup3', 'reason': set([('path', 'dentry')])},
+           {'call': 'getppid', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'capget', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_setaffinity',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'unshare', 'reason': set([('path', 'dentry')])},
+           {'call': 'signal', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'semtimedop', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'umount', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'epoll_create1', 'reason': set([('path', 'dentry')])},
+           {'call': 'epoll_ctl', 'reason': set([('path', 'dentry')])},
+           {'call': 'flock', 'reason': set([('path', 'dentry')])},
+           {'call': 'openat', 'reason': set([('path', 'dentry')])},
+           {'call': 'lookup_dcookie', 'reason': set([('path', 'dentry')])},
+           {'call': 'uselib', 'reason': set([('path', 'dentry')])},
+           {'call': 'rt_sigprocmask', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'accept4', 'reason': set([('path', 'dentry')])},
+           {'call': 'setsid', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sigaltstack', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_setattr', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'socketpair', 'reason': set([('path', 'dentry')])},
+           {'call': 'migrate_pages', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'getitimer', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'setpgid', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'getcwd', 'reason': set([('path', 'dentry')])},
+           {'call': 'getsid', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'socket', 'reason': set([('path', 'dentry')])},
+           {'call': 'pipe2', 'reason': set([('path', 'dentry')])},
+           {'call': 'prlimit64', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'perf_event_open',
+            'reason': set([('path', 'dentry'), ('task_struct', 'mm')])},
+           {'call': 'shmdt', 'reason': set([('path', 'dentry')])},
+           {'call': 'quotactl', 'reason': set([('path', 'dentry')])},
+           {'call': 'rt_sigaction', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'getpgid', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'acct', 'reason': set([('path', 'dentry')])},
+           {'call': 'open', 'reason': set([('path', 'dentry')])},
+           {'call': 'getpriority', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sigaction', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'dup', 'reason': set([('path', 'dentry')])},
+           {'call': 'setns',
+            'reason': set([('path', 'dentry'), ('task_struct', 'mm')])},
+           {'call': 'fork', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'get_robust_list',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'mq_timedsend', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_getscheduler',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'ptrace', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'shmctl',
+            'reason': set([('path', 'dentry'),
+                           ('shmid_kernel', 'shm_file')])},
+           {'call': 'swapon', 'reason': set([('path', 'dentry')])},
+           {'call': 'sched_getattr', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'getrusage', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'sched_setscheduler',
+            'reason': set([('task_struct', 'mm')])},
+           {'call': 'setitimer', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'ioprio_get', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'vfork', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'mmap_pgoff', 'reason': set([('path', 'dentry')])},
+           {'call': 'prctl', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'move_pages', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'setpriority', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'clone', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'mq_open', 'reason': set([('path', 'dentry')])},
+           {'call': 'sched_getparam', 'reason': set([('task_struct', 'mm')])},
+           {'call': 'open_by_handle_at', 'reason': set([('path', 'dentry')])}],
+ 'shmctl': [{'call': 'keyctl',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'msgrcv',
+             'reason': set([('ipc_namespace', 'user_ns'),
+                            ('kern_ipc_perm', 'deleted'),
+                            ('kern_ipc_perm', 'mode'),
+                            ('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'eventfd2', 'reason': set([('file', 'f_op')])},
+            {'call': 'mq_unlink',
+             'reason': set([('ipc_namespace', 'user_ns')])},
+            {'call': 'kill',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'swapoff', 'reason': set([('file', 'f_op')])},
+            {'call': 'msgget', 'reason': set([('ipc_namespace', 'user_ns')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'sched_setparam',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'memfd_create', 'reason': set([('file', 'f_op')])},
+            {'call': 'ioprio_set',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'remap_file_pages', 'reason': set([('file', 'f_op')])},
+            {'call': 'dup3', 'reason': set([('file', 'f_op')])},
+            {'call': 'getppid',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'capget',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'signal',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'semtimedop',
+             'reason': set([('ipc_namespace', 'user_ns'),
+                            ('kern_ipc_perm', 'deleted'),
+                            ('kern_ipc_perm', 'mode'),
+                            ('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'umount',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'epoll_create1', 'reason': set([('file', 'f_op')])},
+            {'call': 'semctl',
+             'reason': set([('ipc_namespace', 'user_ns'),
+                            ('kern_ipc_perm', 'deleted'),
+                            ('kern_ipc_perm', 'mode')])},
+            {'call': 'epoll_ctl', 'reason': set([('file', 'f_op')])},
+            {'call': 'flock', 'reason': set([('file', 'f_op')])},
+            {'call': 'openat', 'reason': set([('file', 'f_op')])},
+            {'call': 'shmget', 'reason': set([('ipc_namespace', 'user_ns')])},
+            {'call': 'uselib', 'reason': set([('file', 'f_op')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'accept4', 'reason': set([('file', 'f_op')])},
+            {'call': 'msgctl',
+             'reason': set([('ipc_namespace', 'user_ns'),
+                            ('kern_ipc_perm', 'deleted'),
+                            ('kern_ipc_perm', 'mode')])},
+            {'call': 'setsid',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'sigaltstack',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'sched_setattr',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'socketpair', 'reason': set([('file', 'f_op')])},
+            {'call': 'migrate_pages',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'getitimer',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'setpgid',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'semget', 'reason': set([('ipc_namespace', 'user_ns')])},
+            {'call': 'getsid',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'shmat',
+             'reason': set([('file', 'f_op'),
+                            ('ipc_namespace', 'user_ns'),
+                            ('kern_ipc_perm', 'deleted'),
+                            ('kern_ipc_perm', 'mode')])},
+            {'call': 'socket', 'reason': set([('file', 'f_op')])},
+            {'call': 'pipe2', 'reason': set([('file', 'f_op')])},
+            {'call': 'prlimit64',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'perf_event_open',
+             'reason': set([('file', 'f_op'),
+                            ('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'shmdt', 'reason': set([('file', 'f_op')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'getpgid',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'acct', 'reason': set([('file', 'f_op')])},
+            {'call': 'open', 'reason': set([('file', 'f_op')])},
+            {'call': 'getpriority',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'sigaction',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'dup', 'reason': set([('file', 'f_op')])},
+            {'call': 'setns',
+             'reason': set([('file', 'f_op'),
+                            ('ipc_namespace', 'user_ns'),
+                            ('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'fork',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'get_robust_list',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'ptrace',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'swapon', 'reason': set([('file', 'f_op')])},
+            {'call': 'sched_getattr',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'getrusage',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'setitimer',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'ioprio_get',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'vfork',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'mmap_pgoff', 'reason': set([('file', 'f_op')])},
+            {'call': 'prctl',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'move_pages',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'msgsnd',
+             'reason': set([('ipc_namespace', 'user_ns'),
+                            ('kern_ipc_perm', 'deleted'),
+                            ('kern_ipc_perm', 'mode')])},
+            {'call': 'setpriority',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'clone',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'mq_open',
+             'reason': set([('file', 'f_op'), ('ipc_namespace', 'user_ns')])},
+            {'call': 'sched_getparam',
+             'reason': set([('mm_segment_t', 'seg'),
+                            ('task_struct', 'cred')])},
+            {'call': 'open_by_handle_at', 'reason': set([('file', 'f_op')])}],
+ 'shmdt': [{'call': 'remap_file_pages',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'brk',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'get_mempolicy',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'munlockall',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'pkey_mprotect',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'madvise',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'mprotect',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'mremap',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'prctl',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'munlock',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'mincore',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'mlockall',
+            'reason': set([('vm_area_struct', 'vm_file'),
+                           ('vm_area_struct', 'vm_ops'),
+                           ('vm_area_struct', 'vm_pgoff')])}],
+ 'sigaction': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setparam',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ioprio_set',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'semtimedop',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sigaltstack',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setattr',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'migrate_pages',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getitimer',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'prlimit64',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'perf_event_open',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getpriority',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'get_robust_list',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getattr',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getrusage',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setitimer',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ioprio_get',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'move_pages',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setpriority',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getparam',
+                'reason': set([('mm_segment_t', 'seg')])}],
+ 'signalfd4': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+               {'call': 'eventfd2', 'reason': set([('file', 'f_op')])},
+               {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+               {'call': 'swapoff', 'reason': set([('file', 'f_op')])},
+               {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+               {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+               {'call': 'writev', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+               {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+               {'call': 'memfd_create', 'reason': set([('file', 'f_op')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('file', 'f_op')])},
+               {'call': 'dup3', 'reason': set([('file', 'f_op')])},
+               {'call': 'read', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+               {'call': 'utime', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+               {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+               {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_create1', 'reason': set([('file', 'f_op')])},
+               {'call': 'tee', 'reason': set([('fd', 'flags')])},
+               {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'connect', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_ctl',
+                'reason': set([('fd', 'flags'), ('file', 'f_op')])},
+               {'call': 'flock',
+                'reason': set([('fd', 'flags'), ('file', 'f_op')])},
+               {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'openat', 'reason': set([('file', 'f_op')])},
+               {'call': 'uselib', 'reason': set([('file', 'f_op')])},
+               {'call': 'accept4',
+                'reason': set([('fd', 'flags'), ('file', 'f_op')])},
+               {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+               {'call': 'socketpair', 'reason': set([('file', 'f_op')])},
+               {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('fd', 'flags')])},
+               {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+               {'call': 'splice', 'reason': set([('fd', 'flags')])},
+               {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+               {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+               {'call': 'shmat', 'reason': set([('file', 'f_op')])},
+               {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'socket', 'reason': set([('file', 'f_op')])},
+               {'call': 'pipe2', 'reason': set([('file', 'f_op')])},
+               {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+               {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+               {'call': 'perf_event_open',
+                'reason': set([('fd', 'flags'), ('file', 'f_op')])},
+               {'call': 'shmdt', 'reason': set([('file', 'f_op')])},
+               {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+               {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+               {'call': 'acct', 'reason': set([('file', 'f_op')])},
+               {'call': 'open', 'reason': set([('file', 'f_op')])},
+               {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'dup', 'reason': set([('file', 'f_op')])},
+               {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+               {'call': 'setns', 'reason': set([('file', 'f_op')])},
+               {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+               {'call': 'listen', 'reason': set([('fd', 'flags')])},
+               {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+               {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'shmctl', 'reason': set([('file', 'f_op')])},
+               {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+               {'call': 'swapon', 'reason': set([('file', 'f_op')])},
+               {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+               {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'mmap_pgoff', 'reason': set([('file', 'f_op')])},
+               {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'readv', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+               {'call': 'write', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_open', 'reason': set([('file', 'f_op')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('file', 'f_op')])},
+               {'call': 'bind', 'reason': set([('fd', 'flags')])},
+               {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'splice': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+            {'call': 'eventfd2',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+            {'call': 'swapoff',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+            {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+            {'call': 'writev', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+            {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+            {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+            {'call': 'memfd_create',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'remap_file_pages',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'dup3',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'read', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+            {'call': 'utime', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+            {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+            {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_create1',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'tee', 'reason': set([('fd', 'flags')])},
+            {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'connect', 'reason': set([('fd', 'flags')])},
+            {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_ctl',
+             'reason': set([('fd', 'flags'),
+                            ('file', 'f_flags'),
+                            ('file', 'f_mode')])},
+            {'call': 'flock',
+             'reason': set([('fd', 'flags'),
+                            ('file', 'f_flags'),
+                            ('file', 'f_mode')])},
+            {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'openat',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'uselib',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'accept4',
+             'reason': set([('fd', 'flags'),
+                            ('file', 'f_flags'),
+                            ('file', 'f_mode')])},
+            {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'socketpair',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+            {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+            {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+            {'call': 'shmat',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'socket',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'pipe2',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+            {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+            {'call': 'perf_event_open',
+             'reason': set([('fd', 'flags'),
+                            ('file', 'f_flags'),
+                            ('file', 'f_mode')])},
+            {'call': 'shmdt',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+            {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+            {'call': 'acct',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'open',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_getsetattr',
+             'reason': set([('fd', 'flags'), ('file', 'f_flags')])},
+            {'call': 'dup',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+            {'call': 'setns',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+            {'call': 'listen', 'reason': set([('fd', 'flags')])},
+            {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+            {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'shmctl',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+            {'call': 'swapon',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+            {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'mmap_pgoff',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'readv', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+            {'call': 'write', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_open',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'bind', 'reason': set([('fd', 'flags')])},
+            {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'stat': [{'call': 'lstat',
+           'reason': set([('__old_kernel_stat', 'st_ino'),
+                          ('__old_kernel_stat', 'st_nlink')])},
+          {'call': 'fstat',
+           'reason': set([('__old_kernel_stat', 'st_ino'),
+                          ('__old_kernel_stat', 'st_nlink'),
+                          ('kstat', 'dev'),
+                          ('kstat', 'ino'),
+                          ('kstat', 'nlink'),
+                          ('kstat', 'rdev')])},
+          {'call': 'newfstat',
+           'reason': set([('kstat', 'dev'),
+                          ('kstat', 'ino'),
+                          ('kstat', 'nlink'),
+                          ('kstat', 'rdev')])}],
+ 'statfs': [{'call': 'ustat',
+             'reason': set([('kstatfs', 'f_ffree'), ('kstatfs', 'f_files')])},
+            {'call': 'fstatfs',
+             'reason': set([('kstatfs', 'f_ffree'), ('kstatfs', 'f_files')])},
+            {'call': 'fstatfs64',
+             'reason': set([('kstatfs', 'f_ffree'), ('kstatfs', 'f_files')])},
+            {'call': 'statfs64',
+             'reason': set([('kstatfs', 'f_ffree'), ('kstatfs', 'f_files')])}],
+ 'statfs64': [{'call': 'ustat',
+               'reason': set([('kstatfs', 'f_ffree'),
+                              ('kstatfs', 'f_files')])},
+              {'call': 'fstatfs',
+               'reason': set([('kstatfs', 'f_ffree'),
+                              ('kstatfs', 'f_files')])},
+              {'call': 'statfs',
+               'reason': set([('kstatfs', 'f_ffree'),
+                              ('kstatfs', 'f_files')])},
+              {'call': 'fstatfs64',
+               'reason': set([('kstatfs', 'f_ffree'),
+                              ('kstatfs', 'f_files')])}],
+ 'swapoff': [{'call': 'keyctl', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'rt_sigtimedwait',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'msgrcv', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'eventfd2', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'kill', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_getaffinity',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_setparam',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'memfd_create', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'ioprio_set', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('file', 'f_mapping')])},
+             {'call': 'dup3', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'getppid', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'capget', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_setaffinity',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'signal', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'semtimedop', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'umount', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_rr_get_interval',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'epoll_create1',
+              'reason': set([('file', 'f_mapping')])},
+             {'call': 'epoll_ctl', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'flock', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'openat', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'uselib', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'rt_sigprocmask',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'accept4', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'setsid', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sigaltstack', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_setattr',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'socketpair', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'migrate_pages',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'getitimer', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'setpgid', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'getsid', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'shmat', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'socket', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'pipe2', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'prlimit64', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'perf_event_open',
+              'reason': set([('file', 'f_mapping'), ('task_struct', 'mm')])},
+             {'call': 'shmdt', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'rt_sigaction', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'getpgid', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'acct', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'open', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'getpriority', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sigaction', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'dup', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'setns',
+              'reason': set([('file', 'f_mapping'), ('task_struct', 'mm')])},
+             {'call': 'fork', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'get_robust_list',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'mq_timedsend', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_getscheduler',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'ptrace', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'shmctl', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'swapon',
+              'reason': set([('file', 'f_mapping'),
+                             ('page', 'private'),
+                             ('swap_info_struct', 'cluster_info'),
+                             ('swap_info_struct', 'flags'),
+                             ('swap_info_struct', 'inuse_pages'),
+                             ('swap_info_struct', 'pages'),
+                             ('swap_info_struct', 'prio'),
+                             ('swap_info_struct', 'swap_map')])},
+             {'call': 'sched_getattr',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'getrusage', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'sched_setscheduler',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'setitimer', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'ioprio_get', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'vfork', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'prctl', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'move_pages', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'setpriority', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'clone', 'reason': set([('task_struct', 'mm')])},
+             {'call': 'mq_open', 'reason': set([('file', 'f_mapping')])},
+             {'call': 'sched_getparam',
+              'reason': set([('task_struct', 'mm')])},
+             {'call': 'open_by_handle_at',
+              'reason': set([('file', 'f_mapping')])}],
+ 'swapon': [{'call': 'mq_unlink', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'swapoff',
+             'reason': set([('inode', 'i_flags'),
+                            ('swap_info_struct', 'bdev'),
+                            ('swap_info_struct', 'flags'),
+                            ('swap_info_struct', 'percpu_cluster'),
+                            ('swap_info_struct', 'type')])},
+            {'call': 'fchmod', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'memfd_create', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'readlinkat', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'fchown', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('inode', 'i_flags')])},
+            {'call': 'uselib', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'fchmodat', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'inotify_add_watch',
+             'reason': set([('inode', 'i_flags')])},
+            {'call': 'ftruncate', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'ioctl', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'linkat', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'unlink', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'mq_getsetattr', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'faccessat', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'mq_timedsend', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'fchownat', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'mq_notify', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'sendfile', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'unlinkat', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'sendfile64', 'reason': set([('inode', 'i_flags')])}],
+ 'symlinkat': [{'call': 'sysfs',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'mq_unlink',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'swapoff',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'openat',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'uselib',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'renameat2',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'quotactl',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'acct',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'open',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'unlink',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'rmdir',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'swapon',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'mq_open',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'unlinkat',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])}],
+ 'sync_file_range': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+                     {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fremovexattr',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                     {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+                     {'call': 'read', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+                     {'call': 'mq_timedreceive',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                     {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+                     {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                     {'call': 'tee', 'reason': set([('fd', 'flags')])},
+                     {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                     {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getsockname',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+                     {'call': 'flock', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                     {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+                     {'call': 'old_readdir',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'inotify_rm_watch',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+                     {'call': 'inotify_add_watch',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                     {'call': 'splice', 'reason': set([('fd', 'flags')])},
+                     {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getpeername',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                     {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'perf_event_open',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'pwritev64v2',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                     {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+                     {'call': 'mq_getsetattr',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                     {'call': 'copy_file_range',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+                     {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+                     {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+                     {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'write', 'reason': set([('fd', 'flags')])},
+                     {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+                     {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                     {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'syncfs': [{'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+            {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+            {'call': 'writev', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+            {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+            {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+            {'call': 'read', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+            {'call': 'utime', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+            {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+            {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+            {'call': 'tee', 'reason': set([('fd', 'flags')])},
+            {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'connect', 'reason': set([('fd', 'flags')])},
+            {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+            {'call': 'flock', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+            {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+            {'call': 'splice', 'reason': set([('fd', 'flags')])},
+            {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+            {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+            {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+            {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+            {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+            {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+            {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+            {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+            {'call': 'listen', 'reason': set([('fd', 'flags')])},
+            {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+            {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+            {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'readv', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+            {'call': 'write', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+            {'call': 'bind', 'reason': set([('fd', 'flags')])},
+            {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'sysfs': [{'call': 'mq_unlink', 'reason': set([('filename', 'name')])},
+           {'call': 'swapoff', 'reason': set([('filename', 'name')])},
+           {'call': 'openat', 'reason': set([('filename', 'name')])},
+           {'call': 'uselib', 'reason': set([('filename', 'name')])},
+           {'call': 'renameat2', 'reason': set([('filename', 'name')])},
+           {'call': 'symlinkat', 'reason': set([('filename', 'name')])},
+           {'call': 'quotactl', 'reason': set([('filename', 'name')])},
+           {'call': 'acct', 'reason': set([('filename', 'name')])},
+           {'call': 'open', 'reason': set([('filename', 'name')])},
+           {'call': 'unlink', 'reason': set([('filename', 'name')])},
+           {'call': 'rmdir', 'reason': set([('filename', 'name')])},
+           {'call': 'swapon', 'reason': set([('filename', 'name')])},
+           {'call': 'mq_open', 'reason': set([('filename', 'name')])},
+           {'call': 'unlinkat', 'reason': set([('filename', 'name')])}],
+ 'sysinfo': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'rt_sigtimedwait',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('timespec', 'tv_nsec')])},
+             {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'mq_unlink', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'swapoff', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sched_getaffinity',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sched_setparam',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'fchmod', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'memfd_create',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'ioprio_set', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'readlinkat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'io_getevents',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'fchown', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('timespec', 'tv_nsec')])},
+             {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'utime', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sched_setaffinity',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'semtimedop',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('timespec', 'tv_nsec')])},
+             {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'settimeofday',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sched_rr_get_interval',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('timespec', 'tv_nsec')])},
+             {'call': 'timerfd_gettime',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'pselect6', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'uselib', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'rt_sigprocmask',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sigaltstack',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sched_setattr',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'migrate_pages',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'getitimer', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'fchmodat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'inotify_add_watch',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'timer_settime',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'ftruncate', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'timer_gettime',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'ioctl', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'prlimit64', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'perf_event_open',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'linkat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'stime', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'rt_sigaction',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'futimesat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'poll', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'select', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'unlink', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'getpriority',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'nanosleep', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'mq_getsetattr',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'faccessat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'get_robust_list',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'mq_timedsend',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('timespec', 'tv_nsec')])},
+             {'call': 'sched_getscheduler',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'swapon', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'epoll_wait', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sched_getattr',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'fchownat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'getrusage', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'fstat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'timerfd_settime',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sched_setscheduler',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'setitimer', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'ioprio_get', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'move_pages', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'setpriority',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'mq_notify', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sendfile', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'newfstat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'clock_nanosleep',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'unlinkat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sched_getparam',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'futex', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'recvmmsg', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sendfile64', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'ppoll', 'reason': set([('timespec', 'tv_nsec')])}],
+ 'syslog': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setparam',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioprio_set', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'semtimedop', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sigaltstack', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setattr',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'migrate_pages',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getitimer', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'prlimit64', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'perf_event_open',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getpriority', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'get_robust_list',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_getattr',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getrusage', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setitimer', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioprio_get', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'move_pages', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setpriority', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_getparam',
+             'reason': set([('mm_segment_t', 'seg')])}],
+ 'tee': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+         {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+         {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+         {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+         {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+         {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+         {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+         {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+         {'call': 'writev', 'reason': set([('fd', 'flags')])},
+         {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+         {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+         {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+         {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+         {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+         {'call': 'remap_file_pages', 'reason': set([('file', 'f_mode')])},
+         {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+         {'call': 'read', 'reason': set([('fd', 'flags')])},
+         {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+         {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+         {'call': 'utime', 'reason': set([('fd', 'flags')])},
+         {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+         {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+         {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+         {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+         {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+         {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+         {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+         {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+         {'call': 'connect', 'reason': set([('fd', 'flags')])},
+         {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+         {'call': 'epoll_ctl',
+          'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+         {'call': 'flock',
+          'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+         {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+         {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+         {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+         {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+         {'call': 'accept4',
+          'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+         {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+         {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+         {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+         {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+         {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+         {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+         {'call': 'splice', 'reason': set([('fd', 'flags')])},
+         {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+         {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+         {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+         {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+         {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+         {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+         {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+         {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+         {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+         {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+         {'call': 'perf_event_open',
+          'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+         {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+         {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+         {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+         {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+         {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+         {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+         {'call': 'open', 'reason': set([('file', 'f_mode')])},
+         {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+         {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+         {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+         {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+         {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+         {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+         {'call': 'listen', 'reason': set([('fd', 'flags')])},
+         {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+         {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+         {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+         {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+         {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+         {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+         {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+         {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+         {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+         {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+         {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+         {'call': 'readv', 'reason': set([('fd', 'flags')])},
+         {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+         {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+         {'call': 'write', 'reason': set([('fd', 'flags')])},
+         {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+         {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+         {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+         {'call': 'open_by_handle_at', 'reason': set([('file', 'f_mode')])},
+         {'call': 'bind', 'reason': set([('fd', 'flags')])},
+         {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+         {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'tgkill': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_set', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'semtimedop', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sigaltstack', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'migrate_pages',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prlimit64', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'getpriority', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'cred')])},
+            {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'ioprio_get', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'move_pages', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'setpriority', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'cred')])}],
+ 'timer_create': [{'call': 'clock_getres',
+                   'reason': set([('k_clock', 'timer_create')])},
+                  {'call': 'timer_delete',
+                   'reason': set([('k_clock', 'timer_create'),
+                                  ('k_itimer', 'it_pid')])},
+                  {'call': 'clock_gettime',
+                   'reason': set([('k_clock', 'timer_create')])},
+                  {'call': 'timer_settime',
+                   'reason': set([('k_clock', 'timer_create'),
+                                  ('k_itimer', 'it_pid')])},
+                  {'call': 'timer_gettime',
+                   'reason': set([('k_clock', 'timer_create'),
+                                  ('k_itimer', 'it_pid')])},
+                  {'call': 'clock_settime',
+                   'reason': set([('k_clock', 'timer_create')])},
+                  {'call': 'timer_getoverrun',
+                   'reason': set([('k_itimer', 'it_pid')])},
+                  {'call': 'clock_nanosleep',
+                   'reason': set([('k_clock', 'timer_create')])},
+                  {'call': 'clock_adjtime',
+                   'reason': set([('k_clock', 'timer_create')])}],
+ 'timer_delete': [{'call': 'keyctl',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'rt_sigtimedwait',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'msgrcv',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'kill',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'clock_getres',
+                   'reason': set([('k_clock', 'timer_del')])},
+                  {'call': 'sched_getaffinity',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'sched_setparam',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'ioprio_set',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'getppid',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'mq_timedreceive',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'capget',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'sched_setaffinity',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'signal',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'semtimedop',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'umount',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'timer_create',
+                   'reason': set([('k_clock', 'timer_del'),
+                                  ('k_itimer', 'it_pid'),
+                                  ('k_itimer', 'it_signal'),
+                                  ('k_itimer', 'sigq')])},
+                  {'call': 'clock_gettime',
+                   'reason': set([('k_clock', 'timer_del')])},
+                  {'call': 'sched_rr_get_interval',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'rt_sigprocmask',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'setsid',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'sigaltstack',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'sched_setattr',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'migrate_pages',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'getitimer',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'setpgid',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'timer_settime',
+                   'reason': set([('k_clock', 'timer_del'),
+                                  ('k_itimer', 'it_pid'),
+                                  ('k_itimer', 'it_signal'),
+                                  ('k_itimer', 'sigq')])},
+                  {'call': 'timer_gettime',
+                   'reason': set([('k_clock', 'timer_del'),
+                                  ('k_itimer', 'it_pid'),
+                                  ('k_itimer', 'it_signal'),
+                                  ('k_itimer', 'sigq')])},
+                  {'call': 'getsid',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'prlimit64',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'perf_event_open',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'rt_sigaction',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'getpgid',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'clock_settime',
+                   'reason': set([('k_clock', 'timer_del')])},
+                  {'call': 'getpriority',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'sigaction',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'setns',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'fork',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'get_robust_list',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'mq_timedsend',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'sched_getscheduler',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'ptrace',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'sched_getattr',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'getrusage',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'sched_setscheduler',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'setitimer',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'ioprio_get',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'vfork',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'prctl',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'move_pages',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'setpriority',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'timer_getoverrun',
+                   'reason': set([('k_itimer', 'it_pid'),
+                                  ('k_itimer', 'it_signal'),
+                                  ('k_itimer', 'sigq')])},
+                  {'call': 'clone',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'clock_nanosleep',
+                   'reason': set([('k_clock', 'timer_del')])},
+                  {'call': 'sched_getparam',
+                   'reason': set([('task_struct', 'signal')])},
+                  {'call': 'clock_adjtime',
+                   'reason': set([('k_clock', 'timer_del')])}],
+ 'timer_getoverrun': [{'call': 'keyctl',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'rt_sigtimedwait',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'msgrcv',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'kill',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'timer_delete',
+                       'reason': set([('k_itimer', 'it_signal')])},
+                      {'call': 'sched_getaffinity',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'sched_setparam',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'ioprio_set',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'getppid',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'mq_timedreceive',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'capget',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'sched_setaffinity',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'signal',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'semtimedop',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'umount',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'timer_create',
+                       'reason': set([('k_itimer', 'it_signal')])},
+                      {'call': 'sched_rr_get_interval',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'rt_sigprocmask',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'setsid',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'sigaltstack',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'sched_setattr',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'migrate_pages',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'getitimer',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'setpgid',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'timer_settime',
+                       'reason': set([('k_itimer', 'it_signal')])},
+                      {'call': 'timer_gettime',
+                       'reason': set([('k_itimer', 'it_signal')])},
+                      {'call': 'getsid',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'prlimit64',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'perf_event_open',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'rt_sigaction',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'getpgid',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'getpriority',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'sigaction',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'setns',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'fork',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'get_robust_list',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'mq_timedsend',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'sched_getscheduler',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'ptrace',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'sched_getattr',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'getrusage',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'sched_setscheduler',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'setitimer',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'ioprio_get',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'vfork',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'prctl',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'move_pages',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'setpriority',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'clone',
+                       'reason': set([('task_struct', 'signal')])},
+                      {'call': 'sched_getparam',
+                       'reason': set([('task_struct', 'signal')])}],
+ 'timer_gettime': [{'call': 'clock_getres',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'timer_delete',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'timer_create',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'clock_gettime',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'timer_settime',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'clock_settime',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'clock_nanosleep',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'clock_adjtime',
+                    'reason': set([('k_clock', 'timer_get')])}],
+ 'timer_settime': [{'call': 'clock_getres',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'timer_delete',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'timer_create',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'clock_gettime',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'timer_gettime',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'clock_settime',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'clock_nanosleep',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'clock_adjtime',
+                    'reason': set([('k_clock', 'timer_set')])}],
+ 'timerfd_create': [{'call': 'timerfd_gettime',
+                     'reason': set([('timerfd_ctx', 'clockid')])},
+                    {'call': 'timerfd_settime',
+                     'reason': set([('timerfd_ctx', 'clockid')])}],
+ 'timerfd_gettime': [{'call': 'timerfd_settime',
+                      'reason': set([('timerfd_ctx', 'expired'),
+                                     ('timerfd_ctx', 'tintv')])},
+                     {'call': 'timerfd_create',
+                      'reason': set([('timerfd_ctx', 'expired'),
+                                     ('timerfd_ctx', 'tintv')])}],
+ 'timerfd_settime': [{'call': 'timerfd_gettime',
+                      'reason': set([('timerfd_ctx', 'expired'),
+                                     ('timerfd_ctx', 'tintv')])},
+                     {'call': 'timerfd_create',
+                      'reason': set([('timerfd_ctx', 'expired'),
+                                     ('timerfd_ctx', 'tintv')])}],
+ 'tkill': [{'call': 'keyctl', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'rt_sigtimedwait',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'msgrcv', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'kill', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'sched_getaffinity',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'sched_setparam',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'ioprio_set', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'getppid', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'capget', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'sched_setaffinity',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'signal', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'semtimedop', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'umount', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'rt_sigprocmask',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'setsid', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'sigaltstack', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'sched_setattr',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'migrate_pages',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'getitimer', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'setpgid', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'getsid', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'prlimit64', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'perf_event_open',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'rt_sigaction', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'getpgid', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'getpriority', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'sigaction', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'setns', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'fork', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'get_robust_list',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'mq_timedsend', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'sched_getscheduler',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'ptrace', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'sched_getattr',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'getrusage', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'sched_setscheduler',
+            'reason': set([('task_struct', 'cred')])},
+           {'call': 'setitimer', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'ioprio_get', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'vfork', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'prctl', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'move_pages', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'setpriority', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'clone', 'reason': set([('task_struct', 'cred')])},
+           {'call': 'sched_getparam',
+            'reason': set([('task_struct', 'cred')])}],
+ 'umount': [{'call': 'syncfs', 'reason': set([('super_block', 's_flags')])},
+            {'call': 'keyctl', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'msgrcv', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'eventfd2',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'mq_unlink',
+             'reason': set([('vfsmount', 'mnt_flags'),
+                            ('vfsmount', 'mnt_root')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'swapoff',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'pivot_root',
+             'reason': set([('mount', 'mnt_ns'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('vfsmount', 'mnt_flags'),
+                            ('vfsmount', 'mnt_root')])},
+            {'call': 'memfd_create',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'ioprio_set', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'remap_file_pages',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'dup3',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'getppid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'capget', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'ustat', 'reason': set([('super_block', 's_flags')])},
+            {'call': 'unshare',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'signal', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'setreuid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'semtimedop', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'epoll_create1',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'epoll_ctl',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'flock',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'openat',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'lookup_dcookie',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'uselib',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'accept4',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'setsid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'sigaltstack',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'socketpair',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'migrate_pages',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'getitimer', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'setpgid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'getcwd',
+             'reason': set([('mount', 'mnt_ns'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('vfsmount', 'mnt_flags'),
+                            ('vfsmount', 'mnt_root')])},
+            {'call': 'getsid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'shmat',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'socket',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'pipe2',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'prlimit64', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'perf_event_open',
+             'reason': set([('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('task_struct', 'flags')])},
+            {'call': 'shmdt',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'quotactl',
+             'reason': set([('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('super_block', 's_flags')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'getpgid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'acct',
+             'reason': set([('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('vfsmount', 'mnt_flags'),
+                            ('vfsmount', 'mnt_root')])},
+            {'call': 'open',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'getpriority',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'sigaction', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'dup',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'setns',
+             'reason': set([('nsproxy', 'mnt_ns'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('task_struct', 'flags')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'ptrace', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'shmctl',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'swapon',
+             'reason': set([('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('super_block', 's_flags')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'getrusage', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'setresuid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'setitimer', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'ioprio_get', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'vfork', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'setuid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'mmap_pgoff',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'prctl', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'move_pages', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'setpriority',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'clone', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'mq_open',
+             'reason': set([('path', 'dentry'),
+                            ('path', 'mnt'),
+                            ('vfsmount', 'mnt_flags'),
+                            ('vfsmount', 'mnt_root')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'uname': [{'call': 'keyctl',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigtimedwait',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'msgrcv',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'kill', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getaffinity',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setparam',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ioprio_set',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'personality',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getppid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'capget',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setaffinity',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'signal',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'semtimedop',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'umount',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigprocmask',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setsid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sigaltstack',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setattr',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'migrate_pages',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getitimer',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setpgid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getsid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'prlimit64',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'perf_event_open',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigaction',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getpgid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getpriority',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sigaction',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setns', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'fork', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'get_robust_list',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getscheduler',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ptrace',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getattr',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getrusage',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setscheduler',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setitimer',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ioprio_get',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'vfork', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'prctl', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'move_pages',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setpriority',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'clone', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getparam',
+            'reason': set([('task_struct', 'personality')])}],
+ 'unlink': [{'call': 'eventfd2',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'mq_unlink', 'reason': set([('dentry', 'd_inode')])},
+            {'call': 'swapoff',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'pivot_root',
+             'reason': set([('dentry', 'd_inode'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt')])},
+            {'call': 'memfd_create',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'remap_file_pages',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'dup3',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'unshare',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'mkdirat', 'reason': set([('dentry', 'd_inode')])},
+            {'call': 'epoll_create1',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'epoll_ctl',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'flock',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'openat',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'lookup_dcookie',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'uselib',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'renameat2', 'reason': set([('dentry', 'd_inode')])},
+            {'call': 'accept4',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'socketpair',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'getcwd',
+             'reason': set([('dentry', 'd_inode'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt')])},
+            {'call': 'ftruncate', 'reason': set([('dentry', 'd_inode')])},
+            {'call': 'shmat',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'mknodat', 'reason': set([('dentry', 'd_inode')])},
+            {'call': 'socket',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'symlinkat', 'reason': set([('dentry', 'd_inode')])},
+            {'call': 'pipe2',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'perf_event_open',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'linkat', 'reason': set([('dentry', 'd_inode')])},
+            {'call': 'shmdt',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'quotactl',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'acct',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'open',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'rmdir', 'reason': set([('dentry', 'd_inode')])},
+            {'call': 'dup',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'setns',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'shmctl',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'swapon',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'mmap_pgoff',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+            {'call': 'mq_open',
+             'reason': set([('dentry', 'd_inode'),
+                            ('path', 'dentry'),
+                            ('path', 'mnt')])},
+            {'call': 'unlinkat', 'reason': set([('dentry', 'd_inode')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'unlinkat': [{'call': 'eventfd2',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'mq_unlink', 'reason': set([('dentry', 'd_inode')])},
+              {'call': 'swapoff',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'pivot_root',
+               'reason': set([('dentry', 'd_inode'),
+                              ('path', 'dentry'),
+                              ('path', 'mnt')])},
+              {'call': 'memfd_create',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'dup3',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'unshare',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'mkdirat', 'reason': set([('dentry', 'd_inode')])},
+              {'call': 'epoll_create1',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'epoll_ctl',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'flock',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'openat',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'lookup_dcookie',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'uselib',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'renameat2', 'reason': set([('dentry', 'd_inode')])},
+              {'call': 'accept4',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'socketpair',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'getcwd',
+               'reason': set([('dentry', 'd_inode'),
+                              ('path', 'dentry'),
+                              ('path', 'mnt')])},
+              {'call': 'ftruncate', 'reason': set([('dentry', 'd_inode')])},
+              {'call': 'shmat',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'mknodat', 'reason': set([('dentry', 'd_inode')])},
+              {'call': 'socket',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'symlinkat', 'reason': set([('dentry', 'd_inode')])},
+              {'call': 'pipe2',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'perf_event_open',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'linkat', 'reason': set([('dentry', 'd_inode')])},
+              {'call': 'shmdt',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'quotactl',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'acct',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'open',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'unlink', 'reason': set([('dentry', 'd_inode')])},
+              {'call': 'rmdir', 'reason': set([('dentry', 'd_inode')])},
+              {'call': 'dup',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'setns',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'shmctl',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'swapon',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'mmap_pgoff',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])},
+              {'call': 'mq_open',
+               'reason': set([('dentry', 'd_inode'),
+                              ('path', 'dentry'),
+                              ('path', 'mnt')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('path', 'dentry'), ('path', 'mnt')])}],
+ 'uselib': [{'call': 'syncfs', 'reason': set([('super_block', 's_iflags')])},
+            {'call': 'mq_unlink', 'reason': set([('vfsmount', 'mnt_flags')])},
+            {'call': 'pivot_root',
+             'reason': set([('vfsmount', 'mnt_flags')])},
+            {'call': 'ustat', 'reason': set([('super_block', 's_iflags')])},
+            {'call': 'umount',
+             'reason': set([('super_block', 's_iflags'),
+                            ('vfsmount', 'mnt_flags')])},
+            {'call': 'getcwd', 'reason': set([('vfsmount', 'mnt_flags')])},
+            {'call': 'quotactl',
+             'reason': set([('super_block', 's_iflags')])},
+            {'call': 'acct', 'reason': set([('vfsmount', 'mnt_flags')])},
+            {'call': 'swapon', 'reason': set([('super_block', 's_iflags')])},
+            {'call': 'mq_open', 'reason': set([('vfsmount', 'mnt_flags')])}],
+ 'ustat': [{'call': 'syncfs', 'reason': set([('super_block', 's_root')])},
+           {'call': 'umount', 'reason': set([('super_block', 's_root')])},
+           {'call': 'quotactl', 'reason': set([('super_block', 's_root')])},
+           {'call': 'swapon', 'reason': set([('super_block', 's_root')])}],
+ 'utime': [{'call': 'rt_sigtimedwait',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'mq_unlink', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'swapoff', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'fchmod', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'memfd_create', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'readlinkat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'io_getevents', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'fchown', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'semtimedop', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'settimeofday', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'timerfd_gettime',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'pselect6', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'uselib', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'fchmodat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'inotify_add_watch',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'timer_settime',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'ftruncate', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'timer_gettime',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'ioctl', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'linkat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'stime', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'futimesat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'poll', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'select', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'unlink', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'nanosleep', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'mq_getsetattr',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'faccessat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'mq_timedsend', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'swapon', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'epoll_wait', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'fchownat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'fstat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'timerfd_settime',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'mq_notify', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'sendfile', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'newfstat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'clock_nanosleep',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'unlinkat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'futex', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'recvmmsg', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'sendfile64', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'ppoll', 'reason': set([('timespec', 'tv_nsec')])}],
+ 'utimensat': [{'call': 'rt_sigtimedwait',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'mq_unlink',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'swapoff', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fchmod', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'memfd_create',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'readlinkat',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'io_getevents',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fchown', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'utime', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'semtimedop',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'settimeofday',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'timerfd_gettime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'pselect6', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'uselib', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fchmodat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'timer_settime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'ftruncate',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'timer_gettime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'ioctl', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'linkat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'stime', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'futimesat',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'poll', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'select', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'unlink', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'nanosleep',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'faccessat',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'swapon', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'epoll_wait',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fchownat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fstat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'timerfd_settime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'mq_notify',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'sendfile', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'newfstat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'clock_nanosleep',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'unlinkat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'futex', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'recvmmsg', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'sendfile64',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'ppoll', 'reason': set([('timespec', 'tv_nsec')])}],
+ 'vmsplice': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+              {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+              {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+              {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+              {'call': 'writev', 'reason': set([('fd', 'flags')])},
+              {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+              {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+              {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+              {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+              {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+              {'call': 'read', 'reason': set([('fd', 'flags')])},
+              {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+              {'call': 'utime', 'reason': set([('fd', 'flags')])},
+              {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+              {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+              {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+              {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+              {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+              {'call': 'tee', 'reason': set([('fd', 'flags')])},
+              {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+              {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+              {'call': 'connect', 'reason': set([('fd', 'flags')])},
+              {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+              {'call': 'epoll_ctl',
+               'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+              {'call': 'flock',
+               'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+              {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+              {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+              {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+              {'call': 'accept4',
+               'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+              {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+              {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+              {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+              {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+              {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+              {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+              {'call': 'splice', 'reason': set([('fd', 'flags')])},
+              {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+              {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+              {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+              {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+              {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+              {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+              {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+              {'call': 'perf_event_open',
+               'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+              {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+              {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+              {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+              {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+              {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+              {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+              {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+              {'call': 'listen', 'reason': set([('fd', 'flags')])},
+              {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+              {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+              {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+              {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+              {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+              {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+              {'call': 'readv', 'reason': set([('fd', 'flags')])},
+              {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+              {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+              {'call': 'write', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+              {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'bind', 'reason': set([('fd', 'flags')])},
+              {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'write': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+           {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+           {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+           {'call': 'writev', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+           {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+           {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+           {'call': 'read', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+           {'call': 'utime', 'reason': set([('fd', 'flags')])},
+           {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+           {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+           {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+           {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+           {'call': 'tee', 'reason': set([('fd', 'flags')])},
+           {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+           {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+           {'call': 'connect', 'reason': set([('fd', 'flags')])},
+           {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+           {'call': 'flock', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+           {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+           {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+           {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+           {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+           {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+           {'call': 'splice', 'reason': set([('fd', 'flags')])},
+           {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+           {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+           {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+           {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+           {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+           {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+           {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+           {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+           {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+           {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+           {'call': 'listen', 'reason': set([('fd', 'flags')])},
+           {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+           {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+           {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+           {'call': 'readv', 'reason': set([('fd', 'flags')])},
+           {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+           {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+           {'call': 'bind', 'reason': set([('fd', 'flags')])},
+           {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}]}
--- /dev/null	Fri Dec 21 15:00:34 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/implicit_dependencies/without_structs/implicit_dependencies.json	Fri Dec 21 15:00:34 2018
@@ -0,0 +1,1 @@
+{"lseek": ["epoll_ctl", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "flistxattr", "getdents64", "futimesat", "tee", "mq_timedreceive", "connect", "fadvise64_64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "pread64"], "syncfs": ["lseek", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "connect", "fadvise64_64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "pread64"], "epoll_ctl": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_create1", "getdents64", "futimesat", "tee", "mq_timedreceive", "connect", "fadvise64_64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "pread64"], "rt_sigtimedwait": ["clone", "rt_sigaction", "iopl", "msgrcv", "rt_sigqueueinfo", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "tgkill", "sched_getparam", "getpriority", "rt_sigprocmask", "rt_tgsigqueueinfo", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "fork", "tkill", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "sched_setattr", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "timer_create", "perf_event_open", "ioprio_get", "vfork", "rt_sigreturn", "ptrace"], "vmsplice": ["lseek", "syncfs", "flistxattr", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "fsync", "bpf", "eventfd2", "old_readdir", "sendto", "shutdown", "epoll_create1", "tee", "connect", "getsockname", "flock", "pwritev", "recvfrom", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "fcntl", "sync_file_range", "inotify_add_watch", "fstatfs64", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "pwritev64v2", "splice", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "msync", "epoll_wait", "utimensat", "ftruncate", "fadvise64_64", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "msgrcv": ["mq_timedsend", "msgsnd", "mq_timedreceive"], "uname": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "personality", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "io_getevents": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "io_destroy", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "io_setup", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "io_submit", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_getparam", "sched_setaffinity", "io_cancel", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "swapoff": ["swapon"], "newlstat": ["newstat", "newfstat", "newfstatat"], "pkey_alloc": ["get_mempolicy", "migrate_pages", "move_pages", "remap_file_pages", "io_setup", "msync", "shmdt", "getrusage", "modify_ldt", "io_destroy", "pkey_free", "brk", "mremap", "io_getevents", "swapoff", "prctl", "io_cancel", "mincore", "mbind"], "readahead": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "swapoff", "preadv", "getdents", "writev", "pwritev2", "fchmod", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "fsync", "bpf", "eventfd2", "old_readdir", "sendto", "shutdown", "epoll_create1", "tee", "connect", "getsockname", "flock", "pwritev", "recvfrom", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "fcntl", "sync_file_range", "inotify_add_watch", "fstatfs64", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "pwritev64v2", "splice", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "msync", "epoll_wait", "utimensat", "ftruncate", "fadvise64_64", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "newfstatat": ["newstat", "newlstat", "newfstat"], "preadv": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "fadvise64_64", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "msync", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "getdents": ["lseek", "syncfs", "flistxattr", "rt_sigtimedwait", "iopl", "msgrcv", "kill", "readahead", "preadv", "sched_getaffinity", "writev", "pwritev2", "fchmod", "signalfd4", "epoll_wait", "ioprio_set", "read", "getppid", "fchown", "sched_setattr", "mq_timedreceive", "capget", "utime", "sched_setaffinity", "fsync", "bpf", "signal", "semtimedop", "umount", "recvfrom", "old_readdir", "sendto", "fsetxattr", "tee", "sync_file_range", "connect", "getsockname", "flock", "pwritev", "rt_sigprocmask", "accept4", "fremovexattr", "setsid", "sigaltstack", "ioperm", "inotify_rm_watch", "fstatfs64", "fcntl", "migrate_pages", "getitimer", "setpgid", "keyctl", "inotify_add_watch", "preadv2", "fchdir", "ioprio_get", "getpeername", "sigaction", "getsid", "setsockopt", "getpriority", "prlimit64", "pwrite64", "perf_event_open", "vfork", "clone", "epoll_ctl", "pwritev64v2", "splice", "rt_sigaction", "getpgid", "sched_rr_get_interval", "getsockopt", "sched_setparam", "mq_getsetattr", "fdatasync", "setns", "listen", "fork", "shutdown", "get_robust_list", "futimesat", "mq_timedsend", "sched_getscheduler", "fgetxattr", "ptrace", "vmsplice", "fcntl64", "fallocate", "sched_getattr", "getrusage", "sched_setscheduler", "utimensat", "bind", "ftruncate", "fadvise64_64", "llseek", "getdents64", "pread64", "preadv64v2", "readv", "prctl", "move_pages", "copy_file_range", "fstatfs", "sched_getparam", "write", "setpriority", "mq_notify", "sendfile", "preadv64", "pwritev64", "ioctl", "setitimer", "sendfile64"], "timer_delete": ["clock_gettime", "clock_adjtime", "timer_settime", "timer_create", "timer_gettime", "clock_nanosleep", "clock_settime", "clock_getres"], "pwritev2": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "fadvise64_64", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "msync", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "fchmod": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "connect", "fadvise64_64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "pread64"], "pivot_root": ["mq_unlink", "getcwd", "mq_open", "umount", "acct"], "signalfd4": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "connect", "fadvise64_64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "pread64"], "epoll_wait": ["lseek", "syncfs", "flistxattr", "rt_sigtimedwait", "iopl", "msgrcv", "kill", "readahead", "preadv", "getdents", "sched_getaffinity", "writev", "pwritev2", "fchmod", "signalfd4", "ioprio_set", "read", "getppid", "fchown", "sched_setattr", "mq_timedreceive", "capget", "utime", "sched_setaffinity", "fsync", "bpf", "signal", "semtimedop", "umount", "recvfrom", "old_readdir", "sendto", "fsetxattr", "tee", "sync_file_range", "connect", "getsockname", "flock", "pwritev", "rt_sigprocmask", "accept4", "fremovexattr", "setsid", "sigaltstack", "ioperm", "inotify_rm_watch", "fstatfs64", "fcntl", "migrate_pages", "getitimer", "setpgid", "keyctl", "inotify_add_watch", "preadv2", "fchdir", "ioprio_get", "getpeername", "sigaction", "getsid", "setsockopt", "getpriority", "prlimit64", "pwrite64", "perf_event_open", "vfork", "clone", "epoll_ctl", "pwritev64v2", "splice", "rt_sigaction", "getpgid", "sched_rr_get_interval", "getsockopt", "sched_setparam", "mq_getsetattr", "fdatasync", "setns", "listen", "fork", "shutdown", "get_robust_list", "futimesat", "mq_timedsend", "sched_getscheduler", "fgetxattr", "ptrace", "vmsplice", "fcntl64", "fallocate", "sched_getattr", "getrusage", "sched_setscheduler", "utimensat", "bind", "ftruncate", "fadvise64_64", "llseek", "getdents64", "pread64", "preadv64v2", "readv", "prctl", "move_pages", "copy_file_range", "fstatfs", "sched_getparam", "write", "setpriority", "mq_notify", "sendfile", "preadv64", "pwritev64", "ioctl", "setitimer", "sendfile64"], "fstat": ["stat", "lstat"], "setgroups16": ["setgroups"], "delete_module": ["init_module", "finit_module"], "remap_file_pages": ["get_mempolicy", "munlockall", "msync", "madvise", "mprotect", "shmdt", "mremap", "munlock", "brk", "prctl", "mlockall", "mincore", "pkey_mprotect"], "dup3": ["unshare", "select", "dup2"], "read": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "connect", "fadvise64_64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "mq_timedsend", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "llseek", "pread64"], "preadv64": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "fadvise64_64", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "msync", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "fchown": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "connect", "fadvise64_64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "pread64"], "ioperm": ["clone", "rt_sigaction", "rt_sigtimedwait", "iopl", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "mq_timedreceive": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "msgrcv", "fadvise64_64", "swapoff", "acct", "flock", "open", "uselib", "accept4", "mq_getsetattr", "dup", "memfd_create", "socketpair", "mq_notify", "remap_file_pages", "dup3", "mq_timedsend", "openat", "mq_open", "shmctl", "msgsnd", "swapon", "msync", "shmat", "socket", "open_by_handle_at", "setns", "pipe2", "eventfd2", "perf_event_open"], "utime": ["linkat", "io_getevents", "rt_sigtimedwait", "futimesat", "mq_timedreceive", "mq_unlink", "fchownat", "fadvise64_64", "sched_rr_get_interval", "swapoff", "poll", "select", "recvmmsg", "clock_nanosleep", "pselect6", "uselib", "nanosleep", "mq_getsetattr", "faccessat", "fchmod", "memfd_create", "settimeofday", "mq_notify", "sendfile", "fchmodat", "inotify_add_watch", "mq_timedsend", "fchown", "ioctl", "timer_settime", "stime", "timer_gettime", "unlink", "swapon", "unlinkat", "readlinkat", "epoll_wait", "timerfd_gettime", "semtimedop", "futex", "timerfd_settime", "sendfile64", "ftruncate", "ppoll"], "sched_setaffinity": ["setuid", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "clone", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "setitimer", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setresuid", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "bpf": ["clone", "epoll_ctl", "shmdt", "rt_sigaction", "epoll_create1", "rt_sigtimedwait", "iopl", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "swapoff", "prctl", "acct", "flock", "open", "getitimer", "sched_getparam", "getpriority", "uselib", "swapon", "rt_sigprocmask", "accept4", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "memfd_create", "ioprio_set", "dup", "fork", "migrate_pages", "get_robust_list", "remap_file_pages", "dup3", "setpgid", "mq_timedsend", "openat", "keyctl", "getppid", "sched_getscheduler", "mq_open", "sched_setattr", "mq_timedreceive", "shmctl", "move_pages", "capget", "sigaction", "getsid", "msync", "shmat", "sched_setaffinity", "socket", "open_by_handle_at", "setns", "signal", "pipe2", "sched_getattr", "semtimedop", "umount", "socketpair", "eventfd2", "sched_setscheduler", "prlimit64", "setitimer", "perf_event_open", "ioprio_get", "mmap_pgoff", "vfork", "ptrace"], "newstat": ["newlstat", "newfstat", "newfstatat"], "semtimedop": ["linkat", "io_getevents", "rt_sigtimedwait", "futimesat", "semctl", "mq_unlink", "fchownat", "fadvise64_64", "sched_rr_get_interval", "swapoff", "poll", "select", "recvmmsg", "clock_nanosleep", "pselect6", "uselib", "nanosleep", "msgctl", "mq_getsetattr", "faccessat", "fchmod", "msgrcv", "memfd_create", "settimeofday", "mq_notify", "sendfile", "fchmodat", "inotify_add_watch", "mq_timedsend", "fchown", "ioctl", "timer_settime", "mq_timedreceive", "shmctl", "timer_gettime", "msgsnd", "unlink", "swapon", "unlinkat", "utime", "shmat", "readlinkat", "epoll_wait", "timerfd_gettime", "futex", "timerfd_settime", "sendfile64", "ftruncate", "ppoll", "stime"], "umount": ["setuid", "syncfs", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "mq_unlink", "getpgid", "kill", "fadvise64_64", "sched_rr_get_interval", "prctl", "acct", "clone", "sched_getparam", "getpriority", "swapon", "rt_sigprocmask", "quotactl", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "pivot_root", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "getcwd", "keyctl", "getppid", "sched_getscheduler", "mq_open", "mq_timedreceive", "move_pages", "capget", "sigaction", "getsid", "sched_setaffinity", "ustat", "setitimer", "signal", "setreuid", "sched_getattr", "semtimedop", "getrusage", "sched_setscheduler", "prlimit64", "setresuid", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "recvfrom": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "swapoff", "acct", "flock", "open", "uselib", "accept4", "mq_getsetattr", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "msync", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "old_readdir": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "connect", "fadvise64_64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "sendfile64", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "pread64"], "settimeofday": ["wait4", "clock_adjtime", "getitimer", "setitimer", "waitid", "adjtimex", "getrusage", "alarm", "select", "ppoll"], "timer_create": ["clock_gettime", "clock_adjtime", "timer_delete", "timer_settime", "timer_gettime", "clock_nanosleep", "clock_settime", "clock_getres"], "sendto": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "swapoff", "acct", "flock", "open", "uselib", "accept4", "mq_getsetattr", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "msync", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "mkdirat": ["syncfs", "quotactl", "ustat", "umount", "fadvise64_64", "swapon"], "newuname": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "personality", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "olduname": ["clone", "rt_sigaction", "rt_sigtimedwait", "iopl", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "personality", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "sched_setattr", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "tee": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "fsync", "bpf", "eventfd2", "old_readdir", "sendto", "shutdown", "epoll_create1", "connect", "getsockname", "flock", "pwritev", "recvfrom", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "fcntl", "sync_file_range", "inotify_add_watch", "fstatfs64", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "pwritev64v2", "splice", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "msync", "epoll_wait", "utimensat", "ftruncate", "fadvise64_64", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "semctl": ["semtimedop"], "syslog": ["clone", "rt_sigaction", "rt_sigtimedwait", "iopl", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "sched_setattr", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "rt_sigqueueinfo": ["tgkill", "rt_sigtimedwait", "rt_sigreturn", "rt_tgsigqueueinfo", "tkill", "kill", "timer_create"], "sync_file_range": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "connect", "fadvise64_64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "pread64"], "fadvise64_64": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "setsockopt", "tee", "mq_timedreceive", "mq_unlink", "fchownat", "pread64", "fsetxattr", "swapoff", "flock", "writev", "readahead", "bind", "preadv", "getsockopt", "getdents", "uselib", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "faccessat", "fchmod", "pwritev", "linkat", "sendfile64", "inotify_rm_watch", "signalfd4", "memfd_create", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "fchmodat", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "unlink", "swapon", "fdatasync", "unlinkat", "utime", "splice", "readlinkat", "fgetxattr", "readv", "fsync", "bpf", "epoll_wait", "flistxattr", "futimesat", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "connect"], "llseek": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "connect", "fadvise64_64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "pread64"], "flock": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "ustat", "fsync", "bpf", "umount", "eventfd2", "old_readdir", "sendto", "shutdown", "epoll_create1", "tee", "connect", "getsockname", "pwritev", "recvfrom", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "fcntl", "sync_file_range", "inotify_add_watch", "fstatfs64", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "quotactl", "pwritev64v2", "splice", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "msync", "epoll_wait", "utimensat", "ftruncate", "fadvise64_64", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "pwritev": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "fadvise64_64", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "msync", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "pselect6": ["rt_sigtimedwait", "iopl", "msgrcv", "mq_unlink", "kill", "io_getevents", "swapoff", "sched_getaffinity", "sched_setparam", "fchmod", "memfd_create", "ioprio_set", "readlinkat", "getppid", "fchown", "sched_setattr", "mq_timedreceive", "capget", "utime", "sched_setaffinity", "signal", "semtimedop", "umount", "linkat", "timerfd_gettime", "fchownat", "fadvise64_64", "uselib", "rt_sigprocmask", "inotify_add_watch", "setsid", "sigaltstack", "ioperm", "settimeofday", "migrate_pages", "getitimer", "fchmodat", "setpgid", "keyctl", "timer_settime", "stime", "ftruncate", "timer_gettime", "sigaction", "getsid", "futimesat", "prlimit64", "perf_event_open", "rt_sigaction", "getpgid", "sched_rr_get_interval", "poll", "select", "unlink", "getpriority", "nanosleep", "mq_getsetattr", "faccessat", "setns", "fork", "move_pages", "mq_timedsend", "sched_getscheduler", "ptrace", "swapon", "epoll_wait", "sched_getattr", "getrusage", "timerfd_settime", "sched_setscheduler", "ioprio_get", "vfork", "prctl", "get_robust_list", "sched_getparam", "ppoll", "setpriority", "mq_notify", "sendfile", "clone", "ioctl", "clock_nanosleep", "unlinkat", "setitimer", "futex", "recvmmsg", "sendfile64"], "uselib": ["syncfs", "quotactl", "getcwd", "ustat", "umount", "mq_unlink", "fadvise64_64", "acct", "mq_open", "pivot_root", "swapon"], "sysfs": ["swapon", "open", "uselib", "openat", "quotactl", "mq_open", "mq_unlink", "symlinkat", "rmdir", "swapoff", "acct", "unlink", "renameat2", "unlinkat"], "msgctl": ["clone", "rt_sigaction", "rt_sigtimedwait", "iopl", "msgrcv", "mq_unlink", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "msgsnd", "shmget", "sched_getparam", "getpriority", "rt_sigprocmask", "setpgid", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "semctl", "fork", "migrate_pages", "get_robust_list", "getitimer", "msgget", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_open", "sched_setattr", "mq_timedreceive", "shmctl", "capget", "sigaction", "getsid", "shmat", "sched_setaffinity", "semget", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "fremovexattr": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "connect", "fadvise64_64", "fsetxattr", "readv", "flock", "copy_file_range", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "writev", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "pread64"], "clock_adjtime": ["clock_gettime", "timer_delete", "timer_settime", "timer_create", "timer_gettime", "clock_nanosleep", "clock_settime", "clock_getres"], "setsid": ["exit_group", "timer_create"], "timerfd_create": ["timerfd_settime", "timerfd_gettime"], "set_trip_temp": ["get_trip_temp", "get_curr_temp"], "sched_setattr": ["clone", "rt_sigaction", "rt_sigtimedwait", "iopl", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "inotify_rm_watch": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "connect", "fadvise64_64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "fdatasync", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fallocate", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "pread64"], "renameat2": ["quotactl", "swapon", "uselib", "openat", "sysfs", "mq_open", "mq_unlink", "symlinkat", "rmdir", "swapoff", "acct", "unlink", "open", "unlinkat"], "keyctl": ["rt_sigaction", "rt_sigtimedwait", "msgrcv", "request_key", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "clone", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "setrlimit": ["prlimit64", "getrlimit", "old_getrlimit"], "fcntl": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "fsync", "bpf", "eventfd2", "old_readdir", "sendto", "shutdown", "epoll_create1", "tee", "connect", "getsockname", "flock", "pwritev", "recvfrom", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "sync_file_range", "inotify_add_watch", "fstatfs64", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "pwritev64v2", "splice", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "msync", "epoll_wait", "utimensat", "ftruncate", "fadvise64_64", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "migrate_pages": ["clone", "rt_sigaction", "rt_sigtimedwait", "iopl", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "fork", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "sched_setattr", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "getitimer": ["setitimer", "exit_group", "timer_create"], "setpgid": ["setuid", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "clone", "sched_getparam", "exit_group", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setresuid", "timer_create", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "init_module": ["delete_module", "finit_module"], "inotify_add_watch": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "tee", "mq_timedreceive", "connect", "fadvise64_64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "futimesat", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "pread64"], "preadv2": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "fadvise64_64", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "msync", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "timer_settime": ["clock_gettime", "clock_adjtime", "timer_delete", "timer_create", "timer_gettime", "clock_nanosleep", "clock_settime", "clock_getres"], "fchdir": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "connect", "fadvise64_64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "splice", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "mq_timedsend", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "llseek", "pread64"], "timer_gettime": ["clock_gettime", "clock_adjtime", "timer_delete", "timer_settime", "timer_create", "clock_nanosleep", "clock_settime", "clock_getres"], "msgsnd": ["shmat", "shmget", "msgget", "semget", "msgctl", "semtimedop", "semctl", "mq_unlink", "msgrcv", "shmctl", "mq_open", "setns"], "sysinfo": ["rt_sigtimedwait", "iopl", "msgrcv", "mq_unlink", "kill", "io_getevents", "swapoff", "sched_getaffinity", "sched_setparam", "fchmod", "memfd_create", "ioprio_set", "readlinkat", "getppid", "fchown", "sched_setattr", "mq_timedreceive", "capget", "utime", "sched_setaffinity", "signal", "semtimedop", "umount", "linkat", "timerfd_gettime", "fchownat", "fadvise64_64", "pselect6", "uselib", "rt_sigprocmask", "inotify_add_watch", "setsid", "sigaltstack", "ioperm", "settimeofday", "migrate_pages", "getitimer", "fchmodat", "setpgid", "keyctl", "timer_settime", "stime", "ftruncate", "timer_gettime", "sigaction", "getsid", "futimesat", "prlimit64", "perf_event_open", "rt_sigaction", "getpgid", "sched_rr_get_interval", "poll", "select", "unlink", "getpriority", "nanosleep", "mq_getsetattr", "faccessat", "setns", "fork", "move_pages", "mq_timedsend", "sched_getscheduler", "ptrace", "swapon", "epoll_wait", "sched_getattr", "getrusage", "timerfd_settime", "sched_setscheduler", "ioprio_get", "vfork", "prctl", "get_robust_list", "sched_getparam", "ppoll", "setpriority", "mq_notify", "sendfile", "clone", "ioctl", "clock_nanosleep", "unlinkat", "setitimer", "futex", "recvmmsg", "sendfile64"], "mknodat": ["syncfs", "quotactl", "ustat", "umount", "fadvise64_64", "swapon"], "setsockopt": ["accept4"], "munlockall": ["get_mempolicy", "remap_file_pages", "madvise", "mprotect", "shmdt", "mremap", "munlock", "msync", "brk", "prctl", "mlockall", "mincore", "pkey_mprotect"], "msync": ["get_mempolicy", "munlockall", "remap_file_pages", "madvise", "mprotect", "shmdt", "mremap", "munlock", "brk", "prctl", "mlockall", "mincore", "pkey_mprotect"], "ioctl": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "connect", "fadvise64_64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "fgetxattr", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "pread64"], "prlimit64": ["old_getrlimit", "setrlimit"], "set_mempolicy": ["get_mempolicy", "mbind"], "pwrite64": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "fsync", "bpf", "eventfd2", "old_readdir", "sendto", "shutdown", "epoll_create1", "tee", "connect", "getsockname", "flock", "pwritev", "recvfrom", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "fcntl", "sync_file_range", "inotify_add_watch", "fstatfs64", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "perf_event_open", "epoll_ctl", "pwritev64v2", "splice", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "msync", "epoll_wait", "utimensat", "ftruncate", "fadvise64_64", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "perf_event_open": ["lseek", "syncfs", "flistxattr", "rt_sigtimedwait", "iopl", "msgrcv", "kill", "readahead", "preadv", "getdents", "sched_getaffinity", "writev", "pwritev2", "fchmod", "signalfd4", "epoll_wait", "ioprio_set", "read", "getppid", "fchown", "sched_setattr", "mq_timedreceive", "capget", "utime", "sched_setaffinity", "fsync", "bpf", "signal", "setreuid", "semtimedop", "umount", "recvfrom", "old_readdir", "sendto", "fsetxattr", "tee", "sync_file_range", "connect", "getsockname", "flock", "pwritev", "rt_sigprocmask", "accept4", "fremovexattr", "setsid", "sigaltstack", "ioperm", "inotify_rm_watch", "fstatfs64", "setresuid", "fcntl", "migrate_pages", "getitimer", "setpgid", "keyctl", "inotify_add_watch", "preadv2", "fchdir", "ioprio_get", "getpeername", "sigaction", "getsid", "setsockopt", "prlimit64", "pwrite64", "vfork", "clone", "epoll_ctl", "pwritev64v2", "sched_setparam", "rt_sigaction", "getpgid", "sched_rr_get_interval", "getsockopt", "getpriority", "mq_getsetattr", "fdatasync", "setns", "listen", "fork", "shutdown", "get_robust_list", "futimesat", "mq_timedsend", "sched_getscheduler", "fgetxattr", "ptrace", "vmsplice", "fcntl64", "fallocate", "splice", "sched_getattr", "getrusage", "sched_setscheduler", "utimensat", "bind", "ftruncate", "fadvise64_64", "setuid", "llseek", "getdents64", "pread64", "preadv64v2", "readv", "prctl", "move_pages", "copy_file_range", "fstatfs", "sched_getparam", "write", "setpriority", "mq_notify", "sendfile", "preadv64", "pwritev64", "ioctl", "setitimer", "sendfile64"], "lstat": ["stat", "fstat"], "flistxattr": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "connect", "fadvise64_64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "pread64"], "rt_tgsigqueueinfo": ["tgkill", "rt_sigtimedwait", "rt_sigreturn", "tkill", "rt_sigqueueinfo", "kill", "timer_create"], "pwritev64v2": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "fadvise64_64", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "msync", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "splice": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "fsync", "bpf", "eventfd2", "old_readdir", "sendto", "shutdown", "epoll_create1", "tee", "connect", "getsockname", "flock", "pwritev", "recvfrom", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "fcntl", "sync_file_range", "inotify_add_watch", "fstatfs64", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "pwritev64v2", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "msync", "epoll_wait", "utimensat", "ftruncate", "fadvise64_64", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "symlinkat": ["quotactl", "swapon", "open", "uselib", "openat", "sysfs", "mq_open", "mq_unlink", "rmdir", "swapoff", "acct", "unlink", "renameat2", "unlinkat"], "brk": ["io_setup", "mprotect", "mremap", "io_destroy", "mbind", "io_getevents", "swapoff", "prctl", "modify_ldt", "shmdt", "munlock", "mincore", "get_mempolicy", "migrate_pages", "move_pages", "remap_file_pages", "io_cancel", "pkey_mprotect", "munlockall", "msync", "madvise", "getrusage", "mlockall"], "fsetxattr": ["lseek", "syncfs", "pwritev64v2", "splice", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "connect", "fadvise64_64", "getsockname", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "mq_timedsend", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "llseek", "pread64"], "acct": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "fadvise64_64", "swapoff", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "msync", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "poll": ["ppoll"], "clock_settime": ["clock_gettime", "clock_adjtime", "timer_delete", "timer_settime", "timer_create", "timer_gettime", "clock_nanosleep", "clock_getres"], "select": ["rt_sigtimedwait", "msgrcv", "mq_unlink", "kill", "io_getevents", "swapoff", "sched_getaffinity", "sched_setparam", "fchmod", "memfd_create", "ioprio_set", "personality", "readlinkat", "getppid", "fchown", "mq_timedreceive", "capget", "utime", "sched_setaffinity", "signal", "semtimedop", "umount", "linkat", "timerfd_gettime", "fchownat", "fadvise64_64", "pselect6", "uselib", "rt_sigprocmask", "inotify_add_watch", "setsid", "sigaltstack", "sched_setattr", "settimeofday", "migrate_pages", "getitimer", "fchmodat", "setpgid", "keyctl", "timer_settime", "stime", "ftruncate", "timer_gettime", "sigaction", "getsid", "futimesat", "prlimit64", "perf_event_open", "rt_sigaction", "getpgid", "sched_rr_get_interval", "poll", "unlink", "getpriority", "nanosleep", "mq_getsetattr", "faccessat", "setns", "fork", "move_pages", "mq_timedsend", "sched_getscheduler", "ptrace", "swapon", "epoll_wait", "sched_getattr", "getrusage", "timerfd_settime", "sched_setscheduler", "ioprio_get", "vfork", "prctl", "get_robust_list", "sched_getparam", "ppoll", "setpriority", "mq_notify", "sendfile", "clone", "ioctl", "clock_nanosleep", "unlinkat", "setitimer", "futex", "recvmmsg", "sendfile64"], "getsockopt": ["accept4"], "sigaction": ["clone", "rt_sigaction", "rt_sigtimedwait", "iopl", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "sched_setattr", "mq_timedreceive", "capget", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "nanosleep": ["linkat", "io_getevents", "rt_sigtimedwait", "futimesat", "mq_timedreceive", "mq_unlink", "fchownat", "fadvise64_64", "sched_rr_get_interval", "swapoff", "poll", "select", "recvmmsg", "clock_nanosleep", "pselect6", "uselib", "ppoll", "mq_getsetattr", "faccessat", "fchmod", "memfd_create", "settimeofday", "mq_notify", "sendfile", "fchmodat", "inotify_add_watch", "mq_timedsend", "fchown", "ioctl", "timer_settime", "stime", "timer_gettime", "unlink", "swapon", "unlinkat", "utime", "readlinkat", "epoll_wait", "timerfd_gettime", "semtimedop", "futex", "timerfd_settime", "sendfile64", "ftruncate"], "quotactl": ["ustat", "swapon", "open", "uselib", "openat", "sysfs", "syncfs", "umount", "mq_unlink", "symlinkat", "fadvise64_64", "swapoff", "mq_open", "acct", "unlink", "renameat2", "unlinkat", "rmdir"], "mq_getsetattr": ["mq_timedsend", "mq_open", "mq_timedreceive", "mq_notify"], "fallocate": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "connect", "fadvise64_64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "pread64"], "getdents64": ["lseek", "syncfs", "flistxattr", "rt_sigtimedwait", "iopl", "msgrcv", "kill", "readahead", "preadv", "getdents", "sched_getaffinity", "writev", "pwritev2", "fchmod", "signalfd4", "epoll_wait", "ioprio_set", "read", "getppid", "fchown", "sched_setattr", "mq_timedreceive", "capget", "utime", "sched_setaffinity", "fsync", "bpf", "signal", "semtimedop", "umount", "recvfrom", "old_readdir", "sendto", "fsetxattr", "tee", "sync_file_range", "connect", "getsockname", "flock", "pwritev", "rt_sigprocmask", "accept4", "fremovexattr", "setsid", "sigaltstack", "ioperm", "inotify_rm_watch", "fstatfs64", "fcntl", "migrate_pages", "getitimer", "setpgid", "keyctl", "inotify_add_watch", "preadv2", "fchdir", "ioprio_get", "getpeername", "sigaction", "getsid", "setsockopt", "getpriority", "prlimit64", "pwrite64", "perf_event_open", "vfork", "clone", "epoll_ctl", "pwritev64v2", "splice", "rt_sigaction", "getpgid", "sched_rr_get_interval", "getsockopt", "sched_setparam", "mq_getsetattr", "fdatasync", "setns", "listen", "fork", "shutdown", "get_robust_list", "futimesat", "mq_timedsend", "sched_getscheduler", "fgetxattr", "ptrace", "vmsplice", "fcntl64", "fallocate", "sched_getattr", "getrusage", "sched_setscheduler", "utimensat", "bind", "ftruncate", "fadvise64_64", "llseek", "pread64", "preadv64v2", "readv", "prctl", "move_pages", "copy_file_range", "fstatfs", "sched_getparam", "write", "setpriority", "mq_notify", "sendfile", "preadv64", "pwritev64", "ioctl", "setitimer", "sendfile64"], "get_mempolicy": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mbind", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "set_mempolicy", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "io_submit": ["clone", "rt_sigaction", "rt_sigtimedwait", "iopl", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "sched_setattr", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "futimesat": ["linkat", "io_getevents", "rt_sigtimedwait", "adjtimex", "mq_timedreceive", "mq_unlink", "fchownat", "fadvise64_64", "sched_rr_get_interval", "swapoff", "poll", "select", "recvmmsg", "clock_nanosleep", "pselect6", "uselib", "nanosleep", "mq_getsetattr", "faccessat", "fchmod", "memfd_create", "settimeofday", "mq_notify", "sendfile", "getitimer", "fchmodat", "inotify_add_watch", "mq_timedsend", "waitid", "fchown", "ioctl", "timer_settime", "stime", "timer_gettime", "unlink", "swapon", "unlinkat", "utime", "wait4", "readlinkat", "clock_adjtime", "epoll_wait", "alarm", "timerfd_gettime", "semtimedop", "getrusage", "futex", "timerfd_settime", "sendfile64", "setitimer", "ftruncate", "ppoll"], "mq_timedsend": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "mq_timedreceive", "fadvise64_64", "swapoff", "acct", "flock", "open", "uselib", "accept4", "mq_getsetattr", "dup", "memfd_create", "socketpair", "mq_notify", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "msync", "shmat", "socket", "open_by_handle_at", "setns", "pipe2", "eventfd2", "perf_event_open"], "sched_getscheduler": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "fgetxattr": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "connect", "fadvise64_64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "pread64"], "ptrace": ["setuid", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "pause", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "sigsuspend", "getppid", "rt_sigsuspend", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "epoll_wait", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setresuid", "setitimer", "perf_event_open", "ioprio_get", "clone", "vfork"], "shmctl": ["clone", "rt_sigaction", "rt_sigtimedwait", "iopl", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "msgsnd", "sched_getparam", "getpriority", "rt_sigprocmask", "msgctl", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "semctl", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "sched_setattr", "mq_timedreceive", "capget", "sigaction", "getsid", "shmat", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "fcntl64": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "fsync", "bpf", "eventfd2", "old_readdir", "sendto", "shutdown", "epoll_create1", "tee", "connect", "getsockname", "flock", "pwritev", "recvfrom", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "fcntl", "sync_file_range", "inotify_add_watch", "fstatfs64", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "pwritev64v2", "splice", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "swapon", "fdatasync", "msync", "epoll_wait", "utimensat", "ftruncate", "fadvise64_64", "llseek", "getdents64", "mmap_pgoff", "pread64", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "old_getrlimit": ["prlimit64", "setrlimit"], "swapon": ["linkat", "mq_timedreceive", "mq_unlink", "fchownat", "fadvise64_64", "swapoff", "uselib", "mq_getsetattr", "faccessat", "fchmod", "memfd_create", "mq_notify", "sendfile", "fchmodat", "inotify_add_watch", "mq_timedsend", "fchown", "ioctl", "unlink", "unlinkat", "readlinkat", "sendfile64", "ftruncate"], "pkey_mprotect": ["clone", "rt_sigaction", "rt_sigtimedwait", "mprotect", "msgrcv", "mlockall", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "getitimer", "sched_getparam", "getpriority", "rt_sigprocmask", "shmdt", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "mincore", "personality", "fork", "get_mempolicy", "migrate_pages", "get_robust_list", "remap_file_pages", "mremap", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "munlock", "mq_timedreceive", "ioprio_get", "capget", "sigaction", "getsid", "sched_setaffinity", "munlockall", "msync", "madvise", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "brk", "vfork", "ptrace"], "madvise": ["get_mempolicy", "munlockall", "remap_file_pages", "mprotect", "shmdt", "mremap", "munlock", "msync", "brk", "prctl", "mlockall", "mincore", "pkey_mprotect"], "statfs": ["ustat", "fstatfs64", "fstatfs", "statfs64"], "mount": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "personality", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "sched_getattr": ["clone", "rt_sigaction", "rt_sigtimedwait", "iopl", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "sched_setattr", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "getrusage": ["exit_group", "timer_create"], "timerfd_settime": ["timerfd_gettime", "timerfd_create"], "utimensat": ["linkat", "io_getevents", "rt_sigtimedwait", "futimesat", "mq_timedreceive", "mq_unlink", "fchownat", "fadvise64_64", "sched_rr_get_interval", "swapoff", "poll", "select", "recvmmsg", "clock_nanosleep", "pselect6", "uselib", "nanosleep", "mq_getsetattr", "faccessat", "fchmod", "memfd_create", "settimeofday", "mq_notify", "sendfile", "fchmodat", "inotify_add_watch", "mq_timedsend", "fchown", "ioctl", "timer_settime", "stime", "timer_gettime", "unlink", "swapon", "unlinkat", "utime", "readlinkat", "epoll_wait", "timerfd_gettime", "semtimedop", "futex", "timerfd_settime", "sendfile64", "ftruncate", "ppoll"], "ftruncate": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "mq_timedreceive", "mq_unlink", "fchownat", "fadvise64_64", "swapoff", "acct", "flock", "open", "fchmodat", "uselib", "accept4", "mq_getsetattr", "faccessat", "fchmod", "linkat", "memfd_create", "socketpair", "mq_notify", "sendfile", "remap_file_pages", "dup3", "inotify_add_watch", "mq_timedsend", "openat", "mq_open", "fchown", "dup", "ioctl", "shmctl", "unlink", "swapon", "unlinkat", "msync", "shmat", "readlinkat", "socket", "open_by_handle_at", "setns", "pipe2", "eventfd2", "sendfile64", "perf_event_open"], "io_setup": ["io_destroy", "io_submit", "io_cancel", "io_getevents"], "mprotect": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "mlockall", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "getitimer", "sched_getparam", "getpriority", "rt_sigprocmask", "shmdt", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "mincore", "personality", "fork", "get_mempolicy", "migrate_pages", "get_robust_list", "remap_file_pages", "mremap", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "munlock", "mq_timedreceive", "ioprio_get", "capget", "sigaction", "getsid", "pkey_mprotect", "sched_setaffinity", "munlockall", "msync", "madvise", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "brk", "vfork", "ptrace"], "mremap": ["clone", "io_getevents", "rt_sigaction", "rt_sigtimedwait", "mprotect", "msgrcv", "mlockall", "io_destroy", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "swapoff", "prctl", "move_pages", "getitimer", "io_setup", "getpriority", "rt_sigprocmask", "shmdt", "sched_getaffinity", "modify_ldt", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "mincore", "personality", "fork", "get_mempolicy", "migrate_pages", "get_robust_list", "remap_file_pages", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "munlock", "mbind", "sched_getparam", "mq_timedreceive", "ioprio_get", "io_cancel", "capget", "sigaction", "getsid", "pkey_mprotect", "sched_setaffinity", "munlockall", "msync", "madvise", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "brk", "vfork", "ptrace"], "io_destroy": ["io_submit", "io_cancel", "io_setup", "io_getevents"], "pread64": ["lseek", "syncfs", "flistxattr", "vmsplice", "mq_timedreceive", "swapoff", "readahead", "preadv", "getdents", "writev", "pwritev2", "fchmod", "signalfd4", "memfd_create", "remap_file_pages", "dup3", "read", "preadv64", "fchown", "utime", "fsync", "bpf", "eventfd2", "old_readdir", "sendto", "shutdown", "epoll_create1", "tee", "fadvise64_64", "getsockname", "flock", "pwritev", "recvfrom", "uselib", "accept4", "fremovexattr", "inotify_rm_watch", "socketpair", "fcntl", "sync_file_range", "inotify_add_watch", "fstatfs64", "preadv2", "fchdir", "getpeername", "shmat", "futimesat", "socket", "pipe2", "pwrite64", "perf_event_open", "epoll_ctl", "pwritev64v2", "splice", "fsetxattr", "acct", "open", "getsockopt", "shmdt", "mq_getsetattr", "dup", "fallocate", "setns", "listen", "setsockopt", "mq_timedsend", "fgetxattr", "shmctl", "fcntl64", "swapon", "fdatasync", "msync", "epoll_wait", "utimensat", "ftruncate", "connect", "llseek", "getdents64", "mmap_pgoff", "preadv64v2", "readv", "copy_file_range", "fstatfs", "write", "mq_notify", "sendfile", "openat", "pwritev64", "mq_open", "ioctl", "open_by_handle_at", "bind", "sendfile64"], "preadv64v2": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "fadvise64_64", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "msync", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "prctl": ["setuid", "io_getevents", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "io_destroy", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "swapoff", "move_pages", "clone", "getitimer", "io_setup", "getpriority", "rt_sigprocmask", "shmdt", "sched_getaffinity", "modify_ldt", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "mincore", "personality", "fork", "get_mempolicy", "migrate_pages", "get_robust_list", "remap_file_pages", "mremap", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mbind", "mq_timedreceive", "ioprio_get", "capget", "sigaction", "getsid", "sched_getparam", "sched_setaffinity", "io_cancel", "msync", "setitimer", "signal", "setreuid", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "setresuid", "perf_event_open", "brk", "vfork", "ptrace"], "copy_file_range": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "connect", "fadvise64_64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "write", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "pread64"], "fstatfs": ["statfs", "ustat", "fstatfs64", "statfs64"], "modify_ldt": ["set_thread_area", "get_thread_area"], "sched_getparam": ["clone", "rt_sigaction", "rt_sigtimedwait", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "fstatfs64": ["statfs", "ustat", "statfs64", "fstatfs"], "rt_sigreturn": ["clone", "rt_sigaction", "rt_sigtimedwait", "iopl", "msgrcv", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "sched_setattr", "mq_timedreceive", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "write": ["lseek", "syncfs", "pwritev64v2", "getsockname", "fstatfs", "epoll_ctl", "getdents64", "futimesat", "tee", "mq_timedreceive", "connect", "fadvise64_64", "fsetxattr", "readv", "flock", "writev", "readahead", "preadv", "getsockopt", "getdents", "fallocate", "accept4", "mq_getsetattr", "fremovexattr", "pwritev2", "fchmod", "pwritev", "sendfile64", "inotify_rm_watch", "signalfd4", "epoll_wait", "fstatfs64", "listen", "fcntl", "shutdown", "sync_file_range", "sendfile", "inotify_add_watch", "read", "pwritev64", "pwrite64", "preadv64", "fchown", "ioctl", "preadv2", "preadv64v2", "fchdir", "vmsplice", "fcntl64", "getpeername", "fdatasync", "utime", "splice", "setsockopt", "fsync", "bpf", "bind", "flistxattr", "fgetxattr", "recvfrom", "copy_file_range", "old_readdir", "utimensat", "sendto", "perf_event_open", "ftruncate", "mq_notify", "mq_timedsend", "llseek", "pread64"], "munlock": ["get_mempolicy", "munlockall", "remap_file_pages", "madvise", "mprotect", "shmdt", "mremap", "msync", "brk", "prctl", "mlockall", "mincore", "pkey_mprotect"], "shmdt": ["get_mempolicy", "munlockall", "remap_file_pages", "madvise", "mprotect", "mremap", "munlock", "msync", "brk", "prctl", "mlockall", "mincore", "pkey_mprotect"], "getrlimit": ["prlimit64", "old_getrlimit", "setrlimit"], "mincore": ["clone", "rt_sigaction", "rt_sigtimedwait", "mprotect", "iopl", "msgrcv", "mlockall", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "getitimer", "sched_getparam", "getpriority", "rt_sigprocmask", "shmdt", "sched_getaffinity", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "fork", "get_mempolicy", "migrate_pages", "get_robust_list", "remap_file_pages", "mremap", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "munlock", "sched_setattr", "mq_timedreceive", "ioprio_get", "capget", "sigaction", "getsid", "pkey_mprotect", "sched_setaffinity", "munlockall", "msync", "madvise", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "brk", "vfork", "ptrace"], "mq_notify": ["tgkill", "mq_timedsend", "rt_sigtimedwait", "rt_sigreturn", "rt_tgsigqueueinfo", "mq_getsetattr", "mq_timedreceive", "tkill", "rt_sigqueueinfo", "timer_create"], "sendfile": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "fadvise64_64", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "msync", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "stat": ["fstat", "lstat"], "newfstat": ["newstat", "newlstat", "newfstatat"], "timerfd_gettime": ["timerfd_settime", "timerfd_create"], "pwritev64": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "fadvise64_64", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "msync", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "mq_open": ["quotactl", "swapon", "open", "uselib", "openat", "sysfs", "mq_unlink", "symlinkat", "rmdir", "swapoff", "acct", "unlink", "renameat2", "unlinkat"], "statfs64": ["statfs", "ustat", "fstatfs64", "fstatfs"], "set_thread_area": ["clone", "rt_sigaction", "rt_sigtimedwait", "iopl", "mq_timedreceive", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "prctl", "move_pages", "sched_getparam", "getpriority", "rt_sigprocmask", "sched_getaffinity", "arch_prctl", "sched_setparam", "setsid", "setpriority", "sigaltstack", "ioperm", "setns", "ioprio_set", "fork", "migrate_pages", "get_robust_list", "getitimer", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "sched_setattr", "msgrcv", "capget", "sigaction", "getsid", "sched_setaffinity", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "ioprio_get", "vfork", "ptrace"], "clock_nanosleep": ["clock_gettime", "io_getevents", "linkat", "rt_sigtimedwait", "futimesat", "mq_timedreceive", "mq_unlink", "fchownat", "fadvise64_64", "sched_rr_get_interval", "swapoff", "poll", "clock_settime", "select", "clock_getres", "recvmmsg", "pselect6", "uselib", "nanosleep", "timer_delete", "mq_getsetattr", "faccessat", "fchmod", "memfd_create", "settimeofday", "mq_notify", "sendfile", "fchmodat", "inotify_add_watch", "mq_timedsend", "fchown", "ioctl", "timer_settime", "stime", "timer_gettime", "unlink", "swapon", "unlinkat", "utime", "readlinkat", "clock_adjtime", "epoll_wait", "timerfd_gettime", "semtimedop", "futex", "timerfd_settime", "sendfile64", "timer_create", "ftruncate", "ppoll"], "getgroups16": ["setgroups", "setgroups16"], "io_cancel": ["io_destroy", "io_submit", "io_setup", "io_getevents"], "setitimer": ["wait4", "clock_adjtime", "getitimer", "exit_group", "waitid", "adjtimex", "getrusage", "settimeofday", "timer_create", "alarm", "select", "ppoll"], "alarm": ["wait4", "clock_adjtime", "getitimer", "setitimer", "waitid", "adjtimex", "getrusage", "select", "ppoll", "settimeofday"], "futex": ["linkat", "io_getevents", "rt_sigtimedwait", "futimesat", "mq_timedreceive", "mq_unlink", "fchownat", "fadvise64_64", "sched_rr_get_interval", "swapoff", "poll", "select", "recvmmsg", "clock_nanosleep", "pselect6", "uselib", "nanosleep", "mq_getsetattr", "faccessat", "fchmod", "memfd_create", "settimeofday", "mq_notify", "sendfile", "fchmodat", "inotify_add_watch", "mq_timedsend", "fchown", "ioctl", "timer_settime", "stime", "timer_gettime", "unlink", "swapon", "unlinkat", "utime", "readlinkat", "epoll_wait", "timerfd_gettime", "semtimedop", "timerfd_settime", "sendfile64", "ftruncate", "ppoll"], "recvmmsg": ["linkat", "io_getevents", "rt_sigtimedwait", "futimesat", "mq_timedreceive", "mq_unlink", "fchownat", "fadvise64_64", "sched_rr_get_interval", "swapoff", "poll", "select", "timerfd_settime", "clock_nanosleep", "pselect6", "uselib", "nanosleep", "mq_getsetattr", "faccessat", "fchmod", "memfd_create", "settimeofday", "mq_notify", "sendfile", "fchmodat", "inotify_add_watch", "mq_timedsend", "fchown", "ioctl", "timer_settime", "stime", "timer_gettime", "unlink", "swapon", "unlinkat", "utime", "readlinkat", "epoll_wait", "timerfd_gettime", "semtimedop", "futex", "recvfrom", "sendfile64", "sendto", "ftruncate", "ppoll"], "finit_module": ["delete_module", "init_module"], "sendfile64": ["epoll_ctl", "shmdt", "epoll_create1", "mmap_pgoff", "fadvise64_64", "swapoff", "acct", "flock", "open", "uselib", "accept4", "dup", "setns", "socketpair", "remap_file_pages", "dup3", "openat", "mq_open", "shmctl", "swapon", "msync", "shmat", "socket", "open_by_handle_at", "memfd_create", "pipe2", "eventfd2", "perf_event_open"], "mlockall": ["clone", "io_getevents", "rt_sigaction", "rt_sigtimedwait", "mprotect", "msgrcv", "io_destroy", "getpgid", "kill", "getrusage", "sched_rr_get_interval", "swapoff", "prctl", "move_pages", "getitimer", "io_setup", "getpriority", "rt_sigprocmask", "shmdt", "sched_getaffinity", "modify_ldt", "sched_setparam", "setsid", "setpriority", "sigaltstack", "sched_setattr", "setns", "ioprio_set", "mincore", "personality", "fork", "get_mempolicy", "migrate_pages", "get_robust_list", "remap_file_pages", "mremap", "setpgid", "mq_timedsend", "keyctl", "getppid", "sched_getscheduler", "munlock", "mbind", "sched_getparam", "mq_timedreceive", "ioprio_get", "io_cancel", "capget", "sigaction", "getsid", "pkey_mprotect", "sched_setaffinity", "munlockall", "msync", "madvise", "setitimer", "signal", "sched_getattr", "semtimedop", "umount", "sched_setscheduler", "prlimit64", "perf_event_open", "brk", "vfork", "ptrace"], "ppoll": ["rt_sigtimedwait", "msgrcv", "mq_unlink", "kill", "io_getevents", "swapoff", "sched_getaffinity", "sched_setparam", "fchmod", "memfd_create", "ioprio_set", "personality", "readlinkat", "getppid", "fchown", "mq_timedreceive", "capget", "utime", "sched_setaffinity", "signal", "semtimedop", "umount", "linkat", "timerfd_gettime", "fchownat", "fadvise64_64", "pselect6", "uselib", "rt_sigprocmask", "inotify_add_watch", "setsid", "sigaltstack", "sched_setattr", "settimeofday", "migrate_pages", "getitimer", "fchmodat", "setpgid", "keyctl", "timer_settime", "stime", "ftruncate", "timer_gettime", "sigaction", "getsid", "futimesat", "prlimit64", "perf_event_open", "rt_sigaction", "getpgid", "sched_rr_get_interval", "poll", "select", "unlink", "getpriority", "nanosleep", "mq_getsetattr", "faccessat", "setns", "fork", "move_pages", "mq_timedsend", "sched_getscheduler", "ptrace", "swapon", "epoll_wait", "sched_getattr", "getrusage", "timerfd_settime", "sched_setscheduler", "ioprio_get", "vfork", "prctl", "get_robust_list", "sched_getparam", "setpriority", "mq_notify", "sendfile", "clone", "ioctl", "clock_nanosleep", "unlinkat", "setitimer", "futex", "recvmmsg", "sendfile64"]}
--- /dev/null	Fri Dec 21 15:00:34 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/implicit_dependencies/without_structs/implicit_dependencies.pretty	Fri Dec 21 15:00:34 2018
@@ -0,0 +1,6119 @@
+{'acct': set(['accept4',
+              'dup',
+              'dup3',
+              'epoll_create1',
+              'epoll_ctl',
+              'eventfd2',
+              'fadvise64_64',
+              'flock',
+              'memfd_create',
+              'mmap_pgoff',
+              'mq_open',
+              'msync',
+              'open',
+              'open_by_handle_at',
+              'openat',
+              'perf_event_open',
+              'pipe2',
+              'remap_file_pages',
+              'setns',
+              'shmat',
+              'shmctl',
+              'shmdt',
+              'socket',
+              'socketpair',
+              'swapoff',
+              'swapon',
+              'uselib']),
+ 'alarm': set(['adjtimex',
+               'clock_adjtime',
+               'getitimer',
+               'getrusage',
+               'ppoll',
+               'select',
+               'setitimer',
+               'settimeofday',
+               'wait4',
+               'waitid']),
+ 'bpf': set(['accept4',
+             'acct',
+             'capget',
+             'clone',
+             'dup',
+             'dup3',
+             'epoll_create1',
+             'epoll_ctl',
+             'eventfd2',
+             'flock',
+             'fork',
+             'get_robust_list',
+             'getitimer',
+             'getpgid',
+             'getppid',
+             'getpriority',
+             'getrusage',
+             'getsid',
+             'ioperm',
+             'iopl',
+             'ioprio_get',
+             'ioprio_set',
+             'keyctl',
+             'kill',
+             'memfd_create',
+             'migrate_pages',
+             'mmap_pgoff',
+             'move_pages',
+             'mq_open',
+             'mq_timedreceive',
+             'mq_timedsend',
+             'msgrcv',
+             'msync',
+             'open',
+             'open_by_handle_at',
+             'openat',
+             'perf_event_open',
+             'pipe2',
+             'prctl',
+             'prlimit64',
+             'ptrace',
+             'remap_file_pages',
+             'rt_sigaction',
+             'rt_sigprocmask',
+             'rt_sigtimedwait',
+             'sched_getaffinity',
+             'sched_getattr',
+             'sched_getparam',
+             'sched_getscheduler',
+             'sched_rr_get_interval',
+             'sched_setaffinity',
+             'sched_setattr',
+             'sched_setparam',
+             'sched_setscheduler',
+             'semtimedop',
+             'setitimer',
+             'setns',
+             'setpgid',
+             'setpriority',
+             'setsid',
+             'shmat',
+             'shmctl',
+             'shmdt',
+             'sigaction',
+             'sigaltstack',
+             'signal',
+             'socket',
+             'socketpair',
+             'swapoff',
+             'swapon',
+             'umount',
+             'uselib',
+             'vfork']),
+ 'brk': set(['get_mempolicy',
+             'getrusage',
+             'io_cancel',
+             'io_destroy',
+             'io_getevents',
+             'io_setup',
+             'madvise',
+             'mbind',
+             'migrate_pages',
+             'mincore',
+             'mlockall',
+             'modify_ldt',
+             'move_pages',
+             'mprotect',
+             'mremap',
+             'msync',
+             'munlock',
+             'munlockall',
+             'pkey_mprotect',
+             'prctl',
+             'remap_file_pages',
+             'shmdt',
+             'swapoff']),
+ 'clock_adjtime': set(['clock_getres',
+                       'clock_gettime',
+                       'clock_nanosleep',
+                       'clock_settime',
+                       'timer_create',
+                       'timer_delete',
+                       'timer_gettime',
+                       'timer_settime']),
+ 'clock_nanosleep': set(['clock_adjtime',
+                         'clock_getres',
+                         'clock_gettime',
+                         'clock_settime',
+                         'epoll_wait',
+                         'faccessat',
+                         'fadvise64_64',
+                         'fchmod',
+                         'fchmodat',
+                         'fchown',
+                         'fchownat',
+                         'ftruncate',
+                         'futex',
+                         'futimesat',
+                         'inotify_add_watch',
+                         'io_getevents',
+                         'ioctl',
+                         'linkat',
+                         'memfd_create',
+                         'mq_getsetattr',
+                         'mq_notify',
+                         'mq_timedreceive',
+                         'mq_timedsend',
+                         'mq_unlink',
+                         'nanosleep',
+                         'poll',
+                         'ppoll',
+                         'pselect6',
+                         'readlinkat',
+                         'recvmmsg',
+                         'rt_sigtimedwait',
+                         'sched_rr_get_interval',
+                         'select',
+                         'semtimedop',
+                         'sendfile',
+                         'sendfile64',
+                         'settimeofday',
+                         'stime',
+                         'swapoff',
+                         'swapon',
+                         'timer_create',
+                         'timer_delete',
+                         'timer_gettime',
+                         'timer_settime',
+                         'timerfd_gettime',
+                         'timerfd_settime',
+                         'unlink',
+                         'unlinkat',
+                         'uselib',
+                         'utime']),
+ 'clock_settime': set(['clock_adjtime',
+                       'clock_getres',
+                       'clock_gettime',
+                       'clock_nanosleep',
+                       'timer_create',
+                       'timer_delete',
+                       'timer_gettime',
+                       'timer_settime']),
+ 'copy_file_range': set(['accept4',
+                         'bind',
+                         'bpf',
+                         'connect',
+                         'epoll_ctl',
+                         'epoll_wait',
+                         'fadvise64_64',
+                         'fallocate',
+                         'fchdir',
+                         'fchmod',
+                         'fchown',
+                         'fcntl',
+                         'fcntl64',
+                         'fdatasync',
+                         'fgetxattr',
+                         'flistxattr',
+                         'flock',
+                         'fremovexattr',
+                         'fsetxattr',
+                         'fstatfs',
+                         'fstatfs64',
+                         'fsync',
+                         'ftruncate',
+                         'futimesat',
+                         'getdents',
+                         'getdents64',
+                         'getpeername',
+                         'getsockname',
+                         'getsockopt',
+                         'inotify_add_watch',
+                         'inotify_rm_watch',
+                         'ioctl',
+                         'listen',
+                         'llseek',
+                         'lseek',
+                         'mq_getsetattr',
+                         'mq_notify',
+                         'mq_timedreceive',
+                         'mq_timedsend',
+                         'old_readdir',
+                         'perf_event_open',
+                         'pread64',
+                         'preadv',
+                         'preadv2',
+                         'preadv64',
+                         'preadv64v2',
+                         'pwrite64',
+                         'pwritev',
+                         'pwritev2',
+                         'pwritev64',
+                         'pwritev64v2',
+                         'read',
+                         'readahead',
+                         'readv',
+                         'recvfrom',
+                         'sendfile',
+                         'sendfile64',
+                         'sendto',
+                         'setsockopt',
+                         'shutdown',
+                         'signalfd4',
+                         'splice',
+                         'sync_file_range',
+                         'syncfs',
+                         'tee',
+                         'utime',
+                         'utimensat',
+                         'vmsplice',
+                         'write',
+                         'writev']),
+ 'delete_module': set(['finit_module', 'init_module']),
+ 'dup3': set(['dup2', 'select', 'unshare']),
+ 'epoll_ctl': set(['accept4',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'epoll_create1',
+                   'epoll_wait',
+                   'fadvise64_64',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchown',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'old_readdir',
+                   'perf_event_open',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readv',
+                   'recvfrom',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setsockopt',
+                   'shutdown',
+                   'signalfd4',
+                   'splice',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'epoll_wait': set(['accept4',
+                    'bind',
+                    'bpf',
+                    'capget',
+                    'clone',
+                    'connect',
+                    'copy_file_range',
+                    'epoll_ctl',
+                    'fadvise64_64',
+                    'fallocate',
+                    'fchdir',
+                    'fchmod',
+                    'fchown',
+                    'fcntl',
+                    'fcntl64',
+                    'fdatasync',
+                    'fgetxattr',
+                    'flistxattr',
+                    'flock',
+                    'fork',
+                    'fremovexattr',
+                    'fsetxattr',
+                    'fstatfs',
+                    'fstatfs64',
+                    'fsync',
+                    'ftruncate',
+                    'futimesat',
+                    'get_robust_list',
+                    'getdents',
+                    'getdents64',
+                    'getitimer',
+                    'getpeername',
+                    'getpgid',
+                    'getppid',
+                    'getpriority',
+                    'getrusage',
+                    'getsid',
+                    'getsockname',
+                    'getsockopt',
+                    'inotify_add_watch',
+                    'inotify_rm_watch',
+                    'ioctl',
+                    'ioperm',
+                    'iopl',
+                    'ioprio_get',
+                    'ioprio_set',
+                    'keyctl',
+                    'kill',
+                    'listen',
+                    'llseek',
+                    'lseek',
+                    'migrate_pages',
+                    'move_pages',
+                    'mq_getsetattr',
+                    'mq_notify',
+                    'mq_timedreceive',
+                    'mq_timedsend',
+                    'msgrcv',
+                    'old_readdir',
+                    'perf_event_open',
+                    'prctl',
+                    'pread64',
+                    'preadv',
+                    'preadv2',
+                    'preadv64',
+                    'preadv64v2',
+                    'prlimit64',
+                    'ptrace',
+                    'pwrite64',
+                    'pwritev',
+                    'pwritev2',
+                    'pwritev64',
+                    'pwritev64v2',
+                    'read',
+                    'readahead',
+                    'readv',
+                    'recvfrom',
+                    'rt_sigaction',
+                    'rt_sigprocmask',
+                    'rt_sigtimedwait',
+                    'sched_getaffinity',
+                    'sched_getattr',
+                    'sched_getparam',
+                    'sched_getscheduler',
+                    'sched_rr_get_interval',
+                    'sched_setaffinity',
+                    'sched_setattr',
+                    'sched_setparam',
+                    'sched_setscheduler',
+                    'semtimedop',
+                    'sendfile',
+                    'sendfile64',
+                    'sendto',
+                    'setitimer',
+                    'setns',
+                    'setpgid',
+                    'setpriority',
+                    'setsid',
+                    'setsockopt',
+                    'shutdown',
+                    'sigaction',
+                    'sigaltstack',
+                    'signal',
+                    'signalfd4',
+                    'splice',
+                    'sync_file_range',
+                    'syncfs',
+                    'tee',
+                    'umount',
+                    'utime',
+                    'utimensat',
+                    'vfork',
+                    'vmsplice',
+                    'write',
+                    'writev']),
+ 'fadvise64_64': set(['accept4',
+                      'bind',
+                      'bpf',
+                      'connect',
+                      'copy_file_range',
+                      'epoll_ctl',
+                      'epoll_wait',
+                      'faccessat',
+                      'fallocate',
+                      'fchdir',
+                      'fchmod',
+                      'fchmodat',
+                      'fchown',
+                      'fchownat',
+                      'fcntl',
+                      'fcntl64',
+                      'fdatasync',
+                      'fgetxattr',
+                      'flistxattr',
+                      'flock',
+                      'fremovexattr',
+                      'fsetxattr',
+                      'fstatfs',
+                      'fstatfs64',
+                      'fsync',
+                      'ftruncate',
+                      'futimesat',
+                      'getdents',
+                      'getdents64',
+                      'getpeername',
+                      'getsockname',
+                      'getsockopt',
+                      'inotify_add_watch',
+                      'inotify_rm_watch',
+                      'ioctl',
+                      'linkat',
+                      'listen',
+                      'llseek',
+                      'lseek',
+                      'memfd_create',
+                      'mq_getsetattr',
+                      'mq_notify',
+                      'mq_timedreceive',
+                      'mq_timedsend',
+                      'mq_unlink',
+                      'old_readdir',
+                      'perf_event_open',
+                      'pread64',
+                      'preadv',
+                      'preadv2',
+                      'preadv64',
+                      'preadv64v2',
+                      'pwrite64',
+                      'pwritev',
+                      'pwritev2',
+                      'pwritev64',
+                      'pwritev64v2',
+                      'read',
+                      'readahead',
+                      'readlinkat',
+                      'readv',
+                      'recvfrom',
+                      'sendfile',
+                      'sendfile64',
+                      'sendto',
+                      'setsockopt',
+                      'shutdown',
+                      'signalfd4',
+                      'splice',
+                      'swapoff',
+                      'swapon',
+                      'sync_file_range',
+                      'syncfs',
+                      'tee',
+                      'unlink',
+                      'unlinkat',
+                      'uselib',
+                      'utime',
+                      'utimensat',
+                      'vmsplice',
+                      'write',
+                      'writev']),
+ 'fallocate': set(['accept4',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'fadvise64_64',
+                   'fchdir',
+                   'fchmod',
+                   'fchown',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'old_readdir',
+                   'perf_event_open',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readv',
+                   'recvfrom',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setsockopt',
+                   'shutdown',
+                   'signalfd4',
+                   'splice',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'fchdir': set(['accept4',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'epoll_ctl',
+                'epoll_wait',
+                'fadvise64_64',
+                'fallocate',
+                'fchmod',
+                'fchown',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'llseek',
+                'lseek',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'perf_event_open',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setsockopt',
+                'shutdown',
+                'signalfd4',
+                'splice',
+                'sync_file_range',
+                'syncfs',
+                'tee',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'fchmod': set(['accept4',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'epoll_ctl',
+                'epoll_wait',
+                'fadvise64_64',
+                'fallocate',
+                'fchdir',
+                'fchown',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'llseek',
+                'lseek',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'perf_event_open',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setsockopt',
+                'shutdown',
+                'signalfd4',
+                'splice',
+                'sync_file_range',
+                'syncfs',
+                'tee',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'fchown': set(['accept4',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'epoll_ctl',
+                'epoll_wait',
+                'fadvise64_64',
+                'fallocate',
+                'fchdir',
+                'fchmod',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'llseek',
+                'lseek',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'perf_event_open',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setsockopt',
+                'shutdown',
+                'signalfd4',
+                'splice',
+                'sync_file_range',
+                'syncfs',
+                'tee',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'fcntl': set(['accept4',
+               'acct',
+               'bind',
+               'bpf',
+               'connect',
+               'copy_file_range',
+               'dup',
+               'dup3',
+               'epoll_create1',
+               'epoll_ctl',
+               'epoll_wait',
+               'eventfd2',
+               'fadvise64_64',
+               'fallocate',
+               'fchdir',
+               'fchmod',
+               'fchown',
+               'fcntl64',
+               'fdatasync',
+               'fgetxattr',
+               'flistxattr',
+               'flock',
+               'fremovexattr',
+               'fsetxattr',
+               'fstatfs',
+               'fstatfs64',
+               'fsync',
+               'ftruncate',
+               'futimesat',
+               'getdents',
+               'getdents64',
+               'getpeername',
+               'getsockname',
+               'getsockopt',
+               'inotify_add_watch',
+               'inotify_rm_watch',
+               'ioctl',
+               'listen',
+               'llseek',
+               'lseek',
+               'memfd_create',
+               'mmap_pgoff',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_open',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'msync',
+               'old_readdir',
+               'open',
+               'open_by_handle_at',
+               'openat',
+               'perf_event_open',
+               'pipe2',
+               'pread64',
+               'preadv',
+               'preadv2',
+               'preadv64',
+               'preadv64v2',
+               'pwrite64',
+               'pwritev',
+               'pwritev2',
+               'pwritev64',
+               'pwritev64v2',
+               'read',
+               'readahead',
+               'readv',
+               'recvfrom',
+               'remap_file_pages',
+               'sendfile',
+               'sendfile64',
+               'sendto',
+               'setns',
+               'setsockopt',
+               'shmat',
+               'shmctl',
+               'shmdt',
+               'shutdown',
+               'signalfd4',
+               'socket',
+               'socketpair',
+               'splice',
+               'swapoff',
+               'swapon',
+               'sync_file_range',
+               'syncfs',
+               'tee',
+               'uselib',
+               'utime',
+               'utimensat',
+               'vmsplice',
+               'write',
+               'writev']),
+ 'fcntl64': set(['accept4',
+                 'acct',
+                 'bind',
+                 'bpf',
+                 'connect',
+                 'copy_file_range',
+                 'dup',
+                 'dup3',
+                 'epoll_create1',
+                 'epoll_ctl',
+                 'epoll_wait',
+                 'eventfd2',
+                 'fadvise64_64',
+                 'fallocate',
+                 'fchdir',
+                 'fchmod',
+                 'fchown',
+                 'fcntl',
+                 'fdatasync',
+                 'fgetxattr',
+                 'flistxattr',
+                 'flock',
+                 'fremovexattr',
+                 'fsetxattr',
+                 'fstatfs',
+                 'fstatfs64',
+                 'fsync',
+                 'ftruncate',
+                 'futimesat',
+                 'getdents',
+                 'getdents64',
+                 'getpeername',
+                 'getsockname',
+                 'getsockopt',
+                 'inotify_add_watch',
+                 'inotify_rm_watch',
+                 'ioctl',
+                 'listen',
+                 'llseek',
+                 'lseek',
+                 'memfd_create',
+                 'mmap_pgoff',
+                 'mq_getsetattr',
+                 'mq_notify',
+                 'mq_open',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'msync',
+                 'old_readdir',
+                 'open',
+                 'open_by_handle_at',
+                 'openat',
+                 'perf_event_open',
+                 'pipe2',
+                 'pread64',
+                 'preadv',
+                 'preadv2',
+                 'preadv64',
+                 'preadv64v2',
+                 'pwrite64',
+                 'pwritev',
+                 'pwritev2',
+                 'pwritev64',
+                 'pwritev64v2',
+                 'read',
+                 'readahead',
+                 'readv',
+                 'recvfrom',
+                 'remap_file_pages',
+                 'sendfile',
+                 'sendfile64',
+                 'sendto',
+                 'setns',
+                 'setsockopt',
+                 'shmat',
+                 'shmctl',
+                 'shmdt',
+                 'shutdown',
+                 'signalfd4',
+                 'socket',
+                 'socketpair',
+                 'splice',
+                 'swapoff',
+                 'swapon',
+                 'sync_file_range',
+                 'syncfs',
+                 'tee',
+                 'uselib',
+                 'utime',
+                 'utimensat',
+                 'vmsplice',
+                 'write',
+                 'writev']),
+ 'fgetxattr': set(['accept4',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'fadvise64_64',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchown',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'old_readdir',
+                   'perf_event_open',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readv',
+                   'recvfrom',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setsockopt',
+                   'shutdown',
+                   'signalfd4',
+                   'splice',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'finit_module': set(['delete_module', 'init_module']),
+ 'flistxattr': set(['accept4',
+                    'bind',
+                    'bpf',
+                    'connect',
+                    'copy_file_range',
+                    'epoll_ctl',
+                    'epoll_wait',
+                    'fadvise64_64',
+                    'fallocate',
+                    'fchdir',
+                    'fchmod',
+                    'fchown',
+                    'fcntl',
+                    'fcntl64',
+                    'fdatasync',
+                    'fgetxattr',
+                    'flock',
+                    'fremovexattr',
+                    'fsetxattr',
+                    'fstatfs',
+                    'fstatfs64',
+                    'fsync',
+                    'ftruncate',
+                    'futimesat',
+                    'getdents',
+                    'getdents64',
+                    'getpeername',
+                    'getsockname',
+                    'getsockopt',
+                    'inotify_add_watch',
+                    'inotify_rm_watch',
+                    'ioctl',
+                    'listen',
+                    'llseek',
+                    'lseek',
+                    'mq_getsetattr',
+                    'mq_notify',
+                    'mq_timedreceive',
+                    'mq_timedsend',
+                    'old_readdir',
+                    'perf_event_open',
+                    'pread64',
+                    'preadv',
+                    'preadv2',
+                    'preadv64',
+                    'preadv64v2',
+                    'pwrite64',
+                    'pwritev',
+                    'pwritev2',
+                    'pwritev64',
+                    'pwritev64v2',
+                    'read',
+                    'readahead',
+                    'readv',
+                    'recvfrom',
+                    'sendfile',
+                    'sendfile64',
+                    'sendto',
+                    'setsockopt',
+                    'shutdown',
+                    'signalfd4',
+                    'splice',
+                    'sync_file_range',
+                    'syncfs',
+                    'tee',
+                    'utime',
+                    'utimensat',
+                    'vmsplice',
+                    'write',
+                    'writev']),
+ 'flock': set(['accept4',
+               'acct',
+               'bind',
+               'bpf',
+               'connect',
+               'copy_file_range',
+               'dup',
+               'dup3',
+               'epoll_create1',
+               'epoll_ctl',
+               'epoll_wait',
+               'eventfd2',
+               'fadvise64_64',
+               'fallocate',
+               'fchdir',
+               'fchmod',
+               'fchown',
+               'fcntl',
+               'fcntl64',
+               'fdatasync',
+               'fgetxattr',
+               'flistxattr',
+               'fremovexattr',
+               'fsetxattr',
+               'fstatfs',
+               'fstatfs64',
+               'fsync',
+               'ftruncate',
+               'futimesat',
+               'getdents',
+               'getdents64',
+               'getpeername',
+               'getsockname',
+               'getsockopt',
+               'inotify_add_watch',
+               'inotify_rm_watch',
+               'ioctl',
+               'listen',
+               'llseek',
+               'lseek',
+               'memfd_create',
+               'mmap_pgoff',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_open',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'msync',
+               'old_readdir',
+               'open',
+               'open_by_handle_at',
+               'openat',
+               'perf_event_open',
+               'pipe2',
+               'pread64',
+               'preadv',
+               'preadv2',
+               'preadv64',
+               'preadv64v2',
+               'pwrite64',
+               'pwritev',
+               'pwritev2',
+               'pwritev64',
+               'pwritev64v2',
+               'quotactl',
+               'read',
+               'readahead',
+               'readv',
+               'recvfrom',
+               'remap_file_pages',
+               'sendfile',
+               'sendfile64',
+               'sendto',
+               'setns',
+               'setsockopt',
+               'shmat',
+               'shmctl',
+               'shmdt',
+               'shutdown',
+               'signalfd4',
+               'socket',
+               'socketpair',
+               'splice',
+               'swapoff',
+               'swapon',
+               'sync_file_range',
+               'syncfs',
+               'tee',
+               'umount',
+               'uselib',
+               'ustat',
+               'utime',
+               'utimensat',
+               'vmsplice',
+               'write',
+               'writev']),
+ 'fremovexattr': set(['accept4',
+                      'bind',
+                      'bpf',
+                      'connect',
+                      'copy_file_range',
+                      'epoll_ctl',
+                      'epoll_wait',
+                      'fadvise64_64',
+                      'fallocate',
+                      'fchdir',
+                      'fchmod',
+                      'fchown',
+                      'fcntl',
+                      'fcntl64',
+                      'fdatasync',
+                      'fgetxattr',
+                      'flistxattr',
+                      'flock',
+                      'fsetxattr',
+                      'fstatfs',
+                      'fstatfs64',
+                      'fsync',
+                      'ftruncate',
+                      'futimesat',
+                      'getdents',
+                      'getdents64',
+                      'getpeername',
+                      'getsockname',
+                      'getsockopt',
+                      'inotify_add_watch',
+                      'inotify_rm_watch',
+                      'ioctl',
+                      'listen',
+                      'llseek',
+                      'lseek',
+                      'mq_getsetattr',
+                      'mq_notify',
+                      'mq_timedreceive',
+                      'mq_timedsend',
+                      'old_readdir',
+                      'perf_event_open',
+                      'pread64',
+                      'preadv',
+                      'preadv2',
+                      'preadv64',
+                      'preadv64v2',
+                      'pwrite64',
+                      'pwritev',
+                      'pwritev2',
+                      'pwritev64',
+                      'pwritev64v2',
+                      'read',
+                      'readahead',
+                      'readv',
+                      'recvfrom',
+                      'sendfile',
+                      'sendfile64',
+                      'sendto',
+                      'setsockopt',
+                      'shutdown',
+                      'signalfd4',
+                      'splice',
+                      'sync_file_range',
+                      'syncfs',
+                      'tee',
+                      'utime',
+                      'utimensat',
+                      'vmsplice',
+                      'write',
+                      'writev']),
+ 'fsetxattr': set(['accept4',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'fadvise64_64',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchown',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'old_readdir',
+                   'perf_event_open',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readv',
+                   'recvfrom',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setsockopt',
+                   'shutdown',
+                   'signalfd4',
+                   'splice',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'fstat': set(['lstat', 'stat']),
+ 'fstatfs': set(['fstatfs64', 'statfs', 'statfs64', 'ustat']),
+ 'fstatfs64': set(['fstatfs', 'statfs', 'statfs64', 'ustat']),
+ 'ftruncate': set(['accept4',
+                   'acct',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'eventfd2',
+                   'faccessat',
+                   'fadvise64_64',
+                   'fchmod',
+                   'fchmodat',
+                   'fchown',
+                   'fchownat',
+                   'flock',
+                   'inotify_add_watch',
+                   'ioctl',
+                   'linkat',
+                   'memfd_create',
+                   'mmap_pgoff',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_open',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'mq_unlink',
+                   'msync',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'readlinkat',
+                   'remap_file_pages',
+                   'sendfile',
+                   'sendfile64',
+                   'setns',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'socket',
+                   'socketpair',
+                   'swapoff',
+                   'swapon',
+                   'unlink',
+                   'unlinkat',
+                   'uselib']),
+ 'futex': set(['clock_nanosleep',
+               'epoll_wait',
+               'faccessat',
+               'fadvise64_64',
+               'fchmod',
+               'fchmodat',
+               'fchown',
+               'fchownat',
+               'ftruncate',
+               'futimesat',
+               'inotify_add_watch',
+               'io_getevents',
+               'ioctl',
+               'linkat',
+               'memfd_create',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'mq_unlink',
+               'nanosleep',
+               'poll',
+               'ppoll',
+               'pselect6',
+               'readlinkat',
+               'recvmmsg',
+               'rt_sigtimedwait',
+               'sched_rr_get_interval',
+               'select',
+               'semtimedop',
+               'sendfile',
+               'sendfile64',
+               'settimeofday',
+               'stime',
+               'swapoff',
+               'swapon',
+               'timer_gettime',
+               'timer_settime',
+               'timerfd_gettime',
+               'timerfd_settime',
+               'unlink',
+               'unlinkat',
+               'uselib',
+               'utime']),
+ 'futimesat': set(['adjtimex',
+                   'alarm',
+                   'clock_adjtime',
+                   'clock_nanosleep',
+                   'epoll_wait',
+                   'faccessat',
+                   'fadvise64_64',
+                   'fchmod',
+                   'fchmodat',
+                   'fchown',
+                   'fchownat',
+                   'ftruncate',
+                   'futex',
+                   'getitimer',
+                   'getrusage',
+                   'inotify_add_watch',
+                   'io_getevents',
+                   'ioctl',
+                   'linkat',
+                   'memfd_create',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'mq_unlink',
+                   'nanosleep',
+                   'poll',
+                   'ppoll',
+                   'pselect6',
+                   'readlinkat',
+                   'recvmmsg',
+                   'rt_sigtimedwait',
+                   'sched_rr_get_interval',
+                   'select',
+                   'semtimedop',
+                   'sendfile',
+                   'sendfile64',
+                   'setitimer',
+                   'settimeofday',
+                   'stime',
+                   'swapoff',
+                   'swapon',
+                   'timer_gettime',
+                   'timer_settime',
+                   'timerfd_gettime',
+                   'timerfd_settime',
+                   'unlink',
+                   'unlinkat',
+                   'uselib',
+                   'utime',
+                   'wait4',
+                   'waitid']),
+ 'get_mempolicy': set(['capget',
+                       'clone',
+                       'fork',
+                       'get_robust_list',
+                       'getitimer',
+                       'getpgid',
+                       'getppid',
+                       'getpriority',
+                       'getrusage',
+                       'getsid',
+                       'ioprio_get',
+                       'ioprio_set',
+                       'keyctl',
+                       'kill',
+                       'mbind',
+                       'migrate_pages',
+                       'move_pages',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'msgrcv',
+                       'perf_event_open',
+                       'prctl',
+                       'prlimit64',
+                       'ptrace',
+                       'rt_sigaction',
+                       'rt_sigprocmask',
+                       'rt_sigtimedwait',
+                       'sched_getaffinity',
+                       'sched_getattr',
+                       'sched_getparam',
+                       'sched_getscheduler',
+                       'sched_rr_get_interval',
+                       'sched_setaffinity',
+                       'sched_setattr',
+                       'sched_setparam',
+                       'sched_setscheduler',
+                       'semtimedop',
+                       'set_mempolicy',
+                       'setitimer',
+                       'setns',
+                       'setpgid',
+                       'setpriority',
+                       'setsid',
+                       'sigaction',
+                       'sigaltstack',
+                       'signal',
+                       'umount',
+                       'vfork']),
+ 'getdents': set(['accept4',
+                  'bind',
+                  'bpf',
+                  'capget',
+                  'clone',
+                  'connect',
+                  'copy_file_range',
+                  'epoll_ctl',
+                  'epoll_wait',
+                  'fadvise64_64',
+                  'fallocate',
+                  'fchdir',
+                  'fchmod',
+                  'fchown',
+                  'fcntl',
+                  'fcntl64',
+                  'fdatasync',
+                  'fgetxattr',
+                  'flistxattr',
+                  'flock',
+                  'fork',
+                  'fremovexattr',
+                  'fsetxattr',
+                  'fstatfs',
+                  'fstatfs64',
+                  'fsync',
+                  'ftruncate',
+                  'futimesat',
+                  'get_robust_list',
+                  'getdents64',
+                  'getitimer',
+                  'getpeername',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'getsockname',
+                  'getsockopt',
+                  'inotify_add_watch',
+                  'inotify_rm_watch',
+                  'ioctl',
+                  'ioperm',
+                  'iopl',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'listen',
+                  'llseek',
+                  'lseek',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_getsetattr',
+                  'mq_notify',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'old_readdir',
+                  'perf_event_open',
+                  'prctl',
+                  'pread64',
+                  'preadv',
+                  'preadv2',
+                  'preadv64',
+                  'preadv64v2',
+                  'prlimit64',
+                  'ptrace',
+                  'pwrite64',
+                  'pwritev',
+                  'pwritev2',
+                  'pwritev64',
+                  'pwritev64v2',
+                  'read',
+                  'readahead',
+                  'readv',
+                  'recvfrom',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'sendfile',
+                  'sendfile64',
+                  'sendto',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'setsockopt',
+                  'shutdown',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'signalfd4',
+                  'splice',
+                  'sync_file_range',
+                  'syncfs',
+                  'tee',
+                  'umount',
+                  'utime',
+                  'utimensat',
+                  'vfork',
+                  'vmsplice',
+                  'write',
+                  'writev']),
+ 'getdents64': set(['accept4',
+                    'bind',
+                    'bpf',
+                    'capget',
+                    'clone',
+                    'connect',
+                    'copy_file_range',
+                    'epoll_ctl',
+                    'epoll_wait',
+                    'fadvise64_64',
+                    'fallocate',
+                    'fchdir',
+                    'fchmod',
+                    'fchown',
+                    'fcntl',
+                    'fcntl64',
+                    'fdatasync',
+                    'fgetxattr',
+                    'flistxattr',
+                    'flock',
+                    'fork',
+                    'fremovexattr',
+                    'fsetxattr',
+                    'fstatfs',
+                    'fstatfs64',
+                    'fsync',
+                    'ftruncate',
+                    'futimesat',
+                    'get_robust_list',
+                    'getdents',
+                    'getitimer',
+                    'getpeername',
+                    'getpgid',
+                    'getppid',
+                    'getpriority',
+                    'getrusage',
+                    'getsid',
+                    'getsockname',
+                    'getsockopt',
+                    'inotify_add_watch',
+                    'inotify_rm_watch',
+                    'ioctl',
+                    'ioperm',
+                    'iopl',
+                    'ioprio_get',
+                    'ioprio_set',
+                    'keyctl',
+                    'kill',
+                    'listen',
+                    'llseek',
+                    'lseek',
+                    'migrate_pages',
+                    'move_pages',
+                    'mq_getsetattr',
+                    'mq_notify',
+                    'mq_timedreceive',
+                    'mq_timedsend',
+                    'msgrcv',
+                    'old_readdir',
+                    'perf_event_open',
+                    'prctl',
+                    'pread64',
+                    'preadv',
+                    'preadv2',
+                    'preadv64',
+                    'preadv64v2',
+                    'prlimit64',
+                    'ptrace',
+                    'pwrite64',
+                    'pwritev',
+                    'pwritev2',
+                    'pwritev64',
+                    'pwritev64v2',
+                    'read',
+                    'readahead',
+                    'readv',
+                    'recvfrom',
+                    'rt_sigaction',
+                    'rt_sigprocmask',
+                    'rt_sigtimedwait',
+                    'sched_getaffinity',
+                    'sched_getattr',
+                    'sched_getparam',
+                    'sched_getscheduler',
+                    'sched_rr_get_interval',
+                    'sched_setaffinity',
+                    'sched_setattr',
+                    'sched_setparam',
+                    'sched_setscheduler',
+                    'semtimedop',
+                    'sendfile',
+                    'sendfile64',
+                    'sendto',
+                    'setitimer',
+                    'setns',
+                    'setpgid',
+                    'setpriority',
+                    'setsid',
+                    'setsockopt',
+                    'shutdown',
+                    'sigaction',
+                    'sigaltstack',
+                    'signal',
+                    'signalfd4',
+                    'splice',
+                    'sync_file_range',
+                    'syncfs',
+                    'tee',
+                    'umount',
+                    'utime',
+                    'utimensat',
+                    'vfork',
+                    'vmsplice',
+                    'write',
+                    'writev']),
+ 'getgroups16': set(['setgroups', 'setgroups16']),
+ 'getitimer': set(['exit_group', 'setitimer', 'timer_create']),
+ 'getrlimit': set(['old_getrlimit', 'prlimit64', 'setrlimit']),
+ 'getrusage': set(['exit_group', 'timer_create']),
+ 'getsockopt': set(['accept4']),
+ 'init_module': set(['delete_module', 'finit_module']),
+ 'inotify_add_watch': set(['accept4',
+                           'bind',
+                           'bpf',
+                           'connect',
+                           'copy_file_range',
+                           'epoll_ctl',
+                           'epoll_wait',
+                           'fadvise64_64',
+                           'fallocate',
+                           'fchdir',
+                           'fchmod',
+                           'fchown',
+                           'fcntl',
+                           'fcntl64',
+                           'fdatasync',
+                           'fgetxattr',
+                           'flistxattr',
+                           'flock',
+                           'fremovexattr',
+                           'fsetxattr',
+                           'fstatfs',
+                           'fstatfs64',
+                           'fsync',
+                           'ftruncate',
+                           'futimesat',
+                           'getdents',
+                           'getdents64',
+                           'getpeername',
+                           'getsockname',
+                           'getsockopt',
+                           'inotify_rm_watch',
+                           'ioctl',
+                           'listen',
+                           'llseek',
+                           'lseek',
+                           'mq_getsetattr',
+                           'mq_notify',
+                           'mq_timedreceive',
+                           'mq_timedsend',
+                           'old_readdir',
+                           'perf_event_open',
+                           'pread64',
+                           'preadv',
+                           'preadv2',
+                           'preadv64',
+                           'preadv64v2',
+                           'pwrite64',
+                           'pwritev',
+                           'pwritev2',
+                           'pwritev64',
+                           'pwritev64v2',
+                           'read',
+                           'readahead',
+                           'readv',
+                           'recvfrom',
+                           'sendfile',
+                           'sendfile64',
+                           'sendto',
+                           'setsockopt',
+                           'shutdown',
+                           'signalfd4',
+                           'splice',
+                           'sync_file_range',
+                           'syncfs',
+                           'tee',
+                           'utime',
+                           'utimensat',
+                           'vmsplice',
+                           'write',
+                           'writev']),
+ 'inotify_rm_watch': set(['accept4',
+                          'bind',
+                          'bpf',
+                          'connect',
+                          'copy_file_range',
+                          'epoll_ctl',
+                          'epoll_wait',
+                          'fadvise64_64',
+                          'fallocate',
+                          'fchdir',
+                          'fchmod',
+                          'fchown',
+                          'fcntl',
+                          'fcntl64',
+                          'fdatasync',
+                          'fgetxattr',
+                          'flistxattr',
+                          'flock',
+                          'fremovexattr',
+                          'fsetxattr',
+                          'fstatfs',
+                          'fstatfs64',
+                          'fsync',
+                          'ftruncate',
+                          'futimesat',
+                          'getdents',
+                          'getdents64',
+                          'getpeername',
+                          'getsockname',
+                          'getsockopt',
+                          'inotify_add_watch',
+                          'ioctl',
+                          'listen',
+                          'llseek',
+                          'lseek',
+                          'mq_getsetattr',
+                          'mq_notify',
+                          'mq_timedreceive',
+                          'mq_timedsend',
+                          'old_readdir',
+                          'perf_event_open',
+                          'pread64',
+                          'preadv',
+                          'preadv2',
+                          'preadv64',
+                          'preadv64v2',
+                          'pwrite64',
+                          'pwritev',
+                          'pwritev2',
+                          'pwritev64',
+                          'pwritev64v2',
+                          'read',
+                          'readahead',
+                          'readv',
+                          'recvfrom',
+                          'sendfile',
+                          'sendfile64',
+                          'sendto',
+                          'setsockopt',
+                          'shutdown',
+                          'signalfd4',
+                          'splice',
+                          'sync_file_range',
+                          'syncfs',
+                          'tee',
+                          'utime',
+                          'utimensat',
+                          'vmsplice',
+                          'write',
+                          'writev']),
+ 'io_cancel': set(['io_destroy', 'io_getevents', 'io_setup', 'io_submit']),
+ 'io_destroy': set(['io_cancel', 'io_getevents', 'io_setup', 'io_submit']),
+ 'io_getevents': set(['capget',
+                      'clone',
+                      'fork',
+                      'get_robust_list',
+                      'getitimer',
+                      'getpgid',
+                      'getppid',
+                      'getpriority',
+                      'getrusage',
+                      'getsid',
+                      'io_cancel',
+                      'io_destroy',
+                      'io_setup',
+                      'io_submit',
+                      'ioprio_get',
+                      'ioprio_set',
+                      'keyctl',
+                      'kill',
+                      'migrate_pages',
+                      'move_pages',
+                      'mq_timedreceive',
+                      'mq_timedsend',
+                      'msgrcv',
+                      'perf_event_open',
+                      'prctl',
+                      'prlimit64',
+                      'ptrace',
+                      'rt_sigaction',
+                      'rt_sigprocmask',
+                      'rt_sigtimedwait',
+                      'sched_getaffinity',
+                      'sched_getattr',
+                      'sched_getparam',
+                      'sched_getscheduler',
+                      'sched_rr_get_interval',
+                      'sched_setaffinity',
+                      'sched_setattr',
+                      'sched_setparam',
+                      'sched_setscheduler',
+                      'semtimedop',
+                      'setitimer',
+                      'setns',
+                      'setpgid',
+                      'setpriority',
+                      'setsid',
+                      'sigaction',
+                      'sigaltstack',
+                      'signal',
+                      'umount',
+                      'vfork']),
+ 'io_setup': set(['io_cancel', 'io_destroy', 'io_getevents', 'io_submit']),
+ 'io_submit': set(['capget',
+                   'clone',
+                   'fork',
+                   'get_robust_list',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getrusage',
+                   'getsid',
+                   'ioperm',
+                   'iopl',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setsid',
+                   'sigaction',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'vfork']),
+ 'ioctl': set(['accept4',
+               'bind',
+               'bpf',
+               'connect',
+               'copy_file_range',
+               'epoll_ctl',
+               'epoll_wait',
+               'fadvise64_64',
+               'fallocate',
+               'fchdir',
+               'fchmod',
+               'fchown',
+               'fcntl',
+               'fcntl64',
+               'fdatasync',
+               'fgetxattr',
+               'flistxattr',
+               'flock',
+               'fremovexattr',
+               'fsetxattr',
+               'fstatfs',
+               'fstatfs64',
+               'fsync',
+               'ftruncate',
+               'futimesat',
+               'getdents',
+               'getdents64',
+               'getpeername',
+               'getsockname',
+               'getsockopt',
+               'inotify_add_watch',
+               'inotify_rm_watch',
+               'listen',
+               'llseek',
+               'lseek',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'old_readdir',
+               'perf_event_open',
+               'pread64',
+               'preadv',
+               'preadv2',
+               'preadv64',
+               'preadv64v2',
+               'pwrite64',
+               'pwritev',
+               'pwritev2',
+               'pwritev64',
+               'pwritev64v2',
+               'read',
+               'readahead',
+               'readv',
+               'recvfrom',
+               'sendfile',
+               'sendfile64',
+               'sendto',
+               'setsockopt',
+               'shutdown',
+               'signalfd4',
+               'splice',
+               'sync_file_range',
+               'syncfs',
+               'tee',
+               'utime',
+               'utimensat',
+               'vmsplice',
+               'write',
+               'writev']),
+ 'ioperm': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'iopl',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'keyctl': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'request_key',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'llseek': set(['accept4',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'epoll_ctl',
+                'epoll_wait',
+                'fadvise64_64',
+                'fallocate',
+                'fchdir',
+                'fchmod',
+                'fchown',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'lseek',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'perf_event_open',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setsockopt',
+                'shutdown',
+                'signalfd4',
+                'splice',
+                'sync_file_range',
+                'syncfs',
+                'tee',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'lseek': set(['accept4',
+               'bind',
+               'bpf',
+               'connect',
+               'copy_file_range',
+               'epoll_ctl',
+               'epoll_wait',
+               'fadvise64_64',
+               'fallocate',
+               'fchdir',
+               'fchmod',
+               'fchown',
+               'fcntl',
+               'fcntl64',
+               'fdatasync',
+               'fgetxattr',
+               'flistxattr',
+               'flock',
+               'fremovexattr',
+               'fsetxattr',
+               'fstatfs',
+               'fstatfs64',
+               'fsync',
+               'ftruncate',
+               'futimesat',
+               'getdents',
+               'getdents64',
+               'getpeername',
+               'getsockname',
+               'getsockopt',
+               'inotify_add_watch',
+               'inotify_rm_watch',
+               'ioctl',
+               'listen',
+               'llseek',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'old_readdir',
+               'perf_event_open',
+               'pread64',
+               'preadv',
+               'preadv2',
+               'preadv64',
+               'preadv64v2',
+               'pwrite64',
+               'pwritev',
+               'pwritev2',
+               'pwritev64',
+               'pwritev64v2',
+               'read',
+               'readahead',
+               'readv',
+               'recvfrom',
+               'sendfile',
+               'sendfile64',
+               'sendto',
+               'setsockopt',
+               'shutdown',
+               'signalfd4',
+               'splice',
+               'sync_file_range',
+               'syncfs',
+               'tee',
+               'utime',
+               'utimensat',
+               'vmsplice',
+               'write',
+               'writev']),
+ 'lstat': set(['fstat', 'stat']),
+ 'madvise': set(['brk',
+                 'get_mempolicy',
+                 'mincore',
+                 'mlockall',
+                 'mprotect',
+                 'mremap',
+                 'msync',
+                 'munlock',
+                 'munlockall',
+                 'pkey_mprotect',
+                 'prctl',
+                 'remap_file_pages',
+                 'shmdt']),
+ 'migrate_pages': set(['capget',
+                       'clone',
+                       'fork',
+                       'get_robust_list',
+                       'getitimer',
+                       'getpgid',
+                       'getppid',
+                       'getpriority',
+                       'getrusage',
+                       'getsid',
+                       'ioperm',
+                       'iopl',
+                       'ioprio_get',
+                       'ioprio_set',
+                       'keyctl',
+                       'kill',
+                       'move_pages',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'msgrcv',
+                       'perf_event_open',
+                       'prctl',
+                       'prlimit64',
+                       'ptrace',
+                       'rt_sigaction',
+                       'rt_sigprocmask',
+                       'rt_sigtimedwait',
+                       'sched_getaffinity',
+                       'sched_getattr',
+                       'sched_getparam',
+                       'sched_getscheduler',
+                       'sched_rr_get_interval',
+                       'sched_setaffinity',
+                       'sched_setattr',
+                       'sched_setparam',
+                       'sched_setscheduler',
+                       'semtimedop',
+                       'setitimer',
+                       'setns',
+                       'setpgid',
+                       'setpriority',
+                       'setsid',
+                       'sigaction',
+                       'sigaltstack',
+                       'signal',
+                       'umount',
+                       'vfork']),
+ 'mincore': set(['brk',
+                 'capget',
+                 'clone',
+                 'fork',
+                 'get_mempolicy',
+                 'get_robust_list',
+                 'getitimer',
+                 'getpgid',
+                 'getppid',
+                 'getpriority',
+                 'getrusage',
+                 'getsid',
+                 'ioperm',
+                 'iopl',
+                 'ioprio_get',
+                 'ioprio_set',
+                 'keyctl',
+                 'kill',
+                 'madvise',
+                 'migrate_pages',
+                 'mlockall',
+                 'move_pages',
+                 'mprotect',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'mremap',
+                 'msgrcv',
+                 'msync',
+                 'munlock',
+                 'munlockall',
+                 'perf_event_open',
+                 'pkey_mprotect',
+                 'prctl',
+                 'prlimit64',
+                 'ptrace',
+                 'remap_file_pages',
+                 'rt_sigaction',
+                 'rt_sigprocmask',
+                 'rt_sigtimedwait',
+                 'sched_getaffinity',
+                 'sched_getattr',
+                 'sched_getparam',
+                 'sched_getscheduler',
+                 'sched_rr_get_interval',
+                 'sched_setaffinity',
+                 'sched_setattr',
+                 'sched_setparam',
+                 'sched_setscheduler',
+                 'semtimedop',
+                 'setitimer',
+                 'setns',
+                 'setpgid',
+                 'setpriority',
+                 'setsid',
+                 'shmdt',
+                 'sigaction',
+                 'sigaltstack',
+                 'signal',
+                 'umount',
+                 'vfork']),
+ 'mkdirat': set(['fadvise64_64',
+                 'quotactl',
+                 'swapon',
+                 'syncfs',
+                 'umount',
+                 'ustat']),
+ 'mknodat': set(['fadvise64_64',
+                 'quotactl',
+                 'swapon',
+                 'syncfs',
+                 'umount',
+                 'ustat']),
+ 'mlockall': set(['brk',
+                  'capget',
+                  'clone',
+                  'fork',
+                  'get_mempolicy',
+                  'get_robust_list',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'io_cancel',
+                  'io_destroy',
+                  'io_getevents',
+                  'io_setup',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'madvise',
+                  'mbind',
+                  'migrate_pages',
+                  'mincore',
+                  'modify_ldt',
+                  'move_pages',
+                  'mprotect',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'mremap',
+                  'msgrcv',
+                  'msync',
+                  'munlock',
+                  'munlockall',
+                  'perf_event_open',
+                  'personality',
+                  'pkey_mprotect',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'remap_file_pages',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'shmdt',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'swapoff',
+                  'umount',
+                  'vfork']),
+ 'modify_ldt': set(['get_thread_area', 'set_thread_area']),
+ 'mount': set(['capget',
+               'clone',
+               'fork',
+               'get_robust_list',
+               'getitimer',
+               'getpgid',
+               'getppid',
+               'getpriority',
+               'getrusage',
+               'getsid',
+               'ioprio_get',
+               'ioprio_set',
+               'keyctl',
+               'kill',
+               'migrate_pages',
+               'move_pages',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'msgrcv',
+               'perf_event_open',
+               'personality',
+               'prctl',
+               'prlimit64',
+               'ptrace',
+               'rt_sigaction',
+               'rt_sigprocmask',
+               'rt_sigtimedwait',
+               'sched_getaffinity',
+               'sched_getattr',
+               'sched_getparam',
+               'sched_getscheduler',
+               'sched_rr_get_interval',
+               'sched_setaffinity',
+               'sched_setattr',
+               'sched_setparam',
+               'sched_setscheduler',
+               'semtimedop',
+               'setitimer',
+               'setns',
+               'setpgid',
+               'setpriority',
+               'setsid',
+               'sigaction',
+               'sigaltstack',
+               'signal',
+               'umount',
+               'vfork']),
+ 'mprotect': set(['brk',
+                  'capget',
+                  'clone',
+                  'fork',
+                  'get_mempolicy',
+                  'get_robust_list',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'madvise',
+                  'migrate_pages',
+                  'mincore',
+                  'mlockall',
+                  'move_pages',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'mremap',
+                  'msgrcv',
+                  'msync',
+                  'munlock',
+                  'munlockall',
+                  'perf_event_open',
+                  'personality',
+                  'pkey_mprotect',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'remap_file_pages',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'shmdt',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'vfork']),
+ 'mq_getsetattr': set(['mq_notify',
+                       'mq_open',
+                       'mq_timedreceive',
+                       'mq_timedsend']),
+ 'mq_notify': set(['mq_getsetattr',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'rt_sigqueueinfo',
+                   'rt_sigreturn',
+                   'rt_sigtimedwait',
+                   'rt_tgsigqueueinfo',
+                   'tgkill',
+                   'timer_create',
+                   'tkill']),
+ 'mq_open': set(['acct',
+                 'mq_unlink',
+                 'open',
+                 'openat',
+                 'quotactl',
+                 'renameat2',
+                 'rmdir',
+                 'swapoff',
+                 'swapon',
+                 'symlinkat',
+                 'sysfs',
+                 'unlink',
+                 'unlinkat',
+                 'uselib']),
+ 'mq_timedreceive': set(['accept4',
+                         'acct',
+                         'dup',
+                         'dup3',
+                         'epoll_create1',
+                         'epoll_ctl',
+                         'eventfd2',
+                         'fadvise64_64',
+                         'flock',
+                         'memfd_create',
+                         'mmap_pgoff',
+                         'mq_getsetattr',
+                         'mq_notify',
+                         'mq_open',
+                         'mq_timedsend',
+                         'msgrcv',
+                         'msgsnd',
+                         'msync',
+                         'open',
+                         'open_by_handle_at',
+                         'openat',
+                         'perf_event_open',
+                         'pipe2',
+                         'remap_file_pages',
+                         'setns',
+                         'shmat',
+                         'shmctl',
+                         'shmdt',
+                         'socket',
+                         'socketpair',
+                         'swapoff',
+                         'swapon',
+                         'uselib']),
+ 'mq_timedsend': set(['accept4',
+                      'acct',
+                      'dup',
+                      'dup3',
+                      'epoll_create1',
+                      'epoll_ctl',
+                      'eventfd2',
+                      'fadvise64_64',
+                      'flock',
+                      'memfd_create',
+                      'mmap_pgoff',
+                      'mq_getsetattr',
+                      'mq_notify',
+                      'mq_open',
+                      'mq_timedreceive',
+                      'msync',
+                      'open',
+                      'open_by_handle_at',
+                      'openat',
+                      'perf_event_open',
+                      'pipe2',
+                      'remap_file_pages',
+                      'setns',
+                      'shmat',
+                      'shmctl',
+                      'shmdt',
+                      'socket',
+                      'socketpair',
+                      'swapoff',
+                      'swapon',
+                      'uselib']),
+ 'mremap': set(['brk',
+                'capget',
+                'clone',
+                'fork',
+                'get_mempolicy',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'io_cancel',
+                'io_destroy',
+                'io_getevents',
+                'io_setup',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'madvise',
+                'mbind',
+                'migrate_pages',
+                'mincore',
+                'mlockall',
+                'modify_ldt',
+                'move_pages',
+                'mprotect',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'msync',
+                'munlock',
+                'munlockall',
+                'perf_event_open',
+                'personality',
+                'pkey_mprotect',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'remap_file_pages',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'shmdt',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'swapoff',
+                'umount',
+                'vfork']),
+ 'msgctl': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioperm',
+                'iopl',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_open',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'mq_unlink',
+                'msgget',
+                'msgrcv',
+                'msgsnd',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semctl',
+                'semget',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'shmat',
+                'shmctl',
+                'shmget',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'msgrcv': set(['mq_timedreceive', 'mq_timedsend', 'msgsnd']),
+ 'msgsnd': set(['mq_open',
+                'mq_unlink',
+                'msgctl',
+                'msgget',
+                'msgrcv',
+                'semctl',
+                'semget',
+                'semtimedop',
+                'setns',
+                'shmat',
+                'shmctl',
+                'shmget']),
+ 'msync': set(['brk',
+               'get_mempolicy',
+               'madvise',
+               'mincore',
+               'mlockall',
+               'mprotect',
+               'mremap',
+               'munlock',
+               'munlockall',
+               'pkey_mprotect',
+               'prctl',
+               'remap_file_pages',
+               'shmdt']),
+ 'munlock': set(['brk',
+                 'get_mempolicy',
+                 'madvise',
+                 'mincore',
+                 'mlockall',
+                 'mprotect',
+                 'mremap',
+                 'msync',
+                 'munlockall',
+                 'pkey_mprotect',
+                 'prctl',
+                 'remap_file_pages',
+                 'shmdt']),
+ 'munlockall': set(['brk',
+                    'get_mempolicy',
+                    'madvise',
+                    'mincore',
+                    'mlockall',
+                    'mprotect',
+                    'mremap',
+                    'msync',
+                    'munlock',
+                    'pkey_mprotect',
+                    'prctl',
+                    'remap_file_pages',
+                    'shmdt']),
+ 'nanosleep': set(['clock_nanosleep',
+                   'epoll_wait',
+                   'faccessat',
+                   'fadvise64_64',
+                   'fchmod',
+                   'fchmodat',
+                   'fchown',
+                   'fchownat',
+                   'ftruncate',
+                   'futex',
+                   'futimesat',
+                   'inotify_add_watch',
+                   'io_getevents',
+                   'ioctl',
+                   'linkat',
+                   'memfd_create',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'mq_unlink',
+                   'poll',
+                   'ppoll',
+                   'pselect6',
+                   'readlinkat',
+                   'recvmmsg',
+                   'rt_sigtimedwait',
+                   'sched_rr_get_interval',
+                   'select',
+                   'semtimedop',
+                   'sendfile',
+                   'sendfile64',
+                   'settimeofday',
+                   'stime',
+                   'swapoff',
+                   'swapon',
+                   'timer_gettime',
+                   'timer_settime',
+                   'timerfd_gettime',
+                   'timerfd_settime',
+                   'unlink',
+                   'unlinkat',
+                   'uselib',
+                   'utime']),
+ 'newfstat': set(['newfstatat', 'newlstat', 'newstat']),
+ 'newfstatat': set(['newfstat', 'newlstat', 'newstat']),
+ 'newlstat': set(['newfstat', 'newfstatat', 'newstat']),
+ 'newstat': set(['newfstat', 'newfstatat', 'newlstat']),
+ 'newuname': set(['capget',
+                  'clone',
+                  'fork',
+                  'get_robust_list',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'perf_event_open',
+                  'personality',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'vfork']),
+ 'old_getrlimit': set(['prlimit64', 'setrlimit']),
+ 'old_readdir': set(['accept4',
+                     'bind',
+                     'bpf',
+                     'connect',
+                     'copy_file_range',
+                     'epoll_ctl',
+                     'epoll_wait',
+                     'fadvise64_64',
+                     'fallocate',
+                     'fchdir',
+                     'fchmod',
+                     'fchown',
+                     'fcntl',
+                     'fcntl64',
+                     'fdatasync',
+                     'fgetxattr',
+                     'flistxattr',
+                     'flock',
+                     'fremovexattr',
+                     'fsetxattr',
+                     'fstatfs',
+                     'fstatfs64',
+                     'fsync',
+                     'ftruncate',
+                     'futimesat',
+                     'getdents',
+                     'getdents64',
+                     'getpeername',
+                     'getsockname',
+                     'getsockopt',
+                     'inotify_add_watch',
+                     'inotify_rm_watch',
+                     'ioctl',
+                     'listen',
+                     'llseek',
+                     'lseek',
+                     'mq_getsetattr',
+                     'mq_notify',
+                     'mq_timedreceive',
+                     'mq_timedsend',
+                     'perf_event_open',
+                     'pread64',
+                     'preadv',
+                     'preadv2',
+                     'preadv64',
+                     'preadv64v2',
+                     'pwrite64',
+                     'pwritev',
+                     'pwritev2',
+                     'pwritev64',
+                     'pwritev64v2',
+                     'read',
+                     'readahead',
+                     'readv',
+                     'recvfrom',
+                     'sendfile',
+                     'sendfile64',
+                     'sendto',
+                     'setsockopt',
+                     'shutdown',
+                     'signalfd4',
+                     'splice',
+                     'sync_file_range',
+                     'syncfs',
+                     'tee',
+                     'utime',
+                     'utimensat',
+                     'vmsplice',
+                     'write',
+                     'writev']),
+ 'olduname': set(['capget',
+                  'clone',
+                  'fork',
+                  'get_robust_list',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'ioperm',
+                  'iopl',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msgrcv',
+                  'perf_event_open',
+                  'personality',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'semtimedop',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'umount',
+                  'vfork']),
+ 'perf_event_open': set(['accept4',
+                         'bind',
+                         'bpf',
+                         'capget',
+                         'clone',
+                         'connect',
+                         'copy_file_range',
+                         'epoll_ctl',
+                         'epoll_wait',
+                         'fadvise64_64',
+                         'fallocate',
+                         'fchdir',
+                         'fchmod',
+                         'fchown',
+                         'fcntl',
+                         'fcntl64',
+                         'fdatasync',
+                         'fgetxattr',
+                         'flistxattr',
+                         'flock',
+                         'fork',
+                         'fremovexattr',
+                         'fsetxattr',
+                         'fstatfs',
+                         'fstatfs64',
+                         'fsync',
+                         'ftruncate',
+                         'futimesat',
+                         'get_robust_list',
+                         'getdents',
+                         'getdents64',
+                         'getitimer',
+                         'getpeername',
+                         'getpgid',
+                         'getppid',
+                         'getpriority',
+                         'getrusage',
+                         'getsid',
+                         'getsockname',
+                         'getsockopt',
+                         'inotify_add_watch',
+                         'inotify_rm_watch',
+                         'ioctl',
+                         'ioperm',
+                         'iopl',
+                         'ioprio_get',
+                         'ioprio_set',
+                         'keyctl',
+                         'kill',
+                         'listen',
+                         'llseek',
+                         'lseek',
+                         'migrate_pages',
+                         'move_pages',
+                         'mq_getsetattr',
+                         'mq_notify',
+                         'mq_timedreceive',
+                         'mq_timedsend',
+                         'msgrcv',
+                         'old_readdir',
+                         'prctl',
+                         'pread64',
+                         'preadv',
+                         'preadv2',
+                         'preadv64',
+                         'preadv64v2',
+                         'prlimit64',
+                         'ptrace',
+                         'pwrite64',
+                         'pwritev',
+                         'pwritev2',
+                         'pwritev64',
+                         'pwritev64v2',
+                         'read',
+                         'readahead',
+                         'readv',
+                         'recvfrom',
+                         'rt_sigaction',
+                         'rt_sigprocmask',
+                         'rt_sigtimedwait',
+                         'sched_getaffinity',
+                         'sched_getattr',
+                         'sched_getparam',
+                         'sched_getscheduler',
+                         'sched_rr_get_interval',
+                         'sched_setaffinity',
+                         'sched_setattr',
+                         'sched_setparam',
+                         'sched_setscheduler',
+                         'semtimedop',
+                         'sendfile',
+                         'sendfile64',
+                         'sendto',
+                         'setitimer',
+                         'setns',
+                         'setpgid',
+                         'setpriority',
+                         'setresuid',
+                         'setreuid',
+                         'setsid',
+                         'setsockopt',
+                         'setuid',
+                         'shutdown',
+                         'sigaction',
+                         'sigaltstack',
+                         'signal',
+                         'signalfd4',
+                         'splice',
+                         'sync_file_range',
+                         'syncfs',
+                         'tee',
+                         'umount',
+                         'utime',
+                         'utimensat',
+                         'vfork',
+                         'vmsplice',
+                         'write',
+                         'writev']),
+ 'pivot_root': set(['acct', 'getcwd', 'mq_open', 'mq_unlink', 'umount']),
+ 'pkey_alloc': set(['brk',
+                    'get_mempolicy',
+                    'getrusage',
+                    'io_cancel',
+                    'io_destroy',
+                    'io_getevents',
+                    'io_setup',
+                    'mbind',
+                    'migrate_pages',
+                    'mincore',
+                    'modify_ldt',
+                    'move_pages',
+                    'mremap',
+                    'msync',
+                    'pkey_free',
+                    'prctl',
+                    'remap_file_pages',
+                    'shmdt',
+                    'swapoff']),
+ 'pkey_mprotect': set(['brk',
+                       'capget',
+                       'clone',
+                       'fork',
+                       'get_mempolicy',
+                       'get_robust_list',
+                       'getitimer',
+                       'getpgid',
+                       'getppid',
+                       'getpriority',
+                       'getrusage',
+                       'getsid',
+                       'ioprio_get',
+                       'ioprio_set',
+                       'keyctl',
+                       'kill',
+                       'madvise',
+                       'migrate_pages',
+                       'mincore',
+                       'mlockall',
+                       'move_pages',
+                       'mprotect',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'mremap',
+                       'msgrcv',
+                       'msync',
+                       'munlock',
+                       'munlockall',
+                       'perf_event_open',
+                       'personality',
+                       'prctl',
+                       'prlimit64',
+                       'ptrace',
+                       'remap_file_pages',
+                       'rt_sigaction',
+                       'rt_sigprocmask',
+                       'rt_sigtimedwait',
+                       'sched_getaffinity',
+                       'sched_getattr',
+                       'sched_getparam',
+                       'sched_getscheduler',
+                       'sched_rr_get_interval',
+                       'sched_setaffinity',
+                       'sched_setattr',
+                       'sched_setparam',
+                       'sched_setscheduler',
+                       'semtimedop',
+                       'setitimer',
+                       'setns',
+                       'setpgid',
+                       'setpriority',
+                       'setsid',
+                       'shmdt',
+                       'sigaction',
+                       'sigaltstack',
+                       'signal',
+                       'umount',
+                       'vfork']),
+ 'poll': set(['ppoll']),
+ 'ppoll': set(['capget',
+               'clock_nanosleep',
+               'clone',
+               'epoll_wait',
+               'faccessat',
+               'fadvise64_64',
+               'fchmod',
+               'fchmodat',
+               'fchown',
+               'fchownat',
+               'fork',
+               'ftruncate',
+               'futex',
+               'futimesat',
+               'get_robust_list',
+               'getitimer',
+               'getpgid',
+               'getppid',
+               'getpriority',
+               'getrusage',
+               'getsid',
+               'inotify_add_watch',
+               'io_getevents',
+               'ioctl',
+               'ioprio_get',
+               'ioprio_set',
+               'keyctl',
+               'kill',
+               'linkat',
+               'memfd_create',
+               'migrate_pages',
+               'move_pages',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'mq_unlink',
+               'msgrcv',
+               'nanosleep',
+               'perf_event_open',
+               'personality',
+               'poll',
+               'prctl',
+               'prlimit64',
+               'pselect6',
+               'ptrace',
+               'readlinkat',
+               'recvmmsg',
+               'rt_sigaction',
+               'rt_sigprocmask',
+               'rt_sigtimedwait',
+               'sched_getaffinity',
+               'sched_getattr',
+               'sched_getparam',
+               'sched_getscheduler',
+               'sched_rr_get_interval',
+               'sched_setaffinity',
+               'sched_setattr',
+               'sched_setparam',
+               'sched_setscheduler',
+               'select',
+               'semtimedop',
+               'sendfile',
+               'sendfile64',
+               'setitimer',
+               'setns',
+               'setpgid',
+               'setpriority',
+               'setsid',
+               'settimeofday',
+               'sigaction',
+               'sigaltstack',
+               'signal',
+               'stime',
+               'swapoff',
+               'swapon',
+               'timer_gettime',
+               'timer_settime',
+               'timerfd_gettime',
+               'timerfd_settime',
+               'umount',
+               'unlink',
+               'unlinkat',
+               'uselib',
+               'utime',
+               'vfork']),
+ 'prctl': set(['brk',
+               'capget',
+               'clone',
+               'fork',
+               'get_mempolicy',
+               'get_robust_list',
+               'getitimer',
+               'getpgid',
+               'getppid',
+               'getpriority',
+               'getrusage',
+               'getsid',
+               'io_cancel',
+               'io_destroy',
+               'io_getevents',
+               'io_setup',
+               'ioprio_get',
+               'ioprio_set',
+               'keyctl',
+               'kill',
+               'mbind',
+               'migrate_pages',
+               'mincore',
+               'modify_ldt',
+               'move_pages',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'mremap',
+               'msgrcv',
+               'msync',
+               'perf_event_open',
+               'personality',
+               'prlimit64',
+               'ptrace',
+               'remap_file_pages',
+               'rt_sigaction',
+               'rt_sigprocmask',
+               'rt_sigtimedwait',
+               'sched_getaffinity',
+               'sched_getattr',
+               'sched_getparam',
+               'sched_getscheduler',
+               'sched_rr_get_interval',
+               'sched_setaffinity',
+               'sched_setattr',
+               'sched_setparam',
+               'sched_setscheduler',
+               'semtimedop',
+               'setitimer',
+               'setns',
+               'setpgid',
+               'setpriority',
+               'setresuid',
+               'setreuid',
+               'setsid',
+               'setuid',
+               'shmdt',
+               'sigaction',
+               'sigaltstack',
+               'signal',
+               'swapoff',
+               'umount',
+               'vfork']),
+ 'pread64': set(['accept4',
+                 'acct',
+                 'bind',
+                 'bpf',
+                 'connect',
+                 'copy_file_range',
+                 'dup',
+                 'dup3',
+                 'epoll_create1',
+                 'epoll_ctl',
+                 'epoll_wait',
+                 'eventfd2',
+                 'fadvise64_64',
+                 'fallocate',
+                 'fchdir',
+                 'fchmod',
+                 'fchown',
+                 'fcntl',
+                 'fcntl64',
+                 'fdatasync',
+                 'fgetxattr',
+                 'flistxattr',
+                 'flock',
+                 'fremovexattr',
+                 'fsetxattr',
+                 'fstatfs',
+                 'fstatfs64',
+                 'fsync',
+                 'ftruncate',
+                 'futimesat',
+                 'getdents',
+                 'getdents64',
+                 'getpeername',
+                 'getsockname',
+                 'getsockopt',
+                 'inotify_add_watch',
+                 'inotify_rm_watch',
+                 'ioctl',
+                 'listen',
+                 'llseek',
+                 'lseek',
+                 'memfd_create',
+                 'mmap_pgoff',
+                 'mq_getsetattr',
+                 'mq_notify',
+                 'mq_open',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'msync',
+                 'old_readdir',
+                 'open',
+                 'open_by_handle_at',
+                 'openat',
+                 'perf_event_open',
+                 'pipe2',
+                 'preadv',
+                 'preadv2',
+                 'preadv64',
+                 'preadv64v2',
+                 'pwrite64',
+                 'pwritev',
+                 'pwritev2',
+                 'pwritev64',
+                 'pwritev64v2',
+                 'read',
+                 'readahead',
+                 'readv',
+                 'recvfrom',
+                 'remap_file_pages',
+                 'sendfile',
+                 'sendfile64',
+                 'sendto',
+                 'setns',
+                 'setsockopt',
+                 'shmat',
+                 'shmctl',
+                 'shmdt',
+                 'shutdown',
+                 'signalfd4',
+                 'socket',
+                 'socketpair',
+                 'splice',
+                 'swapoff',
+                 'swapon',
+                 'sync_file_range',
+                 'syncfs',
+                 'tee',
+                 'uselib',
+                 'utime',
+                 'utimensat',
+                 'vmsplice',
+                 'write',
+                 'writev']),
+ 'preadv': set(['accept4',
+                'acct',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'eventfd2',
+                'fadvise64_64',
+                'flock',
+                'memfd_create',
+                'mmap_pgoff',
+                'mq_open',
+                'msync',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'remap_file_pages',
+                'setns',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'socket',
+                'socketpair',
+                'swapoff',
+                'swapon',
+                'uselib']),
+ 'preadv2': set(['accept4',
+                 'acct',
+                 'dup',
+                 'dup3',
+                 'epoll_create1',
+                 'epoll_ctl',
+                 'eventfd2',
+                 'fadvise64_64',
+                 'flock',
+                 'memfd_create',
+                 'mmap_pgoff',
+                 'mq_open',
+                 'msync',
+                 'open',
+                 'open_by_handle_at',
+                 'openat',
+                 'perf_event_open',
+                 'pipe2',
+                 'remap_file_pages',
+                 'setns',
+                 'shmat',
+                 'shmctl',
+                 'shmdt',
+                 'socket',
+                 'socketpair',
+                 'swapoff',
+                 'swapon',
+                 'uselib']),
+ 'preadv64': set(['accept4',
+                  'acct',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'eventfd2',
+                  'fadvise64_64',
+                  'flock',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_open',
+                  'msync',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'remap_file_pages',
+                  'setns',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'socket',
+                  'socketpair',
+                  'swapoff',
+                  'swapon',
+                  'uselib']),
+ 'preadv64v2': set(['accept4',
+                    'acct',
+                    'dup',
+                    'dup3',
+                    'epoll_create1',
+                    'epoll_ctl',
+                    'eventfd2',
+                    'fadvise64_64',
+                    'flock',
+                    'memfd_create',
+                    'mmap_pgoff',
+                    'mq_open',
+                    'msync',
+                    'open',
+                    'open_by_handle_at',
+                    'openat',
+                    'perf_event_open',
+                    'pipe2',
+                    'remap_file_pages',
+                    'setns',
+                    'shmat',
+                    'shmctl',
+                    'shmdt',
+                    'socket',
+                    'socketpair',
+                    'swapoff',
+                    'swapon',
+                    'uselib']),
+ 'prlimit64': set(['old_getrlimit', 'setrlimit']),
+ 'pselect6': set(['capget',
+                  'clock_nanosleep',
+                  'clone',
+                  'epoll_wait',
+                  'faccessat',
+                  'fadvise64_64',
+                  'fchmod',
+                  'fchmodat',
+                  'fchown',
+                  'fchownat',
+                  'fork',
+                  'ftruncate',
+                  'futex',
+                  'futimesat',
+                  'get_robust_list',
+                  'getitimer',
+                  'getpgid',
+                  'getppid',
+                  'getpriority',
+                  'getrusage',
+                  'getsid',
+                  'inotify_add_watch',
+                  'io_getevents',
+                  'ioctl',
+                  'ioperm',
+                  'iopl',
+                  'ioprio_get',
+                  'ioprio_set',
+                  'keyctl',
+                  'kill',
+                  'linkat',
+                  'memfd_create',
+                  'migrate_pages',
+                  'move_pages',
+                  'mq_getsetattr',
+                  'mq_notify',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'mq_unlink',
+                  'msgrcv',
+                  'nanosleep',
+                  'perf_event_open',
+                  'poll',
+                  'ppoll',
+                  'prctl',
+                  'prlimit64',
+                  'ptrace',
+                  'readlinkat',
+                  'recvmmsg',
+                  'rt_sigaction',
+                  'rt_sigprocmask',
+                  'rt_sigtimedwait',
+                  'sched_getaffinity',
+                  'sched_getattr',
+                  'sched_getparam',
+                  'sched_getscheduler',
+                  'sched_rr_get_interval',
+                  'sched_setaffinity',
+                  'sched_setattr',
+                  'sched_setparam',
+                  'sched_setscheduler',
+                  'select',
+                  'semtimedop',
+                  'sendfile',
+                  'sendfile64',
+                  'setitimer',
+                  'setns',
+                  'setpgid',
+                  'setpriority',
+                  'setsid',
+                  'settimeofday',
+                  'sigaction',
+                  'sigaltstack',
+                  'signal',
+                  'stime',
+                  'swapoff',
+                  'swapon',
+                  'timer_gettime',
+                  'timer_settime',
+                  'timerfd_gettime',
+                  'timerfd_settime',
+                  'umount',
+                  'unlink',
+                  'unlinkat',
+                  'uselib',
+                  'utime',
+                  'vfork']),
+ 'ptrace': set(['capget',
+                'clone',
+                'epoll_wait',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'pause',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigsuspend',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setresuid',
+                'setreuid',
+                'setsid',
+                'setuid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'sigsuspend',
+                'umount',
+                'vfork']),
+ 'pwrite64': set(['accept4',
+                  'acct',
+                  'bind',
+                  'bpf',
+                  'connect',
+                  'copy_file_range',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'epoll_wait',
+                  'eventfd2',
+                  'fadvise64_64',
+                  'fallocate',
+                  'fchdir',
+                  'fchmod',
+                  'fchown',
+                  'fcntl',
+                  'fcntl64',
+                  'fdatasync',
+                  'fgetxattr',
+                  'flistxattr',
+                  'flock',
+                  'fremovexattr',
+                  'fsetxattr',
+                  'fstatfs',
+                  'fstatfs64',
+                  'fsync',
+                  'ftruncate',
+                  'futimesat',
+                  'getdents',
+                  'getdents64',
+                  'getpeername',
+                  'getsockname',
+                  'getsockopt',
+                  'inotify_add_watch',
+                  'inotify_rm_watch',
+                  'ioctl',
+                  'listen',
+                  'llseek',
+                  'lseek',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_getsetattr',
+                  'mq_notify',
+                  'mq_open',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msync',
+                  'old_readdir',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'pread64',
+                  'preadv',
+                  'preadv2',
+                  'preadv64',
+                  'preadv64v2',
+                  'pwritev',
+                  'pwritev2',
+                  'pwritev64',
+                  'pwritev64v2',
+                  'read',
+                  'readahead',
+                  'readv',
+                  'recvfrom',
+                  'remap_file_pages',
+                  'sendfile',
+                  'sendfile64',
+                  'sendto',
+                  'setns',
+                  'setsockopt',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'shutdown',
+                  'signalfd4',
+                  'socket',
+                  'socketpair',
+                  'splice',
+                  'swapoff',
+                  'swapon',
+                  'sync_file_range',
+                  'syncfs',
+                  'tee',
+                  'uselib',
+                  'utime',
+                  'utimensat',
+                  'vmsplice',
+                  'write',
+                  'writev']),
+ 'pwritev': set(['accept4',
+                 'acct',
+                 'dup',
+                 'dup3',
+                 'epoll_create1',
+                 'epoll_ctl',
+                 'eventfd2',
+                 'fadvise64_64',
+                 'flock',
+                 'memfd_create',
+                 'mmap_pgoff',
+                 'mq_open',
+                 'msync',
+                 'open',
+                 'open_by_handle_at',
+                 'openat',
+                 'perf_event_open',
+                 'pipe2',
+                 'remap_file_pages',
+                 'setns',
+                 'shmat',
+                 'shmctl',
+                 'shmdt',
+                 'socket',
+                 'socketpair',
+                 'swapoff',
+                 'swapon',
+                 'uselib']),
+ 'pwritev2': set(['accept4',
+                  'acct',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'eventfd2',
+                  'fadvise64_64',
+                  'flock',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_open',
+                  'msync',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'remap_file_pages',
+                  'setns',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'socket',
+                  'socketpair',
+                  'swapoff',
+                  'swapon',
+                  'uselib']),
+ 'pwritev64': set(['accept4',
+                   'acct',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'eventfd2',
+                   'fadvise64_64',
+                   'flock',
+                   'memfd_create',
+                   'mmap_pgoff',
+                   'mq_open',
+                   'msync',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'remap_file_pages',
+                   'setns',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'socket',
+                   'socketpair',
+                   'swapoff',
+                   'swapon',
+                   'uselib']),
+ 'pwritev64v2': set(['accept4',
+                     'acct',
+                     'dup',
+                     'dup3',
+                     'epoll_create1',
+                     'epoll_ctl',
+                     'eventfd2',
+                     'fadvise64_64',
+                     'flock',
+                     'memfd_create',
+                     'mmap_pgoff',
+                     'mq_open',
+                     'msync',
+                     'open',
+                     'open_by_handle_at',
+                     'openat',
+                     'perf_event_open',
+                     'pipe2',
+                     'remap_file_pages',
+                     'setns',
+                     'shmat',
+                     'shmctl',
+                     'shmdt',
+                     'socket',
+                     'socketpair',
+                     'swapoff',
+                     'swapon',
+                     'uselib']),
+ 'quotactl': set(['acct',
+                  'fadvise64_64',
+                  'mq_open',
+                  'mq_unlink',
+                  'open',
+                  'openat',
+                  'renameat2',
+                  'rmdir',
+                  'swapoff',
+                  'swapon',
+                  'symlinkat',
+                  'syncfs',
+                  'sysfs',
+                  'umount',
+                  'unlink',
+                  'unlinkat',
+                  'uselib',
+                  'ustat']),
+ 'read': set(['accept4',
+              'bind',
+              'bpf',
+              'connect',
+              'copy_file_range',
+              'epoll_ctl',
+              'epoll_wait',
+              'fadvise64_64',
+              'fallocate',
+              'fchdir',
+              'fchmod',
+              'fchown',
+              'fcntl',
+              'fcntl64',
+              'fdatasync',
+              'fgetxattr',
+              'flistxattr',
+              'flock',
+              'fremovexattr',
+              'fsetxattr',
+              'fstatfs',
+              'fstatfs64',
+              'fsync',
+              'ftruncate',
+              'futimesat',
+              'getdents',
+              'getdents64',
+              'getpeername',
+              'getsockname',
+              'getsockopt',
+              'inotify_add_watch',
+              'inotify_rm_watch',
+              'ioctl',
+              'listen',
+              'llseek',
+              'lseek',
+              'mq_getsetattr',
+              'mq_notify',
+              'mq_timedreceive',
+              'mq_timedsend',
+              'old_readdir',
+              'perf_event_open',
+              'pread64',
+              'preadv',
+              'preadv2',
+              'preadv64',
+              'preadv64v2',
+              'pwrite64',
+              'pwritev',
+              'pwritev2',
+              'pwritev64',
+              'pwritev64v2',
+              'readahead',
+              'readv',
+              'recvfrom',
+              'sendfile',
+              'sendfile64',
+              'sendto',
+              'setsockopt',
+              'shutdown',
+              'signalfd4',
+              'splice',
+              'sync_file_range',
+              'syncfs',
+              'tee',
+              'utime',
+              'utimensat',
+              'vmsplice',
+              'write',
+              'writev']),
+ 'readahead': set(['accept4',
+                   'acct',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'dup',
+                   'dup3',
+                   'epoll_create1',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'eventfd2',
+                   'fadvise64_64',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchown',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'memfd_create',
+                   'mmap_pgoff',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_open',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msync',
+                   'old_readdir',
+                   'open',
+                   'open_by_handle_at',
+                   'openat',
+                   'perf_event_open',
+                   'pipe2',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readv',
+                   'recvfrom',
+                   'remap_file_pages',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setns',
+                   'setsockopt',
+                   'shmat',
+                   'shmctl',
+                   'shmdt',
+                   'shutdown',
+                   'signalfd4',
+                   'socket',
+                   'socketpair',
+                   'splice',
+                   'swapoff',
+                   'swapon',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'uselib',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'recvfrom': set(['accept4',
+                  'acct',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'eventfd2',
+                  'flock',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_getsetattr',
+                  'mq_open',
+                  'msync',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'remap_file_pages',
+                  'setns',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'socket',
+                  'socketpair',
+                  'swapoff',
+                  'swapon',
+                  'uselib']),
+ 'recvmmsg': set(['clock_nanosleep',
+                  'epoll_wait',
+                  'faccessat',
+                  'fadvise64_64',
+                  'fchmod',
+                  'fchmodat',
+                  'fchown',
+                  'fchownat',
+                  'ftruncate',
+                  'futex',
+                  'futimesat',
+                  'inotify_add_watch',
+                  'io_getevents',
+                  'ioctl',
+                  'linkat',
+                  'memfd_create',
+                  'mq_getsetattr',
+                  'mq_notify',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'mq_unlink',
+                  'nanosleep',
+                  'poll',
+                  'ppoll',
+                  'pselect6',
+                  'readlinkat',
+                  'recvfrom',
+                  'rt_sigtimedwait',
+                  'sched_rr_get_interval',
+                  'select',
+                  'semtimedop',
+                  'sendfile',
+                  'sendfile64',
+                  'sendto',
+                  'settimeofday',
+                  'stime',
+                  'swapoff',
+                  'swapon',
+                  'timer_gettime',
+                  'timer_settime',
+                  'timerfd_gettime',
+                  'timerfd_settime',
+                  'unlink',
+                  'unlinkat',
+                  'uselib',
+                  'utime']),
+ 'remap_file_pages': set(['brk',
+                          'get_mempolicy',
+                          'madvise',
+                          'mincore',
+                          'mlockall',
+                          'mprotect',
+                          'mremap',
+                          'msync',
+                          'munlock',
+                          'munlockall',
+                          'pkey_mprotect',
+                          'prctl',
+                          'shmdt']),
+ 'renameat2': set(['acct',
+                   'mq_open',
+                   'mq_unlink',
+                   'open',
+                   'openat',
+                   'quotactl',
+                   'rmdir',
+                   'swapoff',
+                   'swapon',
+                   'symlinkat',
+                   'sysfs',
+                   'unlink',
+                   'unlinkat',
+                   'uselib']),
+ 'rt_sigqueueinfo': set(['kill',
+                         'rt_sigreturn',
+                         'rt_sigtimedwait',
+                         'rt_tgsigqueueinfo',
+                         'tgkill',
+                         'timer_create',
+                         'tkill']),
+ 'rt_sigreturn': set(['capget',
+                      'clone',
+                      'fork',
+                      'get_robust_list',
+                      'getitimer',
+                      'getpgid',
+                      'getppid',
+                      'getpriority',
+                      'getrusage',
+                      'getsid',
+                      'ioperm',
+                      'iopl',
+                      'ioprio_get',
+                      'ioprio_set',
+                      'keyctl',
+                      'kill',
+                      'migrate_pages',
+                      'move_pages',
+                      'mq_timedreceive',
+                      'mq_timedsend',
+                      'msgrcv',
+                      'perf_event_open',
+                      'prctl',
+                      'prlimit64',
+                      'ptrace',
+                      'rt_sigaction',
+                      'rt_sigprocmask',
+                      'rt_sigtimedwait',
+                      'sched_getaffinity',
+                      'sched_getattr',
+                      'sched_getparam',
+                      'sched_getscheduler',
+                      'sched_rr_get_interval',
+                      'sched_setaffinity',
+                      'sched_setattr',
+                      'sched_setparam',
+                      'sched_setscheduler',
+                      'semtimedop',
+                      'setitimer',
+                      'setns',
+                      'setpgid',
+                      'setpriority',
+                      'setsid',
+                      'sigaction',
+                      'sigaltstack',
+                      'signal',
+                      'umount',
+                      'vfork']),
+ 'rt_sigtimedwait': set(['capget',
+                         'clone',
+                         'fork',
+                         'get_robust_list',
+                         'getitimer',
+                         'getpgid',
+                         'getppid',
+                         'getpriority',
+                         'getrusage',
+                         'getsid',
+                         'ioperm',
+                         'iopl',
+                         'ioprio_get',
+                         'ioprio_set',
+                         'keyctl',
+                         'kill',
+                         'migrate_pages',
+                         'move_pages',
+                         'mq_timedreceive',
+                         'mq_timedsend',
+                         'msgrcv',
+                         'perf_event_open',
+                         'prctl',
+                         'prlimit64',
+                         'ptrace',
+                         'rt_sigaction',
+                         'rt_sigprocmask',
+                         'rt_sigqueueinfo',
+                         'rt_sigreturn',
+                         'rt_tgsigqueueinfo',
+                         'sched_getaffinity',
+                         'sched_getattr',
+                         'sched_getparam',
+                         'sched_getscheduler',
+                         'sched_rr_get_interval',
+                         'sched_setaffinity',
+                         'sched_setattr',
+                         'sched_setparam',
+                         'sched_setscheduler',
+                         'semtimedop',
+                         'setitimer',
+                         'setns',
+                         'setpgid',
+                         'setpriority',
+                         'setsid',
+                         'sigaction',
+                         'sigaltstack',
+                         'signal',
+                         'tgkill',
+                         'timer_create',
+                         'tkill',
+                         'umount',
+                         'vfork']),
+ 'rt_tgsigqueueinfo': set(['kill',
+                           'rt_sigqueueinfo',
+                           'rt_sigreturn',
+                           'rt_sigtimedwait',
+                           'tgkill',
+                           'timer_create',
+                           'tkill']),
+ 'sched_getattr': set(['capget',
+                       'clone',
+                       'fork',
+                       'get_robust_list',
+                       'getitimer',
+                       'getpgid',
+                       'getppid',
+                       'getpriority',
+                       'getrusage',
+                       'getsid',
+                       'ioperm',
+                       'iopl',
+                       'ioprio_get',
+                       'ioprio_set',
+                       'keyctl',
+                       'kill',
+                       'migrate_pages',
+                       'move_pages',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'msgrcv',
+                       'perf_event_open',
+                       'prctl',
+                       'prlimit64',
+                       'ptrace',
+                       'rt_sigaction',
+                       'rt_sigprocmask',
+                       'rt_sigtimedwait',
+                       'sched_getaffinity',
+                       'sched_getparam',
+                       'sched_getscheduler',
+                       'sched_rr_get_interval',
+                       'sched_setaffinity',
+                       'sched_setattr',
+                       'sched_setparam',
+                       'sched_setscheduler',
+                       'semtimedop',
+                       'setitimer',
+                       'setns',
+                       'setpgid',
+                       'setpriority',
+                       'setsid',
+                       'sigaction',
+                       'sigaltstack',
+                       'signal',
+                       'umount',
+                       'vfork']),
+ 'sched_getparam': set(['capget',
+                        'clone',
+                        'fork',
+                        'get_robust_list',
+                        'getitimer',
+                        'getpgid',
+                        'getppid',
+                        'getpriority',
+                        'getrusage',
+                        'getsid',
+                        'ioprio_get',
+                        'ioprio_set',
+                        'keyctl',
+                        'kill',
+                        'migrate_pages',
+                        'move_pages',
+                        'mq_timedreceive',
+                        'mq_timedsend',
+                        'msgrcv',
+                        'perf_event_open',
+                        'prctl',
+                        'prlimit64',
+                        'ptrace',
+                        'rt_sigaction',
+                        'rt_sigprocmask',
+                        'rt_sigtimedwait',
+                        'sched_getaffinity',
+                        'sched_getattr',
+                        'sched_getscheduler',
+                        'sched_rr_get_interval',
+                        'sched_setaffinity',
+                        'sched_setattr',
+                        'sched_setparam',
+                        'sched_setscheduler',
+                        'semtimedop',
+                        'setitimer',
+                        'setns',
+                        'setpgid',
+                        'setpriority',
+                        'setsid',
+                        'sigaction',
+                        'sigaltstack',
+                        'signal',
+                        'umount',
+                        'vfork']),
+ 'sched_getscheduler': set(['capget',
+                            'clone',
+                            'fork',
+                            'get_robust_list',
+                            'getitimer',
+                            'getpgid',
+                            'getppid',
+                            'getpriority',
+                            'getrusage',
+                            'getsid',
+                            'ioprio_get',
+                            'ioprio_set',
+                            'keyctl',
+                            'kill',
+                            'migrate_pages',
+                            'move_pages',
+                            'mq_timedreceive',
+                            'mq_timedsend',
+                            'msgrcv',
+                            'perf_event_open',
+                            'prctl',
+                            'prlimit64',
+                            'ptrace',
+                            'rt_sigaction',
+                            'rt_sigprocmask',
+                            'rt_sigtimedwait',
+                            'sched_getaffinity',
+                            'sched_getattr',
+                            'sched_getparam',
+                            'sched_rr_get_interval',
+                            'sched_setaffinity',
+                            'sched_setattr',
+                            'sched_setparam',
+                            'sched_setscheduler',
+                            'semtimedop',
+                            'setitimer',
+                            'setns',
+                            'setpgid',
+                            'setpriority',
+                            'setsid',
+                            'sigaction',
+                            'sigaltstack',
+                            'signal',
+                            'umount',
+                            'vfork']),
+ 'sched_setaffinity': set(['capget',
+                           'clone',
+                           'fork',
+                           'get_robust_list',
+                           'getitimer',
+                           'getpgid',
+                           'getppid',
+                           'getpriority',
+                           'getrusage',
+                           'getsid',
+                           'ioprio_get',
+                           'ioprio_set',
+                           'keyctl',
+                           'kill',
+                           'migrate_pages',
+                           'move_pages',
+                           'mq_timedreceive',
+                           'mq_timedsend',
+                           'msgrcv',
+                           'perf_event_open',
+                           'prctl',
+                           'prlimit64',
+                           'ptrace',
+                           'rt_sigaction',
+                           'rt_sigprocmask',
+                           'rt_sigtimedwait',
+                           'sched_getaffinity',
+                           'sched_getattr',
+                           'sched_getparam',
+                           'sched_getscheduler',
+                           'sched_rr_get_interval',
+                           'sched_setattr',
+                           'sched_setparam',
+                           'sched_setscheduler',
+                           'semtimedop',
+                           'setitimer',
+                           'setns',
+                           'setpgid',
+                           'setpriority',
+                           'setresuid',
+                           'setreuid',
+                           'setsid',
+                           'setuid',
+                           'sigaction',
+                           'sigaltstack',
+                           'signal',
+                           'umount',
+                           'vfork']),
+ 'sched_setattr': set(['capget',
+                       'clone',
+                       'fork',
+                       'get_robust_list',
+                       'getitimer',
+                       'getpgid',
+                       'getppid',
+                       'getpriority',
+                       'getrusage',
+                       'getsid',
+                       'ioperm',
+                       'iopl',
+                       'ioprio_get',
+                       'ioprio_set',
+                       'keyctl',
+                       'kill',
+                       'migrate_pages',
+                       'move_pages',
+                       'mq_timedreceive',
+                       'mq_timedsend',
+                       'msgrcv',
+                       'perf_event_open',
+                       'prctl',
+                       'prlimit64',
+                       'ptrace',
+                       'rt_sigaction',
+                       'rt_sigprocmask',
+                       'rt_sigtimedwait',
+                       'sched_getaffinity',
+                       'sched_getattr',
+                       'sched_getparam',
+                       'sched_getscheduler',
+                       'sched_rr_get_interval',
+                       'sched_setaffinity',
+                       'sched_setparam',
+                       'sched_setscheduler',
+                       'semtimedop',
+                       'setitimer',
+                       'setns',
+                       'setpgid',
+                       'setpriority',
+                       'setsid',
+                       'sigaction',
+                       'sigaltstack',
+                       'signal',
+                       'umount',
+                       'vfork']),
+ 'select': set(['capget',
+                'clock_nanosleep',
+                'clone',
+                'epoll_wait',
+                'faccessat',
+                'fadvise64_64',
+                'fchmod',
+                'fchmodat',
+                'fchown',
+                'fchownat',
+                'fork',
+                'ftruncate',
+                'futex',
+                'futimesat',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'inotify_add_watch',
+                'io_getevents',
+                'ioctl',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'linkat',
+                'memfd_create',
+                'migrate_pages',
+                'move_pages',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'mq_unlink',
+                'msgrcv',
+                'nanosleep',
+                'perf_event_open',
+                'personality',
+                'poll',
+                'ppoll',
+                'prctl',
+                'prlimit64',
+                'pselect6',
+                'ptrace',
+                'readlinkat',
+                'recvmmsg',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'sendfile',
+                'sendfile64',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'settimeofday',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'stime',
+                'swapoff',
+                'swapon',
+                'timer_gettime',
+                'timer_settime',
+                'timerfd_gettime',
+                'timerfd_settime',
+                'umount',
+                'unlink',
+                'unlinkat',
+                'uselib',
+                'utime',
+                'vfork']),
+ 'semctl': set(['semtimedop']),
+ 'semtimedop': set(['clock_nanosleep',
+                    'epoll_wait',
+                    'faccessat',
+                    'fadvise64_64',
+                    'fchmod',
+                    'fchmodat',
+                    'fchown',
+                    'fchownat',
+                    'ftruncate',
+                    'futex',
+                    'futimesat',
+                    'inotify_add_watch',
+                    'io_getevents',
+                    'ioctl',
+                    'linkat',
+                    'memfd_create',
+                    'mq_getsetattr',
+                    'mq_notify',
+                    'mq_timedreceive',
+                    'mq_timedsend',
+                    'mq_unlink',
+                    'msgctl',
+                    'msgrcv',
+                    'msgsnd',
+                    'nanosleep',
+                    'poll',
+                    'ppoll',
+                    'pselect6',
+                    'readlinkat',
+                    'recvmmsg',
+                    'rt_sigtimedwait',
+                    'sched_rr_get_interval',
+                    'select',
+                    'semctl',
+                    'sendfile',
+                    'sendfile64',
+                    'settimeofday',
+                    'shmat',
+                    'shmctl',
+                    'stime',
+                    'swapoff',
+                    'swapon',
+                    'timer_gettime',
+                    'timer_settime',
+                    'timerfd_gettime',
+                    'timerfd_settime',
+                    'unlink',
+                    'unlinkat',
+                    'uselib',
+                    'utime']),
+ 'sendfile': set(['accept4',
+                  'acct',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'eventfd2',
+                  'fadvise64_64',
+                  'flock',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_open',
+                  'msync',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'remap_file_pages',
+                  'setns',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'socket',
+                  'socketpair',
+                  'swapoff',
+                  'swapon',
+                  'uselib']),
+ 'sendfile64': set(['accept4',
+                    'acct',
+                    'dup',
+                    'dup3',
+                    'epoll_create1',
+                    'epoll_ctl',
+                    'eventfd2',
+                    'fadvise64_64',
+                    'flock',
+                    'memfd_create',
+                    'mmap_pgoff',
+                    'mq_open',
+                    'msync',
+                    'open',
+                    'open_by_handle_at',
+                    'openat',
+                    'perf_event_open',
+                    'pipe2',
+                    'remap_file_pages',
+                    'setns',
+                    'shmat',
+                    'shmctl',
+                    'shmdt',
+                    'socket',
+                    'socketpair',
+                    'swapoff',
+                    'swapon',
+                    'uselib']),
+ 'sendto': set(['accept4',
+                'acct',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'eventfd2',
+                'flock',
+                'memfd_create',
+                'mmap_pgoff',
+                'mq_getsetattr',
+                'mq_open',
+                'msync',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'remap_file_pages',
+                'setns',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'socket',
+                'socketpair',
+                'swapoff',
+                'swapon',
+                'uselib']),
+ 'set_mempolicy': set(['get_mempolicy', 'mbind']),
+ 'set_thread_area': set(['arch_prctl',
+                         'capget',
+                         'clone',
+                         'fork',
+                         'get_robust_list',
+                         'getitimer',
+                         'getpgid',
+                         'getppid',
+                         'getpriority',
+                         'getrusage',
+                         'getsid',
+                         'ioperm',
+                         'iopl',
+                         'ioprio_get',
+                         'ioprio_set',
+                         'keyctl',
+                         'kill',
+                         'migrate_pages',
+                         'move_pages',
+                         'mq_timedreceive',
+                         'mq_timedsend',
+                         'msgrcv',
+                         'perf_event_open',
+                         'prctl',
+                         'prlimit64',
+                         'ptrace',
+                         'rt_sigaction',
+                         'rt_sigprocmask',
+                         'rt_sigtimedwait',
+                         'sched_getaffinity',
+                         'sched_getattr',
+                         'sched_getparam',
+                         'sched_getscheduler',
+                         'sched_rr_get_interval',
+                         'sched_setaffinity',
+                         'sched_setattr',
+                         'sched_setparam',
+                         'sched_setscheduler',
+                         'semtimedop',
+                         'setitimer',
+                         'setns',
+                         'setpgid',
+                         'setpriority',
+                         'setsid',
+                         'sigaction',
+                         'sigaltstack',
+                         'signal',
+                         'umount',
+                         'vfork']),
+ 'set_trip_temp': set(['get_curr_temp', 'get_trip_temp']),
+ 'setgroups16': set(['setgroups']),
+ 'setitimer': set(['adjtimex',
+                   'alarm',
+                   'clock_adjtime',
+                   'exit_group',
+                   'getitimer',
+                   'getrusage',
+                   'ppoll',
+                   'select',
+                   'settimeofday',
+                   'timer_create',
+                   'wait4',
+                   'waitid']),
+ 'setpgid': set(['capget',
+                 'clone',
+                 'exit_group',
+                 'fork',
+                 'get_robust_list',
+                 'getitimer',
+                 'getpgid',
+                 'getppid',
+                 'getpriority',
+                 'getrusage',
+                 'getsid',
+                 'ioprio_get',
+                 'ioprio_set',
+                 'keyctl',
+                 'kill',
+                 'migrate_pages',
+                 'move_pages',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'msgrcv',
+                 'perf_event_open',
+                 'prctl',
+                 'prlimit64',
+                 'ptrace',
+                 'rt_sigaction',
+                 'rt_sigprocmask',
+                 'rt_sigtimedwait',
+                 'sched_getaffinity',
+                 'sched_getattr',
+                 'sched_getparam',
+                 'sched_getscheduler',
+                 'sched_rr_get_interval',
+                 'sched_setaffinity',
+                 'sched_setattr',
+                 'sched_setparam',
+                 'sched_setscheduler',
+                 'semtimedop',
+                 'setitimer',
+                 'setns',
+                 'setpriority',
+                 'setresuid',
+                 'setreuid',
+                 'setsid',
+                 'setuid',
+                 'sigaction',
+                 'sigaltstack',
+                 'signal',
+                 'timer_create',
+                 'umount',
+                 'vfork']),
+ 'setrlimit': set(['getrlimit', 'old_getrlimit', 'prlimit64']),
+ 'setsid': set(['exit_group', 'timer_create']),
+ 'setsockopt': set(['accept4']),
+ 'settimeofday': set(['adjtimex',
+                      'alarm',
+                      'clock_adjtime',
+                      'getitimer',
+                      'getrusage',
+                      'ppoll',
+                      'select',
+                      'setitimer',
+                      'wait4',
+                      'waitid']),
+ 'shmctl': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioperm',
+                'iopl',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgctl',
+                'msgrcv',
+                'msgsnd',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semctl',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'shmat',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'shmdt': set(['brk',
+               'get_mempolicy',
+               'madvise',
+               'mincore',
+               'mlockall',
+               'mprotect',
+               'mremap',
+               'msync',
+               'munlock',
+               'munlockall',
+               'pkey_mprotect',
+               'prctl',
+               'remap_file_pages']),
+ 'sigaction': set(['capget',
+                   'clone',
+                   'fork',
+                   'get_robust_list',
+                   'getitimer',
+                   'getpgid',
+                   'getppid',
+                   'getpriority',
+                   'getrusage',
+                   'getsid',
+                   'ioperm',
+                   'iopl',
+                   'ioprio_get',
+                   'ioprio_set',
+                   'keyctl',
+                   'kill',
+                   'migrate_pages',
+                   'move_pages',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'msgrcv',
+                   'perf_event_open',
+                   'prctl',
+                   'prlimit64',
+                   'ptrace',
+                   'rt_sigaction',
+                   'rt_sigprocmask',
+                   'rt_sigtimedwait',
+                   'sched_getaffinity',
+                   'sched_getattr',
+                   'sched_getparam',
+                   'sched_getscheduler',
+                   'sched_rr_get_interval',
+                   'sched_setaffinity',
+                   'sched_setattr',
+                   'sched_setparam',
+                   'sched_setscheduler',
+                   'semtimedop',
+                   'setitimer',
+                   'setns',
+                   'setpgid',
+                   'setpriority',
+                   'setsid',
+                   'sigaltstack',
+                   'signal',
+                   'umount',
+                   'vfork']),
+ 'signalfd4': set(['accept4',
+                   'bind',
+                   'bpf',
+                   'connect',
+                   'copy_file_range',
+                   'epoll_ctl',
+                   'epoll_wait',
+                   'fadvise64_64',
+                   'fallocate',
+                   'fchdir',
+                   'fchmod',
+                   'fchown',
+                   'fcntl',
+                   'fcntl64',
+                   'fdatasync',
+                   'fgetxattr',
+                   'flistxattr',
+                   'flock',
+                   'fremovexattr',
+                   'fsetxattr',
+                   'fstatfs',
+                   'fstatfs64',
+                   'fsync',
+                   'ftruncate',
+                   'futimesat',
+                   'getdents',
+                   'getdents64',
+                   'getpeername',
+                   'getsockname',
+                   'getsockopt',
+                   'inotify_add_watch',
+                   'inotify_rm_watch',
+                   'ioctl',
+                   'listen',
+                   'llseek',
+                   'lseek',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'old_readdir',
+                   'perf_event_open',
+                   'pread64',
+                   'preadv',
+                   'preadv2',
+                   'preadv64',
+                   'preadv64v2',
+                   'pwrite64',
+                   'pwritev',
+                   'pwritev2',
+                   'pwritev64',
+                   'pwritev64v2',
+                   'read',
+                   'readahead',
+                   'readv',
+                   'recvfrom',
+                   'sendfile',
+                   'sendfile64',
+                   'sendto',
+                   'setsockopt',
+                   'shutdown',
+                   'splice',
+                   'sync_file_range',
+                   'syncfs',
+                   'tee',
+                   'utime',
+                   'utimensat',
+                   'vmsplice',
+                   'write',
+                   'writev']),
+ 'splice': set(['accept4',
+                'acct',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'dup',
+                'dup3',
+                'epoll_create1',
+                'epoll_ctl',
+                'epoll_wait',
+                'eventfd2',
+                'fadvise64_64',
+                'fallocate',
+                'fchdir',
+                'fchmod',
+                'fchown',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'llseek',
+                'lseek',
+                'memfd_create',
+                'mmap_pgoff',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_open',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msync',
+                'old_readdir',
+                'open',
+                'open_by_handle_at',
+                'openat',
+                'perf_event_open',
+                'pipe2',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'remap_file_pages',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setns',
+                'setsockopt',
+                'shmat',
+                'shmctl',
+                'shmdt',
+                'shutdown',
+                'signalfd4',
+                'socket',
+                'socketpair',
+                'swapoff',
+                'swapon',
+                'sync_file_range',
+                'syncfs',
+                'tee',
+                'uselib',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'stat': set(['fstat', 'lstat']),
+ 'statfs': set(['fstatfs', 'fstatfs64', 'statfs64', 'ustat']),
+ 'statfs64': set(['fstatfs', 'fstatfs64', 'statfs', 'ustat']),
+ 'swapoff': set(['swapon']),
+ 'swapon': set(['faccessat',
+                'fadvise64_64',
+                'fchmod',
+                'fchmodat',
+                'fchown',
+                'fchownat',
+                'ftruncate',
+                'inotify_add_watch',
+                'ioctl',
+                'linkat',
+                'memfd_create',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'mq_unlink',
+                'readlinkat',
+                'sendfile',
+                'sendfile64',
+                'swapoff',
+                'unlink',
+                'unlinkat',
+                'uselib']),
+ 'symlinkat': set(['acct',
+                   'mq_open',
+                   'mq_unlink',
+                   'open',
+                   'openat',
+                   'quotactl',
+                   'renameat2',
+                   'rmdir',
+                   'swapoff',
+                   'swapon',
+                   'sysfs',
+                   'unlink',
+                   'unlinkat',
+                   'uselib']),
+ 'sync_file_range': set(['accept4',
+                         'bind',
+                         'bpf',
+                         'connect',
+                         'copy_file_range',
+                         'epoll_ctl',
+                         'epoll_wait',
+                         'fadvise64_64',
+                         'fallocate',
+                         'fchdir',
+                         'fchmod',
+                         'fchown',
+                         'fcntl',
+                         'fcntl64',
+                         'fdatasync',
+                         'fgetxattr',
+                         'flistxattr',
+                         'flock',
+                         'fremovexattr',
+                         'fsetxattr',
+                         'fstatfs',
+                         'fstatfs64',
+                         'fsync',
+                         'ftruncate',
+                         'futimesat',
+                         'getdents',
+                         'getdents64',
+                         'getpeername',
+                         'getsockname',
+                         'getsockopt',
+                         'inotify_add_watch',
+                         'inotify_rm_watch',
+                         'ioctl',
+                         'listen',
+                         'llseek',
+                         'lseek',
+                         'mq_getsetattr',
+                         'mq_notify',
+                         'mq_timedreceive',
+                         'mq_timedsend',
+                         'old_readdir',
+                         'perf_event_open',
+                         'pread64',
+                         'preadv',
+                         'preadv2',
+                         'preadv64',
+                         'preadv64v2',
+                         'pwrite64',
+                         'pwritev',
+                         'pwritev2',
+                         'pwritev64',
+                         'pwritev64v2',
+                         'read',
+                         'readahead',
+                         'readv',
+                         'recvfrom',
+                         'sendfile',
+                         'sendfile64',
+                         'sendto',
+                         'setsockopt',
+                         'shutdown',
+                         'signalfd4',
+                         'splice',
+                         'syncfs',
+                         'tee',
+                         'utime',
+                         'utimensat',
+                         'vmsplice',
+                         'write',
+                         'writev']),
+ 'syncfs': set(['accept4',
+                'bind',
+                'bpf',
+                'connect',
+                'copy_file_range',
+                'epoll_ctl',
+                'epoll_wait',
+                'fadvise64_64',
+                'fallocate',
+                'fchdir',
+                'fchmod',
+                'fchown',
+                'fcntl',
+                'fcntl64',
+                'fdatasync',
+                'fgetxattr',
+                'flistxattr',
+                'flock',
+                'fremovexattr',
+                'fsetxattr',
+                'fstatfs',
+                'fstatfs64',
+                'fsync',
+                'ftruncate',
+                'futimesat',
+                'getdents',
+                'getdents64',
+                'getpeername',
+                'getsockname',
+                'getsockopt',
+                'inotify_add_watch',
+                'inotify_rm_watch',
+                'ioctl',
+                'listen',
+                'llseek',
+                'lseek',
+                'mq_getsetattr',
+                'mq_notify',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'old_readdir',
+                'perf_event_open',
+                'pread64',
+                'preadv',
+                'preadv2',
+                'preadv64',
+                'preadv64v2',
+                'pwrite64',
+                'pwritev',
+                'pwritev2',
+                'pwritev64',
+                'pwritev64v2',
+                'read',
+                'readahead',
+                'readv',
+                'recvfrom',
+                'sendfile',
+                'sendfile64',
+                'sendto',
+                'setsockopt',
+                'shutdown',
+                'signalfd4',
+                'splice',
+                'sync_file_range',
+                'tee',
+                'utime',
+                'utimensat',
+                'vmsplice',
+                'write',
+                'writev']),
+ 'sysfs': set(['acct',
+               'mq_open',
+               'mq_unlink',
+               'open',
+               'openat',
+               'quotactl',
+               'renameat2',
+               'rmdir',
+               'swapoff',
+               'swapon',
+               'symlinkat',
+               'unlink',
+               'unlinkat',
+               'uselib']),
+ 'sysinfo': set(['capget',
+                 'clock_nanosleep',
+                 'clone',
+                 'epoll_wait',
+                 'faccessat',
+                 'fadvise64_64',
+                 'fchmod',
+                 'fchmodat',
+                 'fchown',
+                 'fchownat',
+                 'fork',
+                 'ftruncate',
+                 'futex',
+                 'futimesat',
+                 'get_robust_list',
+                 'getitimer',
+                 'getpgid',
+                 'getppid',
+                 'getpriority',
+                 'getrusage',
+                 'getsid',
+                 'inotify_add_watch',
+                 'io_getevents',
+                 'ioctl',
+                 'ioperm',
+                 'iopl',
+                 'ioprio_get',
+                 'ioprio_set',
+                 'keyctl',
+                 'kill',
+                 'linkat',
+                 'memfd_create',
+                 'migrate_pages',
+                 'move_pages',
+                 'mq_getsetattr',
+                 'mq_notify',
+                 'mq_timedreceive',
+                 'mq_timedsend',
+                 'mq_unlink',
+                 'msgrcv',
+                 'nanosleep',
+                 'perf_event_open',
+                 'poll',
+                 'ppoll',
+                 'prctl',
+                 'prlimit64',
+                 'pselect6',
+                 'ptrace',
+                 'readlinkat',
+                 'recvmmsg',
+                 'rt_sigaction',
+                 'rt_sigprocmask',
+                 'rt_sigtimedwait',
+                 'sched_getaffinity',
+                 'sched_getattr',
+                 'sched_getparam',
+                 'sched_getscheduler',
+                 'sched_rr_get_interval',
+                 'sched_setaffinity',
+                 'sched_setattr',
+                 'sched_setparam',
+                 'sched_setscheduler',
+                 'select',
+                 'semtimedop',
+                 'sendfile',
+                 'sendfile64',
+                 'setitimer',
+                 'setns',
+                 'setpgid',
+                 'setpriority',
+                 'setsid',
+                 'settimeofday',
+                 'sigaction',
+                 'sigaltstack',
+                 'signal',
+                 'stime',
+                 'swapoff',
+                 'swapon',
+                 'timer_gettime',
+                 'timer_settime',
+                 'timerfd_gettime',
+                 'timerfd_settime',
+                 'umount',
+                 'unlink',
+                 'unlinkat',
+                 'uselib',
+                 'utime',
+                 'vfork']),
+ 'syslog': set(['capget',
+                'clone',
+                'fork',
+                'get_robust_list',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioperm',
+                'iopl',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'msgrcv',
+                'perf_event_open',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setsid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'umount',
+                'vfork']),
+ 'tee': set(['accept4',
+             'acct',
+             'bind',
+             'bpf',
+             'connect',
+             'copy_file_range',
+             'dup',
+             'dup3',
+             'epoll_create1',
+             'epoll_ctl',
+             'epoll_wait',
+             'eventfd2',
+             'fadvise64_64',
+             'fallocate',
+             'fchdir',
+             'fchmod',
+             'fchown',
+             'fcntl',
+             'fcntl64',
+             'fdatasync',
+             'fgetxattr',
+             'flistxattr',
+             'flock',
+             'fremovexattr',
+             'fsetxattr',
+             'fstatfs',
+             'fstatfs64',
+             'fsync',
+             'ftruncate',
+             'futimesat',
+             'getdents',
+             'getdents64',
+             'getpeername',
+             'getsockname',
+             'getsockopt',
+             'inotify_add_watch',
+             'inotify_rm_watch',
+             'ioctl',
+             'listen',
+             'llseek',
+             'lseek',
+             'memfd_create',
+             'mmap_pgoff',
+             'mq_getsetattr',
+             'mq_notify',
+             'mq_open',
+             'mq_timedreceive',
+             'mq_timedsend',
+             'msync',
+             'old_readdir',
+             'open',
+             'open_by_handle_at',
+             'openat',
+             'perf_event_open',
+             'pipe2',
+             'pread64',
+             'preadv',
+             'preadv2',
+             'preadv64',
+             'preadv64v2',
+             'pwrite64',
+             'pwritev',
+             'pwritev2',
+             'pwritev64',
+             'pwritev64v2',
+             'read',
+             'readahead',
+             'readv',
+             'recvfrom',
+             'remap_file_pages',
+             'sendfile',
+             'sendfile64',
+             'sendto',
+             'setns',
+             'setsockopt',
+             'shmat',
+             'shmctl',
+             'shmdt',
+             'shutdown',
+             'signalfd4',
+             'socket',
+             'socketpair',
+             'splice',
+             'swapoff',
+             'swapon',
+             'sync_file_range',
+             'syncfs',
+             'uselib',
+             'utime',
+             'utimensat',
+             'vmsplice',
+             'write',
+             'writev']),
+ 'timer_create': set(['clock_adjtime',
+                      'clock_getres',
+                      'clock_gettime',
+                      'clock_nanosleep',
+                      'clock_settime',
+                      'timer_delete',
+                      'timer_gettime',
+                      'timer_settime']),
+ 'timer_delete': set(['clock_adjtime',
+                      'clock_getres',
+                      'clock_gettime',
+                      'clock_nanosleep',
+                      'clock_settime',
+                      'timer_create',
+                      'timer_gettime',
+                      'timer_settime']),
+ 'timer_gettime': set(['clock_adjtime',
+                       'clock_getres',
+                       'clock_gettime',
+                       'clock_nanosleep',
+                       'clock_settime',
+                       'timer_create',
+                       'timer_delete',
+                       'timer_settime']),
+ 'timer_settime': set(['clock_adjtime',
+                       'clock_getres',
+                       'clock_gettime',
+                       'clock_nanosleep',
+                       'clock_settime',
+                       'timer_create',
+                       'timer_delete',
+                       'timer_gettime']),
+ 'timerfd_create': set(['timerfd_gettime', 'timerfd_settime']),
+ 'timerfd_gettime': set(['timerfd_create', 'timerfd_settime']),
+ 'timerfd_settime': set(['timerfd_create', 'timerfd_gettime']),
+ 'umount': set(['acct',
+                'capget',
+                'clone',
+                'fadvise64_64',
+                'fork',
+                'get_robust_list',
+                'getcwd',
+                'getitimer',
+                'getpgid',
+                'getppid',
+                'getpriority',
+                'getrusage',
+                'getsid',
+                'ioprio_get',
+                'ioprio_set',
+                'keyctl',
+                'kill',
+                'migrate_pages',
+                'move_pages',
+                'mq_open',
+                'mq_timedreceive',
+                'mq_timedsend',
+                'mq_unlink',
+                'msgrcv',
+                'perf_event_open',
+                'pivot_root',
+                'prctl',
+                'prlimit64',
+                'ptrace',
+                'quotactl',
+                'rt_sigaction',
+                'rt_sigprocmask',
+                'rt_sigtimedwait',
+                'sched_getaffinity',
+                'sched_getattr',
+                'sched_getparam',
+                'sched_getscheduler',
+                'sched_rr_get_interval',
+                'sched_setaffinity',
+                'sched_setattr',
+                'sched_setparam',
+                'sched_setscheduler',
+                'semtimedop',
+                'setitimer',
+                'setns',
+                'setpgid',
+                'setpriority',
+                'setresuid',
+                'setreuid',
+                'setsid',
+                'setuid',
+                'sigaction',
+                'sigaltstack',
+                'signal',
+                'swapon',
+                'syncfs',
+                'ustat',
+                'vfork']),
+ 'uname': set(['capget',
+               'clone',
+               'fork',
+               'get_robust_list',
+               'getitimer',
+               'getpgid',
+               'getppid',
+               'getpriority',
+               'getrusage',
+               'getsid',
+               'ioprio_get',
+               'ioprio_set',
+               'keyctl',
+               'kill',
+               'migrate_pages',
+               'move_pages',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'msgrcv',
+               'perf_event_open',
+               'personality',
+               'prctl',
+               'prlimit64',
+               'ptrace',
+               'rt_sigaction',
+               'rt_sigprocmask',
+               'rt_sigtimedwait',
+               'sched_getaffinity',
+               'sched_getattr',
+               'sched_getparam',
+               'sched_getscheduler',
+               'sched_rr_get_interval',
+               'sched_setaffinity',
+               'sched_setattr',
+               'sched_setparam',
+               'sched_setscheduler',
+               'semtimedop',
+               'setitimer',
+               'setns',
+               'setpgid',
+               'setpriority',
+               'setsid',
+               'sigaction',
+               'sigaltstack',
+               'signal',
+               'umount',
+               'vfork']),
+ 'uselib': set(['acct',
+                'fadvise64_64',
+                'getcwd',
+                'mq_open',
+                'mq_unlink',
+                'pivot_root',
+                'quotactl',
+                'swapon',
+                'syncfs',
+                'umount',
+                'ustat']),
+ 'utime': set(['clock_nanosleep',
+               'epoll_wait',
+               'faccessat',
+               'fadvise64_64',
+               'fchmod',
+               'fchmodat',
+               'fchown',
+               'fchownat',
+               'ftruncate',
+               'futex',
+               'futimesat',
+               'inotify_add_watch',
+               'io_getevents',
+               'ioctl',
+               'linkat',
+               'memfd_create',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'mq_unlink',
+               'nanosleep',
+               'poll',
+               'ppoll',
+               'pselect6',
+               'readlinkat',
+               'recvmmsg',
+               'rt_sigtimedwait',
+               'sched_rr_get_interval',
+               'select',
+               'semtimedop',
+               'sendfile',
+               'sendfile64',
+               'settimeofday',
+               'stime',
+               'swapoff',
+               'swapon',
+               'timer_gettime',
+               'timer_settime',
+               'timerfd_gettime',
+               'timerfd_settime',
+               'unlink',
+               'unlinkat',
+               'uselib']),
+ 'utimensat': set(['clock_nanosleep',
+                   'epoll_wait',
+                   'faccessat',
+                   'fadvise64_64',
+                   'fchmod',
+                   'fchmodat',
+                   'fchown',
+                   'fchownat',
+                   'ftruncate',
+                   'futex',
+                   'futimesat',
+                   'inotify_add_watch',
+                   'io_getevents',
+                   'ioctl',
+                   'linkat',
+                   'memfd_create',
+                   'mq_getsetattr',
+                   'mq_notify',
+                   'mq_timedreceive',
+                   'mq_timedsend',
+                   'mq_unlink',
+                   'nanosleep',
+                   'poll',
+                   'ppoll',
+                   'pselect6',
+                   'readlinkat',
+                   'recvmmsg',
+                   'rt_sigtimedwait',
+                   'sched_rr_get_interval',
+                   'select',
+                   'semtimedop',
+                   'sendfile',
+                   'sendfile64',
+                   'settimeofday',
+                   'stime',
+                   'swapoff',
+                   'swapon',
+                   'timer_gettime',
+                   'timer_settime',
+                   'timerfd_gettime',
+                   'timerfd_settime',
+                   'unlink',
+                   'unlinkat',
+                   'uselib',
+                   'utime']),
+ 'vmsplice': set(['accept4',
+                  'acct',
+                  'bind',
+                  'bpf',
+                  'connect',
+                  'copy_file_range',
+                  'dup',
+                  'dup3',
+                  'epoll_create1',
+                  'epoll_ctl',
+                  'epoll_wait',
+                  'eventfd2',
+                  'fadvise64_64',
+                  'fallocate',
+                  'fchdir',
+                  'fchmod',
+                  'fchown',
+                  'fcntl',
+                  'fcntl64',
+                  'fdatasync',
+                  'fgetxattr',
+                  'flistxattr',
+                  'flock',
+                  'fremovexattr',
+                  'fsetxattr',
+                  'fstatfs',
+                  'fstatfs64',
+                  'fsync',
+                  'ftruncate',
+                  'futimesat',
+                  'getdents',
+                  'getdents64',
+                  'getpeername',
+                  'getsockname',
+                  'getsockopt',
+                  'inotify_add_watch',
+                  'inotify_rm_watch',
+                  'ioctl',
+                  'listen',
+                  'llseek',
+                  'lseek',
+                  'memfd_create',
+                  'mmap_pgoff',
+                  'mq_getsetattr',
+                  'mq_notify',
+                  'mq_open',
+                  'mq_timedreceive',
+                  'mq_timedsend',
+                  'msync',
+                  'old_readdir',
+                  'open',
+                  'open_by_handle_at',
+                  'openat',
+                  'perf_event_open',
+                  'pipe2',
+                  'pread64',
+                  'preadv',
+                  'preadv2',
+                  'preadv64',
+                  'preadv64v2',
+                  'pwrite64',
+                  'pwritev',
+                  'pwritev2',
+                  'pwritev64',
+                  'pwritev64v2',
+                  'read',
+                  'readahead',
+                  'readv',
+                  'recvfrom',
+                  'remap_file_pages',
+                  'sendfile',
+                  'sendfile64',
+                  'sendto',
+                  'setns',
+                  'setsockopt',
+                  'shmat',
+                  'shmctl',
+                  'shmdt',
+                  'shutdown',
+                  'signalfd4',
+                  'socket',
+                  'socketpair',
+                  'splice',
+                  'swapoff',
+                  'swapon',
+                  'sync_file_range',
+                  'syncfs',
+                  'tee',
+                  'uselib',
+                  'utime',
+                  'utimensat',
+                  'write',
+                  'writev']),
+ 'write': set(['accept4',
+               'bind',
+               'bpf',
+               'connect',
+               'copy_file_range',
+               'epoll_ctl',
+               'epoll_wait',
+               'fadvise64_64',
+               'fallocate',
+               'fchdir',
+               'fchmod',
+               'fchown',
+               'fcntl',
+               'fcntl64',
+               'fdatasync',
+               'fgetxattr',
+               'flistxattr',
+               'flock',
+               'fremovexattr',
+               'fsetxattr',
+               'fstatfs',
+               'fstatfs64',
+               'fsync',
+               'ftruncate',
+               'futimesat',
+               'getdents',
+               'getdents64',
+               'getpeername',
+               'getsockname',
+               'getsockopt',
+               'inotify_add_watch',
+               'inotify_rm_watch',
+               'ioctl',
+               'listen',
+               'llseek',
+               'lseek',
+               'mq_getsetattr',
+               'mq_notify',
+               'mq_timedreceive',
+               'mq_timedsend',
+               'old_readdir',
+               'perf_event_open',
+               'pread64',
+               'preadv',
+               'preadv2',
+               'preadv64',
+               'preadv64v2',
+               'pwrite64',
+               'pwritev',
+               'pwritev2',
+               'pwritev64',
+               'pwritev64v2',
+               'read',
+               'readahead',
+               'readv',
+               'recvfrom',
+               'sendfile',
+               'sendfile64',
+               'sendto',
+               'setsockopt',
+               'shutdown',
+               'signalfd4',
+               'splice',
+               'sync_file_range',
+               'syncfs',
+               'tee',
+               'utime',
+               'utimensat',
+               'vmsplice',
+               'writev'])}
--- /dev/null	Fri Dec 21 15:00:34 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/implicit_dependencies/without_structs/implicit_dependencies_verbose.json	Fri Dec 21 15:00:34 2018
@@ -0,0 +1,1 @@
+{"lseek": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "syncfs": [{"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "epoll_ctl": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["epoll_event->events", "epitem->nwait"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "rt_sigtimedwait": [{"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "iopl"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "msgrcv"}, {"reason": ["siginfo->si_code", "task_struct->timer_slack_ns", "mm_segment_t->seg", "siginfo->si_signo"], "call": "kill"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sched_setparam"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "ioprio_set"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "capget"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "signal"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "umount"}, {"reason": ["siginfo->si_signo", "siginfo->si_code"], "call": "timer_create"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sched_rr_get_interval"}, {"reason": ["siginfo->si_signo", "siginfo->si_code"], "call": "rt_sigqueueinfo"}, {"reason": ["siginfo->si_signo", "siginfo->si_code"], "call": "tgkill"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "setsid"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "setpgid"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "getsid"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "perf_event_open"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "getpgid"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sigaction"}, {"reason": ["siginfo->si_signo", "siginfo->si_code"], "call": "rt_tgsigqueueinfo"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "setns"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "fork"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "ptrace"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "vfork"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "prctl"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "move_pages"}, {"reason": ["siginfo->si_signo", "siginfo->si_code"], "call": "rt_sigreturn"}, {"reason": ["siginfo->si_signo", "siginfo->si_code"], "call": "tkill"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "clone"}, {"reason": ["mm_segment_t->seg", "task_struct->timer_slack_ns"], "call": "sched_getparam"}], "vmsplice": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags", "file->f_mode"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["fd->flags", "file->f_mode"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["fd->flags", "file->f_mode"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "msync"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "msgrcv": [{"reason": ["msg_msg->m_ts"], "call": "mq_timedreceive"}, {"reason": ["msg_msg->m_ts"], "call": "mq_timedsend"}, {"reason": ["msg_msg->m_ts"], "call": "msgsnd"}], "uname": [{"reason": ["task_struct->personality"], "call": "keyctl"}, {"reason": ["task_struct->personality"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality"], "call": "msgrcv"}, {"reason": ["task_struct->personality"], "call": "kill"}, {"reason": ["task_struct->personality"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality"], "call": "sched_setparam"}, {"reason": ["task_struct->personality"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["task_struct->personality"], "call": "getppid"}, {"reason": ["task_struct->personality"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality"], "call": "capget"}, {"reason": ["task_struct->personality"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality"], "call": "signal"}, {"reason": ["task_struct->personality"], "call": "semtimedop"}, {"reason": ["task_struct->personality"], "call": "umount"}, {"reason": ["task_struct->personality"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->personality"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality"], "call": "setsid"}, {"reason": ["task_struct->personality"], "call": "sigaltstack"}, {"reason": ["task_struct->personality"], "call": "sched_setattr"}, {"reason": ["task_struct->personality"], "call": "migrate_pages"}, {"reason": ["task_struct->personality"], "call": "getitimer"}, {"reason": ["task_struct->personality"], "call": "setpgid"}, {"reason": ["task_struct->personality"], "call": "getsid"}, {"reason": ["task_struct->personality"], "call": "prlimit64"}, {"reason": ["task_struct->personality"], "call": "perf_event_open"}, {"reason": ["task_struct->personality"], "call": "rt_sigaction"}, {"reason": ["task_struct->personality"], "call": "getpgid"}, {"reason": ["task_struct->personality"], "call": "getpriority"}, {"reason": ["task_struct->personality"], "call": "sigaction"}, {"reason": ["task_struct->personality"], "call": "setns"}, {"reason": ["task_struct->personality"], "call": "fork"}, {"reason": ["task_struct->personality"], "call": "get_robust_list"}, {"reason": ["task_struct->personality"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality"], "call": "ptrace"}, {"reason": ["task_struct->personality"], "call": "sched_getattr"}, {"reason": ["task_struct->personality"], "call": "getrusage"}, {"reason": ["task_struct->personality"], "call": "sched_setscheduler"}, {"reason": ["task_struct->personality"], "call": "setitimer"}, {"reason": ["task_struct->personality"], "call": "ioprio_get"}, {"reason": ["task_struct->personality"], "call": "vfork"}, {"reason": ["task_struct->personality"], "call": "prctl"}, {"reason": ["task_struct->personality"], "call": "move_pages"}, {"reason": ["task_struct->personality"], "call": "setpriority"}, {"reason": ["task_struct->personality"], "call": "clone"}, {"reason": ["task_struct->personality"], "call": "sched_getparam"}], "io_getevents": [{"reason": ["task_struct->timer_slack_ns"], "call": "keyctl"}, {"reason": ["task_struct->timer_slack_ns"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->timer_slack_ns"], "call": "msgrcv"}, {"reason": ["task_struct->timer_slack_ns"], "call": "kill"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sched_getaffinity"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sched_setparam"}, {"reason": ["task_struct->timer_slack_ns"], "call": "ioprio_set"}, {"reason": ["task_struct->timer_slack_ns"], "call": "getppid"}, {"reason": ["task_struct->timer_slack_ns"], "call": "mq_timedreceive"}, {"reason": ["task_struct->timer_slack_ns"], "call": "capget"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sched_setaffinity"}, {"reason": ["task_struct->timer_slack_ns"], "call": "signal"}, {"reason": ["task_struct->timer_slack_ns"], "call": "semtimedop"}, {"reason": ["task_struct->timer_slack_ns"], "call": "umount"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->timer_slack_ns"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->timer_slack_ns"], "call": "setsid"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sigaltstack"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sched_setattr"}, {"reason": ["task_struct->timer_slack_ns"], "call": "migrate_pages"}, {"reason": ["task_struct->timer_slack_ns"], "call": "getitimer"}, {"reason": ["task_struct->timer_slack_ns"], "call": "setpgid"}, {"reason": ["task_struct->timer_slack_ns"], "call": "getsid"}, {"reason": ["task_struct->timer_slack_ns"], "call": "prlimit64"}, {"reason": ["task_struct->timer_slack_ns"], "call": "perf_event_open"}, {"reason": ["task_struct->timer_slack_ns"], "call": "rt_sigaction"}, {"reason": ["task_struct->timer_slack_ns"], "call": "getpgid"}, {"reason": ["task_struct->timer_slack_ns"], "call": "getpriority"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sigaction"}, {"reason": ["task_struct->timer_slack_ns"], "call": "setns"}, {"reason": ["task_struct->timer_slack_ns"], "call": "fork"}, {"reason": ["kioctx->user_id"], "call": "io_submit"}, {"reason": ["task_struct->timer_slack_ns"], "call": "get_robust_list"}, {"reason": ["task_struct->timer_slack_ns"], "call": "mq_timedsend"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sched_getscheduler"}, {"reason": ["task_struct->timer_slack_ns"], "call": "ptrace"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sched_getattr"}, {"reason": ["task_struct->timer_slack_ns"], "call": "getrusage"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sched_setscheduler"}, {"reason": ["task_struct->timer_slack_ns"], "call": "setitimer"}, {"reason": ["task_struct->timer_slack_ns"], "call": "ioprio_get"}, {"reason": ["task_struct->timer_slack_ns"], "call": "vfork"}, {"reason": ["kioctx_table->nr", "kioctx->user_id"], "call": "io_setup"}, {"reason": ["kioctx_table->nr", "kioctx->user_id"], "call": "io_destroy"}, {"reason": ["task_struct->timer_slack_ns"], "call": "prctl"}, {"reason": ["task_struct->timer_slack_ns"], "call": "move_pages"}, {"reason": ["task_struct->timer_slack_ns"], "call": "setpriority"}, {"reason": ["task_struct->timer_slack_ns"], "call": "clone"}, {"reason": ["task_struct->timer_slack_ns"], "call": "sched_getparam"}, {"reason": ["kioctx_table->nr", "kioctx->user_id"], "call": "io_cancel"}], "swapoff": [{"reason": ["swap_info_struct->swap_map", "swap_info_struct->flags", "swap_info_struct->inuse_pages", "swap_info_struct->prio", "page->private", "swap_info_struct->pages"], "call": "swapon"}], "newlstat": [{"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newfstatat"}, {"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newstat"}, {"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newfstat"}], "pkey_alloc": [{"reason": ["mm_context_t->pkey_allocation_map"], "call": "swapoff"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "remap_file_pages"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "io_getevents"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "pkey_free"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "migrate_pages"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "shmdt"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "brk"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "get_mempolicy"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "getrusage"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "io_setup"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "mremap"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "io_destroy"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "mbind"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "prctl"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "move_pages"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "modify_ldt"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "mincore"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "msync"}, {"reason": ["mm_context_t->pkey_allocation_map"], "call": "io_cancel"}], "readahead": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags", "file->f_mode"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["fd->flags", "file->f_mode"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["fd->flags", "file->f_mode"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "msync"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "newfstatat": [{"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newlstat"}, {"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newstat"}, {"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newfstat"}], "preadv": [{"reason": ["file->f_mode"], "call": "fadvise64_64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "msync"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "getdents": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["mm_segment_t->seg"], "call": "iopl"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg", "fd->flags"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["mm_segment_t->seg", "fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["mm_segment_t->seg"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["mm_segment_t->seg", "fd->flags"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "timer_delete": [{"reason": ["k_clock->timer_del"], "call": "clock_getres"}, {"reason": ["k_clock->timer_del"], "call": "timer_create"}, {"reason": ["k_clock->timer_del"], "call": "clock_gettime"}, {"reason": ["k_clock->timer_del"], "call": "timer_settime"}, {"reason": ["k_clock->timer_del"], "call": "timer_gettime"}, {"reason": ["k_clock->timer_del"], "call": "clock_settime"}, {"reason": ["k_clock->timer_del"], "call": "clock_nanosleep"}, {"reason": ["k_clock->timer_del"], "call": "clock_adjtime"}], "pwritev2": [{"reason": ["file->f_mode"], "call": "fadvise64_64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "msync"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "fchmod": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "pivot_root": [{"reason": ["vfsmount->mnt_flags"], "call": "mq_unlink"}, {"reason": ["vfsmount->mnt_flags"], "call": "umount"}, {"reason": ["vfsmount->mnt_flags"], "call": "getcwd"}, {"reason": ["vfsmount->mnt_flags"], "call": "acct"}, {"reason": ["vfsmount->mnt_flags"], "call": "mq_open"}], "signalfd4": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "epoll_wait": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["mm_segment_t->seg"], "call": "iopl"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg", "fd->flags"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["mm_segment_t->seg", "fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["mm_segment_t->seg"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["mm_segment_t->seg", "fd->flags"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "fstat": [{"reason": ["__old_kernel_stat->st_nlink", "__old_kernel_stat->st_ino"], "call": "lstat"}, {"reason": ["__old_kernel_stat->st_nlink", "__old_kernel_stat->st_ino"], "call": "stat"}], "setgroups16": [{"reason": ["group_info->ngroups"], "call": "setgroups"}], "delete_module": [{"reason": ["module->exit", "module->init", "module->state"], "call": "init_module"}, {"reason": ["module->exit", "module->init", "module->state"], "call": "finit_module"}], "remap_file_pages": [{"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "shmdt"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "brk"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "get_mempolicy"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "madvise"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mremap"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "prctl"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "munlock"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mincore"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "msync"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mlockall"}], "dup3": [{"reason": ["files_struct->resize_in_progress", "fdtable->max_fds"], "call": "unshare"}, {"reason": ["fdtable->max_fds"], "call": "select"}, {"reason": ["files_struct->resize_in_progress", "fdtable->max_fds"], "call": "dup2"}], "read": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "preadv64": [{"reason": ["file->f_mode"], "call": "fadvise64_64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "msync"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "fchown": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "ioperm": [{"reason": ["thread_struct->io_bitmap_ptr"], "call": "keyctl"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "rt_sigtimedwait"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "iopl"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "msgrcv"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "kill"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sched_getaffinity"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sched_setparam"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "ioprio_set"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "getppid"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "mq_timedreceive"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "capget"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sched_setaffinity"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "signal"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "semtimedop"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "umount"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sched_rr_get_interval"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "rt_sigprocmask"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "setsid"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sigaltstack"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sched_setattr"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "migrate_pages"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "getitimer"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "setpgid"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "getsid"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "prlimit64"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "perf_event_open"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "rt_sigaction"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "getpgid"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "getpriority"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sigaction"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "setns"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "fork"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "get_robust_list"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "mq_timedsend"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sched_getscheduler"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "ptrace"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sched_getattr"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "getrusage"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sched_setscheduler"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "setitimer"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "ioprio_get"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "vfork"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "prctl"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "move_pages"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "setpriority"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "clone"}, {"reason": ["thread_struct->io_bitmap_ptr"], "call": "sched_getparam"}], "mq_timedreceive": [{"reason": ["msg_msg->m_ts"], "call": "msgrcv"}, {"reason": ["file->f_mode"], "call": "fadvise64_64"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "dup3"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "flock"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "openat"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "uselib"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "accept4"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "shmat"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "socket"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "acct"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "open"}, {"reason": ["mq_attr->mq_curmsgs", "file->f_flags", "mq_attr->mq_msgsize"], "call": "mq_getsetattr"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "dup"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "setns"}, {"reason": ["mq_attr->mq_curmsgs", "msg_msg->m_ts", "mq_attr->mq_msgsize"], "call": "mq_timedsend"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "swapon"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["msg_msg->m_ts"], "call": "msgsnd"}, {"reason": ["mq_attr->mq_curmsgs", "mq_attr->mq_msgsize"], "call": "mq_notify"}, {"reason": ["mq_attr->mq_curmsgs", "mq_attr->mq_msgsize", "file->f_flags", "file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "msync"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "open_by_handle_at"}], "utime": [{"reason": ["timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["timespec->tv_nsec"], "call": "fadvise64_64"}, {"reason": ["timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["timespec->tv_nsec"], "call": "fchown"}, {"reason": ["timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_nsec"], "call": "uselib"}, {"reason": ["timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_nsec"], "call": "stime"}, {"reason": ["timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["timespec->tv_nsec"], "call": "poll"}, {"reason": ["timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_nsec"], "call": "unlink"}, {"reason": ["timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["timespec->tv_nsec"], "call": "ppoll"}], "sched_setaffinity": [{"reason": ["task_struct->flags"], "call": "keyctl"}, {"reason": ["task_struct->flags"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->flags"], "call": "msgrcv"}, {"reason": ["task_struct->flags"], "call": "kill"}, {"reason": ["task_struct->flags"], "call": "sched_getaffinity"}, {"reason": ["task_struct->flags"], "call": "sched_setparam"}, {"reason": ["task_struct->flags"], "call": "ioprio_set"}, {"reason": ["task_struct->flags"], "call": "getppid"}, {"reason": ["task_struct->flags"], "call": "mq_timedreceive"}, {"reason": ["task_struct->flags"], "call": "capget"}, {"reason": ["task_struct->flags"], "call": "signal"}, {"reason": ["task_struct->flags"], "call": "setreuid"}, {"reason": ["task_struct->flags"], "call": "semtimedop"}, {"reason": ["task_struct->flags"], "call": "umount"}, {"reason": ["task_struct->flags"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->flags"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->flags"], "call": "setsid"}, {"reason": ["task_struct->flags"], "call": "sigaltstack"}, {"reason": ["task_struct->flags"], "call": "sched_setattr"}, {"reason": ["task_struct->flags"], "call": "migrate_pages"}, {"reason": ["task_struct->flags"], "call": "getitimer"}, {"reason": ["task_struct->flags"], "call": "setpgid"}, {"reason": ["task_struct->flags"], "call": "getsid"}, {"reason": ["task_struct->flags"], "call": "prlimit64"}, {"reason": ["task_struct->flags"], "call": "perf_event_open"}, {"reason": ["task_struct->flags"], "call": "rt_sigaction"}, {"reason": ["task_struct->flags"], "call": "getpgid"}, {"reason": ["task_struct->flags"], "call": "getpriority"}, {"reason": ["task_struct->flags"], "call": "sigaction"}, {"reason": ["task_struct->flags"], "call": "setns"}, {"reason": ["task_struct->flags"], "call": "fork"}, {"reason": ["task_struct->flags"], "call": "get_robust_list"}, {"reason": ["task_struct->flags"], "call": "mq_timedsend"}, {"reason": ["task_struct->flags"], "call": "sched_getscheduler"}, {"reason": ["task_struct->flags"], "call": "ptrace"}, {"reason": ["task_struct->flags"], "call": "sched_getattr"}, {"reason": ["task_struct->flags"], "call": "getrusage"}, {"reason": ["task_struct->flags"], "call": "sched_setscheduler"}, {"reason": ["task_struct->flags"], "call": "setresuid"}, {"reason": ["task_struct->flags"], "call": "setitimer"}, {"reason": ["task_struct->flags"], "call": "ioprio_get"}, {"reason": ["task_struct->flags"], "call": "vfork"}, {"reason": ["task_struct->flags"], "call": "setuid"}, {"reason": ["task_struct->flags"], "call": "prctl"}, {"reason": ["task_struct->flags"], "call": "move_pages"}, {"reason": ["task_struct->flags"], "call": "setpriority"}, {"reason": ["task_struct->flags"], "call": "clone"}, {"reason": ["task_struct->flags"], "call": "sched_getparam"}], "bpf": [{"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg"], "call": "iopl"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["file->private_data"], "call": "swapoff"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["file->private_data"], "call": "memfd_create"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["file->private_data"], "call": "remap_file_pages"}, {"reason": ["file->private_data"], "call": "dup3"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["file->private_data"], "call": "socketpair"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["file->private_data"], "call": "epoll_create1"}, {"reason": ["file->private_data"], "call": "epoll_ctl"}, {"reason": ["file->private_data"], "call": "flock"}, {"reason": ["file->private_data"], "call": "openat"}, {"reason": ["file->private_data"], "call": "uselib"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["file->private_data"], "call": "accept4"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["file->private_data"], "call": "shmat"}, {"reason": ["file->private_data"], "call": "socket"}, {"reason": ["file->private_data"], "call": "pipe2"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg", "file->private_data"], "call": "perf_event_open"}, {"reason": ["file->private_data"], "call": "shmdt"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["file->private_data"], "call": "acct"}, {"reason": ["file->private_data"], "call": "open"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["file->private_data"], "call": "dup"}, {"reason": ["mm_segment_t->seg", "file->private_data"], "call": "setns"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["file->private_data"], "call": "shmctl"}, {"reason": ["file->private_data"], "call": "swapon"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["file->private_data"], "call": "eventfd2"}, {"reason": ["file->private_data"], "call": "mmap_pgoff"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["file->private_data"], "call": "mq_open"}, {"reason": ["file->private_data"], "call": "msync"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}, {"reason": ["file->private_data"], "call": "open_by_handle_at"}], "newstat": [{"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newlstat"}, {"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newfstatat"}, {"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newfstat"}], "semtimedop": [{"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["kern_ipc_perm->deleted"], "call": "msgrcv"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fadvise64_64"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchown"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "utime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["sem_array->sem_nsems", "kern_ipc_perm->deleted", "sem_array->use_global_lock", "sem_undo->semid", "sem_array->complex_count"], "call": "semctl"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "uselib"}, {"reason": ["kern_ipc_perm->deleted"], "call": "msgctl"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["kern_ipc_perm->deleted"], "call": "shmat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "stime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "poll"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlink"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["kern_ipc_perm->deleted"], "call": "shmctl"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["kern_ipc_perm->deleted"], "call": "msgsnd"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ppoll"}], "umount": [{"reason": ["super_block->s_flags"], "call": "syncfs"}, {"reason": ["task_struct->flags"], "call": "keyctl"}, {"reason": ["task_struct->flags"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->flags"], "call": "msgrcv"}, {"reason": ["super_block->s_flags"], "call": "fadvise64_64"}, {"reason": ["vfsmount->mnt_flags"], "call": "mq_unlink"}, {"reason": ["task_struct->flags"], "call": "kill"}, {"reason": ["task_struct->flags"], "call": "sched_getaffinity"}, {"reason": ["task_struct->flags"], "call": "sched_setparam"}, {"reason": ["vfsmount->mnt_flags"], "call": "pivot_root"}, {"reason": ["task_struct->flags"], "call": "ioprio_set"}, {"reason": ["task_struct->flags"], "call": "getppid"}, {"reason": ["task_struct->flags"], "call": "mq_timedreceive"}, {"reason": ["task_struct->flags"], "call": "capget"}, {"reason": ["task_struct->flags"], "call": "sched_setaffinity"}, {"reason": ["super_block->s_flags"], "call": "ustat"}, {"reason": ["task_struct->flags"], "call": "signal"}, {"reason": ["task_struct->flags"], "call": "setreuid"}, {"reason": ["task_struct->flags"], "call": "semtimedop"}, {"reason": ["task_struct->flags"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->flags"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->flags"], "call": "setsid"}, {"reason": ["task_struct->flags"], "call": "sigaltstack"}, {"reason": ["task_struct->flags"], "call": "sched_setattr"}, {"reason": ["task_struct->flags"], "call": "migrate_pages"}, {"reason": ["task_struct->flags"], "call": "getitimer"}, {"reason": ["task_struct->flags"], "call": "setpgid"}, {"reason": ["vfsmount->mnt_flags"], "call": "getcwd"}, {"reason": ["task_struct->flags"], "call": "getsid"}, {"reason": ["task_struct->flags"], "call": "prlimit64"}, {"reason": ["task_struct->flags"], "call": "perf_event_open"}, {"reason": ["super_block->s_flags"], "call": "quotactl"}, {"reason": ["task_struct->flags"], "call": "rt_sigaction"}, {"reason": ["task_struct->flags"], "call": "getpgid"}, {"reason": ["vfsmount->mnt_flags"], "call": "acct"}, {"reason": ["task_struct->flags"], "call": "getpriority"}, {"reason": ["task_struct->flags"], "call": "sigaction"}, {"reason": ["task_struct->flags"], "call": "setns"}, {"reason": ["task_struct->flags"], "call": "fork"}, {"reason": ["task_struct->flags"], "call": "get_robust_list"}, {"reason": ["task_struct->flags"], "call": "mq_timedsend"}, {"reason": ["task_struct->flags"], "call": "sched_getscheduler"}, {"reason": ["task_struct->flags"], "call": "ptrace"}, {"reason": ["super_block->s_flags"], "call": "swapon"}, {"reason": ["task_struct->flags"], "call": "sched_getattr"}, {"reason": ["task_struct->flags"], "call": "getrusage"}, {"reason": ["task_struct->flags"], "call": "sched_setscheduler"}, {"reason": ["task_struct->flags"], "call": "setresuid"}, {"reason": ["task_struct->flags"], "call": "setitimer"}, {"reason": ["task_struct->flags"], "call": "ioprio_get"}, {"reason": ["task_struct->flags"], "call": "vfork"}, {"reason": ["task_struct->flags"], "call": "setuid"}, {"reason": ["task_struct->flags"], "call": "prctl"}, {"reason": ["task_struct->flags"], "call": "move_pages"}, {"reason": ["task_struct->flags"], "call": "setpriority"}, {"reason": ["task_struct->flags"], "call": "clone"}, {"reason": ["vfsmount->mnt_flags"], "call": "mq_open"}, {"reason": ["task_struct->flags"], "call": "sched_getparam"}], "recvfrom": [{"reason": ["file->f_flags"], "call": "swapoff"}, {"reason": ["file->f_flags"], "call": "memfd_create"}, {"reason": ["file->f_flags"], "call": "remap_file_pages"}, {"reason": ["file->f_flags"], "call": "dup3"}, {"reason": ["file->f_flags"], "call": "socketpair"}, {"reason": ["file->f_flags"], "call": "epoll_create1"}, {"reason": ["file->f_flags"], "call": "epoll_ctl"}, {"reason": ["file->f_flags"], "call": "flock"}, {"reason": ["file->f_flags"], "call": "openat"}, {"reason": ["file->f_flags"], "call": "uselib"}, {"reason": ["file->f_flags"], "call": "accept4"}, {"reason": ["file->f_flags"], "call": "shmat"}, {"reason": ["file->f_flags"], "call": "socket"}, {"reason": ["file->f_flags"], "call": "pipe2"}, {"reason": ["file->f_flags"], "call": "perf_event_open"}, {"reason": ["file->f_flags"], "call": "shmdt"}, {"reason": ["file->f_flags"], "call": "acct"}, {"reason": ["file->f_flags"], "call": "open"}, {"reason": ["file->f_flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_flags"], "call": "dup"}, {"reason": ["file->f_flags"], "call": "setns"}, {"reason": ["file->f_flags"], "call": "shmctl"}, {"reason": ["file->f_flags"], "call": "swapon"}, {"reason": ["file->f_flags"], "call": "eventfd2"}, {"reason": ["file->f_flags"], "call": "mmap_pgoff"}, {"reason": ["file->f_flags"], "call": "mq_open"}, {"reason": ["file->f_flags"], "call": "msync"}, {"reason": ["file->f_flags"], "call": "open_by_handle_at"}], "old_readdir": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "settimeofday": [{"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "adjtimex"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "waitid"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "getitimer"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "select"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "wait4"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "getrusage"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "setitimer"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "clock_adjtime"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "alarm"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "ppoll"}], "timer_create": [{"reason": ["k_clock->timer_create"], "call": "clock_getres"}, {"reason": ["k_clock->timer_create"], "call": "timer_delete"}, {"reason": ["k_clock->timer_create"], "call": "clock_gettime"}, {"reason": ["k_clock->timer_create"], "call": "timer_settime"}, {"reason": ["k_clock->timer_create"], "call": "timer_gettime"}, {"reason": ["k_clock->timer_create"], "call": "clock_settime"}, {"reason": ["k_clock->timer_create"], "call": "clock_nanosleep"}, {"reason": ["k_clock->timer_create"], "call": "clock_adjtime"}], "sendto": [{"reason": ["file->f_flags"], "call": "swapoff"}, {"reason": ["file->f_flags"], "call": "memfd_create"}, {"reason": ["file->f_flags"], "call": "remap_file_pages"}, {"reason": ["file->f_flags"], "call": "dup3"}, {"reason": ["file->f_flags"], "call": "socketpair"}, {"reason": ["file->f_flags"], "call": "epoll_create1"}, {"reason": ["file->f_flags"], "call": "epoll_ctl"}, {"reason": ["file->f_flags"], "call": "flock"}, {"reason": ["file->f_flags"], "call": "openat"}, {"reason": ["file->f_flags"], "call": "uselib"}, {"reason": ["file->f_flags"], "call": "accept4"}, {"reason": ["file->f_flags"], "call": "shmat"}, {"reason": ["file->f_flags"], "call": "socket"}, {"reason": ["file->f_flags"], "call": "pipe2"}, {"reason": ["file->f_flags"], "call": "perf_event_open"}, {"reason": ["file->f_flags"], "call": "shmdt"}, {"reason": ["file->f_flags"], "call": "acct"}, {"reason": ["file->f_flags"], "call": "open"}, {"reason": ["file->f_flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_flags"], "call": "dup"}, {"reason": ["file->f_flags"], "call": "setns"}, {"reason": ["file->f_flags"], "call": "shmctl"}, {"reason": ["file->f_flags"], "call": "swapon"}, {"reason": ["file->f_flags"], "call": "eventfd2"}, {"reason": ["file->f_flags"], "call": "mmap_pgoff"}, {"reason": ["file->f_flags"], "call": "mq_open"}, {"reason": ["file->f_flags"], "call": "msync"}, {"reason": ["file->f_flags"], "call": "open_by_handle_at"}], "mkdirat": [{"reason": ["super_block->s_flags"], "call": "syncfs"}, {"reason": ["super_block->s_flags"], "call": "fadvise64_64"}, {"reason": ["super_block->s_flags"], "call": "ustat"}, {"reason": ["super_block->s_flags"], "call": "umount"}, {"reason": ["super_block->s_flags"], "call": "quotactl"}, {"reason": ["super_block->s_flags"], "call": "swapon"}], "newuname": [{"reason": ["task_struct->personality"], "call": "keyctl"}, {"reason": ["task_struct->personality"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality"], "call": "msgrcv"}, {"reason": ["task_struct->personality"], "call": "kill"}, {"reason": ["task_struct->personality"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality"], "call": "sched_setparam"}, {"reason": ["task_struct->personality"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["task_struct->personality"], "call": "getppid"}, {"reason": ["task_struct->personality"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality"], "call": "capget"}, {"reason": ["task_struct->personality"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality"], "call": "signal"}, {"reason": ["task_struct->personality"], "call": "semtimedop"}, {"reason": ["task_struct->personality"], "call": "umount"}, {"reason": ["task_struct->personality"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->personality"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality"], "call": "setsid"}, {"reason": ["task_struct->personality"], "call": "sigaltstack"}, {"reason": ["task_struct->personality"], "call": "sched_setattr"}, {"reason": ["task_struct->personality"], "call": "migrate_pages"}, {"reason": ["task_struct->personality"], "call": "getitimer"}, {"reason": ["task_struct->personality"], "call": "setpgid"}, {"reason": ["task_struct->personality"], "call": "getsid"}, {"reason": ["task_struct->personality"], "call": "prlimit64"}, {"reason": ["task_struct->personality"], "call": "perf_event_open"}, {"reason": ["task_struct->personality"], "call": "rt_sigaction"}, {"reason": ["task_struct->personality"], "call": "getpgid"}, {"reason": ["task_struct->personality"], "call": "getpriority"}, {"reason": ["task_struct->personality"], "call": "sigaction"}, {"reason": ["task_struct->personality"], "call": "setns"}, {"reason": ["task_struct->personality"], "call": "fork"}, {"reason": ["task_struct->personality"], "call": "get_robust_list"}, {"reason": ["task_struct->personality"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality"], "call": "ptrace"}, {"reason": ["task_struct->personality"], "call": "sched_getattr"}, {"reason": ["task_struct->personality"], "call": "getrusage"}, {"reason": ["task_struct->personality"], "call": "sched_setscheduler"}, {"reason": ["task_struct->personality"], "call": "setitimer"}, {"reason": ["task_struct->personality"], "call": "ioprio_get"}, {"reason": ["task_struct->personality"], "call": "vfork"}, {"reason": ["task_struct->personality"], "call": "prctl"}, {"reason": ["task_struct->personality"], "call": "move_pages"}, {"reason": ["task_struct->personality"], "call": "setpriority"}, {"reason": ["task_struct->personality"], "call": "clone"}, {"reason": ["task_struct->personality"], "call": "sched_getparam"}], "olduname": [{"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg"], "call": "iopl"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "kill"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "capget"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "signal"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "umount"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "setsid"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "getsid"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "setns"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "fork"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "vfork"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "prctl"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "clone"}, {"reason": ["task_struct->personality", "mm_segment_t->seg"], "call": "sched_getparam"}], "tee": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags", "file->f_mode"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["fd->flags", "file->f_mode"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["fd->flags", "file->f_mode"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "msync"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "semctl": [{"reason": ["sem_array->sem_nsems"], "call": "semtimedop"}], "syslog": [{"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg"], "call": "iopl"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "setns"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}], "rt_sigqueueinfo": [{"reason": ["siginfo->si_code"], "call": "rt_sigtimedwait"}, {"reason": ["siginfo->si_code"], "call": "kill"}, {"reason": ["siginfo->si_code"], "call": "timer_create"}, {"reason": ["siginfo->si_code"], "call": "tgkill"}, {"reason": ["siginfo->si_code"], "call": "rt_tgsigqueueinfo"}, {"reason": ["siginfo->si_code"], "call": "rt_sigreturn"}, {"reason": ["siginfo->si_code"], "call": "tkill"}], "sync_file_range": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "fadvise64_64": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["inode->i_flags"], "call": "mq_unlink"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["inode->i_flags"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["inode->i_flags", "fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["inode->i_flags"], "call": "memfd_create"}, {"reason": ["inode->i_flags"], "call": "readlinkat"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["inode->i_flags", "fd->flags"], "call": "fchown"}, {"reason": ["inode->i_flags", "fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["inode->i_flags"], "call": "uselib"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["inode->i_flags"], "call": "fchmodat"}, {"reason": ["inode->i_flags", "fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["inode->i_flags", "fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["inode->i_flags", "fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["inode->i_flags"], "call": "linkat"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["inode->i_flags"], "call": "unlink"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["inode->i_flags", "fd->flags"], "call": "mq_getsetattr"}, {"reason": ["inode->i_flags"], "call": "faccessat"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["inode->i_flags", "fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["inode->i_flags"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["inode->i_flags"], "call": "fchownat"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["inode->i_flags", "fd->flags"], "call": "mq_notify"}, {"reason": ["inode->i_flags", "fd->flags"], "call": "sendfile"}, {"reason": ["inode->i_flags"], "call": "unlinkat"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["inode->i_flags", "fd->flags"], "call": "sendfile64"}], "llseek": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "flock": [{"reason": ["fd->flags", "super_block->s_flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags", "super_block->s_flags", "file->f_mode"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["super_block->s_flags"], "call": "ustat"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["super_block->s_flags"], "call": "umount"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["fd->flags", "file->f_mode"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["super_block->s_flags"], "call": "quotactl"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["super_block->s_flags", "file->f_mode"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "msync"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "pwritev": [{"reason": ["file->f_mode"], "call": "fadvise64_64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "msync"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "pselect6": [{"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg", "timespec->tv_sec", "timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg"], "call": "iopl"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fadvise64_64"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchown"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg", "timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "utime"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg", "timespec->tv_sec", "timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["mm_segment_t->seg", "timespec->tv_sec", "timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "uselib"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "stime"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "poll"}, {"reason": ["compat_timespec->tv_sec", "compat_timespec->tv_nsec", "timespec->tv_sec", "timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlink"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["compat_timespec->tv_sec", "compat_timespec->tv_nsec", "timespec->tv_sec", "timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["mm_segment_t->seg"], "call": "setns"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg", "timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["compat_timespec->tv_sec", "compat_timespec->tv_nsec", "timespec->tv_sec", "timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["compat_timespec->tv_sec", "compat_timespec->tv_nsec", "timespec->tv_sec", "timespec->tv_nsec"], "call": "ppoll"}], "uselib": [{"reason": ["super_block->s_iflags"], "call": "syncfs"}, {"reason": ["super_block->s_iflags"], "call": "fadvise64_64"}, {"reason": ["vfsmount->mnt_flags"], "call": "mq_unlink"}, {"reason": ["vfsmount->mnt_flags"], "call": "pivot_root"}, {"reason": ["super_block->s_iflags"], "call": "ustat"}, {"reason": ["vfsmount->mnt_flags", "super_block->s_iflags"], "call": "umount"}, {"reason": ["vfsmount->mnt_flags"], "call": "getcwd"}, {"reason": ["super_block->s_iflags"], "call": "quotactl"}, {"reason": ["vfsmount->mnt_flags"], "call": "acct"}, {"reason": ["super_block->s_iflags"], "call": "swapon"}, {"reason": ["vfsmount->mnt_flags"], "call": "mq_open"}], "sysfs": [{"reason": ["filename->name"], "call": "mq_unlink"}, {"reason": ["filename->name"], "call": "swapoff"}, {"reason": ["filename->name"], "call": "openat"}, {"reason": ["filename->name"], "call": "uselib"}, {"reason": ["filename->name"], "call": "renameat2"}, {"reason": ["filename->name"], "call": "symlinkat"}, {"reason": ["filename->name"], "call": "quotactl"}, {"reason": ["filename->name"], "call": "acct"}, {"reason": ["filename->name"], "call": "open"}, {"reason": ["filename->name"], "call": "unlink"}, {"reason": ["filename->name"], "call": "rmdir"}, {"reason": ["filename->name"], "call": "swapon"}, {"reason": ["filename->name"], "call": "mq_open"}, {"reason": ["filename->name"], "call": "unlinkat"}], "msgctl": [{"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg"], "call": "iopl"}, {"reason": ["ipc_namespace->msg_ctlmnb", "mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["ipc_namespace->msg_ctlmnb"], "call": "mq_unlink"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["ipc_namespace->msg_ctlmnb"], "call": "msgget"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["ipc_namespace->msg_ctlmnb", "mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["ipc_namespace->msg_ctlmnb"], "call": "semctl"}, {"reason": ["ipc_namespace->msg_ctlmnb"], "call": "shmget"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["ipc_namespace->msg_ctlmnb"], "call": "semget"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["ipc_namespace->msg_ctlmnb"], "call": "shmat"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["ipc_namespace->msg_ctlmnb", "mm_segment_t->seg"], "call": "setns"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["ipc_namespace->msg_ctlmnb"], "call": "shmctl"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["ipc_namespace->msg_ctlmnb"], "call": "msgsnd"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["ipc_namespace->msg_ctlmnb"], "call": "mq_open"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}], "fremovexattr": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "clock_adjtime": [{"reason": ["k_clock->clock_adj"], "call": "clock_getres"}, {"reason": ["k_clock->clock_adj"], "call": "timer_delete"}, {"reason": ["k_clock->clock_adj"], "call": "timer_create"}, {"reason": ["k_clock->clock_adj"], "call": "clock_gettime"}, {"reason": ["k_clock->clock_adj"], "call": "timer_settime"}, {"reason": ["k_clock->clock_adj"], "call": "timer_gettime"}, {"reason": ["k_clock->clock_adj"], "call": "clock_settime"}, {"reason": ["k_clock->clock_adj"], "call": "clock_nanosleep"}], "setsid": [{"reason": ["signal_struct->leader"], "call": "timer_create"}, {"reason": ["signal_struct->leader"], "call": "exit_group"}], "timerfd_create": [{"reason": ["timerfd_ctx->clockid"], "call": "timerfd_gettime"}, {"reason": ["timerfd_ctx->clockid"], "call": "timerfd_settime"}], "set_trip_temp": [{"reason": ["pkg_device->cpu", "pkg_device->tj_max"], "call": "get_trip_temp"}, {"reason": ["pkg_device->cpu", "pkg_device->tj_max"], "call": "get_curr_temp"}], "sched_setattr": [{"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg"], "call": "iopl"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "setns"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["mm_segment_t->seg", "sched_attr->sched_policy"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}], "inotify_rm_watch": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "renameat2": [{"reason": ["filename->refcnt", "filename->name"], "call": "sysfs"}, {"reason": ["filename->refcnt", "filename->name"], "call": "mq_unlink"}, {"reason": ["filename->refcnt", "filename->name"], "call": "swapoff"}, {"reason": ["filename->refcnt", "filename->name"], "call": "openat"}, {"reason": ["filename->refcnt", "filename->name"], "call": "uselib"}, {"reason": ["filename->refcnt", "filename->name"], "call": "symlinkat"}, {"reason": ["filename->refcnt", "filename->name"], "call": "quotactl"}, {"reason": ["filename->refcnt", "filename->name"], "call": "acct"}, {"reason": ["filename->refcnt", "filename->name"], "call": "open"}, {"reason": ["filename->refcnt", "filename->name"], "call": "unlink"}, {"reason": ["filename->refcnt", "filename->name"], "call": "rmdir"}, {"reason": ["filename->refcnt", "filename->name"], "call": "swapon"}, {"reason": ["filename->refcnt", "filename->name"], "call": "mq_open"}, {"reason": ["filename->refcnt", "filename->name"], "call": "unlinkat"}], "keyctl": [{"reason": ["task_struct->pid"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->pid"], "call": "msgrcv"}, {"reason": ["task_struct->pid"], "call": "kill"}, {"reason": ["task_struct->pid"], "call": "sched_getaffinity"}, {"reason": ["task_struct->pid"], "call": "sched_setparam"}, {"reason": ["task_struct->pid"], "call": "ioprio_set"}, {"reason": ["task_struct->pid"], "call": "getppid"}, {"reason": ["task_struct->pid"], "call": "mq_timedreceive"}, {"reason": ["task_struct->pid"], "call": "capget"}, {"reason": ["task_struct->pid"], "call": "sched_setaffinity"}, {"reason": ["task_struct->pid"], "call": "signal"}, {"reason": ["task_struct->pid"], "call": "semtimedop"}, {"reason": ["task_struct->pid"], "call": "umount"}, {"reason": ["task_struct->pid"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->pid"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->pid"], "call": "setsid"}, {"reason": ["task_struct->pid"], "call": "sigaltstack"}, {"reason": ["task_struct->pid"], "call": "sched_setattr"}, {"reason": ["task_struct->pid"], "call": "migrate_pages"}, {"reason": ["task_struct->pid"], "call": "getitimer"}, {"reason": ["task_struct->pid"], "call": "setpgid"}, {"reason": ["task_struct->pid"], "call": "getsid"}, {"reason": ["task_struct->pid"], "call": "prlimit64"}, {"reason": ["task_struct->pid"], "call": "perf_event_open"}, {"reason": ["task_struct->pid"], "call": "rt_sigaction"}, {"reason": ["key_type->read", "key_type->name", "key->quotalen", "key->serial", "key->description", "key->perm"], "call": "request_key"}, {"reason": ["task_struct->pid"], "call": "getpgid"}, {"reason": ["task_struct->pid"], "call": "getpriority"}, {"reason": ["task_struct->pid"], "call": "sigaction"}, {"reason": ["task_struct->pid"], "call": "setns"}, {"reason": ["task_struct->pid"], "call": "fork"}, {"reason": ["task_struct->pid"], "call": "get_robust_list"}, {"reason": ["task_struct->pid"], "call": "mq_timedsend"}, {"reason": ["task_struct->pid"], "call": "sched_getscheduler"}, {"reason": ["task_struct->pid"], "call": "ptrace"}, {"reason": ["task_struct->pid"], "call": "sched_getattr"}, {"reason": ["task_struct->pid"], "call": "getrusage"}, {"reason": ["task_struct->pid"], "call": "sched_setscheduler"}, {"reason": ["task_struct->pid"], "call": "setitimer"}, {"reason": ["task_struct->pid"], "call": "ioprio_get"}, {"reason": ["task_struct->pid"], "call": "vfork"}, {"reason": ["task_struct->pid"], "call": "prctl"}, {"reason": ["task_struct->pid"], "call": "move_pages"}, {"reason": ["task_struct->pid"], "call": "setpriority"}, {"reason": ["task_struct->pid"], "call": "clone"}, {"reason": ["task_struct->pid"], "call": "sched_getparam"}], "setrlimit": [{"reason": ["rlimit->rlim_max", "rlimit->rlim_cur"], "call": "old_getrlimit"}, {"reason": ["rlimit->rlim_max", "rlimit->rlim_cur"], "call": "prlimit64"}, {"reason": ["compat_rlimit->rlim_cur", "compat_rlimit->rlim_max"], "call": "getrlimit"}], "fcntl": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags", "file->f_mode"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["fd->flags", "file->f_mode"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["fd->flags", "file->f_mode"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "msync"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "migrate_pages": [{"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg"], "call": "iopl"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "setns"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}], "getitimer": [{"reason": ["signal_struct->it_real_incr"], "call": "timer_create"}, {"reason": ["signal_struct->it_real_incr"], "call": "exit_group"}, {"reason": ["signal_struct->it_real_incr"], "call": "setitimer"}], "setpgid": [{"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "keyctl"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "msgrcv"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "kill"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "sched_getaffinity"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "sched_setparam"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "ioprio_set"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "getppid"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "mq_timedreceive"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "capget"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "sched_setaffinity"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "signal"}, {"reason": ["task_struct->flags"], "call": "setreuid"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "semtimedop"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "umount"}, {"reason": ["signal_struct->leader"], "call": "timer_create"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->exit_signal", "task_struct->flags", "signal_struct->leader"], "call": "setsid"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "sigaltstack"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "sched_setattr"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "migrate_pages"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "getitimer"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "getsid"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "prlimit64"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "perf_event_open"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "rt_sigaction"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "getpgid"}, {"reason": ["signal_struct->leader"], "call": "exit_group"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "getpriority"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "sigaction"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "setns"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "fork"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "get_robust_list"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "mq_timedsend"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "sched_getscheduler"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "ptrace"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "sched_getattr"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "getrusage"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "sched_setscheduler"}, {"reason": ["task_struct->flags"], "call": "setresuid"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "setitimer"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "ioprio_get"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "vfork"}, {"reason": ["task_struct->flags"], "call": "setuid"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "prctl"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "move_pages"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "setpriority"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "clone"}, {"reason": ["task_struct->exit_signal", "task_struct->flags"], "call": "sched_getparam"}], "init_module": [{"reason": ["module->args", "module->num_kp", "module_layout->base", "module_layout->size"], "call": "delete_module"}, {"reason": ["module->args", "load_info->num_debug", "module->num_kp", "load_info->len", "module_layout->size", "module_layout->base"], "call": "finit_module"}], "inotify_add_watch": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "preadv2": [{"reason": ["file->f_mode"], "call": "fadvise64_64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "msync"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "timer_settime": [{"reason": ["k_clock->timer_set"], "call": "clock_getres"}, {"reason": ["k_clock->timer_set"], "call": "timer_delete"}, {"reason": ["k_clock->timer_set"], "call": "timer_create"}, {"reason": ["k_clock->timer_set"], "call": "clock_gettime"}, {"reason": ["k_clock->timer_set"], "call": "timer_gettime"}, {"reason": ["k_clock->timer_set"], "call": "clock_settime"}, {"reason": ["k_clock->timer_set"], "call": "clock_nanosleep"}, {"reason": ["k_clock->timer_set"], "call": "clock_adjtime"}], "fchdir": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "timer_gettime": [{"reason": ["k_clock->timer_get"], "call": "clock_getres"}, {"reason": ["k_clock->timer_get"], "call": "timer_delete"}, {"reason": ["k_clock->timer_get"], "call": "timer_create"}, {"reason": ["k_clock->timer_get"], "call": "clock_gettime"}, {"reason": ["k_clock->timer_get"], "call": "timer_settime"}, {"reason": ["k_clock->timer_get"], "call": "clock_settime"}, {"reason": ["k_clock->timer_get"], "call": "clock_nanosleep"}, {"reason": ["k_clock->timer_get"], "call": "clock_adjtime"}], "msgsnd": [{"reason": ["ipc_namespace->msg_ctlmax"], "call": "msgrcv"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "mq_unlink"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "msgget"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "semtimedop"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "semctl"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "shmget"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "msgctl"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "semget"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "shmat"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "setns"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "shmctl"}, {"reason": ["ipc_namespace->msg_ctlmax"], "call": "mq_open"}], "sysinfo": [{"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg", "timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg"], "call": "iopl"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["timespec->tv_nsec"], "call": "fadvise64_64"}, {"reason": ["timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["timespec->tv_nsec"], "call": "fchown"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg", "timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["timespec->tv_nsec"], "call": "utime"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg", "timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["mm_segment_t->seg", "timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_nsec"], "call": "uselib"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_nsec"], "call": "stime"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["timespec->tv_nsec"], "call": "poll"}, {"reason": ["timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_nsec"], "call": "unlink"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["mm_segment_t->seg"], "call": "setns"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg", "timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}, {"reason": ["timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["timespec->tv_nsec"], "call": "ppoll"}], "mknodat": [{"reason": ["super_block->s_flags"], "call": "syncfs"}, {"reason": ["super_block->s_flags"], "call": "fadvise64_64"}, {"reason": ["super_block->s_flags"], "call": "ustat"}, {"reason": ["super_block->s_flags"], "call": "umount"}, {"reason": ["super_block->s_flags"], "call": "quotactl"}, {"reason": ["super_block->s_flags"], "call": "swapon"}], "setsockopt": [{"reason": ["proto_ops->compat_setsockopt"], "call": "accept4"}], "munlockall": [{"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "remap_file_pages"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "shmdt"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "brk"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "get_mempolicy"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "madvise"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mremap"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "prctl"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "munlock"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mincore"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "msync"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mlockall"}], "msync": [{"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "remap_file_pages"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "shmdt"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "brk"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "get_mempolicy"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "madvise"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "mremap"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "prctl"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "munlock"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "mincore"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "mlockall"}], "ioctl": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "prlimit64": [{"reason": ["rlimit->rlim_max", "rlimit->rlim_cur"], "call": "setrlimit"}, {"reason": ["rlimit->rlim_max", "rlimit->rlim_cur"], "call": "old_getrlimit"}], "set_mempolicy": [{"reason": ["mempolicy->mode"], "call": "get_mempolicy"}, {"reason": ["mempolicy->mode"], "call": "mbind"}], "pwrite64": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags", "file->f_mode"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["fd->flags", "file->f_mode"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["fd->flags", "file->f_mode"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "msync"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "perf_event_open": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "rt_sigtimedwait"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["mm_segment_t->seg"], "call": "iopl"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "msgrcv"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "kill"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "sched_getaffinity"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "sched_setparam"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "ioprio_set"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "getppid"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg", "fd->flags", "task_struct->flags"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "capget"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "sched_setaffinity"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "signal"}, {"reason": ["task_struct->flags"], "call": "setreuid"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "umount"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "sched_rr_get_interval"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "rt_sigprocmask"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "setsid"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "sched_setattr"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "setpgid"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "getsid"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "prlimit64"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "rt_sigaction"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "getpgid"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "sigaction"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "fork"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "get_robust_list"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["mm_segment_t->seg", "fd->flags", "task_struct->flags"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "sched_getscheduler"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "ptrace"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "sched_setscheduler"}, {"reason": ["task_struct->flags"], "call": "setresuid"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "vfork"}, {"reason": ["task_struct->flags"], "call": "setuid"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "prctl"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "move_pages"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "setpriority"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "clone"}, {"reason": ["mm_segment_t->seg", "task_struct->flags"], "call": "sched_getparam"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "lstat": [{"reason": ["__old_kernel_stat->st_nlink", "__old_kernel_stat->st_ino"], "call": "stat"}, {"reason": ["__old_kernel_stat->st_nlink", "__old_kernel_stat->st_ino"], "call": "fstat"}], "flistxattr": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "rt_tgsigqueueinfo": [{"reason": ["siginfo->si_code"], "call": "rt_sigtimedwait"}, {"reason": ["siginfo->si_code"], "call": "kill"}, {"reason": ["siginfo->si_code"], "call": "timer_create"}, {"reason": ["siginfo->si_code"], "call": "rt_sigqueueinfo"}, {"reason": ["siginfo->si_code"], "call": "tgkill"}, {"reason": ["siginfo->si_code"], "call": "rt_sigreturn"}, {"reason": ["siginfo->si_code"], "call": "tkill"}], "pwritev64v2": [{"reason": ["file->f_mode"], "call": "fadvise64_64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "msync"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "splice": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags", "file->f_mode"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "file->f_flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["fd->flags", "file->f_flags", "file->f_mode"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "openat"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "uselib"}, {"reason": ["fd->flags", "file->f_flags", "file->f_mode"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "socket"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags", "file->f_flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "acct"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags", "file->f_flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "msync"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "symlinkat": [{"reason": ["filename->refcnt", "filename->name"], "call": "sysfs"}, {"reason": ["filename->refcnt", "filename->name"], "call": "mq_unlink"}, {"reason": ["filename->refcnt", "filename->name"], "call": "swapoff"}, {"reason": ["filename->refcnt", "filename->name"], "call": "openat"}, {"reason": ["filename->refcnt", "filename->name"], "call": "uselib"}, {"reason": ["filename->refcnt", "filename->name"], "call": "renameat2"}, {"reason": ["filename->refcnt", "filename->name"], "call": "quotactl"}, {"reason": ["filename->refcnt", "filename->name"], "call": "acct"}, {"reason": ["filename->refcnt", "filename->name"], "call": "open"}, {"reason": ["filename->refcnt", "filename->name"], "call": "unlink"}, {"reason": ["filename->refcnt", "filename->name"], "call": "rmdir"}, {"reason": ["filename->refcnt", "filename->name"], "call": "swapon"}, {"reason": ["filename->refcnt", "filename->name"], "call": "mq_open"}, {"reason": ["filename->refcnt", "filename->name"], "call": "unlinkat"}], "brk": [{"reason": ["mm_struct->brk", "mm_struct->start_brk", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->start_data"], "call": "swapoff"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->brk", "mm_struct->start_brk", "vm_area_struct->vm_flags", "mm_struct->start_data"], "call": "remap_file_pages"}, {"reason": ["mm_struct->brk", "mm_struct->start_brk", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->start_data"], "call": "io_getevents"}, {"reason": ["mm_struct->brk", "mm_struct->start_brk", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->start_data"], "call": "migrate_pages"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->brk", "mm_struct->start_brk", "vm_area_struct->vm_flags", "mm_struct->start_data"], "call": "shmdt"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->brk", "mm_struct->start_brk", "vm_area_struct->vm_flags", "mm_struct->start_data"], "call": "get_mempolicy"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "mm_struct->def_flags"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "madvise"}, {"reason": ["mm_struct->brk", "mm_struct->start_brk", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->start_data"], "call": "getrusage"}, {"reason": ["mm_struct->brk", "mm_struct->start_brk", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->start_data"], "call": "io_setup"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->brk", "mm_struct->start_brk", "vm_area_struct->vm_flags", "mm_struct->start_data"], "call": "mremap"}, {"reason": ["mm_struct->brk", "mm_struct->start_brk", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->start_data"], "call": "io_destroy"}, {"reason": ["mm_struct->brk", "mm_struct->start_brk", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->start_data"], "call": "mbind"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->brk", "mm_struct->start_brk", "vm_area_struct->vm_flags", "mm_struct->start_data"], "call": "prctl"}, {"reason": ["mm_struct->brk", "mm_struct->start_brk", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->start_data"], "call": "move_pages"}, {"reason": ["mm_struct->brk", "mm_struct->start_brk", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->start_data"], "call": "modify_ldt"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags"], "call": "munlock"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->brk", "mm_struct->start_brk", "vm_area_struct->vm_flags", "mm_struct->start_data"], "call": "mincore"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->brk", "mm_struct->start_brk", "vm_area_struct->vm_flags", "mm_struct->start_data"], "call": "msync"}, {"reason": ["mm_struct->brk", "mm_struct->start_brk", "mm_struct->def_flags", "mm_struct->end_data", "mm_struct->start_data"], "call": "io_cancel"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "mm_struct->def_flags"], "call": "mlockall"}], "fsetxattr": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "acct": [{"reason": ["file->f_mode"], "call": "fadvise64_64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "msync"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "poll": [{"reason": ["poll_list->len"], "call": "ppoll"}], "clock_settime": [{"reason": ["k_clock->clock_set"], "call": "clock_getres"}, {"reason": ["k_clock->clock_set"], "call": "timer_delete"}, {"reason": ["k_clock->clock_set"], "call": "timer_create"}, {"reason": ["k_clock->clock_set"], "call": "clock_gettime"}, {"reason": ["k_clock->clock_set"], "call": "timer_settime"}, {"reason": ["k_clock->clock_set"], "call": "timer_gettime"}, {"reason": ["k_clock->clock_set"], "call": "clock_nanosleep"}, {"reason": ["k_clock->clock_set"], "call": "clock_adjtime"}], "select": [{"reason": ["task_struct->personality"], "call": "keyctl"}, {"reason": ["task_struct->personality", "timespec->tv_sec", "timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality"], "call": "msgrcv"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fadvise64_64"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["task_struct->personality"], "call": "kill"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["task_struct->personality"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality"], "call": "sched_setparam"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["task_struct->personality"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["task_struct->personality"], "call": "getppid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchown"}, {"reason": ["task_struct->personality", "timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality"], "call": "capget"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "utime"}, {"reason": ["task_struct->personality"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality"], "call": "signal"}, {"reason": ["task_struct->personality", "timespec->tv_sec", "timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["task_struct->personality"], "call": "umount"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["task_struct->personality", "timespec->tv_sec", "timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "uselib"}, {"reason": ["task_struct->personality"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality"], "call": "setsid"}, {"reason": ["task_struct->personality"], "call": "sigaltstack"}, {"reason": ["task_struct->personality"], "call": "sched_setattr"}, {"reason": ["task_struct->personality"], "call": "migrate_pages"}, {"reason": ["task_struct->personality"], "call": "getitimer"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["task_struct->personality"], "call": "setpgid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["task_struct->personality"], "call": "getsid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["task_struct->personality"], "call": "prlimit64"}, {"reason": ["task_struct->personality"], "call": "perf_event_open"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "stime"}, {"reason": ["task_struct->personality"], "call": "rt_sigaction"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["task_struct->personality"], "call": "getpgid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "poll"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlink"}, {"reason": ["task_struct->personality"], "call": "getpriority"}, {"reason": ["task_struct->personality"], "call": "sigaction"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["task_struct->personality"], "call": "setns"}, {"reason": ["task_struct->personality"], "call": "fork"}, {"reason": ["task_struct->personality"], "call": "get_robust_list"}, {"reason": ["task_struct->personality", "timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality"], "call": "ptrace"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["task_struct->personality"], "call": "sched_getattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["task_struct->personality"], "call": "getrusage"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["task_struct->personality"], "call": "sched_setscheduler"}, {"reason": ["task_struct->personality"], "call": "setitimer"}, {"reason": ["task_struct->personality"], "call": "ioprio_get"}, {"reason": ["task_struct->personality"], "call": "vfork"}, {"reason": ["task_struct->personality"], "call": "prctl"}, {"reason": ["task_struct->personality"], "call": "move_pages"}, {"reason": ["task_struct->personality"], "call": "setpriority"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["task_struct->personality"], "call": "clone"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["task_struct->personality"], "call": "sched_getparam"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ppoll"}], "getsockopt": [{"reason": ["proto_ops->compat_getsockopt"], "call": "accept4"}], "sigaction": [{"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg"], "call": "iopl"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "setns"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}], "nanosleep": [{"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fadvise64_64"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchown"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "utime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "uselib"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "stime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "poll"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlink"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ppoll"}], "quotactl": [{"reason": ["super_block->s_quota_types", "super_block->s_flags"], "call": "syncfs"}, {"reason": ["filename->name"], "call": "sysfs"}, {"reason": ["super_block->s_quota_types", "super_block->s_flags"], "call": "fadvise64_64"}, {"reason": ["filename->name"], "call": "mq_unlink"}, {"reason": ["filename->name"], "call": "swapoff"}, {"reason": ["super_block->s_quota_types", "super_block->s_flags"], "call": "ustat"}, {"reason": ["super_block->s_quota_types", "super_block->s_flags"], "call": "umount"}, {"reason": ["filename->name"], "call": "openat"}, {"reason": ["filename->name"], "call": "uselib"}, {"reason": ["filename->name"], "call": "renameat2"}, {"reason": ["filename->name"], "call": "symlinkat"}, {"reason": ["filename->name"], "call": "acct"}, {"reason": ["filename->name"], "call": "open"}, {"reason": ["filename->name"], "call": "unlink"}, {"reason": ["filename->name"], "call": "rmdir"}, {"reason": ["filename->name", "super_block->s_quota_types", "super_block->s_flags"], "call": "swapon"}, {"reason": ["filename->name"], "call": "mq_open"}, {"reason": ["filename->name"], "call": "unlinkat"}], "mq_getsetattr": [{"reason": ["mq_attr->mq_flags"], "call": "mq_timedreceive"}, {"reason": ["mq_attr->mq_flags"], "call": "mq_timedsend"}, {"reason": ["mq_attr->mq_flags"], "call": "mq_notify"}, {"reason": ["mq_attr->mq_flags"], "call": "mq_open"}], "fallocate": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "getdents64": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["mm_segment_t->seg"], "call": "iopl"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg", "fd->flags"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["mm_segment_t->seg", "fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["mm_segment_t->seg"], "call": "setns"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["mm_segment_t->seg", "fd->flags"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "get_mempolicy": [{"reason": ["task_struct->il_prev"], "call": "keyctl"}, {"reason": ["task_struct->il_prev"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->il_prev"], "call": "msgrcv"}, {"reason": ["task_struct->il_prev"], "call": "kill"}, {"reason": ["task_struct->il_prev"], "call": "sched_getaffinity"}, {"reason": ["task_struct->il_prev"], "call": "sched_setparam"}, {"reason": ["task_struct->il_prev"], "call": "ioprio_set"}, {"reason": ["task_struct->il_prev"], "call": "getppid"}, {"reason": ["task_struct->il_prev"], "call": "mq_timedreceive"}, {"reason": ["task_struct->il_prev"], "call": "capget"}, {"reason": ["task_struct->il_prev"], "call": "sched_setaffinity"}, {"reason": ["task_struct->il_prev"], "call": "signal"}, {"reason": ["task_struct->il_prev"], "call": "semtimedop"}, {"reason": ["task_struct->il_prev"], "call": "umount"}, {"reason": ["task_struct->il_prev"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->il_prev"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->il_prev"], "call": "setsid"}, {"reason": ["task_struct->il_prev"], "call": "sigaltstack"}, {"reason": ["task_struct->il_prev"], "call": "sched_setattr"}, {"reason": ["task_struct->il_prev"], "call": "migrate_pages"}, {"reason": ["task_struct->il_prev"], "call": "getitimer"}, {"reason": ["task_struct->il_prev"], "call": "setpgid"}, {"reason": ["task_struct->il_prev"], "call": "getsid"}, {"reason": ["task_struct->il_prev"], "call": "prlimit64"}, {"reason": ["task_struct->il_prev", "mempolicy->mode"], "call": "set_mempolicy"}, {"reason": ["task_struct->il_prev"], "call": "perf_event_open"}, {"reason": ["task_struct->il_prev"], "call": "rt_sigaction"}, {"reason": ["task_struct->il_prev"], "call": "getpgid"}, {"reason": ["task_struct->il_prev"], "call": "getpriority"}, {"reason": ["task_struct->il_prev"], "call": "sigaction"}, {"reason": ["task_struct->il_prev"], "call": "setns"}, {"reason": ["task_struct->il_prev"], "call": "fork"}, {"reason": ["task_struct->il_prev"], "call": "get_robust_list"}, {"reason": ["task_struct->il_prev"], "call": "mq_timedsend"}, {"reason": ["task_struct->il_prev"], "call": "sched_getscheduler"}, {"reason": ["task_struct->il_prev"], "call": "ptrace"}, {"reason": ["task_struct->il_prev"], "call": "sched_getattr"}, {"reason": ["task_struct->il_prev"], "call": "getrusage"}, {"reason": ["task_struct->il_prev"], "call": "sched_setscheduler"}, {"reason": ["task_struct->il_prev"], "call": "setitimer"}, {"reason": ["task_struct->il_prev"], "call": "ioprio_get"}, {"reason": ["task_struct->il_prev"], "call": "vfork"}, {"reason": ["mempolicy->mode"], "call": "mbind"}, {"reason": ["task_struct->il_prev"], "call": "prctl"}, {"reason": ["task_struct->il_prev"], "call": "move_pages"}, {"reason": ["task_struct->il_prev"], "call": "setpriority"}, {"reason": ["task_struct->il_prev"], "call": "clone"}, {"reason": ["task_struct->il_prev"], "call": "sched_getparam"}], "io_submit": [{"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg"], "call": "iopl"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "setns"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}], "futimesat": [{"reason": ["timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["timespec->tv_nsec"], "call": "fadvise64_64"}, {"reason": ["timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["timespec->tv_nsec"], "call": "fchown"}, {"reason": ["timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["timespec->tv_nsec"], "call": "utime"}, {"reason": ["timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["timeval->tv_usec", "timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["timeval->tv_usec"], "call": "adjtimex"}, {"reason": ["timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_nsec"], "call": "uselib"}, {"reason": ["timeval->tv_usec"], "call": "waitid"}, {"reason": ["timeval->tv_usec"], "call": "getitimer"}, {"reason": ["timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_nsec"], "call": "stime"}, {"reason": ["timespec->tv_nsec"], "call": "poll"}, {"reason": ["timeval->tv_usec", "timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_nsec"], "call": "unlink"}, {"reason": ["timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timeval->tv_usec"], "call": "wait4"}, {"reason": ["timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["timeval->tv_usec"], "call": "getrusage"}, {"reason": ["timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["timeval->tv_usec"], "call": "setitimer"}, {"reason": ["timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["timeval->tv_usec"], "call": "clock_adjtime"}, {"reason": ["timeval->tv_usec"], "call": "alarm"}, {"reason": ["timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["timeval->tv_usec", "timespec->tv_nsec"], "call": "ppoll"}], "mq_timedsend": [{"reason": ["file->f_mode"], "call": "fadvise64_64"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "dup3"}, {"reason": ["mq_attr->mq_curmsgs", "mq_attr->mq_maxmsg", "mq_attr->mq_msgsize"], "call": "mq_timedreceive"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "flock"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "openat"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "uselib"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "accept4"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "shmat"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "socket"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "acct"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "open"}, {"reason": ["mq_attr->mq_curmsgs", "mq_attr->mq_maxmsg", "file->f_flags", "mq_attr->mq_msgsize"], "call": "mq_getsetattr"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "dup"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "setns"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "swapon"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["mq_attr->mq_curmsgs", "mq_attr->mq_maxmsg", "mq_attr->mq_msgsize"], "call": "mq_notify"}, {"reason": ["mq_attr->mq_maxmsg", "mq_attr->mq_msgsize", "mq_attr->mq_curmsgs", "file->f_flags", "file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "msync"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "open_by_handle_at"}], "sched_getscheduler": [{"reason": ["task_struct->sched_reset_on_fork"], "call": "keyctl"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "msgrcv"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "kill"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "sched_getaffinity"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "sched_setparam"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "ioprio_set"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "getppid"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "mq_timedreceive"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "capget"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "sched_setaffinity"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "signal"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "semtimedop"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "umount"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "setsid"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "sigaltstack"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "sched_setattr"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "migrate_pages"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "getitimer"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "setpgid"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "getsid"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "prlimit64"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "perf_event_open"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "rt_sigaction"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "getpgid"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "getpriority"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "sigaction"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "setns"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "fork"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "get_robust_list"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "mq_timedsend"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "ptrace"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "sched_getattr"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "getrusage"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "sched_setscheduler"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "setitimer"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "ioprio_get"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "vfork"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "prctl"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "move_pages"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "setpriority"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "clone"}, {"reason": ["task_struct->sched_reset_on_fork"], "call": "sched_getparam"}], "fgetxattr": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "ptrace": [{"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "keyctl"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "msgrcv"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "kill"}, {"reason": ["task_struct->state"], "call": "pause"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "sched_getaffinity"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "sched_setparam"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "ioprio_set"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "getppid"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "mq_timedreceive"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "capget"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "sched_setaffinity"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "signal"}, {"reason": ["task_struct->flags"], "call": "setreuid"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "semtimedop"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "umount"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "setsid"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "sigaltstack"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "sched_setattr"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "migrate_pages"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "getitimer"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "setpgid"}, {"reason": ["task_struct->state"], "call": "rt_sigsuspend"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "getsid"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "prlimit64"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "perf_event_open"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "rt_sigaction"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "getpgid"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "getpriority"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "sigaction"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "setns"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "fork"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "get_robust_list"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "mq_timedsend"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "sched_getscheduler"}, {"reason": ["task_struct->state"], "call": "epoll_wait"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "sched_getattr"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "getrusage"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "sched_setscheduler"}, {"reason": ["task_struct->flags"], "call": "setresuid"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "setitimer"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "ioprio_get"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "vfork"}, {"reason": ["task_struct->flags"], "call": "setuid"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "prctl"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "move_pages"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "setpriority"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "clone"}, {"reason": ["task_struct->state"], "call": "sigsuspend"}, {"reason": ["task_struct->exit_state", "task_struct->ptrace", "task_struct->flags", "task_struct->state"], "call": "sched_getparam"}], "shmctl": [{"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg"], "call": "iopl"}, {"reason": ["kern_ipc_perm->mode", "mm_segment_t->seg", "kern_ipc_perm->deleted"], "call": "msgrcv"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["kern_ipc_perm->mode", "mm_segment_t->seg", "kern_ipc_perm->deleted"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["kern_ipc_perm->mode", "kern_ipc_perm->deleted"], "call": "semctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["kern_ipc_perm->mode", "kern_ipc_perm->deleted"], "call": "msgctl"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["kern_ipc_perm->mode", "kern_ipc_perm->deleted"], "call": "shmat"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "setns"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["kern_ipc_perm->mode", "kern_ipc_perm->deleted"], "call": "msgsnd"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}], "fcntl64": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags", "file->f_mode"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["fd->flags", "file->f_mode"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["fd->flags", "file->f_mode"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["fd->flags", "flock->l_len", "flock->l_start"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "msync"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "old_getrlimit": [{"reason": ["rlimit->rlim_max", "rlimit->rlim_cur"], "call": "setrlimit"}, {"reason": ["rlimit->rlim_max", "rlimit->rlim_cur"], "call": "prlimit64"}], "swapon": [{"reason": ["inode->i_flags"], "call": "fadvise64_64"}, {"reason": ["inode->i_flags"], "call": "mq_unlink"}, {"reason": ["inode->i_flags", "swap_info_struct->flags", "swap_info_struct->type"], "call": "swapoff"}, {"reason": ["inode->i_flags"], "call": "fchmod"}, {"reason": ["inode->i_flags"], "call": "memfd_create"}, {"reason": ["inode->i_flags"], "call": "readlinkat"}, {"reason": ["inode->i_flags"], "call": "fchown"}, {"reason": ["inode->i_flags"], "call": "mq_timedreceive"}, {"reason": ["inode->i_flags"], "call": "uselib"}, {"reason": ["inode->i_flags"], "call": "fchmodat"}, {"reason": ["inode->i_flags"], "call": "inotify_add_watch"}, {"reason": ["inode->i_flags"], "call": "ftruncate"}, {"reason": ["inode->i_flags"], "call": "ioctl"}, {"reason": ["inode->i_flags"], "call": "linkat"}, {"reason": ["inode->i_flags"], "call": "unlink"}, {"reason": ["inode->i_flags"], "call": "mq_getsetattr"}, {"reason": ["inode->i_flags"], "call": "faccessat"}, {"reason": ["inode->i_flags"], "call": "mq_timedsend"}, {"reason": ["inode->i_flags"], "call": "fchownat"}, {"reason": ["inode->i_flags"], "call": "mq_notify"}, {"reason": ["inode->i_flags"], "call": "sendfile"}, {"reason": ["inode->i_flags"], "call": "unlinkat"}, {"reason": ["inode->i_flags"], "call": "sendfile64"}], "pkey_mprotect": [{"reason": ["task_struct->personality"], "call": "keyctl"}, {"reason": ["task_struct->personality"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality"], "call": "msgrcv"}, {"reason": ["task_struct->personality"], "call": "kill"}, {"reason": ["task_struct->personality"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality"], "call": "sched_setparam"}, {"reason": ["task_struct->personality"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "remap_file_pages"}, {"reason": ["task_struct->personality"], "call": "getppid"}, {"reason": ["task_struct->personality"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality"], "call": "capget"}, {"reason": ["task_struct->personality"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality"], "call": "signal"}, {"reason": ["task_struct->personality"], "call": "semtimedop"}, {"reason": ["task_struct->personality"], "call": "umount"}, {"reason": ["task_struct->personality"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->personality"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality"], "call": "setsid"}, {"reason": ["task_struct->personality"], "call": "sigaltstack"}, {"reason": ["task_struct->personality"], "call": "sched_setattr"}, {"reason": ["task_struct->personality"], "call": "migrate_pages"}, {"reason": ["task_struct->personality"], "call": "getitimer"}, {"reason": ["task_struct->personality"], "call": "setpgid"}, {"reason": ["task_struct->personality"], "call": "getsid"}, {"reason": ["task_struct->personality"], "call": "prlimit64"}, {"reason": ["task_struct->personality"], "call": "perf_event_open"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "shmdt"}, {"reason": ["task_struct->personality"], "call": "rt_sigaction"}, {"reason": ["task_struct->personality"], "call": "getpgid"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "brk"}, {"reason": ["task_struct->personality"], "call": "getpriority"}, {"reason": ["task_struct->personality"], "call": "sigaction"}, {"reason": ["task_struct->personality"], "call": "setns"}, {"reason": ["task_struct->personality"], "call": "fork"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "get_mempolicy"}, {"reason": ["task_struct->personality"], "call": "get_robust_list"}, {"reason": ["task_struct->personality"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality"], "call": "ptrace"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "madvise"}, {"reason": ["task_struct->personality"], "call": "sched_getattr"}, {"reason": ["task_struct->personality"], "call": "getrusage"}, {"reason": ["task_struct->personality"], "call": "sched_setscheduler"}, {"reason": ["task_struct->personality"], "call": "setitimer"}, {"reason": ["task_struct->personality"], "call": "ioprio_get"}, {"reason": ["task_struct->personality"], "call": "vfork"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mremap"}, {"reason": ["task_struct->personality", "vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "prctl"}, {"reason": ["task_struct->personality"], "call": "move_pages"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "munlock"}, {"reason": ["task_struct->personality"], "call": "setpriority"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mincore"}, {"reason": ["task_struct->personality"], "call": "clone"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "msync"}, {"reason": ["task_struct->personality"], "call": "sched_getparam"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mlockall"}], "madvise": [{"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "remap_file_pages"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "shmdt"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "brk"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "get_mempolicy"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mremap"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "prctl"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "munlock"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mincore"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "msync"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mlockall"}], "statfs": [{"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "ustat"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "fstatfs"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "fstatfs64"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "statfs64"}], "mount": [{"reason": ["task_struct->personality"], "call": "keyctl"}, {"reason": ["task_struct->personality"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality"], "call": "msgrcv"}, {"reason": ["task_struct->personality"], "call": "kill"}, {"reason": ["task_struct->personality"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality"], "call": "sched_setparam"}, {"reason": ["task_struct->personality"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["task_struct->personality"], "call": "getppid"}, {"reason": ["task_struct->personality"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality"], "call": "capget"}, {"reason": ["task_struct->personality"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality"], "call": "signal"}, {"reason": ["task_struct->personality"], "call": "semtimedop"}, {"reason": ["task_struct->personality"], "call": "umount"}, {"reason": ["task_struct->personality"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->personality"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality"], "call": "setsid"}, {"reason": ["task_struct->personality"], "call": "sigaltstack"}, {"reason": ["task_struct->personality"], "call": "sched_setattr"}, {"reason": ["task_struct->personality"], "call": "migrate_pages"}, {"reason": ["task_struct->personality"], "call": "getitimer"}, {"reason": ["task_struct->personality"], "call": "setpgid"}, {"reason": ["task_struct->personality"], "call": "getsid"}, {"reason": ["task_struct->personality"], "call": "prlimit64"}, {"reason": ["task_struct->personality"], "call": "perf_event_open"}, {"reason": ["task_struct->personality"], "call": "rt_sigaction"}, {"reason": ["task_struct->personality"], "call": "getpgid"}, {"reason": ["task_struct->personality"], "call": "getpriority"}, {"reason": ["task_struct->personality"], "call": "sigaction"}, {"reason": ["task_struct->personality"], "call": "setns"}, {"reason": ["task_struct->personality"], "call": "fork"}, {"reason": ["task_struct->personality"], "call": "get_robust_list"}, {"reason": ["task_struct->personality"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality"], "call": "ptrace"}, {"reason": ["task_struct->personality"], "call": "sched_getattr"}, {"reason": ["task_struct->personality"], "call": "getrusage"}, {"reason": ["task_struct->personality"], "call": "sched_setscheduler"}, {"reason": ["task_struct->personality"], "call": "setitimer"}, {"reason": ["task_struct->personality"], "call": "ioprio_get"}, {"reason": ["task_struct->personality"], "call": "vfork"}, {"reason": ["task_struct->personality"], "call": "prctl"}, {"reason": ["task_struct->personality"], "call": "move_pages"}, {"reason": ["task_struct->personality"], "call": "setpriority"}, {"reason": ["task_struct->personality"], "call": "clone"}, {"reason": ["task_struct->personality"], "call": "sched_getparam"}], "sched_getattr": [{"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg"], "call": "iopl"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "kill"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "mq_timedreceive"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "capget"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "signal"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "umount"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "setsid"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg", "sched_attr->size"], "call": "sched_setattr"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "getsid"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "setns"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "fork"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "mq_timedsend"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "vfork"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "prctl"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "clone"}, {"reason": ["task_struct->policy", "task_struct->sched_reset_on_fork", "mm_segment_t->seg"], "call": "sched_getparam"}], "getrusage": [{"reason": ["signal_struct->maxrss"], "call": "timer_create"}, {"reason": ["signal_struct->maxrss"], "call": "exit_group"}], "timerfd_settime": [{"reason": ["timerfd_ctx->tintv", "timerfd_ctx->expired"], "call": "timerfd_gettime"}, {"reason": ["timerfd_ctx->tintv", "timerfd_ctx->expired"], "call": "timerfd_create"}], "utimensat": [{"reason": ["timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["timespec->tv_nsec"], "call": "fadvise64_64"}, {"reason": ["timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["timespec->tv_nsec"], "call": "fchown"}, {"reason": ["timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["timespec->tv_nsec"], "call": "utime"}, {"reason": ["timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_nsec"], "call": "uselib"}, {"reason": ["timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_nsec"], "call": "stime"}, {"reason": ["timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["timespec->tv_nsec"], "call": "poll"}, {"reason": ["timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_nsec"], "call": "unlink"}, {"reason": ["timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["timespec->tv_nsec"], "call": "ppoll"}], "ftruncate": [{"reason": ["inode->i_flags", "file->f_mode"], "call": "fadvise64_64"}, {"reason": ["inode->i_flags"], "call": "mq_unlink"}, {"reason": ["inode->i_flags", "file->f_flags", "file->f_mode"], "call": "swapoff"}, {"reason": ["inode->i_flags"], "call": "fchmod"}, {"reason": ["inode->i_flags", "file->f_flags", "file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "dup3"}, {"reason": ["inode->i_flags"], "call": "readlinkat"}, {"reason": ["inode->i_flags"], "call": "fchown"}, {"reason": ["inode->i_flags"], "call": "mq_timedreceive"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "flock"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "openat"}, {"reason": ["inode->i_flags", "file->f_flags", "file->f_mode"], "call": "uselib"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "accept4"}, {"reason": ["inode->i_flags"], "call": "fchmodat"}, {"reason": ["inode->i_flags"], "call": "inotify_add_watch"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "shmat"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "socket"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "pipe2"}, {"reason": ["inode->i_flags"], "call": "ioctl"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["inode->i_flags"], "call": "linkat"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "acct"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "open"}, {"reason": ["inode->i_flags"], "call": "unlink"}, {"reason": ["inode->i_flags", "file->f_flags"], "call": "mq_getsetattr"}, {"reason": ["inode->i_flags"], "call": "faccessat"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "dup"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "setns"}, {"reason": ["inode->i_flags"], "call": "mq_timedsend"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "shmctl"}, {"reason": ["inode->i_flags", "file->f_flags", "file->f_mode"], "call": "swapon"}, {"reason": ["inode->i_flags"], "call": "fchownat"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["inode->i_flags"], "call": "mq_notify"}, {"reason": ["inode->i_flags"], "call": "sendfile"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "msync"}, {"reason": ["inode->i_flags"], "call": "unlinkat"}, {"reason": ["file->f_flags", "file->f_mode"], "call": "open_by_handle_at"}, {"reason": ["inode->i_flags"], "call": "sendfile64"}], "io_setup": [{"reason": ["kioctx->max_reqs", "kioctx->mmap_base", "kioctx->mmap_size", "kioctx->req_batch"], "call": "io_getevents"}, {"reason": ["kioctx->max_reqs", "kioctx->mmap_base", "kioctx->mmap_size", "kioctx->req_batch"], "call": "io_submit"}, {"reason": ["kioctx->max_reqs", "kioctx->mmap_base", "kioctx->mmap_size", "kioctx->req_batch"], "call": "io_destroy"}, {"reason": ["kioctx->max_reqs", "kioctx->mmap_base", "kioctx->mmap_size", "kioctx->req_batch"], "call": "io_cancel"}], "mprotect": [{"reason": ["task_struct->personality"], "call": "keyctl"}, {"reason": ["task_struct->personality"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality"], "call": "msgrcv"}, {"reason": ["task_struct->personality"], "call": "kill"}, {"reason": ["task_struct->personality"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality"], "call": "sched_setparam"}, {"reason": ["task_struct->personality"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "remap_file_pages"}, {"reason": ["task_struct->personality"], "call": "getppid"}, {"reason": ["task_struct->personality"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality"], "call": "capget"}, {"reason": ["task_struct->personality"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality"], "call": "signal"}, {"reason": ["task_struct->personality"], "call": "semtimedop"}, {"reason": ["task_struct->personality"], "call": "umount"}, {"reason": ["task_struct->personality"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->personality"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality"], "call": "setsid"}, {"reason": ["task_struct->personality"], "call": "sigaltstack"}, {"reason": ["task_struct->personality"], "call": "sched_setattr"}, {"reason": ["task_struct->personality"], "call": "migrate_pages"}, {"reason": ["task_struct->personality"], "call": "getitimer"}, {"reason": ["task_struct->personality"], "call": "setpgid"}, {"reason": ["task_struct->personality"], "call": "getsid"}, {"reason": ["task_struct->personality"], "call": "prlimit64"}, {"reason": ["task_struct->personality"], "call": "perf_event_open"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "shmdt"}, {"reason": ["task_struct->personality"], "call": "rt_sigaction"}, {"reason": ["task_struct->personality"], "call": "getpgid"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "brk"}, {"reason": ["task_struct->personality"], "call": "getpriority"}, {"reason": ["task_struct->personality"], "call": "sigaction"}, {"reason": ["task_struct->personality"], "call": "setns"}, {"reason": ["task_struct->personality"], "call": "fork"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "get_mempolicy"}, {"reason": ["task_struct->personality"], "call": "get_robust_list"}, {"reason": ["task_struct->personality"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality"], "call": "ptrace"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "madvise"}, {"reason": ["task_struct->personality"], "call": "sched_getattr"}, {"reason": ["task_struct->personality"], "call": "getrusage"}, {"reason": ["task_struct->personality"], "call": "sched_setscheduler"}, {"reason": ["task_struct->personality"], "call": "setitimer"}, {"reason": ["task_struct->personality"], "call": "ioprio_get"}, {"reason": ["task_struct->personality"], "call": "vfork"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mremap"}, {"reason": ["task_struct->personality", "vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "prctl"}, {"reason": ["task_struct->personality"], "call": "move_pages"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "munlock"}, {"reason": ["task_struct->personality"], "call": "setpriority"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mincore"}, {"reason": ["task_struct->personality"], "call": "clone"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "msync"}, {"reason": ["task_struct->personality"], "call": "sched_getparam"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_end"], "call": "mlockall"}], "mremap": [{"reason": ["task_struct->personality"], "call": "keyctl"}, {"reason": ["task_struct->personality"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality"], "call": "msgrcv"}, {"reason": ["task_struct->personality"], "call": "kill"}, {"reason": ["mm_struct->map_count"], "call": "swapoff"}, {"reason": ["task_struct->personality"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality"], "call": "sched_setparam"}, {"reason": ["task_struct->personality"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "mm_struct->map_count", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "remap_file_pages"}, {"reason": ["mm_struct->map_count"], "call": "io_getevents"}, {"reason": ["task_struct->personality"], "call": "getppid"}, {"reason": ["task_struct->personality"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality"], "call": "capget"}, {"reason": ["task_struct->personality"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality"], "call": "signal"}, {"reason": ["task_struct->personality"], "call": "semtimedop"}, {"reason": ["task_struct->personality"], "call": "umount"}, {"reason": ["task_struct->personality"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->personality"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality"], "call": "setsid"}, {"reason": ["task_struct->personality"], "call": "sigaltstack"}, {"reason": ["task_struct->personality"], "call": "sched_setattr"}, {"reason": ["task_struct->personality", "mm_struct->map_count"], "call": "migrate_pages"}, {"reason": ["task_struct->personality"], "call": "getitimer"}, {"reason": ["task_struct->personality"], "call": "setpgid"}, {"reason": ["task_struct->personality"], "call": "getsid"}, {"reason": ["task_struct->personality"], "call": "prlimit64"}, {"reason": ["task_struct->personality"], "call": "perf_event_open"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "mm_struct->map_count", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "shmdt"}, {"reason": ["task_struct->personality"], "call": "rt_sigaction"}, {"reason": ["task_struct->personality"], "call": "getpgid"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "mm_struct->map_count", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "brk"}, {"reason": ["task_struct->personality"], "call": "getpriority"}, {"reason": ["task_struct->personality"], "call": "sigaction"}, {"reason": ["task_struct->personality"], "call": "setns"}, {"reason": ["task_struct->personality"], "call": "fork"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "mm_struct->map_count", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "get_mempolicy"}, {"reason": ["task_struct->personality"], "call": "get_robust_list"}, {"reason": ["task_struct->personality"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality"], "call": "ptrace"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "madvise"}, {"reason": ["task_struct->personality"], "call": "sched_getattr"}, {"reason": ["task_struct->personality", "mm_struct->map_count"], "call": "getrusage"}, {"reason": ["task_struct->personality"], "call": "sched_setscheduler"}, {"reason": ["task_struct->personality"], "call": "setitimer"}, {"reason": ["task_struct->personality"], "call": "ioprio_get"}, {"reason": ["task_struct->personality"], "call": "vfork"}, {"reason": ["mm_struct->map_count"], "call": "io_setup"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "mprotect"}, {"reason": ["mm_struct->map_count"], "call": "io_destroy"}, {"reason": ["mm_struct->map_count"], "call": "mbind"}, {"reason": ["vm_area_struct->vm_start", "task_struct->personality", "vm_area_struct->vm_flags", "mm_struct->map_count", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "prctl"}, {"reason": ["task_struct->personality", "mm_struct->map_count"], "call": "move_pages"}, {"reason": ["mm_struct->map_count"], "call": "modify_ldt"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "munlock"}, {"reason": ["task_struct->personality"], "call": "setpriority"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "mm_struct->map_count", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "mincore"}, {"reason": ["task_struct->personality"], "call": "clone"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "mm_struct->map_count", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "msync"}, {"reason": ["task_struct->personality"], "call": "sched_getparam"}, {"reason": ["mm_struct->map_count"], "call": "io_cancel"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_flags", "vm_area_struct->vm_pgoff", "vm_area_struct->vm_end"], "call": "mlockall"}], "io_destroy": [{"reason": ["kioctx->max_reqs", "kioctx_table->nr", "kioctx->user_id", "kioctx->mmap_base", "kioctx->mmap_size"], "call": "io_getevents"}, {"reason": ["kioctx->max_reqs", "kioctx->user_id", "kioctx->mmap_base", "kioctx->mmap_size"], "call": "io_submit"}, {"reason": ["kioctx->max_reqs", "kioctx_table->nr", "kioctx->user_id", "kioctx->mmap_base", "kioctx->mmap_size"], "call": "io_setup"}, {"reason": ["kioctx->max_reqs", "kioctx_table->nr", "kioctx->user_id", "kioctx->mmap_base", "kioctx->mmap_size"], "call": "io_cancel"}], "pread64": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags", "file->f_mode"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags", "file->f_mode"], "call": "epoll_ctl"}, {"reason": ["fd->flags", "file->f_mode"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["fd->flags", "file->f_mode"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags", "file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "msync"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "preadv64v2": [{"reason": ["file->f_mode"], "call": "fadvise64_64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "msync"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "prctl": [{"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "keyctl"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "msgrcv"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "kill"}, {"reason": ["mm_struct->flags"], "call": "swapoff"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sched_setparam"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["mm_struct->flags"], "call": "remap_file_pages"}, {"reason": ["mm_struct->flags"], "call": "io_getevents"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "getppid"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "capget"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "signal"}, {"reason": ["task_struct->flags"], "call": "setreuid"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "semtimedop"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "umount"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "setsid"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sigaltstack"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sched_setattr"}, {"reason": ["mm_struct->flags", "task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "migrate_pages"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "getitimer"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "setpgid"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "getsid"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "prlimit64"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "perf_event_open"}, {"reason": ["mm_struct->flags"], "call": "shmdt"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "rt_sigaction"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "getpgid"}, {"reason": ["mm_struct->flags"], "call": "brk"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "getpriority"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sigaction"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "setns"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "fork"}, {"reason": ["mm_struct->flags"], "call": "get_mempolicy"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "get_robust_list"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "ptrace"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sched_getattr"}, {"reason": ["mm_struct->flags", "task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "getrusage"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sched_setscheduler"}, {"reason": ["task_struct->flags"], "call": "setresuid"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "setitimer"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "ioprio_get"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "vfork"}, {"reason": ["task_struct->flags"], "call": "setuid"}, {"reason": ["mm_struct->flags"], "call": "io_setup"}, {"reason": ["mm_struct->flags"], "call": "mremap"}, {"reason": ["mm_struct->flags"], "call": "io_destroy"}, {"reason": ["mm_struct->flags"], "call": "mbind"}, {"reason": ["mm_struct->flags", "task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "move_pages"}, {"reason": ["mm_struct->flags"], "call": "modify_ldt"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "setpriority"}, {"reason": ["mm_struct->flags"], "call": "mincore"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "clone"}, {"reason": ["mm_struct->flags"], "call": "msync"}, {"reason": ["task_struct->personality", "task_struct->timer_slack_ns", "task_struct->flags"], "call": "sched_getparam"}, {"reason": ["mm_struct->flags"], "call": "io_cancel"}], "copy_file_range": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "write"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "fstatfs": [{"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "ustat"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "statfs"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "fstatfs64"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "statfs64"}], "modify_ldt": [{"reason": ["user_desc->limit_in_pages", "user_desc->read_exec_only", "user_desc->limit", "user_desc->useable", "user_desc->contents", "user_desc->seg_32bit", "user_desc->seg_not_present", "user_desc->entry_number", "user_desc->base_addr"], "call": "get_thread_area"}, {"reason": ["user_desc->limit_in_pages", "user_desc->read_exec_only", "user_desc->limit", "user_desc->useable", "user_desc->contents", "user_desc->seg_32bit", "user_desc->seg_not_present", "user_desc->entry_number", "user_desc->base_addr"], "call": "set_thread_area"}], "sched_getparam": [{"reason": ["task_struct->policy"], "call": "keyctl"}, {"reason": ["task_struct->policy"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->policy"], "call": "msgrcv"}, {"reason": ["task_struct->policy"], "call": "kill"}, {"reason": ["task_struct->policy"], "call": "sched_getaffinity"}, {"reason": ["task_struct->policy"], "call": "sched_setparam"}, {"reason": ["task_struct->policy"], "call": "ioprio_set"}, {"reason": ["task_struct->policy"], "call": "getppid"}, {"reason": ["task_struct->policy"], "call": "mq_timedreceive"}, {"reason": ["task_struct->policy"], "call": "capget"}, {"reason": ["task_struct->policy"], "call": "sched_setaffinity"}, {"reason": ["task_struct->policy"], "call": "signal"}, {"reason": ["task_struct->policy"], "call": "semtimedop"}, {"reason": ["task_struct->policy"], "call": "umount"}, {"reason": ["task_struct->policy"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->policy"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->policy"], "call": "setsid"}, {"reason": ["task_struct->policy"], "call": "sigaltstack"}, {"reason": ["task_struct->policy"], "call": "sched_setattr"}, {"reason": ["task_struct->policy"], "call": "migrate_pages"}, {"reason": ["task_struct->policy"], "call": "getitimer"}, {"reason": ["task_struct->policy"], "call": "setpgid"}, {"reason": ["task_struct->policy"], "call": "getsid"}, {"reason": ["task_struct->policy"], "call": "prlimit64"}, {"reason": ["task_struct->policy"], "call": "perf_event_open"}, {"reason": ["task_struct->policy"], "call": "rt_sigaction"}, {"reason": ["task_struct->policy"], "call": "getpgid"}, {"reason": ["task_struct->policy"], "call": "getpriority"}, {"reason": ["task_struct->policy"], "call": "sigaction"}, {"reason": ["task_struct->policy"], "call": "setns"}, {"reason": ["task_struct->policy"], "call": "fork"}, {"reason": ["task_struct->policy"], "call": "get_robust_list"}, {"reason": ["task_struct->policy"], "call": "mq_timedsend"}, {"reason": ["task_struct->policy"], "call": "sched_getscheduler"}, {"reason": ["task_struct->policy"], "call": "ptrace"}, {"reason": ["task_struct->policy"], "call": "sched_getattr"}, {"reason": ["task_struct->policy"], "call": "getrusage"}, {"reason": ["task_struct->policy"], "call": "sched_setscheduler"}, {"reason": ["task_struct->policy"], "call": "setitimer"}, {"reason": ["task_struct->policy"], "call": "ioprio_get"}, {"reason": ["task_struct->policy"], "call": "vfork"}, {"reason": ["task_struct->policy"], "call": "prctl"}, {"reason": ["task_struct->policy"], "call": "move_pages"}, {"reason": ["task_struct->policy"], "call": "setpriority"}, {"reason": ["task_struct->policy"], "call": "clone"}], "fstatfs64": [{"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "ustat"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "fstatfs"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "statfs"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "statfs64"}], "rt_sigreturn": [{"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "iopl"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "msgrcv"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "kill"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sched_setparam"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "ioprio_set"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "getppid"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "capget"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "signal"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "umount"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sched_rr_get_interval"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "setsid"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "setpgid"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "getsid"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "perf_event_open"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "getpgid"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sigaction"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "setns"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "fork"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "ptrace"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "vfork"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "prctl"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "move_pages"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "clone"}, {"reason": ["mm_segment_t->seg", "thread_struct->uaccess_err"], "call": "sched_getparam"}], "write": [{"reason": ["fd->flags"], "call": "syncfs"}, {"reason": ["fd->flags"], "call": "vmsplice"}, {"reason": ["fd->flags"], "call": "fadvise64_64"}, {"reason": ["fd->flags"], "call": "pwritev64"}, {"reason": ["fd->flags"], "call": "fremovexattr"}, {"reason": ["fd->flags"], "call": "readahead"}, {"reason": ["fd->flags"], "call": "getdents"}, {"reason": ["fd->flags"], "call": "writev"}, {"reason": ["fd->flags"], "call": "preadv64"}, {"reason": ["fd->flags"], "call": "fchmod"}, {"reason": ["fd->flags"], "call": "pread64"}, {"reason": ["fd->flags"], "call": "signalfd4"}, {"reason": ["fd->flags"], "call": "read"}, {"reason": ["fd->flags"], "call": "fchown"}, {"reason": ["fd->flags"], "call": "mq_timedreceive"}, {"reason": ["fd->flags"], "call": "utime"}, {"reason": ["fd->flags"], "call": "fsync"}, {"reason": ["fd->flags"], "call": "bpf"}, {"reason": ["fd->flags"], "call": "recvfrom"}, {"reason": ["fd->flags"], "call": "fsetxattr"}, {"reason": ["fd->flags"], "call": "sendto"}, {"reason": ["fd->flags"], "call": "tee"}, {"reason": ["fd->flags"], "call": "sync_file_range"}, {"reason": ["fd->flags"], "call": "lseek"}, {"reason": ["fd->flags"], "call": "connect"}, {"reason": ["fd->flags"], "call": "getsockname"}, {"reason": ["fd->flags"], "call": "epoll_ctl"}, {"reason": ["fd->flags"], "call": "flock"}, {"reason": ["fd->flags"], "call": "pwritev"}, {"reason": ["fd->flags"], "call": "fchdir"}, {"reason": ["fd->flags"], "call": "accept4"}, {"reason": ["fd->flags"], "call": "old_readdir"}, {"reason": ["fd->flags"], "call": "inotify_rm_watch"}, {"reason": ["fd->flags"], "call": "utimensat"}, {"reason": ["fd->flags"], "call": "inotify_add_watch"}, {"reason": ["fd->flags"], "call": "preadv2"}, {"reason": ["fd->flags"], "call": "splice"}, {"reason": ["fd->flags"], "call": "ftruncate"}, {"reason": ["fd->flags"], "call": "preadv"}, {"reason": ["fd->flags"], "call": "getpeername"}, {"reason": ["fd->flags"], "call": "setsockopt"}, {"reason": ["fd->flags"], "call": "fcntl"}, {"reason": ["fd->flags"], "call": "ioctl"}, {"reason": ["fd->flags"], "call": "pwrite64"}, {"reason": ["fd->flags"], "call": "perf_event_open"}, {"reason": ["fd->flags"], "call": "pwritev64v2"}, {"reason": ["fd->flags"], "call": "futimesat"}, {"reason": ["fd->flags"], "call": "pwritev2"}, {"reason": ["fd->flags"], "call": "shutdown"}, {"reason": ["fd->flags"], "call": "getsockopt"}, {"reason": ["fd->flags"], "call": "mq_getsetattr"}, {"reason": ["fd->flags"], "call": "fdatasync"}, {"reason": ["fd->flags"], "call": "getdents64"}, {"reason": ["fd->flags"], "call": "listen"}, {"reason": ["fd->flags"], "call": "copy_file_range"}, {"reason": ["fd->flags"], "call": "mq_timedsend"}, {"reason": ["fd->flags"], "call": "fgetxattr"}, {"reason": ["fd->flags"], "call": "fcntl64"}, {"reason": ["fd->flags"], "call": "fallocate"}, {"reason": ["fd->flags"], "call": "epoll_wait"}, {"reason": ["fd->flags"], "call": "llseek"}, {"reason": ["fd->flags"], "call": "preadv64v2"}, {"reason": ["fd->flags"], "call": "readv"}, {"reason": ["fd->flags"], "call": "fstatfs"}, {"reason": ["fd->flags"], "call": "fstatfs64"}, {"reason": ["fd->flags"], "call": "mq_notify"}, {"reason": ["fd->flags"], "call": "sendfile"}, {"reason": ["fd->flags"], "call": "bind"}, {"reason": ["fd->flags"], "call": "flistxattr"}, {"reason": ["fd->flags"], "call": "sendfile64"}], "munlock": [{"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "remap_file_pages"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "shmdt"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "brk"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "get_mempolicy"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "madvise"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mremap"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "prctl"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mincore"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "msync"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mlockall"}], "shmdt": [{"reason": ["vm_area_struct->vm_pgoff"], "call": "remap_file_pages"}, {"reason": ["vm_area_struct->vm_pgoff"], "call": "brk"}, {"reason": ["vm_area_struct->vm_pgoff"], "call": "get_mempolicy"}, {"reason": ["vm_area_struct->vm_pgoff"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_pgoff"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_pgoff"], "call": "madvise"}, {"reason": ["vm_area_struct->vm_pgoff"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_pgoff"], "call": "mremap"}, {"reason": ["vm_area_struct->vm_pgoff"], "call": "prctl"}, {"reason": ["vm_area_struct->vm_pgoff"], "call": "munlock"}, {"reason": ["vm_area_struct->vm_pgoff"], "call": "mincore"}, {"reason": ["vm_area_struct->vm_pgoff"], "call": "msync"}, {"reason": ["vm_area_struct->vm_pgoff"], "call": "mlockall"}], "getrlimit": [{"reason": ["rlimit->rlim_max", "rlimit->rlim_cur"], "call": "setrlimit"}, {"reason": ["rlimit->rlim_max", "rlimit->rlim_cur"], "call": "old_getrlimit"}, {"reason": ["rlimit->rlim_max", "rlimit->rlim_cur"], "call": "prlimit64"}], "mincore": [{"reason": ["mm_segment_t->seg"], "call": "keyctl"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigtimedwait"}, {"reason": ["mm_segment_t->seg"], "call": "iopl"}, {"reason": ["mm_segment_t->seg"], "call": "msgrcv"}, {"reason": ["mm_segment_t->seg"], "call": "kill"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setparam"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_set"}, {"reason": ["vm_area_struct->vm_start"], "call": "remap_file_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getppid"}, {"reason": ["mm_segment_t->seg"], "call": "ioperm"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedreceive"}, {"reason": ["mm_segment_t->seg"], "call": "capget"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setaffinity"}, {"reason": ["mm_segment_t->seg"], "call": "signal"}, {"reason": ["mm_segment_t->seg"], "call": "semtimedop"}, {"reason": ["mm_segment_t->seg"], "call": "umount"}, {"reason": ["mm_segment_t->seg"], "call": "sched_rr_get_interval"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigprocmask"}, {"reason": ["mm_segment_t->seg"], "call": "setsid"}, {"reason": ["mm_segment_t->seg"], "call": "sigaltstack"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setattr"}, {"reason": ["mm_segment_t->seg"], "call": "migrate_pages"}, {"reason": ["mm_segment_t->seg"], "call": "getitimer"}, {"reason": ["mm_segment_t->seg"], "call": "setpgid"}, {"reason": ["mm_segment_t->seg"], "call": "getsid"}, {"reason": ["mm_segment_t->seg"], "call": "prlimit64"}, {"reason": ["mm_segment_t->seg"], "call": "perf_event_open"}, {"reason": ["vm_area_struct->vm_start"], "call": "shmdt"}, {"reason": ["mm_segment_t->seg"], "call": "rt_sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "getpgid"}, {"reason": ["vm_area_struct->vm_start"], "call": "brk"}, {"reason": ["mm_segment_t->seg"], "call": "getpriority"}, {"reason": ["mm_segment_t->seg"], "call": "sigaction"}, {"reason": ["mm_segment_t->seg"], "call": "setns"}, {"reason": ["mm_segment_t->seg"], "call": "fork"}, {"reason": ["vm_area_struct->vm_start"], "call": "get_mempolicy"}, {"reason": ["mm_segment_t->seg"], "call": "get_robust_list"}, {"reason": ["mm_segment_t->seg"], "call": "mq_timedsend"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "ptrace"}, {"reason": ["vm_area_struct->vm_start"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_start"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_start"], "call": "madvise"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getattr"}, {"reason": ["mm_segment_t->seg"], "call": "getrusage"}, {"reason": ["mm_segment_t->seg"], "call": "sched_setscheduler"}, {"reason": ["mm_segment_t->seg"], "call": "setitimer"}, {"reason": ["mm_segment_t->seg"], "call": "ioprio_get"}, {"reason": ["mm_segment_t->seg"], "call": "vfork"}, {"reason": ["vm_area_struct->vm_start"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_start"], "call": "mremap"}, {"reason": ["vm_area_struct->vm_start", "mm_segment_t->seg"], "call": "prctl"}, {"reason": ["mm_segment_t->seg"], "call": "move_pages"}, {"reason": ["vm_area_struct->vm_start"], "call": "munlock"}, {"reason": ["mm_segment_t->seg"], "call": "setpriority"}, {"reason": ["mm_segment_t->seg"], "call": "clone"}, {"reason": ["vm_area_struct->vm_start"], "call": "msync"}, {"reason": ["mm_segment_t->seg"], "call": "sched_getparam"}, {"reason": ["vm_area_struct->vm_start"], "call": "mlockall"}], "mq_notify": [{"reason": ["sigval->sival_ptr"], "call": "rt_sigtimedwait"}, {"reason": ["sigevent->sigev_signo", "sigval->sival_ptr", "sigevent->sigev_notify"], "call": "mq_timedreceive"}, {"reason": ["sigevent->sigev_signo", "sigval->sival_ptr", "sigevent->sigev_notify"], "call": "timer_create"}, {"reason": ["sigval->sival_ptr"], "call": "rt_sigqueueinfo"}, {"reason": ["sigval->sival_ptr"], "call": "tgkill"}, {"reason": ["sigval->sival_ptr"], "call": "rt_tgsigqueueinfo"}, {"reason": ["sigevent->sigev_signo", "sigval->sival_ptr", "sigevent->sigev_notify"], "call": "mq_getsetattr"}, {"reason": ["sigevent->sigev_signo", "sigval->sival_ptr", "sigevent->sigev_notify"], "call": "mq_timedsend"}, {"reason": ["sigval->sival_ptr"], "call": "rt_sigreturn"}, {"reason": ["sigval->sival_ptr"], "call": "tkill"}], "sendfile": [{"reason": ["file->f_mode"], "call": "fadvise64_64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "msync"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "stat": [{"reason": ["__old_kernel_stat->st_nlink", "__old_kernel_stat->st_ino"], "call": "lstat"}, {"reason": ["__old_kernel_stat->st_nlink", "__old_kernel_stat->st_ino"], "call": "fstat"}], "newfstat": [{"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newlstat"}, {"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newfstatat"}, {"reason": ["stat->st_nlink", "stat->st_ino", "compat_stat->st_nlink", "compat_stat->st_ino"], "call": "newstat"}], "timerfd_gettime": [{"reason": ["timerfd_ctx->tintv", "timerfd_ctx->expired"], "call": "timerfd_settime"}, {"reason": ["timerfd_ctx->tintv", "timerfd_ctx->expired"], "call": "timerfd_create"}], "pwritev64": [{"reason": ["file->f_mode"], "call": "fadvise64_64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "msync"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "mq_open": [{"reason": ["filename->name"], "call": "sysfs"}, {"reason": ["filename->name"], "call": "mq_unlink"}, {"reason": ["filename->name"], "call": "swapoff"}, {"reason": ["filename->name"], "call": "openat"}, {"reason": ["filename->name"], "call": "uselib"}, {"reason": ["filename->name"], "call": "renameat2"}, {"reason": ["filename->name"], "call": "symlinkat"}, {"reason": ["filename->name"], "call": "quotactl"}, {"reason": ["filename->name"], "call": "acct"}, {"reason": ["filename->name"], "call": "open"}, {"reason": ["filename->name"], "call": "unlink"}, {"reason": ["filename->name"], "call": "rmdir"}, {"reason": ["filename->name"], "call": "swapon"}, {"reason": ["filename->name"], "call": "unlinkat"}], "statfs64": [{"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "ustat"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "fstatfs"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "statfs"}, {"reason": ["kstatfs->f_ffree", "kstatfs->f_files"], "call": "fstatfs64"}], "set_thread_area": [{"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "keyctl"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "rt_sigtimedwait"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "iopl"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "msgrcv"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "kill"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sched_getaffinity"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "arch_prctl"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sched_setparam"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "ioprio_set"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "getppid"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "ioperm"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "mq_timedreceive"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "capget"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sched_setaffinity"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "signal"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "semtimedop"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "umount"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sched_rr_get_interval"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "rt_sigprocmask"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "setsid"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sigaltstack"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sched_setattr"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "migrate_pages"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "getitimer"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "setpgid"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "getsid"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "prlimit64"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "perf_event_open"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "rt_sigaction"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "getpgid"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "getpriority"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sigaction"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "setns"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "fork"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "get_robust_list"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "mq_timedsend"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sched_getscheduler"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "ptrace"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sched_getattr"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "getrusage"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sched_setscheduler"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "setitimer"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "ioprio_get"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "vfork"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "prctl"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "move_pages"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "setpriority"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "clone"}, {"reason": ["thread_struct->fsindex", "thread_struct->gsindex"], "call": "sched_getparam"}], "clock_nanosleep": [{"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fadvise64_64"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["k_clock->nsleep"], "call": "clock_getres"}, {"reason": ["k_clock->nsleep"], "call": "timer_delete"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchown"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "utime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["k_clock->nsleep"], "call": "timer_create"}, {"reason": ["k_clock->nsleep"], "call": "clock_gettime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "uselib"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec", "k_clock->nsleep"], "call": "timer_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec", "k_clock->nsleep"], "call": "timer_gettime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "stime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "poll"}, {"reason": ["k_clock->nsleep"], "call": "clock_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlink"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["k_clock->nsleep"], "call": "clock_adjtime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ppoll"}], "getgroups16": [{"reason": ["group_info->ngroups"], "call": "setgroups16"}, {"reason": ["group_info->ngroups"], "call": "setgroups"}], "io_cancel": [{"reason": ["kioctx_table->nr", "kioctx->user_id"], "call": "io_getevents"}, {"reason": ["kioctx->user_id"], "call": "io_submit"}, {"reason": ["kioctx_table->nr", "kioctx->user_id"], "call": "io_setup"}, {"reason": ["kioctx_table->nr", "kioctx->user_id"], "call": "io_destroy"}], "setitimer": [{"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "settimeofday"}, {"reason": ["signal_struct->it_real_incr"], "call": "timer_create"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "adjtimex"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "waitid"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "getitimer"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "select"}, {"reason": ["signal_struct->it_real_incr"], "call": "exit_group"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "wait4"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "getrusage"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "clock_adjtime"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "alarm"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "ppoll"}], "alarm": [{"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "settimeofday"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "adjtimex"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "waitid"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "getitimer"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "select"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "wait4"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "getrusage"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "setitimer"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "clock_adjtime"}, {"reason": ["timeval->tv_usec", "timeval->tv_sec"], "call": "ppoll"}], "futex": [{"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fadvise64_64"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchown"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "utime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "uselib"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "stime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "poll"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlink"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ppoll"}], "recvmmsg": [{"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fadvise64_64"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchown"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "utime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["msghdr->msg_flags"], "call": "recvfrom"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["msghdr->msg_flags"], "call": "sendto"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "uselib"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "stime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "poll"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlink"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile64"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ppoll"}], "finit_module": [{"reason": ["module->args", "module->num_kp", "module_layout->base", "module_layout->size"], "call": "delete_module"}, {"reason": ["module->args", "module->num_kp", "module_layout->base", "load_info->num_debug", "module_layout->size"], "call": "init_module"}], "sendfile64": [{"reason": ["file->f_mode"], "call": "fadvise64_64"}, {"reason": ["file->f_mode"], "call": "swapoff"}, {"reason": ["file->f_mode"], "call": "memfd_create"}, {"reason": ["file->f_mode"], "call": "remap_file_pages"}, {"reason": ["file->f_mode"], "call": "dup3"}, {"reason": ["file->f_mode"], "call": "socketpair"}, {"reason": ["file->f_mode"], "call": "epoll_create1"}, {"reason": ["file->f_mode"], "call": "epoll_ctl"}, {"reason": ["file->f_mode"], "call": "flock"}, {"reason": ["file->f_mode"], "call": "openat"}, {"reason": ["file->f_mode"], "call": "uselib"}, {"reason": ["file->f_mode"], "call": "accept4"}, {"reason": ["file->f_mode"], "call": "shmat"}, {"reason": ["file->f_mode"], "call": "socket"}, {"reason": ["file->f_mode"], "call": "pipe2"}, {"reason": ["file->f_mode"], "call": "perf_event_open"}, {"reason": ["file->f_mode"], "call": "shmdt"}, {"reason": ["file->f_mode"], "call": "acct"}, {"reason": ["file->f_mode"], "call": "open"}, {"reason": ["file->f_mode"], "call": "dup"}, {"reason": ["file->f_mode"], "call": "setns"}, {"reason": ["file->f_mode"], "call": "shmctl"}, {"reason": ["file->f_mode"], "call": "swapon"}, {"reason": ["file->f_mode"], "call": "eventfd2"}, {"reason": ["file->f_mode"], "call": "mmap_pgoff"}, {"reason": ["file->f_mode"], "call": "mq_open"}, {"reason": ["file->f_mode"], "call": "msync"}, {"reason": ["file->f_mode"], "call": "open_by_handle_at"}], "mlockall": [{"reason": ["task_struct->personality"], "call": "keyctl"}, {"reason": ["task_struct->personality"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality"], "call": "msgrcv"}, {"reason": ["task_struct->personality"], "call": "kill"}, {"reason": ["mm_struct->total_vm"], "call": "swapoff"}, {"reason": ["task_struct->personality"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality"], "call": "sched_setparam"}, {"reason": ["task_struct->personality"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->total_vm", "vm_area_struct->vm_end"], "call": "remap_file_pages"}, {"reason": ["mm_struct->total_vm"], "call": "io_getevents"}, {"reason": ["task_struct->personality"], "call": "getppid"}, {"reason": ["task_struct->personality"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality"], "call": "capget"}, {"reason": ["task_struct->personality"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality"], "call": "signal"}, {"reason": ["task_struct->personality"], "call": "semtimedop"}, {"reason": ["task_struct->personality"], "call": "umount"}, {"reason": ["task_struct->personality"], "call": "sched_rr_get_interval"}, {"reason": ["task_struct->personality"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality"], "call": "setsid"}, {"reason": ["task_struct->personality"], "call": "sigaltstack"}, {"reason": ["task_struct->personality"], "call": "sched_setattr"}, {"reason": ["task_struct->personality", "mm_struct->total_vm"], "call": "migrate_pages"}, {"reason": ["task_struct->personality"], "call": "getitimer"}, {"reason": ["task_struct->personality"], "call": "setpgid"}, {"reason": ["task_struct->personality"], "call": "getsid"}, {"reason": ["task_struct->personality"], "call": "prlimit64"}, {"reason": ["task_struct->personality"], "call": "perf_event_open"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->total_vm", "vm_area_struct->vm_end"], "call": "shmdt"}, {"reason": ["task_struct->personality"], "call": "rt_sigaction"}, {"reason": ["task_struct->personality"], "call": "getpgid"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->total_vm", "vm_area_struct->vm_end"], "call": "brk"}, {"reason": ["task_struct->personality"], "call": "getpriority"}, {"reason": ["task_struct->personality"], "call": "sigaction"}, {"reason": ["task_struct->personality"], "call": "setns"}, {"reason": ["task_struct->personality"], "call": "fork"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->total_vm", "vm_area_struct->vm_end"], "call": "get_mempolicy"}, {"reason": ["task_struct->personality"], "call": "get_robust_list"}, {"reason": ["task_struct->personality"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality"], "call": "ptrace"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "munlockall"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "pkey_mprotect"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "madvise"}, {"reason": ["task_struct->personality"], "call": "sched_getattr"}, {"reason": ["task_struct->personality", "mm_struct->total_vm"], "call": "getrusage"}, {"reason": ["task_struct->personality"], "call": "sched_setscheduler"}, {"reason": ["task_struct->personality"], "call": "setitimer"}, {"reason": ["task_struct->personality"], "call": "ioprio_get"}, {"reason": ["task_struct->personality"], "call": "vfork"}, {"reason": ["mm_struct->total_vm"], "call": "io_setup"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "mprotect"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->total_vm", "vm_area_struct->vm_end"], "call": "mremap"}, {"reason": ["mm_struct->total_vm"], "call": "io_destroy"}, {"reason": ["mm_struct->total_vm"], "call": "mbind"}, {"reason": ["vm_area_struct->vm_start", "task_struct->personality", "mm_struct->total_vm", "vm_area_struct->vm_end"], "call": "prctl"}, {"reason": ["task_struct->personality", "mm_struct->total_vm"], "call": "move_pages"}, {"reason": ["mm_struct->total_vm"], "call": "modify_ldt"}, {"reason": ["vm_area_struct->vm_start", "vm_area_struct->vm_end"], "call": "munlock"}, {"reason": ["task_struct->personality"], "call": "setpriority"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->total_vm", "vm_area_struct->vm_end"], "call": "mincore"}, {"reason": ["task_struct->personality"], "call": "clone"}, {"reason": ["vm_area_struct->vm_start", "mm_struct->total_vm", "vm_area_struct->vm_end"], "call": "msync"}, {"reason": ["task_struct->personality"], "call": "sched_getparam"}, {"reason": ["mm_struct->total_vm"], "call": "io_cancel"}], "ppoll": [{"reason": ["task_struct->personality"], "call": "keyctl"}, {"reason": ["task_struct->personality", "timespec->tv_sec", "timespec->tv_nsec"], "call": "rt_sigtimedwait"}, {"reason": ["task_struct->personality"], "call": "msgrcv"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fadvise64_64"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_unlink"}, {"reason": ["task_struct->personality"], "call": "kill"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapoff"}, {"reason": ["task_struct->personality"], "call": "sched_getaffinity"}, {"reason": ["task_struct->personality"], "call": "sched_setparam"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmod"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "memfd_create"}, {"reason": ["task_struct->personality"], "call": "ioprio_set"}, {"reason": ["task_struct->personality"], "call": "personality"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "readlinkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "io_getevents"}, {"reason": ["task_struct->personality"], "call": "getppid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchown"}, {"reason": ["task_struct->personality", "timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedreceive"}, {"reason": ["task_struct->personality"], "call": "capget"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "utime"}, {"reason": ["task_struct->personality"], "call": "sched_setaffinity"}, {"reason": ["task_struct->personality"], "call": "signal"}, {"reason": ["task_struct->personality", "timespec->tv_sec", "timespec->tv_nsec"], "call": "semtimedop"}, {"reason": ["task_struct->personality"], "call": "umount"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "settimeofday"}, {"reason": ["task_struct->personality", "timespec->tv_sec", "timespec->tv_nsec"], "call": "sched_rr_get_interval"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_gettime"}, {"reason": ["compat_timespec->tv_sec", "compat_timespec->tv_nsec", "timespec->tv_sec", "timespec->tv_nsec"], "call": "pselect6"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "uselib"}, {"reason": ["task_struct->personality"], "call": "rt_sigprocmask"}, {"reason": ["task_struct->personality"], "call": "setsid"}, {"reason": ["task_struct->personality"], "call": "sigaltstack"}, {"reason": ["task_struct->personality"], "call": "sched_setattr"}, {"reason": ["task_struct->personality"], "call": "migrate_pages"}, {"reason": ["task_struct->personality"], "call": "getitimer"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchmodat"}, {"reason": ["task_struct->personality"], "call": "setpgid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "inotify_add_watch"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_settime"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ftruncate"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timer_gettime"}, {"reason": ["task_struct->personality"], "call": "getsid"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "ioctl"}, {"reason": ["task_struct->personality"], "call": "prlimit64"}, {"reason": ["task_struct->personality"], "call": "perf_event_open"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "linkat"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "stime"}, {"reason": ["task_struct->personality"], "call": "rt_sigaction"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futimesat"}, {"reason": ["task_struct->personality"], "call": "getpgid"}, {"reason": ["poll_list->len", "timespec->tv_sec", "timespec->tv_nsec"], "call": "poll"}, {"reason": ["compat_timespec->tv_sec", "compat_timespec->tv_nsec", "timespec->tv_sec", "timespec->tv_nsec"], "call": "select"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlink"}, {"reason": ["task_struct->personality"], "call": "getpriority"}, {"reason": ["task_struct->personality"], "call": "sigaction"}, {"reason": ["compat_timespec->tv_sec", "compat_timespec->tv_nsec", "timespec->tv_sec", "timespec->tv_nsec"], "call": "nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_getsetattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "faccessat"}, {"reason": ["task_struct->personality"], "call": "setns"}, {"reason": ["task_struct->personality"], "call": "fork"}, {"reason": ["task_struct->personality"], "call": "get_robust_list"}, {"reason": ["task_struct->personality", "timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_timedsend"}, {"reason": ["task_struct->personality"], "call": "sched_getscheduler"}, {"reason": ["task_struct->personality"], "call": "ptrace"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "swapon"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "epoll_wait"}, {"reason": ["task_struct->personality"], "call": "sched_getattr"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "fchownat"}, {"reason": ["task_struct->personality"], "call": "getrusage"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "timerfd_settime"}, {"reason": ["task_struct->personality"], "call": "sched_setscheduler"}, {"reason": ["task_struct->personality"], "call": "setitimer"}, {"reason": ["task_struct->personality"], "call": "ioprio_get"}, {"reason": ["task_struct->personality"], "call": "vfork"}, {"reason": ["task_struct->personality"], "call": "prctl"}, {"reason": ["task_struct->personality"], "call": "move_pages"}, {"reason": ["task_struct->personality"], "call": "setpriority"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "mq_notify"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile"}, {"reason": ["task_struct->personality"], "call": "clone"}, {"reason": ["compat_timespec->tv_sec", "compat_timespec->tv_nsec", "timespec->tv_sec", "timespec->tv_nsec"], "call": "clock_nanosleep"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "unlinkat"}, {"reason": ["task_struct->personality"], "call": "sched_getparam"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "futex"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "recvmmsg"}, {"reason": ["timespec->tv_sec", "timespec->tv_nsec"], "call": "sendfile64"}]}
--- /dev/null	Fri Dec 21 15:00:34 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/implicit_dependencies/without_structs/implicit_dependencies_verbose.pretty	Fri Dec 21 15:00:34 2018
@@ -0,0 +1,10478 @@
+{'acct': [{'call': 'fadvise64_64', 'reason': set([('file', 'f_mode')])},
+          {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+          {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+          {'call': 'remap_file_pages', 'reason': set([('file', 'f_mode')])},
+          {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+          {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+          {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+          {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+          {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+          {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+          {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+          {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+          {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+          {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+          {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+          {'call': 'perf_event_open', 'reason': set([('file', 'f_mode')])},
+          {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+          {'call': 'open', 'reason': set([('file', 'f_mode')])},
+          {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+          {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+          {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+          {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+          {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+          {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+          {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+          {'call': 'msync', 'reason': set([('file', 'f_mode')])},
+          {'call': 'open_by_handle_at', 'reason': set([('file', 'f_mode')])}],
+ 'alarm': [{'call': 'settimeofday',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'adjtimex',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'waitid',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'getitimer',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'select',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'wait4',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'getrusage',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'setitimer',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'clock_adjtime',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])},
+           {'call': 'ppoll',
+            'reason': set([('timeval', 'tv_sec'), ('timeval', 'tv_usec')])}],
+ 'bpf': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'rt_sigtimedwait',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'iopl', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'swapoff', 'reason': set([('file', 'private_data')])},
+         {'call': 'sched_getaffinity',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'sched_setparam', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'memfd_create', 'reason': set([('file', 'private_data')])},
+         {'call': 'ioprio_set', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'remap_file_pages',
+          'reason': set([('file', 'private_data')])},
+         {'call': 'dup3', 'reason': set([('file', 'private_data')])},
+         {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'mq_timedreceive',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'sched_setaffinity',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'semtimedop', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'socketpair', 'reason': set([('file', 'private_data')])},
+         {'call': 'sched_rr_get_interval',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'epoll_create1', 'reason': set([('file', 'private_data')])},
+         {'call': 'epoll_ctl', 'reason': set([('file', 'private_data')])},
+         {'call': 'flock', 'reason': set([('file', 'private_data')])},
+         {'call': 'openat', 'reason': set([('file', 'private_data')])},
+         {'call': 'uselib', 'reason': set([('file', 'private_data')])},
+         {'call': 'rt_sigprocmask', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'accept4', 'reason': set([('file', 'private_data')])},
+         {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'sigaltstack', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'sched_setattr', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'migrate_pages', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'getitimer', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'shmat', 'reason': set([('file', 'private_data')])},
+         {'call': 'socket', 'reason': set([('file', 'private_data')])},
+         {'call': 'pipe2', 'reason': set([('file', 'private_data')])},
+         {'call': 'prlimit64', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'perf_event_open',
+          'reason': set([('file', 'private_data'), ('mm_segment_t', 'seg')])},
+         {'call': 'shmdt', 'reason': set([('file', 'private_data')])},
+         {'call': 'rt_sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'acct', 'reason': set([('file', 'private_data')])},
+         {'call': 'open', 'reason': set([('file', 'private_data')])},
+         {'call': 'getpriority', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'dup', 'reason': set([('file', 'private_data')])},
+         {'call': 'setns',
+          'reason': set([('file', 'private_data'), ('mm_segment_t', 'seg')])},
+         {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'get_robust_list',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'mq_timedsend', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'sched_getscheduler',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'shmctl', 'reason': set([('file', 'private_data')])},
+         {'call': 'swapon', 'reason': set([('file', 'private_data')])},
+         {'call': 'sched_getattr', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'getrusage', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'sched_setscheduler',
+          'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'setitimer', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'ioprio_get', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'eventfd2', 'reason': set([('file', 'private_data')])},
+         {'call': 'mmap_pgoff', 'reason': set([('file', 'private_data')])},
+         {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'move_pages', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'setpriority', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'mq_open', 'reason': set([('file', 'private_data')])},
+         {'call': 'msync', 'reason': set([('file', 'private_data')])},
+         {'call': 'sched_getparam', 'reason': set([('mm_segment_t', 'seg')])},
+         {'call': 'open_by_handle_at',
+          'reason': set([('file', 'private_data')])}],
+ 'brk': [{'call': 'swapoff',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'remap_file_pages',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'io_getevents',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'migrate_pages',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'shmdt',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'get_mempolicy',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'munlockall',
+          'reason': set([('mm_struct', 'def_flags'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'pkey_mprotect',
+          'reason': set([('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'madvise',
+          'reason': set([('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'getrusage',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'io_setup',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'mprotect',
+          'reason': set([('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'mremap',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'io_destroy',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'mbind',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'prctl',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'move_pages',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'modify_ldt',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'munlock',
+          'reason': set([('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'mincore',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'msync',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])},
+         {'call': 'io_cancel',
+          'reason': set([('mm_struct', 'brk'),
+                         ('mm_struct', 'def_flags'),
+                         ('mm_struct', 'end_data'),
+                         ('mm_struct', 'start_brk'),
+                         ('mm_struct', 'start_data')])},
+         {'call': 'mlockall',
+          'reason': set([('mm_struct', 'def_flags'),
+                         ('vm_area_struct', 'vm_flags'),
+                         ('vm_area_struct', 'vm_start')])}],
+ 'clock_adjtime': [{'call': 'clock_getres',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'timer_delete',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'timer_create',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'clock_gettime',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'timer_settime',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'timer_gettime',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'clock_settime',
+                    'reason': set([('k_clock', 'clock_adj')])},
+                   {'call': 'clock_nanosleep',
+                    'reason': set([('k_clock', 'clock_adj')])}],
+ 'clock_nanosleep': [{'call': 'rt_sigtimedwait',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'fadvise64_64',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'mq_unlink',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'swapoff',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'clock_getres',
+                      'reason': set([('k_clock', 'nsleep')])},
+                     {'call': 'timer_delete',
+                      'reason': set([('k_clock', 'nsleep')])},
+                     {'call': 'fchmod',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'memfd_create',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'readlinkat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'io_getevents',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'fchown',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'mq_timedreceive',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'utime',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'semtimedop',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'settimeofday',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'timer_create',
+                      'reason': set([('k_clock', 'nsleep')])},
+                     {'call': 'clock_gettime',
+                      'reason': set([('k_clock', 'nsleep')])},
+                     {'call': 'sched_rr_get_interval',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'timerfd_gettime',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'pselect6',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'uselib',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'fchmodat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'inotify_add_watch',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'timer_settime',
+                      'reason': set([('k_clock', 'nsleep'),
+                                     ('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'ftruncate',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'timer_gettime',
+                      'reason': set([('k_clock', 'nsleep'),
+                                     ('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'ioctl',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'linkat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'stime',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'futimesat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'poll',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'clock_settime',
+                      'reason': set([('k_clock', 'nsleep')])},
+                     {'call': 'select',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'unlink',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'nanosleep',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'mq_getsetattr',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'faccessat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'swapon',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'epoll_wait',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'fchownat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'timerfd_settime',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'mq_notify',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'sendfile',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'unlinkat',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'clock_adjtime',
+                      'reason': set([('k_clock', 'nsleep')])},
+                     {'call': 'futex',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'recvmmsg',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'sendfile64',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])},
+                     {'call': 'ppoll',
+                      'reason': set([('timespec', 'tv_nsec'),
+                                     ('timespec', 'tv_sec')])}],
+ 'clock_settime': [{'call': 'clock_getres',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'timer_delete',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'timer_create',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'clock_gettime',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'timer_settime',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'timer_gettime',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'clock_nanosleep',
+                    'reason': set([('k_clock', 'clock_set')])},
+                   {'call': 'clock_adjtime',
+                    'reason': set([('k_clock', 'clock_set')])}],
+ 'copy_file_range': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+                     {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fadvise64_64',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fremovexattr',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                     {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+                     {'call': 'read', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+                     {'call': 'mq_timedreceive',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                     {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+                     {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                     {'call': 'tee', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sync_file_range',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                     {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getsockname',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+                     {'call': 'flock', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                     {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+                     {'call': 'old_readdir',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'inotify_rm_watch',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+                     {'call': 'inotify_add_watch',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                     {'call': 'splice', 'reason': set([('fd', 'flags')])},
+                     {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getpeername',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                     {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'perf_event_open',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'pwritev64v2',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                     {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+                     {'call': 'mq_getsetattr',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+                     {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+                     {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+                     {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'write', 'reason': set([('fd', 'flags')])},
+                     {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+                     {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                     {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'delete_module': [{'call': 'init_module',
+                    'reason': set([('module', 'exit'),
+                                   ('module', 'init'),
+                                   ('module', 'state')])},
+                   {'call': 'finit_module',
+                    'reason': set([('module', 'exit'),
+                                   ('module', 'init'),
+                                   ('module', 'state')])}],
+ 'dup3': [{'call': 'unshare',
+           'reason': set([('fdtable', 'max_fds'),
+                          ('files_struct', 'resize_in_progress')])},
+          {'call': 'select', 'reason': set([('fdtable', 'max_fds')])},
+          {'call': 'dup2',
+           'reason': set([('fdtable', 'max_fds'),
+                          ('files_struct', 'resize_in_progress')])}],
+ 'epoll_ctl': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+               {'call': 'fadvise64_64', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+               {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+               {'call': 'writev', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+               {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+               {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+               {'call': 'read', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+               {'call': 'utime', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+               {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+               {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_create1',
+                'reason': set([('epitem', 'nwait'),
+                               ('epoll_event', 'events')])},
+               {'call': 'tee', 'reason': set([('fd', 'flags')])},
+               {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'connect', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+               {'call': 'flock', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+               {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+               {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('fd', 'flags')])},
+               {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+               {'call': 'splice', 'reason': set([('fd', 'flags')])},
+               {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+               {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+               {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+               {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+               {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+               {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+               {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+               {'call': 'listen', 'reason': set([('fd', 'flags')])},
+               {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+               {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+               {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'readv', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+               {'call': 'write', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+               {'call': 'bind', 'reason': set([('fd', 'flags')])},
+               {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'epoll_wait': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+                {'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'rt_sigtimedwait',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+                {'call': 'iopl', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fadvise64_64', 'reason': set([('fd', 'flags')])},
+                {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+                {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+                {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                {'call': 'sched_getaffinity',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                {'call': 'sched_setparam',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+                {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+                {'call': 'ioprio_set',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'read', 'reason': set([('fd', 'flags')])},
+                {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+                {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'mq_timedreceive',
+                 'reason': set([('fd', 'flags'), ('mm_segment_t', 'seg')])},
+                {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                {'call': 'sched_setaffinity',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+                {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'semtimedop',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                {'call': 'sched_rr_get_interval',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'tee', 'reason': set([('fd', 'flags')])},
+                {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+                {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+                {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+                {'call': 'flock', 'reason': set([('fd', 'flags')])},
+                {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                {'call': 'rt_sigprocmask',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+                {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sigaltstack',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sched_setattr',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+                {'call': 'inotify_rm_watch',
+                 'reason': set([('fd', 'flags')])},
+                {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+                {'call': 'migrate_pages',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'getitimer',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'inotify_add_watch',
+                 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                {'call': 'splice', 'reason': set([('fd', 'flags')])},
+                {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+                {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+                {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+                {'call': 'prlimit64',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('fd', 'flags'), ('mm_segment_t', 'seg')])},
+                {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+                {'call': 'rt_sigaction',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+                {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+                {'call': 'getpriority',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sigaction',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+                {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+                {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'get_robust_list',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+                {'call': 'mq_timedsend',
+                 'reason': set([('fd', 'flags'), ('mm_segment_t', 'seg')])},
+                {'call': 'sched_getscheduler',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+                {'call': 'sched_getattr',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'getrusage',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sched_setscheduler',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'setitimer',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'ioprio_get',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+                {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'move_pages',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+                {'call': 'write', 'reason': set([('fd', 'flags')])},
+                {'call': 'setpriority',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+                {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+                {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sched_getparam',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'fadvise64_64': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+                  {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+                  {'call': 'mq_unlink',
+                   'reason': set([('inode', 'i_flags')])},
+                  {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'swapoff', 'reason': set([('inode', 'i_flags')])},
+                  {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+                  {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+                  {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                  {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                  {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fchmod',
+                   'reason': set([('fd', 'flags'), ('inode', 'i_flags')])},
+                  {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+                  {'call': 'memfd_create',
+                   'reason': set([('inode', 'i_flags')])},
+                  {'call': 'readlinkat',
+                   'reason': set([('inode', 'i_flags')])},
+                  {'call': 'read', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fchown',
+                   'reason': set([('fd', 'flags'), ('inode', 'i_flags')])},
+                  {'call': 'mq_timedreceive',
+                   'reason': set([('fd', 'flags'), ('inode', 'i_flags')])},
+                  {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                  {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+                  {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+                  {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                  {'call': 'tee', 'reason': set([('fd', 'flags')])},
+                  {'call': 'sync_file_range',
+                   'reason': set([('fd', 'flags')])},
+                  {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                  {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                  {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+                  {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+                  {'call': 'flock', 'reason': set([('fd', 'flags')])},
+                  {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                  {'call': 'uselib', 'reason': set([('inode', 'i_flags')])},
+                  {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+                  {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+                  {'call': 'inotify_rm_watch',
+                   'reason': set([('fd', 'flags')])},
+                  {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fchmodat', 'reason': set([('inode', 'i_flags')])},
+                  {'call': 'inotify_add_watch',
+                   'reason': set([('fd', 'flags'), ('inode', 'i_flags')])},
+                  {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                  {'call': 'splice', 'reason': set([('fd', 'flags')])},
+                  {'call': 'ftruncate',
+                   'reason': set([('fd', 'flags'), ('inode', 'i_flags')])},
+                  {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                  {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+                  {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                  {'call': 'ioctl',
+                   'reason': set([('fd', 'flags'), ('inode', 'i_flags')])},
+                  {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'perf_event_open',
+                   'reason': set([('fd', 'flags')])},
+                  {'call': 'linkat', 'reason': set([('inode', 'i_flags')])},
+                  {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+                  {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+                  {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                  {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                  {'call': 'unlink', 'reason': set([('inode', 'i_flags')])},
+                  {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+                  {'call': 'mq_getsetattr',
+                   'reason': set([('fd', 'flags'), ('inode', 'i_flags')])},
+                  {'call': 'faccessat',
+                   'reason': set([('inode', 'i_flags')])},
+                  {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+                  {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                  {'call': 'copy_file_range',
+                   'reason': set([('fd', 'flags')])},
+                  {'call': 'mq_timedsend',
+                   'reason': set([('fd', 'flags'), ('inode', 'i_flags')])},
+                  {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'swapon', 'reason': set([('inode', 'i_flags')])},
+                  {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+                  {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fchownat', 'reason': set([('inode', 'i_flags')])},
+                  {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                  {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+                  {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'write', 'reason': set([('fd', 'flags')])},
+                  {'call': 'mq_notify',
+                   'reason': set([('fd', 'flags'), ('inode', 'i_flags')])},
+                  {'call': 'sendfile',
+                   'reason': set([('fd', 'flags'), ('inode', 'i_flags')])},
+                  {'call': 'unlinkat', 'reason': set([('inode', 'i_flags')])},
+                  {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                  {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+                  {'call': 'sendfile64',
+                   'reason': set([('fd', 'flags'), ('inode', 'i_flags')])}],
+ 'fallocate': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+               {'call': 'fadvise64_64', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+               {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+               {'call': 'writev', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+               {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+               {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+               {'call': 'read', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+               {'call': 'utime', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+               {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+               {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+               {'call': 'tee', 'reason': set([('fd', 'flags')])},
+               {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'connect', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+               {'call': 'flock', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+               {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+               {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('fd', 'flags')])},
+               {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+               {'call': 'splice', 'reason': set([('fd', 'flags')])},
+               {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+               {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+               {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+               {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+               {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+               {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+               {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+               {'call': 'listen', 'reason': set([('fd', 'flags')])},
+               {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+               {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+               {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'readv', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+               {'call': 'write', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+               {'call': 'bind', 'reason': set([('fd', 'flags')])},
+               {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'fchdir': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+            {'call': 'fadvise64_64', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+            {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+            {'call': 'writev', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+            {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+            {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+            {'call': 'read', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+            {'call': 'utime', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+            {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+            {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+            {'call': 'tee', 'reason': set([('fd', 'flags')])},
+            {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'connect', 'reason': set([('fd', 'flags')])},
+            {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+            {'call': 'flock', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+            {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+            {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+            {'call': 'splice', 'reason': set([('fd', 'flags')])},
+            {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+            {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+            {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+            {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+            {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+            {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+            {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+            {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+            {'call': 'listen', 'reason': set([('fd', 'flags')])},
+            {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+            {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+            {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'readv', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+            {'call': 'write', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+            {'call': 'bind', 'reason': set([('fd', 'flags')])},
+            {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'fchmod': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+            {'call': 'fadvise64_64', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+            {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+            {'call': 'writev', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+            {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+            {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+            {'call': 'read', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+            {'call': 'utime', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+            {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+            {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+            {'call': 'tee', 'reason': set([('fd', 'flags')])},
+            {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'connect', 'reason': set([('fd', 'flags')])},
+            {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+            {'call': 'flock', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+            {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+            {'call': 'splice', 'reason': set([('fd', 'flags')])},
+            {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+            {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+            {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+            {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+            {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+            {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+            {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+            {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+            {'call': 'listen', 'reason': set([('fd', 'flags')])},
+            {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+            {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+            {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'readv', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+            {'call': 'write', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+            {'call': 'bind', 'reason': set([('fd', 'flags')])},
+            {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'fchown': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+            {'call': 'fadvise64_64', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+            {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+            {'call': 'writev', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+            {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+            {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+            {'call': 'read', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+            {'call': 'utime', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+            {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+            {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+            {'call': 'tee', 'reason': set([('fd', 'flags')])},
+            {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'connect', 'reason': set([('fd', 'flags')])},
+            {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+            {'call': 'flock', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+            {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+            {'call': 'splice', 'reason': set([('fd', 'flags')])},
+            {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+            {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+            {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+            {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+            {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+            {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+            {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+            {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+            {'call': 'listen', 'reason': set([('fd', 'flags')])},
+            {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+            {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+            {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'readv', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+            {'call': 'write', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+            {'call': 'bind', 'reason': set([('fd', 'flags')])},
+            {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'fcntl': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+           {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+           {'call': 'fadvise64_64',
+            'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+           {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+           {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+           {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+           {'call': 'writev', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+           {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+           {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+           {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+           {'call': 'remap_file_pages', 'reason': set([('file', 'f_mode')])},
+           {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+           {'call': 'read', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+           {'call': 'utime', 'reason': set([('fd', 'flags')])},
+           {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+           {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+           {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+           {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+           {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+           {'call': 'tee', 'reason': set([('fd', 'flags')])},
+           {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+           {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+           {'call': 'connect', 'reason': set([('fd', 'flags')])},
+           {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_ctl',
+            'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+           {'call': 'flock',
+            'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+           {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+           {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+           {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+           {'call': 'accept4',
+            'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+           {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+           {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+           {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+           {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+           {'call': 'splice', 'reason': set([('fd', 'flags')])},
+           {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+           {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+           {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+           {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+           {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+           {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+           {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+           {'call': 'perf_event_open',
+            'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+           {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+           {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+           {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+           {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+           {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+           {'call': 'open', 'reason': set([('file', 'f_mode')])},
+           {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+           {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+           {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+           {'call': 'listen', 'reason': set([('fd', 'flags')])},
+           {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+           {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+           {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+           {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+           {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+           {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+           {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+           {'call': 'readv', 'reason': set([('fd', 'flags')])},
+           {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+           {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+           {'call': 'write', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+           {'call': 'msync', 'reason': set([('file', 'f_mode')])},
+           {'call': 'open_by_handle_at', 'reason': set([('file', 'f_mode')])},
+           {'call': 'bind', 'reason': set([('fd', 'flags')])},
+           {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'fcntl64': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+             {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+             {'call': 'fadvise64_64',
+              'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+             {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+             {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+             {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+             {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+             {'call': 'writev', 'reason': set([('fd', 'flags')])},
+             {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+             {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+             {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+             {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+             {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('file', 'f_mode')])},
+             {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+             {'call': 'read', 'reason': set([('fd', 'flags')])},
+             {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+             {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+             {'call': 'utime', 'reason': set([('fd', 'flags')])},
+             {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+             {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+             {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+             {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+             {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+             {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+             {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+             {'call': 'tee', 'reason': set([('fd', 'flags')])},
+             {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+             {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+             {'call': 'connect', 'reason': set([('fd', 'flags')])},
+             {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+             {'call': 'epoll_ctl',
+              'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+             {'call': 'flock',
+              'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+             {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+             {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+             {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+             {'call': 'accept4',
+              'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+             {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+             {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+             {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+             {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+             {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+             {'call': 'splice', 'reason': set([('fd', 'flags')])},
+             {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+             {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+             {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+             {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+             {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fcntl',
+              'reason': set([('fd', 'flags'),
+                             ('flock', 'l_len'),
+                             ('flock', 'l_start')])},
+             {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+             {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+             {'call': 'perf_event_open',
+              'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+             {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+             {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+             {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+             {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+             {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+             {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+             {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+             {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+             {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+             {'call': 'listen', 'reason': set([('fd', 'flags')])},
+             {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+             {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+             {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+             {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+             {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+             {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+             {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+             {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+             {'call': 'readv', 'reason': set([('fd', 'flags')])},
+             {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+             {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+             {'call': 'write', 'reason': set([('fd', 'flags')])},
+             {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+             {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+             {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'msync', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open_by_handle_at',
+              'reason': set([('file', 'f_mode')])},
+             {'call': 'bind', 'reason': set([('fd', 'flags')])},
+             {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+             {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'fgetxattr': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+               {'call': 'fadvise64_64', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+               {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+               {'call': 'writev', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+               {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+               {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+               {'call': 'read', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+               {'call': 'utime', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+               {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+               {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+               {'call': 'tee', 'reason': set([('fd', 'flags')])},
+               {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'connect', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+               {'call': 'flock', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+               {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+               {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('fd', 'flags')])},
+               {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+               {'call': 'splice', 'reason': set([('fd', 'flags')])},
+               {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+               {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+               {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+               {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+               {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+               {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+               {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+               {'call': 'listen', 'reason': set([('fd', 'flags')])},
+               {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+               {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+               {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'readv', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+               {'call': 'write', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+               {'call': 'bind', 'reason': set([('fd', 'flags')])},
+               {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'finit_module': [{'call': 'delete_module',
+                   'reason': set([('module', 'args'),
+                                  ('module', 'num_kp'),
+                                  ('module_layout', 'base'),
+                                  ('module_layout', 'size')])},
+                  {'call': 'init_module',
+                   'reason': set([('load_info', 'num_debug'),
+                                  ('module', 'args'),
+                                  ('module', 'num_kp'),
+                                  ('module_layout', 'base'),
+                                  ('module_layout', 'size')])}],
+ 'flistxattr': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+                {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+                {'call': 'fadvise64_64', 'reason': set([('fd', 'flags')])},
+                {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+                {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+                {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+                {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+                {'call': 'read', 'reason': set([('fd', 'flags')])},
+                {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+                {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+                {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+                {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                {'call': 'tee', 'reason': set([('fd', 'flags')])},
+                {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+                {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+                {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+                {'call': 'flock', 'reason': set([('fd', 'flags')])},
+                {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+                {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+                {'call': 'inotify_rm_watch',
+                 'reason': set([('fd', 'flags')])},
+                {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+                {'call': 'inotify_add_watch',
+                 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                {'call': 'splice', 'reason': set([('fd', 'flags')])},
+                {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+                {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+                {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+                {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+                {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+                {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+                {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+                {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+                {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+                {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+                {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+                {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+                {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+                {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+                {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+                {'call': 'write', 'reason': set([('fd', 'flags')])},
+                {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+                {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+                {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'flock': [{'call': 'syncfs',
+            'reason': set([('fd', 'flags'), ('super_block', 's_flags')])},
+           {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+           {'call': 'fadvise64_64',
+            'reason': set([('fd', 'flags'),
+                           ('file', 'f_mode'),
+                           ('super_block', 's_flags')])},
+           {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+           {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+           {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+           {'call': 'writev', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+           {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+           {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+           {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+           {'call': 'remap_file_pages', 'reason': set([('file', 'f_mode')])},
+           {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+           {'call': 'read', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+           {'call': 'utime', 'reason': set([('fd', 'flags')])},
+           {'call': 'ustat', 'reason': set([('super_block', 's_flags')])},
+           {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+           {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+           {'call': 'umount', 'reason': set([('super_block', 's_flags')])},
+           {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+           {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+           {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+           {'call': 'tee', 'reason': set([('fd', 'flags')])},
+           {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+           {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+           {'call': 'connect', 'reason': set([('fd', 'flags')])},
+           {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_ctl',
+            'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+           {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+           {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+           {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+           {'call': 'accept4',
+            'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+           {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+           {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+           {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+           {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+           {'call': 'splice', 'reason': set([('fd', 'flags')])},
+           {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+           {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+           {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+           {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+           {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+           {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+           {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+           {'call': 'perf_event_open',
+            'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+           {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+           {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+           {'call': 'quotactl', 'reason': set([('super_block', 's_flags')])},
+           {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+           {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+           {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+           {'call': 'open', 'reason': set([('file', 'f_mode')])},
+           {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+           {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+           {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+           {'call': 'listen', 'reason': set([('fd', 'flags')])},
+           {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+           {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+           {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+           {'call': 'swapon',
+            'reason': set([('file', 'f_mode'), ('super_block', 's_flags')])},
+           {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+           {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+           {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+           {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+           {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+           {'call': 'readv', 'reason': set([('fd', 'flags')])},
+           {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+           {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+           {'call': 'write', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+           {'call': 'msync', 'reason': set([('file', 'f_mode')])},
+           {'call': 'open_by_handle_at', 'reason': set([('file', 'f_mode')])},
+           {'call': 'bind', 'reason': set([('fd', 'flags')])},
+           {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'fremovexattr': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+                  {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fadvise64_64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+                  {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                  {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                  {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+                  {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+                  {'call': 'read', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+                  {'call': 'mq_timedreceive',
+                   'reason': set([('fd', 'flags')])},
+                  {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                  {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+                  {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+                  {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                  {'call': 'tee', 'reason': set([('fd', 'flags')])},
+                  {'call': 'sync_file_range',
+                   'reason': set([('fd', 'flags')])},
+                  {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                  {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                  {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+                  {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+                  {'call': 'flock', 'reason': set([('fd', 'flags')])},
+                  {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                  {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+                  {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+                  {'call': 'inotify_rm_watch',
+                   'reason': set([('fd', 'flags')])},
+                  {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+                  {'call': 'inotify_add_watch',
+                   'reason': set([('fd', 'flags')])},
+                  {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                  {'call': 'splice', 'reason': set([('fd', 'flags')])},
+                  {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+                  {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                  {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+                  {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                  {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+                  {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'perf_event_open',
+                   'reason': set([('fd', 'flags')])},
+                  {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+                  {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+                  {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                  {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                  {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+                  {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+                  {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                  {'call': 'copy_file_range',
+                   'reason': set([('fd', 'flags')])},
+                  {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+                  {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+                  {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                  {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+                  {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                  {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+                  {'call': 'write', 'reason': set([('fd', 'flags')])},
+                  {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+                  {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+                  {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                  {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+                  {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'fsetxattr': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+               {'call': 'fadvise64_64', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+               {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+               {'call': 'writev', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+               {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+               {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+               {'call': 'read', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+               {'call': 'utime', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+               {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+               {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+               {'call': 'tee', 'reason': set([('fd', 'flags')])},
+               {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'connect', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+               {'call': 'flock', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+               {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+               {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('fd', 'flags')])},
+               {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+               {'call': 'splice', 'reason': set([('fd', 'flags')])},
+               {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+               {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+               {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+               {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+               {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+               {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+               {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+               {'call': 'listen', 'reason': set([('fd', 'flags')])},
+               {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+               {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+               {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'readv', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+               {'call': 'write', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+               {'call': 'bind', 'reason': set([('fd', 'flags')])},
+               {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'fstat': [{'call': 'lstat',
+            'reason': set([('__old_kernel_stat', 'st_ino'),
+                           ('__old_kernel_stat', 'st_nlink')])},
+           {'call': 'stat',
+            'reason': set([('__old_kernel_stat', 'st_ino'),
+                           ('__old_kernel_stat', 'st_nlink')])}],
+ 'fstatfs': [{'call': 'ustat',
+              'reason': set([('kstatfs', 'f_ffree'),
+                             ('kstatfs', 'f_files')])},
+             {'call': 'statfs',
+              'reason': set([('kstatfs', 'f_ffree'),
+                             ('kstatfs', 'f_files')])},
+             {'call': 'fstatfs64',
+              'reason': set([('kstatfs', 'f_ffree'),
+                             ('kstatfs', 'f_files')])},
+             {'call': 'statfs64',
+              'reason': set([('kstatfs', 'f_ffree'),
+                             ('kstatfs', 'f_files')])}],
+ 'fstatfs64': [{'call': 'ustat',
+                'reason': set([('kstatfs', 'f_ffree'),
+                               ('kstatfs', 'f_files')])},
+               {'call': 'fstatfs',
+                'reason': set([('kstatfs', 'f_ffree'),
+                               ('kstatfs', 'f_files')])},
+               {'call': 'statfs',
+                'reason': set([('kstatfs', 'f_ffree'),
+                               ('kstatfs', 'f_files')])},
+               {'call': 'statfs64',
+                'reason': set([('kstatfs', 'f_ffree'),
+                               ('kstatfs', 'f_files')])}],
+ 'ftruncate': [{'call': 'fadvise64_64',
+                'reason': set([('file', 'f_mode'), ('inode', 'i_flags')])},
+               {'call': 'mq_unlink', 'reason': set([('inode', 'i_flags')])},
+               {'call': 'swapoff',
+                'reason': set([('file', 'f_flags'),
+                               ('file', 'f_mode'),
+                               ('inode', 'i_flags')])},
+               {'call': 'fchmod', 'reason': set([('inode', 'i_flags')])},
+               {'call': 'memfd_create',
+                'reason': set([('file', 'f_flags'),
+                               ('file', 'f_mode'),
+                               ('inode', 'i_flags')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'dup3',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'readlinkat', 'reason': set([('inode', 'i_flags')])},
+               {'call': 'fchown', 'reason': set([('inode', 'i_flags')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('inode', 'i_flags')])},
+               {'call': 'socketpair',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'epoll_create1',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'epoll_ctl',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'flock',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'openat',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'uselib',
+                'reason': set([('file', 'f_flags'),
+                               ('file', 'f_mode'),
+                               ('inode', 'i_flags')])},
+               {'call': 'accept4',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'fchmodat', 'reason': set([('inode', 'i_flags')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('inode', 'i_flags')])},
+               {'call': 'shmat',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'socket',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'pipe2',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'ioctl', 'reason': set([('inode', 'i_flags')])},
+               {'call': 'perf_event_open',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'linkat', 'reason': set([('inode', 'i_flags')])},
+               {'call': 'shmdt',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'acct',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'open',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'unlink', 'reason': set([('inode', 'i_flags')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('file', 'f_flags'), ('inode', 'i_flags')])},
+               {'call': 'faccessat', 'reason': set([('inode', 'i_flags')])},
+               {'call': 'dup',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'setns',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('inode', 'i_flags')])},
+               {'call': 'shmctl',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'swapon',
+                'reason': set([('file', 'f_flags'),
+                               ('file', 'f_mode'),
+                               ('inode', 'i_flags')])},
+               {'call': 'fchownat', 'reason': set([('inode', 'i_flags')])},
+               {'call': 'eventfd2',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'mmap_pgoff',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'mq_notify', 'reason': set([('inode', 'i_flags')])},
+               {'call': 'sendfile', 'reason': set([('inode', 'i_flags')])},
+               {'call': 'mq_open',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'msync',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'unlinkat', 'reason': set([('inode', 'i_flags')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+               {'call': 'sendfile64', 'reason': set([('inode', 'i_flags')])}],
+ 'futex': [{'call': 'rt_sigtimedwait',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'fadvise64_64',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'mq_unlink',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'swapoff',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'fchmod',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'memfd_create',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'readlinkat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'io_getevents',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'fchown',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'utime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'semtimedop',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'settimeofday',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'timerfd_gettime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'pselect6',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'uselib',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'fchmodat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'inotify_add_watch',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'timer_settime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'ftruncate',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'timer_gettime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'ioctl',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'linkat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'stime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'futimesat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'poll',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'select',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'unlink',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'nanosleep',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'mq_getsetattr',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'faccessat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'swapon',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'epoll_wait',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'fchownat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'timerfd_settime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'mq_notify',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sendfile',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'clock_nanosleep',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'unlinkat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'recvmmsg',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sendfile64',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'ppoll',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])}],
+ 'futimesat': [{'call': 'rt_sigtimedwait',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fadvise64_64',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'mq_unlink',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'swapoff', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fchmod', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'memfd_create',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'readlinkat',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'io_getevents',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fchown', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'utime', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'semtimedop',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'settimeofday',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'timerfd_gettime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'adjtimex', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'pselect6', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'uselib', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'waitid', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'getitimer', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'fchmodat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'timer_settime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'ftruncate',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'timer_gettime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'ioctl', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'linkat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'stime', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'poll', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'select',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'unlink', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'nanosleep',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'faccessat',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'swapon', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'wait4', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'epoll_wait',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fchownat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'getrusage', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'timerfd_settime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'setitimer', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'mq_notify',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'sendfile', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'clock_nanosleep',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'unlinkat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'clock_adjtime',
+                'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'alarm', 'reason': set([('timeval', 'tv_usec')])},
+               {'call': 'futex', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'recvmmsg', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'sendfile64',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'ppoll',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timeval', 'tv_usec')])}],
+ 'get_mempolicy': [{'call': 'keyctl',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'rt_sigtimedwait',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'msgrcv',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'kill',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'sched_getaffinity',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'sched_setparam',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'ioprio_set',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'getppid',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'capget',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'sched_setaffinity',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'signal',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'semtimedop',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'umount',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'sched_rr_get_interval',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'rt_sigprocmask',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'setsid',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'sigaltstack',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'sched_setattr',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'migrate_pages',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'getitimer',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'setpgid',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'getsid',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'set_mempolicy',
+                    'reason': set([('mempolicy', 'mode'),
+                                   ('task_struct', 'il_prev')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'rt_sigaction',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'getpgid',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'getpriority',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'sigaction',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'setns',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'fork',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'get_robust_list',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'sched_getscheduler',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'ptrace',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'sched_getattr',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'getrusage',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'sched_setscheduler',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'setitimer',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'ioprio_get',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'vfork',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'mbind', 'reason': set([('mempolicy', 'mode')])},
+                   {'call': 'prctl',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'move_pages',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'setpriority',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'clone',
+                    'reason': set([('task_struct', 'il_prev')])},
+                   {'call': 'sched_getparam',
+                    'reason': set([('task_struct', 'il_prev')])}],
+ 'getdents': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+              {'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+              {'call': 'iopl', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fadvise64_64', 'reason': set([('fd', 'flags')])},
+              {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+              {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'writev', 'reason': set([('fd', 'flags')])},
+              {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+              {'call': 'sched_setparam',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+              {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+              {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+              {'call': 'ioprio_set',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'read', 'reason': set([('fd', 'flags')])},
+              {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+              {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('fd', 'flags'), ('mm_segment_t', 'seg')])},
+              {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'utime', 'reason': set([('fd', 'flags')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+              {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+              {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'semtimedop',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+              {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'tee', 'reason': set([('fd', 'flags')])},
+              {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+              {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+              {'call': 'connect', 'reason': set([('fd', 'flags')])},
+              {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+              {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+              {'call': 'flock', 'reason': set([('fd', 'flags')])},
+              {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+              {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+              {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sigaltstack',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sched_setattr',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+              {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+              {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+              {'call': 'migrate_pages',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'getitimer', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+              {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+              {'call': 'splice', 'reason': set([('fd', 'flags')])},
+              {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+              {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+              {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+              {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+              {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+              {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+              {'call': 'prlimit64', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+              {'call': 'perf_event_open',
+               'reason': set([('fd', 'flags'), ('mm_segment_t', 'seg')])},
+              {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+              {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+              {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+              {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+              {'call': 'getpriority',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+              {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+              {'call': 'listen', 'reason': set([('fd', 'flags')])},
+              {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'get_robust_list',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('fd', 'flags'), ('mm_segment_t', 'seg')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+              {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+              {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+              {'call': 'sched_getattr',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'getrusage', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'setitimer', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'ioprio_get',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+              {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+              {'call': 'readv', 'reason': set([('fd', 'flags')])},
+              {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'move_pages',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+              {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+              {'call': 'write', 'reason': set([('fd', 'flags')])},
+              {'call': 'setpriority',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+              {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+              {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sched_getparam',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'bind', 'reason': set([('fd', 'flags')])},
+              {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'getdents64': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+                {'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'rt_sigtimedwait',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+                {'call': 'iopl', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fadvise64_64', 'reason': set([('fd', 'flags')])},
+                {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+                {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+                {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                {'call': 'sched_getaffinity',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                {'call': 'sched_setparam',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+                {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+                {'call': 'ioprio_set',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'read', 'reason': set([('fd', 'flags')])},
+                {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+                {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'mq_timedreceive',
+                 'reason': set([('fd', 'flags'), ('mm_segment_t', 'seg')])},
+                {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                {'call': 'sched_setaffinity',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+                {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'semtimedop',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                {'call': 'sched_rr_get_interval',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'tee', 'reason': set([('fd', 'flags')])},
+                {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+                {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+                {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+                {'call': 'flock', 'reason': set([('fd', 'flags')])},
+                {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                {'call': 'rt_sigprocmask',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+                {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sigaltstack',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sched_setattr',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+                {'call': 'inotify_rm_watch',
+                 'reason': set([('fd', 'flags')])},
+                {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+                {'call': 'migrate_pages',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'getitimer',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'inotify_add_watch',
+                 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                {'call': 'splice', 'reason': set([('fd', 'flags')])},
+                {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+                {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+                {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+                {'call': 'prlimit64',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('fd', 'flags'), ('mm_segment_t', 'seg')])},
+                {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+                {'call': 'rt_sigaction',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+                {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+                {'call': 'getpriority',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sigaction',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+                {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'get_robust_list',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+                {'call': 'mq_timedsend',
+                 'reason': set([('fd', 'flags'), ('mm_segment_t', 'seg')])},
+                {'call': 'sched_getscheduler',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+                {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+                {'call': 'sched_getattr',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'getrusage',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sched_setscheduler',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'setitimer',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'ioprio_get',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+                {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'move_pages',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+                {'call': 'write', 'reason': set([('fd', 'flags')])},
+                {'call': 'setpriority',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+                {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+                {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'sched_getparam',
+                 'reason': set([('mm_segment_t', 'seg')])},
+                {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+                {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'getgroups16': [{'call': 'setgroups16',
+                  'reason': set([('group_info', 'ngroups')])},
+                 {'call': 'setgroups',
+                  'reason': set([('group_info', 'ngroups')])}],
+ 'getitimer': [{'call': 'timer_create',
+                'reason': set([('signal_struct', 'it_real_incr')])},
+               {'call': 'exit_group',
+                'reason': set([('signal_struct', 'it_real_incr')])},
+               {'call': 'setitimer',
+                'reason': set([('signal_struct', 'it_real_incr')])}],
+ 'getrlimit': [{'call': 'setrlimit',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max')])},
+               {'call': 'old_getrlimit',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max')])},
+               {'call': 'prlimit64',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max')])}],
+ 'getrusage': [{'call': 'timer_create',
+                'reason': set([('signal_struct', 'maxrss')])},
+               {'call': 'exit_group',
+                'reason': set([('signal_struct', 'maxrss')])}],
+ 'getsockopt': [{'call': 'accept4',
+                 'reason': set([('proto_ops', 'compat_getsockopt')])}],
+ 'init_module': [{'call': 'delete_module',
+                  'reason': set([('module', 'args'),
+                                 ('module', 'num_kp'),
+                                 ('module_layout', 'base'),
+                                 ('module_layout', 'size')])},
+                 {'call': 'finit_module',
+                  'reason': set([('load_info', 'len'),
+                                 ('load_info', 'num_debug'),
+                                 ('module', 'args'),
+                                 ('module', 'num_kp'),
+                                 ('module_layout', 'base'),
+                                 ('module_layout', 'size')])}],
+ 'inotify_add_watch': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+                       {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+                       {'call': 'fadvise64_64',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'pwritev64',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'fremovexattr',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'readahead',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                       {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                       {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                       {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+                       {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                       {'call': 'signalfd4',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'read', 'reason': set([('fd', 'flags')])},
+                       {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+                       {'call': 'mq_timedreceive',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                       {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                       {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+                       {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                       {'call': 'fsetxattr',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                       {'call': 'tee', 'reason': set([('fd', 'flags')])},
+                       {'call': 'sync_file_range',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                       {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                       {'call': 'getsockname',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'epoll_ctl',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'flock', 'reason': set([('fd', 'flags')])},
+                       {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                       {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                       {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+                       {'call': 'old_readdir',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'inotify_rm_watch',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'utimensat',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                       {'call': 'splice', 'reason': set([('fd', 'flags')])},
+                       {'call': 'ftruncate',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                       {'call': 'getpeername',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'setsockopt',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                       {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+                       {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                       {'call': 'perf_event_open',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'pwritev64v2',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'futimesat',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                       {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                       {'call': 'getsockopt',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'mq_getsetattr',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'fdatasync',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'getdents64',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                       {'call': 'copy_file_range',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'mq_timedsend',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'fgetxattr',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                       {'call': 'fallocate',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'epoll_wait',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                       {'call': 'preadv64v2',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                       {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                       {'call': 'fstatfs64',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'write', 'reason': set([('fd', 'flags')])},
+                       {'call': 'mq_notify',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+                       {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                       {'call': 'flistxattr',
+                        'reason': set([('fd', 'flags')])},
+                       {'call': 'sendfile64',
+                        'reason': set([('fd', 'flags')])}],
+ 'inotify_rm_watch': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+                      {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+                      {'call': 'fadvise64_64',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+                      {'call': 'fremovexattr',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+                      {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                      {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                      {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                      {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+                      {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                      {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+                      {'call': 'read', 'reason': set([('fd', 'flags')])},
+                      {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+                      {'call': 'mq_timedreceive',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                      {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                      {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+                      {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                      {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+                      {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                      {'call': 'tee', 'reason': set([('fd', 'flags')])},
+                      {'call': 'sync_file_range',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                      {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                      {'call': 'getsockname',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+                      {'call': 'flock', 'reason': set([('fd', 'flags')])},
+                      {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                      {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                      {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+                      {'call': 'old_readdir',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+                      {'call': 'inotify_add_watch',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                      {'call': 'splice', 'reason': set([('fd', 'flags')])},
+                      {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+                      {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                      {'call': 'getpeername',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'setsockopt',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                      {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+                      {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                      {'call': 'perf_event_open',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'pwritev64v2',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+                      {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                      {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                      {'call': 'getsockopt',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'mq_getsetattr',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+                      {'call': 'getdents64',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                      {'call': 'copy_file_range',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'mq_timedsend',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+                      {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                      {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+                      {'call': 'epoll_wait',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                      {'call': 'preadv64v2',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                      {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                      {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+                      {'call': 'write', 'reason': set([('fd', 'flags')])},
+                      {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+                      {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+                      {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                      {'call': 'flistxattr',
+                       'reason': set([('fd', 'flags')])},
+                      {'call': 'sendfile64',
+                       'reason': set([('fd', 'flags')])}],
+ 'io_cancel': [{'call': 'io_getevents',
+                'reason': set([('kioctx', 'user_id'),
+                               ('kioctx_table', 'nr')])},
+               {'call': 'io_submit', 'reason': set([('kioctx', 'user_id')])},
+               {'call': 'io_setup',
+                'reason': set([('kioctx', 'user_id'),
+                               ('kioctx_table', 'nr')])},
+               {'call': 'io_destroy',
+                'reason': set([('kioctx', 'user_id'),
+                               ('kioctx_table', 'nr')])}],
+ 'io_destroy': [{'call': 'io_getevents',
+                 'reason': set([('kioctx', 'max_reqs'),
+                                ('kioctx', 'mmap_base'),
+                                ('kioctx', 'mmap_size'),
+                                ('kioctx', 'user_id'),
+                                ('kioctx_table', 'nr')])},
+                {'call': 'io_submit',
+                 'reason': set([('kioctx', 'max_reqs'),
+                                ('kioctx', 'mmap_base'),
+                                ('kioctx', 'mmap_size'),
+                                ('kioctx', 'user_id')])},
+                {'call': 'io_setup',
+                 'reason': set([('kioctx', 'max_reqs'),
+                                ('kioctx', 'mmap_base'),
+                                ('kioctx', 'mmap_size'),
+                                ('kioctx', 'user_id'),
+                                ('kioctx_table', 'nr')])},
+                {'call': 'io_cancel',
+                 'reason': set([('kioctx', 'max_reqs'),
+                                ('kioctx', 'mmap_base'),
+                                ('kioctx', 'mmap_size'),
+                                ('kioctx', 'user_id'),
+                                ('kioctx_table', 'nr')])}],
+ 'io_getevents': [{'call': 'keyctl',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'rt_sigtimedwait',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'msgrcv',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'kill',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_getaffinity',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_setparam',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'ioprio_set',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'getppid',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'mq_timedreceive',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'capget',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_setaffinity',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'signal',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'semtimedop',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'umount',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_rr_get_interval',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'rt_sigprocmask',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'setsid',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sigaltstack',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_setattr',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'migrate_pages',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'getitimer',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'setpgid',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'getsid',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'prlimit64',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'perf_event_open',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'rt_sigaction',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'getpgid',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'getpriority',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sigaction',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'setns',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'fork',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'io_submit',
+                   'reason': set([('kioctx', 'user_id')])},
+                  {'call': 'get_robust_list',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'mq_timedsend',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_getscheduler',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'ptrace',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_getattr',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'getrusage',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_setscheduler',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'setitimer',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'ioprio_get',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'vfork',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'io_setup',
+                   'reason': set([('kioctx', 'user_id'),
+                                  ('kioctx_table', 'nr')])},
+                  {'call': 'io_destroy',
+                   'reason': set([('kioctx', 'user_id'),
+                                  ('kioctx_table', 'nr')])},
+                  {'call': 'prctl',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'move_pages',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'setpriority',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'clone',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'sched_getparam',
+                   'reason': set([('task_struct', 'timer_slack_ns')])},
+                  {'call': 'io_cancel',
+                   'reason': set([('kioctx', 'user_id'),
+                                  ('kioctx_table', 'nr')])}],
+ 'io_setup': [{'call': 'io_getevents',
+               'reason': set([('kioctx', 'max_reqs'),
+                              ('kioctx', 'mmap_base'),
+                              ('kioctx', 'mmap_size'),
+                              ('kioctx', 'req_batch')])},
+              {'call': 'io_submit',
+               'reason': set([('kioctx', 'max_reqs'),
+                              ('kioctx', 'mmap_base'),
+                              ('kioctx', 'mmap_size'),
+                              ('kioctx', 'req_batch')])},
+              {'call': 'io_destroy',
+               'reason': set([('kioctx', 'max_reqs'),
+                              ('kioctx', 'mmap_base'),
+                              ('kioctx', 'mmap_size'),
+                              ('kioctx', 'req_batch')])},
+              {'call': 'io_cancel',
+               'reason': set([('kioctx', 'max_reqs'),
+                              ('kioctx', 'mmap_base'),
+                              ('kioctx', 'mmap_size'),
+                              ('kioctx', 'req_batch')])}],
+ 'io_submit': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'iopl', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setparam',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ioprio_set',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'semtimedop',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sigaltstack',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setattr',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'migrate_pages',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getitimer',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'prlimit64',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'perf_event_open',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getpriority',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sigaction',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'get_robust_list',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getattr',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getrusage',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setitimer',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ioprio_get',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'move_pages',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setpriority',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getparam',
+                'reason': set([('mm_segment_t', 'seg')])}],
+ 'ioctl': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+           {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+           {'call': 'fadvise64_64', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+           {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+           {'call': 'writev', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+           {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+           {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+           {'call': 'read', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+           {'call': 'utime', 'reason': set([('fd', 'flags')])},
+           {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+           {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+           {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+           {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+           {'call': 'tee', 'reason': set([('fd', 'flags')])},
+           {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+           {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+           {'call': 'connect', 'reason': set([('fd', 'flags')])},
+           {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+           {'call': 'flock', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+           {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+           {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+           {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+           {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+           {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+           {'call': 'splice', 'reason': set([('fd', 'flags')])},
+           {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+           {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+           {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+           {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+           {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+           {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+           {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+           {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+           {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+           {'call': 'listen', 'reason': set([('fd', 'flags')])},
+           {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+           {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+           {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+           {'call': 'readv', 'reason': set([('fd', 'flags')])},
+           {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+           {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+           {'call': 'write', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+           {'call': 'bind', 'reason': set([('fd', 'flags')])},
+           {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'ioperm': [{'call': 'keyctl',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'iopl',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'msgrcv',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'kill',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_setparam',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'ioprio_set',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'getppid',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'capget',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'signal',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'semtimedop',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'umount',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'setsid',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sigaltstack',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_setattr',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'migrate_pages',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'getitimer',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'setpgid',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'getsid',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'prlimit64',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'perf_event_open',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'getpgid',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'getpriority',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sigaction',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'setns',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'fork',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'get_robust_list',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'ptrace',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_getattr',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'getrusage',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'setitimer',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'ioprio_get',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'vfork',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'prctl',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'move_pages',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'setpriority',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'clone',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])},
+            {'call': 'sched_getparam',
+             'reason': set([('thread_struct', 'io_bitmap_ptr')])}],
+ 'keyctl': [{'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'pid')])},
+            {'call': 'msgrcv', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'pid')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'pid')])},
+            {'call': 'ioprio_set', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'getppid', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'pid')])},
+            {'call': 'capget', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'pid')])},
+            {'call': 'signal', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'semtimedop', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'umount', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'pid')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'pid')])},
+            {'call': 'setsid', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'sigaltstack', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'pid')])},
+            {'call': 'migrate_pages',
+             'reason': set([('task_struct', 'pid')])},
+            {'call': 'getitimer', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'setpgid', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'getsid', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'prlimit64', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'pid')])},
+            {'call': 'rt_sigaction', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'request_key',
+             'reason': set([('key', 'description'),
+                            ('key', 'perm'),
+                            ('key', 'quotalen'),
+                            ('key', 'serial'),
+                            ('key_type', 'name'),
+                            ('key_type', 'read')])},
+            {'call': 'getpgid', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'getpriority', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'sigaction', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'setns', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'pid')])},
+            {'call': 'mq_timedsend', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'pid')])},
+            {'call': 'ptrace', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'pid')])},
+            {'call': 'getrusage', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'pid')])},
+            {'call': 'setitimer', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'ioprio_get', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'vfork', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'prctl', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'move_pages', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'setpriority', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'clone', 'reason': set([('task_struct', 'pid')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'pid')])}],
+ 'llseek': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+            {'call': 'fadvise64_64', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+            {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+            {'call': 'writev', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+            {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+            {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+            {'call': 'read', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+            {'call': 'utime', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+            {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+            {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+            {'call': 'tee', 'reason': set([('fd', 'flags')])},
+            {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'connect', 'reason': set([('fd', 'flags')])},
+            {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+            {'call': 'flock', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+            {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+            {'call': 'splice', 'reason': set([('fd', 'flags')])},
+            {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+            {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+            {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+            {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+            {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+            {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+            {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+            {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+            {'call': 'listen', 'reason': set([('fd', 'flags')])},
+            {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+            {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'readv', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+            {'call': 'write', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+            {'call': 'bind', 'reason': set([('fd', 'flags')])},
+            {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'lseek': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+           {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+           {'call': 'fadvise64_64', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+           {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+           {'call': 'writev', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+           {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+           {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+           {'call': 'read', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+           {'call': 'utime', 'reason': set([('fd', 'flags')])},
+           {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+           {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+           {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+           {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+           {'call': 'tee', 'reason': set([('fd', 'flags')])},
+           {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+           {'call': 'connect', 'reason': set([('fd', 'flags')])},
+           {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+           {'call': 'flock', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+           {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+           {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+           {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+           {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+           {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+           {'call': 'splice', 'reason': set([('fd', 'flags')])},
+           {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+           {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+           {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+           {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+           {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+           {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+           {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+           {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+           {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+           {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+           {'call': 'listen', 'reason': set([('fd', 'flags')])},
+           {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+           {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+           {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+           {'call': 'readv', 'reason': set([('fd', 'flags')])},
+           {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+           {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+           {'call': 'write', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+           {'call': 'bind', 'reason': set([('fd', 'flags')])},
+           {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'lstat': [{'call': 'stat',
+            'reason': set([('__old_kernel_stat', 'st_ino'),
+                           ('__old_kernel_stat', 'st_nlink')])},
+           {'call': 'fstat',
+            'reason': set([('__old_kernel_stat', 'st_ino'),
+                           ('__old_kernel_stat', 'st_nlink')])}],
+ 'madvise': [{'call': 'remap_file_pages',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'shmdt',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'brk',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'get_mempolicy',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'munlockall',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'pkey_mprotect',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'mprotect',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'mremap',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'prctl',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'munlock',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'mincore',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'msync',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'mlockall',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])}],
+ 'migrate_pages': [{'call': 'keyctl',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'rt_sigtimedwait',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'iopl', 'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'msgrcv',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_getaffinity',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_setparam',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'ioprio_set',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getppid',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'ioperm',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'capget',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_setaffinity',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'signal',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'semtimedop',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'umount',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_rr_get_interval',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'rt_sigprocmask',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'setsid',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sigaltstack',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_setattr',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getitimer',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'setpgid',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getsid',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'rt_sigaction',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getpgid',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getpriority',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sigaction',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'setns',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'get_robust_list',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_getscheduler',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'ptrace',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_getattr',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getrusage',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_setscheduler',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'setitimer',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'ioprio_get',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'vfork',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'prctl',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'move_pages',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'setpriority',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'clone',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_getparam',
+                    'reason': set([('mm_segment_t', 'seg')])}],
+ 'mincore': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'rt_sigtimedwait',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'iopl', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sched_getaffinity',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sched_setparam',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'ioprio_set', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sched_setaffinity',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'semtimedop', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sched_rr_get_interval',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'rt_sigprocmask',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sigaltstack',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sched_setattr',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'migrate_pages',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'getitimer', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'prlimit64', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'perf_event_open',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'shmdt',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'rt_sigaction',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'brk', 'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'getpriority',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'get_mempolicy',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'get_robust_list',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'mq_timedsend',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sched_getscheduler',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'munlockall',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'pkey_mprotect',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'madvise',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'sched_getattr',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'getrusage', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sched_setscheduler',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'setitimer', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'ioprio_get', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'mprotect',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'mremap',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'prctl',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'move_pages', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'munlock',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'setpriority',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'msync',
+              'reason': set([('vm_area_struct', 'vm_start')])},
+             {'call': 'sched_getparam',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'mlockall',
+              'reason': set([('vm_area_struct', 'vm_start')])}],
+ 'mkdirat': [{'call': 'syncfs', 'reason': set([('super_block', 's_flags')])},
+             {'call': 'fadvise64_64',
+              'reason': set([('super_block', 's_flags')])},
+             {'call': 'ustat', 'reason': set([('super_block', 's_flags')])},
+             {'call': 'umount', 'reason': set([('super_block', 's_flags')])},
+             {'call': 'quotactl',
+              'reason': set([('super_block', 's_flags')])},
+             {'call': 'swapon', 'reason': set([('super_block', 's_flags')])}],
+ 'mknodat': [{'call': 'syncfs', 'reason': set([('super_block', 's_flags')])},
+             {'call': 'fadvise64_64',
+              'reason': set([('super_block', 's_flags')])},
+             {'call': 'ustat', 'reason': set([('super_block', 's_flags')])},
+             {'call': 'umount', 'reason': set([('super_block', 's_flags')])},
+             {'call': 'quotactl',
+              'reason': set([('super_block', 's_flags')])},
+             {'call': 'swapon', 'reason': set([('super_block', 's_flags')])}],
+ 'mlockall': [{'call': 'keyctl',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'msgrcv',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'kill',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'swapoff', 'reason': set([('mm_struct', 'total_vm')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ioprio_set',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'personality',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'io_getevents',
+               'reason': set([('mm_struct', 'total_vm')])},
+              {'call': 'getppid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'capget',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'signal',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'umount',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setsid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'migrate_pages',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getitimer',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setpgid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getsid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'prlimit64',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'shmdt',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getpgid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'brk',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'getpriority',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sigaction',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setns',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'fork',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'get_mempolicy',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ptrace',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'munlockall',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'pkey_mprotect',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'madvise',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getrusage',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setitimer',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ioprio_get',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'vfork',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'io_setup',
+               'reason': set([('mm_struct', 'total_vm')])},
+              {'call': 'mprotect',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'mremap',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'io_destroy',
+               'reason': set([('mm_struct', 'total_vm')])},
+              {'call': 'mbind', 'reason': set([('mm_struct', 'total_vm')])},
+              {'call': 'prctl',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('task_struct', 'personality'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'move_pages',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('task_struct', 'personality')])},
+              {'call': 'modify_ldt',
+               'reason': set([('mm_struct', 'total_vm')])},
+              {'call': 'munlock',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'setpriority',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'mincore',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'clone',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'msync',
+               'reason': set([('mm_struct', 'total_vm'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'io_cancel',
+               'reason': set([('mm_struct', 'total_vm')])}],
+ 'modify_ldt': [{'call': 'get_thread_area',
+                 'reason': set([('user_desc', 'base_addr'),
+                                ('user_desc', 'contents'),
+                                ('user_desc', 'entry_number'),
+                                ('user_desc', 'limit'),
+                                ('user_desc', 'limit_in_pages'),
+                                ('user_desc', 'read_exec_only'),
+                                ('user_desc', 'seg_32bit'),
+                                ('user_desc', 'seg_not_present'),
+                                ('user_desc', 'useable')])},
+                {'call': 'set_thread_area',
+                 'reason': set([('user_desc', 'base_addr'),
+                                ('user_desc', 'contents'),
+                                ('user_desc', 'entry_number'),
+                                ('user_desc', 'limit'),
+                                ('user_desc', 'limit_in_pages'),
+                                ('user_desc', 'read_exec_only'),
+                                ('user_desc', 'seg_32bit'),
+                                ('user_desc', 'seg_not_present'),
+                                ('user_desc', 'useable')])}],
+ 'mount': [{'call': 'keyctl',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigtimedwait',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'msgrcv',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'kill', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getaffinity',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setparam',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ioprio_set',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'personality',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getppid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'capget',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setaffinity',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'signal',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'semtimedop',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'umount',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigprocmask',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setsid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sigaltstack',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setattr',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'migrate_pages',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getitimer',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setpgid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getsid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'prlimit64',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'perf_event_open',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigaction',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getpgid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getpriority',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sigaction',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setns', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'fork', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'get_robust_list',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getscheduler',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ptrace',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getattr',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getrusage',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setscheduler',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setitimer',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ioprio_get',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'vfork', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'prctl', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'move_pages',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setpriority',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'clone', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getparam',
+            'reason': set([('task_struct', 'personality')])}],
+ 'mprotect': [{'call': 'keyctl',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'msgrcv',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'kill',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ioprio_set',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'personality',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'getppid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'capget',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'signal',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'umount',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setsid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'migrate_pages',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getitimer',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setpgid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getsid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'prlimit64',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'shmdt',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getpgid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'brk',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'getpriority',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sigaction',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setns',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'fork',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'get_mempolicy',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ptrace',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'munlockall',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'pkey_mprotect',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'madvise',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getrusage',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setitimer',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ioprio_get',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'vfork',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'mremap',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'prctl',
+               'reason': set([('task_struct', 'personality'),
+                              ('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'move_pages',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'munlock',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'setpriority',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'mincore',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'clone',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'msync',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'mlockall',
+               'reason': set([('vm_area_struct', 'vm_end'),
+                              ('vm_area_struct', 'vm_flags'),
+                              ('vm_area_struct', 'vm_start')])}],
+ 'mq_getsetattr': [{'call': 'mq_timedreceive',
+                    'reason': set([('mq_attr', 'mq_flags')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('mq_attr', 'mq_flags')])},
+                   {'call': 'mq_notify',
+                    'reason': set([('mq_attr', 'mq_flags')])},
+                   {'call': 'mq_open',
+                    'reason': set([('mq_attr', 'mq_flags')])}],
+ 'mq_notify': [{'call': 'rt_sigtimedwait',
+                'reason': set([('sigval', 'sival_ptr')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('sigevent', 'sigev_notify'),
+                               ('sigevent', 'sigev_signo'),
+                               ('sigval', 'sival_ptr')])},
+               {'call': 'timer_create',
+                'reason': set([('sigevent', 'sigev_notify'),
+                               ('sigevent', 'sigev_signo'),
+                               ('sigval', 'sival_ptr')])},
+               {'call': 'rt_sigqueueinfo',
+                'reason': set([('sigval', 'sival_ptr')])},
+               {'call': 'tgkill', 'reason': set([('sigval', 'sival_ptr')])},
+               {'call': 'rt_tgsigqueueinfo',
+                'reason': set([('sigval', 'sival_ptr')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('sigevent', 'sigev_notify'),
+                               ('sigevent', 'sigev_signo'),
+                               ('sigval', 'sival_ptr')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('sigevent', 'sigev_notify'),
+                               ('sigevent', 'sigev_signo'),
+                               ('sigval', 'sival_ptr')])},
+               {'call': 'rt_sigreturn',
+                'reason': set([('sigval', 'sival_ptr')])},
+               {'call': 'tkill', 'reason': set([('sigval', 'sival_ptr')])}],
+ 'mq_open': [{'call': 'sysfs', 'reason': set([('filename', 'name')])},
+             {'call': 'mq_unlink', 'reason': set([('filename', 'name')])},
+             {'call': 'swapoff', 'reason': set([('filename', 'name')])},
+             {'call': 'openat', 'reason': set([('filename', 'name')])},
+             {'call': 'uselib', 'reason': set([('filename', 'name')])},
+             {'call': 'renameat2', 'reason': set([('filename', 'name')])},
+             {'call': 'symlinkat', 'reason': set([('filename', 'name')])},
+             {'call': 'quotactl', 'reason': set([('filename', 'name')])},
+             {'call': 'acct', 'reason': set([('filename', 'name')])},
+             {'call': 'open', 'reason': set([('filename', 'name')])},
+             {'call': 'unlink', 'reason': set([('filename', 'name')])},
+             {'call': 'rmdir', 'reason': set([('filename', 'name')])},
+             {'call': 'swapon', 'reason': set([('filename', 'name')])},
+             {'call': 'unlinkat', 'reason': set([('filename', 'name')])}],
+ 'mq_timedreceive': [{'call': 'msgrcv', 'reason': set([('msg_msg', 'm_ts')])},
+                     {'call': 'fadvise64_64',
+                      'reason': set([('file', 'f_mode')])},
+                     {'call': 'swapoff',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'memfd_create',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'remap_file_pages',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'dup3',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'socketpair',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'epoll_create1',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'epoll_ctl',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'flock',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'openat',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'uselib',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'accept4',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'shmat',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'socket',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'pipe2',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'perf_event_open',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'shmdt',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'acct',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'open',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'mq_getsetattr',
+                      'reason': set([('file', 'f_flags'),
+                                     ('mq_attr', 'mq_curmsgs'),
+                                     ('mq_attr', 'mq_msgsize')])},
+                     {'call': 'dup',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'setns',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('mq_attr', 'mq_curmsgs'),
+                                     ('mq_attr', 'mq_msgsize'),
+                                     ('msg_msg', 'm_ts')])},
+                     {'call': 'shmctl',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'swapon',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'eventfd2',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'mmap_pgoff',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'msgsnd', 'reason': set([('msg_msg', 'm_ts')])},
+                     {'call': 'mq_notify',
+                      'reason': set([('mq_attr', 'mq_curmsgs'),
+                                     ('mq_attr', 'mq_msgsize')])},
+                     {'call': 'mq_open',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode'),
+                                     ('mq_attr', 'mq_curmsgs'),
+                                     ('mq_attr', 'mq_msgsize')])},
+                     {'call': 'msync',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])},
+                     {'call': 'open_by_handle_at',
+                      'reason': set([('file', 'f_flags'),
+                                     ('file', 'f_mode')])}],
+ 'mq_timedsend': [{'call': 'fadvise64_64',
+                   'reason': set([('file', 'f_mode')])},
+                  {'call': 'swapoff',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'memfd_create',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'remap_file_pages',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'dup3',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'mq_timedreceive',
+                   'reason': set([('mq_attr', 'mq_curmsgs'),
+                                  ('mq_attr', 'mq_maxmsg'),
+                                  ('mq_attr', 'mq_msgsize')])},
+                  {'call': 'socketpair',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'epoll_create1',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'epoll_ctl',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'flock',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'openat',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'uselib',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'accept4',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'shmat',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'socket',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'pipe2',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'perf_event_open',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'shmdt',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'acct',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'open',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'mq_getsetattr',
+                   'reason': set([('file', 'f_flags'),
+                                  ('mq_attr', 'mq_curmsgs'),
+                                  ('mq_attr', 'mq_maxmsg'),
+                                  ('mq_attr', 'mq_msgsize')])},
+                  {'call': 'dup',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'setns',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'shmctl',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'swapon',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'eventfd2',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'mmap_pgoff',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'mq_notify',
+                   'reason': set([('mq_attr', 'mq_curmsgs'),
+                                  ('mq_attr', 'mq_maxmsg'),
+                                  ('mq_attr', 'mq_msgsize')])},
+                  {'call': 'mq_open',
+                   'reason': set([('file', 'f_flags'),
+                                  ('file', 'f_mode'),
+                                  ('mq_attr', 'mq_curmsgs'),
+                                  ('mq_attr', 'mq_maxmsg'),
+                                  ('mq_attr', 'mq_msgsize')])},
+                  {'call': 'msync',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+                  {'call': 'open_by_handle_at',
+                   'reason': set([('file', 'f_flags'), ('file', 'f_mode')])}],
+ 'mremap': [{'call': 'keyctl',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'msgrcv',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'personality')])},
+            {'call': 'swapoff', 'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'ioprio_set',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'personality',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'remap_file_pages',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'io_getevents',
+             'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'getppid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'capget',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'signal',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'semtimedop',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'umount',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'setsid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sigaltstack',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'migrate_pages',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('task_struct', 'personality')])},
+            {'call': 'getitimer',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'setpgid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'getsid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'prlimit64',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'shmdt',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'getpgid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'brk',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'getpriority',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sigaction',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'setns',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'personality')])},
+            {'call': 'get_mempolicy',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'ptrace',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'munlockall',
+             'reason': set([('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'pkey_mprotect',
+             'reason': set([('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'madvise',
+             'reason': set([('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'getrusage',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('task_struct', 'personality')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'setitimer',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'ioprio_get',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'vfork',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'io_setup', 'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'mprotect',
+             'reason': set([('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'io_destroy',
+             'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'mbind', 'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'prctl',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('task_struct', 'personality'),
+                            ('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'move_pages',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('task_struct', 'personality')])},
+            {'call': 'modify_ldt',
+             'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'munlock',
+             'reason': set([('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'setpriority',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'mincore',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'clone',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'msync',
+             'reason': set([('mm_struct', 'map_count'),
+                            ('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'io_cancel',
+             'reason': set([('mm_struct', 'map_count')])},
+            {'call': 'mlockall',
+             'reason': set([('vm_area_struct', 'vm_end'),
+                            ('vm_area_struct', 'vm_flags'),
+                            ('vm_area_struct', 'vm_pgoff'),
+                            ('vm_area_struct', 'vm_start')])}],
+ 'msgctl': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'iopl', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'msgrcv',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb'),
+                            ('mm_segment_t', 'seg')])},
+            {'call': 'mq_unlink',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'msgget',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setparam',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioprio_set', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'semtimedop',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb'),
+                            ('mm_segment_t', 'seg')])},
+            {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'semctl',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'shmget',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sigaltstack', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setattr',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'migrate_pages',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getitimer', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'semget',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'shmat',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'prlimit64', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'perf_event_open',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getpriority', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setns',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb'),
+                            ('mm_segment_t', 'seg')])},
+            {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'get_robust_list',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'shmctl',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'sched_getattr',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getrusage', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setitimer', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioprio_get', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'move_pages', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'msgsnd',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'setpriority', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'mq_open',
+             'reason': set([('ipc_namespace', 'msg_ctlmnb')])},
+            {'call': 'sched_getparam',
+             'reason': set([('mm_segment_t', 'seg')])}],
+ 'msgrcv': [{'call': 'mq_timedreceive', 'reason': set([('msg_msg', 'm_ts')])},
+            {'call': 'mq_timedsend', 'reason': set([('msg_msg', 'm_ts')])},
+            {'call': 'msgsnd', 'reason': set([('msg_msg', 'm_ts')])}],
+ 'msgsnd': [{'call': 'msgrcv',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'mq_unlink',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'msgget',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'semtimedop',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'semctl',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'shmget',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'msgctl',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'semget',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'shmat',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'setns',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'shmctl',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])},
+            {'call': 'mq_open',
+             'reason': set([('ipc_namespace', 'msg_ctlmax')])}],
+ 'msync': [{'call': 'remap_file_pages',
+            'reason': set([('vm_area_struct', 'vm_flags'),
+                           ('vm_area_struct', 'vm_start')])},
+           {'call': 'shmdt',
+            'reason': set([('vm_area_struct', 'vm_flags'),
+                           ('vm_area_struct', 'vm_start')])},
+           {'call': 'brk',
+            'reason': set([('vm_area_struct', 'vm_flags'),
+                           ('vm_area_struct', 'vm_start')])},
+           {'call': 'get_mempolicy',
+            'reason': set([('vm_area_struct', 'vm_flags'),
+                           ('vm_area_struct', 'vm_start')])},
+           {'call': 'munlockall',
+            'reason': set([('vm_area_struct', 'vm_flags'),
+                           ('vm_area_struct', 'vm_start')])},
+           {'call': 'pkey_mprotect',
+            'reason': set([('vm_area_struct', 'vm_flags'),
+                           ('vm_area_struct', 'vm_start')])},
+           {'call': 'madvise',
+            'reason': set([('vm_area_struct', 'vm_flags'),
+                           ('vm_area_struct', 'vm_start')])},
+           {'call': 'mprotect',
+            'reason': set([('vm_area_struct', 'vm_flags'),
+                           ('vm_area_struct', 'vm_start')])},
+           {'call': 'mremap',
+            'reason': set([('vm_area_struct', 'vm_flags'),
+                           ('vm_area_struct', 'vm_start')])},
+           {'call': 'prctl',
+            'reason': set([('vm_area_struct', 'vm_flags'),
+                           ('vm_area_struct', 'vm_start')])},
+           {'call': 'munlock',
+            'reason': set([('vm_area_struct', 'vm_flags'),
+                           ('vm_area_struct', 'vm_start')])},
+           {'call': 'mincore',
+            'reason': set([('vm_area_struct', 'vm_flags'),
+                           ('vm_area_struct', 'vm_start')])},
+           {'call': 'mlockall',
+            'reason': set([('vm_area_struct', 'vm_flags'),
+                           ('vm_area_struct', 'vm_start')])}],
+ 'munlock': [{'call': 'remap_file_pages',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'shmdt',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'brk',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'get_mempolicy',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'munlockall',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'pkey_mprotect',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'madvise',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'mprotect',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'mremap',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'prctl',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'mincore',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'msync',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])},
+             {'call': 'mlockall',
+              'reason': set([('vm_area_struct', 'vm_end'),
+                             ('vm_area_struct', 'vm_start')])}],
+ 'munlockall': [{'call': 'remap_file_pages',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'shmdt',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'brk',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'get_mempolicy',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'pkey_mprotect',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'madvise',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'mprotect',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'mremap',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'prctl',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'munlock',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'mincore',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'msync',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])},
+                {'call': 'mlockall',
+                 'reason': set([('vm_area_struct', 'vm_end'),
+                                ('vm_area_struct', 'vm_start')])}],
+ 'nanosleep': [{'call': 'rt_sigtimedwait',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'fadvise64_64',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'mq_unlink',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'swapoff',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'fchmod',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'memfd_create',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'readlinkat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'io_getevents',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'fchown',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'utime',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'semtimedop',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'settimeofday',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'timerfd_gettime',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'pselect6',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'uselib',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'fchmodat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'timer_settime',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'ftruncate',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'timer_gettime',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'ioctl',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'linkat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'stime',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'futimesat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'poll',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'select',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'unlink',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'faccessat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'swapon',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'epoll_wait',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'fchownat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'timerfd_settime',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'mq_notify',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'sendfile',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'clock_nanosleep',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'unlinkat',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'futex',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'recvmmsg',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'sendfile64',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])},
+               {'call': 'ppoll',
+                'reason': set([('timespec', 'tv_nsec'),
+                               ('timespec', 'tv_sec')])}],
+ 'newfstat': [{'call': 'newlstat',
+               'reason': set([('compat_stat', 'st_ino'),
+                              ('compat_stat', 'st_nlink'),
+                              ('stat', 'st_ino'),
+                              ('stat', 'st_nlink')])},
+              {'call': 'newfstatat',
+               'reason': set([('compat_stat', 'st_ino'),
+                              ('compat_stat', 'st_nlink'),
+                              ('stat', 'st_ino'),
+                              ('stat', 'st_nlink')])},
+              {'call': 'newstat',
+               'reason': set([('compat_stat', 'st_ino'),
+                              ('compat_stat', 'st_nlink'),
+                              ('stat', 'st_ino'),
+                              ('stat', 'st_nlink')])}],
+ 'newfstatat': [{'call': 'newlstat',
+                 'reason': set([('compat_stat', 'st_ino'),
+                                ('compat_stat', 'st_nlink'),
+                                ('stat', 'st_ino'),
+                                ('stat', 'st_nlink')])},
+                {'call': 'newstat',
+                 'reason': set([('compat_stat', 'st_ino'),
+                                ('compat_stat', 'st_nlink'),
+                                ('stat', 'st_ino'),
+                                ('stat', 'st_nlink')])},
+                {'call': 'newfstat',
+                 'reason': set([('compat_stat', 'st_ino'),
+                                ('compat_stat', 'st_nlink'),
+                                ('stat', 'st_ino'),
+                                ('stat', 'st_nlink')])}],
+ 'newlstat': [{'call': 'newfstatat',
+               'reason': set([('compat_stat', 'st_ino'),
+                              ('compat_stat', 'st_nlink'),
+                              ('stat', 'st_ino'),
+                              ('stat', 'st_nlink')])},
+              {'call': 'newstat',
+               'reason': set([('compat_stat', 'st_ino'),
+                              ('compat_stat', 'st_nlink'),
+                              ('stat', 'st_ino'),
+                              ('stat', 'st_nlink')])},
+              {'call': 'newfstat',
+               'reason': set([('compat_stat', 'st_ino'),
+                              ('compat_stat', 'st_nlink'),
+                              ('stat', 'st_ino'),
+                              ('stat', 'st_nlink')])}],
+ 'newstat': [{'call': 'newlstat',
+              'reason': set([('compat_stat', 'st_ino'),
+                             ('compat_stat', 'st_nlink'),
+                             ('stat', 'st_ino'),
+                             ('stat', 'st_nlink')])},
+             {'call': 'newfstatat',
+              'reason': set([('compat_stat', 'st_ino'),
+                             ('compat_stat', 'st_nlink'),
+                             ('stat', 'st_ino'),
+                             ('stat', 'st_nlink')])},
+             {'call': 'newfstat',
+              'reason': set([('compat_stat', 'st_ino'),
+                             ('compat_stat', 'st_nlink'),
+                             ('stat', 'st_ino'),
+                             ('stat', 'st_nlink')])}],
+ 'newuname': [{'call': 'keyctl',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'msgrcv',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'kill',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setparam',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ioprio_set',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'personality',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getppid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'capget',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'signal',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'semtimedop',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'umount',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setsid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sigaltstack',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setattr',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'migrate_pages',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getitimer',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setpgid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getsid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'prlimit64',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'perf_event_open',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getpgid',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getpriority',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sigaction',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setns',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'fork',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'get_robust_list',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ptrace',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_getattr',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getrusage',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setitimer',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'ioprio_get',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'vfork',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'prctl',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'move_pages',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'setpriority',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'clone',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'sched_getparam',
+               'reason': set([('task_struct', 'personality')])}],
+ 'old_getrlimit': [{'call': 'setrlimit',
+                    'reason': set([('rlimit', 'rlim_cur'),
+                                   ('rlimit', 'rlim_max')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('rlimit', 'rlim_cur'),
+                                   ('rlimit', 'rlim_max')])}],
+ 'old_readdir': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+                 {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fadvise64_64', 'reason': set([('fd', 'flags')])},
+                 {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+                 {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+                 {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                 {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                 {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+                 {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                 {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+                 {'call': 'read', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+                 {'call': 'mq_timedreceive',
+                  'reason': set([('fd', 'flags')])},
+                 {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                 {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+                 {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+                 {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                 {'call': 'tee', 'reason': set([('fd', 'flags')])},
+                 {'call': 'sync_file_range',
+                  'reason': set([('fd', 'flags')])},
+                 {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                 {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                 {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+                 {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+                 {'call': 'flock', 'reason': set([('fd', 'flags')])},
+                 {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                 {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+                 {'call': 'inotify_rm_watch',
+                  'reason': set([('fd', 'flags')])},
+                 {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+                 {'call': 'inotify_add_watch',
+                  'reason': set([('fd', 'flags')])},
+                 {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                 {'call': 'splice', 'reason': set([('fd', 'flags')])},
+                 {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+                 {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                 {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+                 {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                 {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+                 {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                 {'call': 'perf_event_open',
+                  'reason': set([('fd', 'flags')])},
+                 {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+                 {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+                 {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                 {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                 {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+                 {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+                 {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+                 {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                 {'call': 'copy_file_range',
+                  'reason': set([('fd', 'flags')])},
+                 {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+                 {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+                 {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                 {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+                 {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                 {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+                 {'call': 'write', 'reason': set([('fd', 'flags')])},
+                 {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+                 {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+                 {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                 {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+                 {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'olduname': [{'call': 'keyctl',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'iopl', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'msgrcv',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'kill',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setparam',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'ioprio_set',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'personality',
+               'reason': set([('task_struct', 'personality')])},
+              {'call': 'getppid',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'capget',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'signal',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'semtimedop',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'umount',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setsid',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sigaltstack',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setattr',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'migrate_pages',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getitimer',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setpgid',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getsid',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'prlimit64',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'perf_event_open',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getpgid',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getpriority',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sigaction',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setns',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'fork',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'get_robust_list',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'ptrace',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_getattr',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'getrusage',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setitimer',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'ioprio_get',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'vfork',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'prctl',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'move_pages',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'setpriority',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'clone',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])},
+              {'call': 'sched_getparam',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('task_struct', 'personality')])}],
+ 'perf_event_open': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+                     {'call': 'keyctl',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'rt_sigtimedwait',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+                     {'call': 'iopl',
+                      'reason': set([('mm_segment_t', 'seg')])},
+                     {'call': 'msgrcv',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'fadvise64_64',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'kill',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'fremovexattr',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sched_getaffinity',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sched_setparam',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+                     {'call': 'ioprio_set',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'read', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getppid',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+                     {'call': 'ioperm',
+                      'reason': set([('mm_segment_t', 'seg')])},
+                     {'call': 'mq_timedreceive',
+                      'reason': set([('fd', 'flags'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'capget',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sched_setaffinity',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                     {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+                     {'call': 'signal',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'setreuid',
+                      'reason': set([('task_struct', 'flags')])},
+                     {'call': 'semtimedop',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'umount',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sched_rr_get_interval',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'tee', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sync_file_range',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                     {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getsockname',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+                     {'call': 'flock', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                     {'call': 'rt_sigprocmask',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+                     {'call': 'setsid',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'sigaltstack',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'sched_setattr',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'old_readdir',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'inotify_rm_watch',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+                     {'call': 'migrate_pages',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'getitimer',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'setpgid',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'inotify_add_watch',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                     {'call': 'splice', 'reason': set([('fd', 'flags')])},
+                     {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getpeername',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'getsid',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                     {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+                     {'call': 'prlimit64',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pwritev64v2',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'rt_sigaction',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getpgid',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                     {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getpriority',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'sigaction',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'mq_getsetattr',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+                     {'call': 'setns',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fork',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'get_robust_list',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'copy_file_range',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('fd', 'flags'),
+                                     ('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'sched_getscheduler',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+                     {'call': 'ptrace',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+                     {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sched_getattr',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'getrusage',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'sched_setscheduler',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'setresuid',
+                      'reason': set([('task_struct', 'flags')])},
+                     {'call': 'setitimer',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'ioprio_get',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'vfork',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'setuid',
+                      'reason': set([('task_struct', 'flags')])},
+                     {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+                     {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                     {'call': 'prctl',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'move_pages',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'write', 'reason': set([('fd', 'flags')])},
+                     {'call': 'setpriority',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+                     {'call': 'clone',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'sched_getparam',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'flags')])},
+                     {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                     {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'pivot_root': [{'call': 'mq_unlink',
+                 'reason': set([('vfsmount', 'mnt_flags')])},
+                {'call': 'umount',
+                 'reason': set([('vfsmount', 'mnt_flags')])},
+                {'call': 'getcwd',
+                 'reason': set([('vfsmount', 'mnt_flags')])},
+                {'call': 'acct', 'reason': set([('vfsmount', 'mnt_flags')])},
+                {'call': 'mq_open',
+                 'reason': set([('vfsmount', 'mnt_flags')])}],
+ 'pkey_alloc': [{'call': 'swapoff',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'io_getevents',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'pkey_free',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'migrate_pages',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'shmdt',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'brk',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'get_mempolicy',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'getrusage',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'io_setup',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'mremap',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'io_destroy',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'mbind',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'prctl',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'move_pages',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'modify_ldt',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'mincore',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'msync',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])},
+                {'call': 'io_cancel',
+                 'reason': set([('mm_context_t', 'pkey_allocation_map')])}],
+ 'pkey_mprotect': [{'call': 'keyctl',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'rt_sigtimedwait',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'msgrcv',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'kill',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'sched_getaffinity',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'sched_setparam',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'ioprio_set',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'personality',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'remap_file_pages',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'getppid',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'capget',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'sched_setaffinity',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'signal',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'semtimedop',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'umount',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'sched_rr_get_interval',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'rt_sigprocmask',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'setsid',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'sigaltstack',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'sched_setattr',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'migrate_pages',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'getitimer',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'setpgid',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'getsid',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'shmdt',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'rt_sigaction',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'getpgid',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'brk',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'getpriority',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'sigaction',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'setns',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'fork',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'get_mempolicy',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'get_robust_list',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'sched_getscheduler',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'ptrace',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'munlockall',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'madvise',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'sched_getattr',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'getrusage',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'sched_setscheduler',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'setitimer',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'ioprio_get',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'vfork',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'mprotect',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'mremap',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'prctl',
+                    'reason': set([('task_struct', 'personality'),
+                                   ('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'move_pages',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'munlock',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'setpriority',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'mincore',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'clone',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'msync',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])},
+                   {'call': 'sched_getparam',
+                    'reason': set([('task_struct', 'personality')])},
+                   {'call': 'mlockall',
+                    'reason': set([('vm_area_struct', 'vm_end'),
+                                   ('vm_area_struct', 'vm_flags'),
+                                   ('vm_area_struct', 'vm_start')])}],
+ 'poll': [{'call': 'ppoll', 'reason': set([('poll_list', 'len')])}],
+ 'ppoll': [{'call': 'keyctl',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigtimedwait',
+            'reason': set([('task_struct', 'personality'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'msgrcv',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'fadvise64_64',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'mq_unlink',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'kill', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'swapoff',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_getaffinity',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setparam',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'fchmod',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'memfd_create',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'ioprio_set',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'personality',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'readlinkat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'io_getevents',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'getppid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'fchown',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('task_struct', 'personality'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'capget',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'utime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_setaffinity',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'signal',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'semtimedop',
+            'reason': set([('task_struct', 'personality'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'umount',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'settimeofday',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('task_struct', 'personality'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'timerfd_gettime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'pselect6',
+            'reason': set([('compat_timespec', 'tv_nsec'),
+                           ('compat_timespec', 'tv_sec'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'uselib',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'rt_sigprocmask',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setsid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sigaltstack',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setattr',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'migrate_pages',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getitimer',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'fchmodat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'setpgid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'inotify_add_watch',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'timer_settime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'ftruncate',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'timer_gettime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'getsid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ioctl',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'prlimit64',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'perf_event_open',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'linkat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'stime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'rt_sigaction',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'futimesat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'getpgid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'poll',
+            'reason': set([('poll_list', 'len'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'select',
+            'reason': set([('compat_timespec', 'tv_nsec'),
+                           ('compat_timespec', 'tv_sec'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'unlink',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'getpriority',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sigaction',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'nanosleep',
+            'reason': set([('compat_timespec', 'tv_nsec'),
+                           ('compat_timespec', 'tv_sec'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'mq_getsetattr',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'faccessat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'setns', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'fork', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'get_robust_list',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('task_struct', 'personality'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'sched_getscheduler',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ptrace',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'swapon',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'epoll_wait',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_getattr',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'fchownat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'getrusage',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'timerfd_settime',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_setscheduler',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setitimer',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ioprio_get',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'vfork', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'prctl', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'move_pages',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setpriority',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mq_notify',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sendfile',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'clone', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'clock_nanosleep',
+            'reason': set([('compat_timespec', 'tv_nsec'),
+                           ('compat_timespec', 'tv_sec'),
+                           ('timespec', 'tv_nsec'),
+                           ('timespec', 'tv_sec')])},
+           {'call': 'unlinkat',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sched_getparam',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'futex',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'recvmmsg',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])},
+           {'call': 'sendfile64',
+            'reason': set([('timespec', 'tv_nsec'), ('timespec', 'tv_sec')])}],
+ 'prctl': [{'call': 'keyctl',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'rt_sigtimedwait',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'msgrcv',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'kill',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'swapoff', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'sched_getaffinity',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_setparam',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'ioprio_set',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'personality',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'remap_file_pages',
+            'reason': set([('mm_struct', 'flags')])},
+           {'call': 'io_getevents', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'getppid',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'capget',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_setaffinity',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'signal',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'setreuid', 'reason': set([('task_struct', 'flags')])},
+           {'call': 'semtimedop',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'umount',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'rt_sigprocmask',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'setsid',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sigaltstack',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_setattr',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'migrate_pages',
+            'reason': set([('mm_struct', 'flags'),
+                           ('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'getitimer',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'setpgid',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'getsid',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'prlimit64',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'perf_event_open',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'shmdt', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'rt_sigaction',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'getpgid',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'brk', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'getpriority',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sigaction',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'setns',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'fork',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'get_mempolicy', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'get_robust_list',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_getscheduler',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'ptrace',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_getattr',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'getrusage',
+            'reason': set([('mm_struct', 'flags'),
+                           ('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'sched_setscheduler',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'setresuid', 'reason': set([('task_struct', 'flags')])},
+           {'call': 'setitimer',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'ioprio_get',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'vfork',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'setuid', 'reason': set([('task_struct', 'flags')])},
+           {'call': 'io_setup', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'mremap', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'io_destroy', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'mbind', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'move_pages',
+            'reason': set([('mm_struct', 'flags'),
+                           ('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'modify_ldt', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'setpriority',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'mincore', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'clone',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'msync', 'reason': set([('mm_struct', 'flags')])},
+           {'call': 'sched_getparam',
+            'reason': set([('task_struct', 'flags'),
+                           ('task_struct', 'personality'),
+                           ('task_struct', 'timer_slack_ns')])},
+           {'call': 'io_cancel', 'reason': set([('mm_struct', 'flags')])}],
+ 'pread64': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+             {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+             {'call': 'fadvise64_64',
+              'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+             {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+             {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+             {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+             {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+             {'call': 'writev', 'reason': set([('fd', 'flags')])},
+             {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+             {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+             {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+             {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('file', 'f_mode')])},
+             {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+             {'call': 'read', 'reason': set([('fd', 'flags')])},
+             {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+             {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+             {'call': 'utime', 'reason': set([('fd', 'flags')])},
+             {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+             {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+             {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+             {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+             {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+             {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+             {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+             {'call': 'tee', 'reason': set([('fd', 'flags')])},
+             {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+             {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+             {'call': 'connect', 'reason': set([('fd', 'flags')])},
+             {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+             {'call': 'epoll_ctl',
+              'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+             {'call': 'flock',
+              'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+             {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+             {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+             {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+             {'call': 'accept4',
+              'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+             {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+             {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+             {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+             {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+             {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+             {'call': 'splice', 'reason': set([('fd', 'flags')])},
+             {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+             {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+             {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+             {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+             {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+             {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+             {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+             {'call': 'perf_event_open',
+              'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+             {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+             {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+             {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+             {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+             {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+             {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+             {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+             {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+             {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+             {'call': 'listen', 'reason': set([('fd', 'flags')])},
+             {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+             {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+             {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+             {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+             {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+             {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+             {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+             {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+             {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+             {'call': 'readv', 'reason': set([('fd', 'flags')])},
+             {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+             {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+             {'call': 'write', 'reason': set([('fd', 'flags')])},
+             {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+             {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+             {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'msync', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open_by_handle_at',
+              'reason': set([('file', 'f_mode')])},
+             {'call': 'bind', 'reason': set([('fd', 'flags')])},
+             {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+             {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'preadv': [{'call': 'fadvise64_64', 'reason': set([('file', 'f_mode')])},
+            {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+            {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+            {'call': 'remap_file_pages', 'reason': set([('file', 'f_mode')])},
+            {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+            {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+            {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+            {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+            {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+            {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+            {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+            {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+            {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+            {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+            {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+            {'call': 'perf_event_open', 'reason': set([('file', 'f_mode')])},
+            {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+            {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+            {'call': 'open', 'reason': set([('file', 'f_mode')])},
+            {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+            {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+            {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+            {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+            {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+            {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+            {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+            {'call': 'msync', 'reason': set([('file', 'f_mode')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('file', 'f_mode')])}],
+ 'preadv2': [{'call': 'fadvise64_64', 'reason': set([('file', 'f_mode')])},
+             {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('file', 'f_mode')])},
+             {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+             {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+             {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+             {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+             {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+             {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+             {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+             {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'perf_event_open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+             {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+             {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+             {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+             {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+             {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'msync', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open_by_handle_at',
+              'reason': set([('file', 'f_mode')])}],
+ 'preadv64': [{'call': 'fadvise64_64', 'reason': set([('file', 'f_mode')])},
+              {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+              {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+              {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+              {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+              {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+              {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+              {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'perf_event_open',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+              {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+              {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+              {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+              {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'msync', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('file', 'f_mode')])}],
+ 'preadv64v2': [{'call': 'fadvise64_64', 'reason': set([('file', 'f_mode')])},
+                {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+                {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('file', 'f_mode')])},
+                {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+                {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+                {'call': 'epoll_create1',
+                 'reason': set([('file', 'f_mode')])},
+                {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+                {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+                {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+                {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+                {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+                {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+                {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+                {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('file', 'f_mode')])},
+                {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+                {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+                {'call': 'open', 'reason': set([('file', 'f_mode')])},
+                {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+                {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+                {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+                {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+                {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+                {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+                {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+                {'call': 'msync', 'reason': set([('file', 'f_mode')])},
+                {'call': 'open_by_handle_at',
+                 'reason': set([('file', 'f_mode')])}],
+ 'prlimit64': [{'call': 'setrlimit',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max')])},
+               {'call': 'old_getrlimit',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max')])}],
+ 'pselect6': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'rt_sigtimedwait',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'iopl', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fadvise64_64',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'mq_unlink',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'swapoff',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_getaffinity',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sched_setparam',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fchmod',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'memfd_create',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'ioprio_set',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'readlinkat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'io_getevents',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fchown',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'utime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_setaffinity',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'semtimedop',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'settimeofday',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timerfd_gettime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'uselib',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'rt_sigprocmask',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sigaltstack',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sched_setattr',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'migrate_pages',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'getitimer', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fchmodat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'inotify_add_watch',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timer_settime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'ftruncate',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timer_gettime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'ioctl',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'prlimit64', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'perf_event_open',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'linkat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'stime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'rt_sigaction',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'futimesat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'poll',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'select',
+               'reason': set([('compat_timespec', 'tv_nsec'),
+                              ('compat_timespec', 'tv_sec'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'unlink',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'getpriority',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'nanosleep',
+               'reason': set([('compat_timespec', 'tv_nsec'),
+                              ('compat_timespec', 'tv_sec'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'mq_getsetattr',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'faccessat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'get_robust_list',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('mm_segment_t', 'seg'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_getscheduler',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'swapon',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'epoll_wait',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_getattr',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'fchownat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'getrusage', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'timerfd_settime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_setscheduler',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'setitimer', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'ioprio_get',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'move_pages',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'setpriority',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'mq_notify',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sendfile',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'clock_nanosleep',
+               'reason': set([('compat_timespec', 'tv_nsec'),
+                              ('compat_timespec', 'tv_sec'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'unlinkat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sched_getparam',
+               'reason': set([('mm_segment_t', 'seg')])},
+              {'call': 'futex',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'recvmmsg',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sendfile64',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'ppoll',
+               'reason': set([('compat_timespec', 'tv_nsec'),
+                              ('compat_timespec', 'tv_sec'),
+                              ('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])}],
+ 'ptrace': [{'call': 'keyctl',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'msgrcv',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'kill',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'pause', 'reason': set([('task_struct', 'state')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'ioprio_set',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'getppid',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'capget',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'signal',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'setreuid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'semtimedop',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'umount',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'setsid',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'sigaltstack',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'migrate_pages',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'getitimer',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'setpgid',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'rt_sigsuspend',
+             'reason': set([('task_struct', 'state')])},
+            {'call': 'getsid',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'prlimit64',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'getpgid',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'getpriority',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'sigaction',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'setns',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'fork',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'epoll_wait', 'reason': set([('task_struct', 'state')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'getrusage',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'setresuid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'setitimer',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'ioprio_get',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'vfork',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'setuid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'prctl',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'move_pages',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'setpriority',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'clone',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])},
+            {'call': 'sigsuspend', 'reason': set([('task_struct', 'state')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'exit_state'),
+                            ('task_struct', 'flags'),
+                            ('task_struct', 'ptrace'),
+                            ('task_struct', 'state')])}],
+ 'pwrite64': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+              {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+              {'call': 'fadvise64_64',
+               'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+              {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+              {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+              {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+              {'call': 'writev', 'reason': set([('fd', 'flags')])},
+              {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+              {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+              {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+              {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+              {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+              {'call': 'read', 'reason': set([('fd', 'flags')])},
+              {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+              {'call': 'utime', 'reason': set([('fd', 'flags')])},
+              {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+              {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+              {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+              {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+              {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+              {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+              {'call': 'tee', 'reason': set([('fd', 'flags')])},
+              {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+              {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+              {'call': 'connect', 'reason': set([('fd', 'flags')])},
+              {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+              {'call': 'epoll_ctl',
+               'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+              {'call': 'flock',
+               'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+              {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+              {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+              {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+              {'call': 'accept4',
+               'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+              {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+              {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+              {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+              {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+              {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+              {'call': 'splice', 'reason': set([('fd', 'flags')])},
+              {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+              {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+              {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+              {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+              {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+              {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+              {'call': 'perf_event_open',
+               'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+              {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+              {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+              {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+              {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+              {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+              {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+              {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+              {'call': 'listen', 'reason': set([('fd', 'flags')])},
+              {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+              {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+              {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+              {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+              {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+              {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+              {'call': 'readv', 'reason': set([('fd', 'flags')])},
+              {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+              {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+              {'call': 'write', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+              {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'msync', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'bind', 'reason': set([('fd', 'flags')])},
+              {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'pwritev': [{'call': 'fadvise64_64', 'reason': set([('file', 'f_mode')])},
+             {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+             {'call': 'remap_file_pages',
+              'reason': set([('file', 'f_mode')])},
+             {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+             {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+             {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+             {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+             {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+             {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+             {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+             {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+             {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+             {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'perf_event_open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+             {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+             {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+             {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+             {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+             {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+             {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+             {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+             {'call': 'msync', 'reason': set([('file', 'f_mode')])},
+             {'call': 'open_by_handle_at',
+              'reason': set([('file', 'f_mode')])}],
+ 'pwritev2': [{'call': 'fadvise64_64', 'reason': set([('file', 'f_mode')])},
+              {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+              {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+              {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+              {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+              {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+              {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+              {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'perf_event_open',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+              {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+              {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+              {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+              {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'msync', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('file', 'f_mode')])}],
+ 'pwritev64': [{'call': 'fadvise64_64', 'reason': set([('file', 'f_mode')])},
+               {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+               {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('file', 'f_mode')])},
+               {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+               {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+               {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+               {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+               {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+               {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+               {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+               {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+               {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+               {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+               {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+               {'call': 'perf_event_open',
+                'reason': set([('file', 'f_mode')])},
+               {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+               {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+               {'call': 'open', 'reason': set([('file', 'f_mode')])},
+               {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+               {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+               {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+               {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+               {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+               {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+               {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+               {'call': 'msync', 'reason': set([('file', 'f_mode')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('file', 'f_mode')])}],
+ 'pwritev64v2': [{'call': 'fadvise64_64',
+                  'reason': set([('file', 'f_mode')])},
+                 {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'memfd_create',
+                  'reason': set([('file', 'f_mode')])},
+                 {'call': 'remap_file_pages',
+                  'reason': set([('file', 'f_mode')])},
+                 {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'epoll_create1',
+                  'reason': set([('file', 'f_mode')])},
+                 {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'perf_event_open',
+                  'reason': set([('file', 'f_mode')])},
+                 {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'open', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'msync', 'reason': set([('file', 'f_mode')])},
+                 {'call': 'open_by_handle_at',
+                  'reason': set([('file', 'f_mode')])}],
+ 'quotactl': [{'call': 'syncfs',
+               'reason': set([('super_block', 's_flags'),
+                              ('super_block', 's_quota_types')])},
+              {'call': 'sysfs', 'reason': set([('filename', 'name')])},
+              {'call': 'fadvise64_64',
+               'reason': set([('super_block', 's_flags'),
+                              ('super_block', 's_quota_types')])},
+              {'call': 'mq_unlink', 'reason': set([('filename', 'name')])},
+              {'call': 'swapoff', 'reason': set([('filename', 'name')])},
+              {'call': 'ustat',
+               'reason': set([('super_block', 's_flags'),
+                              ('super_block', 's_quota_types')])},
+              {'call': 'umount',
+               'reason': set([('super_block', 's_flags'),
+                              ('super_block', 's_quota_types')])},
+              {'call': 'openat', 'reason': set([('filename', 'name')])},
+              {'call': 'uselib', 'reason': set([('filename', 'name')])},
+              {'call': 'renameat2', 'reason': set([('filename', 'name')])},
+              {'call': 'symlinkat', 'reason': set([('filename', 'name')])},
+              {'call': 'acct', 'reason': set([('filename', 'name')])},
+              {'call': 'open', 'reason': set([('filename', 'name')])},
+              {'call': 'unlink', 'reason': set([('filename', 'name')])},
+              {'call': 'rmdir', 'reason': set([('filename', 'name')])},
+              {'call': 'swapon',
+               'reason': set([('filename', 'name'),
+                              ('super_block', 's_flags'),
+                              ('super_block', 's_quota_types')])},
+              {'call': 'mq_open', 'reason': set([('filename', 'name')])},
+              {'call': 'unlinkat', 'reason': set([('filename', 'name')])}],
+ 'read': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+          {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+          {'call': 'fadvise64_64', 'reason': set([('fd', 'flags')])},
+          {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+          {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+          {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+          {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+          {'call': 'writev', 'reason': set([('fd', 'flags')])},
+          {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+          {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+          {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+          {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+          {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+          {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+          {'call': 'utime', 'reason': set([('fd', 'flags')])},
+          {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+          {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+          {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+          {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+          {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+          {'call': 'tee', 'reason': set([('fd', 'flags')])},
+          {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+          {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+          {'call': 'connect', 'reason': set([('fd', 'flags')])},
+          {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+          {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+          {'call': 'flock', 'reason': set([('fd', 'flags')])},
+          {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+          {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+          {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+          {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+          {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+          {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+          {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+          {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+          {'call': 'splice', 'reason': set([('fd', 'flags')])},
+          {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+          {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+          {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+          {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+          {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+          {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+          {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+          {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+          {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+          {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+          {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+          {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+          {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+          {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+          {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+          {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+          {'call': 'listen', 'reason': set([('fd', 'flags')])},
+          {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+          {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+          {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+          {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+          {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+          {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+          {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+          {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+          {'call': 'readv', 'reason': set([('fd', 'flags')])},
+          {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+          {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+          {'call': 'write', 'reason': set([('fd', 'flags')])},
+          {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+          {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+          {'call': 'bind', 'reason': set([('fd', 'flags')])},
+          {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+          {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'readahead': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+               {'call': 'fadvise64_64',
+                'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+               {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+               {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+               {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+               {'call': 'writev', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+               {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+               {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+               {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+               {'call': 'remap_file_pages',
+                'reason': set([('file', 'f_mode')])},
+               {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+               {'call': 'read', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+               {'call': 'utime', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+               {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+               {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+               {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+               {'call': 'tee', 'reason': set([('fd', 'flags')])},
+               {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'connect', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_ctl',
+                'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+               {'call': 'flock',
+                'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+               {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+               {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+               {'call': 'accept4',
+                'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+               {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+               {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('fd', 'flags')])},
+               {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+               {'call': 'splice', 'reason': set([('fd', 'flags')])},
+               {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+               {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+               {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+               {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+               {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+               {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+               {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+               {'call': 'perf_event_open',
+                'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+               {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+               {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+               {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+               {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+               {'call': 'open', 'reason': set([('file', 'f_mode')])},
+               {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+               {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+               {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+               {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+               {'call': 'listen', 'reason': set([('fd', 'flags')])},
+               {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+               {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+               {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+               {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+               {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+               {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+               {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+               {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'readv', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+               {'call': 'write', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+               {'call': 'msync', 'reason': set([('file', 'f_mode')])},
+               {'call': 'open_by_handle_at',
+                'reason': set([('file', 'f_mode')])},
+               {'call': 'bind', 'reason': set([('fd', 'flags')])},
+               {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'recvfrom': [{'call': 'swapoff', 'reason': set([('file', 'f_flags')])},
+              {'call': 'memfd_create', 'reason': set([('file', 'f_flags')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('file', 'f_flags')])},
+              {'call': 'dup3', 'reason': set([('file', 'f_flags')])},
+              {'call': 'socketpair', 'reason': set([('file', 'f_flags')])},
+              {'call': 'epoll_create1', 'reason': set([('file', 'f_flags')])},
+              {'call': 'epoll_ctl', 'reason': set([('file', 'f_flags')])},
+              {'call': 'flock', 'reason': set([('file', 'f_flags')])},
+              {'call': 'openat', 'reason': set([('file', 'f_flags')])},
+              {'call': 'uselib', 'reason': set([('file', 'f_flags')])},
+              {'call': 'accept4', 'reason': set([('file', 'f_flags')])},
+              {'call': 'shmat', 'reason': set([('file', 'f_flags')])},
+              {'call': 'socket', 'reason': set([('file', 'f_flags')])},
+              {'call': 'pipe2', 'reason': set([('file', 'f_flags')])},
+              {'call': 'perf_event_open',
+               'reason': set([('file', 'f_flags')])},
+              {'call': 'shmdt', 'reason': set([('file', 'f_flags')])},
+              {'call': 'acct', 'reason': set([('file', 'f_flags')])},
+              {'call': 'open', 'reason': set([('file', 'f_flags')])},
+              {'call': 'mq_getsetattr', 'reason': set([('file', 'f_flags')])},
+              {'call': 'dup', 'reason': set([('file', 'f_flags')])},
+              {'call': 'setns', 'reason': set([('file', 'f_flags')])},
+              {'call': 'shmctl', 'reason': set([('file', 'f_flags')])},
+              {'call': 'swapon', 'reason': set([('file', 'f_flags')])},
+              {'call': 'eventfd2', 'reason': set([('file', 'f_flags')])},
+              {'call': 'mmap_pgoff', 'reason': set([('file', 'f_flags')])},
+              {'call': 'mq_open', 'reason': set([('file', 'f_flags')])},
+              {'call': 'msync', 'reason': set([('file', 'f_flags')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('file', 'f_flags')])}],
+ 'recvmmsg': [{'call': 'rt_sigtimedwait',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'fadvise64_64',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'mq_unlink',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'swapoff',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'fchmod',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'memfd_create',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'readlinkat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'io_getevents',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'fchown',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'mq_timedreceive',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'utime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'semtimedop',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'recvfrom', 'reason': set([('msghdr', 'msg_flags')])},
+              {'call': 'settimeofday',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sendto', 'reason': set([('msghdr', 'msg_flags')])},
+              {'call': 'sched_rr_get_interval',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timerfd_gettime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'pselect6',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'uselib',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'fchmodat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'inotify_add_watch',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timer_settime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'ftruncate',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timer_gettime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'ioctl',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'linkat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'stime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'futimesat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'poll',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'select',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'unlink',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'nanosleep',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'mq_getsetattr',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'faccessat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'mq_timedsend',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'swapon',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'epoll_wait',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'fchownat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'timerfd_settime',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'mq_notify',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sendfile',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'clock_nanosleep',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'unlinkat',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'futex',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'sendfile64',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])},
+              {'call': 'ppoll',
+               'reason': set([('timespec', 'tv_nsec'),
+                              ('timespec', 'tv_sec')])}],
+ 'remap_file_pages': [{'call': 'shmdt',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'brk',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'get_mempolicy',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'munlockall',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'pkey_mprotect',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'madvise',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'mprotect',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'mremap',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'prctl',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'munlock',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'mincore',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'msync',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])},
+                      {'call': 'mlockall',
+                       'reason': set([('vm_area_struct', 'vm_end'),
+                                      ('vm_area_struct', 'vm_flags'),
+                                      ('vm_area_struct', 'vm_start')])}],
+ 'renameat2': [{'call': 'sysfs',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'mq_unlink',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'swapoff',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'openat',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'uselib',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'symlinkat',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'quotactl',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'acct',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'open',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'unlink',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'rmdir',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'swapon',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'mq_open',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'unlinkat',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])}],
+ 'rt_sigqueueinfo': [{'call': 'rt_sigtimedwait',
+                      'reason': set([('siginfo', 'si_code')])},
+                     {'call': 'kill',
+                      'reason': set([('siginfo', 'si_code')])},
+                     {'call': 'timer_create',
+                      'reason': set([('siginfo', 'si_code')])},
+                     {'call': 'tgkill',
+                      'reason': set([('siginfo', 'si_code')])},
+                     {'call': 'rt_tgsigqueueinfo',
+                      'reason': set([('siginfo', 'si_code')])},
+                     {'call': 'rt_sigreturn',
+                      'reason': set([('siginfo', 'si_code')])},
+                     {'call': 'tkill',
+                      'reason': set([('siginfo', 'si_code')])}],
+ 'rt_sigreturn': [{'call': 'keyctl',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'rt_sigtimedwait',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'iopl',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'msgrcv',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'kill',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_getaffinity',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_setparam',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'ioprio_set',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'getppid',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'ioperm',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'mq_timedreceive',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'capget',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_setaffinity',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'signal',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'semtimedop',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'umount',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_rr_get_interval',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'rt_sigprocmask',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'setsid',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sigaltstack',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_setattr',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'migrate_pages',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'getitimer',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'setpgid',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'getsid',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'prlimit64',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'perf_event_open',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'rt_sigaction',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'getpgid',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'getpriority',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sigaction',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'setns',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'fork',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'get_robust_list',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'mq_timedsend',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_getscheduler',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'ptrace',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_getattr',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'getrusage',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_setscheduler',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'setitimer',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'ioprio_get',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'vfork',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'prctl',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'move_pages',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'setpriority',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'clone',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])},
+                  {'call': 'sched_getparam',
+                   'reason': set([('mm_segment_t', 'seg'),
+                                  ('thread_struct', 'uaccess_err')])}],
+ 'rt_sigtimedwait': [{'call': 'keyctl',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'iopl',
+                      'reason': set([('mm_segment_t', 'seg')])},
+                     {'call': 'msgrcv',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'kill',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_getaffinity',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_setparam',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'ioprio_set',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'getppid',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'ioperm',
+                      'reason': set([('mm_segment_t', 'seg')])},
+                     {'call': 'mq_timedreceive',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'capget',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_setaffinity',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'signal',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'semtimedop',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'umount',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'timer_create',
+                      'reason': set([('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo')])},
+                     {'call': 'sched_rr_get_interval',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'rt_sigqueueinfo',
+                      'reason': set([('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo')])},
+                     {'call': 'tgkill',
+                      'reason': set([('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo')])},
+                     {'call': 'rt_sigprocmask',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'setsid',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sigaltstack',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_setattr',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'migrate_pages',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'getitimer',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'setpgid',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'getsid',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'prlimit64',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'perf_event_open',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'rt_sigaction',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'getpgid',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'getpriority',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sigaction',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'rt_tgsigqueueinfo',
+                      'reason': set([('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo')])},
+                     {'call': 'setns',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'fork',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'get_robust_list',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_getscheduler',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'ptrace',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_getattr',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'getrusage',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_setscheduler',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'setitimer',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'ioprio_get',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'vfork',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'prctl',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'move_pages',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'rt_sigreturn',
+                      'reason': set([('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo')])},
+                     {'call': 'tkill',
+                      'reason': set([('siginfo', 'si_code'),
+                                     ('siginfo', 'si_signo')])},
+                     {'call': 'setpriority',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'clone',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])},
+                     {'call': 'sched_getparam',
+                      'reason': set([('mm_segment_t', 'seg'),
+                                     ('task_struct', 'timer_slack_ns')])}],
+ 'rt_tgsigqueueinfo': [{'call': 'rt_sigtimedwait',
+                        'reason': set([('siginfo', 'si_code')])},
+                       {'call': 'kill',
+                        'reason': set([('siginfo', 'si_code')])},
+                       {'call': 'timer_create',
+                        'reason': set([('siginfo', 'si_code')])},
+                       {'call': 'rt_sigqueueinfo',
+                        'reason': set([('siginfo', 'si_code')])},
+                       {'call': 'tgkill',
+                        'reason': set([('siginfo', 'si_code')])},
+                       {'call': 'rt_sigreturn',
+                        'reason': set([('siginfo', 'si_code')])},
+                       {'call': 'tkill',
+                        'reason': set([('siginfo', 'si_code')])}],
+ 'sched_getattr': [{'call': 'keyctl',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'rt_sigtimedwait',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'iopl', 'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'msgrcv',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'kill',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_getaffinity',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_setparam',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'ioprio_set',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'getppid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'ioperm',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'capget',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_setaffinity',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'signal',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'semtimedop',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'umount',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_rr_get_interval',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'rt_sigprocmask',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'setsid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sigaltstack',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_setattr',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('sched_attr', 'size'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'migrate_pages',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'getitimer',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'setpgid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'getsid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'rt_sigaction',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'getpgid',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'getpriority',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sigaction',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'setns',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'fork',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'get_robust_list',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_getscheduler',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'ptrace',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'getrusage',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_setscheduler',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'setitimer',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'ioprio_get',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'vfork',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'prctl',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'move_pages',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'setpriority',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'clone',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])},
+                   {'call': 'sched_getparam',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('task_struct', 'policy'),
+                                   ('task_struct', 'sched_reset_on_fork')])}],
+ 'sched_getparam': [{'call': 'keyctl',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'rt_sigtimedwait',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'msgrcv',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'kill',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_getaffinity',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_setparam',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'ioprio_set',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'getppid',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'mq_timedreceive',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'capget',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_setaffinity',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'signal',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'semtimedop',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'umount',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_rr_get_interval',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'rt_sigprocmask',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'setsid',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sigaltstack',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_setattr',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'migrate_pages',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'getitimer',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'setpgid',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'getsid',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'prlimit64',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'perf_event_open',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'rt_sigaction',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'getpgid',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'getpriority',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sigaction',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'setns',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'fork',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'get_robust_list',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'mq_timedsend',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_getscheduler',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'ptrace',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_getattr',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'getrusage',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'sched_setscheduler',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'setitimer',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'ioprio_get',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'vfork',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'prctl',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'move_pages',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'setpriority',
+                     'reason': set([('task_struct', 'policy')])},
+                    {'call': 'clone',
+                     'reason': set([('task_struct', 'policy')])}],
+ 'sched_getscheduler': [{'call': 'keyctl',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'rt_sigtimedwait',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'msgrcv',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'kill',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_getaffinity',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_setparam',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'ioprio_set',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'getppid',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'mq_timedreceive',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'capget',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_setaffinity',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'signal',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'semtimedop',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'umount',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_rr_get_interval',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'rt_sigprocmask',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'setsid',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sigaltstack',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_setattr',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'migrate_pages',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'getitimer',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'setpgid',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'getsid',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'prlimit64',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'perf_event_open',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'rt_sigaction',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'getpgid',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'getpriority',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sigaction',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'setns',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'fork',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'get_robust_list',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'mq_timedsend',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'ptrace',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_getattr',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'getrusage',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_setscheduler',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'setitimer',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'ioprio_get',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'vfork',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'prctl',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'move_pages',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'setpriority',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'clone',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])},
+                        {'call': 'sched_getparam',
+                         'reason': set([('task_struct',
+                                         'sched_reset_on_fork')])}],
+ 'sched_setaffinity': [{'call': 'keyctl',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'rt_sigtimedwait',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'msgrcv',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'kill',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'sched_getaffinity',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'sched_setparam',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'ioprio_set',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'getppid',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'mq_timedreceive',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'capget',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'signal',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'setreuid',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'semtimedop',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'umount',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'sched_rr_get_interval',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'rt_sigprocmask',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'setsid',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'sigaltstack',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'sched_setattr',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'migrate_pages',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'getitimer',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'setpgid',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'getsid',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'prlimit64',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'perf_event_open',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'rt_sigaction',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'getpgid',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'getpriority',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'sigaction',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'setns',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'fork',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'get_robust_list',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'mq_timedsend',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'sched_getscheduler',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'ptrace',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'sched_getattr',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'getrusage',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'sched_setscheduler',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'setresuid',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'setitimer',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'ioprio_get',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'vfork',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'setuid',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'prctl',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'move_pages',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'setpriority',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'clone',
+                        'reason': set([('task_struct', 'flags')])},
+                       {'call': 'sched_getparam',
+                        'reason': set([('task_struct', 'flags')])}],
+ 'sched_setattr': [{'call': 'keyctl',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'rt_sigtimedwait',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'iopl', 'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'msgrcv',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_getaffinity',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_setparam',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'ioprio_set',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getppid',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'ioperm',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'mq_timedreceive',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'capget',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_setaffinity',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'signal',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'semtimedop',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'umount',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_rr_get_interval',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'rt_sigprocmask',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'setsid',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sigaltstack',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'migrate_pages',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getitimer',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'setpgid',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getsid',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'prlimit64',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'perf_event_open',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'rt_sigaction',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getpgid',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'getpriority',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sigaction',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'setns',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'get_robust_list',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'mq_timedsend',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_getscheduler',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'ptrace',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_getattr',
+                    'reason': set([('mm_segment_t', 'seg'),
+                                   ('sched_attr', 'sched_policy')])},
+                   {'call': 'getrusage',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_setscheduler',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'setitimer',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'ioprio_get',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'vfork',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'prctl',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'move_pages',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'setpriority',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'clone',
+                    'reason': set([('mm_segment_t', 'seg')])},
+                   {'call': 'sched_getparam',
+                    'reason': set([('mm_segment_t', 'seg')])}],
+ 'select': [{'call': 'keyctl',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'personality'),
+                            ('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'msgrcv',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fadvise64_64',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'mq_unlink',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'personality')])},
+            {'call': 'swapoff',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fchmod',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'memfd_create',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'ioprio_set',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'personality',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'readlinkat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'io_getevents',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'getppid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fchown',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'personality'),
+                            ('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'capget',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'utime',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'signal',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'semtimedop',
+             'reason': set([('task_struct', 'personality'),
+                            ('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'umount',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'settimeofday',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'personality'),
+                            ('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'timerfd_gettime',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'pselect6',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'uselib',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'setsid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sigaltstack',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'migrate_pages',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'getitimer',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fchmodat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'setpgid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'inotify_add_watch',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'timer_settime',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'ftruncate',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'timer_gettime',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'getsid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'ioctl',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'prlimit64',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'linkat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'stime',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'futimesat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'getpgid',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'poll',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'unlink',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'getpriority',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'sigaction',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'nanosleep',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'mq_getsetattr',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'faccessat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'setns',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'personality')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'personality'),
+                            ('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'ptrace',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'swapon',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'epoll_wait',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'fchownat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'getrusage',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'timerfd_settime',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'setitimer',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'ioprio_get',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'vfork',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'prctl',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'move_pages',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'setpriority',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'mq_notify',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sendfile',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'clone',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'clock_nanosleep',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'unlinkat',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'personality')])},
+            {'call': 'futex',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'recvmmsg',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'sendfile64',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])},
+            {'call': 'ppoll',
+             'reason': set([('timespec', 'tv_nsec'),
+                            ('timespec', 'tv_sec')])}],
+ 'semctl': [{'call': 'semtimedop',
+             'reason': set([('sem_array', 'sem_nsems')])}],
+ 'semtimedop': [{'call': 'rt_sigtimedwait',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'msgrcv',
+                 'reason': set([('kern_ipc_perm', 'deleted')])},
+                {'call': 'fadvise64_64',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'mq_unlink',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'swapoff',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'fchmod',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'memfd_create',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'readlinkat',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'io_getevents',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'fchown',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'mq_timedreceive',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'utime',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'settimeofday',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'sched_rr_get_interval',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'timerfd_gettime',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'semctl',
+                 'reason': set([('kern_ipc_perm', 'deleted'),
+                                ('sem_array', 'complex_count'),
+                                ('sem_array', 'sem_nsems'),
+                                ('sem_array', 'use_global_lock'),
+                                ('sem_undo', 'semid')])},
+                {'call': 'pselect6',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'uselib',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'msgctl',
+                 'reason': set([('kern_ipc_perm', 'deleted')])},
+                {'call': 'fchmodat',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'inotify_add_watch',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'timer_settime',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'ftruncate',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'timer_gettime',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'shmat',
+                 'reason': set([('kern_ipc_perm', 'deleted')])},
+                {'call': 'ioctl',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'linkat',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'stime',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'futimesat',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'poll',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'select',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'unlink',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'nanosleep',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'mq_getsetattr',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'faccessat',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'mq_timedsend',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'shmctl',
+                 'reason': set([('kern_ipc_perm', 'deleted')])},
+                {'call': 'swapon',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'epoll_wait',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'fchownat',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'timerfd_settime',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'msgsnd',
+                 'reason': set([('kern_ipc_perm', 'deleted')])},
+                {'call': 'mq_notify',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'sendfile',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'clock_nanosleep',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'unlinkat',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'futex',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'recvmmsg',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'sendfile64',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])},
+                {'call': 'ppoll',
+                 'reason': set([('timespec', 'tv_nsec'),
+                                ('timespec', 'tv_sec')])}],
+ 'sendfile': [{'call': 'fadvise64_64', 'reason': set([('file', 'f_mode')])},
+              {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+              {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+              {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+              {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+              {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+              {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+              {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'perf_event_open',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+              {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+              {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+              {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+              {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'msync', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('file', 'f_mode')])}],
+ 'sendfile64': [{'call': 'fadvise64_64', 'reason': set([('file', 'f_mode')])},
+                {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+                {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+                {'call': 'remap_file_pages',
+                 'reason': set([('file', 'f_mode')])},
+                {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+                {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+                {'call': 'epoll_create1',
+                 'reason': set([('file', 'f_mode')])},
+                {'call': 'epoll_ctl', 'reason': set([('file', 'f_mode')])},
+                {'call': 'flock', 'reason': set([('file', 'f_mode')])},
+                {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+                {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+                {'call': 'accept4', 'reason': set([('file', 'f_mode')])},
+                {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+                {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+                {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+                {'call': 'perf_event_open',
+                 'reason': set([('file', 'f_mode')])},
+                {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+                {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+                {'call': 'open', 'reason': set([('file', 'f_mode')])},
+                {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+                {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+                {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+                {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+                {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+                {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+                {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+                {'call': 'msync', 'reason': set([('file', 'f_mode')])},
+                {'call': 'open_by_handle_at',
+                 'reason': set([('file', 'f_mode')])}],
+ 'sendto': [{'call': 'swapoff', 'reason': set([('file', 'f_flags')])},
+            {'call': 'memfd_create', 'reason': set([('file', 'f_flags')])},
+            {'call': 'remap_file_pages',
+             'reason': set([('file', 'f_flags')])},
+            {'call': 'dup3', 'reason': set([('file', 'f_flags')])},
+            {'call': 'socketpair', 'reason': set([('file', 'f_flags')])},
+            {'call': 'epoll_create1', 'reason': set([('file', 'f_flags')])},
+            {'call': 'epoll_ctl', 'reason': set([('file', 'f_flags')])},
+            {'call': 'flock', 'reason': set([('file', 'f_flags')])},
+            {'call': 'openat', 'reason': set([('file', 'f_flags')])},
+            {'call': 'uselib', 'reason': set([('file', 'f_flags')])},
+            {'call': 'accept4', 'reason': set([('file', 'f_flags')])},
+            {'call': 'shmat', 'reason': set([('file', 'f_flags')])},
+            {'call': 'socket', 'reason': set([('file', 'f_flags')])},
+            {'call': 'pipe2', 'reason': set([('file', 'f_flags')])},
+            {'call': 'perf_event_open', 'reason': set([('file', 'f_flags')])},
+            {'call': 'shmdt', 'reason': set([('file', 'f_flags')])},
+            {'call': 'acct', 'reason': set([('file', 'f_flags')])},
+            {'call': 'open', 'reason': set([('file', 'f_flags')])},
+            {'call': 'mq_getsetattr', 'reason': set([('file', 'f_flags')])},
+            {'call': 'dup', 'reason': set([('file', 'f_flags')])},
+            {'call': 'setns', 'reason': set([('file', 'f_flags')])},
+            {'call': 'shmctl', 'reason': set([('file', 'f_flags')])},
+            {'call': 'swapon', 'reason': set([('file', 'f_flags')])},
+            {'call': 'eventfd2', 'reason': set([('file', 'f_flags')])},
+            {'call': 'mmap_pgoff', 'reason': set([('file', 'f_flags')])},
+            {'call': 'mq_open', 'reason': set([('file', 'f_flags')])},
+            {'call': 'msync', 'reason': set([('file', 'f_flags')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('file', 'f_flags')])}],
+ 'set_mempolicy': [{'call': 'get_mempolicy',
+                    'reason': set([('mempolicy', 'mode')])},
+                   {'call': 'mbind', 'reason': set([('mempolicy', 'mode')])}],
+ 'set_thread_area': [{'call': 'keyctl',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'rt_sigtimedwait',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'iopl',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'msgrcv',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'kill',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_getaffinity',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'arch_prctl',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_setparam',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'ioprio_set',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'getppid',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'ioperm',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'mq_timedreceive',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'capget',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_setaffinity',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'signal',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'semtimedop',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'umount',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_rr_get_interval',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'rt_sigprocmask',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'setsid',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sigaltstack',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_setattr',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'migrate_pages',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'getitimer',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'setpgid',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'getsid',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'prlimit64',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'perf_event_open',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'rt_sigaction',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'getpgid',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'getpriority',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sigaction',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'setns',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'fork',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'get_robust_list',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_getscheduler',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'ptrace',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_getattr',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'getrusage',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_setscheduler',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'setitimer',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'ioprio_get',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'vfork',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'prctl',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'move_pages',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'setpriority',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'clone',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])},
+                     {'call': 'sched_getparam',
+                      'reason': set([('thread_struct', 'fsindex'),
+                                     ('thread_struct', 'gsindex')])}],
+ 'set_trip_temp': [{'call': 'get_trip_temp',
+                    'reason': set([('pkg_device', 'cpu'),
+                                   ('pkg_device', 'tj_max')])},
+                   {'call': 'get_curr_temp',
+                    'reason': set([('pkg_device', 'cpu'),
+                                   ('pkg_device', 'tj_max')])}],
+ 'setgroups16': [{'call': 'setgroups',
+                  'reason': set([('group_info', 'ngroups')])}],
+ 'setitimer': [{'call': 'settimeofday',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'timer_create',
+                'reason': set([('signal_struct', 'it_real_incr')])},
+               {'call': 'adjtimex',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'waitid',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'getitimer',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'select',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'exit_group',
+                'reason': set([('signal_struct', 'it_real_incr')])},
+               {'call': 'wait4',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'getrusage',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'clock_adjtime',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'alarm',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])},
+               {'call': 'ppoll',
+                'reason': set([('timeval', 'tv_sec'),
+                               ('timeval', 'tv_usec')])}],
+ 'setpgid': [{'call': 'keyctl',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'rt_sigtimedwait',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'msgrcv',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'kill',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'sched_getaffinity',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'sched_setparam',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'ioprio_set',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'getppid',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'capget',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'sched_setaffinity',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'signal',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'setreuid', 'reason': set([('task_struct', 'flags')])},
+             {'call': 'semtimedop',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'umount',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'timer_create',
+              'reason': set([('signal_struct', 'leader')])},
+             {'call': 'sched_rr_get_interval',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'rt_sigprocmask',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'setsid',
+              'reason': set([('signal_struct', 'leader'),
+                             ('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'sigaltstack',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'sched_setattr',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'migrate_pages',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'getitimer',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'getsid',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'prlimit64',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'perf_event_open',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'rt_sigaction',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'getpgid',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'exit_group',
+              'reason': set([('signal_struct', 'leader')])},
+             {'call': 'getpriority',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'sigaction',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'setns',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'fork',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'get_robust_list',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'mq_timedsend',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'sched_getscheduler',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'ptrace',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'sched_getattr',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'getrusage',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'sched_setscheduler',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'setresuid', 'reason': set([('task_struct', 'flags')])},
+             {'call': 'setitimer',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'ioprio_get',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'vfork',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'setuid', 'reason': set([('task_struct', 'flags')])},
+             {'call': 'prctl',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'move_pages',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'setpriority',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'clone',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])},
+             {'call': 'sched_getparam',
+              'reason': set([('task_struct', 'exit_signal'),
+                             ('task_struct', 'flags')])}],
+ 'setrlimit': [{'call': 'old_getrlimit',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max')])},
+               {'call': 'prlimit64',
+                'reason': set([('rlimit', 'rlim_cur'),
+                               ('rlimit', 'rlim_max')])},
+               {'call': 'getrlimit',
+                'reason': set([('compat_rlimit', 'rlim_cur'),
+                               ('compat_rlimit', 'rlim_max')])}],
+ 'setsid': [{'call': 'timer_create',
+             'reason': set([('signal_struct', 'leader')])},
+            {'call': 'exit_group',
+             'reason': set([('signal_struct', 'leader')])}],
+ 'setsockopt': [{'call': 'accept4',
+                 'reason': set([('proto_ops', 'compat_setsockopt')])}],
+ 'settimeofday': [{'call': 'adjtimex',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'waitid',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'getitimer',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'select',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'wait4',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'getrusage',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'setitimer',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'clock_adjtime',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'alarm',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])},
+                  {'call': 'ppoll',
+                   'reason': set([('timeval', 'tv_sec'),
+                                  ('timeval', 'tv_usec')])}],
+ 'shmctl': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'iopl', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'msgrcv',
+             'reason': set([('kern_ipc_perm', 'deleted'),
+                            ('kern_ipc_perm', 'mode'),
+                            ('mm_segment_t', 'seg')])},
+            {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setparam',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioprio_set', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'semtimedop',
+             'reason': set([('kern_ipc_perm', 'deleted'),
+                            ('kern_ipc_perm', 'mode'),
+                            ('mm_segment_t', 'seg')])},
+            {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'semctl',
+             'reason': set([('kern_ipc_perm', 'deleted'),
+                            ('kern_ipc_perm', 'mode')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'msgctl',
+             'reason': set([('kern_ipc_perm', 'deleted'),
+                            ('kern_ipc_perm', 'mode')])},
+            {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sigaltstack', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setattr',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'migrate_pages',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getitimer', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'shmat',
+             'reason': set([('kern_ipc_perm', 'deleted'),
+                            ('kern_ipc_perm', 'mode')])},
+            {'call': 'prlimit64', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'perf_event_open',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getpriority', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'get_robust_list',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_getattr',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getrusage', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setitimer', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioprio_get', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'move_pages', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'msgsnd',
+             'reason': set([('kern_ipc_perm', 'deleted'),
+                            ('kern_ipc_perm', 'mode')])},
+            {'call': 'setpriority', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_getparam',
+             'reason': set([('mm_segment_t', 'seg')])}],
+ 'shmdt': [{'call': 'remap_file_pages',
+            'reason': set([('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'brk', 'reason': set([('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'get_mempolicy',
+            'reason': set([('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'munlockall',
+            'reason': set([('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'pkey_mprotect',
+            'reason': set([('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'madvise',
+            'reason': set([('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'mprotect',
+            'reason': set([('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'mremap',
+            'reason': set([('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'prctl', 'reason': set([('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'munlock',
+            'reason': set([('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'mincore',
+            'reason': set([('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'msync', 'reason': set([('vm_area_struct', 'vm_pgoff')])},
+           {'call': 'mlockall',
+            'reason': set([('vm_area_struct', 'vm_pgoff')])}],
+ 'sigaction': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'rt_sigtimedwait',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'iopl', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getaffinity',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setparam',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ioprio_set',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setaffinity',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'semtimedop',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'rt_sigprocmask',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sigaltstack',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setattr',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'migrate_pages',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getitimer',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'prlimit64',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'perf_event_open',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'rt_sigaction',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getpriority',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'get_robust_list',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getscheduler',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getattr',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'getrusage',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_setscheduler',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setitimer',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'ioprio_get',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'move_pages',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'setpriority',
+                'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+               {'call': 'sched_getparam',
+                'reason': set([('mm_segment_t', 'seg')])}],
+ 'signalfd4': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+               {'call': 'fadvise64_64', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+               {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+               {'call': 'writev', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+               {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+               {'call': 'read', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+               {'call': 'utime', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+               {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+               {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+               {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+               {'call': 'tee', 'reason': set([('fd', 'flags')])},
+               {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'connect', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+               {'call': 'flock', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+               {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+               {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+               {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('fd', 'flags')])},
+               {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+               {'call': 'splice', 'reason': set([('fd', 'flags')])},
+               {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+               {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+               {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+               {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+               {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+               {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+               {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+               {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+               {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+               {'call': 'listen', 'reason': set([('fd', 'flags')])},
+               {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+               {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+               {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+               {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+               {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+               {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+               {'call': 'readv', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+               {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+               {'call': 'write', 'reason': set([('fd', 'flags')])},
+               {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+               {'call': 'bind', 'reason': set([('fd', 'flags')])},
+               {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+               {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'splice': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+            {'call': 'fadvise64_64',
+             'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+            {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+            {'call': 'swapoff',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+            {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+            {'call': 'writev', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+            {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+            {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+            {'call': 'memfd_create',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'remap_file_pages',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'dup3',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'read', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+            {'call': 'utime', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+            {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+            {'call': 'socketpair',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_create1',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'tee', 'reason': set([('fd', 'flags')])},
+            {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'connect', 'reason': set([('fd', 'flags')])},
+            {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_ctl',
+             'reason': set([('fd', 'flags'),
+                            ('file', 'f_flags'),
+                            ('file', 'f_mode')])},
+            {'call': 'flock',
+             'reason': set([('fd', 'flags'),
+                            ('file', 'f_flags'),
+                            ('file', 'f_mode')])},
+            {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'openat',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'uselib',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'accept4',
+             'reason': set([('fd', 'flags'),
+                            ('file', 'f_flags'),
+                            ('file', 'f_mode')])},
+            {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+            {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+            {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+            {'call': 'shmat',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'socket',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'pipe2',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+            {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+            {'call': 'perf_event_open',
+             'reason': set([('fd', 'flags'),
+                            ('file', 'f_flags'),
+                            ('file', 'f_mode')])},
+            {'call': 'shmdt',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+            {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+            {'call': 'acct',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'open',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_getsetattr',
+             'reason': set([('fd', 'flags'), ('file', 'f_flags')])},
+            {'call': 'dup',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+            {'call': 'setns',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+            {'call': 'listen', 'reason': set([('fd', 'flags')])},
+            {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+            {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'shmctl',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+            {'call': 'swapon',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+            {'call': 'eventfd2',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'mmap_pgoff',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'readv', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+            {'call': 'write', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_open',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'msync',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'open_by_handle_at',
+             'reason': set([('file', 'f_flags'), ('file', 'f_mode')])},
+            {'call': 'bind', 'reason': set([('fd', 'flags')])},
+            {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'stat': [{'call': 'lstat',
+           'reason': set([('__old_kernel_stat', 'st_ino'),
+                          ('__old_kernel_stat', 'st_nlink')])},
+          {'call': 'fstat',
+           'reason': set([('__old_kernel_stat', 'st_ino'),
+                          ('__old_kernel_stat', 'st_nlink')])}],
+ 'statfs': [{'call': 'ustat',
+             'reason': set([('kstatfs', 'f_ffree'), ('kstatfs', 'f_files')])},
+            {'call': 'fstatfs',
+             'reason': set([('kstatfs', 'f_ffree'), ('kstatfs', 'f_files')])},
+            {'call': 'fstatfs64',
+             'reason': set([('kstatfs', 'f_ffree'), ('kstatfs', 'f_files')])},
+            {'call': 'statfs64',
+             'reason': set([('kstatfs', 'f_ffree'), ('kstatfs', 'f_files')])}],
+ 'statfs64': [{'call': 'ustat',
+               'reason': set([('kstatfs', 'f_ffree'),
+                              ('kstatfs', 'f_files')])},
+              {'call': 'fstatfs',
+               'reason': set([('kstatfs', 'f_ffree'),
+                              ('kstatfs', 'f_files')])},
+              {'call': 'statfs',
+               'reason': set([('kstatfs', 'f_ffree'),
+                              ('kstatfs', 'f_files')])},
+              {'call': 'fstatfs64',
+               'reason': set([('kstatfs', 'f_ffree'),
+                              ('kstatfs', 'f_files')])}],
+ 'swapoff': [{'call': 'swapon',
+              'reason': set([('page', 'private'),
+                             ('swap_info_struct', 'flags'),
+                             ('swap_info_struct', 'inuse_pages'),
+                             ('swap_info_struct', 'pages'),
+                             ('swap_info_struct', 'prio'),
+                             ('swap_info_struct', 'swap_map')])}],
+ 'swapon': [{'call': 'fadvise64_64', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'mq_unlink', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'swapoff',
+             'reason': set([('inode', 'i_flags'),
+                            ('swap_info_struct', 'flags'),
+                            ('swap_info_struct', 'type')])},
+            {'call': 'fchmod', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'memfd_create', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'readlinkat', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'fchown', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('inode', 'i_flags')])},
+            {'call': 'uselib', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'fchmodat', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'inotify_add_watch',
+             'reason': set([('inode', 'i_flags')])},
+            {'call': 'ftruncate', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'ioctl', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'linkat', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'unlink', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'mq_getsetattr', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'faccessat', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'mq_timedsend', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'fchownat', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'mq_notify', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'sendfile', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'unlinkat', 'reason': set([('inode', 'i_flags')])},
+            {'call': 'sendfile64', 'reason': set([('inode', 'i_flags')])}],
+ 'symlinkat': [{'call': 'sysfs',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'mq_unlink',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'swapoff',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'openat',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'uselib',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'renameat2',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'quotactl',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'acct',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'open',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'unlink',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'rmdir',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'swapon',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'mq_open',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])},
+               {'call': 'unlinkat',
+                'reason': set([('filename', 'name'),
+                               ('filename', 'refcnt')])}],
+ 'sync_file_range': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+                     {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fadvise64_64',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fremovexattr',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+                     {'call': 'writev', 'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+                     {'call': 'read', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+                     {'call': 'mq_timedreceive',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'utime', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+                     {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+                     {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+                     {'call': 'tee', 'reason': set([('fd', 'flags')])},
+                     {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+                     {'call': 'connect', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getsockname',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+                     {'call': 'flock', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+                     {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+                     {'call': 'old_readdir',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'inotify_rm_watch',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+                     {'call': 'inotify_add_watch',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+                     {'call': 'splice', 'reason': set([('fd', 'flags')])},
+                     {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getpeername',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+                     {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'perf_event_open',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'pwritev64v2',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+                     {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+                     {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+                     {'call': 'mq_getsetattr',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+                     {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'listen', 'reason': set([('fd', 'flags')])},
+                     {'call': 'copy_file_range',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'mq_timedsend',
+                      'reason': set([('fd', 'flags')])},
+                     {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+                     {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+                     {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+                     {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+                     {'call': 'readv', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+                     {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+                     {'call': 'write', 'reason': set([('fd', 'flags')])},
+                     {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+                     {'call': 'bind', 'reason': set([('fd', 'flags')])},
+                     {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+                     {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'syncfs': [{'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+            {'call': 'fadvise64_64', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+            {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+            {'call': 'writev', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+            {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+            {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+            {'call': 'read', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+            {'call': 'utime', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+            {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+            {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+            {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+            {'call': 'tee', 'reason': set([('fd', 'flags')])},
+            {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'connect', 'reason': set([('fd', 'flags')])},
+            {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+            {'call': 'flock', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+            {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+            {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+            {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+            {'call': 'splice', 'reason': set([('fd', 'flags')])},
+            {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+            {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+            {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+            {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+            {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+            {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+            {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+            {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+            {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+            {'call': 'listen', 'reason': set([('fd', 'flags')])},
+            {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+            {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+            {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+            {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+            {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+            {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+            {'call': 'readv', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+            {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+            {'call': 'write', 'reason': set([('fd', 'flags')])},
+            {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+            {'call': 'bind', 'reason': set([('fd', 'flags')])},
+            {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+            {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'sysfs': [{'call': 'mq_unlink', 'reason': set([('filename', 'name')])},
+           {'call': 'swapoff', 'reason': set([('filename', 'name')])},
+           {'call': 'openat', 'reason': set([('filename', 'name')])},
+           {'call': 'uselib', 'reason': set([('filename', 'name')])},
+           {'call': 'renameat2', 'reason': set([('filename', 'name')])},
+           {'call': 'symlinkat', 'reason': set([('filename', 'name')])},
+           {'call': 'quotactl', 'reason': set([('filename', 'name')])},
+           {'call': 'acct', 'reason': set([('filename', 'name')])},
+           {'call': 'open', 'reason': set([('filename', 'name')])},
+           {'call': 'unlink', 'reason': set([('filename', 'name')])},
+           {'call': 'rmdir', 'reason': set([('filename', 'name')])},
+           {'call': 'swapon', 'reason': set([('filename', 'name')])},
+           {'call': 'mq_open', 'reason': set([('filename', 'name')])},
+           {'call': 'unlinkat', 'reason': set([('filename', 'name')])}],
+ 'sysinfo': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'rt_sigtimedwait',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('timespec', 'tv_nsec')])},
+             {'call': 'iopl', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'fadvise64_64',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'mq_unlink', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'swapoff', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sched_getaffinity',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sched_setparam',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'fchmod', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'memfd_create',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'ioprio_set', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'readlinkat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'io_getevents',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'fchown', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'mq_timedreceive',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('timespec', 'tv_nsec')])},
+             {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'utime', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sched_setaffinity',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'semtimedop',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('timespec', 'tv_nsec')])},
+             {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'settimeofday',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sched_rr_get_interval',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('timespec', 'tv_nsec')])},
+             {'call': 'timerfd_gettime',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'pselect6', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'uselib', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'rt_sigprocmask',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sigaltstack',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sched_setattr',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'migrate_pages',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'getitimer', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'fchmodat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'inotify_add_watch',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'timer_settime',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'ftruncate', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'timer_gettime',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'ioctl', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'prlimit64', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'perf_event_open',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'linkat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'stime', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'rt_sigaction',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'futimesat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'poll', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'select', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'unlink', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'getpriority',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'nanosleep', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'mq_getsetattr',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'faccessat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'get_robust_list',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'mq_timedsend',
+              'reason': set([('mm_segment_t', 'seg'),
+                             ('timespec', 'tv_nsec')])},
+             {'call': 'sched_getscheduler',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'swapon', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'epoll_wait', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sched_getattr',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'fchownat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'getrusage', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'timerfd_settime',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sched_setscheduler',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'setitimer', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'ioprio_get', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'move_pages', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'setpriority',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'mq_notify', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sendfile', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'clock_nanosleep',
+              'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'unlinkat', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sched_getparam',
+              'reason': set([('mm_segment_t', 'seg')])},
+             {'call': 'futex', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'recvmmsg', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'sendfile64', 'reason': set([('timespec', 'tv_nsec')])},
+             {'call': 'ppoll', 'reason': set([('timespec', 'tv_nsec')])}],
+ 'syslog': [{'call': 'keyctl', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'iopl', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'msgrcv', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'kill', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setparam',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioprio_set', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getppid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioperm', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'capget', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'signal', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'semtimedop', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'umount', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setsid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sigaltstack', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setattr',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'migrate_pages',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getitimer', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setpgid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getsid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'prlimit64', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'perf_event_open',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getpgid', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getpriority', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sigaction', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setns', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'fork', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'get_robust_list',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ptrace', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_getattr',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'getrusage', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setitimer', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'ioprio_get', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'vfork', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'prctl', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'move_pages', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'setpriority', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'clone', 'reason': set([('mm_segment_t', 'seg')])},
+            {'call': 'sched_getparam',
+             'reason': set([('mm_segment_t', 'seg')])}],
+ 'tee': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+         {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+         {'call': 'fadvise64_64',
+          'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+         {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+         {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+         {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+         {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+         {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+         {'call': 'writev', 'reason': set([('fd', 'flags')])},
+         {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+         {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+         {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+         {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+         {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+         {'call': 'remap_file_pages', 'reason': set([('file', 'f_mode')])},
+         {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+         {'call': 'read', 'reason': set([('fd', 'flags')])},
+         {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+         {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+         {'call': 'utime', 'reason': set([('fd', 'flags')])},
+         {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+         {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+         {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+         {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+         {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+         {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+         {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+         {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+         {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+         {'call': 'connect', 'reason': set([('fd', 'flags')])},
+         {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+         {'call': 'epoll_ctl',
+          'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+         {'call': 'flock',
+          'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+         {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+         {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+         {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+         {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+         {'call': 'accept4',
+          'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+         {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+         {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+         {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+         {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+         {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+         {'call': 'splice', 'reason': set([('fd', 'flags')])},
+         {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+         {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+         {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+         {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+         {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+         {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+         {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+         {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+         {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+         {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+         {'call': 'perf_event_open',
+          'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+         {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+         {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+         {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+         {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+         {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+         {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+         {'call': 'open', 'reason': set([('file', 'f_mode')])},
+         {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+         {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+         {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+         {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+         {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+         {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+         {'call': 'listen', 'reason': set([('fd', 'flags')])},
+         {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+         {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+         {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+         {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+         {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+         {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+         {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+         {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+         {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+         {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+         {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+         {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+         {'call': 'readv', 'reason': set([('fd', 'flags')])},
+         {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+         {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+         {'call': 'write', 'reason': set([('fd', 'flags')])},
+         {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+         {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+         {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+         {'call': 'msync', 'reason': set([('file', 'f_mode')])},
+         {'call': 'open_by_handle_at', 'reason': set([('file', 'f_mode')])},
+         {'call': 'bind', 'reason': set([('fd', 'flags')])},
+         {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+         {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'timer_create': [{'call': 'clock_getres',
+                   'reason': set([('k_clock', 'timer_create')])},
+                  {'call': 'timer_delete',
+                   'reason': set([('k_clock', 'timer_create')])},
+                  {'call': 'clock_gettime',
+                   'reason': set([('k_clock', 'timer_create')])},
+                  {'call': 'timer_settime',
+                   'reason': set([('k_clock', 'timer_create')])},
+                  {'call': 'timer_gettime',
+                   'reason': set([('k_clock', 'timer_create')])},
+                  {'call': 'clock_settime',
+                   'reason': set([('k_clock', 'timer_create')])},
+                  {'call': 'clock_nanosleep',
+                   'reason': set([('k_clock', 'timer_create')])},
+                  {'call': 'clock_adjtime',
+                   'reason': set([('k_clock', 'timer_create')])}],
+ 'timer_delete': [{'call': 'clock_getres',
+                   'reason': set([('k_clock', 'timer_del')])},
+                  {'call': 'timer_create',
+                   'reason': set([('k_clock', 'timer_del')])},
+                  {'call': 'clock_gettime',
+                   'reason': set([('k_clock', 'timer_del')])},
+                  {'call': 'timer_settime',
+                   'reason': set([('k_clock', 'timer_del')])},
+                  {'call': 'timer_gettime',
+                   'reason': set([('k_clock', 'timer_del')])},
+                  {'call': 'clock_settime',
+                   'reason': set([('k_clock', 'timer_del')])},
+                  {'call': 'clock_nanosleep',
+                   'reason': set([('k_clock', 'timer_del')])},
+                  {'call': 'clock_adjtime',
+                   'reason': set([('k_clock', 'timer_del')])}],
+ 'timer_gettime': [{'call': 'clock_getres',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'timer_delete',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'timer_create',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'clock_gettime',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'timer_settime',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'clock_settime',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'clock_nanosleep',
+                    'reason': set([('k_clock', 'timer_get')])},
+                   {'call': 'clock_adjtime',
+                    'reason': set([('k_clock', 'timer_get')])}],
+ 'timer_settime': [{'call': 'clock_getres',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'timer_delete',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'timer_create',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'clock_gettime',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'timer_gettime',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'clock_settime',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'clock_nanosleep',
+                    'reason': set([('k_clock', 'timer_set')])},
+                   {'call': 'clock_adjtime',
+                    'reason': set([('k_clock', 'timer_set')])}],
+ 'timerfd_create': [{'call': 'timerfd_gettime',
+                     'reason': set([('timerfd_ctx', 'clockid')])},
+                    {'call': 'timerfd_settime',
+                     'reason': set([('timerfd_ctx', 'clockid')])}],
+ 'timerfd_gettime': [{'call': 'timerfd_settime',
+                      'reason': set([('timerfd_ctx', 'expired'),
+                                     ('timerfd_ctx', 'tintv')])},
+                     {'call': 'timerfd_create',
+                      'reason': set([('timerfd_ctx', 'expired'),
+                                     ('timerfd_ctx', 'tintv')])}],
+ 'timerfd_settime': [{'call': 'timerfd_gettime',
+                      'reason': set([('timerfd_ctx', 'expired'),
+                                     ('timerfd_ctx', 'tintv')])},
+                     {'call': 'timerfd_create',
+                      'reason': set([('timerfd_ctx', 'expired'),
+                                     ('timerfd_ctx', 'tintv')])}],
+ 'umount': [{'call': 'syncfs', 'reason': set([('super_block', 's_flags')])},
+            {'call': 'keyctl', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'rt_sigtimedwait',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'msgrcv', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'fadvise64_64',
+             'reason': set([('super_block', 's_flags')])},
+            {'call': 'mq_unlink', 'reason': set([('vfsmount', 'mnt_flags')])},
+            {'call': 'kill', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'sched_getaffinity',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'sched_setparam',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'pivot_root',
+             'reason': set([('vfsmount', 'mnt_flags')])},
+            {'call': 'ioprio_set', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'getppid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'mq_timedreceive',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'capget', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'sched_setaffinity',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'ustat', 'reason': set([('super_block', 's_flags')])},
+            {'call': 'signal', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'setreuid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'semtimedop', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'sched_rr_get_interval',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'rt_sigprocmask',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'setsid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'sigaltstack',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'sched_setattr',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'migrate_pages',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'getitimer', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'setpgid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'getcwd', 'reason': set([('vfsmount', 'mnt_flags')])},
+            {'call': 'getsid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'prlimit64', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'perf_event_open',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'quotactl', 'reason': set([('super_block', 's_flags')])},
+            {'call': 'rt_sigaction',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'getpgid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'acct', 'reason': set([('vfsmount', 'mnt_flags')])},
+            {'call': 'getpriority',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'sigaction', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'setns', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'fork', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'get_robust_list',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'mq_timedsend',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'sched_getscheduler',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'ptrace', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'swapon', 'reason': set([('super_block', 's_flags')])},
+            {'call': 'sched_getattr',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'getrusage', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'sched_setscheduler',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'setresuid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'setitimer', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'ioprio_get', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'vfork', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'setuid', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'prctl', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'move_pages', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'setpriority',
+             'reason': set([('task_struct', 'flags')])},
+            {'call': 'clone', 'reason': set([('task_struct', 'flags')])},
+            {'call': 'mq_open', 'reason': set([('vfsmount', 'mnt_flags')])},
+            {'call': 'sched_getparam',
+             'reason': set([('task_struct', 'flags')])}],
+ 'uname': [{'call': 'keyctl',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigtimedwait',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'msgrcv',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'kill', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getaffinity',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setparam',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ioprio_set',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'personality',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getppid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'capget',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setaffinity',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'signal',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'semtimedop',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'umount',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigprocmask',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setsid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sigaltstack',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setattr',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'migrate_pages',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getitimer',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setpgid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getsid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'prlimit64',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'perf_event_open',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'rt_sigaction',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getpgid',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getpriority',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sigaction',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setns', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'fork', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'get_robust_list',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'mq_timedsend',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getscheduler',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ptrace',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getattr',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'getrusage',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_setscheduler',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setitimer',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'ioprio_get',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'vfork', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'prctl', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'move_pages',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'setpriority',
+            'reason': set([('task_struct', 'personality')])},
+           {'call': 'clone', 'reason': set([('task_struct', 'personality')])},
+           {'call': 'sched_getparam',
+            'reason': set([('task_struct', 'personality')])}],
+ 'uselib': [{'call': 'syncfs', 'reason': set([('super_block', 's_iflags')])},
+            {'call': 'fadvise64_64',
+             'reason': set([('super_block', 's_iflags')])},
+            {'call': 'mq_unlink', 'reason': set([('vfsmount', 'mnt_flags')])},
+            {'call': 'pivot_root',
+             'reason': set([('vfsmount', 'mnt_flags')])},
+            {'call': 'ustat', 'reason': set([('super_block', 's_iflags')])},
+            {'call': 'umount',
+             'reason': set([('super_block', 's_iflags'),
+                            ('vfsmount', 'mnt_flags')])},
+            {'call': 'getcwd', 'reason': set([('vfsmount', 'mnt_flags')])},
+            {'call': 'quotactl',
+             'reason': set([('super_block', 's_iflags')])},
+            {'call': 'acct', 'reason': set([('vfsmount', 'mnt_flags')])},
+            {'call': 'swapon', 'reason': set([('super_block', 's_iflags')])},
+            {'call': 'mq_open', 'reason': set([('vfsmount', 'mnt_flags')])}],
+ 'utime': [{'call': 'rt_sigtimedwait',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'fadvise64_64', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'mq_unlink', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'swapoff', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'fchmod', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'memfd_create', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'readlinkat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'io_getevents', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'fchown', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'mq_timedreceive',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'semtimedop', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'settimeofday', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'sched_rr_get_interval',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'timerfd_gettime',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'pselect6', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'uselib', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'fchmodat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'inotify_add_watch',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'timer_settime',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'ftruncate', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'timer_gettime',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'ioctl', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'linkat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'stime', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'futimesat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'poll', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'select', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'unlink', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'nanosleep', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'mq_getsetattr',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'faccessat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'mq_timedsend', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'swapon', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'epoll_wait', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'fchownat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'timerfd_settime',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'mq_notify', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'sendfile', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'clock_nanosleep',
+            'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'unlinkat', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'futex', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'recvmmsg', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'sendfile64', 'reason': set([('timespec', 'tv_nsec')])},
+           {'call': 'ppoll', 'reason': set([('timespec', 'tv_nsec')])}],
+ 'utimensat': [{'call': 'rt_sigtimedwait',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fadvise64_64',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'mq_unlink',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'swapoff', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fchmod', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'memfd_create',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'readlinkat',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'io_getevents',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fchown', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'mq_timedreceive',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'utime', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'semtimedop',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'settimeofday',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'sched_rr_get_interval',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'timerfd_gettime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'pselect6', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'uselib', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fchmodat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'inotify_add_watch',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'timer_settime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'ftruncate',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'timer_gettime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'ioctl', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'linkat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'stime', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'futimesat',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'poll', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'select', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'unlink', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'nanosleep',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'mq_getsetattr',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'faccessat',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'mq_timedsend',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'swapon', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'epoll_wait',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'fchownat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'timerfd_settime',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'mq_notify',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'sendfile', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'clock_nanosleep',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'unlinkat', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'futex', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'recvmmsg', 'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'sendfile64',
+                'reason': set([('timespec', 'tv_nsec')])},
+               {'call': 'ppoll', 'reason': set([('timespec', 'tv_nsec')])}],
+ 'vmsplice': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+              {'call': 'fadvise64_64',
+               'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+              {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+              {'call': 'swapoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+              {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+              {'call': 'writev', 'reason': set([('fd', 'flags')])},
+              {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+              {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+              {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+              {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+              {'call': 'memfd_create', 'reason': set([('file', 'f_mode')])},
+              {'call': 'remap_file_pages',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'dup3', 'reason': set([('file', 'f_mode')])},
+              {'call': 'read', 'reason': set([('fd', 'flags')])},
+              {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+              {'call': 'utime', 'reason': set([('fd', 'flags')])},
+              {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+              {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+              {'call': 'socketpair', 'reason': set([('file', 'f_mode')])},
+              {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+              {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+              {'call': 'epoll_create1', 'reason': set([('file', 'f_mode')])},
+              {'call': 'tee', 'reason': set([('fd', 'flags')])},
+              {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+              {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+              {'call': 'connect', 'reason': set([('fd', 'flags')])},
+              {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+              {'call': 'epoll_ctl',
+               'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+              {'call': 'flock',
+               'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+              {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+              {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+              {'call': 'openat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'uselib', 'reason': set([('file', 'f_mode')])},
+              {'call': 'accept4',
+               'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+              {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+              {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+              {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+              {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+              {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+              {'call': 'splice', 'reason': set([('fd', 'flags')])},
+              {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+              {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+              {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+              {'call': 'shmat', 'reason': set([('file', 'f_mode')])},
+              {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+              {'call': 'socket', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pipe2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+              {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+              {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+              {'call': 'perf_event_open',
+               'reason': set([('fd', 'flags'), ('file', 'f_mode')])},
+              {'call': 'shmdt', 'reason': set([('file', 'f_mode')])},
+              {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+              {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+              {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+              {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+              {'call': 'acct', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'dup', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+              {'call': 'setns', 'reason': set([('file', 'f_mode')])},
+              {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+              {'call': 'listen', 'reason': set([('fd', 'flags')])},
+              {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+              {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'shmctl', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+              {'call': 'swapon', 'reason': set([('file', 'f_mode')])},
+              {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+              {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+              {'call': 'eventfd2', 'reason': set([('file', 'f_mode')])},
+              {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+              {'call': 'mmap_pgoff', 'reason': set([('file', 'f_mode')])},
+              {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+              {'call': 'readv', 'reason': set([('fd', 'flags')])},
+              {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+              {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+              {'call': 'write', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+              {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+              {'call': 'mq_open', 'reason': set([('file', 'f_mode')])},
+              {'call': 'msync', 'reason': set([('file', 'f_mode')])},
+              {'call': 'open_by_handle_at',
+               'reason': set([('file', 'f_mode')])},
+              {'call': 'bind', 'reason': set([('fd', 'flags')])},
+              {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+              {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}],
+ 'write': [{'call': 'syncfs', 'reason': set([('fd', 'flags')])},
+           {'call': 'vmsplice', 'reason': set([('fd', 'flags')])},
+           {'call': 'fadvise64_64', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fremovexattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'readahead', 'reason': set([('fd', 'flags')])},
+           {'call': 'getdents', 'reason': set([('fd', 'flags')])},
+           {'call': 'writev', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchmod', 'reason': set([('fd', 'flags')])},
+           {'call': 'pread64', 'reason': set([('fd', 'flags')])},
+           {'call': 'signalfd4', 'reason': set([('fd', 'flags')])},
+           {'call': 'read', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchown', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_timedreceive', 'reason': set([('fd', 'flags')])},
+           {'call': 'utime', 'reason': set([('fd', 'flags')])},
+           {'call': 'fsync', 'reason': set([('fd', 'flags')])},
+           {'call': 'bpf', 'reason': set([('fd', 'flags')])},
+           {'call': 'recvfrom', 'reason': set([('fd', 'flags')])},
+           {'call': 'fsetxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendto', 'reason': set([('fd', 'flags')])},
+           {'call': 'tee', 'reason': set([('fd', 'flags')])},
+           {'call': 'sync_file_range', 'reason': set([('fd', 'flags')])},
+           {'call': 'lseek', 'reason': set([('fd', 'flags')])},
+           {'call': 'connect', 'reason': set([('fd', 'flags')])},
+           {'call': 'getsockname', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_ctl', 'reason': set([('fd', 'flags')])},
+           {'call': 'flock', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev', 'reason': set([('fd', 'flags')])},
+           {'call': 'fchdir', 'reason': set([('fd', 'flags')])},
+           {'call': 'accept4', 'reason': set([('fd', 'flags')])},
+           {'call': 'old_readdir', 'reason': set([('fd', 'flags')])},
+           {'call': 'inotify_rm_watch', 'reason': set([('fd', 'flags')])},
+           {'call': 'utimensat', 'reason': set([('fd', 'flags')])},
+           {'call': 'inotify_add_watch', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv2', 'reason': set([('fd', 'flags')])},
+           {'call': 'splice', 'reason': set([('fd', 'flags')])},
+           {'call': 'ftruncate', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv', 'reason': set([('fd', 'flags')])},
+           {'call': 'getpeername', 'reason': set([('fd', 'flags')])},
+           {'call': 'setsockopt', 'reason': set([('fd', 'flags')])},
+           {'call': 'fcntl', 'reason': set([('fd', 'flags')])},
+           {'call': 'ioctl', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwrite64', 'reason': set([('fd', 'flags')])},
+           {'call': 'perf_event_open', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev64v2', 'reason': set([('fd', 'flags')])},
+           {'call': 'futimesat', 'reason': set([('fd', 'flags')])},
+           {'call': 'pwritev2', 'reason': set([('fd', 'flags')])},
+           {'call': 'shutdown', 'reason': set([('fd', 'flags')])},
+           {'call': 'getsockopt', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_getsetattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'fdatasync', 'reason': set([('fd', 'flags')])},
+           {'call': 'getdents64', 'reason': set([('fd', 'flags')])},
+           {'call': 'listen', 'reason': set([('fd', 'flags')])},
+           {'call': 'copy_file_range', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_timedsend', 'reason': set([('fd', 'flags')])},
+           {'call': 'fgetxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'fcntl64', 'reason': set([('fd', 'flags')])},
+           {'call': 'fallocate', 'reason': set([('fd', 'flags')])},
+           {'call': 'epoll_wait', 'reason': set([('fd', 'flags')])},
+           {'call': 'llseek', 'reason': set([('fd', 'flags')])},
+           {'call': 'preadv64v2', 'reason': set([('fd', 'flags')])},
+           {'call': 'readv', 'reason': set([('fd', 'flags')])},
+           {'call': 'fstatfs', 'reason': set([('fd', 'flags')])},
+           {'call': 'fstatfs64', 'reason': set([('fd', 'flags')])},
+           {'call': 'mq_notify', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendfile', 'reason': set([('fd', 'flags')])},
+           {'call': 'bind', 'reason': set([('fd', 'flags')])},
+           {'call': 'flistxattr', 'reason': set([('fd', 'flags')])},
+           {'call': 'sendfile64', 'reason': set([('fd', 'flags')])}]}
--- /dev/null	Fri Dec 21 15:00:35 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/kchecker	Fri Dec 21 15:00:35 2018
@@ -0,0 +1,73 @@
+#!/bin/bash
+
+function usage {
+    echo "Usage:  $0 [--sparse][--valgrind][--debug] path/to/file.c"
+    exit 1
+}
+
+SCRIPT_DIR=$(dirname $0)
+if [ -e $SCRIPT_DIR/../smatch ] ; then
+    CMD=$SCRIPT_DIR/../smatch
+elif which smatch | grep smatch > /dev/null ; then
+    CMD=smatch
+else
+    echo "Smatch binary not found."
+    exit 1
+fi
+
+while true ; do
+    if [[ "$1" == "--sparse" ]] ; then
+	CMD="sparse"
+	shift
+    elif [[ "$1" == "--test-parsing" ]] ; then
+	CMD="$SCRIPT_DIR/../test-parsing -no-lineno"
+	shift
+    elif echo "$1" | grep -q -- "--outfile=" ; then
+	outfile=$(echo "$1" | cut -d '=' -f 2)
+	if [ "outfile" != "" ] ; then
+	    POST="$POST > $outfile"
+	fi
+	shift
+    elif [[ "$1" == "--valgrind" ]] ; then
+	PRE="valgrind"
+	shift
+    elif [[ "$1" == "--endian" ]] ; then
+        ENDIAN="CF=-D__CHECK_ENDIAN__"
+	shift
+    elif [[ "$1" == "" ]] ; then
+	break
+    else
+	if [[ "$1" == "--help" ]] ; then
+		$CMD --help
+		exit 1
+	fi
+	if echo $1 | grep -q ^- ; then
+		POST="$1 $POST"
+	else
+		break
+	fi
+	shift
+    fi
+done
+if echo $CMD | grep -q smatch ; then
+    POST="--project=kernel --succeed $POST"
+fi
+
+cname=$1
+cname=$(echo ${cname/.o/.c})
+if [[ "$cname" == "" ]] ; then
+    usage
+fi
+if ! test -e $cname ; then
+    usage
+fi
+
+oname=$(echo ${cname/.c/.o})
+if ! echo $oname | grep -q .o$ && ! echo $oname | grep -q /$ ; then
+    usage
+fi
+if  echo $oname | grep -q .o$ ; then
+    rm -f $oname
+fi
+
+make C=2 $ENDIAN CHECK="$PRE $CMD $POST" $oname
--- /dev/null	Fri Dec 21 15:00:35 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/kpatch.sh	Fri Dec 21 15:00:35 2018
@@ -0,0 +1,102 @@
+#!/bin/bash -e
+
+TMP_DIR=/tmp
+
+help()
+{
+    echo "Usage: $0 [--no-compile|--ammend] <filename>"
+    echo "You must be at the base of the kernel tree to run this."
+    exit 1
+}
+
+continue_yn()
+{
+    echo -n "Do you want to fix these issues now? "
+    read ans
+    if ! echo $ans | grep -iq ^n ; then
+	exit 1;
+    fi
+}
+
+qc()
+{
+    local msg=$1
+    local ans
+
+    echo -n "$msg:  "
+    read ans
+    if ! echo $ans | grep -qi ^y ; then
+	exit 1
+    fi
+}
+
+NO_COMPILE=false
+AMEND=""
+
+while true ; do
+    if [[ "$1" == "--no-compile" ]] ; then
+        NO_COMPILE=true
+        shift
+    elif [[ "$1" == "--ammend" ]] ; then
+        AMEND="--amend"
+        shift
+    else
+        break
+    fi
+done
+
+if [ ! -f $1 ] ; then
+    help
+fi
+
+fullname=$1
+filename=$(basename $fullname)
+oname=$(echo ${fullname/.c/.o})
+
+MAIL_FILE=$TMP_DIR/${filename}.msg
+
+echo "QC checklist"
+qc "Have you handled all the errors properly?"
+if git diff $fullname | grep ^+ | grep -qi alloc ; then
+    qc "Have you freed all your mallocs?"
+fi
+if git diff $fullname | grep ^+ | grep -qi alloc ; then
+    qc "Have you check all your mallocs for NULL returns?"
+fi
+
+if [ "$NO_COMPILE" != "true" ] ; then
+    kchecker --spammy $fullname
+    kchecker --sparse --endian $fullname
+#    rm $oname
+#    make C=1 CHECK="scripts/coccicheck" $oname
+fi
+
+grepmail $fullname ~/var/mail/sent* | grep -i ^subject || echo -n ""
+qc "Looks OK?"
+
+git log --oneline $fullname | head -n 10
+echo "Copy and paste one of these subjects?"
+read unused
+
+git add $fullname
+git commit --signoff $AMEND
+
+to_addr=$(./scripts/get_maintainer.pl -f --noroles --norolestats $fullname | head -n 1)
+cc_addr=$(./scripts/get_maintainer.pl -f --noroles --norolestats $fullname | tail -n +2 | \
+    perl -ne 's/\n$/, /; print')
+cc_addr="$cc_addr, kernel-janitors@vger.kernel.org"
+
+echo -n "To:  "  > $MAIL_FILE
+echo "$to_addr" >> $MAIL_FILE
+echo -n "CC:  " >> $MAIL_FILE
+echo "$cc_addr" >> $MAIL_FILE
+echo "X-Mailer: git-send-email haha only kidding" >> $MAIL_FILE
+
+git format-patch HEAD^ --stdout >> $MAIL_FILE
+
+./scripts/checkpatch.pl $MAIL_FILE || continue_yn
+
+echo "Press ENTER to continue"
+read unused
+
+mutt -H $MAIL_FILE
--- /dev/null	Fri Dec 21 15:00:35 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/new_bugs.sh	Fri Dec 21 15:00:35 2018
@@ -0,0 +1,37 @@
+#!/bin/bash
+
+new=$1
+old=$2
+
+if [ "$old" = "" ] ; then
+    echo "usage:  $0 <new file> <old file>"
+    exit 1
+fi
+
+#
+# If the $old and $new are very similar then we can 
+# filter out a lot of bug just by doing a diff.
+#
+# But the line numbers change quite frequently so
+# really we only want to see if the line numbers
+# have changed inside the function.
+# The 42 in this message:
+# file.c +123 some_func(42) warn: blah blah blah
+#
+
+IFS="
+"
+for err in $(diff -u $old $new | cut -b 2- | egrep '(warn|error|warning):') ; do
+
+    # we are only interested in the last chunk.
+    # "some_func(42) warn: blah blah blah"
+    last=$(echo $err | cut -d ' ' -f 2-)
+
+    # There are some error message which include a second
+    # line number so we crudely chop that off.
+    last=$(echo $last | sed -e 's/line .*//')
+
+    if ! grep -Fq "$last" $old ; then
+	echo $err
+    fi
+done
--- /dev/null	Fri Dec 21 15:00:35 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/show_errs.sh	Fri Dec 21 15:00:35 2018
@@ -0,0 +1,33 @@
+#!/bin/bash
+
+context=6
+while true ; do
+    if [ "$1" = "-C" ] ; then
+	shift
+	context=$1
+	shift
+	continue
+    fi
+    break
+done
+
+
+file=$1
+[ "$file" = "" ] && [ -e err-list ] && file=err-list
+if [[ "$file" = "" ]] ; then
+    echo "Usage:  $0 [-C <lines>] [-b] [-k] <file with smatch messages>"
+    echo "  -C <lines>:  Print <lines> of context"
+    exit 1
+fi
+
+cat $file | while read line ; do
+    code_file=$(echo "$line" | cut -d ':' -f 1)
+    lineno=$(echo "$line" | cut -d ' ' -f 1 | cut -d ':' -f 2)
+    echo "========================================================="
+    echo "$line"
+    echo "---"
+    tail -n +$(($lineno - ($context - 1))) $code_file | head -n $(($context - 1))
+    echo "---------------------------------------------------------"
+    tail -n +${lineno} $code_file | head -n $context
+done
+
--- /dev/null	Fri Dec 21 15:00:35 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/show_ifs.sh	Fri Dec 21 15:00:35 2018
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+context=1
+if [ "$1" = "-C" ] ; then
+    shift
+    context=$1
+    shift
+fi
+
+file=$1
+if [[ "$file" = "" ]] ; then
+    echo "Usage:  $0 [-C <lines of context>] <file with smatch messages>"
+    exit 1
+fi
+
+grep 'if();' $file | cut -d ' ' -f1 | while read loc; do
+    code_file=$(echo $loc | cut -d ':' -f 1)
+    line=$(echo $loc | cut -d ':' -f 2)
+    echo "========================================================="
+    echo $code_file $line
+    tail -n +$(($line - ($context - 1))) $code_file | head -n $(($context - 1))
+    if [[ $context -gt 1 ]] ; then
+	echo "---------------------------------------------------------"
+    fi
+    tail -n +${line} $code_file | head -n $context
+done
+
--- /dev/null	Fri Dec 21 15:00:35 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/show_unreachable.sh	Fri Dec 21 15:00:35 2018
@@ -0,0 +1,83 @@
+#!/bin/bash
+
+context=6
+while true ; do
+    if [ "$1" = "-C" ] ; then
+        shift
+        context=$1
+        shift
+        continue
+    fi
+    if [ "$1" = "-k" ] ; then
+        shift
+        mode=kernel
+        continue
+    fi
+    if [ "$1" = "-b" ] ; then
+        shift
+        nobreak=yes
+        continue
+    fi
+    break
+done
+
+
+file=$1
+if [[ "$file" = "" ]] ; then
+    echo "Usage:  $0 [-C <lines>] [-b] [-k] <file with smatch messages>"
+    echo "  -C <lines>:  Print <lines> of context"
+    echo "  -b        :  Ignore unreachable break statements"
+    echo "  -k        :  Ignore some kernel defines"
+    exit 1
+fi
+
+kernel_ignore_functions="DLM_ASSERT
+BT_SI_SM_RETURN
+BT_STATE_CHANGE
+PARSE_ERROR1
+PARSE_ERROR
+CMDINSIZE
+PROCESS_SYSTEM_PARAM
+RETURN_STATUS
+ar9170_regwrite_result
+module_put_and_exit
+SEG32
+CASE_PIPExTRE
+"
+
+grep 'ignoring unreachable' $file | cut -d ' ' -f1 | while read loc; do
+    code_file=$(echo $loc | cut -d ':' -f 1)
+    line=$(echo $loc | cut -d ':' -f 2)
+
+    if [ "$mode" = "kernel" ] ; then
+        # BUG() is sometimes defined away on embedded systems
+        if tail -n +$(($line - 1)) $code_file | head -n 1 | \
+            egrep -qw '(BUG|BT_STATE_CHANGE)' ; then
+            continue;
+        fi
+        skip=0
+        line_txt=$(tail -n +$(($line)) $code_file | head -n 1)
+        for func in $kernel_ignore_functions ; do
+            if echo "$line_txt" | egrep -qw $func ; then
+                skip=1
+                break
+            fi
+        done
+        if [ "$skip" == 1 ] ; then
+            continue
+        fi
+    fi
+
+    if [ "$nobreak" = "yes" ] ; then
+        if tail -n +$(($line)) $code_file | head -n 1 | grep -qw 'break' ; then
+            continue;
+        fi
+
+    fi
+    echo "========================================================="
+    echo $code_file:$line
+    tail -n +$(($line - ($context - 1))) $code_file | head -n $(($context - 1))
+    echo "---------------------------------------------------------"
+    tail -n +${line} $code_file | head -n $context
+done
+
--- /dev/null	Fri Dec 21 15:00:35 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/strip_whitespace.pl	Fri Dec 21 15:00:35 2018
@@ -0,0 +1,24 @@
+#!/usr/bin/perl
+
+use strict;
+
+my $file = shift();
+open FILE, "<$file";
+my $txt = do { local $/;  <FILE> };
+
+# strip C99 comments
+$txt =~ s/\/\/.*//g;
+# strip newlines
+$txt =~ s/\n//g;
+# strip remaining comments
+$txt =~ s/\/\*.*?\*\///g;
+# strip tabs
+$txt =~ s/\t//g;
+# strip spaces
+$txt =~ s/ //g;
+# add newlines
+$txt =~ s/;/;\n/g;
+$txt =~ s/{/{\n/g;
+$txt =~ s/}/}\n/g;
+
+print "$txt\n";
--- /dev/null	Fri Dec 21 15:00:35 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/summarize_errs.sh	Fri Dec 21 15:00:35 2018
@@ -0,0 +1,106 @@
+#!/bin/bash
+
+print_help()
+{
+    echo "usage: $0 <warning file>"
+    exit 1;
+}
+
+set_title()
+{
+    echo -ne "\033]0;$*\007"
+    echo ========================================
+    echo $*
+    echo ----------------------------------------
+}
+
+cmd_help()
+{
+    echo "n - skips to next message"
+    echo "f - skips to next file"
+    echo "? - print this message again"
+}
+
+save_thoughts()
+{
+    echo "************"
+    echo $sm_err
+    echo -n "What do you think?:  "
+    read ans
+    if echo $ans | grep ^$ > /dev/null ; then
+        continue
+    fi 
+
+    #store the result
+    echo $sm_err       >> summary
+    echo $ans       >> summary
+    echo ========== >> summary
+}
+
+if [ "$1" = "--new" ] ; then
+    shift
+    NEW=Y
+fi
+
+file=$1
+if [ "$file" = "" ] ; then
+    if [ -e err-list ] ; then
+	file="err-list"
+    else
+	print_help
+    fi
+fi
+
+TXT=$(cat $file | uniq -f 2)
+
+IFS='
+'
+for sm_err in $TXT ; do
+    file=$(echo $sm_err | cut -d ':' -f 1)
+    line=$(echo $sm_err | cut -d ' ' -f 1 | cut -d ':' -f 2)
+
+    if [ "$file" = "$skip_file" ] ; then
+	continue
+    fi
+    skip_file=""
+
+    last=$(echo $sm_err | cut -d ' ' -f 2-)
+    last=$(echo $last | sed -e 's/line .*//')
+
+    if [ "$NEW" = "Y" ] ; then
+	if grep -F "$last" *summary* > /dev/null ; then
+	    echo "skipping $sm_err"
+	    continue
+	fi
+    fi
+
+    set_title $sm_err
+
+    #grep -A1 "$file $line" *summary* 2> /dev/null 
+    grep -A1 -F "$last" *summary* 2> /dev/null
+
+    ans="?"
+    while echo $ans | grep '?' > /dev/null ; do
+	echo -n "[? for help]: "
+	read ans
+	if echo $ans | grep n > /dev/null ; then
+	    continue 2
+	fi
+	if echo $ans | grep f > /dev/null ; then
+	    skip_file=$file
+	    continue 2
+	fi
+	if echo $ans | grep '?' > /dev/null ; then
+	    cmd_help
+	fi
+    done
+
+    # I have this in my .vimrc
+    # map <C-j> :! echo $sm_err<CR>
+    export sm_err
+
+    vim $file +${line}
+
+    save_thoughts
+done	
+IFS=
--- /dev/null	Fri Dec 21 15:00:35 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/test_generic.sh	Fri Dec 21 15:00:35 2018
@@ -0,0 +1,61 @@
+#!/bin/bash
+
+NR_CPU=$(cat /proc/cpuinfo | grep ^processor | wc -l)
+TARGET=""
+WLOG="smatch_warns.txt"
+LOG="smatch_compile.warns"
+function usage {
+    echo
+    echo "Usage:  $0 [smatch options]"
+    echo "Compiles the kernel with -j${NR_CPU}"
+    echo " available options:"
+    echo "	--endian          : enable endianess check"
+    echo "	--target {TARGET} : specify build target, default: $TARGET"
+    echo "	--log {FILE}      : Output compile log to file, default is: $LOG"
+    echo "	--wlog {FILE}     : Output warnigs to file, default is: $WLOG"
+    echo "	--help            : Show this usage"
+    exit 1
+}
+
+
+while true ; do
+    if [[ "$1" == "--endian" ]] ; then
+	ENDIAN="CF=-D__CHECK_ENDIAN__"
+	shift
+    elif [[ "$1" == "--target" ]] ; then
+	shift
+	TARGET="$1"
+	shift
+    elif [[ "$1" == "--log" ]] ; then
+	shift
+	LOG="$1"
+	shift
+    elif [[ "$1" == "--wlog" ]] ; then
+	shift
+	WLOG="$1"
+	shift
+    elif [[ "$1" == "--help" ]] ; then
+	usage
+    else
+	    break
+    fi
+done
+
+SCRIPT_DIR=$(dirname $0)
+if [ -e $SCRIPT_DIR/../smatch ] ; then
+    cp $SCRIPT_DIR/../smatch $SCRIPT_DIR/../bak.smatch
+    CMD=$SCRIPT_DIR/../bak.smatch
+elif which smatch | grep smatch > /dev/null ; then
+    CMD=smatch
+else
+    echo "Smatch binary not found."
+    exit 1
+fi
+
+make clean
+find -name \*.c.smatch -exec rm \{\} \;
+make -j${NR_CPU} $ENDIAN -k CHECK="$CMD --file-output $*" \
+	C=1 $TARGET 2>&1 | tee $LOG
+find -name \*.c.smatch -exec cat \{\} \; -exec rm \{\} \; > $WLOG
+
+echo "Done.  The warnings are saved to $WLOG"
--- /dev/null	Fri Dec 21 15:00:35 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/test_kernel.sh	Fri Dec 21 15:00:35 2018
@@ -0,0 +1,63 @@
+#!/bin/bash
+
+NR_CPU=$(cat /proc/cpuinfo | grep ^processor | wc -l)
+TARGET="bzImage modules"
+WLOG="smatch_warns.txt"
+LOG="smatch_compile.warns"
+function usage {
+    echo
+    echo "Usage:  $0 [smatch options]"
+    echo "Compiles the kernel with -j${NR_CPU}"
+    echo " available options:"
+    echo "	--endian          : enable endianess check"
+    echo "	--target {TARGET} : specify build target, default: $TARGET"
+    echo "	--log {FILE}      : Output compile log to file, default is: $LOG"
+    echo "	--wlog {FILE}     : Output warnigs to file, default is: $WLOG"
+    echo "	--help            : Show this usage"
+    exit 1
+}
+
+
+while true ; do
+    if [[ "$1" == "--endian" ]] ; then
+	ENDIAN="CF=-D__CHECK_ENDIAN__"
+	shift
+    elif [[ "$1" == "--target" ]] ; then
+	shift
+	TARGET="$1"
+	shift
+    elif [[ "$1" == "--log" ]] ; then
+	shift
+	LOG="$1"
+	shift
+    elif [[ "$1" == "--wlog" ]] ; then
+	shift
+	WLOG="$1"
+	shift
+    elif [[ "$1" == "--help" ]] ; then
+	usage
+    else
+	    break
+    fi
+done
+
+SCRIPT_DIR=$(dirname $0)
+if [ -e $SCRIPT_DIR/../smatch ] ; then
+    cp $SCRIPT_DIR/../smatch $SCRIPT_DIR/../bak.smatch
+    CMD=$SCRIPT_DIR/../bak.smatch
+elif which smatch | grep smatch > /dev/null ; then
+    CMD=smatch
+else
+    echo "Smatch binary not found."
+    exit 1
+fi
+
+make clean
+find -name \*.c.smatch -exec rm \{\} \;
+make -j${NR_CPU} $ENDIAN -k CHECK="$CMD -p=kernel --file-output --succeed $*" \
+	C=1 $TARGET 2>&1 | tee $LOG
+find -name \*.c.smatch -exec cat \{\} \; -exec rm \{\} \; > $WLOG
+find -name \*.c.smatch.sql -exec cat \{\} \; -exec rm \{\} \; > $WLOG.sql
+find -name \*.c.smatch.caller_info -exec cat \{\} \; -exec rm \{\} \; > $WLOG.caller_info
+
+echo "Done.  The warnings are saved to $WLOG"
--- /dev/null	Fri Dec 21 15:00:36 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/trace_params.pl	Fri Dec 21 15:00:36 2018
@@ -0,0 +1,112 @@
+#!/usr/bin/perl
+
+# This script is supposed to help use the param_mapper output.
+# Give it a function and parameter and it lists the functions
+# and parameters which are basically equivalent.
+
+use strict;
+
+sub usage()
+{
+    print ("trace_params.pl <smatch output file> <function> <parameter>\n");
+    exit(1);
+}
+
+my %param_map;
+
+my $UNKNOWN  = 1;
+my $NOTFOUND = 2;
+my $FOUND    = 3;
+
+sub recurse($$)
+{
+    my $link = shift;
+    my $target = shift;
+    my $found = 0;
+
+    if ($link =~ /$target/) {
+        $param_map{$link}->{found} = $FOUND;
+        return 1;
+    }
+
+    if ($param_map{$link}->{found} == $FOUND) {
+        return 1;
+    }
+    if ($param_map{$link}->{found} == $NOTFOUND) {
+        return 0;
+    }
+
+    $param_map{$link}->{found} = $NOTFOUND;
+    foreach my $l (@{$param_map{$link}->{links}}){
+        $found = recurse($l, $target);
+        if ($found) {
+            $param_map{$link}->{found} = $FOUND;
+            return 1;
+        }
+    }
+
+    return 0;
+}
+
+sub compress_all($$)
+{
+    my $f = shift;
+    my $p = shift;
+    my $target = "$f%$p";
+
+    foreach my $link (keys %param_map){
+        recurse($link, $target);
+    }
+}
+
+sub add_link($$)
+{
+    my $one = shift;
+    my $two = shift;
+
+    if (!defined($param_map{$one})) {
+        $param_map{$one} = {found => $UNKNOWN, links => []};
+    }
+    push @{$param_map{$one}->{links}}, $two;
+}
+
+sub load_all($)
+{
+    my $file = shift;
+
+    open(FILE, "<$file");
+    while (<FILE>) {
+        if (/.*?:\d+ (.*?)\(\) info: param_mapper (\d+) => (.*?) (\d+)/) {
+            add_link("$1%$2", "$3%$4");
+        }
+    }
+}
+
+sub print_found()
+{
+    foreach my $func (keys %param_map){
+        my $tmp = $param_map{$func};
+
+        if ($tmp->{found} == $FOUND) {
+            my ($f, $p) = split(/%/, $func);
+            print("$f $p\n");
+        }
+    }
+}
+
+my $file = shift();
+my $func = shift();
+my $param = shift();
+
+if (!$file or !$func or !defined($param)) {
+    usage();
+}
+
+if (! -e $file) {
+    printf("Error:  $file does not exist.\n");
+    exit(1);
+}
+
+load_all($file);
+compress_all($func, $param);
+print_found();
--- /dev/null	Fri Dec 21 15:00:36 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/unlocked_paths.pl	Fri Dec 21 15:00:36 2018
@@ -0,0 +1,100 @@
+#!/usr/bin/perl
+
+use strict;
+
+sub usage()
+{
+    print "Usage: unlocked_paths.pl <call tree file> <lock> <function>\n";
+    print "Prints a list of paths to <function> which don't take the <lock>.\n";
+    print "Generate the call tree file by running smatch with --call-tree.\n";
+    exit(1);
+}
+
+my %f_map;
+
+sub add_to_map($)
+{
+    my $callee = shift;
+
+    if (!defined($f_map{$callee})) {
+	$f_map{$callee} = {visited => 0, called_by => {}};
+    }
+}
+
+sub add_called_by($$)
+{
+    my $caller = shift;
+    my $callee = shift;
+    my $tmp;
+
+    %{$f_map{$callee}->{called_by}}->{$caller} = 1;
+}
+
+sub load_all($$)
+{
+    my $file = shift;
+    my $lock = shift;
+
+    open(FILE, "<$file");
+    while (<FILE>) {
+	if (/.*?:\d+ (.*?)\(\) info: func_call \((.*)\) (.*)/) {
+	    my $caller = quotemeta $1;
+	    my $locks = quotemeta $2;
+	    my $callee = quotemeta $3;
+
+	    add_to_map($callee);
+	    if (!($locks =~ /$lock/)) {
+		add_called_by($caller, $callee);
+	    }
+	}
+    }
+}
+
+my @fstack;
+sub print_fstack()
+{
+    foreach my $f (reverse @fstack) {
+	printf "$f ";
+    }
+    printf "\n";
+}
+
+sub print_unlocked_paths($)
+{
+    my $function = shift;
+
+    if (! defined %{$f_map{$function}}->{called_by}) {
+	push @fstack, $function;
+	print_fstack();
+	pop @fstack;
+	return;
+    }
+
+    push @fstack, $function;
+
+    if (!%{$f_map{$function}}->{visited}) {
+	%{$f_map{$function}}->{visited} = 1;
+	foreach my $caller (keys %{%{$f_map{$function}}->{called_by}}){
+	    print_unlocked_paths($caller);
+	}
+	%{$f_map{$function}}->{visited} = 0;
+
+    }
+
+    pop @fstack;
+}
+
+my $file = shift;
+my $lock = shift;
+my $target = shift;
+
+if (!$file || !$lock || !$target) {
+    usage();
+}
+if (! -e $file) {
+    printf("Error:  $file does not exist.\n");
+    exit(1);
+}
+
+load_all($file, $lock);
+print_unlocked_paths($target);
--- /dev/null	Fri Dec 21 15:00:36 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/whitespace_only.sh	Fri Dec 21 15:00:36 2018
@@ -0,0 +1,91 @@
+#!/bin/bash -e
+
+usage()
+{
+    echo "usage:  $0 <patch file>"
+    exit 1
+}
+
+if [ "$1" = "" ] ; then
+    usage
+fi
+
+if [ "$1" = "--compile" ] ; then
+    compile=true
+    shift
+fi
+
+SCRIPT_DIR=$(dirname $0)
+if [ -e $SCRIPT_DIR/kchecker ] ; then
+    KCHECKER=$SCRIPT_DIR/kchecker
+    STRIP=$SCRIPT_DIR/strip_whitespace.pl
+elif which kchecker | grep kchecker > /dev/null ; then
+    KCHECKER=kchecker
+    STRIP=strip_whitespace.pl
+else
+    echo "$SCRIPT_DIR"
+    echo "kchecker script not found."
+    exit 1
+fi
+
+PATCH=$1
+
+files=$(grep ^+++ $PATCH | cut -f 1 | cut -b 5-)
+if [ "$files" = "" ] ; then
+    usage
+fi
+
+if ! cat $PATCH | patch -p1 --dry-run > /dev/null ; then
+    echo "Couldn't apply patch"
+    exit 1
+fi
+
+before=$(mktemp /tmp/before.XXXXXXXXXX)
+after=$(mktemp /tmp/after.XXXXXXXXXX)
+tmpfile=$(mktemp)
+
+for file in $files ; do
+    file=${file#*/}
+
+    $STRIP $file > $before
+    if [ "$compile" = "true" ] ; then
+	if ! $KCHECKER --test-parsing --outfile=$before $file ; then
+		echo "warning: compile failed."
+	fi
+	mv $before $tmpfile
+	$STRIP $file > $before
+	cat $tmpfile >> $before
+    fi
+    cat $PATCH | patch -p1
+    $STRIP $file > $after
+    if [ "$compile" = "true" ] ; then
+	if ! $KCHECKER --test-parsing --outfile=$after $file ; then
+		echo "warning: compile failed.  *again*"
+	fi
+	mv $after $tmpfile
+	$STRIP $file > $after
+	cat $tmpfile >> $after
+    fi
+    cat $PATCH | patch -p1 -R
+
+    if [ ! -s $before ] ; then
+	echo "Error:  No result"
+	exit 1
+    fi
+
+    if diff $before $after > /dev/null ; then
+	echo
+	echo Only white space changed
+	echo
+    else
+	echo '!!#$%@$%@^@#$^@#%@$%@$%@#%$@#%!!'
+	echo '!!                            !!'
+	echo '!!  This patch changes stuff  !!'
+	echo '!!                            !!'
+	echo '!!#$%@$%@^@#$^@#%@$%@$%@#%$@#%!!'
+
+	diff -u $before $after 
+    fi
+    rm -f $before $after $tmpfile
+done
+
--- /dev/null	Fri Dec 21 15:00:36 2018
+++ new/usr/src/tools/smatch/src/smatch_scripts/wine_checker.sh	Fri Dec 21 15:00:36 2018
@@ -0,0 +1,65 @@
+#!/bin/bash
+
+function usage {
+    echo "Usage:  $0 [--sparse][--valgrind][--debug] path/to/file.c"
+    exit 1
+}
+
+SCRIPT_DIR=$(dirname $0)
+if [ -e $SCRIPT_DIR/../smatch ] ; then
+    CMD=$SCRIPT_DIR/../smatch
+elif which smatch | grep smatch > /dev/null ; then
+    CMD=smatch
+else
+    echo "Smatch binary not found."
+    exit 1
+fi
+    
+POST=""
+WINE_ARGS="-p=wine --full-path -D__i386__"
+
+while true ; do
+    if [[ "$1" == "--sparse" ]] ; then
+	CMD="sparse"
+	shift
+    elif [[ "$1" == "--valgrind" ]] ; then
+	PRE="valgrind"
+	shift
+    elif [[ "$1" == "" ]] ; then
+	break
+    else
+	if [[ "$1" == "--help" ]] ; then
+		$CMD --help
+		exit 1
+	fi
+	if echo $1 | grep -q ^- ; then
+		POST="$POST $1"
+	else
+		break
+	fi
+	shift
+    fi
+done
+
+cname=$1
+cname=$(echo ${cname/.o/.c})
+if [[ "$cname" == "" ]] ; then
+    usege
+fi
+if ! test -e $cname ; then
+    usege
+fi
+
+oname=$(echo ${cname/.c/.o})
+if ! echo $oname | grep .o$ > /dev/null ; then
+    usege
+fi
+rm -f $oname
+
+cur=$(pwd)
+file_dir=$(dirname $oname)
+o_short_name=$(basename $oname)
+cd $file_dir
+make CC="$PRE $CMD $POST $WINE_ARGS" $o_short_name
+make $o_short_name
+cd $cur
--- /dev/null	Fri Dec 21 15:00:36 2018
+++ new/usr/src/tools/smatch/src/smatch_slist.c	Fri Dec 21 15:00:36 2018
@@ -0,0 +1,994 @@
+/*
+ * Copyright (C) 2008,2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "smatch.h"
+#include "smatch_slist.h"
+
+#undef CHECKORDER
+
+ALLOCATOR(smatch_state, "smatch state");
+ALLOCATOR(sm_state, "sm state");
+ALLOCATOR(named_stree, "named slist");
+__DO_ALLOCATOR(char, 1, 4, "state names", sname);
+
+int sm_state_counter;
+
+static struct stree_stack *all_pools;
+
+const char *show_sm(struct sm_state *sm)
+{
+	static char buf[256];
+	struct sm_state *tmp;
+	int pos;
+	int i;
+
+	if (!sm)
+		return "<none>";
+
+	pos = snprintf(buf, sizeof(buf), "[%s] '%s' = '%s'",
+		       check_name(sm->owner), sm->name, show_state(sm->state));
+	if (pos > sizeof(buf))
+		goto truncate;
+
+	if (ptr_list_size((struct ptr_list *)sm->possible) == 1)
+		return buf;
+
+	pos += snprintf(buf + pos, sizeof(buf) - pos, " (");
+	if (pos > sizeof(buf))
+		goto truncate;
+	i = 0;
+	FOR_EACH_PTR(sm->possible, tmp) {
+		if (i++)
+			pos += snprintf(buf + pos, sizeof(buf) - pos, ", ");
+		if (pos > sizeof(buf))
+			goto truncate;
+		pos += snprintf(buf + pos, sizeof(buf) - pos, "%s",
+			       show_state(tmp->state));
+		if (pos > sizeof(buf))
+			goto truncate;
+	} END_FOR_EACH_PTR(tmp);
+	snprintf(buf + pos, sizeof(buf) - pos, ")");
+
+	return buf;
+
+truncate:
+	for (i = 0; i < 3; i++)
+		buf[sizeof(buf) - 2 - i] = '.';
+	return buf;
+}
+
+void __print_stree(struct stree *stree)
+{
+	struct sm_state *sm;
+
+	printf("dumping stree at %d [%ld states]\n", get_lineno(), stree_count(stree));
+	FOR_EACH_SM(stree, sm) {
+		printf("%s\n", show_sm(sm));
+	} END_FOR_EACH_SM(sm);
+	printf("---\n");
+}
+
+/* NULL states go at the end to simplify merge_slist */
+int cmp_tracker(const struct sm_state *a, const struct sm_state *b)
+{
+	int ret;
+
+	if (a == b)
+		return 0;
+	if (!b)
+		return -1;
+	if (!a)
+		return 1;
+
+	if (a->owner > b->owner)
+		return -1;
+	if (a->owner < b->owner)
+		return 1;
+
+	ret = strcmp(a->name, b->name);
+	if (ret < 0)
+		return -1;
+	if (ret > 0)
+		return 1;
+
+	if (!b->sym && a->sym)
+		return -1;
+	if (!a->sym && b->sym)
+		return 1;
+	if (a->sym < b->sym)
+		return -1;
+	if (a->sym > b->sym)
+		return 1;
+
+	return 0;
+}
+
+static int cmp_sm_states(const struct sm_state *a, const struct sm_state *b, int preserve)
+{
+	int ret;
+
+	ret = cmp_tracker(a, b);
+	if (ret)
+		return ret;
+
+	/* todo:  add hook for smatch_extra.c */
+	if (a->state > b->state)
+		return -1;
+	if (a->state < b->state)
+		return 1;
+	/* This is obviously a massive disgusting hack but we need to preserve
+	 * the unmerged states for smatch extra because we use them in
+	 * smatch_db.c.  Meanwhile if we preserve all the other unmerged states
+	 * then it uses a lot of memory and we don't use it.  Hence this hack.
+	 *
+	 * Also sometimes even just preserving every possible SMATCH_EXTRA state
+	 * takes too much resources so we have to cap that.  Capping is probably
+	 * not often a problem in real life.
+	 */
+	if (a->owner == SMATCH_EXTRA && preserve) {
+		if (a == b)
+			return 0;
+		if (a->merged == 1 && b->merged == 0)
+			return -1;
+		if (a->merged == 0)
+			return 1;
+	}
+
+	return 0;
+}
+
+struct sm_state *alloc_sm_state(int owner, const char *name,
+				struct symbol *sym, struct smatch_state *state)
+{
+	struct sm_state *sm_state = __alloc_sm_state(0);
+
+	sm_state_counter++;
+
+	sm_state->name = alloc_sname(name);
+	sm_state->owner = owner;
+	sm_state->sym = sym;
+	sm_state->state = state;
+	sm_state->line = get_lineno();
+	sm_state->merged = 0;
+	sm_state->pool = NULL;
+	sm_state->left = NULL;
+	sm_state->right = NULL;
+	sm_state->nr_children = 1;
+	sm_state->possible = NULL;
+	add_ptr_list(&sm_state->possible, sm_state);
+	return sm_state;
+}
+
+static struct sm_state *alloc_state_no_name(int owner, const char *name,
+				     struct symbol *sym,
+				     struct smatch_state *state)
+{
+	struct sm_state *tmp;
+
+	tmp = alloc_sm_state(owner, NULL, sym, state);
+	tmp->name = name;
+	return tmp;
+}
+
+int too_many_possible(struct sm_state *sm)
+{
+	if (ptr_list_size((struct ptr_list *)sm->possible) >= 100)
+		return 1;
+	return 0;
+}
+
+void add_possible_sm(struct sm_state *to, struct sm_state *new)
+{
+	struct sm_state *tmp;
+	int preserve = 1;
+
+	if (too_many_possible(to))
+		preserve = 0;
+
+	FOR_EACH_PTR(to->possible, tmp) {
+		if (cmp_sm_states(tmp, new, preserve) < 0)
+			continue;
+		else if (cmp_sm_states(tmp, new, preserve) == 0) {
+			return;
+		} else {
+			INSERT_CURRENT(new, tmp);
+			return;
+		}
+	} END_FOR_EACH_PTR(tmp);
+	add_ptr_list(&to->possible, new);
+}
+
+static void copy_possibles(struct sm_state *to, struct sm_state *from)
+{
+	struct sm_state *tmp;
+
+	FOR_EACH_PTR(from->possible, tmp) {
+		add_possible_sm(to, tmp);
+	} END_FOR_EACH_PTR(tmp);
+}
+
+char *alloc_sname(const char *str)
+{
+	char *tmp;
+
+	if (!str)
+		return NULL;
+	tmp = __alloc_sname(strlen(str) + 1);
+	strcpy(tmp, str);
+	return tmp;
+}
+
+int out_of_memory(void)
+{
+	/*
+	 * I decided to use 50M here based on trial and error.
+	 * It works out OK for the kernel and so it should work
+	 * for most other projects as well.
+	 */
+	if (sm_state_counter * sizeof(struct sm_state) >= 100000000)
+		return 1;
+	return 0;
+}
+
+int low_on_memory(void)
+{
+	if (sm_state_counter * sizeof(struct sm_state) >= 25000000)
+		return 1;
+	return 0;
+}
+
+static void free_sm_state(struct sm_state *sm)
+{
+	free_slist(&sm->possible);
+	/*
+	 * fixme.  Free the actual state.
+	 * Right now we leave it until the end of the function
+	 * because we don't want to double free it.
+	 * Use the freelist to not double free things
+	 */
+}
+
+static void free_all_sm_states(struct allocation_blob *blob)
+{
+	unsigned int size = sizeof(struct sm_state);
+	unsigned int offset = 0;
+
+	while (offset < blob->offset) {
+		free_sm_state((struct sm_state *)(blob->data + offset));
+		offset += size;
+	}
+}
+
+/* At the end of every function we free all the sm_states */
+void free_every_single_sm_state(void)
+{
+	struct allocator_struct *desc = &sm_state_allocator;
+	struct allocation_blob *blob = desc->blobs;
+
+	desc->blobs = NULL;
+	desc->allocations = 0;
+	desc->total_bytes = 0;
+	desc->useful_bytes = 0;
+	desc->freelist = NULL;
+	while (blob) {
+		struct allocation_blob *next = blob->next;
+		free_all_sm_states(blob);
+		blob_free(blob, desc->chunking);
+		blob = next;
+	}
+	clear_sname_alloc();
+	clear_smatch_state_alloc();
+
+	free_stack_and_strees(&all_pools);
+	sm_state_counter = 0;
+}
+
+unsigned long get_pool_count(void)
+{
+	return ptr_list_size((struct ptr_list *)all_pools);
+}
+
+struct sm_state *clone_sm(struct sm_state *s)
+{
+	struct sm_state *ret;
+
+	ret = alloc_state_no_name(s->owner, s->name, s->sym, s->state);
+	ret->merged = s->merged;
+	ret->line = s->line;
+	/* clone_sm() doesn't copy the pools.  Each state needs to have
+	   only one pool. */
+	ret->possible = clone_slist(s->possible);
+	ret->left = s->left;
+	ret->right = s->right;
+	ret->nr_children = s->nr_children;
+	return ret;
+}
+
+int is_merged(struct sm_state *sm)
+{
+	return sm->merged;
+}
+
+int is_leaf(struct sm_state *sm)
+{
+	return !sm->merged;
+}
+
+int slist_has_state(struct state_list *slist, struct smatch_state *state)
+{
+	struct sm_state *tmp;
+
+	FOR_EACH_PTR(slist, tmp) {
+		if (tmp->state == state)
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+	return 0;
+}
+
+struct state_list *clone_slist(struct state_list *from_slist)
+{
+	struct sm_state *sm;
+	struct state_list *to_slist = NULL;
+
+	FOR_EACH_PTR(from_slist, sm) {
+		add_ptr_list(&to_slist, sm);
+	} END_FOR_EACH_PTR(sm);
+	return to_slist;
+}
+
+static struct smatch_state *merge_states(int owner, const char *name,
+					 struct symbol *sym,
+					 struct smatch_state *state1,
+					 struct smatch_state *state2)
+{
+	struct smatch_state *ret;
+
+	if (state1 == state2)
+		ret = state1;
+	else if (__has_merge_function(owner))
+		ret = __client_merge_function(owner, state1, state2);
+	else if (state1 == &ghost)
+		ret = state2;
+	else if (state2 == &ghost)
+		ret = state1;
+	else if (!state1 || !state2)
+		ret = &undefined;
+	else
+		ret = &merged;
+	return ret;
+}
+
+struct sm_state *merge_sm_states(struct sm_state *one, struct sm_state *two)
+{
+	struct smatch_state *s;
+	struct sm_state *result;
+	static int warned;
+
+	if (one == two)
+		return one;
+	if (out_of_memory()) {
+		if (!warned)
+			sm_warning("Function too hairy.  No more merges.");
+		warned = 1;
+		return one;
+	}
+	warned = 0;
+	s = merge_states(one->owner, one->name, one->sym, one->state, two->state);
+	result = alloc_state_no_name(one->owner, one->name, one->sym, s);
+	result->merged = 1;
+	result->left = one;
+	result->right = two;
+	result->nr_children = one->nr_children + two->nr_children;
+	copy_possibles(result, one);
+	copy_possibles(result, two);
+
+	/*
+	 * The ->line information is used by deref_check where we complain about
+	 * checking pointers that have already been dereferenced.  Let's say we
+	 * dereference a pointer on both the true and false paths and then merge
+	 * the states here.  The result state is &derefed, but the ->line number
+	 * is on the line where the pointer is merged not where it was
+	 * dereferenced..
+	 *
+	 * So in that case, let's just pick one dereference and set the ->line
+	 * to point at it.
+	 *
+	 */
+
+	if (result->state == one->state)
+		result->line = one->line;
+	if (result->state == two->state)
+		result->line = two->line;
+
+	if (option_debug ||
+	    strcmp(check_name(one->owner), option_debug_check) == 0) {
+		struct sm_state *tmp;
+		int i = 0;
+
+		printf("%s:%d %s() merge [%s] '%s' %s(L %d) + %s(L %d) => %s (",
+			get_filename(), get_lineno(), get_function(),
+			check_name(one->owner), one->name,
+			show_state(one->state), one->line,
+			show_state(two->state), two->line,
+			show_state(s));
+
+		FOR_EACH_PTR(result->possible, tmp) {
+			if (i++)
+				printf(", ");
+			printf("%s", show_state(tmp->state));
+		} END_FOR_EACH_PTR(tmp);
+		printf(")\n");
+	}
+
+	return result;
+}
+
+struct sm_state *get_sm_state_stree(struct stree *stree, int owner, const char *name,
+				struct symbol *sym)
+{
+	struct tracker tracker = {
+		.owner = owner,
+		.name = (char *)name,
+		.sym = sym,
+	};
+
+	if (!name)
+		return NULL;
+
+
+	return avl_lookup(stree, (struct sm_state *)&tracker);
+}
+
+struct smatch_state *get_state_stree(struct stree *stree,
+				int owner, const char *name,
+				struct symbol *sym)
+{
+	struct sm_state *sm;
+
+	sm = get_sm_state_stree(stree, owner, name, sym);
+	if (sm)
+		return sm->state;
+	return NULL;
+}
+
+/* FIXME: this is almost exactly the same as set_sm_state_slist() */
+void overwrite_sm_state_stree(struct stree **stree, struct sm_state *new)
+{
+	avl_insert(stree, new);
+}
+
+void overwrite_sm_state_stree_stack(struct stree_stack **stack,
+			struct sm_state *sm)
+{
+	struct stree *stree;
+
+	stree = pop_stree(stack);
+	overwrite_sm_state_stree(&stree, sm);
+	push_stree(stack, stree);
+}
+
+struct sm_state *set_state_stree(struct stree **stree, int owner, const char *name,
+		     struct symbol *sym, struct smatch_state *state)
+{
+	struct sm_state *new = alloc_sm_state(owner, name, sym, state);
+
+	avl_insert(stree, new);
+	return new;
+}
+
+void set_state_stree_perm(struct stree **stree, int owner, const char *name,
+		     struct symbol *sym, struct smatch_state *state)
+{
+	struct sm_state *sm;
+
+	sm = malloc(sizeof(*sm) + strlen(name) + 1);
+	memset(sm, 0, sizeof(*sm));
+	sm->owner = owner;
+	sm->name = (char *)(sm + 1);
+	strcpy((char *)sm->name, name);
+	sm->sym = sym;
+	sm->state = state;
+
+	overwrite_sm_state_stree(stree, sm);
+}
+
+void delete_state_stree(struct stree **stree, int owner, const char *name,
+			struct symbol *sym)
+{
+	struct tracker tracker = {
+		.owner = owner,
+		.name = (char *)name,
+		.sym = sym,
+	};
+
+	avl_remove(stree, (struct sm_state *)&tracker);
+}
+
+void delete_state_stree_stack(struct stree_stack **stack, int owner, const char *name,
+			struct symbol *sym)
+{
+	struct stree *stree;
+
+	stree = pop_stree(stack);
+	delete_state_stree(&stree, owner, name, sym);
+	push_stree(stack, stree);
+}
+
+void push_stree(struct stree_stack **stack, struct stree *stree)
+{
+	add_ptr_list(stack, stree);
+}
+
+struct stree *pop_stree(struct stree_stack **stack)
+{
+	struct stree *stree;
+
+	stree = last_ptr_list((struct ptr_list *)*stack);
+	delete_ptr_list_last((struct ptr_list **)stack);
+	return stree;
+}
+
+struct stree *top_stree(struct stree_stack *stack)
+{
+	return last_ptr_list((struct ptr_list *)stack);
+}
+
+void free_slist(struct state_list **slist)
+{
+	__free_ptr_list((struct ptr_list **)slist);
+}
+
+void free_stree_stack(struct stree_stack **stack)
+{
+	__free_ptr_list((struct ptr_list **)stack);
+}
+
+void free_stack_and_strees(struct stree_stack **stree_stack)
+{
+	struct stree *stree;
+
+	FOR_EACH_PTR(*stree_stack, stree) {
+		free_stree(&stree);
+	} END_FOR_EACH_PTR(stree);
+	free_stree_stack(stree_stack);
+}
+
+struct sm_state *set_state_stree_stack(struct stree_stack **stack, int owner, const char *name,
+				struct symbol *sym, struct smatch_state *state)
+{
+	struct stree *stree;
+	struct sm_state *sm;
+
+	stree = pop_stree(stack);
+	sm = set_state_stree(&stree, owner, name, sym, state);
+	push_stree(stack, stree);
+
+	return sm;
+}
+
+/*
+ * get_sm_state_stack() gets the state for the top slist on the stack.
+ */
+struct sm_state *get_sm_state_stree_stack(struct stree_stack *stack,
+				int owner, const char *name,
+				struct symbol *sym)
+{
+	struct stree *stree;
+	struct sm_state *ret;
+
+	stree = pop_stree(&stack);
+	ret = get_sm_state_stree(stree, owner, name, sym);
+	push_stree(&stack, stree);
+	return ret;
+}
+
+struct smatch_state *get_state_stree_stack(struct stree_stack *stack,
+				int owner, const char *name,
+				struct symbol *sym)
+{
+	struct sm_state *sm;
+
+	sm = get_sm_state_stree_stack(stack, owner, name, sym);
+	if (sm)
+		return sm->state;
+	return NULL;
+}
+
+static void match_states_stree(struct stree **one, struct stree **two)
+{
+	struct smatch_state *tmp_state;
+	struct sm_state *sm;
+	struct state_list *add_to_one = NULL;
+	struct state_list *add_to_two = NULL;
+	AvlIter one_iter;
+	AvlIter two_iter;
+
+	avl_iter_begin(&one_iter, *one, FORWARD);
+	avl_iter_begin(&two_iter, *two, FORWARD);
+
+	for (;;) {
+		if (!one_iter.sm && !two_iter.sm)
+			break;
+		if (cmp_tracker(one_iter.sm, two_iter.sm) < 0) {
+			__set_fake_cur_stree_fast(*two);
+			tmp_state = __client_unmatched_state_function(one_iter.sm);
+			__pop_fake_cur_stree_fast();
+			sm = alloc_state_no_name(one_iter.sm->owner, one_iter.sm->name,
+						  one_iter.sm->sym, tmp_state);
+			add_ptr_list(&add_to_two, sm);
+			avl_iter_next(&one_iter);
+		} else if (cmp_tracker(one_iter.sm, two_iter.sm) == 0) {
+			avl_iter_next(&one_iter);
+			avl_iter_next(&two_iter);
+		} else {
+			__set_fake_cur_stree_fast(*one);
+			tmp_state = __client_unmatched_state_function(two_iter.sm);
+			__pop_fake_cur_stree_fast();
+			sm = alloc_state_no_name(two_iter.sm->owner, two_iter.sm->name,
+						  two_iter.sm->sym, tmp_state);
+			add_ptr_list(&add_to_one, sm);
+			avl_iter_next(&two_iter);
+		}
+	}
+
+	FOR_EACH_PTR(add_to_one, sm) {
+		avl_insert(one, sm);
+	} END_FOR_EACH_PTR(sm);
+
+	FOR_EACH_PTR(add_to_two, sm) {
+		avl_insert(two, sm);
+	} END_FOR_EACH_PTR(sm);
+
+	free_slist(&add_to_one);
+	free_slist(&add_to_two);
+}
+
+static void call_pre_merge_hooks(struct stree **one, struct stree **two)
+{
+	struct sm_state *sm, *other;
+
+	save_all_states();
+
+	__swap_cur_stree(*one);
+	FOR_EACH_SM(*two, sm) {
+		other = get_sm_state(sm->owner, sm->name, sm->sym);
+		if (other == sm)
+			continue;
+		call_pre_merge_hook(sm);
+	} END_FOR_EACH_SM(sm);
+	*one = clone_stree(__get_cur_stree());
+
+	__swap_cur_stree(*two);
+	FOR_EACH_SM(*one, sm) {
+		other = get_sm_state(sm->owner, sm->name, sm->sym);
+		if (other == sm)
+			continue;
+		call_pre_merge_hook(sm);
+	} END_FOR_EACH_SM(sm);
+	*two = clone_stree(__get_cur_stree());
+
+	restore_all_states();
+}
+
+static void clone_pool_havers_stree(struct stree **stree)
+{
+	struct sm_state *sm, *tmp;
+	struct state_list *slist = NULL;
+
+	FOR_EACH_SM(*stree, sm) {
+		if (sm->pool) {
+			tmp = clone_sm(sm);
+			add_ptr_list(&slist, tmp);
+		}
+	} END_FOR_EACH_SM(sm);
+
+	FOR_EACH_PTR(slist, sm) {
+		avl_insert(stree, sm);
+	} END_FOR_EACH_PTR(sm);
+
+	free_slist(&slist);
+}
+
+int __stree_id;
+
+/*
+ * merge_slist() is called whenever paths merge, such as after
+ * an if statement.  It takes the two slists and creates one.
+ */
+static void __merge_stree(struct stree **to, struct stree *stree, int add_pool)
+{
+	struct stree *results = NULL;
+	struct stree *implied_one = NULL;
+	struct stree *implied_two = NULL;
+	AvlIter one_iter;
+	AvlIter two_iter;
+	struct sm_state *tmp_sm;
+
+	if (out_of_memory())
+		return;
+
+	/* merging a null and nonnull path gives you only the nonnull path */
+	if (!stree)
+		return;
+	if (*to == stree)
+		return;
+
+	if (!*to) {
+		*to = clone_stree(stree);
+		return;
+	}
+
+	implied_one = clone_stree(*to);
+	implied_two = clone_stree(stree);
+
+	match_states_stree(&implied_one, &implied_two);
+	call_pre_merge_hooks(&implied_one, &implied_two);
+
+	if (add_pool) {
+		clone_pool_havers_stree(&implied_one);
+		clone_pool_havers_stree(&implied_two);
+
+		set_stree_id(&implied_one, ++__stree_id);
+		set_stree_id(&implied_two, ++__stree_id);
+		if (implied_one->base_stree)
+			set_stree_id(&implied_one->base_stree, ++__stree_id);
+		if (implied_two->base_stree)
+			set_stree_id(&implied_two->base_stree, ++__stree_id);
+	}
+
+	push_stree(&all_pools, implied_one);
+	push_stree(&all_pools, implied_two);
+
+	avl_iter_begin(&one_iter, implied_one, FORWARD);
+	avl_iter_begin(&two_iter, implied_two, FORWARD);
+
+	for (;;) {
+		if (!one_iter.sm || !two_iter.sm)
+			break;
+		if (cmp_tracker(one_iter.sm, two_iter.sm) < 0) {
+			sm_perror(" in %s", __func__);
+			avl_iter_next(&one_iter);
+		} else if (cmp_tracker(one_iter.sm, two_iter.sm) == 0) {
+			if (add_pool && one_iter.sm != two_iter.sm) {
+				one_iter.sm->pool = implied_one;
+				if (implied_one->base_stree)
+					one_iter.sm->pool = implied_one->base_stree;
+				two_iter.sm->pool = implied_two;
+				if (implied_two->base_stree)
+					two_iter.sm->pool = implied_two->base_stree;
+			}
+			tmp_sm = merge_sm_states(one_iter.sm, two_iter.sm);
+			add_possible_sm(tmp_sm, one_iter.sm);
+			add_possible_sm(tmp_sm, two_iter.sm);
+			avl_insert(&results, tmp_sm);
+			avl_iter_next(&one_iter);
+			avl_iter_next(&two_iter);
+		} else {
+			sm_perror(" in %s", __func__);
+			avl_iter_next(&two_iter);
+		}
+	}
+
+	free_stree(to);
+	*to = results;
+}
+
+void merge_stree(struct stree **to, struct stree *stree)
+{
+	__merge_stree(to, stree, 1);
+}
+
+void merge_stree_no_pools(struct stree **to, struct stree *stree)
+{
+	__merge_stree(to, stree, 0);
+}
+
+/*
+ * This is unfortunately a bit subtle...  The problem is that if a
+ * state is set on one fake stree but not the other then we should
+ * look up the the original state and use that as the unset state.
+ * Fortunately, after you pop your fake stree then the cur_slist should
+ * reflect the original state.
+ */
+void merge_fake_stree(struct stree **to, struct stree *stree)
+{
+	struct stree *one = *to;
+	struct stree *two = stree;
+	struct sm_state *sm;
+	struct state_list *add_to_one = NULL;
+	struct state_list *add_to_two = NULL;
+	AvlIter one_iter;
+	AvlIter two_iter;
+
+	if (!stree)
+		return;
+	if (*to == stree)
+		return;
+	if (!*to) {
+		*to = clone_stree(stree);
+		return;
+	}
+
+	avl_iter_begin(&one_iter, one, FORWARD);
+	avl_iter_begin(&two_iter, two, FORWARD);
+
+	for (;;) {
+		if (!one_iter.sm && !two_iter.sm)
+			break;
+		if (cmp_tracker(one_iter.sm, two_iter.sm) < 0) {
+			sm = get_sm_state(one_iter.sm->owner, one_iter.sm->name,
+					  one_iter.sm->sym);
+			if (sm)
+				add_ptr_list(&add_to_two, sm);
+			avl_iter_next(&one_iter);
+		} else if (cmp_tracker(one_iter.sm, two_iter.sm) == 0) {
+			avl_iter_next(&one_iter);
+			avl_iter_next(&two_iter);
+		} else {
+			sm = get_sm_state(two_iter.sm->owner, two_iter.sm->name,
+					  two_iter.sm->sym);
+			if (sm)
+				add_ptr_list(&add_to_one, sm);
+			avl_iter_next(&two_iter);
+		}
+	}
+
+	FOR_EACH_PTR(add_to_one, sm) {
+		avl_insert(&one, sm);
+	} END_FOR_EACH_PTR(sm);
+
+	FOR_EACH_PTR(add_to_two, sm) {
+		avl_insert(&two, sm);
+	} END_FOR_EACH_PTR(sm);
+
+	one->base_stree = clone_stree(__get_cur_stree());
+	FOR_EACH_SM(one, sm) {
+		avl_insert(&one->base_stree, sm);
+	} END_FOR_EACH_SM(sm);
+
+	two->base_stree = clone_stree(__get_cur_stree());
+	FOR_EACH_SM(two, sm) {
+		avl_insert(&two->base_stree, sm);
+	} END_FOR_EACH_SM(sm);
+
+	free_slist(&add_to_one);
+	free_slist(&add_to_two);
+
+	__merge_stree(&one, two, 1);
+
+	*to = one;
+}
+
+/*
+ * filter_slist() removes any sm states "slist" holds in common with "filter"
+ */
+void filter_stree(struct stree **stree, struct stree *filter)
+{
+	struct stree *results = NULL;
+	AvlIter one_iter;
+	AvlIter two_iter;
+
+	avl_iter_begin(&one_iter, *stree, FORWARD);
+	avl_iter_begin(&two_iter, filter, FORWARD);
+
+	/* FIXME: This should probably be re-written with trees in mind */
+
+	for (;;) {
+		if (!one_iter.sm && !two_iter.sm)
+			break;
+		if (cmp_tracker(one_iter.sm, two_iter.sm) < 0) {
+			avl_insert(&results, one_iter.sm);
+			avl_iter_next(&one_iter);
+		} else if (cmp_tracker(one_iter.sm, two_iter.sm) == 0) {
+			if (one_iter.sm != two_iter.sm)
+				avl_insert(&results, one_iter.sm);
+			avl_iter_next(&one_iter);
+			avl_iter_next(&two_iter);
+		} else {
+			avl_iter_next(&two_iter);
+		}
+	}
+
+	free_stree(stree);
+	*stree = results;
+}
+
+
+/*
+ * and_slist_stack() pops the top two slists, overwriting the one with
+ * the other and pushing it back on the stack.
+ */
+void and_stree_stack(struct stree_stack **stack)
+{
+	struct sm_state *tmp;
+	struct stree *right_stree = pop_stree(stack);
+
+	FOR_EACH_SM(right_stree, tmp) {
+		overwrite_sm_state_stree_stack(stack, tmp);
+	} END_FOR_EACH_SM(tmp);
+	free_stree(&right_stree);
+}
+
+/*
+ * or_slist_stack() is for if we have:  if (foo || bar) { foo->baz;
+ * It pops the two slists from the top of the stack and merges them
+ * together in a way that preserves the things they have in common
+ * but creates a merged state for most of the rest.
+ * You could have code that had:  if (foo || foo) { foo->baz;
+ * It's this function which ensures smatch does the right thing.
+ */
+void or_stree_stack(struct stree_stack **pre_conds,
+		    struct stree *cur_stree,
+		    struct stree_stack **stack)
+{
+	struct stree *new;
+	struct stree *old;
+	struct stree *pre_stree;
+	struct stree *res;
+	struct stree *tmp_stree;
+
+	new = pop_stree(stack);
+	old = pop_stree(stack);
+
+	pre_stree = pop_stree(pre_conds);
+	push_stree(pre_conds, clone_stree(pre_stree));
+
+	res = clone_stree(pre_stree);
+	overwrite_stree(old, &res);
+
+	tmp_stree = clone_stree(cur_stree);
+	overwrite_stree(new, &tmp_stree);
+
+	merge_stree(&res, tmp_stree);
+	filter_stree(&res, pre_stree);
+
+	push_stree(stack, res);
+	free_stree(&tmp_stree);
+	free_stree(&pre_stree);
+	free_stree(&new);
+	free_stree(&old);
+}
+
+/*
+ * get_named_stree() is only used for gotos.
+ */
+struct stree **get_named_stree(struct named_stree_stack *stack,
+			       const char *name,
+			       struct symbol *sym)
+{
+	struct named_stree *tmp;
+
+	FOR_EACH_PTR(stack, tmp) {
+		if (tmp->sym == sym &&
+		    strcmp(tmp->name, name) == 0)
+			return &tmp->stree;
+	} END_FOR_EACH_PTR(tmp);
+	return NULL;
+}
+
+/* FIXME:  These parameters are in a different order from expected */
+void overwrite_stree(struct stree *from, struct stree **to)
+{
+	struct sm_state *tmp;
+
+	FOR_EACH_SM(from, tmp) {
+		overwrite_sm_state_stree(to, tmp);
+	} END_FOR_EACH_SM(tmp);
+}
+
--- /dev/null	Fri Dec 21 15:00:36 2018
+++ new/usr/src/tools/smatch/src/smatch_slist.h	Fri Dec 21 15:00:36 2018
@@ -0,0 +1,98 @@
+struct stree;
+
+extern int unfree_stree;
+
+DECLARE_PTR_LIST(state_list, struct sm_state);
+DECLARE_PTR_LIST(state_list_stack, struct state_list);
+
+struct named_stree {
+	char *name;
+	struct symbol *sym;
+	struct stree *stree;
+};
+DECLARE_ALLOCATOR(named_stree);
+DECLARE_PTR_LIST(named_stree_stack, struct named_stree);
+
+
+extern struct state_list_stack *implied_pools;
+extern int __stree_id;
+extern int sm_state_counter;
+
+const char *show_sm(struct sm_state *sm);
+void __print_stree(struct stree *stree);
+void add_history(struct sm_state *sm);
+int cmp_tracker(const struct sm_state *a, const struct sm_state *b);
+char *alloc_sname(const char *str);
+struct sm_state *alloc_sm_state(int owner, const char *name,
+				struct symbol *sym, struct smatch_state *state);
+
+void free_every_single_sm_state(void);
+struct sm_state *clone_sm(struct sm_state *s);
+int is_merged(struct sm_state *sm);
+int is_leaf(struct sm_state *sm);
+struct state_list *clone_slist(struct state_list *from_slist);
+
+int slist_has_state(struct state_list *slist, struct smatch_state *state);
+
+int too_many_possible(struct sm_state *sm);
+void add_possible_sm(struct sm_state *to, struct sm_state *new);
+struct sm_state *merge_sm_states(struct sm_state *one, struct sm_state *two);
+struct smatch_state *get_state_stree(struct stree *stree, int owner, const char *name,
+		    struct symbol *sym);
+
+struct sm_state *get_sm_state_stree(struct stree *stree, int owner, const char *name,
+		    struct symbol *sym);
+
+void overwrite_sm_state_stree(struct stree **stree, struct sm_state *sm);
+void overwrite_sm_state_stree_stack(struct stree_stack **stack, struct sm_state *sm);
+struct sm_state *set_state_stree(struct stree **stree, int owner, const char *name,
+		     struct symbol *sym, struct smatch_state *state);
+void set_state_stree_perm(struct stree **stree, int owner, const char *name,
+		     struct symbol *sym, struct smatch_state *state);
+void delete_state_stree(struct stree **stree, int owner, const char *name,
+			struct symbol *sym);
+
+void delete_state_stree_stack(struct stree_stack **stack, int owner, const char *name,
+			struct symbol *sym);
+
+void push_stree(struct stree_stack **list_stack, struct stree *stree);
+struct stree *pop_stree(struct stree_stack **list_stack);
+struct stree *top_stree(struct stree_stack *stack);
+
+void free_slist(struct state_list **slist);
+void free_stree_stack(struct stree_stack **stack);
+void free_stack_and_strees(struct stree_stack **stree_stack);
+unsigned long get_pool_count(void);
+
+struct sm_state *set_state_stree_stack(struct stree_stack **stack, int owner, const char *name,
+				struct symbol *sym, struct smatch_state *state);
+
+struct sm_state *get_sm_state_stree_stack(struct stree_stack *stack,
+				int owner, const char *name,
+				struct symbol *sym);
+struct smatch_state *get_state_stree_stack(struct stree_stack *stack, int owner,
+				const char *name, struct symbol *sym);
+
+int out_of_memory(void);
+int low_on_memory(void);
+void merge_stree(struct stree **to, struct stree *stree);
+void merge_stree_no_pools(struct stree **to, struct stree *stree);
+void merge_stree(struct stree **to, struct stree *right);
+void merge_fake_stree(struct stree **to, struct stree *stree);
+void filter_stree(struct stree **stree, struct stree *filter);
+void and_stree_stack(struct stree_stack **stree_stack);
+
+void or_stree_stack(struct stree_stack **pre_conds,
+		    struct stree *cur_stree,
+		    struct stree_stack **stack);
+
+struct stree **get_named_stree(struct named_stree_stack *stack,
+			       const char *name,
+			       struct symbol *sym);
+
+void overwrite_stree(struct stree *from, struct stree **to);
+
+/* add stuff smatch_returns.c here */
+
+void all_return_states_hook(void (*callback)(void));
+
--- /dev/null	Fri Dec 21 15:00:36 2018
+++ new/usr/src/tools/smatch/src/smatch_start_states.c	Fri Dec 21 15:00:36 2018
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Store the states at the start of the function because this is something that
+ * is used in a couple places.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+
+static struct stree *start_states;
+static struct stree_stack *saved_stack;
+static void save_start_states(struct statement *stmt)
+{
+	start_states = clone_stree(__get_cur_stree());
+}
+
+static void match_save_states(struct expression *expr)
+{
+	push_stree(&saved_stack, start_states);
+	start_states = NULL;
+}
+
+static void match_restore_states(struct expression *expr)
+{
+	free_stree(&start_states);
+	start_states = pop_stree(&saved_stack);
+}
+
+static void match_end_func(void)
+{
+	free_stree(&start_states);
+}
+
+struct stree *get_start_states(void)
+{
+	return start_states;
+}
+
+void register_start_states(int id)
+{
+	my_id = id;
+
+	add_hook(&save_start_states, AFTER_DEF_HOOK);
+	add_hook(&match_save_states, INLINE_FN_START);
+	add_hook(&match_restore_states, INLINE_FN_END);
+	add_hook(&match_end_func, AFTER_FUNC_HOOK);
+}
+
--- /dev/null	Fri Dec 21 15:00:36 2018
+++ new/usr/src/tools/smatch/src/smatch_statement_count.c	Fri Dec 21 15:00:36 2018
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2018 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include <stdlib.h>
+#include "parse.h"
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+static struct smatch_state *merge_states(struct smatch_state *s1, struct smatch_state *s2)
+{
+	int left, right, min;
+
+	left = PTR_INT(s1->data);
+	right = PTR_INT(s2->data);
+
+	min = left;
+	if (right < min)
+		min = right;
+	return alloc_state_num(min);
+}
+
+long get_stmt_cnt(void)
+{
+	struct smatch_state *state;
+
+	state = get_state(my_id, "stmts", NULL);
+	if (!state)
+		return 0;
+	return (long)state->data;
+}
+
+static void match_statement(struct statement *stmt)
+{
+	int cnt;
+
+	cnt = get_stmt_cnt();
+	cnt++;
+	set_state(my_id, "stmts", NULL, alloc_state_num(cnt));
+}
+
+static void insert_return_info(int return_id, char *return_ranges, struct expression *expr)
+{
+	char buf[32];
+	int cnt;
+
+	cnt = get_stmt_cnt();
+	snprintf(buf, sizeof(buf), "%d", cnt);
+	sql_insert_return_states(return_id, return_ranges, STMT_CNT, -1, "", buf);
+}
+
+static void select_return_info(struct expression *expr, int param, char *key, char *value)
+{
+	int cnt, add;
+
+	cnt = get_stmt_cnt();
+	add = atoi(value);
+
+	set_state(my_id, "stmts", NULL, alloc_state_num(cnt + add));
+}
+
+void register_statement_count(int id)
+{
+	my_id = id;
+
+	add_hook(match_statement, STMT_HOOK);
+	add_merge_hook(my_id, &merge_states);
+
+	add_split_return_callback(&insert_return_info);
+	select_return_states_hook(STMT_CNT, &select_return_info);
+}
+
--- /dev/null	Fri Dec 21 15:00:36 2018
+++ new/usr/src/tools/smatch/src/smatch_states.c	Fri Dec 21 15:00:36 2018
@@ -0,0 +1,1144 @@
+/*
+ * Copyright (C) 2006 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * You have a lists of states.  kernel = locked, foo = NULL, ...
+ * When you hit an if {} else {} statement then you swap the list
+ * of states for a different list of states.  The lists are stored
+ * on stacks.
+ *
+ * At the beginning of this file there are list of the stacks that
+ * we use.  Each function in this file does something to one of
+ * of the stacks.
+ *
+ * So the smatch_flow.c understands code but it doesn't understand states.
+ * smatch_flow calls functions in this file.  This file calls functions
+ * in smatch_slist.c which just has boring generic plumbing for handling
+ * state lists.  But really it's this file where all the magic happens.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+struct smatch_state undefined = { .name = "undefined" };
+struct smatch_state ghost = { .name = "ghost" };
+struct smatch_state merged = { .name = "merged" };
+struct smatch_state true_state = { .name = "true" };
+struct smatch_state false_state = { .name = "false" };
+
+static struct stree *cur_stree; /* current states */
+
+static struct stree_stack *true_stack; /* states after a t/f branch */
+static struct stree_stack *false_stack;
+static struct stree_stack *pre_cond_stack; /* states before a t/f branch */
+
+static struct stree_stack *cond_true_stack; /* states affected by a branch */
+static struct stree_stack *cond_false_stack;
+
+static struct stree_stack *fake_cur_stree_stack;
+static int read_only;
+
+static struct stree_stack *break_stack;
+static struct stree_stack *fake_break_stack;
+static struct stree_stack *switch_stack;
+static struct range_list_stack *remaining_cases;
+static struct stree_stack *default_stack;
+static struct stree_stack *continue_stack;
+
+static struct named_stree_stack *goto_stack;
+
+static struct ptr_list *backup;
+
+int option_debug;
+
+void __print_cur_stree(void)
+{
+	__print_stree(cur_stree);
+}
+
+int unreachable(void)
+{
+	if (!cur_stree)
+		return 1;
+	return 0;
+}
+
+struct sm_state *set_state(int owner, const char *name, struct symbol *sym, struct smatch_state *state)
+{
+	struct sm_state *ret;
+
+	if (!name)
+		return NULL;
+
+	if (read_only)
+		sm_perror("cur_stree is read only.");
+
+	if (option_debug || strcmp(check_name(owner), option_debug_check) == 0) {
+		struct smatch_state *s;
+
+		s = get_state(owner, name, sym);
+		if (!s)
+			sm_msg("%s new [%s] '%s' %s", __func__,
+			       check_name(owner), name, show_state(state));
+		else
+			sm_msg("%s change [%s] '%s' %s => %s",
+				__func__, check_name(owner), name, show_state(s),
+				show_state(state));
+	}
+
+	if (owner != -1 && unreachable())
+		return NULL;
+
+	if (fake_cur_stree_stack)
+		set_state_stree_stack(&fake_cur_stree_stack, owner, name, sym, state);
+
+	ret = set_state_stree(&cur_stree, owner, name, sym, state);
+
+	return ret;
+}
+
+struct sm_state *set_state_expr(int owner, struct expression *expr, struct smatch_state *state)
+{
+	char *name;
+	struct symbol *sym;
+	struct sm_state *ret = NULL;
+
+	expr = strip_expr(expr);
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+	ret = set_state(owner, name, sym, state);
+free:
+	free_string(name);
+	return ret;
+}
+
+void __swap_cur_stree(struct stree *stree)
+{
+	free_stree(&cur_stree);
+	cur_stree = stree;
+}
+
+void __push_fake_cur_stree(void)
+{
+	push_stree(&fake_cur_stree_stack, NULL);
+	__save_pre_cond_states();
+}
+
+struct stree *__pop_fake_cur_stree(void)
+{
+	if (!fake_cur_stree_stack)
+		sm_perror("popping too many fake cur strees.");
+	__use_pre_cond_states();
+	return pop_stree(&fake_cur_stree_stack);
+}
+
+void __free_fake_cur_stree(void)
+{
+	struct stree *stree;
+
+	stree = __pop_fake_cur_stree();
+	free_stree(&stree);
+}
+
+void __set_fake_cur_stree_fast(struct stree *stree)
+{
+	push_stree(&pre_cond_stack, cur_stree);
+	cur_stree = stree;
+	read_only = 1;
+}
+
+void __pop_fake_cur_stree_fast(void)
+{
+	cur_stree = pop_stree(&pre_cond_stack);
+	read_only = 0;
+}
+
+void __merge_stree_into_cur(struct stree *stree)
+{
+	struct sm_state *sm;
+	struct sm_state *orig;
+	struct sm_state *merged;
+
+	FOR_EACH_SM(stree, sm) {
+		orig = get_sm_state(sm->owner, sm->name, sm->sym);
+		if (orig)
+			merged = merge_sm_states(orig, sm);
+		else
+			merged = sm;
+		__set_sm(merged);
+	} END_FOR_EACH_SM(sm);
+}
+
+void __set_sm(struct sm_state *sm)
+{
+	if (read_only)
+		sm_perror("cur_stree is read only.");
+
+	if (option_debug ||
+	    strcmp(check_name(sm->owner), option_debug_check) == 0) {
+		struct smatch_state *s;
+
+		s = get_state(sm->owner, sm->name, sm->sym);
+		if (!s)
+			sm_msg("%s new %s", __func__, show_sm(sm));
+		else
+			sm_msg("%s change %s (was %s)",	__func__, show_sm(sm),
+			       show_state(s));
+	}
+
+	if (unreachable())
+		return;
+
+	if (fake_cur_stree_stack)
+		overwrite_sm_state_stree_stack(&fake_cur_stree_stack, sm);
+
+	overwrite_sm_state_stree(&cur_stree, sm);
+}
+
+void __set_sm_cur_stree(struct sm_state *sm)
+{
+	if (read_only)
+		sm_perror("cur_stree is read only.");
+
+	if (option_debug ||
+	    strcmp(check_name(sm->owner), option_debug_check) == 0) {
+		struct smatch_state *s;
+
+		s = get_state(sm->owner, sm->name, sm->sym);
+		if (!s)
+			sm_msg("%s new %s", __func__, show_sm(sm));
+		else
+			sm_msg("%s change %s (was %s)",
+				__func__, show_sm(sm), show_state(s));
+	}
+
+	if (unreachable())
+		return;
+
+	overwrite_sm_state_stree(&cur_stree, sm);
+}
+
+void __set_sm_fake_stree(struct sm_state *sm)
+{
+	if (read_only)
+		sm_perror("cur_stree is read only.");
+
+	if (option_debug ||
+	    strcmp(check_name(sm->owner), option_debug_check) == 0) {
+		struct smatch_state *s;
+
+		s = get_state(sm->owner, sm->name, sm->sym);
+		if (!s)
+			sm_msg("%s new %s", __func__, show_sm(sm));
+		else
+			sm_msg("%s change %s (was %s)",
+				__func__, show_sm(sm), show_state(s));
+	}
+
+	if (unreachable())
+		return;
+
+	overwrite_sm_state_stree_stack(&fake_cur_stree_stack, sm);
+}
+
+
+typedef void (get_state_hook)(int owner, const char *name, struct symbol *sym);
+DECLARE_PTR_LIST(fn_list, get_state_hook *);
+static struct fn_list *get_state_hooks;
+
+void add_get_state_hook(get_state_hook *fn)
+{
+	get_state_hook **p = malloc(sizeof(get_state_hook *));
+	*p = fn;
+	add_ptr_list(&get_state_hooks, p);
+}
+
+static void call_get_state_hooks(int owner, const char *name, struct symbol *sym)
+{
+	static int recursion;
+	get_state_hook **fn;
+
+	if (recursion)
+		return;
+	recursion = 1;
+
+	FOR_EACH_PTR(get_state_hooks, fn) {
+		(*fn)(owner, name, sym);
+	} END_FOR_EACH_PTR(fn);
+
+	recursion = 0;
+}
+
+struct smatch_state *__get_state(int owner, const char *name, struct symbol *sym)
+{
+	return get_state_stree(cur_stree, owner, name, sym);
+}
+
+struct smatch_state *get_state(int owner, const char *name, struct symbol *sym)
+{
+	call_get_state_hooks(owner, name, sym);
+
+	return __get_state(owner, name, sym);
+}
+
+struct smatch_state *get_state_expr(int owner, struct expression *expr)
+{
+	char *name;
+	struct symbol *sym;
+	struct smatch_state *ret = NULL;
+
+	expr = strip_expr(expr);
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+	ret = get_state(owner, name, sym);
+free:
+	free_string(name);
+	return ret;
+}
+
+struct state_list *get_possible_states(int owner, const char *name, struct symbol *sym)
+{
+	struct sm_state *sms;
+
+	sms = get_sm_state_stree(cur_stree, owner, name, sym);
+	if (sms)
+		return sms->possible;
+	return NULL;
+}
+
+struct state_list *get_possible_states_expr(int owner, struct expression *expr)
+{
+	char *name;
+	struct symbol *sym;
+	struct state_list *ret = NULL;
+
+	expr = strip_expr(expr);
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+	ret = get_possible_states(owner, name, sym);
+free:
+	free_string(name);
+	return ret;
+}
+
+struct sm_state *get_sm_state(int owner, const char *name, struct symbol *sym)
+{
+	return get_sm_state_stree(cur_stree, owner, name, sym);
+}
+
+struct sm_state *get_sm_state_expr(int owner, struct expression *expr)
+{
+	char *name;
+	struct symbol *sym;
+	struct sm_state *ret = NULL;
+
+	expr = strip_expr(expr);
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+	ret = get_sm_state(owner, name, sym);
+free:
+	free_string(name);
+	return ret;
+}
+
+void delete_state(int owner, const char *name, struct symbol *sym)
+{
+	delete_state_stree(&cur_stree, owner, name, sym);
+	if (cond_true_stack) {
+		delete_state_stree_stack(&pre_cond_stack, owner, name, sym);
+		delete_state_stree_stack(&cond_true_stack, owner, name, sym);
+		delete_state_stree_stack(&cond_false_stack, owner, name, sym);
+	}
+}
+
+void delete_state_expr(int owner, struct expression *expr)
+{
+	char *name;
+	struct symbol *sym;
+
+	expr = strip_expr(expr);
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+	delete_state(owner, name, sym);
+free:
+	free_string(name);
+}
+
+static void delete_all_states_stree_sym(struct stree **stree, struct symbol *sym)
+{
+	struct state_list *slist = NULL;
+	struct sm_state *sm;
+
+	FOR_EACH_SM(*stree, sm) {
+		if (sm->sym == sym)
+			add_ptr_list(&slist, sm);
+	} END_FOR_EACH_SM(sm);
+
+	FOR_EACH_PTR(slist, sm) {
+		delete_state_stree(stree, sm->owner, sm->name, sm->sym);
+	} END_FOR_EACH_PTR(sm);
+
+	free_slist(&slist);
+}
+
+static void delete_all_states_stree_stack_sym(struct stree_stack **stack, struct symbol *sym)
+{
+	struct stree *stree;
+
+	if (!*stack)
+		return;
+
+	stree = pop_stree(stack);
+	delete_all_states_stree_sym(&stree, sym);
+	push_stree(stack, stree);
+}
+
+void __delete_all_states_sym(struct symbol *sym)
+{
+	delete_all_states_stree_sym(&cur_stree, sym);
+
+	delete_all_states_stree_stack_sym(&true_stack, sym);
+	delete_all_states_stree_stack_sym(&true_stack, sym);
+	delete_all_states_stree_stack_sym(&false_stack, sym);
+	delete_all_states_stree_stack_sym(&pre_cond_stack, sym);
+	delete_all_states_stree_stack_sym(&cond_true_stack, sym);
+	delete_all_states_stree_stack_sym(&cond_false_stack, sym);
+	delete_all_states_stree_stack_sym(&fake_cur_stree_stack, sym);
+	delete_all_states_stree_stack_sym(&break_stack, sym);
+	delete_all_states_stree_stack_sym(&fake_break_stack, sym);
+	delete_all_states_stree_stack_sym(&switch_stack, sym);
+	delete_all_states_stree_stack_sym(&continue_stack, sym);
+
+	/*
+	 * deleting from the goto stack is problematic because we don't know
+	 * if the label is in scope and also we need the value for --two-passes.
+	 */
+}
+
+struct stree *get_all_states_from_stree(int owner, struct stree *source)
+{
+	struct stree *ret = NULL;
+	struct sm_state *tmp;
+
+	FOR_EACH_SM(source, tmp) {
+		if (tmp->owner == owner)
+			avl_insert(&ret, tmp);
+	} END_FOR_EACH_SM(tmp);
+
+	return ret;
+}
+
+struct stree *get_all_states_stree(int owner)
+{
+	return get_all_states_from_stree(owner, cur_stree);
+}
+
+struct stree *__get_cur_stree(void)
+{
+	return cur_stree;
+}
+
+int is_reachable(void)
+{
+	if (cur_stree)
+		return 1;
+	return 0;
+}
+
+void set_true_false_states(int owner, const char *name, struct symbol *sym,
+			   struct smatch_state *true_state,
+			   struct smatch_state *false_state)
+{
+	if (read_only)
+		sm_perror("cur_stree is read only.");
+
+	if (option_debug || strcmp(check_name(owner), option_debug_check) == 0) {
+		struct smatch_state *tmp;
+
+		tmp = get_state(owner, name, sym);
+		sm_msg("%s [%s] '%s'.  Was %s.  Now T:%s F:%s", __func__,
+		       check_name(owner),  name, show_state(tmp),
+		       show_state(true_state), show_state(false_state));
+	}
+
+	if (unreachable())
+		return;
+
+	if (!cond_false_stack || !cond_true_stack) {
+		sm_perror("missing true/false stacks");
+		return;
+	}
+
+	if (true_state)
+		set_state_stree_stack(&cond_true_stack, owner, name, sym, true_state);
+	if (false_state)
+		set_state_stree_stack(&cond_false_stack, owner, name, sym, false_state);
+}
+
+void set_true_false_states_expr(int owner, struct expression *expr,
+			   struct smatch_state *true_state,
+			   struct smatch_state *false_state)
+{
+	char *name;
+	struct symbol *sym;
+
+	expr = strip_expr(expr);
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+	set_true_false_states(owner, name, sym, true_state, false_state);
+free:
+	free_string(name);
+}
+
+void __set_true_false_sm(struct sm_state *true_sm, struct sm_state *false_sm)
+{
+	int owner;
+	const char *name;
+	struct symbol *sym;
+
+	if (!true_sm && !false_sm)
+		return;
+
+	if (unreachable())
+		return;
+
+	owner = true_sm ? true_sm->owner : false_sm->owner;
+	name = true_sm ? true_sm->name : false_sm->name;
+	sym = true_sm ? true_sm->sym : false_sm->sym;
+	if (option_debug || strcmp(check_name(owner), option_debug_check) == 0) {
+		struct smatch_state *tmp;
+
+		tmp = get_state(owner, name, sym);
+		sm_msg("%s [%s] '%s'.  Was %s.  Now T:%s F:%s", __func__,
+		       check_name(owner),  name, show_state(tmp),
+		       show_state(true_sm ? true_sm->state : NULL),
+		       show_state(false_sm ? false_sm->state : NULL));
+	}
+
+	if (!cond_false_stack || !cond_true_stack) {
+		sm_perror("missing true/false stacks");
+		return;
+	}
+
+	if (true_sm)
+		overwrite_sm_state_stree_stack(&cond_true_stack, true_sm);
+	if (false_sm)
+		overwrite_sm_state_stree_stack(&cond_false_stack, false_sm);
+}
+
+void nullify_path(void)
+{
+	if (fake_cur_stree_stack) {
+		__free_fake_cur_stree();
+		__push_fake_cur_stree();
+	}
+	free_stree(&cur_stree);
+}
+
+void __match_nullify_path_hook(const char *fn, struct expression *expr,
+			       void *unused)
+{
+	nullify_path();
+}
+
+/*
+ * At the start of every function we mark the path
+ * as unnull.  That way there is always at least one state
+ * in the cur_stree until nullify_path is called.  This
+ * is used in merge_slist() for the first null check.
+ */
+void __unnullify_path(void)
+{
+	if (!cur_stree)
+		set_state(-1, "unnull_path", NULL, &true_state);
+}
+
+int __path_is_null(void)
+{
+	if (cur_stree)
+		return 0;
+	return 1;
+}
+
+static void check_stree_stack_free(struct stree_stack **stack)
+{
+	if (*stack) {
+		sm_perror("stack not empty");
+		free_stack_and_strees(stack);
+	}
+}
+
+void save_all_states(void)
+{
+	__add_ptr_list(&backup, cur_stree, 0);
+	cur_stree = NULL;
+
+	__add_ptr_list(&backup, true_stack, 0);
+	true_stack = NULL;
+	__add_ptr_list(&backup, false_stack, 0);
+	false_stack = NULL;
+	__add_ptr_list(&backup, pre_cond_stack, 0);
+	pre_cond_stack = NULL;
+
+	__add_ptr_list(&backup, cond_true_stack, 0);
+	cond_true_stack = NULL;
+	__add_ptr_list(&backup, cond_false_stack, 0);
+	cond_false_stack = NULL;
+
+	__add_ptr_list(&backup, fake_cur_stree_stack, 0);
+	fake_cur_stree_stack = NULL;
+
+	__add_ptr_list(&backup, break_stack, 0);
+	break_stack = NULL;
+	__add_ptr_list(&backup, fake_break_stack, 0);
+	fake_break_stack = NULL;
+
+	__add_ptr_list(&backup, switch_stack, 0);
+	switch_stack = NULL;
+	__add_ptr_list(&backup, remaining_cases, 0);
+	remaining_cases = NULL;
+	__add_ptr_list(&backup, default_stack, 0);
+	default_stack = NULL;
+	__add_ptr_list(&backup, continue_stack, 0);
+	continue_stack = NULL;
+
+	__add_ptr_list(&backup, goto_stack, 0);
+	goto_stack = NULL;
+}
+
+static void *pop_backup(void)
+{
+	void *ret;
+
+	ret = last_ptr_list(backup);
+	delete_ptr_list_last(&backup);
+	return ret;
+}
+
+void restore_all_states(void)
+{
+	goto_stack = pop_backup();
+
+	continue_stack = pop_backup();
+	default_stack = pop_backup();
+	remaining_cases = pop_backup();
+	switch_stack = pop_backup();
+	fake_break_stack = pop_backup();
+	break_stack = pop_backup();
+
+	fake_cur_stree_stack = pop_backup();
+
+	cond_false_stack = pop_backup();
+	cond_true_stack = pop_backup();
+
+	pre_cond_stack = pop_backup();
+	false_stack = pop_backup();
+	true_stack = pop_backup();
+
+	cur_stree = pop_backup();
+}
+
+void free_goto_stack(void)
+{
+	struct named_stree *named_stree;
+
+	FOR_EACH_PTR(goto_stack, named_stree) {
+		free_stree(&named_stree->stree);
+	} END_FOR_EACH_PTR(named_stree);
+	__free_ptr_list((struct ptr_list **)&goto_stack);
+}
+
+void clear_all_states(void)
+{
+	nullify_path();
+	check_stree_stack_free(&true_stack);
+	check_stree_stack_free(&false_stack);
+	check_stree_stack_free(&pre_cond_stack);
+	check_stree_stack_free(&cond_true_stack);
+	check_stree_stack_free(&cond_false_stack);
+	check_stree_stack_free(&break_stack);
+	check_stree_stack_free(&fake_break_stack);
+	check_stree_stack_free(&switch_stack);
+	check_stree_stack_free(&continue_stack);
+	check_stree_stack_free(&fake_cur_stree_stack);
+
+	free_goto_stack();
+
+	free_every_single_sm_state();
+	free_tmp_expressions();
+}
+
+void __push_cond_stacks(void)
+{
+	push_stree(&cond_true_stack, NULL);
+	push_stree(&cond_false_stack, NULL);
+	__push_fake_cur_stree();
+}
+
+void __fold_in_set_states(void)
+{
+	struct stree *new_states;
+	struct sm_state *sm;
+
+	new_states = __pop_fake_cur_stree();
+	FOR_EACH_SM(new_states, sm) {
+		__set_sm(sm);
+		__set_true_false_sm(sm, sm);
+	} END_FOR_EACH_SM(sm);
+	free_stree(&new_states);
+}
+
+void __free_set_states(void)
+{
+	struct stree *new_states;
+
+	new_states = __pop_fake_cur_stree();
+	free_stree(&new_states);
+}
+
+struct stree *__copy_cond_true_states(void)
+{
+	struct stree *ret;
+
+	ret = pop_stree(&cond_true_stack);
+	push_stree(&cond_true_stack, clone_stree(ret));
+	return ret;
+}
+
+struct stree *__copy_cond_false_states(void)
+{
+	struct stree *ret;
+
+	ret = pop_stree(&cond_false_stack);
+	push_stree(&cond_false_stack, clone_stree(ret));
+	return ret;
+}
+
+struct stree *__pop_cond_true_stack(void)
+{
+	return pop_stree(&cond_true_stack);
+}
+
+struct stree *__pop_cond_false_stack(void)
+{
+	return pop_stree(&cond_false_stack);
+}
+
+/*
+ * This combines the pre cond states with either the true or false states.
+ * For example:
+ * a = kmalloc() ; if (a !! foo(a)
+ * In the pre state a is possibly null.  In the true state it is non null.
+ * In the false state it is null.  Combine the pre and the false to get
+ * that when we call 'foo', 'a' is null.
+ */
+static void __use_cond_stack(struct stree_stack **stack)
+{
+	struct stree *stree;
+
+	free_stree(&cur_stree);
+
+	cur_stree = pop_stree(&pre_cond_stack);
+	push_stree(&pre_cond_stack, clone_stree(cur_stree));
+
+	stree = pop_stree(stack);
+	overwrite_stree(stree, &cur_stree);
+	push_stree(stack, stree);
+}
+
+void __use_pre_cond_states(void)
+{
+	free_stree(&cur_stree);
+	cur_stree = pop_stree(&pre_cond_stack);
+}
+
+void __use_cond_true_states(void)
+{
+	__use_cond_stack(&cond_true_stack);
+}
+
+void __use_cond_false_states(void)
+{
+	__use_cond_stack(&cond_false_stack);
+}
+
+void __negate_cond_stacks(void)
+{
+	struct stree *old_false, *old_true;
+
+	__use_cond_stack(&cond_false_stack);
+	old_false = pop_stree(&cond_false_stack);
+	old_true = pop_stree(&cond_true_stack);
+	push_stree(&cond_false_stack, old_true);
+	push_stree(&cond_true_stack, old_false);
+}
+
+void __and_cond_states(void)
+{
+	and_stree_stack(&cond_true_stack);
+	or_stree_stack(&pre_cond_stack, cur_stree, &cond_false_stack);
+}
+
+void __or_cond_states(void)
+{
+	or_stree_stack(&pre_cond_stack, cur_stree, &cond_true_stack);
+	and_stree_stack(&cond_false_stack);
+}
+
+void __save_pre_cond_states(void)
+{
+	push_stree(&pre_cond_stack, clone_stree(cur_stree));
+}
+
+void __discard_pre_cond_states(void)
+{
+	struct stree *tmp;
+
+	tmp = pop_stree(&pre_cond_stack);
+	free_stree(&tmp);
+}
+
+struct stree *__get_true_states(void)
+{
+	return clone_stree(top_stree(cond_true_stack));
+}
+
+struct stree *__get_false_states(void)
+{
+	return clone_stree(top_stree(cond_false_stack));
+}
+
+void __use_cond_states(void)
+{
+	struct stree *pre, *pre_clone, *true_states, *false_states;
+
+	pre = pop_stree(&pre_cond_stack);
+	pre_clone = clone_stree(pre);
+
+	true_states = pop_stree(&cond_true_stack);
+	overwrite_stree(true_states, &pre);
+	free_stree(&true_states);
+	/* we use the true states right away */
+	free_stree(&cur_stree);
+	cur_stree = pre;
+
+	false_states = pop_stree(&cond_false_stack);
+	overwrite_stree(false_states, &pre_clone);
+	free_stree(&false_states);
+	push_stree(&false_stack, pre_clone);
+}
+
+void __push_true_states(void)
+{
+	push_stree(&true_stack, clone_stree(cur_stree));
+}
+
+void __use_false_states(void)
+{
+	free_stree(&cur_stree);
+	cur_stree = pop_stree(&false_stack);
+}
+
+void __discard_false_states(void)
+{
+	struct stree *stree;
+
+	stree = pop_stree(&false_stack);
+	free_stree(&stree);
+}
+
+void __merge_false_states(void)
+{
+	struct stree *stree;
+
+	stree = pop_stree(&false_stack);
+	merge_stree(&cur_stree, stree);
+	free_stree(&stree);
+}
+
+/*
+ * This function probably seemed common sensical when I wrote it but, oh wow,
+ * does it look subtle in retrospect.  Say we set a state on one side of the if
+ * else path but not on the other, then what we should record in the fake stree
+ * is the merged state.
+ *
+ * This function relies on the fact that the we always set the cur_stree as well
+ * and we already have the infrastructure to merge things correctly into the
+ * cur_stree.
+ *
+ * So instead of merging fake strees together which is probably a lot of work,
+ * we just use it as a list of set states and look up the actual current values
+ * in the cur_stree.
+ *
+ */
+static void update_stree_with_merged(struct stree **stree)
+{
+	struct state_list *slist = NULL;
+	struct sm_state *sm, *new;
+
+	FOR_EACH_SM(*stree, sm) {
+		new = get_sm_state(sm->owner, sm->name, sm->sym);
+		if (!new)  /* This can happen if we go out of scope */
+			continue;
+		add_ptr_list(&slist, new);
+	} END_FOR_EACH_SM(sm);
+
+	FOR_EACH_PTR(slist, sm) {
+		overwrite_sm_state_stree(stree, sm);
+	} END_FOR_EACH_PTR(sm);
+
+	free_slist(&slist);
+}
+
+static void update_fake_stree_with_merged(void)
+{
+	struct stree *stree;
+
+	if (!fake_cur_stree_stack)
+		return;
+	stree = pop_stree(&fake_cur_stree_stack);
+	update_stree_with_merged(&stree);
+	push_stree(&fake_cur_stree_stack, stree);
+}
+
+void __merge_true_states(void)
+{
+	struct stree *stree;
+
+	stree = pop_stree(&true_stack);
+	merge_stree(&cur_stree, stree);
+	update_fake_stree_with_merged();
+	free_stree(&stree);
+}
+
+void __push_continues(void)
+{
+	push_stree(&continue_stack, NULL);
+}
+
+void __discard_continues(void)
+{
+	struct stree *stree;
+
+	stree = pop_stree(&continue_stack);
+	free_stree(&stree);
+}
+
+void __process_continues(void)
+{
+	struct stree *stree;
+
+	stree = pop_stree(&continue_stack);
+	if (!stree)
+		stree = clone_stree(cur_stree);
+	else
+		merge_stree(&stree, cur_stree);
+
+	push_stree(&continue_stack, stree);
+}
+
+void __merge_continues(void)
+{
+	struct stree *stree;
+
+	stree = pop_stree(&continue_stack);
+	merge_stree(&cur_stree, stree);
+	free_stree(&stree);
+}
+
+void __push_breaks(void)
+{
+	push_stree(&break_stack, NULL);
+	if (fake_cur_stree_stack)
+		push_stree(&fake_break_stack, NULL);
+}
+
+void __process_breaks(void)
+{
+	struct stree *stree;
+
+	stree = pop_stree(&break_stack);
+	if (!stree)
+		stree = clone_stree(cur_stree);
+	else
+		merge_stree(&stree, cur_stree);
+	push_stree(&break_stack, stree);
+
+	if (!fake_cur_stree_stack)
+		return;
+
+	stree = pop_stree(&fake_break_stack);
+	if (!stree)
+		stree = clone_stree(top_stree(fake_cur_stree_stack));
+	else
+		merge_stree(&stree, top_stree(fake_cur_stree_stack));
+	push_stree(&fake_break_stack, stree);
+}
+
+int __has_breaks(void)
+{
+	struct stree *stree;
+	int ret;
+
+	stree = pop_stree(&break_stack);
+	ret = !!stree;
+	push_stree(&break_stack, stree);
+	return ret;
+}
+
+void __merge_breaks(void)
+{
+	struct stree *stree;
+	struct sm_state *sm;
+
+	stree = pop_stree(&break_stack);
+	merge_stree(&cur_stree, stree);
+	free_stree(&stree);
+
+	if (!fake_cur_stree_stack)
+		return;
+
+	stree = pop_stree(&fake_break_stack);
+	update_stree_with_merged(&stree);
+	FOR_EACH_SM(stree, sm) {
+		overwrite_sm_state_stree_stack(&fake_cur_stree_stack, sm);
+	} END_FOR_EACH_SM(sm);
+	free_stree(&stree);
+}
+
+void __use_breaks(void)
+{
+	struct stree *stree;
+	struct sm_state *sm;
+
+	free_stree(&cur_stree);
+	cur_stree = pop_stree(&break_stack);
+
+	if (!fake_cur_stree_stack)
+		return;
+	stree = pop_stree(&fake_break_stack);
+	FOR_EACH_SM(stree, sm) {
+		overwrite_sm_state_stree_stack(&fake_cur_stree_stack, sm);
+	} END_FOR_EACH_SM(sm);
+	free_stree(&stree);
+
+
+}
+
+void __save_switch_states(struct expression *switch_expr)
+{
+	struct range_list *rl;
+
+	get_absolute_rl(switch_expr, &rl);
+
+	push_rl(&remaining_cases, rl);
+	push_stree(&switch_stack, clone_stree(cur_stree));
+}
+
+int have_remaining_cases(void)
+{
+	return !!top_rl(remaining_cases);
+}
+
+void __merge_switches(struct expression *switch_expr, struct range_list *case_rl)
+{
+	struct stree *stree;
+	struct stree *implied_stree;
+
+	stree = pop_stree(&switch_stack);
+	implied_stree = __implied_case_stree(switch_expr, case_rl, &remaining_cases, &stree);
+	merge_stree(&cur_stree, implied_stree);
+	free_stree(&implied_stree);
+	push_stree(&switch_stack, stree);
+}
+
+void __discard_switches(void)
+{
+	struct stree *stree;
+
+	pop_rl(&remaining_cases);
+	stree = pop_stree(&switch_stack);
+	free_stree(&stree);
+}
+
+void __push_default(void)
+{
+	push_stree(&default_stack, NULL);
+}
+
+void __set_default(void)
+{
+	set_state_stree_stack(&default_stack, 0, "has_default", NULL, &true_state);
+}
+
+int __pop_default(void)
+{
+	struct stree *stree;
+
+	stree = pop_stree(&default_stack);
+	if (stree) {
+		free_stree(&stree);
+		return 1;
+	}
+	return 0;
+}
+
+static struct named_stree *alloc_named_stree(const char *name, struct symbol *sym, struct stree *stree)
+{
+	struct named_stree *named_stree = __alloc_named_stree(0);
+
+	named_stree->name = (char *)name;
+	named_stree->stree = stree;
+	named_stree->sym = sym;
+	return named_stree;
+}
+
+void __save_gotos(const char *name, struct symbol *sym)
+{
+	struct stree **stree;
+	struct stree *clone;
+
+	stree = get_named_stree(goto_stack, name, sym);
+	if (stree) {
+		merge_stree(stree, cur_stree);
+		return;
+	} else {
+		struct named_stree *named_stree;
+
+		clone = clone_stree(cur_stree);
+		named_stree = alloc_named_stree(name, sym, clone);
+		add_ptr_list(&goto_stack, named_stree);
+	}
+}
+
+void __merge_gotos(const char *name, struct symbol *sym)
+{
+	struct stree **stree;
+
+	stree = get_named_stree(goto_stack, name, sym);
+	if (stree)
+		merge_stree(&cur_stree, *stree);
+}
--- /dev/null	Fri Dec 21 15:00:36 2018
+++ new/usr/src/tools/smatch/src/smatch_stored_conditions.c	Fri Dec 21 15:00:36 2018
@@ -0,0 +1,320 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Keep a record of all the things we have tested for so that we know when we
+ * test for it again.  For example, if we have code like this:
+ *
+ * 	if (foo & FLAG)
+ *		lock();
+ *
+ *	...
+ *
+ *	if (foo & FLAG)
+ *		unlock();
+ *
+ * That's the end goal at least.  But actually implementing the flow of that
+ * requires quite a bit of work because if "foo" changes the condition needs to
+ * be retested and smatch_implications.c needs to be updated.
+ *
+ * For now, I just record the conditions and use it to see if we test for NULL
+ * twice.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+static int my_id;
+static int link_id;
+
+static struct smatch_state *alloc_link_state(struct expression_list *expr_list)
+{
+	struct expression *tmp;
+	struct smatch_state *state;
+	static char buf[256];
+	char *name;
+	int i;
+
+	state = __alloc_smatch_state(0);
+
+	i = 0;
+	FOR_EACH_PTR(expr_list, tmp) {
+		name = expr_to_str(tmp);
+		if (!i++) {
+			snprintf(buf, sizeof(buf), "%s", name);
+		} else {
+			append(buf, ", ", sizeof(buf));
+			append(buf, name, sizeof(buf));
+		}
+		free_string(name);
+	} END_FOR_EACH_PTR(tmp);
+
+	state->name = alloc_sname(buf);
+	state->data = expr_list;
+	return state;
+}
+
+static struct expression_list *clone_expression_list(struct expression_list *list)
+{
+	struct expression_list *ret = NULL;
+	struct expression *expr;
+
+	FOR_EACH_PTR(list, expr) {
+		add_ptr_list(&ret, expr);
+	} END_FOR_EACH_PTR(expr);
+
+	return ret;
+}
+
+static void insert_expression(struct expression_list **list, struct expression *expr)
+{
+	struct expression *tmp;
+
+	FOR_EACH_PTR(*list, tmp) {
+		if (tmp == expr)
+			return;
+	} END_FOR_EACH_PTR(tmp);
+
+	add_ptr_list(list, expr);
+}
+
+static struct smatch_state *merge_links(struct smatch_state *s1, struct smatch_state *s2)
+{
+	struct expression_list *list, *expr_list;
+	struct expression *expr;
+
+	expr_list = clone_expression_list(s1->data);
+
+	list = s2->data;
+	FOR_EACH_PTR(list, expr) {
+		insert_expression(&expr_list, expr);
+	} END_FOR_EACH_PTR(expr);
+
+	return alloc_link_state(expr_list);
+}
+
+static void save_link_var_sym(const char *var, struct symbol *sym, struct expression *condition)
+{
+	struct smatch_state *old_state, *new_state;
+	struct expression_list *expr_list;
+
+	old_state = get_state(link_id, var, sym);
+	expr_list = clone_expression_list(old_state ? old_state->data : NULL);
+
+	insert_expression(&expr_list, condition);
+
+	new_state = alloc_link_state(expr_list);
+	set_state(link_id, var, sym, new_state);
+}
+
+static void match_link_modify(struct sm_state *sm, struct expression *mod_expr)
+{
+	struct expression_list *expr_list;
+	struct expression *tmp;
+	char *name;
+
+	expr_list = sm->state->data;
+
+	FOR_EACH_PTR(expr_list, tmp) {
+		name = expr_to_str(tmp);
+		set_state(my_id, name, NULL, &undefined);
+		free_string(name);
+	} END_FOR_EACH_PTR(tmp);
+	set_state(link_id, sm->name, sm->sym, &undefined);
+}
+
+static struct smatch_state *alloc_state(struct expression *expr, int is_true)
+{
+	struct smatch_state *state;
+
+	state = __alloc_smatch_state(0);
+	if (is_true)
+		state->name = alloc_sname("true");
+	else
+		state->name = alloc_sname("false");
+	state->data = expr;
+	return state;
+}
+
+static void store_all_links(struct expression *expr, struct expression *condition)
+{
+	char *var;
+	struct symbol *sym;
+
+	expr = strip_expr(expr);
+
+	if (is_array(expr)) {
+		var = expr_to_known_chunk_sym(expr, &sym);
+		if (var)
+			save_link_var_sym(var, sym, condition);
+	}
+
+	switch (expr->type) {
+	case EXPR_COMPARE:
+	case EXPR_BINOP:
+		store_all_links(expr->left, condition);
+		store_all_links(expr->right, condition);
+		return;
+	case EXPR_VALUE:
+		return;
+	}
+
+	var = expr_to_var_sym(expr, &sym);
+	if (!var || !sym)
+		goto free;
+	save_link_var_sym(var, sym, condition);
+free:
+	free_string(var);
+}
+
+static int condition_too_complicated(struct expression *expr)
+{
+	if (get_complication_score(expr) > 2)
+		return 1;
+	return 0;
+}
+
+void __stored_condition(struct expression *expr)
+{
+	struct smatch_state *true_state, *false_state;
+	char *name;
+	sval_t val;
+
+	if (get_value(expr, &val))
+		return;
+
+	if (condition_too_complicated(expr))
+		return;
+
+	name = expr_to_str(expr);
+	if (!name)
+		return;
+	true_state = alloc_state(expr, TRUE);
+	false_state = alloc_state(expr, FALSE);
+	set_true_false_states(my_id, name, NULL, true_state, false_state);
+	store_all_links(expr, expr);
+	free_string(name);
+}
+
+struct smatch_state *get_stored_condition(struct expression *expr)
+{
+	struct smatch_state *state;
+	char *name;
+
+	name = expr_to_str(expr);
+	if (!name)
+		return NULL;
+
+	state = get_state(my_id, name, NULL);
+	free_string(name);
+	return state;
+}
+
+struct expression_list *get_conditions(struct expression *expr)
+{
+	struct smatch_state *state;
+
+	state = get_state_expr(link_id, expr);
+	if (!state)
+		return NULL;
+	return state->data;
+}
+
+void register_stored_conditions(int id)
+{
+	my_id = id;
+}
+
+void register_stored_conditions_links(int id)
+{
+	link_id = id;
+	add_merge_hook(link_id, &merge_links);
+	add_modification_hook(link_id, &match_link_modify);
+}
+
+#define RECURSE_LIMIT 50
+
+static void filter_by_sm(struct sm_state *sm,
+		       struct state_list **true_stack,
+		       struct state_list **false_stack,
+		       int *recurse_cnt)
+{
+	if (!sm)
+		return;
+
+	if ((*recurse_cnt)++ > RECURSE_LIMIT)
+		return;
+
+	if (strcmp(sm->state->name, "true") == 0) {
+		add_ptr_list(true_stack, sm);
+	} else if (strcmp(sm->state->name, "false") == 0) {
+		add_ptr_list(false_stack, sm);
+	}
+
+	if (sm->merged) {
+		filter_by_sm(sm->left, true_stack, false_stack, recurse_cnt);
+		filter_by_sm(sm->right, true_stack, false_stack, recurse_cnt);
+	}
+}
+
+struct sm_state *stored_condition_implication_hook(struct expression *expr,
+				struct state_list **true_stack,
+				struct state_list **false_stack)
+{
+	struct sm_state *sm;
+	char *name;
+	int recurse_cnt = 0;
+	struct state_list *tmp_true = NULL;
+	struct state_list *tmp_false = NULL;
+	struct sm_state *tmp;
+
+	expr = strip_expr(expr);
+
+	name = expr_to_str(expr);
+	if (!name)
+		return NULL;
+
+	sm = get_sm_state(my_id, name, NULL);
+	free_string(name);
+	if (!sm)
+		return NULL;
+	if (!sm->merged)
+		return NULL;
+
+	filter_by_sm(sm, &tmp_true, &tmp_false, &recurse_cnt);
+	if (!tmp_true && !tmp_false)
+		return NULL;
+	if (recurse_cnt > RECURSE_LIMIT) {
+		sm = NULL;
+		goto free;
+	}
+
+	FOR_EACH_PTR(tmp_true, tmp) {
+		add_ptr_list(true_stack, tmp);
+	} END_FOR_EACH_PTR(tmp);
+
+	FOR_EACH_PTR(tmp_false, tmp) {
+		add_ptr_list(false_stack, tmp);
+	} END_FOR_EACH_PTR(tmp);
+
+free:
+	free_slist(&tmp_true);
+	free_slist(&tmp_false);
+	return sm;
+}
+
--- /dev/null	Fri Dec 21 15:00:36 2018
+++ new/usr/src/tools/smatch/src/smatch_string_list.c	Fri Dec 21 15:00:36 2018
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2013 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+int list_has_string(struct string_list *str_list, const char *str)
+{
+	char *tmp;
+
+	if (!str)
+		return 0;
+
+	FOR_EACH_PTR(str_list, tmp) {
+		if (strcmp(tmp, str) < 0)
+			continue;
+		if (strcmp(tmp, str) == 0)
+			return 1;
+		return 0;
+	} END_FOR_EACH_PTR(tmp);
+	return 0;
+}
+
+void insert_string(struct string_list **str_list, const char *_new)
+{
+	char *new = (char *)_new;
+	char *tmp;
+
+	FOR_EACH_PTR(*str_list, tmp) {
+		if (strcmp(tmp, new) < 0)
+			continue;
+		else if (strcmp(tmp, new) == 0) {
+			return;
+		} else {
+			INSERT_CURRENT(alloc_string(new), tmp);
+			return;
+		}
+	} END_FOR_EACH_PTR(tmp);
+	new = alloc_string(new);
+	add_ptr_list(str_list, new);
+}
+
+struct string_list *clone_str_list(struct string_list *orig)
+{
+	char *tmp;
+	struct string_list *ret = NULL;
+
+	FOR_EACH_PTR(orig, tmp) {
+		add_ptr_list(&ret, tmp);
+	} END_FOR_EACH_PTR(tmp);
+	return ret;
+}
+
+struct string_list *combine_string_lists(struct string_list *one, struct string_list *two)
+{
+	struct string_list *ret;
+	char *tmp;
+
+	ret = clone_str_list(one);
+	FOR_EACH_PTR(two, tmp) {
+		insert_string(&ret, tmp);
+	} END_FOR_EACH_PTR(tmp);
+	return ret;
+}
+
+
--- /dev/null	Fri Dec 21 15:00:36 2018
+++ new/usr/src/tools/smatch/src/smatch_strings.c	Fri Dec 21 15:00:36 2018
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2015 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+static int get_str(void *_ret, int argc, char **argv, char **azColName)
+{
+	char **ret = _ret;
+
+	if (*ret)
+		*ret = (void *)-1UL;
+	else
+		*ret = alloc_sname(argv[0]);
+
+	return 0;
+}
+
+static char *get_string_from_mtag(mtag_t tag)
+{
+	char *str = NULL;
+
+	run_sql(get_str, &str,
+		"select value from mtag_data where tag = %lld and offset = 0 and type = %d;",
+		tag, STRING_VALUE);
+
+	if ((unsigned long)str == -1UL)
+		return NULL;
+	return str;
+}
+
+struct expression *fake_string_from_mtag(mtag_t tag)
+{
+	char *str;
+
+	if (!tag)
+		return NULL;
+	str = get_string_from_mtag(tag);
+	if (!str)
+		return NULL;
+	return string_expression(str);
+}
+
+static void match_strcpy(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *dest, *src;
+
+	dest = get_argument_from_call_expr(expr->args, 0);
+	src = get_argument_from_call_expr(expr->args, 1);
+	src = strip_expr(src);
+	if (src->type == EXPR_STRING)
+		set_state_expr(my_id, dest, alloc_state_str(src->string->data));
+}
+
+struct state_list *get_strings(struct expression *expr)
+{
+	struct state_list *ret = NULL;
+	struct smatch_state *state;
+	struct sm_state *sm;
+
+	expr = strip_expr(expr);
+	if (expr->type == EXPR_STRING) {
+		state = alloc_state_str(expr->string->data);
+		sm = alloc_sm_state(my_id, expr->string->data, NULL, state);
+		add_ptr_list(&ret, sm);
+		return ret;
+	}
+
+	if (expr->type == EXPR_CONDITIONAL ||
+	    expr->type == EXPR_SELECT) {
+		struct state_list *true_strings = NULL;
+		struct state_list *false_strings = NULL;
+
+		if (known_condition_true(expr->conditional))
+			return get_strings(expr->cond_true);
+		if (known_condition_false(expr->conditional))
+			return get_strings(expr->cond_false);
+
+		true_strings = get_strings(expr->cond_true);
+		false_strings = get_strings(expr->cond_false);
+		concat_ptr_list((struct ptr_list *)true_strings, (struct ptr_list **)&false_strings);
+		free_slist(&true_strings);
+		return false_strings;
+	}
+
+	sm = get_sm_state_expr(my_id, expr);
+	if (!sm)
+		return NULL;
+
+	return clone_slist(sm->possible);
+}
+
+static void match_assignment(struct expression *expr)
+{
+	struct state_list *slist;
+	struct sm_state *sm;
+
+	if (expr->op != '=')
+		return;
+
+	slist = get_strings(strip_expr(expr->right));
+	if (!slist)
+		return;
+
+	if (ptr_list_size((struct ptr_list *)slist) == 1) {
+		sm = first_ptr_list((struct ptr_list *)slist);
+		set_state_expr(my_id, expr->left, sm->state);
+		return;
+	}
+}
+
+static void match_string(struct expression *expr)
+{
+	mtag_t tag;
+
+	if (expr->type != EXPR_STRING || !expr->string->data)
+		return;
+	if (expr->string->length > 255)
+		return;
+
+	if (!get_string_mtag(expr, &tag))
+		return;
+
+	cache_sql(NULL, NULL, "insert into mtag_data values (%lld, %d, %d, '%q');",
+		  tag, 0, STRING_VALUE, escape_newlines(expr->string->data));
+}
+
+void register_strings(int id)
+{
+	my_id = id;
+
+	add_function_hook("strcpy", &match_strcpy, NULL);
+	add_function_hook("strlcpy", &match_strcpy, NULL);
+	add_function_hook("strncpy", &match_strcpy, NULL);
+
+	add_hook(&match_assignment, ASSIGNMENT_HOOK);
+	add_hook(&match_string, STRING_HOOK);
+
+}
--- /dev/null	Fri Dec 21 15:00:37 2018
+++ new/usr/src/tools/smatch/src/smatch_strlen.c	Fri Dec 21 15:00:37 2018
@@ -0,0 +1,360 @@
+/*
+ * Copyright (C) 2013 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include <stdlib.h>
+#include <errno.h>
+#include "parse.h"
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+#define UNKNOWN_SIZE (-1)
+
+static int my_strlen_id;
+/*
+ * The trick with the my_equiv_id is that if we have:
+ * foo = strlen(bar);
+ * We don't know at that point what the strlen() is but we know it's equivalent
+ * to "foo" so maybe we can find the value of "foo" later.
+ */
+static int my_equiv_id;
+
+static struct smatch_state *size_to_estate(int size)
+{
+	sval_t sval;
+
+	sval.type = &int_ctype;
+	sval.value = size;
+
+	return alloc_estate_sval(sval);
+}
+
+static struct smatch_state *unmatched_strlen_state(struct sm_state *sm)
+{
+	return size_to_estate(UNKNOWN_SIZE);
+}
+
+static void set_strlen_undefined(struct sm_state *sm, struct expression *mod_expr)
+{
+	set_state(sm->owner, sm->name, sm->sym, size_to_estate(UNKNOWN_SIZE));
+}
+
+static void set_strlen_equiv_undefined(struct sm_state *sm, struct expression *mod_expr)
+{
+	set_state(sm->owner, sm->name, sm->sym, &undefined);
+}
+
+static void match_string_assignment(struct expression *expr)
+{
+	struct range_list *rl;
+
+	if (expr->op != '=')
+		return;
+	if (!get_implied_strlen(expr->right, &rl))
+		return;
+	set_state_expr(my_strlen_id, expr->left, alloc_estate_rl(clone_rl(rl)));
+}
+
+static void match_strlen(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *right;
+	struct expression *str;
+	struct expression *len_expr;
+	char *len_name;
+	struct smatch_state *state;
+
+	right = strip_expr(expr->right);
+	str = get_argument_from_call_expr(right->args, 0);
+	len_expr = strip_expr(expr->left);
+
+	len_name = expr_to_var(len_expr);
+	if (!len_name)
+		return;
+
+	state = __alloc_smatch_state(0);
+        state->name = len_name;
+	state->data = len_expr;
+
+	set_state_expr(my_equiv_id, str, state);
+}
+
+static void match_strlen_condition(struct expression *expr)
+{
+	struct expression *left;
+	struct expression *right;
+	struct expression *str = NULL;
+	int strlen_left = 0;
+	int strlen_right = 0;
+	sval_t sval;
+	struct smatch_state *true_state = NULL;
+	struct smatch_state *false_state = NULL;
+	int op;
+
+	if (expr->type != EXPR_COMPARE)
+		return;
+
+	left = strip_expr(expr->left);
+	right = strip_expr(expr->right);
+
+	if (left->type == EXPR_CALL && sym_name_is("strlen", left->fn)) {
+		str = get_argument_from_call_expr(left->args, 0);
+		strlen_left = 1;
+	}
+	if (right->type == EXPR_CALL && sym_name_is("strlen", right->fn)) {
+		str = get_argument_from_call_expr(right->args, 0);
+		strlen_right = 1;
+	}
+
+	if (!strlen_left && !strlen_right)
+		return;
+	if (strlen_left && strlen_right)
+		return;
+
+	op = expr->op;
+	if (strlen_left) {
+		if (!get_value(right, &sval))
+			return;
+	} else {
+		op = flip_comparison(op);
+		if (!get_value(left, &sval))
+			return;
+	}
+
+	switch (op) {
+	case '<':
+	case SPECIAL_UNSIGNED_LT:
+		true_state = size_to_estate(sval.value - 1);
+		break;
+	case SPECIAL_LTE:
+	case SPECIAL_UNSIGNED_LTE:
+		true_state = size_to_estate(sval.value);
+		break;
+	case SPECIAL_EQUAL:
+		true_state = size_to_estate(sval.value);
+		break;
+	case SPECIAL_NOTEQUAL:
+		false_state = size_to_estate(sval.value);
+		break;
+	case SPECIAL_GTE:
+	case SPECIAL_UNSIGNED_GTE:
+		false_state = size_to_estate(sval.value - 1);
+		break;
+	case '>':
+	case SPECIAL_UNSIGNED_GT:
+		false_state = size_to_estate(sval.value);
+		break;
+	}
+
+	set_true_false_states_expr(my_strlen_id, str, true_state, false_state);
+}
+
+static void match_snprintf(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *dest;
+	struct expression *dest_size_expr;
+	sval_t limit_size;
+
+	dest = get_argument_from_call_expr(expr->args, 0);
+	dest_size_expr = get_argument_from_call_expr(expr->args, 1);
+
+	if (!get_implied_value(dest_size_expr, &limit_size))
+		return;
+
+	if (limit_size.value <= 0)
+		return;
+
+	set_state_expr(my_strlen_id, dest, size_to_estate(limit_size.value - 1));
+}
+
+static void match_strlcpycat(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *dest;
+	struct expression *src;
+	struct expression *limit_expr;
+	int src_len;
+	sval_t limit;
+
+	dest = get_argument_from_call_expr(expr->args, 0);
+	src = get_argument_from_call_expr(expr->args, 1);
+	limit_expr = get_argument_from_call_expr(expr->args, 2);
+
+	src_len = get_size_from_strlen(src);
+
+	if (!get_implied_max(limit_expr, &limit))
+		return;
+	if (limit.value < 0 || limit.value > INT_MAX)
+		return;
+	if (src_len != 0 && strcmp(fn, "strcpy") == 0 && src_len < limit.value)
+		limit.value = src_len;
+
+	set_state_expr(my_strlen_id, dest, size_to_estate(limit.value - 1));
+}
+
+static void match_strcpy(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *dest;
+	struct expression *src;
+	int src_len;
+
+	dest = get_argument_from_call_expr(expr->args, 0);
+	src = get_argument_from_call_expr(expr->args, 1);
+
+	src_len = get_size_from_strlen(src);
+	if (src_len == 0)
+		return;
+
+	set_state_expr(my_strlen_id, dest, size_to_estate(src_len - 1));
+}
+
+static int get_strlen_from_string(struct expression *expr, struct range_list **rl)
+{
+	sval_t sval;
+	int len;
+
+	len = expr->string->length;
+	sval = sval_type_val(&int_ctype, len - 1);
+	*rl = alloc_rl(sval, sval);
+	return 1;
+}
+
+
+static int get_strlen_from_state(struct expression *expr, struct range_list **rl)
+{
+	struct smatch_state *state;
+
+	state = get_state_expr(my_strlen_id, expr);
+	if (!state)
+		return 0;
+	*rl = estate_rl(state);
+	return 1;
+}
+
+static int get_strlen_from_equiv(struct expression *expr, struct range_list **rl)
+{
+	struct smatch_state *state;
+
+	state = get_state_expr(my_equiv_id, expr);
+	if (!state || !state->data)
+		return 0;
+	if (!get_implied_rl((struct expression *)state->data, rl))
+		return 0;
+	return 1;
+}
+
+/*
+ * This returns the strlen() without the NUL char.
+ */
+int get_implied_strlen(struct expression *expr, struct range_list **rl)
+{
+
+	*rl = NULL;
+
+	expr = strip_expr(expr);
+	if (expr->type == EXPR_STRING)
+		return get_strlen_from_string(expr, rl);
+
+	if (get_strlen_from_state(expr, rl))
+		return 1;
+	if (get_strlen_from_equiv(expr, rl))
+		return 1;
+	return 0;
+}
+
+int get_size_from_strlen(struct expression *expr)
+{
+	struct range_list *rl;
+	sval_t max;
+
+	if (!get_implied_strlen(expr, &rl))
+		return 0;
+	max = rl_max(rl);
+	if (sval_is_negative(max) || sval_is_max(max))
+		return 0;
+
+	return max.value + 1; /* add one because strlen doesn't include the NULL */
+}
+
+void set_param_strlen(const char *name, struct symbol *sym, char *key, char *value)
+{
+	struct range_list *rl = NULL;
+	struct smatch_state *state;
+	char fullname[256];
+
+	if (strncmp(key, "$", 1) != 0)
+		return;
+
+	snprintf(fullname, 256, "%s%s", name, key + 1);
+
+	str_to_rl(&int_ctype, value, &rl);
+	if (!rl || is_whole_rl(rl))
+		return;
+	state = alloc_estate_rl(rl);
+	set_state(my_strlen_id, fullname, sym, state);
+}
+
+static void match_call(struct expression *expr)
+{
+	struct expression *arg;
+	struct range_list *rl;
+	int i;
+
+	i = 0;
+	FOR_EACH_PTR(expr->args, arg) {
+		if (!get_implied_strlen(arg, &rl))
+			continue;
+		if (!is_whole_rl(rl))
+			sql_insert_caller_info(expr, STR_LEN, i, "$", show_rl(rl));
+		i++;
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void struct_member_callback(struct expression *call, int param, char *printed_name, struct sm_state *sm)
+{
+	if (sm->state == &merged)
+		return;
+	sql_insert_caller_info(call, STR_LEN, param, printed_name, sm->state->name);
+}
+
+void register_strlen(int id)
+{
+	my_strlen_id = id;
+
+	add_unmatched_state_hook(my_strlen_id, &unmatched_strlen_state);
+
+	select_caller_info_hook(set_param_strlen, STR_LEN);
+	add_hook(&match_string_assignment, ASSIGNMENT_HOOK);
+
+	add_modification_hook(my_strlen_id, &set_strlen_undefined);
+	add_merge_hook(my_strlen_id, &merge_estates);
+	add_hook(&match_call, FUNCTION_CALL_HOOK);
+	add_member_info_callback(my_strlen_id, struct_member_callback);
+	add_hook(&match_strlen_condition, CONDITION_HOOK);
+
+	add_function_hook("snprintf", &match_snprintf, NULL);
+
+	add_function_hook("strlcpy", &match_strlcpycat, NULL);
+	add_function_hook("strlcat", &match_strlcpycat, NULL);
+	add_function_hook("strcpy", &match_strcpy, NULL);
+}
+
+void register_strlen_equiv(int id)
+{
+	my_equiv_id = id;
+	add_function_assign_hook("strlen", &match_strlen, NULL);
+	add_modification_hook(my_equiv_id, &set_strlen_equiv_undefined);
+}
+
--- /dev/null	Fri Dec 21 15:00:37 2018
+++ new/usr/src/tools/smatch/src/smatch_struct_assignment.c	Fri Dec 21 15:00:37 2018
@@ -0,0 +1,558 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * This file started out by saying that if you have:
+ *
+ * 	struct foo one, two;
+ * 	...
+ * 	one = two;
+ *
+ * That's equivalent to saying:
+ *
+ * 	one.x = two.x;
+ * 	one.y = two.y;
+ *
+ * Turning an assignment like that into a bunch of small fake assignments is
+ * really useful.
+ *
+ * The call to memcpy(&one, &two, sizeof(foo)); is the same as "one = two;" so
+ * we can re-use the code.  And we may as well use it for memset() too.
+ * Assigning pointers is almost the same:
+ *
+ * 	p1 = p2;
+ *
+ * Is the same as:
+ *
+ * 	p1->x = p2->x;
+ * 	p1->y = p2->y;
+ *
+ * The problem is that you can go a bit crazy with pointers to pointers.
+ *
+ * 	p1->x->y->z->one->two->three = p2->x->y->z->one->two->three;
+ *
+ * I don't have a proper solution for this problem right now.  I just copy one
+ * level and don't nest.  It should handle limitted nesting but intelligently.
+ *
+ * The other thing is that you end up with a lot of garbage assignments where
+ * we record "x could be anything. x->y could be anything. x->y->z->a->b->c
+ * could *also* be anything!".  There should be a better way to filter this
+ * useless information.
+ *
+ */
+
+#include "scope.h"
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+enum {
+	COPY_NORMAL,
+	COPY_MEMCPY,
+	COPY_MEMSET,
+};
+
+static struct symbol *get_struct_type(struct expression *expr)
+{
+	struct symbol *type;
+
+	type = get_type(expr);
+	if (!type)
+		return NULL;
+	if (type->type == SYM_PTR) {
+		type = get_real_base_type(type);
+		if (!type)
+			return NULL;
+	}
+	if (type->type == SYM_STRUCT)
+		return type;
+	if (type->type == SYM_UNION)
+		return type;
+	return NULL;
+}
+
+static struct expression *get_right_base_expr(struct symbol *left_type, struct expression *right)
+{
+	struct symbol *struct_type;
+
+	if (!right)
+		return NULL;
+
+	struct_type = get_struct_type(right);
+	if (!struct_type)
+		return NULL;
+	if (struct_type != left_type)
+		return NULL;
+
+	if (right->type == EXPR_PREOP && right->op == '&')
+		right = strip_expr(right->unop);
+
+	if (right->type == EXPR_CALL)
+		return NULL;
+
+	if (is_pointer(right))
+		right = deref_expression(right);
+
+	return right;
+}
+
+static struct expression *remove_addr(struct expression *expr)
+{
+	struct symbol *type;
+
+	expr = strip_expr(expr);
+	if (!expr)
+		return NULL;
+
+	if (expr->type == EXPR_PREOP && expr->op == '&')
+		return strip_expr(expr->unop);
+	type = get_type(expr);
+	if (!type)
+		return expr;
+	if (type->type != SYM_PTR && type->type != SYM_ARRAY)
+		return expr;
+
+	return deref_expression(expr);
+}
+
+static struct expression *faked_expression;
+struct expression *get_faked_expression(void)
+{
+	if (!__in_fake_assign)
+		return NULL;
+	return faked_expression;
+}
+
+static void split_fake_expr(struct expression *expr)
+{
+	__in_fake_assign++;
+	__in_fake_struct_assign++;
+	__split_expr(expr);
+	__in_fake_struct_assign--;
+	__in_fake_assign--;
+}
+
+static void handle_non_struct_assignments(struct expression *left, struct expression *right)
+{
+	struct symbol *type;
+	struct expression *assign;
+
+	type = get_type(left);
+	if (!type)
+		return;
+	if (type->type == SYM_PTR) {
+		left = deref_expression(left);
+		if (right)
+			right = deref_expression(right);
+		else
+			right = unknown_value_expression(left);
+		assign = assign_expression(left, '=', right);
+		split_fake_expr(assign);
+		return;
+	}
+	if (type->type != SYM_BASETYPE)
+		return;
+	right = strip_expr(right);
+	if (!right)
+		right = unknown_value_expression(left);
+	assign = assign_expression(left, '=', right);
+	split_fake_expr(assign);
+}
+
+static void set_inner_struct_members(int mode, struct expression *faked, struct expression *left, struct expression *right, struct symbol *member)
+{
+	struct expression *left_member;
+	struct expression *right_member = NULL;  /* silence GCC */
+	struct expression *assign;
+	struct symbol *base = get_real_base_type(member);
+	struct symbol *tmp;
+
+	if (member->ident) {
+		left = member_expression(left, '.', member->ident);
+		if (mode != COPY_MEMSET && right)
+			right = member_expression(right, '.', member->ident);
+	}
+
+	FOR_EACH_PTR(base->symbol_list, tmp) {
+		struct symbol *type;
+
+		type = get_real_base_type(tmp);
+		if (!type)
+			continue;
+
+		if (type->type == SYM_ARRAY)
+			continue;
+		if (type->type == SYM_UNION || type->type == SYM_STRUCT) {
+			set_inner_struct_members(mode, faked, left, right, tmp);
+			continue;
+		}
+		if (!tmp->ident)
+			continue;
+
+		left_member = member_expression(left, '.', tmp->ident);
+
+		switch (mode) {
+		case COPY_NORMAL:
+		case COPY_MEMCPY:
+			if (right)
+				right_member = member_expression(right, '.', tmp->ident);
+			else
+				right_member = unknown_value_expression(left_member);
+			break;
+		case COPY_MEMSET:
+			right_member = right;
+			break;
+		}
+
+		assign = assign_expression(left_member, '=', right_member);
+		split_fake_expr(assign);
+	} END_FOR_EACH_PTR(tmp);
+}
+
+static void __struct_members_copy(int mode, struct expression *faked,
+				  struct expression *left,
+				  struct expression *right)
+{
+	struct symbol *struct_type, *tmp, *type;
+	struct expression *left_member;
+	struct expression *right_member;
+	struct expression *assign;
+	int op = '.';
+
+
+	if (__in_fake_assign)
+		return;
+	faked_expression = faked;
+
+	left = strip_expr(left);
+	right = strip_expr(right);
+
+	struct_type = get_struct_type(left);
+	if (!struct_type) {
+		/*
+		 * This is not a struct assignment obviously.  But this is where
+		 * memcpy() is handled so it feels like a good place to add this
+		 * code.
+		 */
+		handle_non_struct_assignments(left, right);
+		goto done;
+	}
+
+	if (is_pointer(left)) {
+		left = deref_expression(left);
+		op = '*';
+	}
+	if (mode != COPY_MEMSET)
+		right = get_right_base_expr(struct_type, right);
+
+	FOR_EACH_PTR(struct_type->symbol_list, tmp) {
+		type = get_real_base_type(tmp);
+		if (!type)
+			continue;
+		if (type->type == SYM_ARRAY)
+			continue;
+
+		if (type->type == SYM_UNION || type->type == SYM_STRUCT) {
+			set_inner_struct_members(mode, faked, left, right, tmp);
+			continue;
+		}
+
+		if (!tmp->ident)
+			continue;
+
+		left_member = member_expression(left, op, tmp->ident);
+		right_member = NULL;
+
+		switch (mode) {
+		case COPY_NORMAL:
+		case COPY_MEMCPY:
+			if (right)
+				right_member = member_expression(right, op, tmp->ident);
+			else
+				right_member = unknown_value_expression(left_member);
+			break;
+		case COPY_MEMSET:
+			right_member = right;
+			break;
+		}
+		if (!right_member) {
+			sm_perror("No right member");
+			continue;
+		}
+		assign = assign_expression(left_member, '=', right_member);
+		split_fake_expr(assign);
+	} END_FOR_EACH_PTR(tmp);
+
+done:
+	faked_expression = NULL;
+}
+
+static int returns_zeroed_mem(struct expression *expr)
+{
+	char *fn;
+
+	if (expr->type != EXPR_CALL || expr->fn->type != EXPR_SYMBOL)
+		return 0;
+	fn = expr_to_var(expr->fn);
+	if (!fn)
+		return 0;
+	if (strcmp(fn, "kcalloc") == 0)
+		return 1;
+	if (option_project == PROJ_KERNEL && strstr(fn, "zalloc"))
+		return 1;
+	return 0;
+}
+
+static int copy_containter_states(struct expression *left, struct expression *right, int offset)
+{
+	char *left_name = NULL, *right_name = NULL;
+	struct symbol *left_sym, *right_sym;
+	struct sm_state *sm, *new_sm;
+	int ret = 0;
+	int len;
+	char buf[64];
+	char new_name[128];
+
+	right_name = expr_to_var_sym(right, &right_sym);
+	if (!right_name || !right_sym)
+		goto free;
+	left_name = expr_to_var_sym(left, &left_sym);
+	if (!left_name || !left_sym)
+		goto free;
+
+	len = snprintf(buf, sizeof(buf), "%s(-%d)", right_name, offset);
+	if (len >= sizeof(buf))
+		goto free;
+
+	FOR_EACH_SM(__get_cur_stree(), sm) {
+		if (sm->sym != right_sym)
+			continue;
+		if (strncmp(sm->name, buf, len) != 0)
+			continue;
+		snprintf(new_name, sizeof(new_name), "%s%s", left_name, sm->name + len);
+		new_sm = clone_sm(sm);
+		new_sm->name = alloc_sname(new_name);
+		new_sm->sym = left_sym;
+		__set_sm(new_sm);
+		ret = 1;
+	} END_FOR_EACH_SM(sm);
+free:
+	free_string(left_name);
+	free_string(right_name);
+	return ret;
+}
+
+static int handle_param_offsets(struct expression *expr)
+{
+	struct expression *right;
+	sval_t sval;
+
+	right = strip_expr(expr->right);
+
+	if (right->type != EXPR_BINOP || right->op != '-')
+		return 0;
+
+	if (!get_value(right->right, &sval))
+		return 0;
+
+	right = get_assigned_expr(right->left);
+	if (!right)
+		return 0;
+	return copy_containter_states(expr->left, right, sval.value);
+}
+
+static void returns_container_of(struct expression *expr, int param, char *key, char *value)
+{
+	struct expression *call, *arg;
+	int offset;
+
+	if (expr->type != EXPR_ASSIGNMENT || expr->op != '=')
+		return;
+	call = strip_expr(expr->right);
+	if (call->type != EXPR_CALL)
+		return;
+	if (param != -1)
+		return;
+	param = atoi(key);
+	offset = atoi(value);
+
+	arg = get_argument_from_call_expr(call->args, param);
+	if (!arg)
+		return;
+
+	copy_containter_states(expr->left, arg, -offset);
+}
+
+void __fake_struct_member_assignments(struct expression *expr)
+{
+	struct symbol *left_type;
+
+	if (expr->op != '=')
+		return;
+
+	if (is_zero(expr->right))
+		return;
+
+	left_type = get_type(expr->left);
+	if (!left_type ||
+	    (left_type->type != SYM_PTR &&
+	     left_type->type != SYM_STRUCT))
+		return;
+
+	if (handle_param_offsets(expr))
+		return;
+
+	if (returns_zeroed_mem(expr->right))
+		__struct_members_copy(COPY_MEMSET, expr, expr->left, zero_expr());
+	else
+		__struct_members_copy(COPY_NORMAL, expr, expr->left, expr->right);
+}
+
+static void match_memset(const char *fn, struct expression *expr, void *_size_arg)
+{
+	struct expression *buf;
+	struct expression *val;
+
+	buf = get_argument_from_call_expr(expr->args, 0);
+	val = get_argument_from_call_expr(expr->args, 1);
+
+	buf = strip_expr(buf);
+	__struct_members_copy(COPY_MEMSET, expr, remove_addr(buf), val);
+}
+
+static void match_memcpy(const char *fn, struct expression *expr, void *_arg)
+{
+	struct expression *dest;
+	struct expression *src;
+
+	dest = get_argument_from_call_expr(expr->args, 0);
+	src = get_argument_from_call_expr(expr->args, 1);
+
+	__struct_members_copy(COPY_MEMCPY, expr, remove_addr(dest), remove_addr(src));
+}
+
+static void match_memcpy_unknown(const char *fn, struct expression *expr, void *_arg)
+{
+	struct expression *dest;
+
+	dest = get_argument_from_call_expr(expr->args, 0);
+	__struct_members_copy(COPY_MEMCPY, expr, remove_addr(dest), NULL);
+}
+
+static void match_sscanf(const char *fn, struct expression *expr, void *unused)
+{
+	struct expression *arg;
+	int i;
+
+	i = -1;
+	FOR_EACH_PTR(expr->args, arg) {
+		if (++i < 2)
+			continue;
+		__struct_members_copy(COPY_MEMCPY, expr, remove_addr(arg), NULL);
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void unop_expr(struct expression *expr)
+{
+	if (expr->op != SPECIAL_INCREMENT &&
+	    expr->op != SPECIAL_DECREMENT)
+		return;
+
+	if (!is_pointer(expr))
+		return;
+	faked_expression = expr;
+	__struct_members_copy(COPY_MEMCPY, expr, expr->unop, NULL);
+	faked_expression = NULL;
+}
+
+static void register_clears_param(void)
+{
+	struct token *token;
+	char name[256];
+	const char *function;
+	int param;
+
+	if (option_project == PROJ_NONE)
+		return;
+
+	snprintf(name, 256, "%s.clears_argument", option_project_str);
+
+	token = get_tokens_file(name);
+	if (!token)
+		return;
+	if (token_type(token) != TOKEN_STREAMBEGIN)
+		return;
+	token = token->next;
+	while (token_type(token) != TOKEN_STREAMEND) {
+		if (token_type(token) != TOKEN_IDENT)
+			return;
+		function = show_ident(token->ident);
+		token = token->next;
+		if (token_type(token) != TOKEN_NUMBER)
+			return;
+		param = atoi(token->number);
+		add_function_hook(function, &match_memcpy_unknown, INT_PTR(param));
+		token = token->next;
+	}
+	clear_token_alloc();
+}
+
+static void db_param_cleared(struct expression *expr, int param, char *key, char *value)
+{
+	struct expression *arg;
+
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+	if (expr->type != EXPR_CALL)
+		return;
+
+	/*
+	 * FIXME:  __struct_members_copy() requires an expression but
+	 * get_variable_from_key() returns a name/sym pair so that doesn't
+	 * work here.
+	 */
+	if (strcmp(key, "$") != 0)
+		return;
+
+	arg = get_argument_from_call_expr(expr->args, param);
+	if (!arg)
+		return;
+
+	if (strcmp(value, "0") == 0)
+		__struct_members_copy(COPY_MEMSET, expr, remove_addr(arg), zero_expr());
+	else
+		__struct_members_copy(COPY_MEMCPY, expr, remove_addr(arg), NULL);
+}
+
+void register_struct_assignment(int id)
+{
+	add_function_hook("memset", &match_memset, NULL);
+	add_function_hook("__memset", &match_memset, NULL);
+
+	add_function_hook("memcpy", &match_memcpy, INT_PTR(0));
+	add_function_hook("memmove", &match_memcpy, INT_PTR(0));
+	add_function_hook("__memcpy", &match_memcpy, INT_PTR(0));
+	add_function_hook("__memmove", &match_memcpy, INT_PTR(0));
+
+	add_function_hook("sscanf", &match_sscanf, NULL);
+
+	add_hook(&unop_expr, OP_HOOK);
+	register_clears_param();
+	select_return_states_hook(PARAM_CLEARED, &db_param_cleared);
+
+	select_return_states_hook(CONTAINER, &returns_container_of);
+}
--- /dev/null	Fri Dec 21 15:00:37 2018
+++ new/usr/src/tools/smatch/src/smatch_sval.c	Fri Dec 21 15:00:37 2018
@@ -0,0 +1,674 @@
+/*
+ * Copyright (C) 2012 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Basically the point of sval is that it can hold both ULLONG_MAX and
+ * LLONG_MIN.  If it is an unsigned type then we use sval.uvalue or if it is
+ * signed we use sval.value.
+ *
+ * I considered just using one bit to store whether the value was signed vs
+ * unsigned but I think it might help to have the type information so we know
+ * how to do type promotion.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+__ALLOCATOR(sval_t, "svals", sval);
+
+sval_t *sval_alloc(sval_t sval)
+{
+	sval_t *ret;
+
+	ret = __alloc_sval(0);
+	*ret = sval;
+	return ret;
+}
+
+sval_t *sval_alloc_permanent(sval_t sval)
+{
+	sval_t *ret;
+
+	ret = malloc(sizeof(*ret));
+	*ret = sval;
+	return ret;
+}
+
+sval_t sval_blank(struct expression *expr)
+{
+	sval_t ret;
+
+	ret.type = get_type(expr);
+	if (!ret.type)
+		ret.type = &int_ctype;
+	ret.value = 123456789;
+
+	return ret;
+}
+
+sval_t sval_type_val(struct symbol *type, long long val)
+{
+	sval_t ret;
+
+	if (!type)
+		type = &int_ctype;
+
+	ret.type = type;
+	ret.value = val;
+	return ret;
+}
+
+sval_t sval_from_val(struct expression *expr, long long val)
+{
+	sval_t ret;
+
+	ret = sval_blank(expr);
+	ret.value = val;
+	ret = sval_cast(get_type(expr), ret);
+
+	return ret;
+}
+
+int sval_is_ptr(sval_t sval)
+{
+	if (!sval.type)
+		return 0;
+	return (sval.type->type == SYM_PTR || sval.type->type == SYM_ARRAY);
+}
+
+int sval_unsigned(sval_t sval)
+{
+	return type_unsigned(sval.type);
+}
+
+int sval_signed(sval_t sval)
+{
+	return !type_unsigned(sval.type);
+}
+
+int sval_bits(sval_t sval)
+{
+	return type_bits(sval.type);
+}
+
+int sval_bits_used(sval_t sval)
+{
+	int i;
+
+	for (i = 64; i >= 1; i--) {
+		if (sval.uvalue & (1ULL << (i - 1)))
+			return i;
+	}
+	return 0;
+}
+
+int sval_is_negative(sval_t sval)
+{
+	if (type_unsigned(sval.type))
+		return 0;
+	if (sval.value < 0)
+		return 1;
+	return 0;
+}
+
+int sval_is_positive(sval_t sval)
+{
+	return !sval_is_negative(sval);
+}
+
+int sval_is_min(sval_t sval)
+{
+	sval_t min = sval_type_min(sval.type);
+
+	if (sval_unsigned(sval)) {
+		if (sval.uvalue == 0)
+			return 1;
+		return 0;
+	}
+	/* return true for less than min as well */
+	return (sval.value <= min.value);
+}
+
+int sval_is_max(sval_t sval)
+{
+	sval_t max = sval_type_max(sval.type);
+
+	if (sval_unsigned(sval))
+		return (sval.uvalue >= max.value);
+	return (sval.value >= max.value);
+}
+
+int sval_is_a_min(sval_t sval)
+{
+	if (sval_is_min(sval))
+		return 1;
+	if (sval_signed(sval) && sval.value == SHRT_MIN)
+		return 1;
+	if (sval_signed(sval) && sval.value == INT_MIN)
+		return 1;
+	if (sval_signed(sval) && sval.value == LLONG_MIN)
+		return 1;
+	return 0;
+}
+
+int sval_is_a_max(sval_t sval)
+{
+	if (sval_is_max(sval))
+		return 1;
+	if (sval.uvalue == SHRT_MAX)
+		return 1;
+	if (sval.uvalue == INT_MAX)
+		return 1;
+	if (sval.uvalue == LLONG_MAX)
+		return 1;
+	if (sval.uvalue == USHRT_MAX)
+		return 1;
+	if (sval.uvalue == UINT_MAX)
+		return 1;
+	if (sval_unsigned(sval) && sval.uvalue == ULLONG_MAX)
+		return 1;
+	if (sval.value > valid_ptr_max - 1000 &&
+	    sval.value < valid_ptr_max + 1000)
+		return 1;
+	return 0;
+}
+
+int sval_is_negative_min(sval_t sval)
+{
+	if (!sval_is_negative(sval))
+		return 0;
+	return sval_is_min(sval);
+}
+
+int sval_cmp_t(struct symbol *type, sval_t one, sval_t two)
+{
+	sval_t one_cast, two_cast;
+
+	one_cast = sval_cast(type, one);
+	two_cast = sval_cast(type, two);
+	return sval_cmp(one_cast, two_cast);
+}
+
+int sval_cmp_val(sval_t one, long long val)
+{
+	sval_t sval;
+
+	sval = sval_type_val(&llong_ctype, val);
+	return sval_cmp(one, sval);
+}
+
+sval_t sval_min(sval_t one, sval_t two)
+{
+	if (sval_cmp(one, two) > 0)
+		return two;
+	return one;
+}
+
+sval_t sval_max(sval_t one, sval_t two)
+{
+	if (sval_cmp(one, two) < 0)
+		return two;
+	return one;
+}
+
+int sval_too_low(struct symbol *type, sval_t sval)
+{
+	if (sval_is_negative(sval) && type_unsigned(type))
+		return 1;
+	if (type_signed(type) &&  sval_unsigned(sval))
+		return 0;
+	if (type_signed(sval.type) &&
+	    sval.value < sval_type_min(type).value)
+		return 1;
+	if (sval_cmp(sval, sval_type_min(type)) < 0)
+		return 1;
+	return 0;
+}
+
+int sval_too_high(struct symbol *type, sval_t sval)
+{
+	if (sval_is_negative(sval))
+		return 0;
+	if (sval.uvalue > sval_type_max(type).uvalue)
+		return 1;
+	return 0;
+}
+
+int sval_fits(struct symbol *type, sval_t sval)
+{
+	if (sval_too_low(type, sval))
+		return 0;
+	if (sval_too_high(type, sval))
+		return 0;
+	return 1;
+}
+
+sval_t sval_cast(struct symbol *type, sval_t sval)
+{
+	sval_t ret;
+
+	if (!type)
+		type = &int_ctype;
+
+	ret.type = type;
+	switch (sval_bits(ret)) {
+	case 1:
+		ret.value = !!sval.value;
+		break;
+	case 8:
+		if (sval_unsigned(ret))
+			ret.value = (long long)(unsigned char)sval.value;
+		else
+			ret.value = (long long)(char)sval.value;
+		break;
+	case 16:
+		if (sval_unsigned(ret))
+			ret.value = (long long)(unsigned short)sval.value;
+		else
+			ret.value = (long long)(short)sval.value;
+		break;
+	case 32:
+		if (sval_unsigned(ret))
+			ret.value = (long long)(unsigned int)sval.value;
+		else
+			ret.value = (long long)(int)sval.value;
+		break;
+	default:
+		ret.value = sval.value;
+	}
+	return ret;
+
+}
+
+sval_t sval_preop(sval_t sval, int op)
+{
+	switch (op) {
+	case '!':
+		sval.value = !sval.value;
+		break;
+	case '~':
+		sval.value = ~sval.value;
+		sval = sval_cast(sval.type, sval);
+		break;
+	case '-':
+		sval.value = -sval.value;
+		sval = sval_cast(sval.type, sval);
+		break;
+	}
+	return sval;
+}
+
+static sval_t sval_binop_unsigned(struct symbol *type, sval_t left, int op, sval_t right)
+{
+	sval_t ret;
+
+	ret.type = type;
+	switch (op) {
+	case '*':
+		ret.uvalue =  left.uvalue * right.uvalue;
+		break;
+	case '/':
+		if (right.uvalue == 0) {
+			sm_debug("%s: divide by zero", __func__);
+			ret.uvalue = 123456789;
+		} else {
+			ret.uvalue = left.uvalue / right.uvalue;
+		}
+		break;
+	case '+':
+		ret.uvalue = left.uvalue + right.uvalue;
+		break;
+	case '-':
+		ret.uvalue = left.uvalue - right.uvalue;
+		break;
+	case '%':
+		if (right.uvalue == 0) {
+			sm_perror(" %s: MOD by zero", __func__);
+			ret.uvalue = 123456789;
+		} else {
+			ret.uvalue = left.uvalue % right.uvalue;
+		}
+		break;
+	case '|':
+		ret.uvalue = left.uvalue | right.uvalue;
+		break;
+	case '&':
+		ret.uvalue = left.uvalue & right.uvalue;
+		break;
+	case SPECIAL_RIGHTSHIFT:
+		ret.uvalue = left.uvalue >> right.uvalue;
+		break;
+	case SPECIAL_LEFTSHIFT:
+		ret.uvalue = left.uvalue << right.uvalue;
+		break;
+	case '^':
+		ret.uvalue = left.uvalue ^ right.uvalue;
+		break;
+	default:
+		sm_perror(" %s: unhandled binop %s", __func__,
+		       show_special(op));
+		ret.uvalue = 1234567;
+	}
+	return ret;
+}
+
+
+static sval_t sval_binop_signed(struct symbol *type, sval_t left, int op, sval_t right)
+{
+	sval_t ret;
+
+	ret.type = type;
+	switch (op) {
+	case '*':
+		ret.value =  left.value * right.value;
+		break;
+	case '/':
+		if (right.value == 0) {
+			sm_debug("%s: divide by zero", __func__);
+			ret.value = 123456789;
+		} else if (left.value == LLONG_MIN && right.value == -1) {
+			sm_debug("%s: invalid divide LLONG_MIN/-1", __func__);
+			ret.value = 12345678;
+		} else {
+			ret.value = left.value / right.value;
+		}
+		break;
+	case '+':
+		ret.value = left.value + right.value;
+		break;
+	case '-':
+		ret.value = left.value - right.value;
+		break;
+	case '%':
+		if (right.value == 0) {
+			sm_perror(" %s: MOD by zero", __func__);
+			ret.value = 123456789;
+		} else {
+			ret.value = left.value % right.value;
+		}
+		break;
+	case '|':
+		ret.value = left.value | right.value;
+		break;
+	case '&':
+		ret.value = left.value & right.value;
+		break;
+	case SPECIAL_RIGHTSHIFT:
+		ret.value = left.value >> right.value;
+		break;
+	case SPECIAL_LEFTSHIFT:
+		ret.value = left.value << right.value;
+		break;
+	case '^':
+		ret.value = left.value ^ right.value;
+		break;
+	default:
+		sm_perror(" %s: unhandled binop %s", __func__,
+		       show_special(op));
+		ret.value = 1234567;
+	}
+	return ret;
+}
+
+static sval_t ptr_binop(struct symbol *type, sval_t left, int op, sval_t right)
+{
+	sval_t ret;
+	int align;
+
+	if (op != '+' && op != '-')
+		return sval_binop_unsigned(type, left, op, right);
+
+	ret.type = type;
+	if (type->type == SYM_PTR)
+		type = get_real_base_type(type);
+	align = type->ctype.alignment;
+	if (align <= 0)
+		align = 1;
+
+	if (op == '+') {
+		if (type_is_ptr(left.type))
+			ret.value = left.value + right.value * align;
+		else
+			ret.value = left.value * align + right.value;
+	} else {
+		if (!type_is_ptr(left.type)) {
+			left.value = -left.value;
+			ret = ptr_binop(type, left, '+', right);
+		} else if (!type_is_ptr(right.type)) {
+			right.value = -right.value;
+			ret = ptr_binop(type, left, '+', right);
+		} else {
+			ret.value = (left.value - right.value) / align;
+		}
+	}
+
+	return ret;
+}
+
+sval_t sval_binop(sval_t left, int op, sval_t right)
+{
+	struct symbol *type;
+	sval_t ret;
+
+	type = get_promoted_type(left.type, right.type);
+
+	if (type_is_ptr(type))
+		ret = ptr_binop(type, left, op, right);
+	else if (type_unsigned(type))
+		ret = sval_binop_unsigned(type, left, op, right);
+	else
+		ret = sval_binop_signed(type, left, op, right);
+	return sval_cast(type, ret);
+}
+
+int sval_unop_overflows(sval_t sval, int op)
+{
+	if (op != '-')
+		return 0;
+	if (sval_positive_bits(sval) == 32 && sval.value == INT_MIN)
+		return 1;
+	if (sval_positive_bits(sval) == 64 && sval.value == LLONG_MIN)
+		return 1;
+	if (sval_is_negative(sval))
+		return 0;
+	if (sval_signed(sval))
+		return 0;
+	if (sval_bits(sval) == 32 && sval.uvalue > INT_MAX)
+		return 1;
+	if (sval_bits(sval) == 64 && sval.uvalue > LLONG_MAX)
+		return 1;
+	return 0;
+}
+
+int sval_binop_overflows(sval_t left, int op, sval_t right)
+{
+	struct symbol *type;
+	sval_t max, min;
+
+	type = left.type;
+	if (type_positive_bits(right.type) > type_positive_bits(left.type))
+		type = right.type;
+	if (type_positive_bits(type) < 31)
+		type = &int_ctype;
+
+	max = sval_type_max(type);
+	min = sval_type_min(type);
+
+	switch (op) {
+	case '+':
+		if (sval_is_negative(left) && sval_is_negative(right)) {
+			if (left.value < min.value + right.value)
+				return 1;
+			return 0;
+		}
+		if (sval_is_negative(left) || sval_is_negative(right))
+			return 0;
+		if (left.uvalue > max.uvalue - right.uvalue)
+				return 1;
+		return 0;
+	case '*':
+		if (type_signed(type)) {
+			if (left.value == 0 || right.value == 0)
+				return 0;
+			if (left.value > max.value / right.value)
+				return 1;
+			if (left.value == -1 || right.value == -1)
+				return 0;
+			return left.value != left.value * right.value / right.value;
+
+		}
+		return right.uvalue != 0 && left.uvalue > max.uvalue / right.uvalue;
+	case '-':
+		if (type_unsigned(type)) {
+			if (sval_cmp(left, right) < 0)
+				return 1;
+			return 0;
+		}
+		if (sval_is_negative(left) && sval_is_negative(right))
+			return 0;
+
+		if (sval_is_negative(left)) {
+			if (left.value < min.value + right.value)
+				return 1;
+			return 0;
+		}
+		if (sval_is_negative(right)) {
+			if (right.value == min.value)
+				return 1;
+			right = sval_preop(right, '-');
+			if (sval_binop_overflows(left, '+', right))
+				return 1;
+			return 0;
+		}
+		return 0;
+	case SPECIAL_LEFTSHIFT:
+		if (sval_cmp(left, sval_binop(max, invert_op(op), right)) > 0)
+			return 1;
+		return 0;
+	}
+	return 0;
+}
+
+int sval_binop_overflows_no_sign(sval_t left, int op, sval_t right)
+{
+
+	struct symbol *type;
+
+	type = left.type;
+	if (type_positive_bits(right.type) > type_positive_bits(left.type))
+		type = right.type;
+	if (type_positive_bits(type) <= 31)
+		type = &uint_ctype;
+	else
+		type = &ullong_ctype;
+
+	left = sval_cast(type, left);
+	right = sval_cast(type, right);
+	return sval_binop_overflows(left, op, right);
+}
+
+unsigned long long fls_mask(unsigned long long uvalue)
+{
+	unsigned long long high_bit = 0;
+
+	while (uvalue) {
+		uvalue >>= 1;
+		high_bit++;
+	}
+
+	if (high_bit == 0)
+		return 0;
+
+	return ((unsigned long long)-1) >> (64 - high_bit);
+}
+
+unsigned long long sval_fls_mask(sval_t sval)
+{
+	return fls_mask(sval.uvalue);
+}
+
+const char *sval_to_str(sval_t sval)
+{
+	char buf[30];
+
+	if (sval_unsigned(sval) && sval.value == ULLONG_MAX)
+		return "u64max";
+	if (sval_unsigned(sval) && sval.value == UINT_MAX)
+		return "u32max";
+	if (sval.value == USHRT_MAX)
+		return "u16max";
+
+	if (sval_signed(sval) && sval.value == LLONG_MAX)
+		return "s64max";
+	if (sval.value == INT_MAX)
+		return "s32max";
+	if (sval.value == SHRT_MAX)
+		return "s16max";
+
+	if (sval_signed(sval) && sval.value == SHRT_MIN)
+		return "s16min";
+	if (sval_signed(sval) && sval.value == INT_MIN)
+		return "s32min";
+	if (sval_signed(sval) && sval.value == LLONG_MIN)
+		return "s64min";
+
+	if (sval_unsigned(sval))
+		snprintf(buf, sizeof(buf), "%llu", sval.value);
+	else if (sval.value < 0)
+		snprintf(buf, sizeof(buf), "(%lld)", sval.value);
+	else
+		snprintf(buf, sizeof(buf), "%lld", sval.value);
+
+	return alloc_sname(buf);
+}
+
+const char *sval_to_numstr(sval_t sval)
+{
+	char buf[30];
+
+	if (sval_unsigned(sval))
+		snprintf(buf, sizeof(buf), "%llu", sval.value);
+	else if (sval.value < 0)
+		snprintf(buf, sizeof(buf), "(%lld)", sval.value);
+	else
+		snprintf(buf, sizeof(buf), "%lld", sval.value);
+
+	return alloc_sname(buf);
+}
+
+sval_t ll_to_sval(long long val)
+{
+	sval_t ret;
+
+	ret.type = &llong_ctype;
+	ret.value = val;
+	return ret;
+}
+
+static void free_svals(struct symbol *sym)
+{
+	if (__inline_fn)
+		return;
+	clear_sval_alloc();
+}
+
+void register_sval(int my_id)
+{
+	add_hook(&free_svals, AFTER_FUNC_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:37 2018
+++ new/usr/src/tools/smatch/src/smatch_tracker.c	Fri Dec 21 15:00:37 2018
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+ALLOCATOR(tracker, "trackers");
+
+struct tracker *alloc_tracker(int owner, const char *name, struct symbol *sym)
+{
+	struct tracker *tmp;
+
+	tmp = __alloc_tracker(0);
+	tmp->name = alloc_string(name);
+	tmp->owner = owner;
+	tmp->sym = sym;
+	return tmp;
+}
+
+void add_tracker(struct tracker_list **list, int owner, const char *name,
+		struct symbol *sym)
+{
+	struct tracker *tmp;
+
+	if (in_tracker_list(*list, owner, name, sym))
+		return;
+	tmp = alloc_tracker(owner, name, sym);
+	add_ptr_list(list, tmp);
+}
+
+void add_tracker_expr(struct tracker_list **list, int owner, struct expression *expr)
+{
+	char *name;
+	struct symbol *sym;
+
+	name = expr_to_var_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+	add_tracker(list, owner, name, sym);
+free:
+	free_string(name);
+}
+
+static void free_tracker(struct tracker *t)
+{
+	free_string(t->name);
+	__free_tracker(t);
+}
+
+void del_tracker(struct tracker_list **list, int owner, const char *name,
+		struct symbol *sym)
+{
+	struct tracker *tmp;
+
+	FOR_EACH_PTR(*list, tmp) {
+		if (tmp->owner == owner && tmp->sym == sym
+		    && !strcmp(tmp->name, name)) {
+			DELETE_CURRENT_PTR(tmp);
+			free_tracker(tmp);
+			return;
+		}
+	} END_FOR_EACH_PTR(tmp);
+}
+
+int in_tracker_list(struct tracker_list *list, int owner, const char *name,
+		struct symbol *sym)
+{
+	struct tracker *tmp;
+
+	FOR_EACH_PTR(list, tmp) {
+		if (tmp->owner == owner && tmp->sym == sym
+		    && !strcmp(tmp->name, name))
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+	return 0;
+}
+
+void free_tracker_list(struct tracker_list **list)
+{
+	__free_ptr_list((struct ptr_list **)list);
+}
+
+void free_trackers_and_list(struct tracker_list **list)
+{
+	struct tracker *tmp;
+
+	FOR_EACH_PTR(*list, tmp) {
+		free_tracker(tmp);
+	} END_FOR_EACH_PTR(tmp);
+	free_tracker_list(list);
+}
+
--- /dev/null	Fri Dec 21 15:00:37 2018
+++ new/usr/src/tools/smatch/src/smatch_type.c	Fri Dec 21 15:00:37 2018
@@ -0,0 +1,810 @@
+/*
+ * Copyright (C) 2009 Dan Carpenter.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * The idea here is that you have an expression and you
+ * want to know what the type is for that.
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+
+struct symbol *get_real_base_type(struct symbol *sym)
+{
+	struct symbol *ret;
+
+	if (!sym)
+		return NULL;
+	ret = get_base_type(sym);
+	if (!ret)
+		return NULL;
+	if (ret->type == SYM_RESTRICT || ret->type == SYM_NODE)
+		return get_real_base_type(ret);
+	return ret;
+}
+
+int type_bytes(struct symbol *type)
+{
+	int bits;
+
+	if (type && type->type == SYM_ARRAY)
+		return array_bytes(type);
+
+	bits = type_bits(type);
+	if (bits < 0)
+		return 0;
+	return bits_to_bytes(bits);
+}
+
+int array_bytes(struct symbol *type)
+{
+	if (!type || type->type != SYM_ARRAY)
+		return 0;
+	return bits_to_bytes(type->bit_size);
+}
+
+static struct symbol *get_binop_type(struct expression *expr)
+{
+	struct symbol *left, *right;
+
+	left = get_type(expr->left);
+	if (!left)
+		return NULL;
+
+	if (expr->op == SPECIAL_LEFTSHIFT ||
+	    expr->op == SPECIAL_RIGHTSHIFT) {
+		if (type_positive_bits(left) < 31)
+			return &int_ctype;
+		return left;
+	}
+	right = get_type(expr->right);
+	if (!right)
+		return NULL;
+
+	if (left->type == SYM_PTR || left->type == SYM_ARRAY)
+		return left;
+	if (right->type == SYM_PTR || right->type == SYM_ARRAY)
+		return right;
+
+	if (type_positive_bits(left) < 31 && type_positive_bits(right) < 31)
+		return &int_ctype;
+
+	if (type_positive_bits(left) > type_positive_bits(right))
+		return left;
+	return right;
+}
+
+static struct symbol *get_type_symbol(struct expression *expr)
+{
+	if (!expr || expr->type != EXPR_SYMBOL || !expr->symbol)
+		return NULL;
+
+	return get_real_base_type(expr->symbol);
+}
+
+static struct symbol *get_member_symbol(struct symbol_list *symbol_list, struct ident *member)
+{
+	struct symbol *tmp, *sub;
+
+	FOR_EACH_PTR(symbol_list, tmp) {
+		if (!tmp->ident) {
+			sub = get_real_base_type(tmp);
+			sub = get_member_symbol(sub->symbol_list, member);
+			if (sub)
+				return sub;
+			continue;
+		}
+		if (tmp->ident == member)
+			return tmp;
+	} END_FOR_EACH_PTR(tmp);
+
+	return NULL;
+}
+
+static struct symbol *get_symbol_from_deref(struct expression *expr)
+{
+	struct ident *member;
+	struct symbol *sym;
+
+	if (!expr || expr->type != EXPR_DEREF)
+		return NULL;
+
+	member = expr->member;
+	sym = get_type(expr->deref);
+	if (!sym) {
+		// sm_msg("could not find struct type");
+		return NULL;
+	}
+	if (sym->type == SYM_PTR)
+		sym = get_real_base_type(sym);
+	sym = get_member_symbol(sym->symbol_list, member);
+	if (!sym)
+		return NULL;
+	return get_real_base_type(sym);
+}
+
+static struct symbol *get_return_type(struct expression *expr)
+{
+	struct symbol *tmp;
+
+	tmp = get_type(expr->fn);
+	if (!tmp)
+		return NULL;
+	/* this is to handle __builtin_constant_p() */
+	if (tmp->type != SYM_FN)
+		tmp = get_base_type(tmp);
+	return get_real_base_type(tmp);
+}
+
+static struct symbol *get_expr_stmt_type(struct statement *stmt)
+{
+	if (stmt->type != STMT_COMPOUND)
+		return NULL;
+	stmt = last_ptr_list((struct ptr_list *)stmt->stmts);
+	if (stmt->type == STMT_LABEL)
+		stmt = stmt->label_statement;
+	if (stmt->type != STMT_EXPRESSION)
+		return NULL;
+	return get_type(stmt->expression);
+}
+
+static struct symbol *get_select_type(struct expression *expr)
+{
+	struct symbol *one, *two;
+
+	one = get_type(expr->cond_true);
+	two = get_type(expr->cond_false);
+	if (!one || !two)
+		return NULL;
+	/*
+	 * This is a hack.  If the types are not equiv then we
+	 * really don't know the type.  But I think guessing is
+	 *  probably Ok here.
+	 */
+	if (type_positive_bits(one) > type_positive_bits(two))
+		return one;
+	return two;
+}
+
+struct symbol *get_pointer_type(struct expression *expr)
+{
+	struct symbol *sym;
+
+	sym = get_type(expr);
+	if (!sym)
+		return NULL;
+	if (sym->type == SYM_NODE) {
+		sym = get_real_base_type(sym);
+		if (!sym)
+			return NULL;
+	}
+	if (sym->type != SYM_PTR && sym->type != SYM_ARRAY)
+		return NULL;
+	return get_real_base_type(sym);
+}
+
+static struct symbol *fake_pointer_sym(struct expression *expr)
+{
+	struct symbol *sym;
+	struct symbol *base;
+
+	sym = alloc_symbol(expr->pos, SYM_PTR);
+	expr = expr->unop;
+	base = get_type(expr);
+	if (!base)
+		return NULL;
+	sym->ctype.base_type = base;
+	return sym;
+}
+
+static struct symbol *get_type_helper(struct expression *expr)
+{
+	struct symbol *ret;
+
+	expr = strip_parens(expr);
+	if (!expr)
+		return NULL;
+
+	if (expr->ctype)
+		return expr->ctype;
+
+	switch (expr->type) {
+	case EXPR_STRING:
+		ret = &string_ctype;
+		break;
+	case EXPR_SYMBOL:
+		ret = get_type_symbol(expr);
+		break;
+	case EXPR_DEREF:
+		ret = get_symbol_from_deref(expr);
+		break;
+	case EXPR_PREOP:
+	case EXPR_POSTOP:
+		if (expr->op == '&')
+			ret = fake_pointer_sym(expr);
+		else if (expr->op == '*')
+			ret = get_pointer_type(expr->unop);
+		else
+			ret = get_type(expr->unop);
+		break;
+	case EXPR_ASSIGNMENT:
+		ret = get_type(expr->left);
+		break;
+	case EXPR_CAST:
+	case EXPR_FORCE_CAST:
+	case EXPR_IMPLIED_CAST:
+		ret = get_real_base_type(expr->cast_type);
+		break;
+	case EXPR_COMPARE:
+	case EXPR_BINOP:
+		ret = get_binop_type(expr);
+		break;
+	case EXPR_CALL:
+		ret = get_return_type(expr);
+		break;
+	case EXPR_STATEMENT:
+		ret = get_expr_stmt_type(expr->statement);
+		break;
+	case EXPR_CONDITIONAL:
+	case EXPR_SELECT:
+		ret = get_select_type(expr);
+		break;
+	case EXPR_SIZEOF:
+		ret = &ulong_ctype;
+		break;
+	case EXPR_LOGICAL:
+		ret = &int_ctype;
+		break;
+	default:
+		return NULL;
+	}
+
+	if (ret && ret->type == SYM_TYPEOF)
+		ret = get_type(ret->initializer);
+
+	expr->ctype = ret;
+	return ret;
+}
+
+static struct symbol *get_final_type_helper(struct expression *expr)
+{
+	/*
+	 * I'm not totally positive I understand types...
+	 *
+	 * So, when you're doing pointer math, and you do a subtraction, then
+	 * the sval_binop() and whatever need to know the type of the pointer
+	 * so they can figure out the alignment.  But the result is going to be
+	 * and ssize_t.  So get_operation_type() gives you the pointer type
+	 * and get_type() gives you ssize_t.
+	 *
+	 * Most of the time the operation type and the final type are the same
+	 * but this just handles the few places where they are different.
+	 *
+	 */
+
+	expr = strip_parens(expr);
+	if (!expr)
+		return NULL;
+
+	switch (expr->type) {
+	case EXPR_COMPARE:
+		return &int_ctype;
+	case EXPR_BINOP: {
+		struct symbol *left, *right;
+
+		if (expr->op != '-')
+			return NULL;
+
+		left = get_type(expr->left);
+		right = get_type(expr->right);
+		if (type_is_ptr(left) || type_is_ptr(right))
+			return ssize_t_ctype;
+		}
+	}
+
+	return NULL;
+}
+
+struct symbol *get_type(struct expression *expr)
+{
+	return get_type_helper(expr);
+}
+
+struct symbol *get_final_type(struct expression *expr)
+{
+	struct symbol *ret;
+
+	ret = get_final_type_helper(expr);
+	if (ret)
+		return ret;
+	return get_type_helper(expr);
+}
+
+struct symbol *get_promoted_type(struct symbol *left, struct symbol *right)
+{
+	struct symbol *ret = &int_ctype;
+
+	if (type_positive_bits(left) > type_positive_bits(ret))
+		ret = left;
+	if (type_positive_bits(right) > type_positive_bits(ret))
+		ret = right;
+
+	if (type_is_ptr(left))
+		ret = left;
+	if (type_is_ptr(right))
+		ret = right;
+
+	return ret;
+}
+
+int type_signed(struct symbol *base_type)
+{
+	if (!base_type)
+		return 0;
+	if (base_type->ctype.modifiers & MOD_SIGNED)
+		return 1;
+	return 0;
+}
+
+int expr_unsigned(struct expression *expr)
+{
+	struct symbol *sym;
+
+	sym = get_type(expr);
+	if (!sym)
+		return 0;
+	if (type_unsigned(sym))
+		return 1;
+	return 0;
+}
+
+int expr_signed(struct expression *expr)
+{
+	struct symbol *sym;
+
+	sym = get_type(expr);
+	if (!sym)
+		return 0;
+	if (type_signed(sym))
+		return 1;
+	return 0;
+}
+
+int returns_unsigned(struct symbol *sym)
+{
+	if (!sym)
+		return 0;
+	sym = get_base_type(sym);
+	if (!sym || sym->type != SYM_FN)
+		return 0;
+	sym = get_base_type(sym);
+	return type_unsigned(sym);
+}
+
+int is_pointer(struct expression *expr)
+{
+	struct symbol *sym;
+
+	sym = get_type(expr);
+	if (!sym)
+		return 0;
+	if (sym == &string_ctype)
+		return 0;
+	if (sym->type == SYM_PTR)
+		return 1;
+	return 0;
+}
+
+int returns_pointer(struct symbol *sym)
+{
+	if (!sym)
+		return 0;
+	sym = get_base_type(sym);
+	if (!sym || sym->type != SYM_FN)
+		return 0;
+	sym = get_base_type(sym);
+	if (sym->type == SYM_PTR)
+		return 1;
+	return 0;
+}
+
+sval_t sval_type_max(struct symbol *base_type)
+{
+	sval_t ret;
+
+	if (!base_type || !type_bits(base_type))
+		base_type = &llong_ctype;
+	ret.type = base_type;
+
+	ret.value = (~0ULL) >> (64 - type_positive_bits(base_type));
+	return ret;
+}
+
+sval_t sval_type_min(struct symbol *base_type)
+{
+	sval_t ret;
+
+	if (!base_type || !type_bits(base_type))
+		base_type = &llong_ctype;
+	ret.type = base_type;
+
+	if (type_unsigned(base_type)) {
+		ret.value = 0;
+		return ret;
+	}
+
+	ret.value = (~0ULL) << type_positive_bits(base_type);
+
+	return ret;
+}
+
+int nr_bits(struct expression *expr)
+{
+	struct symbol *type;
+
+	type = get_type(expr);
+	if (!type)
+		return 0;
+	return type_bits(type);
+}
+
+int is_void_pointer(struct expression *expr)
+{
+	struct symbol *type;
+
+	type = get_type(expr);
+	if (!type || type->type != SYM_PTR)
+		return 0;
+	type = get_real_base_type(type);
+	if (type == &void_ctype)
+		return 1;
+	return 0;
+}
+
+int is_char_pointer(struct expression *expr)
+{
+	struct symbol *type;
+
+	type = get_type(expr);
+	if (!type || type->type != SYM_PTR)
+		return 0;
+	type = get_real_base_type(type);
+	if (type == &char_ctype)
+		return 1;
+	return 0;
+}
+
+int is_string(struct expression *expr)
+{
+	expr = strip_expr(expr);
+	if (!expr || expr->type != EXPR_STRING)
+		return 0;
+	if (expr->string)
+		return 1;
+	return 0;
+}
+
+int is_static(struct expression *expr)
+{
+	char *name;
+	struct symbol *sym;
+	int ret = 0;
+
+	name = expr_to_str_sym(expr, &sym);
+	if (!name || !sym)
+		goto free;
+
+	if (sym->ctype.modifiers & MOD_STATIC)
+		ret = 1;
+free:
+	free_string(name);
+	return ret;
+}
+
+int is_local_variable(struct expression *expr)
+{
+	struct symbol *sym;
+	char *name;
+
+	name = expr_to_var_sym(expr, &sym);
+	free_string(name);
+	if (!sym || !sym->scope || !sym->scope->token || !cur_func_sym)
+		return 0;
+	if (cmp_pos(sym->scope->token->pos, cur_func_sym->pos) < 0)
+		return 0;
+	if (is_static(expr))
+		return 0;
+	return 1;
+}
+
+int types_equiv(struct symbol *one, struct symbol *two)
+{
+	if (!one && !two)
+		return 1;
+	if (!one || !two)
+		return 0;
+	if (one->type != two->type)
+		return 0;
+	if (one->type == SYM_PTR)
+		return types_equiv(get_real_base_type(one), get_real_base_type(two));
+	if (type_positive_bits(one) != type_positive_bits(two))
+		return 0;
+	return 1;
+}
+
+int fn_static(void)
+{
+	return !!(cur_func_sym->ctype.modifiers & MOD_STATIC);
+}
+
+const char *global_static(void)
+{
+	if (cur_func_sym->ctype.modifiers & MOD_STATIC)
+		return "static";
+	else
+		return "global";
+}
+
+struct symbol *cur_func_return_type(void)
+{
+	struct symbol *sym;
+
+	sym = get_real_base_type(cur_func_sym);
+	if (!sym || sym->type != SYM_FN)
+		return NULL;
+	sym = get_real_base_type(sym);
+	return sym;
+}
+
+struct symbol *get_arg_type(struct expression *fn, int arg)
+{
+	struct symbol *fn_type;
+	struct symbol *tmp;
+	struct symbol *arg_type;
+	int i;
+
+	fn_type = get_type(fn);
+	if (!fn_type)
+		return NULL;
+	if (fn_type->type == SYM_PTR)
+		fn_type = get_real_base_type(fn_type);
+	if (fn_type->type != SYM_FN)
+		return NULL;
+
+	i = 0;
+	FOR_EACH_PTR(fn_type->arguments, tmp) {
+		arg_type = get_real_base_type(tmp);
+		if (i == arg) {
+			return arg_type;
+		}
+		i++;
+	} END_FOR_EACH_PTR(tmp);
+
+	return NULL;
+}
+
+static struct symbol *get_member_from_string(struct symbol_list *symbol_list, const char *name)
+{
+	struct symbol *tmp, *sub;
+	int chunk_len;
+
+	if (strncmp(name, ".", 1) == 0)
+		name += 1;
+	if (strncmp(name, "->", 2) == 0)
+		name += 2;
+
+	FOR_EACH_PTR(symbol_list, tmp) {
+		if (!tmp->ident) {
+			sub = get_real_base_type(tmp);
+			sub = get_member_from_string(sub->symbol_list, name);
+			if (sub)
+				return sub;
+			continue;
+		}
+
+		if (strcmp(tmp->ident->name, name) == 0)
+			return tmp;
+
+		chunk_len = strlen(tmp->ident->name);
+		if (strncmp(tmp->ident->name, name, chunk_len) == 0 &&
+		    (name[chunk_len] == '.' || name[chunk_len] == '-')) {
+			sub = get_real_base_type(tmp);
+			return get_member_from_string(sub->symbol_list, name + chunk_len);
+		}
+
+	} END_FOR_EACH_PTR(tmp);
+
+	return NULL;
+}
+
+struct symbol *get_member_type_from_key(struct expression *expr, const char *key)
+{
+	struct symbol *sym;
+
+	if (strcmp(key, "$") == 0)
+		return get_type(expr);
+
+	if (strcmp(key, "*$") == 0) {
+		sym = get_type(expr);
+		if (!sym || sym->type != SYM_PTR)
+			return NULL;
+		return get_real_base_type(sym);
+	}
+
+	sym = get_type(expr);
+	if (!sym)
+		return NULL;
+	if (sym->type == SYM_PTR)
+		sym = get_real_base_type(sym);
+
+	key = key + 1;
+	sym = get_member_from_string(sym->symbol_list, key);
+	if (!sym)
+		return NULL;
+	return get_real_base_type(sym);
+}
+
+struct symbol *get_arg_type_from_key(struct expression *fn, int param, struct expression *arg, const char *key)
+{
+	struct symbol *type;
+
+	if (!key)
+		return NULL;
+	if (strcmp(key, "$") == 0)
+		return get_arg_type(fn, param);
+	if (strcmp(key, "*$") == 0) {
+		type = get_arg_type(fn, param);
+		if (!type || type->type != SYM_PTR)
+			return NULL;
+		return get_real_base_type(type);
+	}
+	return get_member_type_from_key(arg, key);
+}
+
+int is_struct(struct expression *expr)
+{
+	struct symbol *type;
+
+	type = get_type(expr);
+	if (type && type->type == SYM_STRUCT)
+		return 1;
+	return 0;
+}
+
+static struct {
+	struct symbol *sym;
+	const char *name;
+} base_types[] = {
+	{&bool_ctype, "bool"},
+	{&void_ctype, "void"},
+	{&type_ctype, "type"},
+	{&char_ctype, "char"},
+	{&schar_ctype, "schar"},
+	{&uchar_ctype, "uchar"},
+	{&short_ctype, "short"},
+	{&sshort_ctype, "sshort"},
+	{&ushort_ctype, "ushort"},
+	{&int_ctype, "int"},
+	{&sint_ctype, "sint"},
+	{&uint_ctype, "uint"},
+	{&long_ctype, "long"},
+	{&slong_ctype, "slong"},
+	{&ulong_ctype, "ulong"},
+	{&llong_ctype, "llong"},
+	{&sllong_ctype, "sllong"},
+	{&ullong_ctype, "ullong"},
+	{&lllong_ctype, "lllong"},
+	{&slllong_ctype, "slllong"},
+	{&ulllong_ctype, "ulllong"},
+	{&float_ctype, "float"},
+	{&double_ctype, "double"},
+	{&ldouble_ctype, "ldouble"},
+	{&string_ctype, "string"},
+	{&ptr_ctype, "ptr"},
+	{&lazy_ptr_ctype, "lazy_ptr"},
+	{&incomplete_ctype, "incomplete"},
+	{&label_ctype, "label"},
+	{&bad_ctype, "bad"},
+	{&null_ctype, "null"},
+};
+
+static const char *base_type_str(struct symbol *sym)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(base_types); i++) {
+		if (sym == base_types[i].sym)
+			return base_types[i].name;
+	}
+	return "<unknown>";
+}
+
+static int type_str_helper(char *buf, int size, struct symbol *type)
+{
+	int n;
+
+	if (!type)
+		return snprintf(buf, size, "<unknown>");
+
+	if (type->type == SYM_BASETYPE) {
+		return snprintf(buf, size, base_type_str(type));
+	} else if (type->type == SYM_PTR) {
+		type = get_real_base_type(type);
+		n = type_str_helper(buf, size, type);
+		if (n > size)
+			return n;
+		return n + snprintf(buf + n, size - n, "*");
+	} else if (type->type == SYM_ARRAY) {
+		type = get_real_base_type(type);
+		n = type_str_helper(buf, size, type);
+		if (n > size)
+			return n;
+		return n + snprintf(buf + n, size - n, "[]");
+	} else if (type->type == SYM_STRUCT) {
+		return snprintf(buf, size, "struct %s", type->ident ? type->ident->name : "");
+	} else if (type->type == SYM_UNION) {
+		if (type->ident)
+			return snprintf(buf, size, "union %s", type->ident->name);
+		else
+			return snprintf(buf, size, "anonymous union");
+	} else if (type->type == SYM_FN) {
+		struct symbol *arg, *return_type, *arg_type;
+		int i;
+
+		return_type = get_real_base_type(type);
+		n = type_str_helper(buf, size, return_type);
+		if (n > size)
+			return n;
+		n += snprintf(buf + n, size - n, "(*)(");
+		if (n > size)
+			return n;
+
+		i = 0;
+		FOR_EACH_PTR(type->arguments, arg) {
+			if (i++)
+				n += snprintf(buf + n, size - n, ", ");
+			if (n > size)
+				return n;
+			arg_type = get_real_base_type(arg);
+			n += type_str_helper(buf + n, size - n, arg_type);
+			if (n > size)
+				return n;
+		} END_FOR_EACH_PTR(arg);
+
+		return n + snprintf(buf + n, size - n, ")");
+	} else if (type->type == SYM_NODE) {
+		n = snprintf(buf, size, "node {");
+		if (n > size)
+			return n;
+		type = get_real_base_type(type);
+		n += type_str_helper(buf + n, size - n, type);
+		if (n > size)
+			return n;
+		return n + snprintf(buf + n, size - n, "}");
+	} else {
+		return snprintf(buf, size, "<type %d>", type->type);
+	}
+}
+
+char *type_to_str(struct symbol *type)
+{
+	static char buf[256];
+
+	buf[0] = '\0';
+	type_str_helper(buf, sizeof(buf), type);
+	return buf;
+}
--- /dev/null	Fri Dec 21 15:00:37 2018
+++ new/usr/src/tools/smatch/src/smatch_type_links.c	Fri Dec 21 15:00:37 2018
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * The plan here is to save all the possible values store to a given struct
+ * member.
+ *
+ * We will load all the values in to the function_type_val table first then
+ * run a script on that and load all the resulting values into the type_val
+ * table.
+ *
+ * So in this file we want to take the union of everything assigned to the
+ * struct member and insert it into the function_type_val at the end.
+ *
+ * You would think that we could use smatch_modification_hooks.c or
+ * extra_modification_hook() here to get the information here but in the end we
+ * need to code everything again a third time.
+ *
+ */
+
+/*
+ * Remember links like:
+ *
+ * foo->void_ptr = some_struct.
+ *
+ * If we get a some_struct pointer from foo->void_ptr then assume it's the same
+ * stuff.
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+static void match_assign(struct expression *expr)
+{
+	struct symbol *type;
+
+	if (!is_void_pointer(expr->left))
+		return;
+
+	type = get_type(expr->right);
+	if (!type || type->type != SYM_PTR)
+		return;
+	type = get_real_base_type(type);
+	if (!type || type->type != SYM_STRUCT)
+		return;
+
+	sql_insert_data_info(expr->left, TYPE_LINK, type_to_str(type));
+}
+
+void register_type_links(int id)
+{
+	if (!option_info)
+		return;
+	my_id = id;
+
+	add_hook(&match_assign, ASSIGNMENT_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:37 2018
+++ new/usr/src/tools/smatch/src/smatch_type_val.c	Fri Dec 21 15:00:37 2018
@@ -0,0 +1,612 @@
+/*
+ * Copyright (C) 2013 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * The plan here is to save all the possible values store to a given struct
+ * member.
+ *
+ * We will load all the values in to the function_type_val table first then
+ * run a script on that and load all the resulting values into the type_val
+ * table.
+ *
+ * So in this file we want to take the union of everything assigned to the
+ * struct member and insert it into the function_type_val at the end.
+ *
+ * You would think that we could use smatch_modification_hooks.c or
+ * extra_modification_hook() here to get the information here but in the end we
+ * need to code everything again a third time.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+
+struct stree_stack *fn_type_val_stack;
+struct stree *fn_type_val;
+struct stree *global_type_val;
+
+static int get_vals(void *_db_vals, int argc, char **argv, char **azColName)
+{
+	char **db_vals = _db_vals;
+
+	*db_vals = alloc_string(argv[0]);
+	return 0;
+}
+
+static void match_inline_start(struct expression *expr)
+{
+	push_stree(&fn_type_val_stack, fn_type_val);
+	fn_type_val = NULL;
+}
+
+static void match_inline_end(struct expression *expr)
+{
+	free_stree(&fn_type_val);
+	fn_type_val = pop_stree(&fn_type_val_stack);
+}
+
+struct expr_rl {
+	struct expression *expr;
+	struct range_list *rl;
+};
+static struct expr_rl cached_results[10];
+static int res_idx;
+
+static int get_cached(struct expression *expr, struct range_list **rl, int *ret)
+{
+	int i;
+
+	*ret = 0;
+
+	for (i = 0; i < ARRAY_SIZE(cached_results); i++) {
+		if (expr == cached_results[i].expr) {
+			if (cached_results[i].rl) {
+				*rl = clone_rl(cached_results[i].rl);
+				*ret = 1;
+			}
+			return 1;
+		}
+	}
+
+	return 0;
+}
+
+int get_db_type_rl(struct expression *expr, struct range_list **rl)
+{
+	char *db_vals = NULL;
+	char *member;
+	struct range_list *tmp;
+	struct symbol *type;
+	int ret;
+
+	if (get_cached(expr, rl, &ret))
+		return ret;
+
+	member = get_member_name(expr);
+	if (!member)
+		return 0;
+
+	res_idx = (res_idx + 1) % ARRAY_SIZE(cached_results);
+	cached_results[res_idx].expr = expr;
+	cached_results[res_idx].rl = NULL;
+
+	run_sql(get_vals, &db_vals,
+		"select value from type_value where type = '%s';", member);
+	free_string(member);
+	if (!db_vals)
+		return 0;
+	type = get_type(expr);
+	str_to_rl(type, db_vals, &tmp);
+	free_string(db_vals);
+	if (is_whole_rl(tmp))
+		return 0;
+
+	*rl = tmp;
+	cached_results[res_idx].rl = clone_rl(tmp);
+
+	return 1;
+}
+
+static void add_type_val(char *member, struct range_list *rl)
+{
+	struct smatch_state *old, *add, *new;
+
+	member = alloc_string(member);
+	old = get_state_stree(fn_type_val, my_id, member, NULL);
+	add = alloc_estate_rl(rl);
+	if (old)
+		new = merge_estates(old, add);
+	else
+		new = add;
+	set_state_stree(&fn_type_val, my_id, member, NULL, new);
+}
+
+static void add_fake_type_val(char *member, struct range_list *rl, int ignore)
+{
+	struct smatch_state *old, *add, *new;
+
+	member = alloc_string(member);
+	old = get_state_stree(fn_type_val, my_id, member, NULL);
+	if (old && strcmp(old->name, "min-max") == 0)
+		return;
+	if (ignore && old && strcmp(old->name, "ignore") == 0)
+		return;
+	add = alloc_estate_rl(rl);
+	if (old) {
+		new = merge_estates(old, add);
+	} else {
+		new = add;
+		if (ignore)
+			new->name = alloc_string("ignore");
+		else
+			new->name = alloc_string("min-max");
+	}
+	set_state_stree(&fn_type_val, my_id, member, NULL, new);
+}
+
+static void add_global_type_val(char *member, struct range_list *rl)
+{
+	struct smatch_state *old, *add, *new;
+
+	member = alloc_string(member);
+	old = get_state_stree(global_type_val, my_id, member, NULL);
+	add = alloc_estate_rl(rl);
+	if (old)
+		new = merge_estates(old, add);
+	else
+		new = add;
+	new = clone_estate_perm(new);
+	set_state_stree_perm(&global_type_val, my_id, member, NULL, new);
+}
+
+static int has_link_cb(void *has_link, int argc, char **argv, char **azColName)
+{
+	*(int *)has_link = 1;
+	return 0;
+}
+
+static int is_ignored_fake_assignment(void)
+{
+	struct expression *expr;
+	struct symbol *type;
+	char *member_name;
+	int has_link = 0;
+
+	expr = get_faked_expression();
+	if (!expr || expr->type != EXPR_ASSIGNMENT)
+		return 0;
+	if (!is_void_pointer(expr->right))
+		return 0;
+	member_name = get_member_name(expr->right);
+	if (!member_name)
+		return 0;
+
+	type = get_type(expr->left);
+	if (!type || type->type != SYM_PTR)
+		return 0;
+	type = get_real_base_type(type);
+	if (!type || type->type != SYM_STRUCT)
+		return 0;
+
+	run_sql(has_link_cb, &has_link,
+		"select * from data_info where type = %d and data = '%s' and value = '%s';",
+		TYPE_LINK, member_name, type_to_str(type));
+	return has_link;
+}
+
+static int is_container_of(void)
+{
+	/* We already check the macro name in is_ignored_macro() */
+	struct expression *expr;
+	int offset;
+
+	expr = get_faked_expression();
+	if (!expr || expr->type != EXPR_ASSIGNMENT)
+		return 0;
+
+	offset = get_offset_from_container_of(expr->right);
+	if (offset < 0)
+		return 0;
+	return 1;
+}
+
+static int is_ignored_macro(void)
+{
+	struct expression *expr;
+	char *name;
+
+	expr = get_faked_expression();
+	if (!expr || expr->type != EXPR_ASSIGNMENT)
+		return 0;
+	name = get_macro_name(expr->right->pos);
+	if (!name)
+		return 0;
+	if (strcmp(name, "container_of") == 0)
+		return 1;
+	if (strcmp(name, "rb_entry") == 0)
+		return 1;
+	if (strcmp(name, "list_entry") == 0)
+		return 1;
+	if (strcmp(name, "list_first_entry") == 0)
+		return 1;
+	if (strcmp(name, "hlist_entry") == 0)
+		return 1;
+	if (strstr(name, "for_each"))
+		return 1;
+	return 0;
+}
+
+static int is_ignored_function(void)
+{
+	struct expression *expr;
+
+	expr = get_faked_expression();
+	if (!expr || expr->type != EXPR_ASSIGNMENT)
+		return 0;
+	expr = strip_expr(expr->right);
+	if (!expr || expr->type != EXPR_CALL || expr->fn->type != EXPR_SYMBOL)
+		return 0;
+
+	if (sym_name_is("kmalloc", expr->fn))
+		return 1;
+	if (sym_name_is("netdev_priv", expr->fn))
+		return 1;
+	if (sym_name_is("dev_get_drvdata", expr->fn))
+		return 1;
+
+	return 0;
+}
+
+static int is_uncasted_pointer_assign(void)
+{
+	struct expression *expr;
+	struct symbol *left_type, *right_type;
+
+	expr = get_faked_expression();
+	if (!expr)
+		return 0;
+	if (expr->type == EXPR_PREOP || expr->type == EXPR_POSTOP) {
+		if (expr->op == SPECIAL_INCREMENT || expr->op == SPECIAL_DECREMENT)
+			return 1;
+	}
+	if (expr->type != EXPR_ASSIGNMENT)
+		return 0;
+	left_type = get_type(expr->left);
+	right_type = get_type(expr->right);
+
+	if (!left_type || !right_type)
+		return 0;
+
+	if (left_type->type != SYM_PTR &&
+	    left_type->type != SYM_ARRAY)
+		return 0;
+	if (right_type->type != SYM_PTR &&
+	    right_type->type != SYM_ARRAY)
+		return 0;
+	left_type = get_real_base_type(left_type);
+	right_type = get_real_base_type(right_type);
+
+	if (left_type == right_type)
+		return 1;
+	return 0;
+}
+
+static int set_param_type(void *_type_str, int argc, char **argv, char **azColName)
+{
+	char **type_str = _type_str;
+	static char type_buf[128];
+
+	if (*type_str) {
+		if (strcmp(*type_str, argv[0]) == 0)
+			return 0;
+		strncpy(type_buf, "unknown", sizeof(type_buf));
+		return 0;
+	}
+	strncpy(type_buf, argv[0], sizeof(type_buf));
+	*type_str = type_buf;
+
+	return 0;
+}
+
+static char *db_get_parameter_type(int param)
+{
+	char *ret = NULL;
+
+	if (!cur_func_sym)
+		return NULL;
+
+	run_sql(set_param_type, &ret,
+		"select value from fn_data_link where "
+		"file = '%s' and function = '%s' and static = %d and type = %d and parameter = %d and key = '$';",
+		(cur_func_sym->ctype.modifiers & MOD_STATIC) ? get_base_file() : "extern",
+		cur_func_sym->ident->name,
+		!!(cur_func_sym->ctype.modifiers & MOD_STATIC),
+		PASSES_TYPE, param);
+
+	return ret;
+}
+
+static int is_uncasted_fn_param_from_db(void)
+{
+	struct expression *expr, *right;
+	struct symbol *left_type;
+	char left_type_name[128];
+	int param;
+	char *right_type_name;
+	static struct expression *prev_expr;
+	static int prev_ans;
+
+	expr = get_faked_expression();
+
+	if (expr == prev_expr)
+		return prev_ans;
+	prev_expr = expr;
+	prev_ans = 0;
+
+	if (!expr || expr->type != EXPR_ASSIGNMENT)
+		return 0;
+	left_type = get_type(expr->left);
+	if (!left_type || left_type->type != SYM_PTR)
+		return 0;
+	left_type = get_real_base_type(left_type);
+	if (!left_type || left_type->type != SYM_STRUCT)
+		return 0;
+	snprintf(left_type_name, sizeof(left_type_name), "%s", type_to_str(left_type));
+
+	right = strip_expr(expr->right);
+	param = get_param_num(right);
+	if (param < 0)
+		return 0;
+	right_type_name = db_get_parameter_type(param);
+	if (!right_type_name)
+		return 0;
+
+	if (strcmp(right_type_name, left_type_name) == 0) {
+		prev_ans = 1;
+		return 1;
+	}
+
+	return 0;
+}
+
+static void match_assign_value(struct expression *expr)
+{
+	char *member, *right_member;
+	struct range_list *rl;
+	struct symbol *type;
+
+	if (!cur_func_sym)
+		return;
+
+	type = get_type(expr->left);
+	if (type && type->type == SYM_STRUCT)
+		return;
+
+	member = get_member_name(expr->left);
+	if (!member)
+		return;
+
+	/* if we're saying foo->mtu = bar->mtu then that doesn't add information */
+	right_member = get_member_name(expr->right);
+	if (right_member && strcmp(right_member, member) == 0)
+		goto free;
+
+	if (is_fake_call(expr->right)) {
+		if (is_ignored_macro())
+			goto free;
+		if (is_ignored_function())
+			goto free;
+		if (is_uncasted_pointer_assign())
+			goto free;
+		if (is_uncasted_fn_param_from_db())
+			goto free;
+		if (is_container_of())
+			goto free;
+		add_fake_type_val(member, alloc_whole_rl(get_type(expr->left)), is_ignored_fake_assignment());
+		goto free;
+	}
+
+	if (expr->op == '=') {
+		get_absolute_rl(expr->right, &rl);
+		rl = cast_rl(type, rl);
+	} else {
+		/*
+		 * This is a bit cheating.  We order it so this will already be set
+		 * by smatch_extra.c and we just look up the value.
+		 */
+		get_absolute_rl(expr->left, &rl);
+	}
+	add_type_val(member, rl);
+free:
+	free_string(right_member);
+	free_string(member);
+}
+
+/*
+ * If we too:  int *p = &my_struct->member then abandon all hope of tracking
+ * my_struct->member.
+ */
+static void match_assign_pointer(struct expression *expr)
+{
+	struct expression *right;
+	char *member;
+	struct range_list *rl;
+	struct symbol *type;
+
+	right = strip_expr(expr->right);
+	if (right->type != EXPR_PREOP || right->op != '&')
+		return;
+	right = strip_expr(right->unop);
+
+	member = get_member_name(right);
+	if (!member)
+		return;
+	type = get_type(right);
+	rl = alloc_whole_rl(type);
+	add_type_val(member, rl);
+	free_string(member);
+}
+
+static void match_global_assign(struct expression *expr)
+{
+	char *member;
+	struct range_list *rl;
+	struct symbol *type;
+
+	type = get_type(expr->left);
+	if (type && (type->type == SYM_ARRAY || type->type == SYM_STRUCT))
+		return;
+	member = get_member_name(expr->left);
+	if (!member)
+		return;
+	get_absolute_rl(expr->right, &rl);
+	rl = cast_rl(type, rl);
+	add_global_type_val(member, rl);
+	free_string(member);
+}
+
+static void unop_expr(struct expression *expr)
+{
+	struct range_list *rl;
+	char *member;
+
+	if (expr->op != SPECIAL_DECREMENT && expr->op != SPECIAL_INCREMENT)
+		return;
+
+	expr = strip_expr(expr->unop);
+	member = get_member_name(expr);
+	if (!member)
+		return;
+	rl = alloc_whole_rl(get_type(expr));
+	add_type_val(member, rl);
+	free_string(member);
+}
+
+static void asm_expr(struct statement *stmt)
+{
+	struct expression *expr;
+	struct range_list *rl;
+	char *member;
+	int state = 0;
+
+	FOR_EACH_PTR(stmt->asm_outputs, expr) {
+		switch (state) {
+		case 0: /* identifier */
+		case 1: /* constraint */
+			state++;
+			continue;
+		case 2: /* expression */
+			state = 0;
+			member = get_member_name(expr);
+			if (!member)
+				continue;
+			rl = alloc_whole_rl(get_type(expr));
+			add_type_val(member, rl);
+			free_string(member);
+			continue;
+		}
+	} END_FOR_EACH_PTR(expr);
+}
+
+static void db_param_add(struct expression *expr, int param, char *key, char *value)
+{
+	struct expression *arg;
+	struct symbol *type;
+	struct range_list *rl;
+	char *member;
+
+	if (strcmp(key, "*$") != 0)
+		return;
+
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+	if (expr->type != EXPR_CALL)
+		return;
+
+	arg = get_argument_from_call_expr(expr->args, param);
+	arg = strip_expr(arg);
+	if (!arg)
+		return;
+	type = get_member_type_from_key(arg, key);
+	if (arg->type != EXPR_PREOP || arg->op != '&')
+		return;
+	arg = strip_expr(arg->unop);
+
+	member = get_member_name(arg);
+	if (!member)
+		return;
+	call_results_to_rl(expr, type, value, &rl);
+	add_type_val(member, rl);
+	free_string(member);
+}
+
+static void match_end_func_info(struct symbol *sym)
+{
+	struct sm_state *sm;
+
+	FOR_EACH_SM(fn_type_val, sm) {
+		sql_insert_function_type_value(sm->name, sm->state->name);
+	} END_FOR_EACH_SM(sm);
+}
+
+static void clear_cache(struct symbol *sym)
+{
+	memset(cached_results, 0, sizeof(cached_results));
+}
+
+static void match_after_func(struct symbol *sym)
+{
+	free_stree(&fn_type_val);
+}
+
+static void match_end_file(struct symbol_list *sym_list)
+{
+	struct sm_state *sm;
+
+	FOR_EACH_SM(global_type_val, sm) {
+		sql_insert_function_type_value(sm->name, sm->state->name);
+	} END_FOR_EACH_SM(sm);
+}
+
+void register_type_val(int id)
+{
+	my_id = id;
+	add_hook(&clear_cache, AFTER_FUNC_HOOK);
+
+	if (!option_info)
+		return;
+
+	add_hook(&match_assign_value, ASSIGNMENT_HOOK_AFTER);
+	add_hook(&match_assign_pointer, ASSIGNMENT_HOOK);
+	add_hook(&unop_expr, OP_HOOK);
+	add_hook(&asm_expr, ASM_HOOK);
+	select_return_states_hook(PARAM_ADD, &db_param_add);
+	select_return_states_hook(PARAM_SET, &db_param_add);
+
+
+	add_hook(&match_inline_start, INLINE_FN_START);
+	add_hook(&match_inline_end, INLINE_FN_END);
+
+	add_hook(&match_end_func_info, END_FUNC_HOOK);
+	add_hook(&match_after_func, AFTER_FUNC_HOOK);
+
+	add_hook(&match_global_assign, GLOBAL_ASSIGNMENT_HOOK);
+	add_hook(&match_end_file, END_FILE_HOOK);
+}
--- /dev/null	Fri Dec 21 15:00:37 2018
+++ new/usr/src/tools/smatch/src/smatch_unknown_value.c	Fri Dec 21 15:00:37 2018
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * The situation here is that we often need to fake an assignment but we don't
+ * know anything about the right hand side of the assignment.  We use a fake
+ * function call of &llong_ctype.  The reason for using a function call instead
+ * of a value is so we don't start storing the equivalence.
+ *
+ */
+
+#include "smatch.h"
+
+struct ident fake_assign = {
+	.len = sizeof("fake assign"),
+	.name = "fake assign",
+};
+
+static struct symbol fake_fn_symbol = {
+	.type = SYM_FN,
+	.ident = &fake_assign,
+};
+
+static struct symbol fake_node_symbol = {
+	.type = SYM_NODE,
+	.ident = &fake_assign,
+};
+
+static struct expression fake_fn_expr = {
+	.type = EXPR_SYMBOL,
+	.ctype = &llong_ctype,
+};
+
+static struct expression fake_call = {
+	.type = EXPR_CALL,
+	.ctype = &llong_ctype,
+};
+
+static void __attribute__((constructor)) initialize_local_variables(void)
+{
+	fake_fn_symbol.ctype.base_type = &llong_ctype;
+	fake_node_symbol.ctype.base_type = &fake_fn_symbol;
+	fake_fn_expr.symbol = &fake_node_symbol;
+	fake_fn_expr.symbol_name = &fake_assign;
+	fake_call.fn = &fake_fn_expr;
+}
+
+struct expression *unknown_value_expression(struct expression *expr)
+{
+	fake_fn_expr.parent = 0;
+	fake_call.parent = 0;
+	return &fake_call;
+}
+
+int is_fake_call(struct expression *expr)
+{
+	return expr == &fake_call;
+}
--- /dev/null	Fri Dec 21 15:00:37 2018
+++ new/usr/src/tools/smatch/src/smatch_untracked_param.c	Fri Dec 21 15:00:37 2018
@@ -0,0 +1,249 @@
+/*
+ * Copyright (C) 2014 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+/*
+ * Sometimes we aren't able to track a variable through a function call.  This
+ * usually happens because a function changes too many variables so we give up.
+ * Another reason this happens is because we call a function pointer and there
+ * are too many functions which implement that function pointer so we give up.
+ * Also maybe we don't have the database enabled.
+ *
+ * The goal here is to make a call back so what if we call:
+ *
+ * 	frob(&foo);
+ *
+ * but we're not able to say what happens to "foo", then let's assume that we
+ * don't know anything about "foo" if it's an untracked call.
+ *
+ */
+
+#include "smatch.h"
+#include "smatch_slist.h"
+#include "smatch_extra.h"
+
+static int my_id;
+static int tracked;
+
+STATE(untracked);
+
+typedef void (untracked_hook)(struct expression *call, int param);
+DECLARE_PTR_LIST(untracked_hook_list, untracked_hook *);
+static struct untracked_hook_list *untracked_hooks;
+
+struct int_stack *tracked_stack;
+
+void add_untracked_param_hook(void (func)(struct expression *call, int param))
+{
+	untracked_hook **p = malloc(sizeof(untracked_hook *));
+	*p = func;
+	add_ptr_list(&untracked_hooks, p);
+}
+
+static void call_untracked_callbacks(struct expression *expr, int param)
+{
+	untracked_hook **fn;
+
+	FOR_EACH_PTR(untracked_hooks, fn) {
+		(*fn)(expr, param);
+	} END_FOR_EACH_PTR(fn);
+}
+
+static void assume_tracked(struct expression *call_expr, int param, char *key, char *value)
+{
+	tracked = 1;
+}
+
+void mark_untracked(struct expression *expr, int param, const char *key, const char *value)
+{
+	char *name;
+	struct symbol *sym;
+
+	while (expr->type == EXPR_ASSIGNMENT)
+		expr = strip_expr(expr->right);
+	if (expr->type != EXPR_CALL)
+		return;
+
+	name = return_state_to_var_sym(expr, param, key, &sym);
+	if (!name || !sym)
+		goto free;
+
+	call_untracked_callbacks(expr, param);
+	set_state(my_id, name, sym, &untracked);
+free:
+	free_string(name);
+}
+
+static int lost_in_va_args(struct expression *expr)
+{
+	struct symbol *fn;
+	char *name;
+	int is_lost;
+
+	fn = get_type(expr->fn);
+	if (!fn || !fn->variadic)
+		return 0;
+
+	is_lost = 1;
+	name = expr_to_var(expr->fn);
+	if (name && strstr(name, "print"))
+		is_lost = 0;
+	free_string(name);
+
+	return is_lost;
+}
+
+static void match_after_call(struct expression *expr)
+{
+	struct expression *arg;
+	struct symbol *type;
+	int i;
+
+	if (lost_in_va_args(expr))
+		tracked = 0;
+
+	if (tracked) {
+		tracked = 0;
+		return;
+	}
+
+	i = -1;
+	FOR_EACH_PTR(expr->args, arg) {
+		i++;
+
+		type = get_type(arg);
+		if (!type || type->type != SYM_PTR)
+			continue;
+
+		call_untracked_callbacks(expr, i);
+		set_state_expr(my_id, arg, &untracked);
+	} END_FOR_EACH_PTR(arg);
+}
+
+void mark_all_params_untracked(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct symbol *arg;
+	int param;
+
+	param = -1;
+	FOR_EACH_PTR(cur_func_sym->ctype.base_type->arguments, arg) {
+		param++;
+
+		if (!arg->ident)
+			continue;
+		sql_insert_return_states(return_id, return_ranges,
+					 UNTRACKED_PARAM, param, "$", "");
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void print_untracked_params(int return_id, char *return_ranges, struct expression *expr)
+{
+	struct symbol *arg;
+	int param;
+
+	param = -1;
+	FOR_EACH_PTR(cur_func_sym->ctype.base_type->arguments, arg) {
+		param++;
+
+		if (!arg->ident)
+			continue;
+		if (!get_state(my_id, arg->ident->name, arg) &&
+		    !__bail_on_rest_of_function)  /* hairy functions are untrackable */
+			continue;
+
+		sql_insert_return_states(return_id, return_ranges,
+					 UNTRACKED_PARAM, param, "$", "");
+	} END_FOR_EACH_PTR(arg);
+}
+
+static void match_param_assign(struct expression *expr)
+{
+	struct expression *right;
+	struct symbol *type;
+	int param;
+
+	if (__in_fake_assign)
+		return;
+
+	right = strip_expr(expr->right);
+	type = get_type(right);
+	if (!type || type->type != SYM_PTR)
+		return;
+
+	param = get_param_num(right);
+	if (param < 0)
+		return;
+
+	set_state_expr(my_id, right, &untracked);
+}
+
+
+static void match_param_assign_in_asm(struct statement *stmt)
+{
+
+	struct expression *expr;
+	struct symbol *type;
+	int state = 0;
+	int param;
+
+	FOR_EACH_PTR(stmt->asm_inputs, expr) {
+		switch (state) {
+		case 0: /* identifier */
+		case 1: /* constraint */
+			state++;
+			continue;
+		case 2: /* expression */
+			state = 0;
+
+			expr = strip_expr(expr);
+			type = get_type(expr);
+			if (!type || type->type != SYM_PTR)
+				continue;
+			param = get_param_num(expr);
+			if (param < 0)
+				continue;
+			set_state_expr(my_id, expr, &untracked);
+			continue;
+		}
+	} END_FOR_EACH_PTR(expr);
+}
+
+static void match_inline_start(struct expression *expr)
+{
+	push_int(&tracked_stack, tracked);
+}
+
+static void match_inline_end(struct expression *expr)
+{
+	tracked = pop_int(&tracked_stack);
+}
+
+void register_untracked_param(int id)
+{
+	my_id = id;
+
+	select_return_states_hook(INTERNAL, &assume_tracked);
+	select_return_states_hook(UNTRACKED_PARAM, &mark_untracked);
+	add_hook(&match_after_call, FUNCTION_CALL_HOOK_AFTER_DB);
+
+	add_split_return_callback(&print_untracked_params);
+
+	add_hook(&match_param_assign, ASSIGNMENT_HOOK);
+	add_hook(&match_param_assign_in_asm, ASM_HOOK);
+
+	add_hook(&match_inline_start, INLINE_FN_START);
+	add_hook(&match_inline_end, INLINE_FN_END);
+}
--- /dev/null	Fri Dec 21 15:00:37 2018
+++ new/usr/src/tools/smatch/src/smatch_var_sym.c	Fri Dec 21 15:00:37 2018
@@ -0,0 +1,242 @@
+/*
+ * Copyright (C) 2013 Oracle.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, see http://www.gnu.org/copyleft/gpl.txt
+ */
+
+#include "smatch.h"
+
+ALLOCATOR(var_sym, "var_sym structs");
+
+struct var_sym *alloc_var_sym(const char *var, struct symbol *sym)
+{
+	struct var_sym *tmp;
+
+	tmp = __alloc_var_sym(0);
+	tmp->var = alloc_string(var);
+	tmp->sym = sym;
+	return tmp;
+}
+
+struct var_sym_list *expr_to_vsl(struct expression *expr)
+{
+	struct expression *unop;
+	struct var_sym_list *ret = NULL;
+	char *var;
+	struct symbol *sym;
+
+	expr = strip_expr(expr);
+	if (!expr)
+		return NULL;
+
+	if ((expr->type == EXPR_PREOP && expr->op == '*')) {
+		unop = strip_expr(expr->unop);
+
+		if (unop->type == EXPR_SYMBOL)
+			goto one_var;
+		return expr_to_vsl(unop);
+	}
+
+	if (expr->type == EXPR_BINOP ||
+	    expr->type == EXPR_LOGICAL ||
+	    expr->type == EXPR_COMPARE) {
+		struct var_sym_list *left, *right;
+
+		left = expr_to_vsl(expr->left);
+		right = expr_to_vsl(expr->right);
+		ret = combine_var_sym_lists(left, right);
+		free_var_syms_and_list(&left);
+		free_var_syms_and_list(&right);
+		return ret;
+	}
+
+	if (expr->type == EXPR_DEREF)
+		return expr_to_vsl(expr->deref);
+
+one_var:
+	var = expr_to_var_sym(expr, &sym);
+	if (!var || !sym) {
+		free_string(var);
+		return NULL;
+	}
+	add_var_sym(&ret, var, sym);
+	return ret;
+}
+
+int cmp_var_sym(const struct var_sym *a, const struct var_sym *b)
+{
+	int ret;
+
+	if (a == b)
+		return 0;
+	if (!b)
+		return -1;
+	if (!a)
+		return 1;
+
+	ret = strcmp(a->var, b->var);
+	if (ret < 0)
+		return -1;
+	if (ret > 0)
+		return 1;
+
+	if (!b->sym && a->sym)
+		return -1;
+	if (!a->sym && b->sym)
+		return 1;
+	if (a->sym < b->sym)
+		return -1;
+	if (a->sym > b->sym)
+		return 1;
+
+	return 0;
+}
+
+void add_var_sym(struct var_sym_list **list, const char *var, struct symbol *sym)
+{
+	struct var_sym *tmp, *new;
+
+	if (in_var_sym_list(*list, var, sym))
+		return;
+	new = alloc_var_sym(var, sym);
+
+	FOR_EACH_PTR(*list, tmp) {
+		if (cmp_var_sym(tmp, new) < 0)
+			continue;
+		else if (cmp_var_sym(tmp, new) == 0) {
+			return;
+		} else {
+			INSERT_CURRENT(new, tmp);
+			return;
+		}
+	} END_FOR_EACH_PTR(tmp);
+	add_ptr_list(list, new);
+}
+
+void add_var_sym_expr(struct var_sym_list **list, struct expression *expr)
+{
+	char *var;
+	struct symbol *sym;
+
+	var = expr_to_var_sym(expr, &sym);
+	if (!var || !sym)
+		goto free;
+	add_var_sym(list, var, sym);
+free:
+	free_string(var);
+}
+
+static void free_var_sym(struct var_sym *vs)
+{
+	free_string(vs->var);
+	__free_var_sym(vs);
+}
+
+void del_var_sym(struct var_sym_list **list, const char *var, struct symbol *sym)
+{
+	struct var_sym *tmp;
+
+	FOR_EACH_PTR(*list, tmp) {
+		if (tmp->sym == sym && strcmp(tmp->var, var) == 0) {
+			DELETE_CURRENT_PTR(tmp);
+			free_var_sym(tmp);
+			return;
+		}
+	} END_FOR_EACH_PTR(tmp);
+}
+
+int in_var_sym_list(struct var_sym_list *list, const char *var, struct symbol *sym)
+{
+	struct var_sym *tmp;
+
+	FOR_EACH_PTR(list, tmp) {
+		if (tmp->sym == sym && strcmp(tmp->var, var) == 0)
+			return 1;
+	} END_FOR_EACH_PTR(tmp);
+	return 0;
+}
+
+struct var_sym_list *clone_var_sym_list(struct var_sym_list *from_vsl)
+{
+	struct var_sym *tmp, *clone_vs;
+	struct var_sym_list *to_vsl = NULL;
+
+	FOR_EACH_PTR(from_vsl, tmp) {
+		clone_vs = alloc_var_sym(tmp->var, tmp->sym);
+		add_ptr_list(&to_vsl, clone_vs);
+	} END_FOR_EACH_PTR(tmp);
+	return to_vsl;
+}
+
+void merge_var_sym_list(struct var_sym_list **dest, struct var_sym_list *src)
+{
+	struct var_sym *tmp;
+
+	FOR_EACH_PTR(src, tmp) {
+		add_var_sym(dest, tmp->var, tmp->sym);
+	} END_FOR_EACH_PTR(tmp);
+}
+
+struct var_sym_list *combine_var_sym_lists(struct var_sym_list *one, struct var_sym_list *two)
+{
+	struct var_sym_list *to_vsl;
+
+	to_vsl = clone_var_sym_list(one);
+	merge_var_sym_list(&to_vsl, two);
+	return to_vsl;
+}
+
+int var_sym_lists_equiv(struct var_sym_list *one, struct var_sym_list *two)
+{
+	struct var_sym *one_tmp, *two_tmp;
+
+	if (one == two)
+		return 1;
+
+	if (ptr_list_size((struct ptr_list *)one) != ptr_list_size((struct ptr_list *)two))
+		return 0;
+
+	PREPARE_PTR_LIST(one, one_tmp);
+	PREPARE_PTR_LIST(two, two_tmp);
+	for (;;) {
+		if (!one_tmp && !two_tmp)
+			return 1;
+		if (one_tmp->sym != two_tmp->sym)
+			return 0;
+		if (strcmp(one_tmp->var, two_tmp->var) != 0)
+			return 0;
+		NEXT_PTR_LIST(one_tmp);
+		NEXT_PTR_LIST(two_tmp);
+	}
+	FINISH_PTR_LIST(two_tmp);
+	FINISH_PTR_LIST(one_tmp);
+
+	return 1;
+}
+
+void free_var_sym_list(struct var_sym_list **list)
+{
+	__free_ptr_list((struct ptr_list **)list);
+}
+
+void free_var_syms_and_list(struct var_sym_list **list)
+{
+	struct var_sym *tmp;
+
+	FOR_EACH_PTR(*list, tmp) {
+		free_var_sym(tmp);
+	} END_FOR_EACH_PTR(tmp);
+	free_var_sym_list(list);
+}
+
--- /dev/null	Fri Dec 21 15:00:37 2018
+++ new/usr/src/tools/smatch/src/sort.c	Fri Dec 21 15:00:37 2018
@@ -0,0 +1,290 @@
+/*
+ * sort_list: a stable sort for lists.
+ *
+ * Time complexity: O(n*log n)
+ *   [assuming limited zero-element fragments]
+ *
+ * Space complexity: O(1).
+ *
+ * Stable: yes.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "lib.h"
+#include "allocate.h"
+
+#undef PARANOIA
+#undef COVERAGE
+
+#ifdef PARANOIA
+#include <assert.h>
+#else
+#define assert(x)
+#endif
+
+#ifdef COVERAGE
+static unsigned char been_there[256];
+#define BEEN_THERE(_c)					\
+  do {							\
+	if (!been_there[_c]) {				\
+		been_there[_c] = 1;			\
+		printf ("Been there: %c\n", _c);	\
+	}						\
+  } while (0)
+#else
+#define BEEN_THERE(_c) do { } while (0)
+#endif
+
+// Sort one fragment.  LIST_NODE_NR (==29) is a bit too high for my
+// taste for something this simple.  But, hey, it's O(1).
+//
+// I would use libc qsort for this, but its comparison function
+// gets a pointer indirection extra.
+static void array_sort(void **ptr, int nr, int (*cmp)(const void *, const void *))
+{
+	int i;
+	for (i = 1; i < nr; i++) {
+		void *p = ptr[i];
+		if (cmp(ptr[i-1],p) > 0) {
+			int j = i;
+			do {
+				ptr[j] = ptr[j-1];
+				if (!--j)
+					break;
+			} while (cmp(ptr[j-1], p) > 0);
+			ptr[j] = p;
+		}
+	}
+}
+
+#ifdef PARANOIA
+static void verify_seq_sorted (struct ptr_list *l, int n,
+			       int (*cmp)(const void *, const void *))
+{
+	int i = 0;
+	const void *a;
+	struct ptr_list *head = l;
+
+	while (l->nr == 0) {
+		l = l->next;
+		if (--n == 0)
+			return;
+		assert (l != head);
+	}
+
+	a = l->list[0];
+	while (n > 0) {
+		const void *b;
+		if (++i >= l->nr) {
+			i = 0;
+			l = l->next;
+			n--;
+			assert (l != head || n == 0);
+			continue;
+		}
+		b = l->list[i];
+		assert (cmp (a, b) <= 0);
+		a = b;
+	}
+}
+#endif
+
+
+#define FLUSH_TO(b)						\
+  do {								\
+	int nr = (b)->nr;					\
+	assert (nbuf >= nr);					\
+	memcpy ((b)->list, buffer, nr * sizeof (void *));	\
+	nbuf -= nr;						\
+	memmove (buffer, buffer + nr, nbuf * sizeof (void *));	\
+  } while (0)
+
+#define DUMP_TO(b)						\
+  do {								\
+        assert (nbuf <= (b)->nr);				\
+	memcpy ((b)->list, buffer, nbuf * sizeof (void *));	\
+  } while (0)
+
+
+// Merge two already-sorted sequences of blocks:
+//   (b1_1, ..., b1_n)  and  (b2_1, ..., b2_m)
+// Since we may be moving blocks around, we return the new head
+// of the merged list.
+static struct ptr_list *
+merge_block_seqs (struct ptr_list *b1, int n,
+		  struct ptr_list *b2, int m,
+		  int (*cmp)(const void *, const void *))
+{
+	int i1 = 0, i2 = 0;
+	const void *buffer[2 * LIST_NODE_NR];
+	int nbuf = 0;
+	struct ptr_list *newhead = b1;
+
+	// printf ("Merging %d blocks at %p with %d blocks at %p\n", n, b1, m, b2);
+
+	// Skip empty blocks in b2.
+	while (b2->nr == 0) {
+		BEEN_THERE('F');
+		b2 = b2->next;
+		if (--m == 0) {
+			BEEN_THERE('G');
+			return newhead;
+		}
+	}
+
+	// Do a quick skip in case entire blocks from b1 are
+	// already less than smallest element in b2.
+	while (b1->nr == 0 ||
+	       cmp (PTR_ENTRY(b1, b1->nr - 1), PTR_ENTRY(b2,0)) < 0) {
+		// printf ("Skipping whole block.\n");
+		BEEN_THERE('H');
+		b1 = b1->next;
+		if (--n == 0) {
+			BEEN_THERE('I');
+			return newhead;	
+		}
+	}
+
+	while (1) {
+		const void *d1 = PTR_ENTRY(b1,i1);
+		const void *d2 = PTR_ENTRY(b2,i2);
+
+		assert (i1 >= 0 && i1 < b1->nr);
+		assert (i2 >= 0 && i2 < b2->nr);
+		assert (b1 != b2);
+		assert (n > 0);
+		assert (m > 0);
+
+		if (cmp (d1, d2) <= 0) {
+			BEEN_THERE('J');
+			buffer[nbuf++] = d1;
+			// Element from b1 is smaller
+			if (++i1 >= b1->nr) {
+				BEEN_THERE('L');
+				FLUSH_TO(b1);
+				do {
+					b1 = b1->next;
+					if (--n == 0) {
+						BEEN_THERE('O');
+						while (b1 != b2) {
+							BEEN_THERE('P');
+							FLUSH_TO(b1);
+							b1 = b1->next;
+						}
+						assert (nbuf == i2);
+						DUMP_TO(b2);
+						return newhead;
+					}
+				} while (b1->nr == 0);
+				i1 = 0;
+			}
+		} else {
+			BEEN_THERE('K');
+			// Element from b2 is smaller
+			buffer[nbuf++] = d2;
+			if (++i2 >= b2->nr) {
+				struct ptr_list *l = b2;
+				BEEN_THERE('M');
+				// OK, we finished with b2.  Pull it out
+				// and plug it in before b1.
+
+				b2 = b2->next;
+				b2->prev = l->prev;
+				b2->prev->next = b2;
+				l->next = b1;
+				l->prev = b1->prev;
+				l->next->prev = l;
+				l->prev->next = l;
+
+				if (b1 == newhead) {
+					BEEN_THERE('N');
+					newhead = l;
+				}
+
+				FLUSH_TO(l);
+				b2 = b2->prev;
+				do {
+					b2 = b2->next;
+					if (--m == 0) {
+						BEEN_THERE('Q');
+						assert (nbuf == i1);
+						DUMP_TO(b1);
+						return newhead;
+					}
+				} while (b2->nr == 0);
+				i2 = 0;
+			}
+		}
+	}
+}
+
+
+void sort_list(struct ptr_list **plist, int (*cmp)(const void *, const void *))
+{
+	struct ptr_list *head = *plist, *list = head;
+	int blocks = 1;
+
+	if (!head)
+		return;
+
+	// Sort all the sub-lists
+	do {
+		array_sort(list->list, list->nr, cmp);
+#ifdef PARANOIA
+		verify_seq_sorted (list, 1, cmp);
+#endif
+		list = list->next;
+	} while (list != head);
+
+	// Merge the damn things together
+	while (1) {
+		struct ptr_list *block1 = head;
+
+		do {
+			struct ptr_list *block2 = block1;
+			struct ptr_list *next, *newhead;
+			int i;
+
+			for (i = 0; i < blocks; i++) {
+				block2 = block2->next;
+				if (block2 == head) {
+					if (block1 == head) {
+						BEEN_THERE('A');
+						*plist = head;
+						return;
+					}
+					BEEN_THERE('B');
+					goto next_pass;
+				}						
+			}
+
+			next = block2;
+			for (i = 0; i < blocks; ) {
+				next = next->next;
+				i++;
+				if (next == head) {
+					BEEN_THERE('C');
+					break;
+				}
+				BEEN_THERE('D');
+			}
+
+			newhead = merge_block_seqs (block1, blocks,
+						    block2, i,
+						    cmp);
+#ifdef PARANOIA
+			verify_seq_sorted (newhead, blocks + i, cmp);
+#endif
+			if (block1 == head) {
+				BEEN_THERE('E');
+				head = newhead;
+			}
+			block1 = next;
+		} while (block1 != head);
+	next_pass:
+		blocks <<= 1;
+	}
+}
--- /dev/null	Fri Dec 21 15:00:37 2018
+++ new/usr/src/tools/smatch/src/sparse-llvm.c	Fri Dec 21 15:00:37 2018
@@ -0,0 +1,1176 @@
+/*
+ * Example usage:
+ *	./sparse-llvm hello.c | llc | as -o hello.o
+ */
+
+#include <llvm-c/Core.h>
+#include <llvm-c/BitWriter.h>
+#include <llvm-c/Analysis.h>
+#include <llvm-c/Target.h>
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <string.h>
+#include <assert.h>
+
+#include "symbol.h"
+#include "expression.h"
+#include "linearize.h"
+#include "flow.h"
+
+struct function {
+	LLVMBuilderRef			builder;
+	LLVMTypeRef			type;
+	LLVMValueRef			fn;
+	LLVMModuleRef			module;
+};
+
+static inline bool symbol_is_fp_type(struct symbol *sym)
+{
+	if (!sym)
+		return false;
+
+	return sym->ctype.base_type == &fp_type;
+}
+
+static LLVMTypeRef symbol_type(LLVMModuleRef module, struct symbol *sym);
+
+static LLVMTypeRef func_return_type(LLVMModuleRef module, struct symbol *sym)
+{
+	return symbol_type(module, sym->ctype.base_type);
+}
+
+static LLVMTypeRef sym_func_type(LLVMModuleRef module, struct symbol *sym)
+{
+	LLVMTypeRef *arg_type;
+	LLVMTypeRef func_type;
+	LLVMTypeRef ret_type;
+	struct symbol *arg;
+	int n_arg = 0;
+
+	/* to avoid strangeness with varargs [for now], we build
+	 * the function and type anew, for each call.  This
+	 * is probably wrong.  We should look up the
+	 * symbol declaration info.
+	 */
+
+	ret_type = func_return_type(module, sym);
+
+	/* count args, build argument type information */
+	FOR_EACH_PTR(sym->arguments, arg) {
+		n_arg++;
+	} END_FOR_EACH_PTR(arg);
+
+	arg_type = calloc(n_arg, sizeof(LLVMTypeRef));
+
+	int idx = 0;
+	FOR_EACH_PTR(sym->arguments, arg) {
+		struct symbol *arg_sym = arg->ctype.base_type;
+
+		arg_type[idx++] = symbol_type(module, arg_sym);
+	} END_FOR_EACH_PTR(arg);
+	func_type = LLVMFunctionType(ret_type, arg_type, n_arg,
+				     sym->variadic);
+
+	return func_type;
+}
+
+static LLVMTypeRef sym_array_type(LLVMModuleRef module, struct symbol *sym)
+{
+	LLVMTypeRef elem_type;
+	struct symbol *base_type;
+
+	base_type = sym->ctype.base_type;
+	/* empty struct is undefined [6.7.2.1(8)] */
+	assert(base_type->bit_size > 0);
+
+	elem_type = symbol_type(module, base_type);
+	if (!elem_type)
+		return NULL;
+
+	return LLVMArrayType(elem_type, sym->bit_size / base_type->bit_size);
+}
+
+#define MAX_STRUCT_MEMBERS 64
+
+static LLVMTypeRef sym_struct_type(LLVMModuleRef module, struct symbol *sym)
+{
+	LLVMTypeRef elem_types[MAX_STRUCT_MEMBERS];
+	struct symbol *member;
+	char buffer[256];
+	LLVMTypeRef ret;
+	unsigned nr = 0;
+
+	snprintf(buffer, sizeof(buffer), "struct.%s", sym->ident ? sym->ident->name : "anno");
+	ret = LLVMStructCreateNamed(LLVMGetGlobalContext(), buffer);
+	/* set ->aux to avoid recursion */
+	sym->aux = ret;
+
+	FOR_EACH_PTR(sym->symbol_list, member) {
+		LLVMTypeRef member_type;
+
+		assert(nr < MAX_STRUCT_MEMBERS);
+
+		member_type = symbol_type(module, member);
+
+		elem_types[nr++] = member_type; 
+	} END_FOR_EACH_PTR(member);
+
+	LLVMStructSetBody(ret, elem_types, nr, 0 /* packed? */); 
+	return ret;
+}
+
+static LLVMTypeRef sym_union_type(LLVMModuleRef module, struct symbol *sym)
+{
+	LLVMTypeRef elements;
+	unsigned union_size;
+
+	/*
+	 * There's no union support in the LLVM API so we treat unions as
+	 * opaque structs. The downside is that we lose type information on the
+	 * members but as LLVM doesn't care, neither do we.
+	 */
+	union_size = sym->bit_size / 8;
+
+	elements = LLVMArrayType(LLVMInt8Type(), union_size);
+
+	return LLVMStructType(&elements, 1, 0 /* packed? */);
+}
+
+static LLVMTypeRef sym_ptr_type(LLVMModuleRef module, struct symbol *sym)
+{
+	LLVMTypeRef type;
+
+	/* 'void *' is treated like 'char *' */
+	if (is_void_type(sym->ctype.base_type))
+		type = LLVMInt8Type();
+	else
+		type = symbol_type(module, sym->ctype.base_type);
+
+	return LLVMPointerType(type, 0);
+}
+
+static LLVMTypeRef sym_basetype_type(struct symbol *sym)
+{
+	LLVMTypeRef ret = NULL;
+
+	if (symbol_is_fp_type(sym)) {
+		switch (sym->bit_size) {
+		case 32:
+			ret = LLVMFloatType();
+			break;
+		case 64:
+			ret = LLVMDoubleType();
+			break;
+		case 80:
+			ret = LLVMX86FP80Type();
+			break;
+		default:
+			die("invalid bit size %d for type %d", sym->bit_size, sym->type);
+			break;
+		}
+	} else {
+		switch (sym->bit_size) {
+		case -1:
+			ret = LLVMVoidType();
+			break;
+		case 1:
+			ret = LLVMInt1Type();
+			break;
+		case 8:
+			ret = LLVMInt8Type();
+			break;
+		case 16:
+			ret = LLVMInt16Type();
+			break;
+		case 32:
+			ret = LLVMInt32Type();
+			break;
+		case 64:
+			ret = LLVMInt64Type();
+			break;
+		default:
+			die("invalid bit size %d for type %d", sym->bit_size, sym->type);
+			break;
+		}
+	}
+
+	return ret;
+}
+
+static LLVMTypeRef symbol_type(LLVMModuleRef module, struct symbol *sym)
+{
+	LLVMTypeRef ret = NULL;
+
+	/* don't cache the result for SYM_NODE */
+	if (sym->type == SYM_NODE)
+		return symbol_type(module, sym->ctype.base_type);
+
+	if (sym->aux)
+		return sym->aux;
+
+	switch (sym->type) {
+	case SYM_BITFIELD:
+	case SYM_ENUM:
+		ret = symbol_type(module, sym->ctype.base_type);
+		break;
+	case SYM_BASETYPE:
+		ret = sym_basetype_type(sym);
+		break;
+	case SYM_PTR:
+		ret = sym_ptr_type(module, sym);
+		break;
+	case SYM_UNION:
+		ret = sym_union_type(module, sym);
+		break;
+	case SYM_STRUCT:
+		ret = sym_struct_type(module, sym);
+		break;
+	case SYM_ARRAY:
+		ret = sym_array_type(module, sym);
+		break;
+	case SYM_FN:
+		ret = sym_func_type(module, sym);
+		break;
+	default:
+		assert(0);
+	}
+
+	/* cache the result */
+	sym->aux = ret;
+	return ret;
+}
+
+static LLVMTypeRef int_type_by_size(int size)
+{
+	switch (size) {
+		case 1:		return LLVMInt1Type();
+		case 8:		return LLVMInt8Type();
+		case 16:	return LLVMInt16Type();
+		case 32:	return LLVMInt32Type();
+		case 64:	return LLVMInt64Type();
+
+		default:
+			die("invalid bit size %d", size);
+			break;
+	}
+	return NULL;	/* not reached */
+}
+
+static LLVMTypeRef insn_symbol_type(LLVMModuleRef module, struct instruction *insn)
+{
+	if (insn->type)
+		return symbol_type(module, insn->type);
+
+	return int_type_by_size(insn->size);
+}
+
+static LLVMLinkage data_linkage(struct symbol *sym)
+{
+	if (sym->ctype.modifiers & MOD_STATIC)
+		return LLVMPrivateLinkage;
+
+	return LLVMExternalLinkage;
+}
+
+static LLVMLinkage function_linkage(struct symbol *sym)
+{
+	if (sym->ctype.modifiers & MOD_STATIC)
+		return LLVMInternalLinkage;
+
+	return LLVMExternalLinkage;
+}
+
+#define MAX_PSEUDO_NAME 64
+
+static void pseudo_name(pseudo_t pseudo, char *buf)
+{
+	switch (pseudo->type) {
+	case PSEUDO_REG:
+		snprintf(buf, MAX_PSEUDO_NAME, "R%d", pseudo->nr);
+		break;
+	case PSEUDO_SYM:
+		assert(0);
+		break;
+	case PSEUDO_VAL:
+		assert(0);
+		break;
+	case PSEUDO_ARG: {
+		assert(0);
+		break;
+	}
+	case PSEUDO_PHI:
+		snprintf(buf, MAX_PSEUDO_NAME, "PHI%d", pseudo->nr);
+		break;
+	default:
+		assert(0);
+	}
+}
+
+static LLVMValueRef pseudo_to_value(struct function *fn, struct instruction *insn, pseudo_t pseudo)
+{
+	LLVMValueRef result = NULL;
+
+	switch (pseudo->type) {
+	case PSEUDO_REG:
+		result = pseudo->priv;
+		break;
+	case PSEUDO_SYM: {
+		struct symbol *sym = pseudo->sym;
+		struct expression *expr;
+
+		assert(sym->bb_target == NULL);
+
+		expr = sym->initializer;
+		if (expr) {
+			switch (expr->type) {
+			case EXPR_STRING: {
+				const char *s = expr->string->data;
+				LLVMValueRef indices[] = { LLVMConstInt(LLVMInt64Type(), 0, 0), LLVMConstInt(LLVMInt64Type(), 0, 0) };
+				LLVMValueRef data;
+
+				data = LLVMAddGlobal(fn->module, LLVMArrayType(LLVMInt8Type(), strlen(s) + 1), ".str");
+				LLVMSetLinkage(data, LLVMPrivateLinkage);
+				LLVMSetGlobalConstant(data, 1);
+				LLVMSetInitializer(data, LLVMConstString(strdup(s), strlen(s) + 1, true));
+
+				result = LLVMConstGEP(data, indices, ARRAY_SIZE(indices));
+				break;
+			}
+			case EXPR_SYMBOL: {
+				struct symbol *sym = expr->symbol;
+
+				result = LLVMGetNamedGlobal(fn->module, show_ident(sym->ident));
+				assert(result != NULL);
+				break;
+			}
+			default:
+				assert(0);
+			}
+		} else {
+			const char *name = show_ident(sym->ident);
+			LLVMTypeRef type = symbol_type(fn->module, sym);
+
+			if (LLVMGetTypeKind(type) == LLVMFunctionTypeKind) {
+				result = LLVMGetNamedFunction(fn->module, name);
+				if (!result)
+					result = LLVMAddFunction(fn->module, name, type);
+			} else {
+				result = LLVMGetNamedGlobal(fn->module, name);
+				if (!result)
+					result = LLVMAddGlobal(fn->module, type, name);
+			}
+		}
+		break;
+	}
+	case PSEUDO_VAL:
+		result = LLVMConstInt(int_type_by_size(pseudo->size), pseudo->value, 1);
+		break;
+	case PSEUDO_ARG: {
+		result = LLVMGetParam(fn->fn, pseudo->nr - 1);
+		break;
+	}
+	case PSEUDO_PHI:
+		result = pseudo->priv;
+		break;
+	case PSEUDO_VOID:
+		result = NULL;
+		break;
+	default:
+		assert(0);
+	}
+
+	return result;
+}
+
+static LLVMValueRef calc_gep(LLVMBuilderRef builder, LLVMValueRef base, LLVMValueRef off)
+{
+	LLVMTypeRef type = LLVMTypeOf(base);
+	unsigned int as = LLVMGetPointerAddressSpace(type);
+	LLVMTypeRef bytep = LLVMPointerType(LLVMInt8Type(), as);
+	LLVMValueRef addr;
+
+	/* convert base to char* type */
+	base = LLVMBuildPointerCast(builder, base, bytep, "");
+	/* addr = base + off */
+	addr = LLVMBuildInBoundsGEP(builder, base, &off, 1, "");
+	/* convert back to the actual pointer type */
+	addr = LLVMBuildPointerCast(builder, addr, type, "");
+	return addr;
+}
+
+static LLVMRealPredicate translate_fop(int opcode)
+{
+	static const LLVMRealPredicate trans_tbl[] = {
+		[OP_SET_EQ]	= LLVMRealOEQ,
+		[OP_SET_NE]	= LLVMRealUNE,
+		[OP_SET_LE]	= LLVMRealOLE,
+		[OP_SET_GE]	= LLVMRealOGE,
+		[OP_SET_LT]	= LLVMRealOLT,
+		[OP_SET_GT]	= LLVMRealOGT,
+		/* Are these used with FP? */
+		[OP_SET_B]	= LLVMRealOLT,
+		[OP_SET_A]	= LLVMRealOGT,
+		[OP_SET_BE]	= LLVMRealOLE,
+		[OP_SET_AE]	= LLVMRealOGE,
+	};
+
+	return trans_tbl[opcode];
+}
+
+static LLVMIntPredicate translate_op(int opcode)
+{
+	static const LLVMIntPredicate trans_tbl[] = {
+		[OP_SET_EQ]	= LLVMIntEQ,
+		[OP_SET_NE]	= LLVMIntNE,
+		[OP_SET_LE]	= LLVMIntSLE,
+		[OP_SET_GE]	= LLVMIntSGE,
+		[OP_SET_LT]	= LLVMIntSLT,
+		[OP_SET_GT]	= LLVMIntSGT,
+		[OP_SET_B]	= LLVMIntULT,
+		[OP_SET_A]	= LLVMIntUGT,
+		[OP_SET_BE]	= LLVMIntULE,
+		[OP_SET_AE]	= LLVMIntUGE,
+	};
+
+	return trans_tbl[opcode];
+}
+
+static void output_op_binary(struct function *fn, struct instruction *insn)
+{
+	LLVMValueRef lhs, rhs, target;
+	char target_name[64];
+
+	lhs = pseudo_to_value(fn, insn, insn->src1);
+
+	rhs = pseudo_to_value(fn, insn, insn->src2);
+
+	pseudo_name(insn->target, target_name);
+
+	switch (insn->opcode) {
+	/* Binary */
+	case OP_ADD:
+		if (symbol_is_fp_type(insn->type))
+			target = LLVMBuildFAdd(fn->builder, lhs, rhs, target_name);
+		else
+			target = LLVMBuildAdd(fn->builder, lhs, rhs, target_name);
+		break;
+	case OP_SUB:
+		if (symbol_is_fp_type(insn->type))
+			target = LLVMBuildFSub(fn->builder, lhs, rhs, target_name);
+		else
+			target = LLVMBuildSub(fn->builder, lhs, rhs, target_name);
+		break;
+	case OP_MULU:
+		if (symbol_is_fp_type(insn->type))
+			target = LLVMBuildFMul(fn->builder, lhs, rhs, target_name);
+		else
+			target = LLVMBuildMul(fn->builder, lhs, rhs, target_name);
+		break;
+	case OP_MULS:
+		assert(!symbol_is_fp_type(insn->type));
+		target = LLVMBuildMul(fn->builder, lhs, rhs, target_name);
+		break;
+	case OP_DIVU:
+		if (symbol_is_fp_type(insn->type))
+			target = LLVMBuildFDiv(fn->builder, lhs, rhs, target_name);
+		else
+			target = LLVMBuildUDiv(fn->builder, lhs, rhs, target_name);
+		break;
+	case OP_DIVS:
+		assert(!symbol_is_fp_type(insn->type));
+		target = LLVMBuildSDiv(fn->builder, lhs, rhs, target_name);
+		break;
+	case OP_MODU:
+		assert(!symbol_is_fp_type(insn->type));
+		target = LLVMBuildURem(fn->builder, lhs, rhs, target_name);
+		break;
+	case OP_MODS:
+		assert(!symbol_is_fp_type(insn->type));
+		target = LLVMBuildSRem(fn->builder, lhs, rhs, target_name);
+		break;
+	case OP_SHL:
+		assert(!symbol_is_fp_type(insn->type));
+		target = LLVMBuildShl(fn->builder, lhs, rhs, target_name);
+		break;
+	case OP_LSR:
+		assert(!symbol_is_fp_type(insn->type));
+		target = LLVMBuildLShr(fn->builder, lhs, rhs, target_name);
+		break;
+	case OP_ASR:
+		assert(!symbol_is_fp_type(insn->type));
+		target = LLVMBuildAShr(fn->builder, lhs, rhs, target_name);
+		break;
+	
+	/* Logical */
+	case OP_AND:
+		assert(!symbol_is_fp_type(insn->type));
+		target = LLVMBuildAnd(fn->builder, lhs, rhs, target_name);
+		break;
+	case OP_OR:
+		assert(!symbol_is_fp_type(insn->type));
+		target = LLVMBuildOr(fn->builder, lhs, rhs, target_name);
+		break;
+	case OP_XOR:
+		assert(!symbol_is_fp_type(insn->type));
+		target = LLVMBuildXor(fn->builder, lhs, rhs, target_name);
+		break;
+	case OP_AND_BOOL: {
+		LLVMValueRef lhs_nz, rhs_nz;
+		LLVMTypeRef dst_type;
+
+		lhs_nz = LLVMBuildIsNotNull(fn->builder, lhs, "");
+		rhs_nz = LLVMBuildIsNotNull(fn->builder, rhs, "");
+		target = LLVMBuildAnd(fn->builder, lhs_nz, rhs_nz, target_name);
+
+		dst_type = insn_symbol_type(fn->module, insn);
+		target = LLVMBuildZExt(fn->builder, target, dst_type, target_name);
+		break;
+	}
+	case OP_OR_BOOL: {
+		LLVMValueRef lhs_nz, rhs_nz;
+		LLVMTypeRef dst_type;
+
+		lhs_nz = LLVMBuildIsNotNull(fn->builder, lhs, "");
+		rhs_nz = LLVMBuildIsNotNull(fn->builder, rhs, "");
+		target = LLVMBuildOr(fn->builder, lhs_nz, rhs_nz, target_name);
+
+		dst_type = insn_symbol_type(fn->module, insn);
+		target = LLVMBuildZExt(fn->builder, target, dst_type, target_name);
+		break;
+	}
+	default:
+		assert(0);
+		break;
+	}
+
+	insn->target->priv = target;
+}
+
+static void output_op_compare(struct function *fn, struct instruction *insn)
+{
+	LLVMValueRef lhs, rhs, target;
+	char target_name[64];
+
+	lhs = pseudo_to_value(fn, insn, insn->src1);
+
+	if (insn->src2->type == PSEUDO_VAL)
+		rhs = LLVMConstInt(LLVMTypeOf(lhs), insn->src2->value, 1);
+	else
+		rhs = pseudo_to_value(fn, insn, insn->src2);
+
+	pseudo_name(insn->target, target_name);
+
+	LLVMTypeRef dst_type = insn_symbol_type(fn->module, insn);
+
+	if (LLVMGetTypeKind(LLVMTypeOf(lhs)) == LLVMIntegerTypeKind) {
+		LLVMIntPredicate op = translate_op(insn->opcode);
+
+		target = LLVMBuildICmp(fn->builder, op, lhs, rhs, target_name);
+	} else {
+		LLVMRealPredicate op = translate_fop(insn->opcode);
+
+		target = LLVMBuildFCmp(fn->builder, op, lhs, rhs, target_name);
+	}
+
+	target = LLVMBuildZExt(fn->builder, target, dst_type, target_name);
+
+	insn->target->priv = target;
+}
+
+static void output_op_ret(struct function *fn, struct instruction *insn)
+{
+	pseudo_t pseudo = insn->src;
+
+	if (pseudo && pseudo != VOID) {
+		LLVMValueRef result = pseudo_to_value(fn, insn, pseudo);
+
+		LLVMBuildRet(fn->builder, result);
+	} else
+		LLVMBuildRetVoid(fn->builder);
+}
+
+static LLVMValueRef calc_memop_addr(struct function *fn, struct instruction *insn)
+{
+	LLVMTypeRef int_type, addr_type;
+	LLVMValueRef src, off, addr;
+	unsigned int as;
+
+	/* int type large enough to hold a pointer */
+	int_type = LLVMIntType(bits_in_pointer);
+	off = LLVMConstInt(int_type, insn->offset, 0);
+
+	/* convert src to the effective pointer type */
+	src = pseudo_to_value(fn, insn, insn->src);
+	as = LLVMGetPointerAddressSpace(LLVMTypeOf(src));
+	addr_type = LLVMPointerType(insn_symbol_type(fn->module, insn), as);
+	src = LLVMBuildPointerCast(fn->builder, src, addr_type, "");
+
+	/* addr = src + off */
+	addr = calc_gep(fn->builder, src, off);
+	return addr;
+}
+
+
+static void output_op_load(struct function *fn, struct instruction *insn)
+{
+	LLVMValueRef addr, target;
+
+	addr = calc_memop_addr(fn, insn);
+
+	/* perform load */
+	target = LLVMBuildLoad(fn->builder, addr, "load_target");
+
+	insn->target->priv = target;
+}
+
+static void output_op_store(struct function *fn, struct instruction *insn)
+{
+	LLVMValueRef addr, target, target_in;
+
+	addr = calc_memop_addr(fn, insn);
+
+	target_in = pseudo_to_value(fn, insn, insn->target);
+
+	/* perform store */
+	target = LLVMBuildStore(fn->builder, target_in, addr);
+
+	insn->target->priv = target;
+}
+
+static LLVMValueRef bool_value(struct function *fn, LLVMValueRef value)
+{
+	if (LLVMTypeOf(value) != LLVMInt1Type())
+		value = LLVMBuildIsNotNull(fn->builder, value, "cond");
+
+	return value;
+}
+
+static void output_op_cbr(struct function *fn, struct instruction *br)
+{
+	LLVMValueRef cond = bool_value(fn,
+			pseudo_to_value(fn, br, br->cond));
+
+	LLVMBuildCondBr(fn->builder, cond,
+			br->bb_true->priv,
+			br->bb_false->priv);
+}
+
+static void output_op_br(struct function *fn, struct instruction *br)
+{
+	LLVMBuildBr(fn->builder, br->bb_true->priv);
+}
+
+static void output_op_sel(struct function *fn, struct instruction *insn)
+{
+	LLVMValueRef target, src1, src2, src3;
+
+	src1 = bool_value(fn, pseudo_to_value(fn, insn, insn->src1));
+	src2 = pseudo_to_value(fn, insn, insn->src2);
+	src3 = pseudo_to_value(fn, insn, insn->src3);
+
+	target = LLVMBuildSelect(fn->builder, src1, src2, src3, "select");
+
+	insn->target->priv = target;
+}
+
+static void output_op_switch(struct function *fn, struct instruction *insn)
+{
+	LLVMValueRef sw_val, target;
+	struct basic_block *def = NULL;
+	struct multijmp *jmp;
+	int n_jmp = 0;
+
+	FOR_EACH_PTR(insn->multijmp_list, jmp) {
+		if (jmp->begin == jmp->end) {		/* case N */
+			n_jmp++;
+		} else if (jmp->begin < jmp->end) {	/* case M..N */
+			assert(0);
+		} else					/* default case */
+			def = jmp->target;
+	} END_FOR_EACH_PTR(jmp);
+
+	sw_val = pseudo_to_value(fn, insn, insn->target);
+	target = LLVMBuildSwitch(fn->builder, sw_val,
+				 def ? def->priv : NULL, n_jmp);
+
+	FOR_EACH_PTR(insn->multijmp_list, jmp) {
+		if (jmp->begin == jmp->end) {		/* case N */
+			LLVMAddCase(target,
+				LLVMConstInt(LLVMInt32Type(), jmp->begin, 0),
+				jmp->target->priv);
+		} else if (jmp->begin < jmp->end) {	/* case M..N */
+			assert(0);
+		}
+	} END_FOR_EACH_PTR(jmp);
+
+	insn->target->priv = target;
+}
+
+static void output_op_call(struct function *fn, struct instruction *insn)
+{
+	LLVMValueRef target, func;
+	int n_arg = 0, i;
+	struct pseudo *arg;
+	LLVMValueRef *args;
+
+	FOR_EACH_PTR(insn->arguments, arg) {
+		n_arg++;
+	} END_FOR_EACH_PTR(arg);
+
+	args = calloc(n_arg, sizeof(LLVMValueRef));
+
+	i = 0;
+	FOR_EACH_PTR(insn->arguments, arg) {
+		args[i++] = pseudo_to_value(fn, insn, arg);
+	} END_FOR_EACH_PTR(arg);
+
+	func = pseudo_to_value(fn, insn, insn->func);
+	target = LLVMBuildCall(fn->builder, func, args, n_arg, "");
+
+	insn->target->priv = target;
+}
+
+static void output_op_phisrc(struct function *fn, struct instruction *insn)
+{
+	LLVMValueRef v;
+	struct instruction *phi;
+
+	assert(insn->target->priv == NULL);
+
+	/* target = src */
+	v = pseudo_to_value(fn, insn, insn->phi_src);
+
+	FOR_EACH_PTR(insn->phi_users, phi) {
+		LLVMValueRef load, ptr;
+
+		assert(phi->opcode == OP_PHI);
+		/* phi must be load from alloca */
+		load = phi->target->priv;
+		assert(LLVMGetInstructionOpcode(load) == LLVMLoad);
+		ptr = LLVMGetOperand(load, 0);
+		/* store v to alloca */
+		LLVMBuildStore(fn->builder, v, ptr);
+	} END_FOR_EACH_PTR(phi);
+}
+
+static void output_op_phi(struct function *fn, struct instruction *insn)
+{
+	LLVMValueRef load = insn->target->priv;
+
+	/* forward load */
+	assert(LLVMGetInstructionOpcode(load) == LLVMLoad);
+	/* forward load has no parent block */
+	assert(!LLVMGetInstructionParent(load));
+	/* finalize load in current block  */
+	LLVMInsertIntoBuilder(fn->builder, load);
+}
+
+static void output_op_ptrcast(struct function *fn, struct instruction *insn)
+{
+	LLVMValueRef src, target;
+	char target_name[64];
+
+	src = insn->src->priv;
+	if (!src)
+		src = pseudo_to_value(fn, insn, insn->src);
+
+	pseudo_name(insn->target, target_name);
+
+	assert(!symbol_is_fp_type(insn->type));
+
+	target = LLVMBuildBitCast(fn->builder, src, insn_symbol_type(fn->module, insn), target_name);
+
+	insn->target->priv = target;
+}
+
+static void output_op_cast(struct function *fn, struct instruction *insn, LLVMOpcode op)
+{
+	LLVMValueRef src, target;
+	char target_name[64];
+
+	src = insn->src->priv;
+	if (!src)
+		src = pseudo_to_value(fn, insn, insn->src);
+
+	pseudo_name(insn->target, target_name);
+
+	assert(!symbol_is_fp_type(insn->type));
+
+	if (insn->size < LLVMGetIntTypeWidth(LLVMTypeOf(src)))
+		target = LLVMBuildTrunc(fn->builder, src, insn_symbol_type(fn->module, insn), target_name);
+	else
+		target = LLVMBuildCast(fn->builder, op, src, insn_symbol_type(fn->module, insn), target_name);
+
+	insn->target->priv = target;
+}
+
+static void output_insn(struct function *fn, struct instruction *insn)
+{
+	switch (insn->opcode) {
+	case OP_RET:
+		output_op_ret(fn, insn);
+		break;
+	case OP_BR:
+		output_op_br(fn, insn);
+		break;
+	case OP_CBR:
+		output_op_cbr(fn, insn);
+		break;
+	case OP_SYMADDR:
+		assert(0);
+		break;
+	case OP_SETVAL:
+		assert(0);
+		break;
+	case OP_SWITCH:
+		output_op_switch(fn, insn);
+		break;
+	case OP_COMPUTEDGOTO:
+		assert(0);
+		break;
+	case OP_PHISOURCE:
+		output_op_phisrc(fn, insn);
+		break;
+	case OP_PHI:
+		output_op_phi(fn, insn);
+		break;
+	case OP_LOAD:
+		output_op_load(fn, insn);
+		break;
+	case OP_LNOP:
+		assert(0);
+		break;
+	case OP_STORE:
+		output_op_store(fn, insn);
+		break;
+	case OP_SNOP:
+		assert(0);
+		break;
+	case OP_INLINED_CALL:
+		assert(0);
+		break;
+	case OP_CALL:
+		output_op_call(fn, insn);
+		break;
+	case OP_CAST:
+		output_op_cast(fn, insn, LLVMZExt);
+		break;
+	case OP_SCAST:
+		output_op_cast(fn, insn, LLVMSExt);
+		break;
+	case OP_FPCAST:
+		assert(0);
+		break;
+	case OP_PTRCAST:
+		output_op_ptrcast(fn, insn);
+		break;
+	case OP_BINARY ... OP_BINARY_END:
+		output_op_binary(fn, insn);
+		break;
+	case OP_BINCMP ... OP_BINCMP_END:
+		output_op_compare(fn, insn);
+		break;
+	case OP_SEL:
+		output_op_sel(fn, insn);
+		break;
+	case OP_SLICE:
+		assert(0);
+		break;
+	case OP_NOT: {
+		LLVMValueRef src, target;
+		char target_name[64];
+
+		src = pseudo_to_value(fn, insn, insn->src);
+
+		pseudo_name(insn->target, target_name);
+
+		target = LLVMBuildNot(fn->builder, src, target_name);
+
+		insn->target->priv = target;
+		break;
+	}
+	case OP_NEG:
+		assert(0);
+		break;
+	case OP_CONTEXT:
+		assert(0);
+		break;
+	case OP_RANGE:
+		assert(0);
+		break;
+	case OP_NOP:
+		assert(0);
+		break;
+	case OP_DEATHNOTE:
+		break;
+	case OP_ASM:
+		assert(0);
+		break;
+	case OP_COPY:
+		assert(0);
+		break;
+	default:
+		break;
+	}
+}
+
+static void output_bb(struct function *fn, struct basic_block *bb, unsigned long generation)
+{
+	struct instruction *insn;
+
+	bb->generation = generation;
+
+	FOR_EACH_PTR(bb->insns, insn) {
+		if (!insn->bb)
+			continue;
+
+		output_insn(fn, insn);
+	}
+	END_FOR_EACH_PTR(insn);
+}
+
+#define MAX_ARGS	64
+
+static void output_fn(LLVMModuleRef module, struct entrypoint *ep)
+{
+	unsigned long generation = ++bb_generation;
+	struct symbol *sym = ep->name;
+	struct symbol *base_type = sym->ctype.base_type;
+	struct symbol *ret_type = sym->ctype.base_type->ctype.base_type;
+	LLVMTypeRef arg_types[MAX_ARGS];
+	LLVMTypeRef return_type;
+	struct function function = { .module = module };
+	struct basic_block *bb;
+	struct symbol *arg;
+	const char *name;
+	int nr_args = 0;
+
+	FOR_EACH_PTR(base_type->arguments, arg) {
+		struct symbol *arg_base_type = arg->ctype.base_type;
+
+		arg_types[nr_args++] = symbol_type(module, arg_base_type);
+	} END_FOR_EACH_PTR(arg);
+
+	name = show_ident(sym->ident);
+
+	return_type = symbol_type(module, ret_type);
+
+	function.type = LLVMFunctionType(return_type, arg_types, nr_args, 0);
+
+	function.fn = LLVMAddFunction(module, name, function.type);
+	LLVMSetFunctionCallConv(function.fn, LLVMCCallConv);
+
+	LLVMSetLinkage(function.fn, function_linkage(sym));
+
+	function.builder = LLVMCreateBuilder();
+
+	static int nr_bb;
+
+	FOR_EACH_PTR(ep->bbs, bb) {
+		if (bb->generation == generation)
+			continue;
+
+		LLVMBasicBlockRef bbr;
+		char bbname[32];
+		struct instruction *insn;
+
+		sprintf(bbname, "L%d", nr_bb++);
+		bbr = LLVMAppendBasicBlock(function.fn, bbname);
+
+		bb->priv = bbr;
+
+		/* allocate alloca for each phi */
+		FOR_EACH_PTR(bb->insns, insn) {
+			LLVMBasicBlockRef entrybbr;
+			LLVMTypeRef phi_type;
+			LLVMValueRef ptr;
+
+			if (!insn->bb || insn->opcode != OP_PHI)
+				continue;
+			/* insert alloca into entry block */
+			entrybbr = LLVMGetEntryBasicBlock(function.fn);
+			LLVMPositionBuilderAtEnd(function.builder, entrybbr);
+			phi_type = insn_symbol_type(module, insn);
+			ptr = LLVMBuildAlloca(function.builder, phi_type, "");
+			/* emit forward load for phi */
+			LLVMClearInsertionPosition(function.builder);
+			insn->target->priv = LLVMBuildLoad(function.builder, ptr, "phi");
+		} END_FOR_EACH_PTR(insn);
+	}
+	END_FOR_EACH_PTR(bb);
+
+	FOR_EACH_PTR(ep->bbs, bb) {
+		if (bb->generation == generation)
+			continue;
+
+		LLVMPositionBuilderAtEnd(function.builder, bb->priv);
+
+		output_bb(&function, bb, generation);
+	}
+	END_FOR_EACH_PTR(bb);
+}
+
+static LLVMValueRef output_data(LLVMModuleRef module, struct symbol *sym)
+{
+	struct expression *initializer = sym->initializer;
+	LLVMValueRef initial_value;
+	LLVMValueRef data;
+	const char *name;
+
+	if (initializer) {
+		switch (initializer->type) {
+		case EXPR_VALUE:
+			initial_value = LLVMConstInt(symbol_type(module, sym), initializer->value, 1);
+			break;
+		case EXPR_SYMBOL: {
+			struct symbol *sym = initializer->symbol;
+
+			initial_value = LLVMGetNamedGlobal(module, show_ident(sym->ident));
+			if (!initial_value)
+				initial_value = output_data(module, sym);
+			break;
+		}
+		case EXPR_STRING: {
+			const char *s = initializer->string->data;
+
+			initial_value = LLVMConstString(strdup(s), strlen(s) + 1, true);
+			break;
+		}
+		default:
+			assert(0);
+		}
+	} else {
+		LLVMTypeRef type = symbol_type(module, sym);
+
+		initial_value = LLVMConstNull(type);
+	}
+
+	name = show_ident(sym->ident);
+
+	data = LLVMAddGlobal(module, LLVMTypeOf(initial_value), name);
+
+	LLVMSetLinkage(data, data_linkage(sym));
+	if (sym->ctype.modifiers & MOD_CONST)
+		LLVMSetGlobalConstant(data, 1);
+	if (sym->ctype.modifiers & MOD_TLS)
+		LLVMSetThreadLocal(data, 1);
+	if (sym->ctype.alignment)
+		LLVMSetAlignment(data, sym->ctype.alignment);
+
+	if (!(sym->ctype.modifiers & MOD_EXTERN))
+		LLVMSetInitializer(data, initial_value);
+
+	return data;
+}
+
+static int is_prototype(struct symbol *sym)
+{
+	if (sym->type == SYM_NODE)
+		sym = sym->ctype.base_type;
+	return sym && sym->type == SYM_FN && !sym->stmt;
+}
+
+static int compile(LLVMModuleRef module, struct symbol_list *list)
+{
+	struct symbol *sym;
+
+	FOR_EACH_PTR(list, sym) {
+		struct entrypoint *ep;
+		expand_symbol(sym);
+
+		if (is_prototype(sym))
+			continue;
+
+		ep = linearize_symbol(sym);
+		if (ep)
+			output_fn(module, ep);
+		else
+			output_data(module, sym);
+	}
+	END_FOR_EACH_PTR(sym);
+
+	return 0;
+}
+
+#ifndef LLVM_DEFAULT_TARGET_TRIPLE
+#define LLVM_DEFAULT_TARGET_TRIPLE LLVM_HOSTTRIPLE
+#endif
+
+#define X86_LINUX_LAYOUT \
+	"e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-" \
+	"i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-" \
+	"a0:0:64-f80:32:32-n8:16:32-S128"
+
+#define X86_64_LINUX_LAYOUT \
+	"e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-" \
+	"i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-" \
+	"a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
+
+static void set_target(LLVMModuleRef module)
+{
+	char target[] = LLVM_DEFAULT_TARGET_TRIPLE;
+	const char *arch, *vendor, *os, *env, *layout = NULL;
+	char triple[256];
+
+	arch = strtok(target, "-");
+	vendor = strtok(NULL, "-");
+	os = strtok(NULL, "-");
+	env = strtok(NULL, "-");
+
+	if (!os)
+		return;
+	if (!env)
+		env = "unknown";
+
+	if (!strcmp(arch, "x86_64") && !strcmp(os, "linux")) {
+		if (arch_m64) {
+			layout = X86_64_LINUX_LAYOUT;
+		} else {
+			arch = "i386";
+			layout = X86_LINUX_LAYOUT;
+		}
+	}
+
+	/* unsupported target */
+	if (!layout)
+		return;
+
+	snprintf(triple, sizeof(triple), "%s-%s-%s-%s", arch, vendor, os, env);
+	LLVMSetTarget(module, triple);
+	LLVMSetDataLayout(module, layout);
+}
+
+int main(int argc, char **argv)
+{
+	struct string_list *filelist = NULL;
+	struct symbol_list *symlist;
+	LLVMModuleRef module;
+	char *file;
+
+	symlist = sparse_initialize(argc, argv, &filelist);
+
+	module = LLVMModuleCreateWithName("sparse");
+	set_target(module);
+
+	compile(module, symlist);
+
+	/* need ->phi_users */
+	dbg_dead = 1;
+	FOR_EACH_PTR_NOTAG(filelist, file) {
+		symlist = sparse(file);
+		if (die_if_error)
+			return 1;
+		compile(module, symlist);
+	} END_FOR_EACH_PTR_NOTAG(file);
+
+	LLVMVerifyModule(module, LLVMPrintMessageAction, NULL);
+
+	LLVMWriteBitcodeToFD(module, STDOUT_FILENO, 0, 0);
+
+	LLVMDisposeModule(module);
+
+	report_stats();
+	return 0;
+}
--- /dev/null	Fri Dec 21 15:00:38 2018
+++ new/usr/src/tools/smatch/src/sparse.1	Fri Dec 21 15:00:38 2018
@@ -0,0 +1,446 @@
+.\" Sparse manpage by Josh Triplett
+.TH sparse "1"
+.
+.SH NAME
+sparse \- Semantic Parser for C
+.
+.SH SYNOPSIS
+.B sparse
+[\fIWARNING OPTIONS\fR]... \fIfile.c\fR
+.
+.SH DESCRIPTION
+Sparse parses C source and looks for errors, producing warnings on standard
+error.
+.P
+Sparse accepts options controlling the set of warnings to generate.  To turn
+on warnings Sparse does not issue by default, use the corresponding warning
+option \fB\-Wsomething\fR.  Sparse issues some warnings by default; to turn
+off those warnings, pass the negation of the associated warning option,
+\fB\-Wno\-something\fR.
+.
+.SH WARNING OPTIONS
+.TP
+.B \-Wsparse\-all
+Turn on all sparse warnings, except for those explicitly disabled via
+\fB\-Wno\-something\fR.
+.TP
+.B \-Wsparse\-error
+Turn all sparse warnings into errors.
+.TP
+.B \-Waddress\-space
+Warn about code which mixes pointers to different address spaces.
+
+Sparse allows an extended attribute
+.BI __attribute__((address_space( num )))
+on pointers, which designates a pointer target in address space \fInum\fR (a
+constant integer).  With \fB\-Waddress\-space\fR, Sparse treats pointers with
+identical target types but different address spaces as distinct types.  To
+override this warning, such as for functions which convert pointers between
+address spaces, use a type that includes \fB__attribute__((force))\fR.
+
+Sparse issues these warnings by default.  To turn them off, use
+\fB\-Wno\-address\-space\fR.
+.
+.TP
+.B \-Wbitwise
+Warn about unsupported operations or type mismatches with restricted integer
+types.
+
+Sparse supports an extended attribute, \fB__attribute__((bitwise))\fR, which
+creates a new restricted integer type from a base integer type, distinct from
+the base integer type and from any other restricted integer type not declared
+in the same declaration or \fBtypedef\fR.  For example, this allows programs
+to create \fBtypedef\fRs for integer types with specific endianness.  With
+\fB-Wbitwise\fR, Sparse will warn on any use of a restricted type in
+arithmetic operations other than bitwise operations, and on any conversion of
+one restricted type into another, except via a cast that includes
+\fB__attribute__((force))\fR.
+
+__bitwise ends up being a "stronger integer separation", one that
+doesn't allow you to mix with non-bitwise integers, so now it's much
+harder to lose the type by mistake.
+
+__bitwise is for *unique types* that cannot be mixed with other
+types, and that you'd never want to just use as a random integer (the
+integer 0 is special, though, and gets silently accepted iirc - it's
+kind of like "NULL" for pointers). So "gfp_t" or the "safe endianness"
+types would be __bitwise: you can only operate on them by doing
+specific operations that know about *that* particular type.
+
+Sparse issues these warnings by default.  To turn them off, use
+\fB\-Wno\-bitwise\fR.
+.
+.TP
+.B \-Wcast\-to\-as
+Warn about casts which add an address space to a pointer type.
+
+A cast that includes \fB__attribute__((force))\fR will suppress this warning.
+
+Sparse does not issue these warnings by default.
+.
+.TP
+.B \-Wcast\-truncate
+Warn about casts that truncate constant values.
+
+Sparse issues these warnings by default.  To turn them off, use
+\fB\-Wno\-cast\-truncate\fR.
+.
+.TP
+.B \-Wconstant\-suffix
+Warn if an integer constant is larger than the maximum representable value
+of the type indicated by its type suffix (if any). For example, on a
+system where ints are 32-bit and longs 64-bit, the constant \fB0x100000000U\fR
+is larger than can be represented by an \fBunsigned int\fR but fits in an
+\fBunsigned long\fR. So its type is \fBunsigned long\fR but this is not
+indicated by its suffix. In this case, the warning could be suppressed by
+using the suffix \fBUL\fR: \fB0x100000000UL\fR.
+
+Sparse does not issue these warnings by default.
+.
+.TP
+.B \-Wconstexpr-not-const
+Warn if a non-constant expression is encountered when really expecting a
+constant expression instead.
+Currently, this warns when initializing an object of static storage duration
+with an initializer which is not a constant expression.
+
+Sparse does not issue these warnings by default.
+.
+.TP
+.B \-Wcontext
+Warn about potential errors in synchronization or other delimited contexts.
+
+Sparse supports several means of designating functions or statements that
+delimit contexts, such as synchronization.  Functions with the extended
+attribute
+.BI __attribute__((context( expression , in_context , out_context ))
+require the context \fIexpression\fR (for instance, a lock) to have the value
+\fIin_context\fR (a constant nonnegative integer) when called, and return with
+the value \fIout_context\fR (a constant nonnegative integer).  For APIs
+defined via macros, use the statement form
+.BI __context__( expression , in_value , out_value )
+in the body of the macro.
+
+With \fB-Wcontext\fR Sparse will warn when it sees a function change the
+context without indicating this with a \fBcontext\fR attribute, either by
+decreasing a context below zero (such as by releasing a lock without acquiring
+it), or returning with a changed context (such as by acquiring a lock without
+releasing it).  Sparse will also warn about blocks of code which may
+potentially execute with different contexts.
+
+Sparse issues these warnings by default.  To turn them off, use
+\fB\-Wno\-context\fR.
+.
+.TP
+.B \-Wdecl
+Warn about any non-\fBstatic\fR variable or function definition that has no
+previous declaration.
+
+Private symbols (functions and variables) internal to a given source file
+should use \fBstatic\fR, to allow additional compiler optimizations, allow
+detection of unused symbols, and prevent other code from relying on these
+internal symbols.  Public symbols used by other source files will need
+declarations visible to those other source files, such as in a header file.
+All declarations should fall into one of these two categories.  Thus, with
+\fB-Wdecl\fR, Sparse warns about any symbol definition with neither
+\fBstatic\fR nor a declaration.  To fix this warning, declare private symbols
+\fBstatic\fR, and ensure that the files defining public symbols have the
+symbol declarations available first (such as by including the appropriate
+header file).
+
+Sparse issues these warnings by default.  To turn them off, use
+\fB\-Wno\-decl\fR.
+.
+.TP
+.B \-Wdeclaration-after-statement
+Warn about declarations that are not at the start of a block.
+
+These declarations are permitted in C99 but not in C89.
+
+Sparse issues these warnings by default only when the C dialect is
+C89 (i.e. -ansi or -std=c89).  To turn them off, use
+\fB\-Wno\-declaration\-after\-statement\fR.
+.
+.TP
+.B \-Wdefault\-bitfield\-sign
+Warn about any bitfield with no explicit signedness.
+
+Bitfields have no standard-specified default signedness. (C99 6.7.2) A
+bitfield without an explicit \fBsigned\fR or \fBunsigned\fR creates a
+portability problem for software that relies on the available range of values.
+To fix this, specify the bitfield type as \fBsigned\fR or \fBunsigned\fR
+explicitly.
+
+Sparse does not issue these warnings by default.
+.
+.TP
+.B \-Wdesignated\-init
+Warn about positional initialization of structs marked as requiring designated
+initializers.
+
+Sparse allows an attribute
+.BI __attribute__((designated_init))
+which marks a struct as requiring designated initializers.  Sparse will warn
+about positional initialization of a struct variable or struct literal of a
+type that has this attribute.
+
+Requiring designated initializers for a particular struct type will insulate
+code using that struct type from changes to the layout of the type, avoiding
+the need to change initializers for that type unless they initialize a removed
+or incompatibly changed field.
+
+Common examples of this type of struct include collections of function pointers
+for the implementations of a class of related operations, for which the default
+NULL for an unmentioned field in a designated initializer will correctly
+indicate the absence of that operation.
+
+Sparse issues these warnings by default.  To turn them off, use
+\fB\-Wno\-designated\-init\fR.
+.
+.TP
+.B \-Wdo\-while
+Warn about do-while loops that do not delimit the loop body with braces.
+
+Sparse does not issue these warnings by default.
+.
+.TP
+.B \-Wenum\-mismatch
+Warn about the use of an expression of an incorrect \fBenum\fR type when
+initializing another \fBenum\fR type, assigning to another \fBenum\fR type, or
+passing an argument to a function which expects another \fBenum\fR type.
+
+Sparse issues these warnings by default.  To turn them off, use
+\fB\-Wno\-enum\-mismatch\fR.
+.
+.TP
+.B \-Wempty\-character\-constant
+Warn about a constant such as ''.
+
+Sparse issues these warnings by default.  To turn them off, use
+\fB\-Wno\-empty\-character\-constant\fR.
+.
+.TP
+.B \-Wexternal\-function\-has\-definition
+Warn about function definitions that are declared with external linkage.
+
+Sparse issues these warnings by default.  To turn them off, use
+\fB\-Wno\-external\-function\-has\-definition\fR.
+.
+.TP
+.B \-Winit\-cstring
+Warn about initialization of a char array with a too long constant C string.
+
+If the size of the char array and the length of the string are the same,
+there is no space for the last nul char of the string in the array:
+
+.nf
+char s[3] = "abc";
+.fi
+
+If the array is used as a byte array, not as C string, this
+warning is just noise. However, if the array is passed to functions
+dealing with C string like printf(%s) and strcmp, it may cause a
+trouble.
+
+Sparse does not issue these warnings by default.
+.
+.TP
+.B \-Wmemcpy\-max\-count
+Warn about call of \fBmemcpy()\fR, \fBmemset()\fR, \fBcopy_from_user()\fR, or
+\fBcopy_to_user()\fR with a large compile-time byte count.
+
+Sparse issues these warnings by default. To turn them off, use
+\fB\-Wno\-memcpy\-max\-count\fR.
+
+The limit can be changed with \fB\-fmemcpy\-max\-count=COUNT\fR,
+the default being \fB100000\fR.
+.
+.TP
+.B \-Wnon\-ansi\-function\-declaration
+Warn about non-ANSI function declarations.
+
+Sparse issues these warnings by default.  To turn them off, use
+\fB\-Wno\-non\-ansi\-function\-declaration\fR.
+.
+.TP
+.B \-Wnon\-pointer\-null
+Warn about the use of 0 as a NULL pointer.
+
+0 has integer type.  NULL has pointer type.
+
+Sparse issues these warnings by default.  To turn them off, use
+\fB\-Wno\-non\-pointer\-null\fR.
+.
+.TP
+.B \-Wold\-initializer
+Warn about the use of the pre-C99 GCC syntax for designated initializers.
+
+C99 provides a standard syntax for designated fields in \fBstruct\fR or
+\fBunion\fR initializers:
+
+.nf
+struct structname var = { .field = value };
+.fi
+
+GCC also has an old, non-standard syntax for designated initializers which
+predates C99:
+
+.nf
+struct structname var = { field: value };
+.fi
+
+Sparse will warn about the use of GCC's non-standard syntax for designated
+initializers.  To fix this warning, convert designated initializers to use the
+standard C99 syntax.
+
+Sparse issues these warnings by default.  To turn them off, use
+\fB\-Wno\-old\-initializer\fR.
+.
+.TP
+.B \-Wone\-bit\-signed\-bitfield
+Warn about any one-bit \fBsigned\fR bitfields.
+
+A one-bit \fBsigned\fR bitfield can only have the values 0 and -1, or with
+some compilers only 0; this results in unexpected behavior for programs which
+expected the ability to store 0 and 1.
+
+Sparse issues these warnings by default.  To turn them off, use
+\fB\-Wno\-one\-bit\-signed\-bitfield\fR.
+.
+.TP
+.B \-Wparen\-string
+Warn about the use of a parenthesized string to initialize an array.
+
+Standard C syntax does not permit a parenthesized string as an array
+initializer.  GCC allows this syntax as an extension.  With
+\fB\-Wparen\-string\fR, Sparse will warn about this syntax.
+
+Sparse does not issue these warnings by default.
+.
+.TP
+.B \-Wpointer\-arith
+Warn about anything that depends on the \fBsizeof\fR a void or function type.
+
+C99 does not allow the \fBsizeof\fR operator to be applied to function types
+or to incomplete types such as void. GCC allows \fBsizeof\fR to be applied to
+these types as an extension and assigns these types a size of \fI1\fR. With
+\fB\-pointer\-arith\fR, Sparse will warn about pointer arithmetic on void
+or function pointers, as well as expressions which directly apply the
+\fBsizeof\fR operator to void or function types.
+
+Sparse does not issue these warnings by default.
+.
+.TP
+.B \-Wptr\-subtraction\-blows
+Warn when subtracting two pointers to a type with a non-power-of-two size.
+
+Subtracting two pointers to a given type gives a difference in terms of the
+number of items of that type.  To generate this value, compilers will usually
+need to divide the difference by the size of the type, an potentially
+expensive operation for sizes other than powers of two.
+
+Code written using pointer subtraction can often use another approach instead,
+such as array indexing with an explicit array index variable, which may allow
+compilers to generate more efficient code.
+
+Sparse does not issue these warnings by default.
+.
+.TP
+.B \-Wreturn\-void
+Warn if a function with return type void returns a void expression.
+
+C99 permits this, and in some cases this allows for more generic code in
+macros that use typeof or take a type as a macro argument.  However, some
+programs consider this poor style, and those programs can use
+\fB\-Wreturn\-void\fR to get warnings about it.
+
+Sparse does not issue these warnings by default.
+.
+.TP
+.B \-Wshadow
+Warn when declaring a symbol which shadows a declaration with the same name in
+an outer scope.
+
+Such declarations can lead to error-prone code.
+
+Sparse does not issue these warnings by default.
+.
+.TP
+.B \-Wsizeof-bool
+Warn when checking the sizeof a _Bool.
+
+C99 does not specify the sizeof a _Bool.  gcc uses 1.
+
+Sparse does not issue these warnings by default.
+.
+.TP
+.B \-Wtransparent\-union
+Warn about any declaration using the GCC extension
+\fB__attribute__((transparent_union))\fR.
+
+Sparse issues these warnings by default.  To turn them off, use
+\fB\-Wno\-transparent\-union\fR.
+.
+.TP
+.B \-Wtypesign
+Warn when converting a pointer to an integer type into a pointer to an integer
+type with different signedness.
+
+Sparse does not issue these warnings by default.
+.
+.TP
+.B \-Wundef
+Warn about preprocessor conditionals that use the value of an undefined
+preprocessor symbol.
+
+Standard C (C99 6.10.1) permits using the value of an undefined preprocessor
+symbol in preprocessor conditionals, and specifies it has a value of 0.
+However, this behavior can lead to subtle errors.
+
+Sparse does not issue these warnings by default.
+.
+.SH MISC OPTIONS
+.TP
+.B \-gcc-base-dir \fIdir\fR
+Look for compiler-provided system headers in \fIdir\fR/include/ and \fIdir\fR/include-fixed/.
+.
+.TP
+.B \-multiarch-dir \fIdir\fR
+Look for system headers in the multiarch subdirectory \fIdir\fR.
+The \fIdir\fR name would normally take the form of the target's
+normalized GNU triplet. (e.g. i386-linux-gnu).
+.
+.SH DEBUG OPTIONS
+.TP
+.B \-fdump-linearize[=only]
+Dump the IR code of a function directly after its linearization,
+before any simplifications are made. If the argument \fB=only\fR is
+also given no further processing is done on the function.
+.
+.B \-fmem-report
+Report some statistics about memory allocation used by the tool.
+.
+.SH OTHER OPTIONS
+.TP
+.B \-fmemcpy-max-count=COUNT
+Set the limit for the warnings given by \fB-Wmemcpy-max-count\fR.
+A COUNT of 0, useless in itself, will effectively disable the warning.
+The default limit is 100000.
+.
+.TP
+.B \-ftabstop=WIDTH
+Set the distance between tab stops.  This helps sparse report correct
+column numbers in warnings or errors.  If the value is less than 1 or
+greater than 100, the option is ignored.  The default is 8.
+.
+.SH SEE ALSO
+.BR cgcc (1)
+.
+.SH HOMEPAGE
+http://www.kernel.org/pub/software/devel/sparse/
+.
+.SH MAILING LIST
+linux-sparse@vger.kernel.org
+.
+.SH MAINTAINER
+Christopher Li <sparse@chrisli.org>
--- /dev/null	Fri Dec 21 15:00:38 2018
+++ new/usr/src/tools/smatch/src/sparse.c	Fri Dec 21 15:00:38 2018
@@ -0,0 +1,308 @@
+/*
+ * Example trivial client program that uses the sparse library
+ * to tokenize, preprocess and parse a C file, and prints out
+ * the results.
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003-2004 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "token.h"
+#include "parse.h"
+#include "symbol.h"
+#include "expression.h"
+#include "linearize.h"
+
+static int context_increase(struct basic_block *bb, int entry)
+{
+	int sum = 0;
+	struct instruction *insn;
+
+	FOR_EACH_PTR(bb->insns, insn) {
+		int val;
+		if (insn->opcode != OP_CONTEXT)
+			continue;
+		val = insn->increment;
+		if (insn->check) {
+			int current = sum + entry;
+			if (!val) {
+				if (!current)
+					continue;
+			} else if (current >= val)
+				continue;
+			warning(insn->pos, "context check failure");
+			continue;
+		}
+		sum += val;
+	} END_FOR_EACH_PTR(insn);
+	return sum;
+}
+
+static int imbalance(struct entrypoint *ep, struct basic_block *bb, int entry, int exit, const char *why)
+{
+	if (Wcontext) {
+		struct symbol *sym = ep->name;
+		warning(bb->pos, "context imbalance in '%s' - %s", show_ident(sym->ident), why);
+	}
+	return -1;
+}
+
+static int check_bb_context(struct entrypoint *ep, struct basic_block *bb, int entry, int exit);
+
+static int check_children(struct entrypoint *ep, struct basic_block *bb, int entry, int exit)
+{
+	struct instruction *insn;
+	struct basic_block *child;
+
+	insn = last_instruction(bb->insns);
+	if (!insn)
+		return 0;
+	if (insn->opcode == OP_RET)
+		return entry != exit ? imbalance(ep, bb, entry, exit, "wrong count at exit") : 0;
+
+	FOR_EACH_PTR(bb->children, child) {
+		if (check_bb_context(ep, child, entry, exit))
+			return -1;
+	} END_FOR_EACH_PTR(child);
+	return 0;
+}
+
+static int check_bb_context(struct entrypoint *ep, struct basic_block *bb, int entry, int exit)
+{
+	if (!bb)
+		return 0;
+	if (bb->context == entry)
+		return 0;
+
+	/* Now that's not good.. */
+	if (bb->context >= 0)
+		return imbalance(ep, bb, entry, bb->context, "different lock contexts for basic block");
+
+	bb->context = entry;
+	entry += context_increase(bb, entry);
+	if (entry < 0)
+		return imbalance(ep, bb, entry, exit, "unexpected unlock");
+
+	return check_children(ep, bb, entry, exit);
+}
+
+static void check_cast_instruction(struct instruction *insn)
+{
+	struct symbol *orig_type = insn->orig_type;
+	if (orig_type) {
+		int old = orig_type->bit_size;
+		int new = insn->size;
+		int oldsigned = (orig_type->ctype.modifiers & MOD_SIGNED) != 0;
+		int newsigned = insn->opcode == OP_SCAST;
+
+		if (new > old) {
+			if (oldsigned == newsigned)
+				return;
+			if (newsigned)
+				return;
+			warning(insn->pos, "cast loses sign");
+			return;
+		}
+		if (new < old) {
+			warning(insn->pos, "cast drops bits");
+			return;
+		}
+		if (oldsigned == newsigned) {
+			warning(insn->pos, "cast wasn't removed");
+			return;
+		}
+		warning(insn->pos, "cast changes sign");
+	}
+}
+
+static void check_range_instruction(struct instruction *insn)
+{
+	warning(insn->pos, "value out of range");
+}
+
+static void check_byte_count(struct instruction *insn, pseudo_t count)
+{
+	if (!count)
+		return;
+	if (count->type == PSEUDO_VAL) {
+		unsigned long long val = count->value;
+		if (Wmemcpy_max_count && val > fmemcpy_max_count)
+			warning(insn->pos, "%s with byte count of %llu",
+				show_ident(insn->func->sym->ident), val);
+		return;
+	}
+	/* OK, we could try to do the range analysis here */
+}
+
+static pseudo_t argument(struct instruction *call, unsigned int argno)
+{
+	pseudo_t args[8];
+	struct ptr_list *arg_list = (struct ptr_list *) call->arguments;
+
+	argno--;
+	if (linearize_ptr_list(arg_list, (void *)args, 8) > argno)
+		return args[argno];
+	return NULL;
+}
+
+static void check_memset(struct instruction *insn)
+{
+	check_byte_count(insn, argument(insn, 3));
+}
+
+#define check_memcpy check_memset
+#define check_ctu check_memset
+#define check_cfu check_memset
+
+struct checkfn {
+	struct ident *id;
+	void (*check)(struct instruction *insn);
+};
+
+static void check_call_instruction(struct instruction *insn)
+{
+	pseudo_t fn = insn->func;
+	struct ident *ident;
+	static const struct checkfn check_fn[] = {
+		{ &memset_ident, check_memset },
+		{ &memcpy_ident, check_memcpy },
+		{ &copy_to_user_ident, check_ctu },
+		{ &copy_from_user_ident, check_cfu },
+	};
+	int i;
+
+	if (fn->type != PSEUDO_SYM)
+		return;
+	ident = fn->sym->ident;
+	if (!ident)
+		return;
+	for (i = 0; i < ARRAY_SIZE(check_fn); i++) {
+		if (check_fn[i].id != ident)
+			continue;
+		check_fn[i].check(insn);
+		break;
+	}
+}
+
+static void check_one_instruction(struct instruction *insn)
+{
+	switch (insn->opcode) {
+	case OP_CAST: case OP_SCAST:
+		if (verbose)
+			check_cast_instruction(insn);
+		break;
+	case OP_RANGE:
+		check_range_instruction(insn);
+		break;
+	case OP_CALL:
+		check_call_instruction(insn);
+		break;
+	default:
+		break;
+	}
+}
+
+static void check_bb_instructions(struct basic_block *bb)
+{
+	struct instruction *insn;
+	FOR_EACH_PTR(bb->insns, insn) {
+		if (!insn->bb)
+			continue;
+		check_one_instruction(insn);
+	} END_FOR_EACH_PTR(insn);
+}
+
+static void check_instructions(struct entrypoint *ep)
+{
+	struct basic_block *bb;
+	FOR_EACH_PTR(ep->bbs, bb) {
+		check_bb_instructions(bb);
+	} END_FOR_EACH_PTR(bb);
+}
+
+static void check_context(struct entrypoint *ep)
+{
+	struct symbol *sym = ep->name;
+	struct context *context;
+	unsigned int in_context = 0, out_context = 0;
+
+	if (Wuninitialized && verbose && ep->entry->bb->needs) {
+		pseudo_t pseudo;
+		FOR_EACH_PTR(ep->entry->bb->needs, pseudo) {
+			if (pseudo->type != PSEUDO_ARG)
+				warning(sym->pos, "%s: possible uninitialized variable (%s)",
+					show_ident(sym->ident), show_pseudo(pseudo));
+		} END_FOR_EACH_PTR(pseudo);
+	}
+
+	check_instructions(ep);
+
+	FOR_EACH_PTR(sym->ctype.contexts, context) {
+		in_context += context->in;
+		out_context += context->out;
+	} END_FOR_EACH_PTR(context);
+	check_bb_context(ep, ep->entry->bb, in_context, out_context);
+}
+
+static void check_symbols(struct symbol_list *list)
+{
+	struct symbol *sym;
+
+	FOR_EACH_PTR(list, sym) {
+		struct entrypoint *ep;
+
+		expand_symbol(sym);
+		ep = linearize_symbol(sym);
+		if (ep) {
+			if (dbg_entry)
+				show_entry(ep);
+
+			check_context(ep);
+		}
+	} END_FOR_EACH_PTR(sym);
+
+	if (Wsparse_error && die_if_error)
+		exit(1);
+}
+
+int main(int argc, char **argv)
+{
+	struct string_list *filelist = NULL;
+	char *file;
+
+	// Expand, linearize and show it.
+	check_symbols(sparse_initialize(argc, argv, &filelist));
+	FOR_EACH_PTR_NOTAG(filelist, file) {
+		check_symbols(sparse(file));
+	} END_FOR_EACH_PTR_NOTAG(file);
+
+	report_stats();
+	return 0;
+}
--- /dev/null	Fri Dec 21 15:00:38 2018
+++ new/usr/src/tools/smatch/src/sparse.pc.in	Fri Dec 21 15:00:38 2018
@@ -0,0 +1,9 @@
+prefix=@prefix@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: Sparse
+Description: Semantic parser for C
+Version: @version@
+Libs: -L${libdir} -lsparse
+Cflags: -I${includedir}
--- /dev/null	Fri Dec 21 15:00:38 2018
+++ new/usr/src/tools/smatch/src/sparsec	Fri Dec 21 15:00:38 2018
@@ -0,0 +1,54 @@
+#!/bin/sh
+#
+# GCC compatible C compiler based on Sparse LLVM
+
+set +e
+
+SPARSEOPTS=""
+DIRNAME=`dirname $0`
+
+NEED_LINK=1
+
+if [ $# -eq 0 ]; then
+  echo "`basename $0`: no input files"
+  exit 1
+fi
+
+while [ $# -gt 0 ]; do
+	case $1 in
+	'-o')
+		OUTFILE=$2
+		shift
+		;;
+	'-c')
+		NEED_LINK=0
+		;;
+	*)
+		SPARSEOPTS="$SPARSEOPTS $1 " ;;
+	esac
+	shift
+done
+
+TMPLLVM=`mktemp -t tmp.XXXXXX`".llvm"
+TMPFILE=`mktemp -t tmp.XXXXXX`".o"
+
+$DIRNAME/sparse-llvm $SPARSEOPTS > $TMPLLVM
+
+LLC=`"${LLVM_CONFIG:-llvm-config}" --bindir`/llc
+
+$LLC -o - $TMPLLVM | as -o $TMPFILE
+
+if [ $NEED_LINK -eq 1 ]; then
+	if [ -z $OUTFILE ]; then
+		OUTFILE=a.out
+	fi
+	gcc $TMPFILE -o $OUTFILE
+else
+	if [ -z $OUTFILE ]; then
+		echo "`basename $0`: no output file"
+		exit 1
+	fi
+	mv $TMPFILE $OUTFILE
+fi
+
+rm -f $TMPLLVM
--- /dev/null	Fri Dec 21 15:00:38 2018
+++ new/usr/src/tools/smatch/src/sparsei	Fri Dec 21 15:00:38 2018
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+set +e
+
+DIRNAME=`dirname $0`
+LLI=`"${LLVM_CONFIG:-llvm-config}" --bindir`/lli
+
+if [ $# -eq 0 ]; then
+  echo "`basename $0`: no input files"
+  exit 1
+fi
+
+$DIRNAME/sparse-llvm $@ | $LLI
--- /dev/null	Fri Dec 21 15:00:38 2018
+++ new/usr/src/tools/smatch/src/stats.c	Fri Dec 21 15:00:38 2018
@@ -0,0 +1,62 @@
+#include <stdio.h>
+#include "allocate.h"
+#include "linearize.h"
+#include "storage.h"
+
+__DECLARE_ALLOCATOR(struct ptr_list, ptrlist);
+
+
+typedef void (*get_t)(struct allocator_stats*);
+
+static void show_stats(get_t get, struct allocator_stats * tot)
+{
+	struct allocator_stats x;
+
+	if (get)
+		get(&x);
+	else
+		x = *tot;
+	fprintf(stderr, "%16s: %8d, %10ld, %10ld, %6.2f%%, %8.2f\n",
+		x.name, x.allocations, x.useful_bytes, x.total_bytes,
+		100 * (double) x.useful_bytes / (x.total_bytes ? : 1),
+		(double) x.useful_bytes / (x.allocations ? : 1));
+
+	tot->allocations += x.allocations;
+	tot->useful_bytes += x.useful_bytes;
+	tot->total_bytes += x.total_bytes;
+}
+
+void show_allocation_stats(void)
+{
+	struct allocator_stats tot = { .name = "total", };
+
+	fprintf(stderr, "%16s: %8s, %10s, %10s, %7s, %8s\n", "allocator", "allocs",
+		"bytes", "total", "%usage", "average");
+	show_stats(get_token_stats, &tot);
+	show_stats(get_ident_stats, &tot);
+	show_stats(get_symbol_stats, &tot);
+	show_stats(get_expression_stats, &tot);
+	show_stats(get_statement_stats, &tot);
+	show_stats(get_scope_stats, &tot);
+	show_stats(get_basic_block_stats, &tot);
+	show_stats(get_instruction_stats, &tot);
+	show_stats(get_pseudo_stats, &tot);
+	show_stats(get_pseudo_user_stats, &tot);
+	show_stats(get_ptrlist_stats, &tot);
+	show_stats(get_multijmp_stats, &tot);
+	show_stats(get_asm_rules_stats, &tot);
+	show_stats(get_asm_constraint_stats, &tot);
+	show_stats(get_context_stats, &tot);
+	show_stats(get_string_stats, &tot);
+	show_stats(get_bytes_stats, &tot);
+	//show_stats(get_storage_stats, &tot);
+	//show_stats(get_storage_hash_stats, &tot);
+
+	show_stats(NULL, &tot);
+}
+
+void report_stats(void)
+{
+	if (fmem_report)
+		show_allocation_stats();
+}
--- /dev/null	Fri Dec 21 15:00:38 2018
+++ new/usr/src/tools/smatch/src/storage.c	Fri Dec 21 15:00:38 2018
@@ -0,0 +1,307 @@
+/*
+ * Storage - associate pseudos with "storage" that keeps them alive
+ * between basic blocks.  The aim is to be able to turn as much of
+ * the global storage allocation problem as possible into a local
+ * per-basic-block one.
+ *
+ * Copyright (C) 2004 Linus Torvalds
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+
+#include "symbol.h"
+#include "expression.h"
+#include "linearize.h"
+#include "storage.h"
+
+ALLOCATOR(storage, "storages");
+ALLOCATOR(storage_hash, "storage hash");
+
+#define MAX_STORAGE_HASH 64
+static struct storage_hash_list *storage_hash_table[MAX_STORAGE_HASH];
+
+static inline unsigned int storage_hash(struct basic_block *bb, pseudo_t pseudo, enum inout_enum inout)
+{
+	unsigned hash = hashval(bb) + hashval(pseudo) + hashval(inout);
+	hash += hash / MAX_STORAGE_HASH;
+	return hash & (MAX_STORAGE_HASH-1);
+}
+
+static int hash_list_cmp(const void *_a, const void *_b)
+{
+	const struct storage_hash *a = _a;
+	const struct storage_hash *b = _b;
+	if (a->pseudo != b->pseudo)
+		return a->pseudo < b->pseudo ? -1 : 1;
+	return 0;
+}
+
+static void sort_hash_list(struct storage_hash_list **listp)
+{
+	sort_list((struct ptr_list **)listp, hash_list_cmp);
+}
+
+struct storage_hash_list *gather_storage(struct basic_block *bb, enum inout_enum inout)
+{
+	int i;
+	struct storage_hash *entry, *prev;
+	struct storage_hash_list *list = NULL;
+
+	for (i = 0; i < MAX_STORAGE_HASH; i++) {
+		struct storage_hash *hash;
+		FOR_EACH_PTR(storage_hash_table[i], hash) {
+			if (hash->bb == bb && hash->inout == inout)
+				add_ptr_list(&list, hash);
+		} END_FOR_EACH_PTR(hash);
+	}
+	sort_hash_list(&list);
+
+	prev = NULL;
+	FOR_EACH_PTR(list, entry) {
+		if (prev && entry->pseudo == prev->pseudo) {
+			assert(entry == prev);
+			DELETE_CURRENT_PTR(entry);
+		}
+		prev = entry;
+	} END_FOR_EACH_PTR(entry);
+	PACK_PTR_LIST(&list);
+	return list;
+}
+
+static void name_storage(void)
+{
+	int i;
+	int name = 0;
+
+	for (i = 0; i < MAX_STORAGE_HASH; i++) {
+		struct storage_hash *hash;
+		FOR_EACH_PTR(storage_hash_table[i], hash) {
+			struct storage *storage = hash->storage;
+			if (storage->name)
+				continue;
+			storage->name = ++name;
+		} END_FOR_EACH_PTR(hash);
+	}
+}
+
+struct storage *lookup_storage(struct basic_block *bb, pseudo_t pseudo, enum inout_enum inout)
+{
+	struct storage_hash_list *list = storage_hash_table[storage_hash(bb,pseudo,inout)];
+	struct storage_hash *hash;
+
+	FOR_EACH_PTR(list, hash) {
+		if (hash->bb == bb && hash->pseudo == pseudo && hash->inout == inout)
+			return hash->storage;
+	} END_FOR_EACH_PTR(hash);
+	return NULL;
+}
+
+void add_storage(struct storage *storage, struct basic_block *bb, pseudo_t pseudo, enum inout_enum inout)
+{
+	struct storage_hash_list **listp = storage_hash_table + storage_hash(bb,pseudo,inout);
+	struct storage_hash *hash = alloc_storage_hash(storage);
+
+	hash->bb = bb;
+	hash->pseudo = pseudo;
+	hash->inout = inout;
+
+	add_ptr_list(listp, hash);
+}
+
+
+static int storage_hash_cmp(const void *_a, const void *_b)
+{
+	const struct storage_hash *a = _a;
+	const struct storage_hash *b = _b;
+	struct storage *aa = a->storage;
+	struct storage *bb = b->storage;
+
+	if (a->bb != b->bb)
+		return a->bb < b->bb ? -1 : 1;
+	if (a->inout != b->inout)
+		return a->inout < b->inout ? -1 : 1;
+	if (aa->type != bb->type)
+		return aa->type < bb->type ? -1 : 1;
+	if (aa->regno != bb->regno)
+		return aa->regno < bb->regno ? -1 : 1;
+	return 0;
+}
+
+static void vrfy_storage(struct storage_hash_list **listp)
+{
+	struct storage_hash *entry, *last;
+
+	sort_list((struct ptr_list **)listp, storage_hash_cmp);
+	last = NULL;
+	FOR_EACH_PTR(*listp, entry) {
+		if (last) {
+			struct storage *a = last->storage;
+			struct storage *b = entry->storage;
+			if (a == b)
+				continue;
+			if (last->bb == entry->bb
+			    && last->inout == entry->inout
+			    && a->type != REG_UDEF
+			    && a->type == b->type
+			    && a->regno == b->regno) {
+				printf("\t BAD: same storage as %s in %p: %s (%s and %s)\n",
+					last->inout == STOR_IN ? "input" : "output",
+					last->bb,
+					show_storage(a),
+					show_pseudo(last->pseudo),
+					show_pseudo(entry->pseudo));
+			}
+		}
+		last = entry;
+	} END_FOR_EACH_PTR(entry);
+}
+
+void free_storage(void)
+{
+	int i;
+
+	for (i = 0; i < MAX_STORAGE_HASH; i++) {
+		vrfy_storage(storage_hash_table + i);
+		free_ptr_list(storage_hash_table + i);
+	}
+}
+
+const char *show_storage(struct storage *s)
+{
+	static char buffer[1024];
+	if (!s)
+		return "none";
+	switch (s->type) {
+	case REG_REG:
+		sprintf(buffer, "reg%d (%d)", s->regno, s->name);
+		break;
+	case REG_STACK:
+		sprintf(buffer, "%d(SP) (%d)", s->offset, s->name);
+		break;
+	case REG_ARG:
+		sprintf(buffer, "ARG%d (%d)", s->regno, s->name);
+		break;
+	default:
+		sprintf(buffer, "%d:%d (%d)", s->type, s->regno, s->name);
+		break;
+	}
+	return buffer;
+}
+
+/*
+ * Combine two storage allocations into one.
+ *
+ * We just randomly pick one over the other, and replace
+ * the other uses.
+ */
+static struct storage * combine_storage(struct storage *src, struct storage *dst)
+{
+	struct storage **usep;
+
+	/* Remove uses of "src_storage", replace with "dst" */
+	FOR_EACH_PTR(src->users, usep) {
+		assert(*usep == src);
+		*usep = dst;
+		add_ptr_list(&dst->users, usep);
+	} END_FOR_EACH_PTR(usep);
+
+	/* Mark it unused */
+	src->type = REG_BAD;
+	src->users = NULL;
+	return dst;
+}
+
+static void set_up_bb_storage(struct basic_block *bb)
+{
+	struct basic_block *child;
+
+	FOR_EACH_PTR(bb->children, child) {
+		pseudo_t pseudo;
+		FOR_EACH_PTR(child->needs, pseudo) {
+			struct storage *child_in, *parent_out;
+
+			parent_out = lookup_storage(bb, pseudo, STOR_OUT);
+			child_in = lookup_storage(child, pseudo, STOR_IN);
+
+			if (parent_out) {
+				if (!child_in) {
+					add_storage(parent_out, child, pseudo, STOR_IN);
+					continue;
+				}
+				if (parent_out == child_in)
+					continue;
+				combine_storage(parent_out, child_in);
+				continue;
+			}
+			if (child_in) {
+				add_storage(child_in, bb, pseudo, STOR_OUT);
+				continue;
+			}
+			parent_out = alloc_storage();
+			add_storage(parent_out, bb, pseudo, STOR_OUT);
+			add_storage(parent_out, child, pseudo, STOR_IN);
+		} END_FOR_EACH_PTR(pseudo);
+	} END_FOR_EACH_PTR(child);
+}
+
+static void set_up_argument_storage(struct entrypoint *ep, struct basic_block *bb)
+{
+	pseudo_t arg;
+
+	FOR_EACH_PTR(bb->needs, arg) {
+		struct storage *storage = alloc_storage();
+
+		/* FIXME! Totally made-up argument passing conventions */
+		if (arg->type == PSEUDO_ARG) {
+			storage->type = REG_ARG;
+			storage->regno = arg->nr;
+		}
+		add_storage(storage, bb, arg, STOR_IN);
+	} END_FOR_EACH_PTR(arg);
+}
+
+/*
+ * One phi-source may feed multiple phi nodes. If so, combine
+ * the storage output for this bb into one entry to reduce
+ * storage pressure.
+ */
+static void combine_phi_storage(struct basic_block *bb)
+{
+	struct instruction *insn;
+	FOR_EACH_PTR(bb->insns, insn) {
+		struct instruction *phi;
+		struct storage *last;
+
+		if (!insn->bb || insn->opcode != OP_PHISOURCE)
+			continue;
+		last = NULL;
+		FOR_EACH_PTR(insn->phi_users, phi) {
+			struct storage *storage = lookup_storage(bb, phi->target, STOR_OUT);
+			if (!storage) {
+				DELETE_CURRENT_PTR(phi);
+				continue;
+			}
+			if (last && storage != last)
+				storage = combine_storage(storage, last);
+			last = storage;
+		} END_FOR_EACH_PTR(phi);
+		PACK_PTR_LIST(&insn->phi_users);
+	} END_FOR_EACH_PTR(insn);
+}
+
+void set_up_storage(struct entrypoint *ep)
+{
+	struct basic_block *bb;
+
+	/* First set up storage for the incoming arguments */
+	set_up_argument_storage(ep, ep->entry->bb);
+
+	/* Then do a list of all the inter-bb storage */
+	FOR_EACH_PTR(ep->bbs, bb) {
+		set_up_bb_storage(bb);
+		combine_phi_storage(bb);
+	} END_FOR_EACH_PTR(bb);
+
+	name_storage();
+}
--- /dev/null	Fri Dec 21 15:00:38 2018
+++ new/usr/src/tools/smatch/src/storage.h	Fri Dec 21 15:00:38 2018
@@ -0,0 +1,79 @@
+#ifndef STORAGE_H
+#define STORAGE_H
+
+#include "allocate.h"
+#include "lib.h"
+
+/*
+ * The "storage" that underlies an incoming/outgoing pseudo. It's
+ * basically the backing store for a pseudo, and may be a real hardware
+ * register, a stack slot or a static symbol. Or nothing at all,
+ * since some pseudos can just be recalculated on the fly.
+ */
+enum storage_type {
+	REG_UDEF,
+	REG_REG,
+	REG_STACK,
+	REG_FRAME,
+	REG_SYM,
+	REG_ARG,
+	REG_BAD,
+};
+
+enum inout_enum {
+	STOR_IN,
+	STOR_OUT
+};
+
+struct storage;
+DECLARE_PTR_LIST(storage_ptr_list, struct storage *);
+
+struct storage {
+	enum storage_type type;
+	int name;
+	struct storage_ptr_list *users;
+	union {
+		int regno;
+		int offset;
+		struct symbol *sym;
+	};
+};
+
+DECLARE_PTR_LIST(storage_list, struct storage);
+
+struct storage_hash {
+	struct basic_block *bb;
+	pseudo_t pseudo;
+	enum inout_enum inout;
+	struct storage *storage;
+	unsigned long flags;
+};
+
+DECLARE_PTR_LIST(storage_hash_list, struct storage_hash);
+
+extern struct storage_hash_list *gather_storage(struct basic_block *, enum inout_enum);
+extern void free_storage(void);
+extern const char *show_storage(struct storage *);
+extern void set_up_storage(struct entrypoint *);
+struct storage *lookup_storage(struct basic_block *, pseudo_t, enum inout_enum);
+void add_storage(struct storage *, struct basic_block *, pseudo_t, enum inout_enum);
+
+DECLARE_ALLOCATOR(storage);
+DECLARE_ALLOCATOR(storage_hash);
+
+static inline struct storage *alloc_storage(void)
+{
+	return __alloc_storage(0);
+}
+
+static inline struct storage_hash *alloc_storage_hash(struct storage *s)
+{
+	struct storage_hash *entry = __alloc_storage_hash(0);
+	struct storage **usep = &entry->storage;
+
+	*usep = s;
+	add_ptr_list(&s->users, usep);
+	return entry;
+}
+
+#endif /* STORAGE_H */
--- /dev/null	Fri Dec 21 15:00:38 2018
+++ new/usr/src/tools/smatch/src/symbol.c	Fri Dec 21 15:00:38 2018
@@ -0,0 +1,776 @@
+/*
+ * Symbol lookup and handling.
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003-2004 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "token.h"
+#include "parse.h"
+#include "symbol.h"
+#include "scope.h"
+#include "expression.h"
+
+#include "target.h"
+
+/*
+ * Secondary symbol list for stuff that needs to be output because it
+ * was used. 
+ */
+struct symbol_list *translation_unit_used_list = NULL;
+
+/*
+ * If the symbol is an inline symbol, add it to the list of symbols to parse
+ */
+void access_symbol(struct symbol *sym)
+{
+	if (sym->ctype.modifiers & MOD_INLINE) {
+		if (!(sym->ctype.modifiers & MOD_ACCESSED)) {
+			add_symbol(&translation_unit_used_list, sym);
+			sym->ctype.modifiers |= MOD_ACCESSED;
+		}
+	}
+}
+
+struct symbol *lookup_symbol(struct ident *ident, enum namespace ns)
+{
+	struct symbol *sym;
+
+	for (sym = ident->symbols; sym; sym = sym->next_id) {
+		if (sym->namespace & ns) {
+			sym->used = 1;
+			return sym;
+		}
+	}
+	return NULL;
+}
+
+struct context *alloc_context(void)
+{
+	return __alloc_context(0);
+}
+
+struct symbol *alloc_symbol(struct position pos, int type)
+{
+	struct symbol *sym = __alloc_symbol(0);
+	sym->type = type;
+	sym->pos = pos;
+	sym->endpos.type = 0;
+	return sym;
+}
+
+struct struct_union_info {
+	unsigned long max_align;
+	unsigned long bit_size;
+	int align_size;
+};
+
+/*
+ * Unions are fairly easy to lay out ;)
+ */
+static void lay_out_union(struct symbol *sym, struct struct_union_info *info)
+{
+	examine_symbol_type(sym);
+
+	// Unnamed bitfields do not affect alignment.
+	if (sym->ident || !is_bitfield_type(sym)) {
+		if (sym->ctype.alignment > info->max_align)
+			info->max_align = sym->ctype.alignment;
+	}
+
+	if (sym->bit_size > info->bit_size)
+		info->bit_size = sym->bit_size;
+
+	sym->offset = 0;
+}
+
+static int bitfield_base_size(struct symbol *sym)
+{
+	if (sym->type == SYM_NODE)
+		sym = sym->ctype.base_type;
+	if (sym->type == SYM_BITFIELD)
+		sym = sym->ctype.base_type;
+	return sym->bit_size;
+}
+
+/*
+ * Structures are a bit more interesting to lay out
+ */
+static void lay_out_struct(struct symbol *sym, struct struct_union_info *info)
+{
+	unsigned long bit_size, align_bit_mask;
+	int base_size;
+
+	examine_symbol_type(sym);
+
+	// Unnamed bitfields do not affect alignment.
+	if (sym->ident || !is_bitfield_type(sym)) {
+		if (sym->ctype.alignment > info->max_align)
+			info->max_align = sym->ctype.alignment;
+	}
+
+	bit_size = info->bit_size;
+	base_size = sym->bit_size; 
+
+	/*
+	 * Unsized arrays cause us to not align the resulting
+	 * structure size
+	 */
+	if (base_size < 0) {
+		info->align_size = 0;
+		base_size = 0;
+	}
+
+	align_bit_mask = bytes_to_bits(sym->ctype.alignment) - 1;
+
+	/*
+	 * Bitfields have some very special rules..
+	 */
+	if (is_bitfield_type (sym)) {
+		unsigned long bit_offset = bit_size & align_bit_mask;
+		int room = bitfield_base_size(sym) - bit_offset;
+		// Zero-width fields just fill up the unit.
+		int width = base_size ? : (bit_offset ? room : 0);
+
+		if (width > room) {
+			bit_size = (bit_size + align_bit_mask) & ~align_bit_mask;
+			bit_offset = 0;
+		}
+		sym->offset = bits_to_bytes(bit_size - bit_offset);
+		sym->bit_offset = bit_offset;
+		sym->ctype.base_type->bit_offset = bit_offset;
+		info->bit_size = bit_size + width;
+		// warning (sym->pos, "bitfield: offset=%d:%d  size=:%d", sym->offset, sym->bit_offset, width);
+
+		return;
+	}
+
+	/*
+	 * Otherwise, just align it right and add it up..
+	 */
+	bit_size = (bit_size + align_bit_mask) & ~align_bit_mask;
+	sym->offset = bits_to_bytes(bit_size);
+
+	info->bit_size = bit_size + base_size;
+	// warning (sym->pos, "regular: offset=%d", sym->offset);
+}
+
+static struct symbol * examine_struct_union_type(struct symbol *sym, int advance)
+{
+	struct struct_union_info info = {
+		.max_align = 1,
+		.bit_size = 0,
+		.align_size = 1
+	};
+	unsigned long bit_size, bit_align;
+	void (*fn)(struct symbol *, struct struct_union_info *);
+	struct symbol *member;
+
+	fn = advance ? lay_out_struct : lay_out_union;
+	FOR_EACH_PTR(sym->symbol_list, member) {
+		fn(member, &info);
+	} END_FOR_EACH_PTR(member);
+
+	if (!sym->ctype.alignment)
+		sym->ctype.alignment = info.max_align;
+	bit_size = info.bit_size;
+	if (info.align_size) {
+		bit_align = bytes_to_bits(sym->ctype.alignment)-1;
+		bit_size = (bit_size + bit_align) & ~bit_align;
+	}
+	sym->bit_size = bit_size;
+	return sym;
+}
+
+static struct symbol *examine_base_type(struct symbol *sym)
+{
+	struct symbol *base_type;
+
+	/* Check the base type */
+	base_type = examine_symbol_type(sym->ctype.base_type);
+	if (!base_type || base_type->type == SYM_PTR)
+		return base_type;
+	sym->ctype.as |= base_type->ctype.as;
+	sym->ctype.modifiers |= base_type->ctype.modifiers & MOD_PTRINHERIT;
+	concat_ptr_list((struct ptr_list *)base_type->ctype.contexts,
+			(struct ptr_list **)&sym->ctype.contexts);
+	if (base_type->type == SYM_NODE) {
+		base_type = base_type->ctype.base_type;
+		sym->ctype.base_type = base_type;
+	}
+	return base_type;
+}
+
+static struct symbol * examine_array_type(struct symbol *sym)
+{
+	struct symbol *base_type = examine_base_type(sym);
+	unsigned long bit_size = -1, alignment;
+	struct expression *array_size = sym->array_size;
+
+	if (!base_type)
+		return sym;
+
+	if (array_size) {	
+		bit_size = array_element_offset(base_type->bit_size,
+						get_expression_value_silent(array_size));
+		if (array_size->type != EXPR_VALUE) {
+			if (Wvla)
+				warning(array_size->pos, "Variable length array is used.");
+			bit_size = -1;
+		}
+	}
+	alignment = base_type->ctype.alignment;
+	if (!sym->ctype.alignment)
+		sym->ctype.alignment = alignment;
+	sym->bit_size = bit_size;
+	return sym;
+}
+
+static struct symbol *examine_bitfield_type(struct symbol *sym)
+{
+	struct symbol *base_type = examine_base_type(sym);
+	unsigned long bit_size, alignment, modifiers;
+
+	if (!base_type)
+		return sym;
+	bit_size = base_type->bit_size;
+	if (sym->bit_size > bit_size)
+		warning(sym->pos, "impossible field-width, %d, for this type",  sym->bit_size);
+
+	alignment = base_type->ctype.alignment;
+	if (!sym->ctype.alignment)
+		sym->ctype.alignment = alignment;
+	modifiers = base_type->ctype.modifiers;
+
+	/* Bitfields are unsigned, unless the base type was explicitly signed */
+	if (!(modifiers & MOD_EXPLICITLY_SIGNED))
+		modifiers = (modifiers & ~MOD_SIGNED) | MOD_UNSIGNED;
+	sym->ctype.modifiers |= modifiers & MOD_SIGNEDNESS;
+	return sym;
+}
+
+/*
+ * "typeof" will have to merge the types together
+ */
+void merge_type(struct symbol *sym, struct symbol *base_type)
+{
+	sym->ctype.as |= base_type->ctype.as;
+	sym->ctype.modifiers |= (base_type->ctype.modifiers & ~MOD_STORAGE);
+	concat_ptr_list((struct ptr_list *)base_type->ctype.contexts,
+	                (struct ptr_list **)&sym->ctype.contexts);
+	sym->ctype.base_type = base_type->ctype.base_type;
+	if (sym->ctype.base_type->type == SYM_NODE)
+		merge_type(sym, sym->ctype.base_type);
+}
+
+static int count_array_initializer(struct symbol *t, struct expression *expr)
+{
+	int nr = 0;
+	int is_char = 0;
+
+	/*
+	 * Arrays of character types are special; they can be initialized by
+	 * string literal _or_ by string literal in braces.  The latter means
+	 * that with T x[] = {<string literal>} number of elements in x depends
+	 * on T - if it's a character type, we get the length of string literal
+	 * (including NUL), otherwise we have one element here.
+	 */
+	if (t->ctype.base_type == &int_type && t->ctype.modifiers & MOD_CHAR)
+		is_char = 1;
+
+	switch (expr->type) {
+	case EXPR_INITIALIZER: {
+		struct expression *entry;
+		int count = 0;
+		int str_len = 0;
+		FOR_EACH_PTR(expr->expr_list, entry) {
+			count++;
+			switch (entry->type) {
+			case EXPR_INDEX:
+				if (entry->idx_to >= nr)
+					nr = entry->idx_to+1;
+				break;
+			case EXPR_PREOP: {
+				struct expression *e = entry;
+				if (is_char) {
+					while (e && e->type == EXPR_PREOP && e->op == '(')
+						e = e->unop;
+					if (e && e->type == EXPR_STRING) {
+						entry = e;
+			case EXPR_STRING:
+						if (is_char)
+							str_len = entry->string->length;
+					}
+
+
+				}
+			}
+			default:
+				nr++;
+			}
+		} END_FOR_EACH_PTR(entry);
+		if (count == 1 && str_len)
+			nr = str_len;
+		break;
+	}
+	case EXPR_PREOP:
+		if (is_char) { 
+			struct expression *e = expr;
+			while (e && e->type == EXPR_PREOP && e->op == '(')
+				e = e->unop;
+			if (e && e->type == EXPR_STRING) {
+				expr = e;
+	case EXPR_STRING:
+				if (is_char)
+					nr = expr->string->length;
+			}
+		}
+		break;
+	default:
+		break;
+	}
+	return nr;
+}
+
+static struct expression *get_symbol_initializer(struct symbol *sym)
+{
+	do {
+		if (sym->initializer)
+			return sym->initializer;
+	} while ((sym = sym->same_symbol) != NULL);
+	return NULL;
+}
+
+static struct symbol * examine_node_type(struct symbol *sym)
+{
+	struct symbol *base_type = examine_base_type(sym);
+	int bit_size;
+	unsigned long alignment;
+
+	/* SYM_NODE - figure out what the type of the node was.. */
+	bit_size = 0;
+	alignment = 0;
+	if (!base_type)
+		return sym;
+
+	bit_size = base_type->bit_size;
+	alignment = base_type->ctype.alignment;
+
+	/* Pick up signedness information into the node */
+	sym->ctype.modifiers |= (MOD_SIGNEDNESS & base_type->ctype.modifiers);
+
+	if (!sym->ctype.alignment)
+		sym->ctype.alignment = alignment;
+
+	/* Unsized array? The size might come from the initializer.. */
+	if (bit_size < 0 && base_type->type == SYM_ARRAY) {
+		struct expression *initializer = get_symbol_initializer(sym);
+		if (initializer) {
+			struct symbol *node_type = base_type->ctype.base_type;
+			int count = count_array_initializer(node_type, initializer);
+
+			if (node_type && node_type->bit_size >= 0)
+				bit_size = array_element_offset(node_type->bit_size, count);
+		}
+	}
+	
+	sym->bit_size = bit_size;
+	return sym;
+}
+
+static struct symbol *examine_enum_type(struct symbol *sym)
+{
+	struct symbol *base_type = examine_base_type(sym);
+
+	sym->ctype.modifiers |= (base_type->ctype.modifiers & MOD_SIGNEDNESS);
+	sym->bit_size = bits_in_enum;
+	if (base_type->bit_size > sym->bit_size)
+		sym->bit_size = base_type->bit_size;
+	sym->ctype.alignment = enum_alignment;
+	if (base_type->ctype.alignment > sym->ctype.alignment)
+		sym->ctype.alignment = base_type->ctype.alignment;
+	return sym;
+}
+
+static struct symbol *examine_pointer_type(struct symbol *sym)
+{
+	/*
+	 * We need to set the pointer size first, and
+	 * examine the thing we point to only afterwards.
+	 * That's because this pointer type may end up
+	 * being needed for the base type size evaluation.
+	 */
+	if (!sym->bit_size)
+		sym->bit_size = bits_in_pointer;
+	if (!sym->ctype.alignment)
+		sym->ctype.alignment = pointer_alignment;
+	return sym;
+}
+
+/*
+ * Fill in type size and alignment information for
+ * regular SYM_TYPE things.
+ */
+struct symbol *examine_symbol_type(struct symbol * sym)
+{
+	if (!sym)
+		return sym;
+
+	/* Already done? */
+	if (sym->examined)
+		return sym;
+	sym->examined = 1;
+
+	switch (sym->type) {
+	case SYM_FN:
+	case SYM_NODE:
+		return examine_node_type(sym);
+	case SYM_ARRAY:
+		return examine_array_type(sym);
+	case SYM_STRUCT:
+		return examine_struct_union_type(sym, 1);
+	case SYM_UNION:
+		return examine_struct_union_type(sym, 0);
+	case SYM_PTR:
+		return examine_pointer_type(sym);
+	case SYM_ENUM:
+		return examine_enum_type(sym);
+	case SYM_BITFIELD:
+		return examine_bitfield_type(sym);
+	case SYM_BASETYPE:
+		/* Size and alignment had better already be set up */
+		return sym;
+	case SYM_TYPEOF: {
+		struct symbol *base = evaluate_expression(sym->initializer);
+		if (base) {
+			unsigned long mod = 0;
+
+			if (is_bitfield_type(base))
+				warning(base->pos, "typeof applied to bitfield type");
+			if (base->type == SYM_NODE) {
+				mod |= base->ctype.modifiers & MOD_TYPEOF;
+				base = base->ctype.base_type;
+			}
+			sym->type = SYM_NODE;
+			sym->ctype.modifiers = mod;
+			sym->ctype.base_type = base;
+			return examine_node_type(sym);
+		}
+		break;
+	}
+	case SYM_PREPROCESSOR:
+		sparse_error(sym->pos, "ctype on preprocessor command? (%s)", show_ident(sym->ident));
+		return NULL;
+	case SYM_UNINITIALIZED:
+//		sparse_error(sym->pos, "ctype on uninitialized symbol %p", sym);
+		return NULL;
+	case SYM_RESTRICT:
+		examine_base_type(sym);
+		return sym;
+	case SYM_FOULED:
+		examine_base_type(sym);
+		return sym;
+	default:
+//		sparse_error(sym->pos, "Examining unknown symbol type %d", sym->type);
+		break;
+	}
+	return sym;
+}
+
+const char* get_type_name(enum type type)
+{
+	const char *type_lookup[] = {
+	[SYM_UNINITIALIZED] = "uninitialized",
+	[SYM_PREPROCESSOR] = "preprocessor",
+	[SYM_BASETYPE] = "basetype",
+	[SYM_NODE] = "node",
+	[SYM_PTR] = "pointer",
+	[SYM_FN] = "function",
+	[SYM_ARRAY] = "array",
+	[SYM_STRUCT] = "struct",
+	[SYM_UNION] = "union",
+	[SYM_ENUM] = "enum",
+	[SYM_TYPEDEF] = "typedef",
+	[SYM_TYPEOF] = "typeof",
+	[SYM_MEMBER] = "member",
+	[SYM_BITFIELD] = "bitfield",
+	[SYM_LABEL] = "label",
+	[SYM_RESTRICT] = "restrict",
+	[SYM_FOULED] = "fouled",
+	[SYM_KEYWORD] = "keyword",
+	[SYM_BAD] = "bad"};
+
+	if (type <= SYM_BAD)
+		return type_lookup[type];
+	else
+		return NULL;
+}
+
+struct symbol *examine_pointer_target(struct symbol *sym)
+{
+	return examine_base_type(sym);
+}
+
+static struct symbol_list *restr, *fouled;
+
+void create_fouled(struct symbol *type)
+{
+	if (type->bit_size < bits_in_int) {
+		struct symbol *new = alloc_symbol(type->pos, type->type);
+		*new = *type;
+		new->bit_size = bits_in_int;
+		new->type = SYM_FOULED;
+		new->ctype.base_type = type;
+		add_symbol(&restr, type);
+		add_symbol(&fouled, new);
+	}
+}
+
+struct symbol *befoul(struct symbol *type)
+{
+	struct symbol *t1, *t2;
+	while (type->type == SYM_NODE)
+		type = type->ctype.base_type;
+	PREPARE_PTR_LIST(restr, t1);
+	PREPARE_PTR_LIST(fouled, t2);
+	for (;;) {
+		if (t1 == type)
+			return t2;
+		if (!t1)
+			break;
+		NEXT_PTR_LIST(t1);
+		NEXT_PTR_LIST(t2);
+	}
+	FINISH_PTR_LIST(t2);
+	FINISH_PTR_LIST(t1);
+	return NULL;
+}
+
+void check_declaration(struct symbol *sym)
+{
+	int warned = 0;
+	struct symbol *next = sym;
+
+	while ((next = next->next_id) != NULL) {
+		if (next->namespace != sym->namespace)
+			continue;
+		if (sym->scope == next->scope) {
+			sym->same_symbol = next;
+			return;
+		}
+		/* Extern in block level matches a TOPLEVEL non-static symbol */
+		if (sym->ctype.modifiers & MOD_EXTERN) {
+			if ((next->ctype.modifiers & (MOD_TOPLEVEL|MOD_STATIC)) == MOD_TOPLEVEL) {
+				sym->same_symbol = next;
+				return;
+			}
+		}
+
+		if (!Wshadow || warned)
+			continue;
+		if (get_sym_type(next) == SYM_FN)
+			continue;
+		warned = 1;
+		warning(sym->pos, "symbol '%s' shadows an earlier one", show_ident(sym->ident));
+		info(next->pos, "originally declared here");
+	}
+}
+
+void bind_symbol(struct symbol *sym, struct ident *ident, enum namespace ns)
+{
+	struct scope *scope;
+	if (sym->bound) {
+		sparse_error(sym->pos, "internal error: symbol type already bound");
+		return;
+	}
+	if (ident->reserved && (ns & (NS_TYPEDEF | NS_STRUCT | NS_LABEL | NS_SYMBOL))) {
+		sparse_error(sym->pos, "Trying to use reserved word '%s' as identifier", show_ident(ident));
+		return;
+	}
+	sym->namespace = ns;
+	sym->next_id = ident->symbols;
+	ident->symbols = sym;
+	if (sym->ident && sym->ident != ident)
+		warning(sym->pos, "Symbol '%s' already bound", show_ident(sym->ident));
+	sym->ident = ident;
+	sym->bound = 1;
+
+	scope = block_scope;
+	if (ns == NS_SYMBOL && toplevel(scope)) {
+		unsigned mod = MOD_ADDRESSABLE | MOD_TOPLEVEL;
+
+		scope = global_scope;
+		if (sym->ctype.modifiers & MOD_STATIC ||
+		    is_extern_inline(sym)) {
+			scope = file_scope;
+			mod = MOD_TOPLEVEL;
+		}
+		sym->ctype.modifiers |= mod;
+	}
+	if (ns == NS_MACRO)
+		scope = file_scope;
+	if (ns == NS_LABEL)
+		scope = function_scope;
+	bind_scope(sym, scope);
+}
+
+struct symbol *create_symbol(int stream, const char *name, int type, int namespace)
+{
+	struct ident *ident = built_in_ident(name);
+	struct symbol *sym = lookup_symbol(ident, namespace);
+
+	if (sym && sym->type != type)
+		die("symbol %s created with different types: %d old %d", name,
+				type, sym->type);
+
+	if (!sym) {
+		struct token *token = built_in_token(stream, ident);
+
+		sym = alloc_symbol(token->pos, type);
+		bind_symbol(sym, token->ident, namespace);
+	}
+	return sym;
+}
+
+
+/*
+ * Abstract types
+ */
+struct symbol	int_type,
+		fp_type;
+
+/*
+ * C types (i.e. actual instances that the abstract types
+ * can map onto)
+ */
+struct symbol	bool_ctype, void_ctype, type_ctype,
+		char_ctype, schar_ctype, uchar_ctype,
+		short_ctype, sshort_ctype, ushort_ctype,
+		int_ctype, sint_ctype, uint_ctype,
+		long_ctype, slong_ctype, ulong_ctype,
+		llong_ctype, sllong_ctype, ullong_ctype,
+		lllong_ctype, slllong_ctype, ulllong_ctype,
+		float_ctype, double_ctype, ldouble_ctype,
+		string_ctype, ptr_ctype, lazy_ptr_ctype,
+		incomplete_ctype, label_ctype, bad_ctype,
+		null_ctype;
+
+struct symbol	zero_int;
+
+#define __INIT_IDENT(str, res) { .len = sizeof(str)-1, .name = str, .reserved = res }
+#define __IDENT(n,str,res) \
+	struct ident n  = __INIT_IDENT(str,res)
+
+#include "ident-list.h"
+
+void init_symbols(void)
+{
+	int stream = init_stream("builtin", -1, includepath);
+
+#define __IDENT(n,str,res) \
+	hash_ident(&n)
+#include "ident-list.h"
+
+	init_parser(stream);
+	init_builtins(stream);
+}
+
+#ifdef __CHAR_UNSIGNED__
+#define CHAR_SIGNEDNESS MOD_UNSIGNED
+#else
+#define CHAR_SIGNEDNESS MOD_SIGNED
+#endif
+
+#define MOD_ESIGNED (MOD_SIGNED | MOD_EXPLICITLY_SIGNED)
+#define MOD_LL (MOD_LONG | MOD_LONGLONG)
+#define MOD_LLL MOD_LONGLONGLONG
+static const struct ctype_declare {
+	struct symbol *ptr;
+	enum type type;
+	unsigned long modifiers;
+	int *bit_size;
+	int *maxalign;
+	struct symbol *base_type;
+} ctype_declaration[] = {
+	{ &bool_ctype,	    SYM_BASETYPE, MOD_UNSIGNED,		    &bits_in_bool,	     &max_int_alignment, &int_type },
+	{ &void_ctype,	    SYM_BASETYPE, 0,			    NULL,	     NULL,		 NULL },
+	{ &type_ctype,	    SYM_BASETYPE, MOD_TYPE,		    NULL,		     NULL,		 NULL },
+	{ &incomplete_ctype,SYM_BASETYPE, 0,			    NULL,		     NULL,		 NULL },
+	{ &bad_ctype,	    SYM_BASETYPE, 0,			    NULL,		     NULL,		 NULL },
+
+	{ &char_ctype,	    SYM_BASETYPE, CHAR_SIGNEDNESS | MOD_CHAR,    &bits_in_char,	     &max_int_alignment, &int_type },
+	{ &schar_ctype,	    SYM_BASETYPE, MOD_ESIGNED | MOD_CHAR,   &bits_in_char,	     &max_int_alignment, &int_type },
+	{ &uchar_ctype,	    SYM_BASETYPE, MOD_UNSIGNED | MOD_CHAR,  &bits_in_char,	     &max_int_alignment, &int_type },
+	{ &short_ctype,	    SYM_BASETYPE, MOD_SIGNED | MOD_SHORT,   &bits_in_short,	     &max_int_alignment, &int_type },
+	{ &sshort_ctype,    SYM_BASETYPE, MOD_ESIGNED | MOD_SHORT,  &bits_in_short,	     &max_int_alignment, &int_type },
+	{ &ushort_ctype,    SYM_BASETYPE, MOD_UNSIGNED | MOD_SHORT, &bits_in_short,	     &max_int_alignment, &int_type },
+	{ &int_ctype,	    SYM_BASETYPE, MOD_SIGNED,		    &bits_in_int,	     &max_int_alignment, &int_type },
+	{ &sint_ctype,	    SYM_BASETYPE, MOD_ESIGNED,		    &bits_in_int,	     &max_int_alignment, &int_type },
+	{ &uint_ctype,	    SYM_BASETYPE, MOD_UNSIGNED,		    &bits_in_int,	     &max_int_alignment, &int_type },
+	{ &long_ctype,	    SYM_BASETYPE, MOD_SIGNED | MOD_LONG,    &bits_in_long,	     &max_int_alignment, &int_type },
+	{ &slong_ctype,	    SYM_BASETYPE, MOD_ESIGNED | MOD_LONG,   &bits_in_long,	     &max_int_alignment, &int_type },
+	{ &ulong_ctype,	    SYM_BASETYPE, MOD_UNSIGNED | MOD_LONG,  &bits_in_long,	     &max_int_alignment, &int_type },
+	{ &llong_ctype,	    SYM_BASETYPE, MOD_SIGNED | MOD_LL,	    &bits_in_longlong,       &max_int_alignment, &int_type },
+	{ &sllong_ctype,    SYM_BASETYPE, MOD_ESIGNED | MOD_LL,	    &bits_in_longlong,       &max_int_alignment, &int_type },
+	{ &ullong_ctype,    SYM_BASETYPE, MOD_UNSIGNED | MOD_LL,    &bits_in_longlong,       &max_int_alignment, &int_type },
+	{ &lllong_ctype,    SYM_BASETYPE, MOD_SIGNED | MOD_LLL,	    &bits_in_longlonglong,   &max_int_alignment, &int_type },
+	{ &slllong_ctype,   SYM_BASETYPE, MOD_ESIGNED | MOD_LLL,    &bits_in_longlonglong,   &max_int_alignment, &int_type },
+	{ &ulllong_ctype,   SYM_BASETYPE, MOD_UNSIGNED | MOD_LLL,   &bits_in_longlonglong,   &max_int_alignment, &int_type },
+
+	{ &float_ctype,	    SYM_BASETYPE,  0,			    &bits_in_float,          &max_fp_alignment,  &fp_type },
+	{ &double_ctype,    SYM_BASETYPE, MOD_LONG,		    &bits_in_double,         &max_fp_alignment,  &fp_type },
+	{ &ldouble_ctype,   SYM_BASETYPE, MOD_LONG | MOD_LONGLONG,  &bits_in_longdouble,     &max_fp_alignment,  &fp_type },
+
+	{ &string_ctype,    SYM_PTR,	  0,			    &bits_in_pointer,        &pointer_alignment, &char_ctype },
+	{ &ptr_ctype,	    SYM_PTR,	  0,			    &bits_in_pointer,        &pointer_alignment, &void_ctype },
+	{ &null_ctype,	    SYM_PTR,	  0,			    &bits_in_pointer,        &pointer_alignment, &void_ctype },
+	{ &label_ctype,	    SYM_PTR,	  0,			    &bits_in_pointer,        &pointer_alignment, &void_ctype },
+	{ &lazy_ptr_ctype,  SYM_PTR,	  0,			    &bits_in_pointer,        &pointer_alignment, &void_ctype },
+	{ NULL, }
+};
+#undef MOD_LLL
+#undef MOD_LL
+#undef MOD_ESIGNED
+
+void init_ctype(void)
+{
+	const struct ctype_declare *ctype;
+
+	for (ctype = ctype_declaration ; ctype->ptr; ctype++) {
+		struct symbol *sym = ctype->ptr;
+		unsigned long bit_size = ctype->bit_size ? *ctype->bit_size : -1;
+		unsigned long maxalign = ctype->maxalign ? *ctype->maxalign : 0;
+		unsigned long alignment = bits_to_bytes(bit_size);
+
+		if (alignment > maxalign)
+			alignment = maxalign;
+		sym->type = ctype->type;
+		sym->bit_size = bit_size;
+		sym->ctype.alignment = alignment;
+		sym->ctype.base_type = ctype->base_type;
+		sym->ctype.modifiers = ctype->modifiers;
+	}
+}
--- /dev/null	Fri Dec 21 15:00:38 2018
+++ new/usr/src/tools/smatch/src/symbol.h	Fri Dec 21 15:00:38 2018
@@ -0,0 +1,448 @@
+#ifndef SYMBOL_H
+#define SYMBOL_H
+/*
+ * Basic symbol and namespace definitions.
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "token.h"
+#include "target.h"
+
+/*
+ * An identifier with semantic meaning is a "symbol".
+ *
+ * There's a 1:n relationship: each symbol is always
+ * associated with one identifier, while each identifier
+ * can have one or more semantic meanings due to C scope
+ * rules.
+ *
+ * The progression is symbol -> token -> identifier. The
+ * token contains the information on where the symbol was
+ * declared.
+ */
+enum namespace {
+	NS_NONE = 0,
+	NS_MACRO = 1,
+	NS_TYPEDEF = 2,
+	NS_STRUCT = 4,  // Also used for unions and enums.
+	NS_LABEL = 8,
+	NS_SYMBOL = 16,
+	NS_ITERATOR = 32,
+	NS_PREPROCESSOR = 64,
+	NS_UNDEF = 128,
+	NS_KEYWORD = 256,
+};
+
+enum type {
+	SYM_UNINITIALIZED,
+	SYM_PREPROCESSOR,
+	SYM_BASETYPE,
+	SYM_NODE,
+	SYM_PTR,
+	SYM_FN,
+	SYM_ARRAY,
+	SYM_STRUCT,
+	SYM_UNION,
+	SYM_ENUM,
+	SYM_TYPEDEF,
+	SYM_TYPEOF,
+	SYM_MEMBER,
+	SYM_BITFIELD,
+	SYM_LABEL,
+	SYM_RESTRICT,
+	SYM_FOULED,
+	SYM_KEYWORD,
+	SYM_BAD,
+};
+
+enum keyword {
+	KW_SPECIFIER 	= 1 << 0,
+	KW_MODIFIER	= 1 << 1,
+	KW_QUALIFIER	= 1 << 2,
+	KW_ATTRIBUTE	= 1 << 3,
+	KW_STATEMENT	= 1 << 4,
+	KW_ASM		= 1 << 5,
+	KW_MODE		= 1 << 6,
+	KW_SHORT	= 1 << 7,
+	KW_LONG		= 1 << 8,
+	KW_EXACT	= 1 << 9,
+};
+
+struct context {
+	struct expression *context;
+	unsigned int in, out;
+};
+
+extern struct context *alloc_context(void);
+
+DECLARE_PTR_LIST(context_list, struct context);
+
+struct ctype {
+	unsigned long modifiers;
+	unsigned long alignment;
+	struct context_list *contexts;
+	unsigned int as;
+	struct symbol *base_type;
+};
+
+struct decl_state {
+	struct ctype ctype;
+	struct ident **ident;
+	struct symbol_op *mode;
+	unsigned char prefer_abstract, is_inline, storage_class, is_tls;
+};
+
+struct symbol_op {
+	enum keyword type;
+	int (*evaluate)(struct expression *);
+	int (*expand)(struct expression *, int);
+	int (*args)(struct expression *);
+
+	/* keywords */
+	struct token *(*declarator)(struct token *token, struct decl_state *ctx);
+	struct token *(*statement)(struct token *token, struct statement *stmt);
+	struct token *(*toplevel)(struct token *token, struct symbol_list **list);
+	struct token *(*attribute)(struct token *token, struct symbol *attr, struct decl_state *ctx);
+	struct symbol *(*to_mode)(struct symbol *);
+
+	int test, set, class;
+};
+
+
+#define SYM_ATTR_WEAK		0
+#define SYM_ATTR_NORMAL		1
+#define SYM_ATTR_STRONG		2
+
+struct symbol {
+	enum type type:8;
+	enum namespace namespace:9;
+	unsigned char used:1, attr:2, enum_member:1, bound:1;
+	struct position pos;		/* Where this symbol was declared */
+	struct position endpos;		/* Where this symbol ends*/
+	struct ident *ident;		/* What identifier this symbol is associated with */
+	struct symbol *next_id;		/* Next semantic symbol that shares this identifier */
+	struct symbol	*replace;	/* What is this symbol shadowed by in copy-expression */
+	struct scope	*scope;
+	union {
+		struct symbol	*same_symbol;
+		struct symbol	*next_subobject;
+	};
+
+	struct symbol_op *op;
+
+	union {
+		struct /* NS_MACRO */ {
+			struct token *expansion;
+			struct token *arglist;
+			struct scope *used_in;
+		};
+		struct /* NS_PREPROCESSOR */ {
+			int (*handler)(struct stream *, struct token **, struct token *);
+			int normal;
+		};
+		struct /* NS_SYMBOL */ {
+			unsigned long	offset;
+			int		bit_size;
+			unsigned int	bit_offset:8,
+					arg_count:10,
+					variadic:1,
+					initialized:1,
+					examined:1,
+					expanding:1,
+					evaluated:1,
+					string:1,
+					designated_init:1,
+					forced_arg:1,
+					transparent_union:1;
+			struct expression *array_size;
+			struct ctype ctype;
+			struct symbol_list *arguments;
+			struct statement *stmt;
+			struct symbol_list *symbol_list;
+			struct statement *inline_stmt;
+			struct symbol_list *inline_symbol_list;
+			struct expression *initializer;
+			struct entrypoint *ep;
+			long long value;		/* Initial value */
+			struct symbol *definition;
+		};
+	};
+	union /* backend */ {
+		struct basic_block *bb_target;	/* label */
+		void *aux;			/* Auxiliary info, e.g. backend information */
+		struct {			/* sparse ctags */
+			char kind;
+			unsigned char visited:1;
+		};
+	};
+	pseudo_t pseudo;
+};
+
+/* Modifiers */
+#define MOD_AUTO	0x0001
+#define MOD_REGISTER	0x0002
+#define MOD_STATIC	0x0004
+#define MOD_EXTERN	0x0008
+
+#define MOD_CONST	0x0010
+#define MOD_VOLATILE	0x0020
+#define MOD_SIGNED	0x0040
+#define MOD_UNSIGNED	0x0080
+
+#define MOD_CHAR	0x0100
+#define MOD_SHORT	0x0200
+#define MOD_LONG	0x0400
+#define MOD_LONGLONG	0x0800
+#define MOD_LONGLONGLONG	0x1000
+#define MOD_PURE	0x2000
+
+#define MOD_TYPEDEF	0x10000
+
+#define MOD_TLS		0x20000
+#define MOD_INLINE	0x40000
+#define MOD_ADDRESSABLE	0x80000
+
+#define MOD_NOCAST	0x100000
+#define MOD_NODEREF	0x200000
+#define MOD_ACCESSED	0x400000
+#define MOD_TOPLEVEL	0x800000	// scoping..
+
+#define MOD_ASSIGNED	0x2000000
+#define MOD_TYPE	0x4000000
+#define MOD_SAFE	0x8000000	// non-null/non-trapping pointer
+
+#define MOD_USERTYPE	0x10000000
+#define MOD_NORETURN	0x20000000
+#define MOD_EXPLICITLY_SIGNED	0x40000000
+#define MOD_BITWISE	0x80000000
+
+
+#define MOD_NONLOCAL	(MOD_EXTERN | MOD_TOPLEVEL)
+#define MOD_STORAGE	(MOD_AUTO | MOD_REGISTER | MOD_STATIC | MOD_EXTERN | MOD_INLINE | MOD_TOPLEVEL)
+#define MOD_SIGNEDNESS	(MOD_SIGNED | MOD_UNSIGNED | MOD_EXPLICITLY_SIGNED)
+#define MOD_LONG_ALL	(MOD_LONG | MOD_LONGLONG | MOD_LONGLONGLONG)
+#define MOD_SPECIFIER	(MOD_CHAR | MOD_SHORT | MOD_LONG_ALL | MOD_SIGNEDNESS)
+#define MOD_SIZE	(MOD_CHAR | MOD_SHORT | MOD_LONG_ALL)
+#define MOD_IGNORE (MOD_TOPLEVEL | MOD_STORAGE | MOD_ADDRESSABLE |	\
+	MOD_ASSIGNED | MOD_USERTYPE | MOD_ACCESSED | MOD_EXPLICITLY_SIGNED)
+#define MOD_PTRINHERIT (MOD_VOLATILE | MOD_CONST | MOD_NODEREF | MOD_NORETURN | MOD_NOCAST)
+/* modifiers preserved by typeof() operator */
+#define MOD_TYPEOF	(MOD_VOLATILE | MOD_CONST | MOD_NOCAST | MOD_SPECIFIER)
+
+
+/* Current parsing/evaluation function */
+extern struct symbol *current_fn;
+
+/* Abstract types */
+extern struct symbol	int_type,
+			fp_type;
+
+/* C types */
+extern struct symbol	bool_ctype, void_ctype, type_ctype,
+			char_ctype, schar_ctype, uchar_ctype,
+			short_ctype, sshort_ctype, ushort_ctype,
+			int_ctype, sint_ctype, uint_ctype,
+			long_ctype, slong_ctype, ulong_ctype,
+			llong_ctype, sllong_ctype, ullong_ctype,
+			lllong_ctype, slllong_ctype, ulllong_ctype,
+			float_ctype, double_ctype, ldouble_ctype,
+			string_ctype, ptr_ctype, lazy_ptr_ctype,
+			incomplete_ctype, label_ctype, bad_ctype,
+			null_ctype;
+
+/* Special internal symbols */
+extern struct symbol	zero_int;
+
+#define __IDENT(n,str,res) \
+	extern struct ident n
+#include "ident-list.h"
+
+#define symbol_is_typename(sym) ((sym)->type == SYM_TYPE)
+
+extern struct symbol_list *translation_unit_used_list;
+
+extern void access_symbol(struct symbol *);
+
+extern const char * type_difference(struct ctype *c1, struct ctype *c2,
+	unsigned long mod1, unsigned long mod2);
+
+extern struct symbol *lookup_symbol(struct ident *, enum namespace);
+extern struct symbol *create_symbol(int stream, const char *name, int type, int namespace);
+extern void init_symbols(void);
+extern void init_builtins(int stream);
+extern void init_ctype(void);
+extern struct symbol *alloc_symbol(struct position, int type);
+extern void show_type(struct symbol *);
+extern const char *modifier_string(unsigned long mod);
+extern void show_symbol(struct symbol *);
+extern int show_symbol_expr_init(struct symbol *sym);
+extern void show_type_list(struct symbol *);
+extern void show_symbol_list(struct symbol_list *, const char *);
+extern void add_symbol(struct symbol_list **, struct symbol *);
+extern void bind_symbol(struct symbol *, struct ident *, enum namespace);
+
+extern struct symbol *examine_symbol_type(struct symbol *);
+extern struct symbol *examine_pointer_target(struct symbol *);
+extern void examine_simple_symbol_type(struct symbol *);
+extern const char *show_typename(struct symbol *sym);
+extern const char *builtin_typename(struct symbol *sym);
+extern const char *builtin_ctypename(struct ctype *ctype);
+extern const char* get_type_name(enum type type);
+
+extern void debug_symbol(struct symbol *);
+extern void merge_type(struct symbol *sym, struct symbol *base_type);
+extern void check_declaration(struct symbol *sym);
+
+static inline struct symbol *get_base_type(const struct symbol *sym)
+{
+	return examine_symbol_type(sym->ctype.base_type);
+}
+
+static inline int is_int_type(const struct symbol *type)
+{
+	if (type->type == SYM_NODE)
+		type = type->ctype.base_type;
+	if (type->type == SYM_ENUM)
+		type = type->ctype.base_type;
+	return type->type == SYM_BITFIELD ||
+	       type->ctype.base_type == &int_type;
+}
+
+static inline int is_enum_type(const struct symbol *type)
+{
+	if (type->type == SYM_NODE)
+		type = type->ctype.base_type;
+	return (type->type == SYM_ENUM);
+}
+
+static inline int is_type_type(struct symbol *type)
+{
+	return (type->ctype.modifiers & MOD_TYPE) != 0;
+}
+
+static inline int is_ptr_type(struct symbol *type)
+{
+	if (!type)
+		return 0;
+	if (type->type == SYM_NODE)
+		type = type->ctype.base_type;
+	return type->type == SYM_PTR || type->type == SYM_ARRAY || type->type == SYM_FN;
+}
+
+static inline int is_func_type(struct symbol *type)
+{
+	if (type->type == SYM_NODE)
+		type = type->ctype.base_type;
+	return type->type == SYM_FN;
+}
+
+static inline int is_array_type(struct symbol *type)
+{
+	if (type->type == SYM_NODE)
+		type = type->ctype.base_type;
+	return type->type == SYM_ARRAY;
+}
+
+static inline int is_float_type(struct symbol *type)
+{
+	if (type->type == SYM_NODE)
+		type = type->ctype.base_type;
+	return type->ctype.base_type == &fp_type;
+}
+
+static inline int is_byte_type(struct symbol *type)
+{
+	return type->bit_size == bits_in_char && type->type != SYM_BITFIELD;
+}
+
+static inline int is_void_type(struct symbol *type)
+{
+	if (type->type == SYM_NODE)
+		type = type->ctype.base_type;
+	return type == &void_ctype;
+}
+
+static inline int is_bool_type(struct symbol *type)
+{
+	if (type->type == SYM_NODE)
+		type = type->ctype.base_type;
+	return type == &bool_ctype;
+}
+
+static inline int is_scalar_type(struct symbol *type)
+{
+	if (type->type == SYM_NODE)
+		type = type->ctype.base_type;
+	switch (type->type) {
+	case SYM_ENUM:
+	case SYM_BITFIELD:
+	case SYM_PTR:
+	case SYM_RESTRICT:	// OK, always integer types
+		return 1;
+	default:
+		break;
+	}
+	if (type->ctype.base_type == &int_type)
+		return 1;
+	if (type->ctype.base_type == &fp_type)
+		return 1;
+	return 0;
+}
+
+static inline int is_function(struct symbol *type)
+{
+	return type && type->type == SYM_FN;
+}
+
+static inline int is_extern_inline(struct symbol *sym)
+{
+	return (sym->ctype.modifiers & MOD_EXTERN) &&
+		(sym->ctype.modifiers & MOD_INLINE) &&
+		is_function(sym->ctype.base_type);
+}
+
+static inline int get_sym_type(struct symbol *type)
+{
+	if (type->type == SYM_NODE)
+		type = type->ctype.base_type;
+	if (type->type == SYM_ENUM)
+		type = type->ctype.base_type;
+	return type->type;
+}
+
+static inline struct symbol *lookup_keyword(struct ident *ident, enum namespace ns)
+{
+	if (!ident->keyword)
+		return NULL;
+	return lookup_symbol(ident, ns);
+}
+
+#define is_restricted_type(type) (get_sym_type(type) == SYM_RESTRICT)
+#define is_fouled_type(type) (get_sym_type(type) == SYM_FOULED)
+#define is_bitfield_type(type)   (get_sym_type(type) == SYM_BITFIELD)
+extern int is_ptr_type(struct symbol *);
+
+void create_fouled(struct symbol *type);
+struct symbol *befoul(struct symbol *type);
+
+#endif /* SYMBOL_H */
--- /dev/null	Fri Dec 21 15:00:38 2018
+++ new/usr/src/tools/smatch/src/target.c	Fri Dec 21 15:00:38 2018
@@ -0,0 +1,48 @@
+#include <stdio.h>
+
+#include "symbol.h"
+#include "target.h"
+
+struct symbol *size_t_ctype = &ulong_ctype;
+struct symbol *ssize_t_ctype = &long_ctype;
+
+/*
+ * For "__attribute__((aligned))"
+ */
+int max_alignment = 16;
+
+/*
+ * Integer data types
+ */
+int bits_in_bool = 1;
+int bits_in_char = 8;
+int bits_in_short = 16;
+int bits_in_int = 32;
+int bits_in_long = 32;
+int bits_in_longlong = 64;
+int bits_in_longlonglong = 128;
+
+int bits_in_wchar = 32;
+
+int max_int_alignment = 4;
+
+/*
+ * Floating point data types
+ */
+int bits_in_float = 32;
+int bits_in_double = 64;
+int bits_in_longdouble = 80;
+
+int max_fp_alignment = 8;
+
+/*
+ * Pointer data type
+ */
+int bits_in_pointer = 32;
+int pointer_alignment = 4;
+
+/*
+ * Enum data types
+ */
+int bits_in_enum = 32;
+int enum_alignment = 4;
--- /dev/null	Fri Dec 21 15:00:38 2018
+++ new/usr/src/tools/smatch/src/target.h	Fri Dec 21 15:00:38 2018
@@ -0,0 +1,70 @@
+#ifndef TARGET_H
+#define TARGET_H
+
+extern struct symbol *size_t_ctype;
+extern struct symbol *ssize_t_ctype;
+
+/*
+ * For "__attribute__((aligned))"
+ */
+extern int max_alignment;
+
+/*
+ * Integer data types
+ */
+extern int bits_in_bool;
+extern int bits_in_char;
+extern int bits_in_short;
+extern int bits_in_int;
+extern int bits_in_long;
+extern int bits_in_longlong;
+extern int bits_in_longlonglong;
+
+extern int bits_in_wchar;
+
+extern int max_int_alignment;
+
+/*
+ * Floating point data types
+ */
+extern int bits_in_float;
+extern int bits_in_double;
+extern int bits_in_longdouble;
+
+extern int max_fp_alignment;
+
+/*
+ * Pointer data type
+ */
+extern int bits_in_pointer;
+extern int pointer_alignment;
+
+/*
+ * Enum data types
+ */
+extern int bits_in_enum;
+extern int enum_alignment;
+
+/*
+ * Helper functions for converting bits to bytes and vice versa.
+ */
+
+static inline int bits_to_bytes(int bits)
+{
+	return bits >= 0 ? (bits + bits_in_char - 1) / bits_in_char : -1;
+}
+
+static inline int bytes_to_bits(int bytes)
+{
+	return bytes * bits_in_char;
+}
+
+static inline unsigned long array_element_offset(unsigned long base_bits, int idx)
+{
+	int fragment = base_bits % bits_in_char;
+	if (fragment)
+		base_bits += bits_in_char - fragment;
+	return base_bits * idx;
+}
+
+#endif
--- /dev/null	Fri Dec 21 15:00:39 2018
+++ new/usr/src/tools/smatch/src/test-dissect.c	Fri Dec 21 15:00:39 2018
@@ -0,0 +1,97 @@
+#include "dissect.h"
+
+static unsigned dotc_stream;
+
+static inline char storage(struct symbol *sym)
+{
+	int t = sym->type;
+	unsigned m = sym->ctype.modifiers;
+
+	if (m & MOD_INLINE || t == SYM_STRUCT || t == SYM_UNION /*|| t == SYM_ENUM*/)
+		return sym->pos.stream == dotc_stream ? 's' : 'g';
+
+	return (m & MOD_STATIC) ? 's' : (m & MOD_NONLOCAL) ? 'g' : 'l';
+}
+
+static inline const char *show_mode(unsigned mode)
+{
+	static char str[3];
+
+	if (mode == -1)
+		return "def";
+
+#define	U(u_r)	"-rwm"[(mode / u_r) & 3]
+	str[0] = U(U_R_AOF);
+	str[1] = U(U_R_VAL);
+	str[2] = U(U_R_PTR);
+#undef	U
+
+	return str;
+}
+
+static void print_usage(struct position *pos, struct symbol *sym, unsigned mode)
+{
+	static unsigned curr_stream = -1;
+
+	if (curr_stream != pos->stream) {
+		curr_stream = pos->stream;
+		printf("\nFILE: %s\n\n", stream_name(curr_stream));
+	}
+
+	printf("%4d:%-3d %c %-5.3s",
+		pos->line, pos->pos, storage(sym), show_mode(mode));
+}
+
+static void r_symbol(unsigned mode, struct position *pos, struct symbol *sym)
+{
+	print_usage(pos, sym, mode);
+
+	if (!sym->ident)
+		sym->ident = built_in_ident("__asm__");
+
+	printf("%-32.*s %s\n",
+		sym->ident->len, sym->ident->name,
+		show_typename(sym->ctype.base_type));
+}
+
+static void r_member(unsigned mode, struct position *pos, struct symbol *sym, struct symbol *mem)
+{
+	struct ident *ni, *si, *mi;
+
+	print_usage(pos, sym, mode);
+
+	ni = built_in_ident("?");
+	si = sym->ident ?: ni;
+	/* mem == NULL means entire struct accessed */
+	mi = mem ? (mem->ident ?: ni) : built_in_ident("*");
+
+	printf("%.*s.%-*.*s %s\n",
+		si->len, si->name,
+		32-1 - si->len, mi->len, mi->name,
+		show_typename(mem ? mem->ctype.base_type : sym));
+}
+
+static void r_symdef(struct symbol *sym)
+{
+	r_symbol(-1, &sym->pos, sym);
+}
+
+int main(int argc, char **argv)
+{
+	static struct reporter reporter = {
+		.r_symdef = r_symdef,
+		.r_symbol = r_symbol,
+		.r_member = r_member,
+	};
+	struct string_list *filelist = NULL;
+	char *file;
+
+	sparse_initialize(argc, argv, &filelist);
+
+	FOR_EACH_PTR_NOTAG(filelist, file) {
+		dotc_stream = input_stream_nr;
+		dissect(__sparse(file), &reporter);
+	} END_FOR_EACH_PTR_NOTAG(file);
+
+	return 0;
+}
--- /dev/null	Fri Dec 21 15:00:39 2018
+++ new/usr/src/tools/smatch/src/test-inspect.c	Fri Dec 21 15:00:39 2018
@@ -0,0 +1,43 @@
+
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "token.h"
+#include "parse.h"
+#include "symbol.h"
+#include "expression.h"
+
+#include "ast-view.h"
+
+static void expand_symbols(struct symbol_list *list)
+{
+	struct symbol *sym;
+	FOR_EACH_PTR(list, sym) {
+		expand_symbol(sym);
+	} END_FOR_EACH_PTR(sym);
+}
+
+int main(int argc, char **argv)
+{
+	struct string_list *filelist = NULL;
+	char *file;
+	struct symbol_list *view_syms = NULL;
+
+	gtk_init(&argc,&argv);
+	expand_symbols(sparse_initialize(argc, argv, &filelist));
+	FOR_EACH_PTR_NOTAG(filelist, file) {
+		struct symbol_list *syms = sparse(file);
+		expand_symbols(syms);
+		concat_symbol_list(syms, &view_syms);
+	} END_FOR_EACH_PTR_NOTAG(file);
+	treeview_main(view_syms);
+	return 0;
+}
+ 
--- /dev/null	Fri Dec 21 15:00:39 2018
+++ new/usr/src/tools/smatch/src/test-lexing.c	Fri Dec 21 15:00:39 2018
@@ -0,0 +1,49 @@
+/*
+ * Example test program that just uses the tokenization and
+ * preprocessing phases, and prints out the results.
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "token.h"
+#include "symbol.h"
+
+int main(int argc, char **argv)
+{
+	struct string_list *filelist = NULL;
+	char *file;
+
+	preprocess_only = 1;
+	sparse_initialize(argc, argv, &filelist);
+	FOR_EACH_PTR_NOTAG(filelist, file) {
+		sparse(file);
+	} END_FOR_EACH_PTR_NOTAG(file);
+	show_identifier_stats();
+	return 0;
+}
--- /dev/null	Fri Dec 21 15:00:39 2018
+++ new/usr/src/tools/smatch/src/test-linearize.c	Fri Dec 21 15:00:39 2018
@@ -0,0 +1,67 @@
+/*
+ * Parse and linearize the tree for testing.
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003-2004 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "token.h"
+#include "parse.h"
+#include "symbol.h"
+#include "expression.h"
+#include "linearize.h"
+
+static void clean_up_symbols(struct symbol_list *list)
+{
+	struct symbol *sym;
+
+	FOR_EACH_PTR(list, sym) {
+		struct entrypoint *ep;
+
+		expand_symbol(sym);
+		ep = linearize_symbol(sym);
+		if (ep)
+			show_entry(ep);
+	} END_FOR_EACH_PTR(sym);
+}
+
+int main(int argc, char **argv)
+{
+	struct string_list *filelist = NULL;
+	char *file;
+
+	clean_up_symbols(sparse_initialize(argc, argv, &filelist));
+	FOR_EACH_PTR_NOTAG(filelist, file) {
+		clean_up_symbols(sparse(file));
+	} END_FOR_EACH_PTR_NOTAG(file);
+
+	report_stats();
+	return 0;
+}
--- /dev/null	Fri Dec 21 15:00:39 2018
+++ new/usr/src/tools/smatch/src/test-parsing.c	Fri Dec 21 15:00:39 2018
@@ -0,0 +1,91 @@
+/*
+ * Example trivial client program that uses the sparse library
+ * to tokenize, preprocess and parse a C file, and prints out
+ * the results.
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "token.h"
+#include "parse.h"
+#include "symbol.h"
+#include "expression.h"
+
+static void clean_up_symbols(struct symbol_list *list)
+{
+	struct symbol *sym;
+
+	FOR_EACH_PTR(list, sym) {
+		expand_symbol(sym);
+	} END_FOR_EACH_PTR(sym);
+}
+
+int main(int argc, char **argv)
+{
+	struct symbol_list * list;
+	struct string_list * filelist = NULL;
+	char *file;
+
+	list = sparse_initialize(argc, argv, &filelist);
+
+	// Simplification
+	clean_up_symbols(list);
+
+#if 1
+	show_symbol_list(list, "\n\n");
+	printf("\n\n");
+#endif
+
+	FOR_EACH_PTR_NOTAG(filelist, file) {
+		list = sparse(file);
+
+		// Simplification
+		clean_up_symbols(list);
+
+#if 1
+		// Show the end result.
+		show_symbol_list(list, "\n\n");
+		printf("\n\n");
+#endif
+	} END_FOR_EACH_PTR_NOTAG(file);
+
+#if 0
+	// And show the allocation statistics
+	show_ident_alloc();
+	show_token_alloc();
+	show_symbol_alloc();
+	show_expression_alloc();
+	show_statement_alloc();
+	show_string_alloc();
+	show_bytes_alloc();
+#endif
+	return 0;
+}
--- /dev/null	Fri Dec 21 15:00:39 2018
+++ new/usr/src/tools/smatch/src/test-sort.c	Fri Dec 21 15:00:39 2018
@@ -0,0 +1,46 @@
+#include "lib.h"
+#include "allocate.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+static int
+int_cmp (const void *_a, const void *_b)
+{
+  const int *a = _a;
+  const int *b = _b;
+  return *a - *b;
+}
+
+#define MIN(_x,_y) ((_x) < (_y) ? (_x) : (_y))
+
+int
+main (int argc, char **argv)
+{
+  struct ptr_list *l = NULL, *l2;
+  int i, *e;
+  const int N = argv[1] ? atoi (argv[1]) : 10000;
+
+  srand (N);
+  for (i = 0; i < 1000; i++)
+    (void)rand ();
+
+  for (i = 0; i < N; i++) {
+    e = (int *)malloc (sizeof (int));
+    *e = rand ();
+    add_ptr_list (&l, e);
+  }
+  sort_list (&l, int_cmp);
+  // Sort already sorted stuff.
+  sort_list (&l, int_cmp);
+
+  l2 = l;
+  do {
+    l2->nr = MIN (l2->nr, rand () % 3);
+    for (i = 0; i < l2->nr; i++)
+      *((int *)(l2->list[i])) = rand();
+    l2 = l2->next;
+  } while (l2 != l);
+  sort_list (&l, int_cmp);
+
+  return 0;
+}
--- /dev/null	Fri Dec 21 15:00:39 2018
+++ new/usr/src/tools/smatch/src/test-unssa.c	Fri Dec 21 15:00:39 2018
@@ -0,0 +1,87 @@
+#include <stdio.h>
+#include <assert.h>
+
+#include "symbol.h"
+#include "expression.h"
+#include "linearize.h"
+#include "flow.h"
+
+
+static void output_bb(struct basic_block *bb, unsigned long generation)
+{
+	struct instruction *insn;
+
+	bb->generation = generation;
+	printf(".L%u\n", bb->nr);
+
+	FOR_EACH_PTR(bb->insns, insn) {
+		if (!insn->bb)
+			continue;
+		printf("\t%s\n", show_instruction(insn));
+	}
+	END_FOR_EACH_PTR(insn);
+
+	printf("\n");
+}
+
+static void output_fn(struct entrypoint *ep)
+{
+	struct basic_block *bb;
+	unsigned long generation = ++bb_generation;
+	struct symbol *sym = ep->name;
+	const char *name = show_ident(sym->ident);
+
+	if (sym->ctype.modifiers & MOD_STATIC)
+		printf("\n\n%s:\n", name);
+	else
+		printf("\n\n.globl %s\n%s:\n", name, name);
+
+	unssa(ep);
+
+	FOR_EACH_PTR(ep->bbs, bb) {
+		if (bb->generation == generation)
+			continue;
+		output_bb(bb, generation);
+	}
+	END_FOR_EACH_PTR(bb);
+}
+
+static int output_data(struct symbol *sym)
+{
+	printf("symbol %s:\n", show_ident(sym->ident));
+	printf("\ttype = %d\n", sym->ctype.base_type->type);
+	printf("\tmodif= %lx\n", sym->ctype.modifiers);
+
+	return 0;
+}
+
+static int compile(struct symbol_list *list)
+{
+	struct symbol *sym;
+	FOR_EACH_PTR(list, sym) {
+		struct entrypoint *ep;
+		expand_symbol(sym);
+		ep = linearize_symbol(sym);
+		if (ep)
+			output_fn(ep);
+		else
+			output_data(sym);
+	}
+	END_FOR_EACH_PTR(sym);
+
+	return 0;
+}
+
+int main(int argc, char **argv)
+{
+	struct string_list * filelist = NULL;
+	char *file;
+
+	compile(sparse_initialize(argc, argv, &filelist));
+	FOR_EACH_PTR_NOTAG(filelist, file) {
+		compile(sparse(file));
+	} END_FOR_EACH_PTR_NOTAG(file);
+
+	report_stats();
+	return 0;
+}
--- /dev/null	Fri Dec 21 15:00:39 2018
+++ new/usr/src/tools/smatch/src/token.h	Fri Dec 21 15:00:39 2018
@@ -0,0 +1,252 @@
+#ifndef TOKEN_H
+#define TOKEN_H
+/*
+ * Basic tokenization structures. NOTE! Those tokens had better
+ * be pretty small, since we're going to keep them all in memory
+ * indefinitely.
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include <sys/types.h>
+#include "lib.h"
+
+/*
+ * This describes the pure lexical elements (tokens), with
+ * no semantic meaning. In other words, an identifier doesn't
+ * have a type or meaning, it is only a specific string in
+ * the input stream.
+ *
+ * Semantic meaning is handled elsewhere.
+ */
+
+enum constantfile {
+  CONSTANT_FILE_MAYBE,    // To be determined, not inside any #ifs in this file
+  CONSTANT_FILE_IFNDEF,   // To be determined, currently inside #ifndef
+  CONSTANT_FILE_NOPE,     // No
+  CONSTANT_FILE_YES       // Yes
+};
+
+extern const char *includepath[];
+
+struct stream {
+	int fd;
+	const char *name;
+	const char *path;    // input-file path - see set_stream_include_path()
+	const char **next_path;
+
+	/* Use these to check for "already parsed" */
+	enum constantfile constant;
+	int dirty, next_stream, once;
+	struct ident *protect;
+	struct token *ifndef;
+	struct token *top_if;
+};
+
+extern int input_stream_nr;
+extern struct stream *input_streams;
+extern unsigned int tabstop;
+extern int no_lineno;
+extern int *hash_stream(const char *name);
+
+struct ident {
+	struct ident *next;	/* Hash chain of identifiers */
+	struct symbol *symbols;	/* Pointer to semantic meaning list */
+	unsigned char len;	/* Length of identifier name */
+	unsigned char tainted:1,
+	              reserved:1,
+		      keyword:1;
+	char name[];		/* Actual identifier */
+};
+
+enum token_type {
+	TOKEN_EOF,
+	TOKEN_ERROR,
+	TOKEN_IDENT,
+	TOKEN_ZERO_IDENT,
+	TOKEN_NUMBER,
+	TOKEN_CHAR,
+	TOKEN_CHAR_EMBEDDED_0,
+	TOKEN_CHAR_EMBEDDED_1,
+	TOKEN_CHAR_EMBEDDED_2,
+	TOKEN_CHAR_EMBEDDED_3,
+	TOKEN_WIDE_CHAR,
+	TOKEN_WIDE_CHAR_EMBEDDED_0,
+	TOKEN_WIDE_CHAR_EMBEDDED_1,
+	TOKEN_WIDE_CHAR_EMBEDDED_2,
+	TOKEN_WIDE_CHAR_EMBEDDED_3,
+	TOKEN_STRING,
+	TOKEN_WIDE_STRING,
+	TOKEN_SPECIAL,
+	TOKEN_STREAMBEGIN,
+	TOKEN_STREAMEND,
+	TOKEN_MACRO_ARGUMENT,
+	TOKEN_STR_ARGUMENT,
+	TOKEN_QUOTED_ARGUMENT,
+	TOKEN_CONCAT,
+	TOKEN_GNU_KLUDGE,
+	TOKEN_UNTAINT,
+	TOKEN_ARG_COUNT,
+	TOKEN_IF,
+	TOKEN_SKIP_GROUPS,
+	TOKEN_ELSE,
+};
+
+/* Combination tokens */
+#define COMBINATION_STRINGS {	\
+	"+=", "++",		\
+	"-=", "--", "->",	\
+	"*=",			\
+	"/=",			\
+	"%=",			\
+	"<=", ">=",		\
+	"==", "!=",		\
+	"&&", "&=",		\
+	"||", "|=",		\
+	"^=", "##",		\
+	"<<", ">>", "..",	\
+	"<<=", ">>=", "...",	\
+	"",			\
+	"<", ">", "<=", ">="	\
+}
+
+extern unsigned char combinations[][4];
+
+enum special_token {
+	SPECIAL_BASE = 256,
+	SPECIAL_ADD_ASSIGN = SPECIAL_BASE,
+	SPECIAL_INCREMENT,
+	SPECIAL_SUB_ASSIGN,
+	SPECIAL_DECREMENT,
+	SPECIAL_DEREFERENCE,
+	SPECIAL_MUL_ASSIGN,
+	SPECIAL_DIV_ASSIGN,
+	SPECIAL_MOD_ASSIGN,
+	SPECIAL_LTE,
+	SPECIAL_GTE,
+	SPECIAL_EQUAL,
+	SPECIAL_NOTEQUAL,
+	SPECIAL_LOGICAL_AND,
+	SPECIAL_AND_ASSIGN,
+	SPECIAL_LOGICAL_OR,
+	SPECIAL_OR_ASSIGN,
+	SPECIAL_XOR_ASSIGN,
+	SPECIAL_HASHHASH,
+	SPECIAL_LEFTSHIFT,
+	SPECIAL_RIGHTSHIFT,
+	SPECIAL_DOTDOT,
+	SPECIAL_SHL_ASSIGN,
+	SPECIAL_SHR_ASSIGN,
+	SPECIAL_ELLIPSIS,
+	SPECIAL_ARG_SEPARATOR,
+	SPECIAL_UNSIGNED_LT,
+	SPECIAL_UNSIGNED_GT,
+	SPECIAL_UNSIGNED_LTE,
+	SPECIAL_UNSIGNED_GTE,
+};
+
+struct string {
+	unsigned int length:31;
+	unsigned int immutable:1;
+	char data[];
+};
+
+/* will fit into 32 bits */
+struct argcount {
+	unsigned normal:10;
+	unsigned quoted:10;
+	unsigned str:10;
+	unsigned vararg:1;
+};
+
+/*
+ * This is a very common data structure, it should be kept
+ * as small as humanly possible. Big (rare) types go as
+ * pointers.
+ */
+struct token {
+	struct position pos;
+	struct token *next;
+	union {
+		const char *number;
+		struct ident *ident;
+		unsigned int special;
+		struct string *string;
+		int argnum;
+		struct argcount count;
+		char embedded[4];
+	};
+};
+
+#define MAX_STRING 8191
+
+static inline struct token *containing_token(struct token **p)
+{
+	void *addr = (char *)p - ((char *)&((struct token *)0)->next - (char *)0);
+	return addr;
+}
+
+#define token_type(x) ((x)->pos.type)
+
+/*
+ * Last token in the stream - points to itself.
+ * This allows us to not test for NULL pointers
+ * when following the token->next chain..
+ */
+extern struct token eof_token_entry;
+#define eof_token(x) ((x) == &eof_token_entry)
+
+extern int init_stream(const char *, int fd, const char **next_path);
+extern const char *stream_name(int stream);
+extern struct ident *hash_ident(struct ident *);
+extern struct ident *built_in_ident(const char *);
+extern struct token *built_in_token(int, struct ident *);
+extern const char *show_special(int);
+extern const char *show_ident(const struct ident *);
+extern const char *show_string(const struct string *string);
+extern const char *show_token(const struct token *);
+extern const char *quote_token(const struct token *);
+extern struct token * tokenize(const char *, int, struct token *, const char **next_path);
+extern struct token * tokenize_buffer(void *, unsigned long, struct token **);
+
+extern void show_identifier_stats(void);
+extern void init_include_path(void);
+extern struct token *preprocess(struct token *);
+
+extern void store_all_tokens(struct token *token);
+extern struct token *pos_get_token(struct position pos);
+extern char *pos_ident(struct position pos);
+
+extern void store_macro_pos(struct token *);
+extern char *get_macro_name(struct position pos);
+
+static inline int match_op(struct token *token, unsigned int op)
+{
+	return token->pos.type == TOKEN_SPECIAL && token->special == op;
+}
+
+static inline int match_ident(struct token *token, struct ident *id)
+{
+	return token->pos.type == TOKEN_IDENT && token->ident == id;
+}
+
+#endif
--- /dev/null	Fri Dec 21 15:00:39 2018
+++ new/usr/src/tools/smatch/src/token_store.c	Fri Dec 21 15:00:39 2018
@@ -0,0 +1,177 @@
+/*
+ * sparse/token_store.c
+ *
+ * Copyright (C) 2012 Oracle.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include "lib.h"
+#include "parse.h"
+#include "allocate.h"
+
+struct line {
+	struct position pos;
+	struct line *prev;
+	struct token *token;
+	struct line *next;
+};
+
+__ALLOCATOR(struct token, "token store", perm_token);
+ALLOCATOR(line, "line of tokens");
+
+static struct token *copy_token(struct token *token)
+{
+	struct token *new;
+
+	new = __alloc_perm_token(0);
+	memcpy(new, token, sizeof(*token));
+	new->next = NULL;
+	return new;
+}
+
+static struct line *cursor;
+
+static void find_line(struct position pos)
+{
+	if (!cursor)
+		return;
+	if (pos.line == cursor->pos.line)
+		return;
+	if (pos.line < cursor->pos.line) {
+		if (!cursor->prev)
+			return;
+		cursor = cursor->prev;
+		find_line(pos);
+		return;
+	}
+	if (!cursor->next)
+		return;
+	if (pos.line < cursor->next->pos.line)
+		return;
+	cursor = cursor->next;
+	find_line(pos);
+}
+
+static void insert_into_line(struct token **current, struct token *new)
+{
+	if (!*current) {
+		*current = new;
+		return;
+	}
+
+	if (new->pos.pos < (*current)->pos.pos) {
+		new->next = *current;
+		*current = new;
+		return;
+	}
+
+	if (new->pos.pos == (*current)->pos.pos)
+		return;
+
+	insert_into_line(&(*current)->next, new);
+}
+
+static void store_token(struct token *token)
+{
+	token = copy_token(token);
+
+	find_line(token->pos);
+
+	if (!cursor) {
+		cursor = __alloc_line(0);
+		cursor->pos = token->pos;
+		cursor->token = token;
+		return;
+	}
+
+	if (token->pos.line < cursor->pos.line) {
+		cursor->prev = __alloc_line(0);
+		cursor->prev->next = cursor;
+		cursor = cursor->prev;
+		cursor->pos = token->pos;
+		cursor->token = token;
+		return;
+	}
+
+	if (token->pos.line == cursor->pos.line) {
+		insert_into_line(&cursor->token, token);
+		return;
+	}
+
+	cursor->next = __alloc_line(0);
+	cursor->next->prev = cursor;
+	cursor = cursor->next;
+	cursor->pos = token->pos;
+	cursor->token = token;
+}
+
+void store_all_tokens(struct token *token)
+{
+	while (token_type(token) != TOKEN_STREAMEND) {
+		store_token(token);
+		token = token->next;
+	}
+}
+
+struct token *first_token_from_line(struct position pos)
+{
+	find_line(pos);
+
+	if (!cursor)
+		return NULL;
+
+	if (cursor->pos.stream != pos.stream)
+		return NULL;
+	if (cursor->pos.line != pos.line)
+		return NULL;
+
+	return cursor->token;
+}
+
+struct token *pos_get_token(struct position pos)
+{
+	struct token *token;
+
+	token = first_token_from_line(pos);
+	while (token) {
+		if (pos.pos == token->pos.pos)
+			return token;
+		if (pos.pos < token->pos.pos)
+			return NULL;
+		token = token->next;
+	}
+	return NULL;
+}
+
+char *pos_ident(struct position pos)
+{
+	struct token *token;
+
+	token = pos_get_token(pos);
+	if (!token)
+		return NULL;
+	if (token_type(token) != TOKEN_IDENT)
+		return NULL;
+	return token->ident->name;
+}
+
--- /dev/null	Fri Dec 21 15:00:39 2018
+++ new/usr/src/tools/smatch/src/tokenize.c	Fri Dec 21 15:00:39 2018
@@ -0,0 +1,1044 @@
+/*
+ * This is a really stupid C tokenizer. It doesn't do any include
+ * files or anything complex at all. That's the preprocessor.
+ *
+ * Copyright (C) 2003 Transmeta Corp.
+ *               2003 Linus Torvalds
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <string.h>
+#include <ctype.h>
+#include <unistd.h>
+#include <stdint.h>
+
+#include "lib.h"
+#include "allocate.h"
+#include "token.h"
+#include "symbol.h"
+
+#define EOF (-1)
+
+int input_stream_nr = 0;
+struct stream *input_streams;
+static int input_streams_allocated;
+unsigned int tabstop = 8;
+int no_lineno = 0;
+
+#define BUFSIZE (8192)
+
+typedef struct {
+	int fd, offset, size;
+	int pos, line, nr;
+	int newline, whitespace;
+	struct token **tokenlist;
+	struct token *token;
+	unsigned char *buffer;
+} stream_t;
+
+const char *stream_name(int stream)
+{
+	if (stream < 0 || stream > input_stream_nr)
+		return "<bad stream>";
+	return input_streams[stream].name;
+}
+
+static struct position stream_pos(stream_t *stream)
+{
+	struct position pos;
+	pos.type = 0;
+	pos.stream = stream->nr;
+	pos.newline = stream->newline;
+	pos.whitespace = stream->whitespace;
+	pos.pos = stream->pos;
+
+	pos.line = stream->line;
+	if (no_lineno)
+		pos.line = 123456;
+
+	pos.noexpand = 0;
+	return pos;
+}
+
+const char *show_special(int val)
+{
+	static char buffer[4];
+
+	buffer[0] = val;
+	buffer[1] = 0;
+	if (val >= SPECIAL_BASE)
+		strcpy(buffer, (char *) combinations[val - SPECIAL_BASE]);
+	return buffer;
+}
+
+const char *show_ident(const struct ident *ident)
+{
+	static char buffer[256];
+	if (!ident)
+		return "<noident>";
+	sprintf(buffer, "%.*s", ident->len, ident->name);
+	return buffer;
+}
+
+static char *charstr(char *ptr, unsigned char c, unsigned char escape, unsigned char next)
+{
+	if (isprint(c)) {
+		if (c == escape || c == '\\')
+			*ptr++ = '\\';
+		*ptr++ = c;
+		return ptr;
+	}
+	*ptr++ = '\\';
+	switch (c) {
+	case '\n':
+		*ptr++ = 'n';
+		return ptr;
+	case '\t':
+		*ptr++ = 't';
+		return ptr;
+	}
+	if (!isdigit(next))
+		return ptr + sprintf(ptr, "%o", c);
+		
+	return ptr + sprintf(ptr, "%03o", c);
+}
+
+const char *show_string(const struct string *string)
+{
+	static char buffer[4 * MAX_STRING + 3];
+	char *ptr;
+	int i;
+
+	if (!string->length)
+		return "<bad_string>";
+	ptr = buffer;
+	*ptr++ = '"';
+	for (i = 0; i < string->length-1; i++) {
+		const char *p = string->data + i;
+		ptr = charstr(ptr, p[0], '"', p[1]);
+	}
+	*ptr++ = '"';
+	*ptr = '\0';
+	return buffer;
+}
+
+static const char *show_char(const char *s, size_t len, char prefix, char delim)
+{
+	static char buffer[MAX_STRING + 4];
+	char *p = buffer;
+	if (prefix)
+		*p++ = prefix;
+	*p++ = delim;
+	memcpy(p, s, len);
+	p += len;
+	*p++ = delim;
+	*p++ = '\0';
+	return buffer;
+}
+
+static const char *quote_char(const char *s, size_t len, char prefix, char delim)
+{
+	static char buffer[2*MAX_STRING + 6];
+	size_t i;
+	char *p = buffer;
+	if (prefix)
+		*p++ = prefix;
+	if (delim == '"')
+		*p++ = '\\';
+	*p++ = delim;
+	for (i = 0; i < len; i++) {
+		if (s[i] == '"' || s[i] == '\\')
+			*p++ = '\\';
+		*p++ = s[i];
+	}
+	if (delim == '"')
+		*p++ = '\\';
+	*p++ = delim;
+	*p++ = '\0';
+	return buffer;
+}
+
+const char *show_token(const struct token *token)
+{
+	static char buffer[256];
+
+	if (!token)
+		return "<no token>";
+	switch (token_type(token)) {
+	case TOKEN_ERROR:
+		return "syntax error";
+
+	case TOKEN_EOF:
+		return "end-of-input";
+
+	case TOKEN_IDENT:
+		return show_ident(token->ident);
+
+	case TOKEN_NUMBER:
+		return token->number;
+
+	case TOKEN_SPECIAL:
+		return show_special(token->special);
+
+	case TOKEN_CHAR: 
+		return show_char(token->string->data,
+			token->string->length - 1, 0, '\'');
+	case TOKEN_CHAR_EMBEDDED_0 ... TOKEN_CHAR_EMBEDDED_3:
+		return show_char(token->embedded,
+			token_type(token) - TOKEN_CHAR, 0, '\'');
+	case TOKEN_WIDE_CHAR: 
+		return show_char(token->string->data,
+			token->string->length - 1, 'L', '\'');
+	case TOKEN_WIDE_CHAR_EMBEDDED_0 ... TOKEN_WIDE_CHAR_EMBEDDED_3:
+		return show_char(token->embedded,
+			token_type(token) - TOKEN_WIDE_CHAR, 'L', '\'');
+	case TOKEN_STRING: 
+		return show_char(token->string->data,
+			token->string->length - 1, 0, '"');
+	case TOKEN_WIDE_STRING: 
+		return show_char(token->string->data,
+			token->string->length - 1, 'L', '"');
+
+	case TOKEN_STREAMBEGIN:
+		sprintf(buffer, "<beginning of '%s'>", stream_name(token->pos.stream));
+		return buffer;
+
+	case TOKEN_STREAMEND:
+		sprintf(buffer, "<end of '%s'>", stream_name(token->pos.stream));
+		return buffer;
+
+	case TOKEN_UNTAINT:
+		sprintf(buffer, "<untaint>");
+		return buffer;
+
+	case TOKEN_ARG_COUNT:
+		sprintf(buffer, "<argcnt>");
+		return buffer;
+
+	default:
+		sprintf(buffer, "unhandled token type '%d' ", token_type(token));
+		return buffer;
+	}
+}
+
+const char *quote_token(const struct token *token)
+{
+	static char buffer[256];
+
+	switch (token_type(token)) {
+	case TOKEN_ERROR:
+		return "syntax error";
+
+	case TOKEN_IDENT:
+		return show_ident(token->ident);
+
+	case TOKEN_NUMBER:
+		return token->number;
+
+	case TOKEN_SPECIAL:
+		return show_special(token->special);
+
+	case TOKEN_CHAR: 
+		return quote_char(token->string->data,
+			token->string->length - 1, 0, '\'');
+	case TOKEN_CHAR_EMBEDDED_0 ... TOKEN_CHAR_EMBEDDED_3:
+		return quote_char(token->embedded,
+			token_type(token) - TOKEN_CHAR, 0, '\'');
+	case TOKEN_WIDE_CHAR: 
+		return quote_char(token->string->data,
+			token->string->length - 1, 'L', '\'');
+	case TOKEN_WIDE_CHAR_EMBEDDED_0 ... TOKEN_WIDE_CHAR_EMBEDDED_3:
+		return quote_char(token->embedded,
+			token_type(token) - TOKEN_WIDE_CHAR, 'L', '\'');
+	case TOKEN_STRING: 
+		return quote_char(token->string->data,
+			token->string->length - 1, 0, '"');
+	case TOKEN_WIDE_STRING: 
+		return quote_char(token->string->data,
+			token->string->length - 1, 'L', '"');
+	default:
+		sprintf(buffer, "unhandled token type '%d' ", token_type(token));
+		return buffer;
+	}
+}
+
+#define HASHED_INPUT_BITS (6)
+#define HASHED_INPUT (1 << HASHED_INPUT_BITS)
+#define HASH_PRIME 0x9e370001UL
+
+static int input_stream_hashes[HASHED_INPUT] = { [0 ... HASHED_INPUT-1] = -1 };
+
+int *hash_stream(const char *name)
+{
+	uint32_t hash = 0;
+	unsigned char c;
+
+	while ((c = *name++) != 0)
+		hash = (hash + (c << 4) + (c >> 4)) * 11;
+
+	hash *= HASH_PRIME;
+	hash >>= 32 - HASHED_INPUT_BITS;
+	return input_stream_hashes + hash;
+}
+
+int init_stream(const char *name, int fd, const char **next_path)
+{
+	int stream = input_stream_nr, *hash;
+	struct stream *current;
+
+	if (stream >= input_streams_allocated) {
+		int newalloc = stream * 4 / 3 + 10;
+		input_streams = realloc(input_streams, newalloc * sizeof(struct stream));
+		if (!input_streams)
+			die("Unable to allocate more streams space");
+		input_streams_allocated = newalloc;
+	}
+	current = input_streams + stream;
+	memset(current, 0, sizeof(*current));
+	current->name = name;
+	current->fd = fd;
+	current->next_path = next_path;
+	current->path = NULL;
+	current->constant = CONSTANT_FILE_MAYBE;
+	input_stream_nr = stream+1;
+	hash = hash_stream(name);
+	current->next_stream = *hash;
+	*hash = stream;
+	return stream;
+}
+
+static struct token * alloc_token(stream_t *stream)
+{
+	struct token *token = __alloc_token(0);
+	token->pos = stream_pos(stream);
+	return token;
+}
+
+/*
+ *  Argh...  That was surprisingly messy - handling '\r' complicates the
+ *  things a _lot_.
+ */
+static int nextchar_slow(stream_t *stream)
+{
+	int offset = stream->offset;
+	int size = stream->size;
+	int c;
+	int spliced = 0, had_cr, had_backslash;
+
+restart:
+	had_cr = had_backslash = 0;
+
+repeat:
+	if (offset >= size) {
+		if (stream->fd < 0)
+			goto got_eof;
+		size = read(stream->fd, stream->buffer, BUFSIZE);
+		if (size <= 0)
+			goto got_eof;
+		stream->size = size;
+		stream->offset = offset = 0;
+	}
+
+	c = stream->buffer[offset++];
+	if (had_cr)
+		goto check_lf;
+
+	if (c == '\r') {
+		had_cr = 1;
+		goto repeat;
+	}
+
+norm:
+	if (!had_backslash) {
+		switch (c) {
+		case '\t':
+			stream->pos += tabstop - stream->pos % tabstop;
+			break;
+		case '\n':
+			stream->line++;
+			stream->pos = 0;
+			stream->newline = 1;
+			break;
+		case '\\':
+			had_backslash = 1;
+			stream->pos++;
+			goto repeat;
+		default:
+			stream->pos++;
+		}
+	} else {
+		if (c == '\n') {
+			stream->line++;
+			stream->pos = 0;
+			spliced = 1;
+			goto restart;
+		}
+		offset--;
+		c = '\\';
+	}
+out:
+	stream->offset = offset;
+
+	return c;
+
+check_lf:
+	if (c != '\n')
+		offset--;
+	c = '\n';
+	goto norm;
+
+got_eof:
+	if (had_backslash) {
+		c = '\\';
+		goto out;
+	}
+	if (stream->pos)
+		warning(stream_pos(stream), "no newline at end of file");
+	else if (spliced)
+		warning(stream_pos(stream), "backslash-newline at end of file");
+	return EOF;
+}
+
+/*
+ *  We want that as light as possible while covering all normal cases.
+ *  Slow path (including the logics with line-splicing and EOF sanity
+ *  checks) is in nextchar_slow().
+ */
+static inline int nextchar(stream_t *stream)
+{
+	int offset = stream->offset;
+
+	if (offset < stream->size) {
+		int c = stream->buffer[offset++];
+		static const char special[256] = {
+			['\t'] = 1, ['\r'] = 1, ['\n'] = 1, ['\\'] = 1
+		};
+		if (!special[c]) {
+			stream->offset = offset;
+			stream->pos++;
+			return c;
+		}
+	}
+	return nextchar_slow(stream);
+}
+
+struct token eof_token_entry;
+
+static struct token *mark_eof(stream_t *stream)
+{
+	struct token *end;
+
+	end = alloc_token(stream);
+	token_type(end) = TOKEN_STREAMEND;
+	end->pos.newline = 1;
+
+	eof_token_entry.next = &eof_token_entry;
+	eof_token_entry.pos.newline = 1;
+
+	end->next =  &eof_token_entry;
+	*stream->tokenlist = end;
+	stream->tokenlist = NULL;
+	return end;
+}
+
+static void add_token(stream_t *stream)
+{
+	struct token *token = stream->token;
+
+	stream->token = NULL;
+	token->next = NULL;
+	*stream->tokenlist = token;
+	stream->tokenlist = &token->next;
+}
+
+static void drop_token(stream_t *stream)
+{
+	stream->newline |= stream->token->pos.newline;
+	stream->whitespace |= stream->token->pos.whitespace;
+	stream->token = NULL;
+}
+
+enum {
+	Letter = 1,
+	Digit = 2,
+	Hex = 4,
+	Exp = 8,
+	Dot = 16,
+	ValidSecond = 32,
+	Quote = 64,
+};
+
+static const long cclass[257] = {
+	['0' + 1 ... '7' + 1] = Digit | Hex,	/* \<octal> */
+	['8' + 1 ... '9' + 1] = Digit | Hex,
+	['A' + 1 ... 'D' + 1] = Letter | Hex,
+	['E' + 1] = Letter | Hex | Exp,	/* E<exp> */
+	['F' + 1] = Letter | Hex,
+	['G' + 1 ... 'O' + 1] = Letter,
+	['P' + 1] = Letter | Exp,	/* P<exp> */
+	['Q' + 1 ... 'Z' + 1] = Letter,
+	['a' + 1 ... 'b' + 1] = Letter | Hex, /* \a, \b */
+	['c' + 1 ... 'd' + 1] = Letter | Hex,
+	['e' + 1] = Letter | Hex | Exp,/* \e, e<exp> */
+	['f' + 1] = Letter | Hex,	/* \f */
+	['g' + 1 ... 'm' + 1] = Letter,
+	['n' + 1] = Letter,	/* \n */
+	['o' + 1] = Letter,
+	['p' + 1] = Letter | Exp,	/* p<exp> */
+	['q' + 1] = Letter,
+	['r' + 1] = Letter,	/* \r */
+	['s' + 1] = Letter,
+	['t' + 1] = Letter,	/* \t */
+	['u' + 1] = Letter,
+	['v' + 1] = Letter,	/* \v */
+	['w' + 1] = Letter,
+	['x' + 1] = Letter,	/* \x<hex> */
+	['y' + 1 ... 'z' + 1] = Letter,
+	['_' + 1] = Letter,
+	['.' + 1] = Dot | ValidSecond,
+	['=' + 1] = ValidSecond,
+	['+' + 1] = ValidSecond,
+	['-' + 1] = ValidSecond,
+	['>' + 1] = ValidSecond,
+	['<' + 1] = ValidSecond,
+	['&' + 1] = ValidSecond,
+	['|' + 1] = ValidSecond,
+	['#' + 1] = ValidSecond,
+	['\'' + 1] = Quote,
+	['"' + 1] = Quote,
+};
+
+/*
+ * pp-number:
+ *	digit
+ *	. digit
+ *	pp-number digit
+ *	pp-number identifier-nodigit
+ *	pp-number e sign
+ *	pp-number E sign
+ *	pp-number p sign
+ *	pp-number P sign
+ *	pp-number .
+ */
+static int get_one_number(int c, int next, stream_t *stream)
+{
+	struct token *token;
+	static char buffer[4095];
+	char *p = buffer, *buf, *buffer_end = buffer + sizeof (buffer);
+	int len;
+
+	*p++ = c;
+	for (;;) {
+		long class =  cclass[next + 1];
+		if (!(class & (Dot | Digit | Letter)))
+			break;
+		if (p != buffer_end)
+			*p++ = next;
+		next = nextchar(stream);
+		if (class & Exp) {
+			if (next == '-' || next == '+') {
+				if (p != buffer_end)
+					*p++ = next;
+				next = nextchar(stream);
+			}
+		}
+	}
+
+	if (p == buffer_end) {
+		sparse_error(stream_pos(stream), "number token exceeds %td characters",
+		      buffer_end - buffer);
+		// Pretend we saw just "1".
+		buffer[0] = '1';
+		p = buffer + 1;
+	}
+
+	*p++ = 0;
+	len = p - buffer;
+	buf = __alloc_bytes(len);
+	memcpy(buf, buffer, len);
+
+	token = stream->token;
+	token_type(token) = TOKEN_NUMBER;
+	token->number = buf;
+	add_token(stream);
+
+	return next;
+}
+
+static int eat_string(int next, stream_t *stream, enum token_type type)
+{
+	static char buffer[MAX_STRING];
+	struct string *string;
+	struct token *token = stream->token;
+	int len = 0;
+	int escape;
+	int want_hex = 0;
+	char delim = type < TOKEN_STRING ? '\'' : '"';
+
+	for (escape = 0; escape || next != delim; next = nextchar(stream)) {
+		if (len < MAX_STRING)
+			buffer[len] = next;
+		len++;
+		if (next == '\n') {
+			warning(stream_pos(stream),
+				"Newline in string or character constant");
+			if (delim == '\'') /* assume it's lost ' */
+				break;
+		}
+		if (next == EOF) {
+			warning(stream_pos(stream),
+				"End of file in middle of string");
+			return next;
+		}
+		if (!escape) {
+			if (want_hex && !(cclass[next + 1] & Hex))
+				warning(stream_pos(stream),
+					"\\x used with no following hex digits");
+			want_hex = 0;
+			escape = next == '\\';
+		} else {
+			escape = 0;
+			want_hex = next == 'x';
+		}
+	}
+	if (want_hex)
+		warning(stream_pos(stream),
+			"\\x used with no following hex digits");
+	if (len > MAX_STRING) {
+		warning(stream_pos(stream), "string too long (%d bytes, %d bytes max)", len, MAX_STRING);
+		len = MAX_STRING;
+	}
+	if (delim == '\'' && len <= 4) {
+		if (len == 0) {
+			sparse_error(stream_pos(stream),
+				"empty character constant");
+			return nextchar(stream);
+		}
+		token_type(token) = type + len;
+		memset(buffer + len, '\0', 4 - len);
+		memcpy(token->embedded, buffer, 4);
+	} else {
+		token_type(token) = type;
+		string = __alloc_string(len+1);
+		memcpy(string->data, buffer, len);
+		string->data[len] = '\0';
+		string->length = len+1;
+		token->string = string;
+	}
+
+	/* Pass it on.. */
+	token = stream->token;
+	add_token(stream);
+	return nextchar(stream);
+}
+
+static int drop_stream_eoln(stream_t *stream)
+{
+	drop_token(stream);
+	for (;;) {
+		switch (nextchar(stream)) {
+		case EOF:
+			return EOF;
+		case '\n':
+			return nextchar(stream);
+		}
+	}
+}
+
+static int drop_stream_comment(stream_t *stream)
+{
+	int newline;
+	int next;
+	drop_token(stream);
+	newline = stream->newline;
+
+	next = nextchar(stream);
+	for (;;) {
+		int curr = next;
+		if (curr == EOF) {
+			warning(stream_pos(stream), "End of file in the middle of a comment");
+			return curr;
+		}
+		next = nextchar(stream);
+		if (curr == '*' && next == '/')
+			break;
+	}
+	stream->newline = newline;
+	return nextchar(stream);
+}
+
+unsigned char combinations[][4] = COMBINATION_STRINGS;
+
+#define NR_COMBINATIONS (SPECIAL_ARG_SEPARATOR - SPECIAL_BASE)
+
+/* hash function for two-character punctuators - all give unique values */
+#define special_hash(c0, c1) (((c0*8+c1*2)+((c0*8+c1*2)>>5))&31)
+
+/*
+ * note that we won't get false positives - special_hash(0,0) is 0 and
+ * entry 0 is filled (by +=), so all the missing ones are OK.
+ */
+static unsigned char hash_results[32][2] = {
+#define RES(c0, c1) [special_hash(c0, c1)] = {c0, c1}
+	RES('+', '='), /* 00 */
+	RES('/', '='), /* 01 */
+	RES('^', '='), /* 05 */
+	RES('&', '&'), /* 07 */
+	RES('#', '#'), /* 08 */
+	RES('<', '<'), /* 0a */
+	RES('<', '='), /* 0c */
+	RES('!', '='), /* 0e */
+	RES('%', '='), /* 0f */
+	RES('-', '-'), /* 10 */
+	RES('-', '='), /* 11 */
+	RES('-', '>'), /* 13 */
+	RES('=', '='), /* 15 */
+	RES('&', '='), /* 17 */
+	RES('*', '='), /* 18 */
+	RES('.', '.'), /* 1a */
+	RES('+', '+'), /* 1b */
+	RES('|', '='), /* 1c */
+	RES('>', '='), /* 1d */
+	RES('|', '|'), /* 1e */
+	RES('>', '>')  /* 1f */
+#undef RES
+};
+static int code[32] = {
+#define CODE(c0, c1, value) [special_hash(c0, c1)] = value
+	CODE('+', '=', SPECIAL_ADD_ASSIGN), /* 00 */
+	CODE('/', '=', SPECIAL_DIV_ASSIGN), /* 01 */
+	CODE('^', '=', SPECIAL_XOR_ASSIGN), /* 05 */
+	CODE('&', '&', SPECIAL_LOGICAL_AND), /* 07 */
+	CODE('#', '#', SPECIAL_HASHHASH), /* 08 */
+	CODE('<', '<', SPECIAL_LEFTSHIFT), /* 0a */
+	CODE('<', '=', SPECIAL_LTE), /* 0c */
+	CODE('!', '=', SPECIAL_NOTEQUAL), /* 0e */
+	CODE('%', '=', SPECIAL_MOD_ASSIGN), /* 0f */
+	CODE('-', '-', SPECIAL_DECREMENT), /* 10 */
+	CODE('-', '=', SPECIAL_SUB_ASSIGN), /* 11 */
+	CODE('-', '>', SPECIAL_DEREFERENCE), /* 13 */
+	CODE('=', '=', SPECIAL_EQUAL), /* 15 */
+	CODE('&', '=', SPECIAL_AND_ASSIGN), /* 17 */
+	CODE('*', '=', SPECIAL_MUL_ASSIGN), /* 18 */
+	CODE('.', '.', SPECIAL_DOTDOT), /* 1a */
+	CODE('+', '+', SPECIAL_INCREMENT), /* 1b */
+	CODE('|', '=', SPECIAL_OR_ASSIGN), /* 1c */
+	CODE('>', '=', SPECIAL_GTE), /* 1d */
+	CODE('|', '|', SPECIAL_LOGICAL_OR), /* 1e */
+	CODE('>', '>', SPECIAL_RIGHTSHIFT)  /* 1f */
+#undef CODE
+};
+
+static int get_one_special(int c, stream_t *stream)
+{
+	struct token *token;
+	int next, value, i;
+
+	next = nextchar(stream);
+
+	/*
+	 * Check for numbers, strings, character constants, and comments
+	 */
+	switch (c) {
+	case '.':
+		if (next >= '0' && next <= '9')
+			return get_one_number(c, next, stream);
+		break;
+	case '"':
+		return eat_string(next, stream, TOKEN_STRING);
+	case '\'':
+		return eat_string(next, stream, TOKEN_CHAR);
+	case '/':
+		if (next == '/')
+			return drop_stream_eoln(stream);
+		if (next == '*')
+			return drop_stream_comment(stream);
+	}
+
+	/*
+	 * Check for combinations
+	 */
+	value = c;
+	if (cclass[next + 1] & ValidSecond) {
+		i = special_hash(c, next);
+		if (hash_results[i][0] == c && hash_results[i][1] == next) {
+			value = code[i];
+			next = nextchar(stream);
+			if (value >= SPECIAL_LEFTSHIFT &&
+			    next == "==."[value - SPECIAL_LEFTSHIFT]) {
+				value += 3;
+				next = nextchar(stream);
+			}
+		}
+	}
+
+	/* Pass it on.. */
+	token = stream->token;
+	token_type(token) = TOKEN_SPECIAL;
+	token->special = value;
+	add_token(stream);
+	return next;
+}
+
+#define IDENT_HASH_BITS (13)
+#define IDENT_HASH_SIZE (1<<IDENT_HASH_BITS)
+#define IDENT_HASH_MASK (IDENT_HASH_SIZE-1)
+
+#define ident_hash_init(c)		(c)
+#define ident_hash_add(oldhash,c)	((oldhash)*11 + (c))
+#define ident_hash_end(hash)		((((hash) >> IDENT_HASH_BITS) + (hash)) & IDENT_HASH_MASK)
+
+static struct ident *hash_table[IDENT_HASH_SIZE];
+static int ident_hit, ident_miss, idents;
+
+void show_identifier_stats(void)
+{
+	int i;
+	int distribution[100];
+
+	fprintf(stderr, "identifiers: %d hits, %d misses\n",
+		ident_hit, ident_miss);
+
+	for (i = 0; i < 100; i++)
+		distribution[i] = 0;
+
+	for (i = 0; i < IDENT_HASH_SIZE; i++) {
+		struct ident * ident = hash_table[i];
+		int count = 0;
+
+		while (ident) {
+			count++;
+			ident = ident->next;
+		}
+		if (count > 99)
+			count = 99;
+		distribution[count]++;
+	}
+
+	for (i = 0; i < 100; i++) {
+		if (distribution[i])
+			fprintf(stderr, "%2d: %d buckets\n", i, distribution[i]);
+	}
+}
+
+static struct ident *alloc_ident(const char *name, int len)
+{
+	struct ident *ident = __alloc_ident(len);
+	ident->symbols = NULL;
+	ident->len = len;
+	ident->tainted = 0;
+	memcpy(ident->name, name, len);
+	return ident;
+}
+
+static struct ident * insert_hash(struct ident *ident, unsigned long hash)
+{
+	ident->next = hash_table[hash];
+	hash_table[hash] = ident;
+	ident_miss++;
+	return ident;
+}
+
+static struct ident *create_hashed_ident(const char *name, int len, unsigned long hash)
+{
+	struct ident *ident;
+	struct ident **p;
+
+	p = &hash_table[hash];
+	while ((ident = *p) != NULL) {
+		if (ident->len == (unsigned char) len) {
+			if (strncmp(name, ident->name, len) != 0)
+				goto next;
+
+			ident_hit++;
+			return ident;
+		}
+next:
+		//misses++;
+		p = &ident->next;
+	}
+	ident = alloc_ident(name, len);
+	*p = ident;
+	ident->next = NULL;
+	ident_miss++;
+	idents++;
+	return ident;
+}
+
+static unsigned long hash_name(const char *name, int len)
+{
+	unsigned long hash;
+	const unsigned char *p = (const unsigned char *)name;
+
+	hash = ident_hash_init(*p++);
+	while (--len) {
+		unsigned int i = *p++;
+		hash = ident_hash_add(hash, i);
+	}
+	return ident_hash_end(hash);
+}
+
+struct ident *hash_ident(struct ident *ident)
+{
+	return insert_hash(ident, hash_name(ident->name, ident->len));
+}
+
+struct ident *built_in_ident(const char *name)
+{
+	int len = strlen(name);
+	return create_hashed_ident(name, len, hash_name(name, len));
+}
+
+struct token *built_in_token(int stream, struct ident *ident)
+{
+	struct token *token;
+
+	token = __alloc_token(0);
+	token->pos.stream = stream;
+	token_type(token) = TOKEN_IDENT;
+	token->ident = ident;
+	return token;
+}
+
+static int get_one_identifier(int c, stream_t *stream)
+{
+	struct token *token;
+	struct ident *ident;
+	unsigned long hash;
+	char buf[256];
+	int len = 1;
+	int next;
+
+	hash = ident_hash_init(c);
+	buf[0] = c;
+	for (;;) {
+		next = nextchar(stream);
+		if (!(cclass[next + 1] & (Letter | Digit)))
+			break;
+		if (len >= sizeof(buf))
+			break;
+		hash = ident_hash_add(hash, next);
+		buf[len] = next;
+		len++;
+	};
+	if (cclass[next + 1] & Quote) {
+		if (len == 1 && buf[0] == 'L') {
+			if (next == '\'')
+				return eat_string(nextchar(stream), stream,
+							TOKEN_WIDE_CHAR);
+			else
+				return eat_string(nextchar(stream), stream,
+							TOKEN_WIDE_STRING);
+		}
+	}
+	hash = ident_hash_end(hash);
+	ident = create_hashed_ident(buf, len, hash);
+
+	/* Pass it on.. */
+	token = stream->token;
+	token_type(token) = TOKEN_IDENT;
+	token->ident = ident;
+	add_token(stream);
+	return next;
+}		
+
+static int get_one_token(int c, stream_t *stream)
+{
+	long class = cclass[c + 1];
+	if (class & Digit)
+		return get_one_number(c, nextchar(stream), stream);
+	if (class & Letter)
+		return get_one_identifier(c, stream);
+	return get_one_special(c, stream);
+}
+
+static struct token *setup_stream(stream_t *stream, int idx, int fd,
+	unsigned char *buf, unsigned int buf_size)
+{
+	struct token *begin;
+
+	stream->nr = idx;
+	stream->line = 1;
+	stream->newline = 1;
+	stream->whitespace = 0;
+	stream->pos = 0;
+
+	stream->token = NULL;
+	stream->fd = fd;
+	stream->offset = 0;
+	stream->size = buf_size;
+	stream->buffer = buf;
+
+	begin = alloc_token(stream);
+	token_type(begin) = TOKEN_STREAMBEGIN;
+	stream->tokenlist = &begin->next;
+	return begin;
+}
+
+static struct token *tokenize_stream(stream_t *stream)
+{
+	int c = nextchar(stream);
+	while (c != EOF) {
+		if (!isspace(c)) {
+			struct token *token = alloc_token(stream);
+			stream->token = token;
+			stream->newline = 0;
+			stream->whitespace = 0;
+			c = get_one_token(c, stream);
+			continue;
+		}
+		stream->whitespace = 1;
+		c = nextchar(stream);
+	}
+	return mark_eof(stream);
+}
+
+struct token * tokenize_buffer(void *buffer, unsigned long size, struct token **endtoken)
+{
+	stream_t stream;
+	struct token *begin;
+
+	begin = setup_stream(&stream, 0, -1, buffer, size);
+	*endtoken = tokenize_stream(&stream);
+	return begin;
+}
+
+struct token * tokenize(const char *name, int fd, struct token *endtoken, const char **next_path)
+{
+	struct token *begin, *end;
+	stream_t stream;
+	unsigned char buffer[BUFSIZE];
+	int idx;
+
+	idx = init_stream(name, fd, next_path);
+	if (idx < 0) {
+		// info(endtoken->pos, "File %s is const", name);
+		return endtoken;
+	}
+
+	begin = setup_stream(&stream, idx, fd, buffer, 0);
+	end = tokenize_stream(&stream);
+	if (endtoken)
+		end->next = endtoken;
+	return begin;
+}
--- /dev/null	Fri Dec 21 15:00:39 2018
+++ new/usr/src/tools/smatch/src/unssa.c	Fri Dec 21 15:00:39 2018
@@ -0,0 +1,147 @@
+/*
+ * UnSSA - translate the SSA back to normal form.
+ *
+ * For now it's done by replacing to set of copies:
+ * 1) For each phi-node, replace all their phisrc by copies to a common
+ *    temporary.
+ * 2) Replace all the phi-nodes by copies of the temporaries to the phi-node target.
+ *    This is node to preserve the semantic of the phi-node (they should all "execute"
+ *    simultaneously on entry in the basic block in which they belong).
+ *
+ * This is similar to the "Sreedhar method I" except that the copies to the
+ * temporaries are not placed at the end of the predecessor basic blocks, but
+ * at the place where the phi-node operands are defined.
+ * This is particulary easy since these copies are essentialy already present
+ * as the corresponding OP_PHISOURCE.
+ *
+ * While very simple this method create a lot more copies that really necessary.
+ * We eliminate some of these copies but most probably most of them are still
+ * useless.
+ * Ideally, "Sreedhar method III" should be used:
+ * "Translating Out of Static Single Assignment Form", V. C. Sreedhar, R. D.-C. Ju,
+ * D. M. Gillies and V. Santhanam.  SAS'99, Vol. 1694 of Lecture Notes in Computer
+ * Science, Springer-Verlag, pp. 194-210, 1999.
+ * But for this we need precise liveness, on each %phi and not only on OP_PHI's
+ * target pseudos.
+ *
+ * Copyright (C) 2005 Luc Van Oostenryck
+ */
+
+#include "lib.h"
+#include "linearize.h"
+#include "allocate.h"
+#include "flow.h"
+#include <assert.h>
+
+
+static inline int nbr_pseudo_users(pseudo_t p)
+{
+	return ptr_list_size((struct ptr_list *)p->users);
+}
+
+static int simplify_phi_node(struct instruction *phi, pseudo_t tmp)
+{
+	pseudo_t target = phi->target;
+	struct pseudo_user *pu;
+	pseudo_t src;
+
+	// verify if this phi can be simplified
+	FOR_EACH_PTR(phi->phi_list, src) {
+		struct instruction *def = src->def;
+
+		if (!def)
+			continue;
+		if (def->bb == phi->bb)
+			return 0;
+	} END_FOR_EACH_PTR(src);
+
+	// no need to make a copy of this one
+	// -> replace the target pseudo by the tmp
+	FOR_EACH_PTR(target->users, pu) {
+		use_pseudo(pu->insn, tmp, pu->userp);
+	} END_FOR_EACH_PTR(pu);
+
+	phi->bb = NULL;
+	return 1;
+}
+
+static void replace_phi_node(struct instruction *phi)
+{
+	pseudo_t tmp;
+	pseudo_t p;
+
+	tmp = alloc_pseudo(NULL);
+	tmp->type = phi->target->type;
+	tmp->ident = phi->target->ident;
+	tmp->def = NULL;		// defined by all the phisrc
+
+	// can we avoid to make of copy?
+	simplify_phi_node(phi, tmp);
+
+	// rewrite all it's phi_src to copy to a new tmp
+	FOR_EACH_PTR(phi->phi_list, p) {
+		struct instruction *def = p->def;
+		pseudo_t src;
+
+		if (p == VOID)
+			continue;
+
+		assert(def->opcode == OP_PHISOURCE);
+
+		def->opcode = OP_COPY;
+		def->target = tmp;
+
+		// can we eliminate the copy?
+		src = def->phi_src;
+		if (src->type != PSEUDO_REG)
+			continue;
+		switch (nbr_pseudo_users(src)) {
+			struct instruction *insn;
+		case 1:
+			insn = src->def;
+			if (!insn)
+				break;
+			insn->target = tmp;
+		case 0:
+			kill_instruction(def);
+			def->bb = NULL;
+		}
+	} END_FOR_EACH_PTR(p);
+
+	if (!phi->bb)
+		return;
+
+	// rewrite the phi node:
+	//	phi	%rt, ...
+	// to:
+	//	copy	%rt, %tmp
+	phi->opcode = OP_COPY;
+	use_pseudo(phi, tmp, &phi->src);
+}
+
+static void rewrite_phi_bb(struct basic_block *bb)
+{
+	struct instruction *insn;
+
+	// Replace all the phi-nodes by copies of a temporary
+	// (which represent the set of all the %phi that feed them).
+	// The target pseudo doesn't change.
+	FOR_EACH_PTR(bb->insns, insn) {
+		if (!insn->bb)
+			continue;
+		if (insn->opcode != OP_PHI)
+			continue;
+		replace_phi_node(insn);
+	} END_FOR_EACH_PTR(insn);
+}
+
+int unssa(struct entrypoint *ep)
+{
+	struct basic_block *bb;
+
+	FOR_EACH_PTR(ep->bbs, bb) {
+		rewrite_phi_bb(bb);
+	} END_FOR_EACH_PTR(bb);
+
+	return 0;
+}
--- /dev/null	Fri Dec 21 15:00:39 2018
+++ new/usr/src/tools/smatch/src/validation/.gitignore	Fri Dec 21 15:00:39 2018
@@ -0,0 +1,4 @@
+# test-suite
+*.diff
+*.got
+*.expected
--- /dev/null	Fri Dec 21 15:00:40 2018
+++ new/usr/src/tools/smatch/src/validation/Woverride-init-def.c	Fri Dec 21 15:00:40 2018
@@ -0,0 +1,14 @@
+static int array[] = {
+	[1] = 3,
+	[1] = 1,		/* check-should-warn */
+};
+
+/*
+ * check-name: Woverride-init-def
+ * check-command: sparse $file
+ *
+ * check-error-start
+Woverride-init-def.c:2:10: warning: Initializer entry defined twice
+Woverride-init-def.c:3:10:   also defined here
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:40 2018
+++ new/usr/src/tools/smatch/src/validation/Woverride-init-no.c	Fri Dec 21 15:00:40 2018
@@ -0,0 +1,12 @@
+static int array[] = {
+	[1] = 3,
+	[1] = 1,		/* check-should-warn */
+};
+
+/*
+ * check-name: Woverride-init-no
+ * check-command: sparse -Wno-override-init $file
+ *
+ * check-error-start
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:40 2018
+++ new/usr/src/tools/smatch/src/validation/Woverride-init-yes.c	Fri Dec 21 15:00:40 2018
@@ -0,0 +1,14 @@
+static int array[] = {
+	[1] = 3,
+	[1] = 1,		/* check-should-warn */
+};
+
+/*
+ * check-name: Woverride-init-yes
+ * check-command: sparse -Woverride-init $file
+ *
+ * check-error-start
+Woverride-init-yes.c:2:10: warning: Initializer entry defined twice
+Woverride-init-yes.c:3:10:   also defined here
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:40 2018
+++ new/usr/src/tools/smatch/src/validation/Wunknown-attribute-def.c	Fri Dec 21 15:00:40 2018
@@ -0,0 +1,9 @@
+static int foo(void) __attribute__((unknown_attribute));
+
+/*
+ * check-name: warn-unknown-attribute
+ *
+ * check-error-start
+Wunknown-attribute-def.c:1:37: warning: attribute 'unknown_attribute': unknown attribute
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:40 2018
+++ new/usr/src/tools/smatch/src/validation/Wunknown-attribute-no.c	Fri Dec 21 15:00:40 2018
@@ -0,0 +1,9 @@
+static int foo(void) __attribute__((unknown_attribute));
+
+/*
+ * check-name: warn-unknown-attribute-no
+ * check-command: sparse -Wno-unknown-attribute $file
+ *
+ * check-error-start
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:40 2018
+++ new/usr/src/tools/smatch/src/validation/Wunknown-attribute-yes.c	Fri Dec 21 15:00:40 2018
@@ -0,0 +1,10 @@
+static int foo(void) __attribute__((unknown_attribute));
+
+/*
+ * check-name: warn-unknown-attribute-yes
+ * check-command: sparse -Wunknown-attribute $file
+ *
+ * check-error-start
+Wunknown-attribute-yes.c:1:37: warning: attribute 'unknown_attribute': unknown attribute
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:40 2018
+++ new/usr/src/tools/smatch/src/validation/__func__.c	Fri Dec 21 15:00:40 2018
@@ -0,0 +1,15 @@
+static void f(void)
+{
+	char *s1 = __func__;
+	char arr[2 * (sizeof __func__ == 2) - 1];
+	char *s2 = __func__ __func__;
+}
+/*
+ * check-name: __func__
+ * check-command: sparse -Wall $file
+ *
+ * check-error-start
+__func__.c:5:29: error: Expected ; at end of declaration
+__func__.c:5:29: error: got __func__
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:40 2018
+++ new/usr/src/tools/smatch/src/validation/abstract-array-declarator-static.c	Fri Dec 21 15:00:40 2018
@@ -0,0 +1,14 @@
+
+extern void f1(int g[static 1]);
+extern void f2(int g[static restrict 1]);
+extern void f3(int g[restrict static 1]);
+extern void f4(int g[static restrict static 1]);	/* duplicate static error */
+extern void f5(int g[restrict static static 1]);	/* duplicate static error */
+
+/*
+ * check-name: abstract array declarator static
+ * check-error-start
+abstract-array-declarator-static.c:5:38: error: duplicate array static declarator
+abstract-array-declarator-static.c:6:38: error: duplicate array static declarator
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:40 2018
+++ new/usr/src/tools/smatch/src/validation/address_space.c	Fri Dec 21 15:00:40 2018
@@ -0,0 +1,17 @@
+#define __user __attribute__((address_space(1)))
+
+extern int poke_memory(void *addr);
+
+static int sys_do_stuff(void __user *user_addr)
+{
+	return poke_memory(user_addr);
+}
+/*
+ * check-name: address_space attribute
+ *
+ * check-error-start
+address_space.c:7:28: warning: incorrect type in argument 1 (different address spaces)
+address_space.c:7:28:    expected void *addr
+address_space.c:7:28:    got void <asn:1>*user_addr
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:40 2018
+++ new/usr/src/tools/smatch/src/validation/alias-distinct.c	Fri Dec 21 15:00:40 2018
@@ -0,0 +1,17 @@
+extern int g;
+extern int h;
+
+static int foo(void)
+{
+	g = 1;
+	h = 2;
+	return g == 1;
+}
+
+/*
+ * check-name: alias distinct symbols
+ * check-command: test-linearize $file
+ * check-output-ignore
+ *
+ * check-output-contains: ret\\..* *\\$1
+ */
--- /dev/null	Fri Dec 21 15:00:40 2018
+++ new/usr/src/tools/smatch/src/validation/alias-mixed.c	Fri Dec 21 15:00:40 2018
@@ -0,0 +1,30 @@
+extern int g;
+
+
+static int foo(int *p)
+{
+	*p = 1;
+	g = 2;
+	return *p == 1;
+}
+
+static int bar(int *p)
+{
+	g = 1;
+	*p = 2;
+	return g == 1;
+}
+
+static void test(void)
+{
+	foo(&g);
+	bar(&g);
+}
+
+/*
+ * check-name: alias symbol/pointer
+ * check-command: test-linearize $file
+ * check-output-ignore
+ *
+ * check-output-excludes: ret\\..* *\\$1
+ */
--- /dev/null	Fri Dec 21 15:00:40 2018
+++ new/usr/src/tools/smatch/src/validation/alias-same.c	Fri Dec 21 15:00:40 2018
@@ -0,0 +1,17 @@
+extern int g;
+
+
+static int foo(void)
+{
+	g = 1;
+	g = 2;
+	return g != 1;
+}
+
+/*
+ * check-name: alias same symbols
+ * check-command: test-linearize $file
+ * check-output-ignore
+ *
+ * check-output-contains: ret\\..* *\\$1
+ */
--- /dev/null	Fri Dec 21 15:00:40 2018
+++ new/usr/src/tools/smatch/src/validation/alloc-align.c	Fri Dec 21 15:00:40 2018
@@ -0,0 +1,38 @@
+typedef unsigned long int size_t;
+
+/*
+ * The alloc_align attribute is used to tell the compiler that the return
+ * value points to memory, where the returned pointer minimum alignment is given
+ * by one of the functions parameters. GCC uses this information to improve
+ * pointer alignment analysis.
+ *
+ * The function parameter denoting the allocated alignment is specified by one
+ * integer argument, whose number is the argument of the attribute. Argument
+ * numbering starts at one.
+ *
+ * For instance,
+ *
+ *    void* my_memalign(size_t, size_t) __attribute__((alloc_align(1)))
+ *
+ * declares that my_memalign returns memory with minimum alignment given by
+ * parameter 1.
+ */
+
+#define __alloc_align(x)  __attribute__((__alloc_align__(x)))
+
+/*
+ * The aligned_alloc function allocates space for an object whose alignment is
+ * specified by alignment, whose size is specified by size, and whose value is
+ * indeterminate. The value of alignment shall be a valid alignment supported
+ * by the implementation and the value of size shall be an integral multiple
+ * of alignment.
+ *
+ * The aligned_alloc function returns either a null pointer or a pointer to the
+ * allocated space.
+ */
+void *aligned_alloc(size_t alignment, size_t size) __alloc_align(1);
+
+
+/*
+ * check-name: attribute __alloc_align__
+ */
--- /dev/null	Fri Dec 21 15:00:41 2018
+++ new/usr/src/tools/smatch/src/validation/alternate-keywords.c	Fri Dec 21 15:00:41 2018
@@ -0,0 +1,46 @@
+
+extern float strtof(const char *__restrict__ ptr, char **__restrict__ endptr);
+extern double strtod(const char *__restrict ptr, char **__restrict endptr);
+/* restrict: -std=c99 or -std=gnu99 or -std=c11 */
+extern long double strtold(const char *restrict ptr, char **restrict endptr);
+
+extern int (*funcs[])(void);
+
+/* typeof: no -std or -std=gnu90 or -std=gnu99 or -std=gnu11 */
+extern typeof (funcs[0]) f0;
+extern __typeof (funcs[1]) f1;
+extern __typeof__(funcs[2]) f2;
+
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+typedef unsigned long long uint64_t;
+
+static __inline__ uint16_t swap16(uint16_t val)
+{
+	return ((((uint16_t)(val) & (uint16_t)0x00ffU) << 8) |
+		(((uint16_t)(val) & (uint16_t)0xff00U) >> 8));
+}
+
+static __inline uint32_t swap32(uint32_t val)
+{
+	return ((((uint32_t)(val) & (uint32_t)0x000000ffUL) << 24) |
+		(((uint32_t)(val) & (uint32_t)0x0000ff00UL) <<  8) |
+		(((uint32_t)(val) & (uint32_t)0x00ff0000UL) >>  8) |
+		(((uint32_t)(val) & (uint32_t)0xff000000UL) >> 24));
+}
+
+/* inline: no -std or -std=gnu90 or -std=c99 or -std=c11 */
+static inline uint64_t swap64(uint64_t val)
+{
+	return ((((uint64_t)(val) & (uint64_t)0x00000000000000ffULL) << 56) |
+		(((uint64_t)(val) & (uint64_t)0x000000000000ff00ULL) << 40) |
+		(((uint64_t)(val) & (uint64_t)0x0000000000ff0000ULL) << 24) |
+		(((uint64_t)(val) & (uint64_t)0x00000000ff000000ULL) <<  8) |
+		(((uint64_t)(val) & (uint64_t)0x000000ff00000000ULL) >>  8) |
+		(((uint64_t)(val) & (uint64_t)0x0000ff0000000000ULL) >> 24) |
+		(((uint64_t)(val) & (uint64_t)0x00ff000000000000ULL) >> 40) |
+		(((uint64_t)(val) & (uint64_t)0xff00000000000000ULL) >> 56));
+}
+/*
+ * check-name: alternate keywords
+ */
--- /dev/null	Fri Dec 21 15:00:41 2018
+++ new/usr/src/tools/smatch/src/validation/anon-union.c	Fri Dec 21 15:00:41 2018
@@ -0,0 +1,11 @@
+struct s {
+        union {
+                int val;
+        };
+};
+
+static struct s foo = { .val = 5, };
+/*
+ * check-name: test anonymous union initializer
+ */
+
--- /dev/null	Fri Dec 21 15:00:41 2018
+++ new/usr/src/tools/smatch/src/validation/asm-empty-clobber.c	Fri Dec 21 15:00:41 2018
@@ -0,0 +1,28 @@
+
+# define __ASM_FORM(x)  " " #x " "
+# define JUMP_LABEL_INITIAL_NOP ".byte 0xe9 \n\t .long 0\n\t"
+# define __ASM_SEL(a,b) __ASM_FORM(b)
+#define _ASM_PTR        __ASM_SEL(.long, .quad)
+
+# define JUMP_LABEL(key, label)                                 \
+       do {                                                    \
+               asm goto("1:"                                   \
+                       JUMP_LABEL_INITIAL_NOP                  \
+                       ".pushsection __jump_table,  \"a\" \n\t"\
+                       _ASM_PTR "1b, %l[" #label "], %c0 \n\t" \
+                       ".popsection \n\t"                      \
+                       : :  "i" (key) :  : label);             \
+       } while (0)
+
+int main(int argc, char *argv[])
+{
+       JUMP_LABEL("1", do_trace );
+       return 1;
+do_trace:
+       return 0;
+}
+
+/*
+ *  check-name: Asm with goto labels.
+ */
+
--- /dev/null	Fri Dec 21 15:00:41 2018
+++ new/usr/src/tools/smatch/src/validation/asm-goto-lables.c	Fri Dec 21 15:00:41 2018
@@ -0,0 +1,22 @@
+static inline int __static_cpu_has(unsigned char bit)
+{
+       asm goto("1: jmp %l[t_no]\n"
+                "2:\n"
+                ".section .altinstructions,\"a\"\n"
+                "\n"
+                "1b\n"
+                "0\n"         /* no replacement */
+                " .byte %P0\n"         /* feature bit */
+                " .byte 2b - 1b\n"     /* source len */
+                " .byte 0\n"           /* replacement len */
+                " .byte 0xff + 0 - (2b-1b)\n"  /* padding */
+                ".previous\n"
+                : : "i" (bit) : : t_no, ble);
+       return 1;
+t_no:
+       return 0;
+}
+/*
+ *  check-name: Asm with goto labels.
+ */
+
--- /dev/null	Fri Dec 21 15:00:41 2018
+++ new/usr/src/tools/smatch/src/validation/asm-toplevel.c	Fri Dec 21 15:00:41 2018
@@ -0,0 +1,7 @@
+__asm__("/* nothing */");
+/*
+ * check-name: asm-toplevel.c
+ * check-command: test-linearize $file
+ * check-output-ignore
+ * check-output-contains: asm *".. nothing .."
+ */
--- /dev/null	Fri Dec 21 15:00:41 2018
+++ new/usr/src/tools/smatch/src/validation/attr-inline.c	Fri Dec 21 15:00:41 2018
@@ -0,0 +1,21 @@
+
+static inline __attribute__((__always_inline__)) int gt(int lhs, int rhs)
+{
+	return lhs > rhs;
+}
+
+extern inline __attribute__((__gnu_inline__)) int ge(int lhs, int rhs)
+{
+	return lhs >= rhs;
+}
+
+static __attribute__((__warning__("That's junk!"))) __attribute__((__unused__))
+__attribute__((__noinline__))
+void junk(void)
+{
+	__asm__("");
+}
+
+/*
+ * check-name: inline attributes
+ */
--- /dev/null	Fri Dec 21 15:00:41 2018
+++ new/usr/src/tools/smatch/src/validation/attr-no_sanitize_address.c	Fri Dec 21 15:00:41 2018
@@ -0,0 +1,9 @@
+#define __no_sanitize_address __attribute__((no_sanitize_address))
+
+static void __no_sanitize_address bar(void)
+{
+}
+
+/*
+ * check-name: attribute no_sanitize_address
+ */
--- /dev/null	Fri Dec 21 15:00:41 2018
+++ new/usr/src/tools/smatch/src/validation/attr-noclone.c	Fri Dec 21 15:00:41 2018
@@ -0,0 +1,9 @@
+#define noclone		__attribute__((__noclone__))
+
+static void noclone bar(void)
+{
+}
+
+/*
+ * check-name: attribute noclone
+ */
--- /dev/null	Fri Dec 21 15:00:41 2018
+++ new/usr/src/tools/smatch/src/validation/attr-optimize.c	Fri Dec 21 15:00:41 2018
@@ -0,0 +1,16 @@
+
+#define __noclone	__attribute__((__noclone__, __optimize__("no-tracer")))
+
+struct kvm_vcpu;
+
+static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
+{
+	__asm__("");
+}
+
+extern void *run;
+void *run = vmx_vcpu_run;
+
+/*
+ * check-name: optimize attributes
+ */
--- /dev/null	Fri Dec 21 15:00:41 2018
+++ new/usr/src/tools/smatch/src/validation/attr-warning.c	Fri Dec 21 15:00:41 2018
@@ -0,0 +1,8 @@
+# define __warndecl(name, msg) \
+  extern void name (void) __attribute__((__warning__ (msg)))
+
+__warndecl (__warn_func, "warn message");
+
+/*
+ * check-name: attribute warning
+ */
--- /dev/null	Fri Dec 21 15:00:41 2018
+++ new/usr/src/tools/smatch/src/validation/attr_aligned.c	Fri Dec 21 15:00:41 2018
@@ -0,0 +1,6 @@
+void *foo(void) __attribute__((__assume_aligned__(4096)));
+void *foo(void) __attribute__((assume_aligned(4096)));
+/*
+ * check-name: attribute assume_aligned
+ */
+
--- /dev/null	Fri Dec 21 15:00:41 2018
+++ new/usr/src/tools/smatch/src/validation/attr_in_parameter.c	Fri Dec 21 15:00:41 2018
@@ -0,0 +1,12 @@
+#define A __attribute__((address_space(1)))
+static int (A *p);
+static int A *q;
+static void (*f)(A int *x, A int *y) = (void *)0;
+static void g(int A *x)
+{
+	f(x, x);
+	p = q;
+}
+/*
+ * check-name: attribute after ( in direct-declarator
+ */
--- /dev/null	Fri Dec 21 15:00:41 2018
+++ new/usr/src/tools/smatch/src/validation/attr_vector_size.c	Fri Dec 21 15:00:41 2018
@@ -0,0 +1,7 @@
+typedef unsigned int u32;
+typedef u32 __attribute__((vector_size(16))) sse128_t;
+
+/*
+ * check-name: attribute vector_size
+ */
+
--- /dev/null	Fri Dec 21 15:00:42 2018
+++ new/usr/src/tools/smatch/src/validation/backend/arithmetic-ops.c	Fri Dec 21 15:00:42 2018
@@ -0,0 +1,94 @@
+static int add(int x, int y)
+{
+	return x + y;
+}
+
+static unsigned int uadd(unsigned int x, unsigned int y)
+{
+	return x + y;
+}
+
+static float fadd(float x, float y)
+{
+	return x + y;
+}
+
+static double dadd(double x, double y)
+{
+	return x + y;
+}
+
+static int sub(int x, int y)
+{
+	return x - y;
+}
+
+static unsigned int usub(unsigned int x, unsigned int y)
+{
+	return x - y;
+}
+
+static float fsub(float x, float y)
+{
+	return x - y;
+}
+
+static double dsub(double x, double y)
+{
+	return x - y;
+}
+
+static int mul(int x, int y)
+{
+	return x * y;
+}
+
+static unsigned int umul(unsigned int x, unsigned int y)
+{
+	return x * y;
+}
+
+static float fmul(float x, float y)
+{
+	return x * y;
+}
+
+static double dmul(double x, double y)
+{
+	return x * y;
+}
+
+static int div(int x, int y)
+{
+	return x / y;
+}
+
+static unsigned int udiv(unsigned int x, unsigned int y)
+{
+	return x / y;
+}
+
+static float fdiv(float x, float y)
+{
+	return x / y;
+}
+
+static double ddiv(double x, double y)
+{
+	return x / y;
+}
+
+static int mod(int x, int y)
+{
+	return x % y;
+}
+
+static unsigned int umod(unsigned int x, unsigned int y)
+{
+	return x % y;
+}
+
+/*
+ * check-name: Arithmetic operator code generation
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:00:42 2018
+++ new/usr/src/tools/smatch/src/validation/backend/array.c	Fri Dec 21 15:00:42 2018
@@ -0,0 +1,6 @@
+static char array[128];
+
+/*
+ * check-name: Array code generation
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:00:42 2018
+++ new/usr/src/tools/smatch/src/validation/backend/bitwise-ops.c	Fri Dec 21 15:00:42 2018
@@ -0,0 +1,64 @@
+static int shl(int x, int y)
+{
+	return x << y;
+}
+
+static unsigned int ushl(unsigned int x, unsigned int y)
+{
+	return x << y;
+}
+
+static int shr(int x, int y)
+{
+	return x >> y;
+}
+
+static unsigned int ushr(unsigned int x, unsigned int y)
+{
+	return x >> y;
+}
+
+static int and(int x, int y)
+{
+	return x & y;
+}
+
+static unsigned int uand(unsigned int x, unsigned int y)
+{
+	return x & y;
+}
+
+static int or(int x, int y)
+{
+	return x | y;
+}
+
+static unsigned int uor(unsigned int x, unsigned int y)
+{
+	return x | y;
+}
+
+static int xor(int x, int y)
+{
+	return x ^ y;
+}
+
+static unsigned int uxor(unsigned int x, unsigned int y)
+{
+	return x ^ y;
+}
+
+static int not(int x)
+{
+	return ~x;
+}
+
+static unsigned int unot(unsigned int x)
+{
+	return ~x;
+}
+
+/*
+ * check-name: Bitwise operator code generation
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:00:42 2018
+++ new/usr/src/tools/smatch/src/validation/backend/bool-test.c	Fri Dec 21 15:00:42 2018
@@ -0,0 +1,9 @@
+static _Bool return_false(void)
+{
+	return 0;
+}
+
+/*
+ * check-name: Boolean type code generation
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:00:42 2018
+++ new/usr/src/tools/smatch/src/validation/backend/cast.c	Fri Dec 21 15:00:42 2018
@@ -0,0 +1,50 @@
+typedef _Bool bool;
+typedef unsigned char uchar;
+typedef unsigned short ushort;
+typedef unsigned int uint;
+typedef unsigned long ulong;
+typedef long long longlong;
+typedef unsigned long long ulonglong;
+
+#define DEFINE_CAST(from, to)			\
+	static to from##2##to(from x) {		\
+		return x;			\
+	}
+
+#define DEFINE_CASTS(from)			\
+	DEFINE_CAST(from, bool)			\
+	DEFINE_CAST(from, char)			\
+	DEFINE_CAST(from, uchar)		\
+	DEFINE_CAST(from, short)		\
+	DEFINE_CAST(from, ushort)		\
+	DEFINE_CAST(from, int)			\
+	DEFINE_CAST(from, uint)			\
+	DEFINE_CAST(from, long)			\
+	DEFINE_CAST(from, ulong)		\
+	DEFINE_CAST(from, longlong)		\
+	DEFINE_CAST(from, ulonglong)		\
+/*
+	DEFINE_CAST(from, float)		\
+	DEFINE_CAST(from, double)
+*/
+
+DEFINE_CASTS(bool)
+DEFINE_CASTS(char)
+DEFINE_CASTS(uchar)
+DEFINE_CASTS(short)
+DEFINE_CASTS(ushort)
+DEFINE_CASTS(int)
+DEFINE_CASTS(uint)
+DEFINE_CASTS(long)
+DEFINE_CASTS(ulong)
+DEFINE_CASTS(longlong)
+DEFINE_CASTS(ulonglong)
+/*
+DEFINE_CASTS(float)
+DEFINE_CASTS(double)
+*/
+
+/*
+ * check-name: Cast code generation
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:00:42 2018
+++ new/usr/src/tools/smatch/src/validation/backend/cmp-ops.c	Fri Dec 21 15:00:42 2018
@@ -0,0 +1,84 @@
+static int sete(int x, int y)
+{
+	return x == y;
+}
+
+static int setne(int x, int y)
+{
+	return x != y;
+}
+
+static int setl(int x, int y)
+{
+	return x < y;
+}
+
+static int setg(int x, int y)
+{
+	return x > y;
+}
+
+static int setle(int x, int y)
+{
+	return x <= y;
+}
+
+static int setge(int x, int y)
+{
+	return x >= y;
+}
+
+static int setb(unsigned int x, unsigned int y)
+{
+	return x < y;
+}
+
+static int seta(unsigned int x, unsigned int y)
+{
+	return x > y;
+}
+
+static int setbe(unsigned int x, unsigned int y)
+{
+	return x <= y;
+}
+
+static int setae(unsigned int x, unsigned int y)
+{
+	return x >= y;
+}
+
+static int setfe(float x, float y)
+{
+	return x == y;
+}
+
+static int setfne(float x, float y)
+{
+	return x != y;
+}
+
+static int setfl(float x, float y)
+{
+	return x < y;
+}
+
+static int setfg(float x, float y)
+{
+	return x > y;
+}
+
+static int setfle(float x, float y)
+{
+	return x <= y;
+}
+
+static int setfge(float x, float y)
+{
+	return x >= y;
+}
+
+/*
+ * check-name: Comparison operator code generation
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:00:42 2018
+++ new/usr/src/tools/smatch/src/validation/backend/extern.c	Fri Dec 21 15:00:42 2018
@@ -0,0 +1,11 @@
+extern unsigned long foo;
+
+static unsigned long bar(void)
+{
+	return foo;
+}
+
+/*
+ * check-name: Extern symbol code generation
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:00:42 2018
+++ new/usr/src/tools/smatch/src/validation/backend/function-ptr.c	Fri Dec 21 15:00:42 2018
@@ -0,0 +1,11 @@
+typedef int (*fn_t)(int x, int y);
+
+static int run(fn_t fn, int x, int y)
+{
+	return fn(x, y);
+}
+
+/*
+ * check-name: Function pointer code generation
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:00:42 2018
+++ new/usr/src/tools/smatch/src/validation/backend/hello.c	Fri Dec 21 15:00:42 2018
@@ -0,0 +1,13 @@
+#include <stdio.h>
+
+int main(int argc, char *argv[])
+{
+	puts("hello, world");
+
+	return 0;
+}
+
+/*
+ * check-name: 'hello, world' code generation
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:00:42 2018
+++ new/usr/src/tools/smatch/src/validation/backend/int-cond.c	Fri Dec 21 15:00:42 2018
@@ -0,0 +1,30 @@
+static long foo(long a, long b, long c)
+{
+	return a? b:c;
+}
+
+static long foo_bool(_Bool a, long b, long c)
+{
+	return a? b:c;
+}
+
+static long bar(long a, long b, long c)
+{
+	if (a)
+		return b;
+	else
+		return b + c;
+}
+
+static long bar_bool(_Bool a, long b, long c)
+{
+	if (a)
+		return b;
+	else
+		return b + c;
+}
+
+/*
+ * check-name: Non-bool condition values in branch/select
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:00:42 2018
+++ new/usr/src/tools/smatch/src/validation/backend/load-type.c	Fri Dec 21 15:00:42 2018
@@ -0,0 +1,12 @@
+extern struct _IO_FILE *stdin;
+
+static void sub(struct _IO_FILE *in) {}
+
+static void test(void) {
+        sub(stdin);
+}
+
+/*
+ * check-name: Type of loaded objects
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:00:42 2018
+++ new/usr/src/tools/smatch/src/validation/backend/logical-ops.c	Fri Dec 21 15:00:42 2018
@@ -0,0 +1,24 @@
+static int and_bool(int x, int y)
+{
+	return x && y;
+}
+
+static unsigned int uand_bool(unsigned int x, unsigned int y)
+{
+	return x && y;
+}
+
+static int or_bool(int x, int y)
+{
+	return x || y;
+}
+
+static unsigned int uor_bool(unsigned int x, unsigned int y)
+{
+	return x || y;
+}
+
+/*
+ * check-name: Logical operator code generation
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:00:43 2018
+++ new/usr/src/tools/smatch/src/validation/backend/loop.c	Fri Dec 21 15:00:43 2018
@@ -0,0 +1,21 @@
+ 
+extern int bar (int);
+
+extern int foo (int);
+   
+int foo (int x)
+{
+	int y = 0;
+   
+	while (y < 1000) {
+		y += bar(x);
+	}
+   
+	return y;
+}
+    
+
+/*
+ * check-name: Loops
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:00:43 2018
+++ new/usr/src/tools/smatch/src/validation/backend/loop2.c	Fri Dec 21 15:00:43 2018
@@ -0,0 +1,14 @@
+extern int op(void);
+
+static void test(void)
+{
+	int i;
+	for (i = 0; ; i++) {
+		op();
+	}
+}
+
+/*
+ * check-name: Loops with unused counter
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:00:43 2018
+++ new/usr/src/tools/smatch/src/validation/backend/ptrcast.c	Fri Dec 21 15:00:43 2018
@@ -0,0 +1,9 @@
+static char *ptrcast(unsigned long *x)
+{
+	return (unsigned char *) x;
+}
+
+/*
+ * check-name: Pointer cast code generation
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:00:43 2018
+++ new/usr/src/tools/smatch/src/validation/backend/store-type.c	Fri Dec 21 15:00:43 2018
@@ -0,0 +1,12 @@
+struct foo;
+static struct foo *var;
+
+static void set(struct foo *f)
+{
+       var = f;
+}
+
+/*
+ * check-name: Type of stored objects
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:00:43 2018
+++ new/usr/src/tools/smatch/src/validation/backend/struct-access.c	Fri Dec 21 15:00:43 2018
@@ -0,0 +1,28 @@
+struct st {
+	int i, *d;
+};
+
+static int load_i(struct st *st)
+{
+	return st->i;
+}
+
+static void store_i(struct st *st, int i)
+{
+	st->i = i;
+}
+
+static int *load_d(struct st *st)
+{
+	return st->d;
+}
+
+static void store_d(struct st *st, int *d)
+{
+	st->d = d;
+}
+
+/*
+ * check-name: struct access code generation
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:00:43 2018
+++ new/usr/src/tools/smatch/src/validation/backend/struct.c	Fri Dec 21 15:00:43 2018
@@ -0,0 +1,25 @@
+struct ctype {
+	int			type;
+};
+
+struct symbol {
+	void			*p;
+	const char		*name;
+	struct ctype		ctype;
+	struct symbol		*next_id;
+};
+
+struct unnamed {
+	struct { int x, y; };
+};
+
+static struct symbol sym;
+static struct symbol *sym_p;
+static struct symbol *sym_q = &sym;
+
+static struct unnamed un;
+
+/*
+ * check-name: Struct code generation
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:00:43 2018
+++ new/usr/src/tools/smatch/src/validation/backend/sum.c	Fri Dec 21 15:00:43 2018
@@ -0,0 +1,28 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+static int sum(int n)
+{
+	int i, result = 0;
+
+	for (i = 1; i <= n; ++i)
+		result += i;
+	return result;
+}
+
+int main(int argc, char **argv)
+{
+	printf("%d\n", sum(5));
+	printf("%d\n", sum(100));
+	return 0;
+}
+
+/*
+ * check-name: sum from 1 to n
+ * check-command: sparsei $file
+ *
+ * check-output-start
+15
+5050
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:00:43 2018
+++ new/usr/src/tools/smatch/src/validation/backend/union.c	Fri Dec 21 15:00:43 2018
@@ -0,0 +1,12 @@
+union foo {
+	unsigned long		x;
+	unsigned char		y;
+	char			buf[128];
+};
+
+static union foo foo;
+
+/*
+ * check-name: Union code generation
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:00:43 2018
+++ new/usr/src/tools/smatch/src/validation/backend/void-return-type.c	Fri Dec 21 15:00:43 2018
@@ -0,0 +1,13 @@
+static void foo(void)
+{
+}
+
+static void *bar(void *p)
+{
+	return p;
+}
+
+/*
+ * check-name: void return type code generation
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:00:43 2018
+++ new/usr/src/tools/smatch/src/validation/bad-array-designated-initializer.c	Fri Dec 21 15:00:43 2018
@@ -0,0 +1,13 @@
+static int a[] = {
+	[0] = 0,		// OK
+	[\0] = 1,		// KO
+};
+/*
+ * check-name: Bad array designated initializer
+ *
+ * check-error-start
+bad-array-designated-initializer.c:3:10: error: Expected constant expression
+bad-array-designated-initializer.c:3:10: error: Expected } at end of initializer
+bad-array-designated-initializer.c:3:10: error: got \
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:43 2018
+++ new/usr/src/tools/smatch/src/validation/bad-assignment.c	Fri Dec 21 15:00:43 2018
@@ -0,0 +1,14 @@
+static int foo(int a)
+{
+	a |=\1;
+
+	return a;
+}
+/*
+ * check-name: bad assignment
+ *
+ * check-error-start
+bad-assignment.c:3:13: error: Expected ; at end of statement
+bad-assignment.c:3:13: error: got \
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:43 2018
+++ new/usr/src/tools/smatch/src/validation/bad-cast.c	Fri Dec 21 15:00:43 2018
@@ -0,0 +1,15 @@
+struct st;
+
+static int foo(int a)
+{
+	return (struct/st *) a;
+}
+/*
+ * check-name: Bad cast syntax
+ *
+ * check-error-start
+bad-cast.c:5:23: error: expected declaration
+bad-cast.c:5:23: error: Expected ) at end of cast operator
+bad-cast.c:5:23: error: got /
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:43 2018
+++ new/usr/src/tools/smatch/src/validation/bad-ternary-cond.c	Fri Dec 21 15:00:43 2018
@@ -0,0 +1,12 @@
+static int foo(int a)
+{
+	return a ?? 1 : 0;
+}
+/*
+ * check-name: Bad ternary syntax
+ * check-description: Once caused Sparse to segfault
+ * check-error-start
+bad-ternary-cond.c:3:19: error: Expected : in conditional expression
+bad-ternary-cond.c:3:19: error: got ?
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:44 2018
+++ new/usr/src/tools/smatch/src/validation/bad-typeof.c	Fri Dec 21 15:00:44 2018
@@ -0,0 +1,14 @@
+static int fun(void)
+{
+	typeof() a;
+	int b;
+
+	a = b;
+}
+/*
+ * check-name: Bad typeof syntax segfault
+ *
+ * check-error-start
+bad-typeof.c:3:16: error: expected expression after the '(' token
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:44 2018
+++ new/usr/src/tools/smatch/src/validation/badtype1.c	Fri Dec 21 15:00:44 2018
@@ -0,0 +1,10 @@
+static void foo(enum bar baz);
+
+/*
+ * check-name: enum not in scope
+ * check-known-to-fail
+ *
+ * check-error-start
+badtype1.c:1:22: warning: bad scope for 'enum bar'
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:44 2018
+++ new/usr/src/tools/smatch/src/validation/badtype2.c	Fri Dec 21 15:00:44 2018
@@ -0,0 +1,25 @@
+//typedef int undef;
+extern undef bar(void);
+static undef foo(char *c)
+{
+  char p = *c;
+  switch (p) {
+  default:
+    return bar();
+  }
+}
+
+/*
+ * check-name: missing type
+ * check-error-start
+badtype2.c:2:8: warning: 'undef' has implicit type
+badtype2.c:2:14: error: Expected ; at end of declaration
+badtype2.c:2:14: error: got bar
+badtype2.c:3:14: error: Expected ; at end of declaration
+badtype2.c:3:14: error: got foo
+badtype2.c:6:3: error: Trying to use reserved word 'switch' as identifier
+badtype2.c:7:3: error: not in switch scope
+badtype2.c:10:1: error: Expected ; at the end of type declaration
+badtype2.c:10:1: error: got }
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:44 2018
+++ new/usr/src/tools/smatch/src/validation/badtype3.c	Fri Dec 21 15:00:44 2018
@@ -0,0 +1,27 @@
+int
+foo (int (*func) (undef, void *), void *data)
+{
+  int err = 0;
+  while (cur) {
+    if ((*func) (cur, data))
+      break;
+  }
+  return err;
+}
+
+/*
+ * check-name: missing type in argument list
+ * check-error-start
+badtype3.c:2:18: warning: identifier list not in definition
+badtype3.c:2:24: error: Expected ) in function declarator
+badtype3.c:2:24: error: got ,
+badtype3.c:5:3: error: Trying to use reserved word 'while' as identifier
+badtype3.c:7:7: error: break/continue not in iterator scope
+badtype3.c:9:3: error: Trying to use reserved word 'return' as identifier
+badtype3.c:9:10: error: Expected ; at end of declaration
+badtype3.c:9:10: error: got err
+badtype3.c:10:1: error: Expected ; at the end of type declaration
+badtype3.c:10:1: error: got }
+badtype3.c:6:11: error: undefined identifier 'func'
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:44 2018
+++ new/usr/src/tools/smatch/src/validation/badtype4.c	Fri Dec 21 15:00:44 2018
@@ -0,0 +1,15 @@
+void a(void)
+{
+	switch(x) {
+	case 1:
+		break;
+	}
+}
+/*
+ * check-name: switch(bad_type) {...} segfault
+ *
+ * check-error-start
+badtype4.c:3:16: error: undefined identifier 'x'
+badtype4.c:4:14: error: incompatible types for 'case' statement
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:44 2018
+++ new/usr/src/tools/smatch/src/validation/badtype5.c	Fri Dec 21 15:00:44 2018
@@ -0,0 +1,18 @@
+#define	__force		__attribute__((force))
+
+int foo(int *addr);
+int foo(int *addr)
+{
+	return *(*((typeof(addr) __force *) addr));
+}
+
+/*
+ * check-name: badtype5.c
+ * check-description:
+ *	evaluate_dereference() used to miss a call to
+ *	examine_symbol_type(). This, in the present, left
+ *	a SYM_TYPEOF as type for the last dereferencing
+ *	which produced "error: cannot dereference this type".
+ *	The presence of the __force and the typeof is needed
+ *	to create the situation.
+ */
--- /dev/null	Fri Dec 21 15:00:44 2018
+++ new/usr/src/tools/smatch/src/validation/binary-constant.c	Fri Dec 21 15:00:44 2018
@@ -0,0 +1,7 @@
+extern int x;
+
+int x = 0b11;
+
+/*
+ * check-name: binary constant
+ */
--- /dev/null	Fri Dec 21 15:00:44 2018
+++ new/usr/src/tools/smatch/src/validation/bitfield-size.c	Fri Dec 21 15:00:44 2018
@@ -0,0 +1,41 @@
+struct bfu {
+	unsigned int a:4;
+	unsigned int  :2;
+	unsigned int b:4;
+};
+unsigned int get__bfu_a(struct bfu bf) { return bf.a; }
+unsigned int get__bfu_b(struct bfu bf) { return bf.b; }
+unsigned int get_pbfu_a(struct bfu *bf) { return bf->a; }
+unsigned int get_pbfu_b(struct bfu *bf) { return bf->b; }
+
+
+struct bfs {
+	signed int a:4;
+	signed int  :2;
+	signed int b:4;
+};
+signed int get__bfs_a(struct bfs bf) { return bf.a; }
+signed int get__bfs_b(struct bfs bf) { return bf.b; }
+signed int get_pbfs_a(struct bfs *bf) { return bf->a; }
+signed int get_pbfs_b(struct bfs *bf) { return bf->b; }
+
+
+struct bfi {
+	int a:4;
+	int  :2;
+	int b:4;
+};
+unsigned int get__bfi_a(struct bfi bf) { return bf.a; }
+unsigned int get__bfi_b(struct bfi bf) { return bf.b; }
+unsigned int get_pbfi_a(struct bfi *bf) { return bf->a; }
+unsigned int get_pbfi_b(struct bfi *bf) { return bf->b; }
+
+/*
+ * check-name: bitfield size
+ * check-command: test-linearize -Wno-decl $file
+ * check-output-ignore
+ *
+ * check-output-pattern-24-times: cast\\.
+ * check-output-pattern-12-times: cast\\.4
+ * check-output-pattern-6-times: lsr\\..*\\$6
+ */
--- /dev/null	Fri Dec 21 15:00:44 2018
+++ new/usr/src/tools/smatch/src/validation/bitfields.c	Fri Dec 21 15:00:44 2018
@@ -0,0 +1,21 @@
+/*
+ * Al Viro points out that we don't
+ * do bitfield -> integer promotions
+ * for array dereferences
+ *
+ * "warning: a.c:16:10: incompatible types for operation"
+ */
+static struct {
+	int x:4;
+} y;
+
+extern int a[];
+
+static int b(void)
+{
+	return a[y.x];
+}
+
+/*
+ * check-name: bitfield to integer promotion
+ */
--- /dev/null	Fri Dec 21 15:00:44 2018
+++ new/usr/src/tools/smatch/src/validation/bitwise-cast.c	Fri Dec 21 15:00:44 2018
@@ -0,0 +1,44 @@
+typedef unsigned int u32;
+typedef u32 __attribute__((bitwise)) __be32;
+
+/* Implicit casts of 0, legal */
+static __be32 foo(void)
+{
+	__be32 x = 0;
+
+	return 0;
+}
+
+/* Explicit cast of 0, legal */
+static __be32 bar(void)
+{
+	return (__be32)0;
+}
+
+/* Implicit casts of nonzero, bad */
+static __be32 baz(void)
+{
+	__be32 x = 0x2a;
+
+	return 99;
+}
+
+/* Explicit cast of nonzero, bad */
+static __be32 quux(void)
+{
+	return (__be32)1729;
+}
+
+/*
+ * check-name: conversions to bitwise types
+ * check-command: sparse -Wbitwise $file
+ * check-error-start
+bitwise-cast.c:21:20: warning: incorrect type in initializer (different base types)
+bitwise-cast.c:21:20:    expected restricted __be32 [usertype] x
+bitwise-cast.c:21:20:    got int
+bitwise-cast.c:23:16: warning: incorrect type in return expression (different base types)
+bitwise-cast.c:23:16:    expected restricted __be32
+bitwise-cast.c:23:16:    got int
+bitwise-cast.c:29:17: warning: cast to restricted __be32
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:44 2018
+++ new/usr/src/tools/smatch/src/validation/bool-array.c	Fri Dec 21 15:00:44 2018
@@ -0,0 +1,47 @@
+static _Bool boolarray_d1[1];
+static _Bool boolarray_d8[8];
+static _Bool boolarray_i2[2] = {
+	0,
+	1,
+};
+static int nd1 = sizeof(boolarray_d1);
+static int nd8 = sizeof(boolarray_d8);
+static int ni2 = sizeof(boolarray_i2);
+
+
+static long longarray_u2[] = {
+	0,
+	1,
+};
+static int nl2 = sizeof(longarray_u2);
+
+/*
+ * Used to get "warning: excessive elements in array initializer"
+ * for all elements but the first one.
+ * Note: only occurs if nbr of elements is a multiple of 8
+ *       (if not, theer was another problem)
+ */
+static _Bool boolarray_u8[] = {
+	0,
+	1,
+	0,
+	1,
+	0,
+	1,
+	0,
+	1,
+};
+
+/*
+ * Used to get "error: cannot size expression" for the sizeof.
+ */
+static _Bool boolarray_u2[] = {
+	0,
+	1,
+};
+static int nu2 = sizeof(boolarray_u2);
+
+/*
+ * check-name: sizeof(bool array)
+ * check-command: sparse -Wno-sizeof-bool $file
+ */
--- /dev/null	Fri Dec 21 15:00:44 2018
+++ new/usr/src/tools/smatch/src/validation/bool-cast-bad.c	Fri Dec 21 15:00:44 2018
@@ -0,0 +1,23 @@
+typedef unsigned short __attribute__((bitwise)) le16;
+struct s {
+	int a:2;
+	int b:2;
+	int c:2;
+};
+
+static _Bool fresi(le16 a)     { return a; }
+static _Bool frese(le16 a)     { return (_Bool)a; }
+static _Bool fstsi(struct s a) { return a; }
+static _Bool fstse(struct s a) { return (_Bool)a; }
+
+/*
+ * check-name: bool-cast-bad.c
+ * check-command: sparse $file
+ *
+ * check-error-start
+bool-cast-bad.c:10:41: warning: incorrect type in return expression (different base types)
+bool-cast-bad.c:10:41:    expected bool
+bool-cast-bad.c:10:41:    got struct s a
+bool-cast-bad.c:11:42: warning: cast from non-scalar
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:44 2018
+++ new/usr/src/tools/smatch/src/validation/bool-cast-explicit.c	Fri Dec 21 15:00:44 2018
@@ -0,0 +1,22 @@
+typedef unsigned int	u32;
+typedef          int	s32;
+typedef void *vdp;
+typedef int  *sip;
+typedef double dbl;
+typedef unsigned short __attribute__((bitwise)) le16;
+
+static _Bool fs32(s32 a) { return (_Bool)a; }
+static _Bool fu32(u32 a) { return (_Bool)a; }
+static _Bool fvdp(vdp a) { return (_Bool)a; }
+static _Bool fsip(sip a) { return (_Bool)a; }
+static _Bool fdbl(dbl a) { return (_Bool)a; }
+static _Bool ffun(void)  { return (_Bool)ffun; }
+
+static _Bool fres(le16 a) { return (_Bool)a; }
+
+/*
+ * check-name: bool-cast-explicit
+ * check-command: test-linearize -m64 $file
+ * check-output-ignore
+ * check-output-excludes: cast\\.
+ */
--- /dev/null	Fri Dec 21 15:00:45 2018
+++ new/usr/src/tools/smatch/src/validation/bool-cast-implicit.c	Fri Dec 21 15:00:45 2018
@@ -0,0 +1,25 @@
+typedef unsigned int	u32;
+typedef          int	s32;
+typedef void *vdp;
+typedef int  *sip;
+typedef double dbl;
+typedef unsigned short __attribute__((bitwise)) le16;
+
+static _Bool fs32(s32 a) { return a; }
+static _Bool fu32(u32 a) { return a; }
+static _Bool fvdp(vdp a) { return a; }
+static _Bool fsip(sip a) { return a; }
+static _Bool fdbl(dbl a) { return a; }
+static _Bool ffun(void)  { return ffun; }
+
+static _Bool fres(le16 a) { return a; }
+
+/*
+ * check-name: bool-cast-implicit
+ * check-command: test-linearize -m64 $file
+ * check-output-ignore
+ * check-output-excludes: cast\\.
+ *
+ * check-error-start
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:45 2018
+++ new/usr/src/tools/smatch/src/validation/bool-cast-restricted.c	Fri Dec 21 15:00:45 2018
@@ -0,0 +1,43 @@
+typedef unsigned   int __attribute__((bitwise)) large_t;
+#define	LBIT	((__attribute__((force)) large_t) 1)
+
+_Bool lfoo(large_t x) { return x; }
+_Bool qfoo(large_t x) { _Bool r = x; return r; }
+_Bool xfoo(large_t x) { return (_Bool)x; }
+_Bool lbar(large_t x) { return ~x; }
+_Bool qbar(large_t x) { _Bool r = ~x; return r; }
+_Bool xbar(large_t x) { return (_Bool)~x; }
+_Bool lbaz(large_t x) { return !x; }
+_Bool qbaz(large_t x) { _Bool r = !x; return r; }
+_Bool xbaz(large_t x) { return (_Bool)!x; }
+_Bool lqux(large_t x) { return x & LBIT; }
+_Bool qqux(large_t x) { _Bool r = x & LBIT; return r; }
+_Bool xqux(large_t x) { return (_Bool)(x & LBIT); }
+
+
+typedef unsigned short __attribute__((bitwise)) small_t;
+#define	SBIT	((__attribute__((force)) small_t) 1)
+
+_Bool sfoo(small_t x) { return x; }
+_Bool tfoo(small_t x) { _Bool r = x; return r; }
+_Bool zfoo(small_t x) { return (_Bool)x; }
+_Bool sbar(small_t x) { return ~x; }
+_Bool tbar(small_t x) { _Bool r = ~x; return r; }
+_Bool zbar(small_t x) { return (_Bool)~x; }
+_Bool sbaz(small_t x) { return !x; }
+_Bool tbaz(small_t x) { _Bool r = !x; return r; }
+_Bool zbaz(small_t x) { return (_Bool)!x; }
+_Bool squx(small_t x) { return x & SBIT; }
+_Bool tqux(small_t x) { _Bool r = x & SBIT; return r; }
+_Bool zqux(small_t x) { return (_Bool)(x & SBIT); }
+
+/*
+ * check-name: bool-cast-restricted.c
+ * check-command: sparse -Wno-decl $file
+ *
+ * check-error-start
+bool-cast-restricted.c:24:32: warning: restricted small_t degrades to integer
+bool-cast-restricted.c:25:35: warning: restricted small_t degrades to integer
+bool-cast-restricted.c:26:33: warning: restricted small_t degrades to integer
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:45 2018
+++ new/usr/src/tools/smatch/src/validation/bswap-constant-folding.c	Fri Dec 21 15:00:45 2018
@@ -0,0 +1,28 @@
+typedef unsigned short __be16;
+typedef unsigned short __u16;
+typedef unsigned short u16;
+#define __force
+
+#define __swab16(x) (__u16)__builtin_bswap16((__u16)(x))
+/* the test behaves as though it's always on a little-endian machine */
+#define __cpu_to_be16(x) ((__force __be16)__swab16((x)))
+#define ___htons(x) __cpu_to_be16(x)
+#define htons(x) ___htons(x)
+
+#define ETH_P_IPV6 0x86DD
+
+static u16 protocol;
+
+static void test(void)
+{
+	switch (protocol) {
+	case htons(ETH_P_IPV6):
+		break;
+	}
+}
+
+/*
+ * check-name: constant folding in bswap builtins
+ * check-error-start
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:45 2018
+++ new/usr/src/tools/smatch/src/validation/bug_inline_switch.c	Fri Dec 21 15:00:45 2018
@@ -0,0 +1,25 @@
+
+#define __u16 unsigned short
+int foo(__u16 n);
+static inline __u16 f(__u16 val)
+{
+       return val;
+}
+
+static inline unsigned int bar(__u16 n)
+{
+      switch (n) {
+      case (1 ? 1 : f(1)):
+              return 4;
+      }
+}
+
+int foo(__u16 n)
+{
+       bar(n);
+       bar(n);
+       return 0;
+}
+/*
+ * check-name: inlining switch statement
+ */
--- /dev/null	Fri Dec 21 15:00:45 2018
+++ new/usr/src/tools/smatch/src/validation/build_smatch_db.sh	Fri Dec 21 15:00:45 2018
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+../smatch --info $* > warns.txt
+../smatch_data/db/create_db.sh warns.txt > /dev/null 2>&1
+
--- /dev/null	Fri Dec 21 15:00:45 2018
+++ new/usr/src/tools/smatch/src/validation/builtin-args-checking.c	Fri Dec 21 15:00:45 2018
@@ -0,0 +1,45 @@
+static unsigned int bad_nbr_args_cte(int a)
+{
+	int r = 0;
+	r |= __builtin_bswap16();
+	r |= __builtin_bswap16(1, 2);
+	r |= __builtin_bswap32();
+	r |= __builtin_bswap32(1, 2);
+	r |= __builtin_bswap64();
+	r |= __builtin_bswap64(1, 2);
+	return r;
+}
+
+static unsigned int bad_nbr_args_var(int a, int b)
+{
+	int r = 0;
+	r |= __builtin_bswap16();
+	r |= __builtin_bswap16(a, b);
+	r |= __builtin_bswap32();
+	r |= __builtin_bswap32(a, b);
+	r |= __builtin_bswap64();
+	r |= __builtin_bswap64(a, b);
+	return r;
+}
+
+/*
+ * check-name: builtin-args-checking
+ * check-command: sparse $file
+ * check-description: Check that the arguments checking is done
+ *                    for expanded builtins with a prototype.
+ *
+ * check-error-start
+builtin-args-checking.c:4:31: error: not enough arguments for function __builtin_bswap16
+builtin-args-checking.c:5:31: error: too many arguments for function __builtin_bswap16
+builtin-args-checking.c:6:31: error: not enough arguments for function __builtin_bswap32
+builtin-args-checking.c:7:31: error: too many arguments for function __builtin_bswap32
+builtin-args-checking.c:8:31: error: not enough arguments for function __builtin_bswap64
+builtin-args-checking.c:9:31: error: too many arguments for function __builtin_bswap64
+builtin-args-checking.c:16:31: error: not enough arguments for function __builtin_bswap16
+builtin-args-checking.c:17:31: error: too many arguments for function __builtin_bswap16
+builtin-args-checking.c:18:31: error: not enough arguments for function __builtin_bswap32
+builtin-args-checking.c:19:31: error: too many arguments for function __builtin_bswap32
+builtin-args-checking.c:20:31: error: not enough arguments for function __builtin_bswap64
+builtin-args-checking.c:21:31: error: too many arguments for function __builtin_bswap64
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:45 2018
+++ new/usr/src/tools/smatch/src/validation/builtin-bswap-constant.c	Fri Dec 21 15:00:45 2018
@@ -0,0 +1,34 @@
+unsigned short bswap16(void);
+unsigned short bswap16(void)
+{
+	return __builtin_bswap16(0x1234);
+}
+
+unsigned int bswap32(void);
+unsigned int bswap32(void)
+{
+	return __builtin_bswap32(0x12345678);
+}
+
+unsigned long long bswap64(void);
+unsigned long long bswap64(void)
+{
+	return __builtin_bswap64(0x123456789abcdef0ULL);
+}
+
+unsigned int half_constant(void);
+unsigned int half_constant(void)
+{
+	int v = 0x12345678;
+	return __builtin_bswap32(v);
+}
+/*
+ * check-name: builtin-bswap-constant
+ * check-command: test-linearize $file
+ *
+ * check-output-ignore
+ * check-output-excludes: __builtin_bswap
+ * check-output-contains:ret.16 *.0x3412
+ * check-output-contains:ret.32 *.0x78563412
+ * check-output-contains:ret.64 *.0xf0debc9a78563412
+ */
--- /dev/null	Fri Dec 21 15:00:45 2018
+++ new/usr/src/tools/smatch/src/validation/builtin-bswap-variable.c	Fri Dec 21 15:00:45 2018
@@ -0,0 +1,32 @@
+typedef unsigned short	   u16;
+typedef unsigned int	   u32;
+typedef unsigned long long u64;
+
+static u16 swap16v(u16 a)
+{
+	return __builtin_bswap16(a);
+}
+
+static u32 swap32v(u64 a)
+{
+	return __builtin_bswap32(a);
+}
+
+static u64 swap64v(u32 a)
+{
+	return __builtin_bswap64(a);
+}
+
+/*
+ * check-name: builtin-bswap
+ * check-command: test-linearize $file
+ * check-description: Check that the right builtin function is called, and
+ *                    that the args are correctly promoted or truncated.
+ *
+ * check-output-ignore
+ * check-output-contains:call.16 .* __builtin_bswap16
+ * check-output-contains:cast.32 .* (64) %arg1
+ * check-output-contains:call.32 .* __builtin_bswap32
+ * check-output-contains:cast.64 .* (32) %arg1
+ * check-output-contains:call.64 .* __builtin_bswap64
+ */
--- /dev/null	Fri Dec 21 15:00:45 2018
+++ new/usr/src/tools/smatch/src/validation/builtin_atomic.c	Fri Dec 21 15:00:45 2018
@@ -0,0 +1,28 @@
+static void fn(void)
+{
+	static int i, *ptr = (void *)0;
+
+	i = __sync_fetch_and_add(ptr, 0);
+	i = __sync_fetch_and_sub(ptr, 0);
+	i = __sync_fetch_and_or(ptr, 0);
+	i = __sync_fetch_and_and(ptr, 0);
+	i = __sync_fetch_and_xor(ptr, 0);
+	i = __sync_fetch_and_nand(ptr, 0);
+	i = __sync_add_and_fetch(ptr, 0);
+	i = __sync_sub_and_fetch(ptr, 0);
+	i = __sync_or_and_fetch(ptr, 0);
+	i = __sync_and_and_fetch(ptr, 0);
+	i = __sync_xor_and_fetch(ptr, 0);
+	i = __sync_nand_and_fetch(ptr, 0);
+	i = __sync_bool_compare_and_swap(ptr, 0, 1);
+	i = __sync_val_compare_and_swap(ptr, 0, 1);
+	__sync_synchronize();
+	i = __sync_lock_test_and_set(ptr, 0);
+	__sync_lock_release(ptr);
+}
+
+/*
+ * check-name: __builtin_atomic
+ * check-error-start
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:45 2018
+++ new/usr/src/tools/smatch/src/validation/builtin_bswap.c	Fri Dec 21 15:00:45 2018
@@ -0,0 +1,9 @@
+static unsigned short x = __builtin_bswap16(0);
+static unsigned int y = __builtin_bswap32(0);
+static unsigned long long z = __builtin_bswap64(0);
+
+/*
+ * check-name: __builtin_bswap
+ * check-error-start
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:45 2018
+++ new/usr/src/tools/smatch/src/validation/builtin_inf.c	Fri Dec 21 15:00:45 2018
@@ -0,0 +1,16 @@
+static double d = __builtin_huge_val();
+static float f = __builtin_huge_valf();
+static long double l = __builtin_huge_vall();
+static double di = __builtin_inf();
+static float fi = __builtin_inff();
+static long double li = __builtin_infl();
+static double dn = __builtin_nan("");
+static float fn = __builtin_nanf("");
+static long double ln = __builtin_nanl("");
+static int inf = __builtin_isinf_sign(0.0);
+static int fin = __builtin_isfinite(0.0);
+static int nan = __builtin_isnan(0.0);
+
+/*
+ * check-name: __builtin INFINITY / nan()
+ */
--- /dev/null	Fri Dec 21 15:00:45 2018
+++ new/usr/src/tools/smatch/src/validation/builtin_safe1.c	Fri Dec 21 15:00:45 2018
@@ -0,0 +1,38 @@
+#define MY_MACRO(a) do { \
+  __builtin_warning(!__builtin_safe_p(a), "Macro argument with side effects: " #a); \
+    a;	\
+  } while (0)
+
+int g(int);
+int h(int) __attribute__((pure));
+int i(int) __attribute__((const));
+
+static int foo(int x, int y)
+{
+  /* unsafe: */
+  MY_MACRO(x++);
+  MY_MACRO(x+=1);
+  MY_MACRO(x=x+1);
+  MY_MACRO(x%=y);
+  MY_MACRO(x=y);
+  MY_MACRO(g(x));
+  MY_MACRO((y,g(x)));
+  /* safe: */
+  MY_MACRO(x+1);
+  MY_MACRO(h(x));
+  MY_MACRO(i(x));
+  return x;
+}
+
+/*
+ * check-name: __builtin_safe
+ * check-error-start
+builtin_safe1.c:13:3: warning: Macro argument with side effects: x++
+builtin_safe1.c:14:3: warning: Macro argument with side effects: x+=1
+builtin_safe1.c:15:3: warning: Macro argument with side effects: x=x+1
+builtin_safe1.c:16:3: warning: Macro argument with side effects: x%=y
+builtin_safe1.c:17:3: warning: Macro argument with side effects: x=y
+builtin_safe1.c:18:3: warning: Macro argument with side effects: g(x)
+builtin_safe1.c:19:3: warning: Macro argument with side effects: (y,g(x))
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:46 2018
+++ new/usr/src/tools/smatch/src/validation/builtin_unreachable.c	Fri Dec 21 15:00:46 2018
@@ -0,0 +1,15 @@
+/* example from gcc documents */
+
+void function_that_never_returns (void);
+
+static int g (int c)
+{
+	if (c)
+		return 1;
+	function_that_never_returns ();
+	__builtin_unreachable ();
+}
+     
+/*
+ * check-name: __builtin_unreachable()
+ */
--- /dev/null	Fri Dec 21 15:00:46 2018
+++ new/usr/src/tools/smatch/src/validation/builtin_va_arg_pack.c	Fri Dec 21 15:00:46 2018
@@ -0,0 +1,20 @@
+extern void v(int a, ...);
+
+extern inline __attribute__((__always_inline__)) void f(int a, ...)
+{
+	__SIZE_TYPE__ b = __builtin_va_arg_pack_len();
+}
+
+extern inline __attribute__((__always_inline__)) void g(int a, ...)
+{
+	v(a, __builtin_va_arg_pack());
+}
+
+static void h(void)
+{
+	f(0, 0);
+	g(0, 0);
+}
+/*
+ * check-name: __builtin_va_arg_pack()
+ */
--- /dev/null	Fri Dec 21 15:00:46 2018
+++ new/usr/src/tools/smatch/src/validation/c11-alignas.c	Fri Dec 21 15:00:46 2018
@@ -0,0 +1,40 @@
+static _Alignas(8)	int v;
+static _Alignas(long)	int t;
+static _Alignas(void *)	int p;
+static _Alignas(int[4])	int a;
+static _Alignas(0)	int z;
+static _Alignas(3)	int bnpow2;
+static _Alignas(-1)	int bneg;
+static _Alignas(-2)	int bnegpow2;
+static _Alignas(v)	int bnc;
+static _Alignas(+)	int bsyn;
+
+static int check(void)
+{
+	if (_Alignof(v) != 8)
+		return -1;
+	if (_Alignof(t) != _Alignof(long))
+		return -1;
+	if (_Alignof(p) != _Alignof(void *))
+		return -1;
+	if (_Alignof(a) != _Alignof(int))
+		return -1;
+
+	return 0;
+}
+
+/*
+ * check-name: c11-alignas
+ * check-command: test-linearize -std=c11 $file
+ *
+ * check-error-start
+c11-alignas.c:6:25: warning: non-power-of-2 alignment
+c11-alignas.c:7:25: warning: non-positive alignment
+c11-alignas.c:8:25: warning: non-positive alignment
+c11-alignas.c:9:17: error: bad constant expression
+c11-alignas.c:10:17: error: Syntax error in unary expression
+ * check-error-end
+ *
+ * check-output-ignore
+ * check-output-contains: ret\\.32 *\$0
+ */
--- /dev/null	Fri Dec 21 15:00:46 2018
+++ new/usr/src/tools/smatch/src/validation/c11-alignof.c	Fri Dec 21 15:00:46 2018
@@ -0,0 +1,12 @@
+static int foo(void)
+{
+	return _Alignof(short);
+}
+
+/*
+ * check-name: c11-alignof
+ * check-command: test-linearize -std=c11 $file
+ *
+ * check-output-ignore
+ * check-output-contains: ret\\.32 *\$2
+ */
--- /dev/null	Fri Dec 21 15:00:46 2018
+++ new/usr/src/tools/smatch/src/validation/c11-noreturn.c	Fri Dec 21 15:00:46 2018
@@ -0,0 +1,9 @@
+static _Noreturn void foo(void) { while (1) ; }
+
+/*
+ * check-name: c11-noreturn
+ * check-command: test-parsing -std=c11 $file
+ *
+ * check-output-ignore
+ * check-output-contains: \[noreturn\]
+ */
--- /dev/null	Fri Dec 21 15:00:46 2018
+++ new/usr/src/tools/smatch/src/validation/c11-stdc-version.c	Fri Dec 21 15:00:46 2018
@@ -0,0 +1,11 @@
+__STDC_VERSION__
+
+/*
+ * check-name: c11-stdc-version
+ * check-command: sparse -E -std=c11 $file
+ *
+ * check-output-start
+
+201112L
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:00:46 2018
+++ new/usr/src/tools/smatch/src/validation/c11-thread-local.c	Fri Dec 21 15:00:46 2018
@@ -0,0 +1,9 @@
+static _Thread_local int foo;
+
+/*
+ * check-name: c11-thread-local
+ * check-command: test-parsing -std=c11 $file
+ *
+ * check-output-ignore
+ * check-output-contains: \[tls\]
+ */
--- /dev/null	Fri Dec 21 15:00:46 2018
+++ new/usr/src/tools/smatch/src/validation/c99-for-loop-decl.c	Fri Dec 21 15:00:46 2018
@@ -0,0 +1,40 @@
+static int bad_scope(void)
+{
+	int r = 0;
+
+	for (int i = 0; i < 10; i++) {
+		r = i;
+	}
+
+	return i;			/* check-should-fail */
+}
+
+static int c99(void)
+{
+	int r = 0;
+
+	for (         int i = 0; i < 10; i++)	/* check-should-pass */
+		r = i;
+	for (    auto int j = 0; j < 10; j++)	/* check-should-pass */
+		r = j;
+	for (register int k = 0; k < 10; k++)	/* check-should-pass */
+		r = k;
+	for (  extern int l = 0; l < 10; l++)	/* check-should-fail */
+		r = l;
+	for (  extern int m;     m < 10; m++)	/* check-should-fail */
+		r = m;
+	for (  static int n = 0; n < 10; n++)	/* check-should-fail */
+		r = n;
+	return r;
+}
+
+/*
+ * check-name: C99 for-loop declarations
+ *
+ * check-error-start
+c99-for-loop-decl.c:22:27: error: non-local var 'l' in for-loop initializer
+c99-for-loop-decl.c:24:27: error: non-local var 'm' in for-loop initializer
+c99-for-loop-decl.c:26:27: error: non-local var 'n' in for-loop initializer
+c99-for-loop-decl.c:9:16: error: undefined identifier 'i'
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:46 2018
+++ new/usr/src/tools/smatch/src/validation/c99-for-loop.c	Fri Dec 21 15:00:46 2018
@@ -0,0 +1,21 @@
+int c99(void);
+int c99(void)
+{
+	int r = -1;
+
+	for (int i = 0; i < 10; i++) {
+		r = i;
+	}
+
+	return r;
+}
+
+/*
+ * check-name: C99 for loop variable declaration
+ * check-command: test-linearize $file
+ *
+ * check-output-ignore
+ * check-output-contains: phisrc\\.
+ * check-output-contains: phi\\.
+ * check-output-contains: add\\.
+ */
--- /dev/null	Fri Dec 21 15:00:46 2018
+++ new/usr/src/tools/smatch/src/validation/calling-convention-attributes.c	Fri Dec 21 15:00:46 2018
@@ -0,0 +1,26 @@
+extern void __attribute__((cdecl)) c1(void);
+typedef void (__attribute__((cdecl)) *c2)(void);
+typedef c2 c2ptr;
+
+extern void __attribute__((__cdecl__)) c_1(void);
+typedef void (__attribute__((__cdecl__)) *c_2)(void);
+typedef c_2 c_2ptr;
+
+extern void __attribute__((stdcall)) s1(void);
+typedef void (__attribute__((stdcall)) *s2)(void);
+typedef s2 s2ptr;
+
+extern void __attribute__((__stdcall__)) s_1(void);
+typedef void (__attribute__((__stdcall__)) *s_2)(void);
+typedef s_2 s_2ptr;
+
+extern void __attribute__((fastcall)) f1(void);
+typedef void (__attribute__((fastcall)) *f2)(void);
+typedef f2 f2ptr;
+
+extern void __attribute__((__fastcall__)) f_1(void);
+typedef void (__attribute__((__fastcall__)) *f_2)(void);
+typedef f_2 f_2ptr;
+/*
+ * check-name: Calling convention attributes
+ */
--- /dev/null	Fri Dec 21 15:00:46 2018
+++ new/usr/src/tools/smatch/src/validation/cast-constant-to-float.c	Fri Dec 21 15:00:46 2018
@@ -0,0 +1,35 @@
+typedef unsigned int uint;
+typedef unsigned long ulong;
+
+double f1(void) { return -1; }
+double f2(void) { return (double)-1; }
+double f3(void) { return -1.0; }
+
+/*
+ * check-name: cast-constant-to-float
+ * check-command: test-linearize -Wno-decl $file
+ *
+ * check-output-start
+f1:
+.L0:
+	<entry-point>
+	set.64      %r1 <- -1.000000
+	ret.64      %r1
+
+
+f2:
+.L2:
+	<entry-point>
+	set.64      %r3 <- -1.000000
+	ret.64      %r3
+
+
+f3:
+.L4:
+	<entry-point>
+	set.64      %r5 <- -1.000000
+	ret.64      %r5
+
+
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:00:46 2018
+++ new/usr/src/tools/smatch/src/validation/cast-constants.c	Fri Dec 21 15:00:46 2018
@@ -0,0 +1,357 @@
+typedef unsigned int uint;
+typedef unsigned long ulong;
+
+static int uint_2_int(void) { return (int)123U; }
+static int long_2_int(void) { return (int)123L; }
+static int ulong_2_int(void) { return (int)123UL; }
+static int vptr_2_int(void) { return (int)((void*)123); }
+static int iptr_2_int(void) { return (int)((int*)128); }
+static int float_2_int(void) { return (int)1.123F; }
+static int double_2_int(void) { return (int)1.123L; }
+static uint int_2_uint(void) { return (uint)123; }
+static uint long_2_uint(void) { return (uint)123L; }
+static uint ulong_2_uint(void) { return (uint)123UL; }
+static uint vptr_2_uint(void) { return (uint)((void*)123); }
+static uint iptr_2_uint(void) { return (uint)((int*)128); }
+static uint float_2_uint(void) { return (uint)1.123F; }
+static uint double_2_uint(void) { return (uint)1.123L; }
+static long int_2_long(void) { return (long)123; }
+static long uint_2_long(void) { return (long)123U; }
+static long ulong_2_long(void) { return (long)123UL; }
+static long vptr_2_long(void) { return (long)((void*)123); }
+static long iptr_2_long(void) { return (long)((int*)128); }
+static long float_2_long(void) { return (long)1.123F; }
+static long double_2_long(void) { return (long)1.123L; }
+static ulong int_2_ulong(void) { return (ulong)123; }
+static ulong uint_2_ulong(void) { return (ulong)123U; }
+static ulong long_2_ulong(void) { return (ulong)123L; }
+static ulong vptr_2_ulong(void) { return (ulong)((void*)123); }
+static ulong iptr_2_ulong(void) { return (ulong)((int*)128); }
+static ulong float_2_ulong(void) { return (ulong)1.123F; }
+static ulong double_2_ulong(void) { return (ulong)1.123L; }
+static void * int_2_vptr(void) { return (void *)123; }
+static void * uint_2_vptr(void) { return (void *)123U; }
+static void * long_2_vptr(void) { return (void *)123L; }
+static void * ulong_2_vptr(void) { return (void *)123UL; }
+static void * iptr_2_vptr(void) { return (void *)((int*)128); }
+static int * int_2_iptr(void) { return (int *)123; }
+static int * uint_2_iptr(void) { return (int *)123U; }
+static int * long_2_iptr(void) { return (int *)123L; }
+static int * ulong_2_iptr(void) { return (int *)123UL; }
+static int * vptr_2_iptr(void) { return (int *)((void*)123); }
+static float int_2_float(void) { return (float)123; }
+static float uint_2_float(void) { return (float)123U; }
+static float long_2_float(void) { return (float)123L; }
+static float ulong_2_float(void) { return (float)123UL; }
+static float double_2_float(void) { return (float)1.123L; }
+static double int_2_double(void) { return (double)123; }
+static double uint_2_double(void) { return (double)123U; }
+static double long_2_double(void) { return (double)123L; }
+static double ulong_2_double(void) { return (double)123UL; }
+static double float_2_double(void) { return (double)1.123F; }
+
+/*
+ * check-name: cast-constants.c
+ * check-command: test-linearize -m64 $file
+ *
+ * check-output-start
+uint_2_int:
+.L0:
+	<entry-point>
+	ret.32      $123
+
+
+long_2_int:
+.L2:
+	<entry-point>
+	ret.32      $123
+
+
+ulong_2_int:
+.L4:
+	<entry-point>
+	ret.32      $123
+
+
+vptr_2_int:
+.L6:
+	<entry-point>
+	ret.32      $123
+
+
+iptr_2_int:
+.L8:
+	<entry-point>
+	ret.32      $128
+
+
+float_2_int:
+.L10:
+	<entry-point>
+	ret.32      $1
+
+
+double_2_int:
+.L12:
+	<entry-point>
+	ret.32      $1
+
+
+int_2_uint:
+.L14:
+	<entry-point>
+	ret.32      $123
+
+
+long_2_uint:
+.L16:
+	<entry-point>
+	ret.32      $123
+
+
+ulong_2_uint:
+.L18:
+	<entry-point>
+	ret.32      $123
+
+
+vptr_2_uint:
+.L20:
+	<entry-point>
+	ret.32      $123
+
+
+iptr_2_uint:
+.L22:
+	<entry-point>
+	ret.32      $128
+
+
+float_2_uint:
+.L24:
+	<entry-point>
+	ret.32      $1
+
+
+double_2_uint:
+.L26:
+	<entry-point>
+	ret.32      $1
+
+
+int_2_long:
+.L28:
+	<entry-point>
+	ret.64      $123
+
+
+uint_2_long:
+.L30:
+	<entry-point>
+	ret.64      $123
+
+
+ulong_2_long:
+.L32:
+	<entry-point>
+	ret.64      $123
+
+
+vptr_2_long:
+.L34:
+	<entry-point>
+	ret.64      $123
+
+
+iptr_2_long:
+.L36:
+	<entry-point>
+	ret.64      $128
+
+
+float_2_long:
+.L38:
+	<entry-point>
+	ret.64      $1
+
+
+double_2_long:
+.L40:
+	<entry-point>
+	ret.64      $1
+
+
+int_2_ulong:
+.L42:
+	<entry-point>
+	ret.64      $123
+
+
+uint_2_ulong:
+.L44:
+	<entry-point>
+	ret.64      $123
+
+
+long_2_ulong:
+.L46:
+	<entry-point>
+	ret.64      $123
+
+
+vptr_2_ulong:
+.L48:
+	<entry-point>
+	ret.64      $123
+
+
+iptr_2_ulong:
+.L50:
+	<entry-point>
+	ret.64      $128
+
+
+float_2_ulong:
+.L52:
+	<entry-point>
+	ret.64      $1
+
+
+double_2_ulong:
+.L54:
+	<entry-point>
+	ret.64      $1
+
+
+int_2_vptr:
+.L56:
+	<entry-point>
+	ret.64      $123
+
+
+uint_2_vptr:
+.L58:
+	<entry-point>
+	ret.64      $123
+
+
+long_2_vptr:
+.L60:
+	<entry-point>
+	ret.64      $123
+
+
+ulong_2_vptr:
+.L62:
+	<entry-point>
+	ret.64      $123
+
+
+iptr_2_vptr:
+.L64:
+	<entry-point>
+	ret.64      $128
+
+
+int_2_iptr:
+.L66:
+	<entry-point>
+	ret.64      $123
+
+
+uint_2_iptr:
+.L68:
+	<entry-point>
+	ret.64      $123
+
+
+long_2_iptr:
+.L70:
+	<entry-point>
+	ret.64      $123
+
+
+ulong_2_iptr:
+.L72:
+	<entry-point>
+	ret.64      $123
+
+
+vptr_2_iptr:
+.L74:
+	<entry-point>
+	ret.64      $123
+
+
+int_2_float:
+.L76:
+	<entry-point>
+	set.32      %r39 <- 123.000000
+	ret.32      %r39
+
+
+uint_2_float:
+.L78:
+	<entry-point>
+	set.32      %r41 <- 123.000000
+	ret.32      %r41
+
+
+long_2_float:
+.L80:
+	<entry-point>
+	set.32      %r43 <- 123.000000
+	ret.32      %r43
+
+
+ulong_2_float:
+.L82:
+	<entry-point>
+	set.32      %r45 <- 123.000000
+	ret.32      %r45
+
+
+double_2_float:
+.L84:
+	<entry-point>
+	set.32      %r47 <- 1.123000
+	ret.32      %r47
+
+
+int_2_double:
+.L86:
+	<entry-point>
+	set.64      %r49 <- 123.000000
+	ret.64      %r49
+
+
+uint_2_double:
+.L88:
+	<entry-point>
+	set.64      %r51 <- 123.000000
+	ret.64      %r51
+
+
+long_2_double:
+.L90:
+	<entry-point>
+	set.64      %r53 <- 123.000000
+	ret.64      %r53
+
+
+ulong_2_double:
+.L92:
+	<entry-point>
+	set.64      %r55 <- 123.000000
+	ret.64      %r55
+
+
+float_2_double:
+.L94:
+	<entry-point>
+	set.64      %r57 <- 1.123000
+	ret.64      %r57
+
+
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:00:46 2018
+++ new/usr/src/tools/smatch/src/validation/cast-kinds.c	Fri Dec 21 15:00:46 2018
@@ -0,0 +1,387 @@
+typedef unsigned int uint;
+typedef unsigned long ulong;
+
+static int uint_2_int(uint a) { return (int)a; }
+static int long_2_int(long a) { return (int)a; }
+static int ulong_2_int(ulong a) { return (int)a; }
+static int vptr_2_int(void *a) { return (int)a; }
+static int iptr_2_int(int *a) { return (int)a; }
+static int float_2_int(float a) { return (int)a; }
+static int double_2_int(double a) { return (int)a; }
+static uint int_2_uint(int a) { return (uint)a; }
+static uint long_2_uint(long a) { return (uint)a; }
+static uint ulong_2_uint(ulong a) { return (uint)a; }
+static uint vptr_2_uint(void *a) { return (uint)a; }
+static uint iptr_2_uint(int *a) { return (uint)a; }
+static uint float_2_uint(float a) { return (uint)a; }
+static uint double_2_uint(double a) { return (uint)a; }
+static long int_2_long(int a) { return (long)a; }
+static long uint_2_long(uint a) { return (long)a; }
+static long ulong_2_long(ulong a) { return (long)a; }
+static long vptr_2_long(void *a) { return (long)a; }
+static long iptr_2_long(int *a) { return (long)a; }
+static long float_2_long(float a) { return (long)a; }
+static long double_2_long(double a) { return (long)a; }
+static ulong int_2_ulong(int a) { return (ulong)a; }
+static ulong uint_2_ulong(uint a) { return (ulong)a; }
+static ulong long_2_ulong(long a) { return (ulong)a; }
+static ulong vptr_2_ulong(void *a) { return (ulong)a; }
+static ulong iptr_2_ulong(int *a) { return (ulong)a; }
+static ulong float_2_ulong(float a) { return (ulong)a; }
+static ulong double_2_ulong(double a) { return (ulong)a; }
+static void * int_2_vptr(int a) { return (void *)a; }
+static void * uint_2_vptr(uint a) { return (void *)a; }
+static void * long_2_vptr(long a) { return (void *)a; }
+static void * ulong_2_vptr(ulong a) { return (void *)a; }
+static void * iptr_2_vptr(int *a) { return (void *)a; }
+static int * int_2_iptr(int a) { return (int *)a; }
+static int * uint_2_iptr(uint a) { return (int *)a; }
+static int * long_2_iptr(long a) { return (int *)a; }
+static int * ulong_2_iptr(ulong a) { return (int *)a; }
+static int * vptr_2_iptr(void *a) { return (int *)a; }
+static float int_2_float(int a) { return (float)a; }
+static float uint_2_float(uint a) { return (float)a; }
+static float long_2_float(long a) { return (float)a; }
+static float ulong_2_float(ulong a) { return (float)a; }
+static float double_2_float(double a) { return (float)a; }
+static double int_2_double(int a) { return (double)a; }
+static double uint_2_double(uint a) { return (double)a; }
+static double long_2_double(long a) { return (double)a; }
+static double ulong_2_double(ulong a) { return (double)a; }
+static double float_2_double(float a) { return (double)a; }
+
+/*
+ * check-name: cast-kinds
+ * check-command: test-linearize -m64 $file
+ *
+ * check-output-start
+uint_2_int:
+.L0:
+	<entry-point>
+	ret.32      %arg1
+
+
+long_2_int:
+.L2:
+	<entry-point>
+	scast.32    %r5 <- (64) %arg1
+	ret.32      %r5
+
+
+ulong_2_int:
+.L4:
+	<entry-point>
+	cast.32     %r8 <- (64) %arg1
+	ret.32      %r8
+
+
+vptr_2_int:
+.L6:
+	<entry-point>
+	cast.32     %r11 <- (64) %arg1
+	ret.32      %r11
+
+
+iptr_2_int:
+.L8:
+	<entry-point>
+	cast.32     %r14 <- (64) %arg1
+	ret.32      %r14
+
+
+float_2_int:
+.L10:
+	<entry-point>
+	ret.32      %arg1
+
+
+double_2_int:
+.L12:
+	<entry-point>
+	cast.32     %r20 <- (64) %arg1
+	ret.32      %r20
+
+
+int_2_uint:
+.L14:
+	<entry-point>
+	ret.32      %arg1
+
+
+long_2_uint:
+.L16:
+	<entry-point>
+	scast.32    %r26 <- (64) %arg1
+	ret.32      %r26
+
+
+ulong_2_uint:
+.L18:
+	<entry-point>
+	cast.32     %r29 <- (64) %arg1
+	ret.32      %r29
+
+
+vptr_2_uint:
+.L20:
+	<entry-point>
+	cast.32     %r32 <- (64) %arg1
+	ret.32      %r32
+
+
+iptr_2_uint:
+.L22:
+	<entry-point>
+	cast.32     %r35 <- (64) %arg1
+	ret.32      %r35
+
+
+float_2_uint:
+.L24:
+	<entry-point>
+	ret.32      %arg1
+
+
+double_2_uint:
+.L26:
+	<entry-point>
+	cast.32     %r41 <- (64) %arg1
+	ret.32      %r41
+
+
+int_2_long:
+.L28:
+	<entry-point>
+	scast.64    %r44 <- (32) %arg1
+	ret.64      %r44
+
+
+uint_2_long:
+.L30:
+	<entry-point>
+	cast.64     %r47 <- (32) %arg1
+	ret.64      %r47
+
+
+ulong_2_long:
+.L32:
+	<entry-point>
+	ret.64      %arg1
+
+
+vptr_2_long:
+.L34:
+	<entry-point>
+	cast.64     %r53 <- (64) %arg1
+	ret.64      %r53
+
+
+iptr_2_long:
+.L36:
+	<entry-point>
+	cast.64     %r56 <- (64) %arg1
+	ret.64      %r56
+
+
+float_2_long:
+.L38:
+	<entry-point>
+	cast.64     %r59 <- (32) %arg1
+	ret.64      %r59
+
+
+double_2_long:
+.L40:
+	<entry-point>
+	ret.64      %arg1
+
+
+int_2_ulong:
+.L42:
+	<entry-point>
+	scast.64    %r65 <- (32) %arg1
+	ret.64      %r65
+
+
+uint_2_ulong:
+.L44:
+	<entry-point>
+	cast.64     %r68 <- (32) %arg1
+	ret.64      %r68
+
+
+long_2_ulong:
+.L46:
+	<entry-point>
+	ret.64      %arg1
+
+
+vptr_2_ulong:
+.L48:
+	<entry-point>
+	cast.64     %r74 <- (64) %arg1
+	ret.64      %r74
+
+
+iptr_2_ulong:
+.L50:
+	<entry-point>
+	cast.64     %r77 <- (64) %arg1
+	ret.64      %r77
+
+
+float_2_ulong:
+.L52:
+	<entry-point>
+	cast.64     %r80 <- (32) %arg1
+	ret.64      %r80
+
+
+double_2_ulong:
+.L54:
+	<entry-point>
+	ret.64      %arg1
+
+
+int_2_vptr:
+.L56:
+	<entry-point>
+	scast.64    %r86 <- (32) %arg1
+	ret.64      %r86
+
+
+uint_2_vptr:
+.L58:
+	<entry-point>
+	cast.64     %r89 <- (32) %arg1
+	ret.64      %r89
+
+
+long_2_vptr:
+.L60:
+	<entry-point>
+	scast.64    %r92 <- (64) %arg1
+	ret.64      %r92
+
+
+ulong_2_vptr:
+.L62:
+	<entry-point>
+	cast.64     %r95 <- (64) %arg1
+	ret.64      %r95
+
+
+iptr_2_vptr:
+.L64:
+	<entry-point>
+	cast.64     %r98 <- (64) %arg1
+	ret.64      %r98
+
+
+int_2_iptr:
+.L66:
+	<entry-point>
+	ptrcast.64  %r101 <- (32) %arg1
+	ret.64      %r101
+
+
+uint_2_iptr:
+.L68:
+	<entry-point>
+	ptrcast.64  %r104 <- (32) %arg1
+	ret.64      %r104
+
+
+long_2_iptr:
+.L70:
+	<entry-point>
+	ptrcast.64  %r107 <- (64) %arg1
+	ret.64      %r107
+
+
+ulong_2_iptr:
+.L72:
+	<entry-point>
+	ptrcast.64  %r110 <- (64) %arg1
+	ret.64      %r110
+
+
+vptr_2_iptr:
+.L74:
+	<entry-point>
+	ptrcast.64  %r113 <- (64) %arg1
+	ret.64      %r113
+
+
+int_2_float:
+.L76:
+	<entry-point>
+	fpcast.32   %r116 <- (32) %arg1
+	ret.32      %r116
+
+
+uint_2_float:
+.L78:
+	<entry-point>
+	fpcast.32   %r119 <- (32) %arg1
+	ret.32      %r119
+
+
+long_2_float:
+.L80:
+	<entry-point>
+	fpcast.32   %r122 <- (64) %arg1
+	ret.32      %r122
+
+
+ulong_2_float:
+.L82:
+	<entry-point>
+	fpcast.32   %r125 <- (64) %arg1
+	ret.32      %r125
+
+
+double_2_float:
+.L84:
+	<entry-point>
+	fpcast.32   %r128 <- (64) %arg1
+	ret.32      %r128
+
+
+int_2_double:
+.L86:
+	<entry-point>
+	fpcast.64   %r131 <- (32) %arg1
+	ret.64      %r131
+
+
+uint_2_double:
+.L88:
+	<entry-point>
+	fpcast.64   %r134 <- (32) %arg1
+	ret.64      %r134
+
+
+long_2_double:
+.L90:
+	<entry-point>
+	fpcast.64   %r137 <- (64) %arg1
+	ret.64      %r137
+
+
+ulong_2_double:
+.L92:
+	<entry-point>
+	fpcast.64   %r140 <- (64) %arg1
+	ret.64      %r140
+
+
+float_2_double:
+.L94:
+	<entry-point>
+	fpcast.64   %r143 <- (32) %arg1
+	ret.64      %r143
+
+
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:00:47 2018
+++ new/usr/src/tools/smatch/src/validation/check_byte_count-ice.c	Fri Dec 21 15:00:47 2018
@@ -0,0 +1,19 @@
+extern void *memset (void *s, int c, int n);
+
+static void foo(void *a)
+{
+	memset(foo, + ', 20);
+}
+/*
+ * check-name: Segfault in check_byte_count after syntax error
+ *
+ * check-error-start
+check_byte_count-ice.c:6:0: warning: Newline in string or character constant
+check_byte_count-ice.c:5:23: warning: multi-character character constant
+check_byte_count-ice.c:6:1: error: Expected ) in function call
+check_byte_count-ice.c:6:1: error: got }
+builtin:0:0: error: Expected } at end of function
+builtin:0:0: error: got end-of-input
+check_byte_count-ice.c:5:15: error: not enough arguments for function memset
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:47 2018
+++ new/usr/src/tools/smatch/src/validation/choose_expr.c	Fri Dec 21 15:00:47 2018
@@ -0,0 +1,17 @@
+static int x = __builtin_choose_expr(0,(char *)0,(void)0);
+static int y = __builtin_choose_expr(1,(char *)0,(void)0);
+static char s[42];
+static int z = 1/(sizeof(__builtin_choose_expr(1,s,0)) - 42);
+
+/*
+ * check-name: choose expr builtin
+ * check-error-start
+choose_expr.c:1:51: warning: incorrect type in initializer (different base types)
+choose_expr.c:1:51:    expected int static [signed] [toplevel] x
+choose_expr.c:1:51:    got void <noident>
+choose_expr.c:2:41: warning: incorrect type in initializer (different base types)
+choose_expr.c:2:41:    expected int static [signed] [toplevel] y
+choose_expr.c:2:41:    got char *<noident>
+choose_expr.c:4:17: warning: division by zero
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:47 2018
+++ new/usr/src/tools/smatch/src/validation/comma.c	Fri Dec 21 15:00:47 2018
@@ -0,0 +1,12 @@
+static char a[sizeof(char *) + 1];
+static char b[1/(sizeof(a) - sizeof(0,a))];
+static void f(void)
+{
+        int c[42];
+        typeof((void)0,c) d;
+        d = c;
+}
+/*
+ * check-name: Comma and array decay
+ * check-description: arguments of comma should degenerate
+ */
--- /dev/null	Fri Dec 21 15:00:47 2018
+++ new/usr/src/tools/smatch/src/validation/compare-null-to-int.c	Fri Dec 21 15:00:47 2018
@@ -0,0 +1,11 @@
+static unsigned int comparison = (void *)0 == 1;
+/*
+ * check-name: Compare null pointer constant to int
+ * check-description: Sparse used to allow this.
+ *
+ * check-error-start
+compare-null-to-int.c:1:44: error: incompatible types for operation (==)
+compare-null-to-int.c:1:44:    left side has type void *
+compare-null-to-int.c:1:44:    right side has type int
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:47 2018
+++ new/usr/src/tools/smatch/src/validation/compound-assign-type.c	Fri Dec 21 15:00:47 2018
@@ -0,0 +1,15 @@
+static unsigned int foo(unsigned int x, long a)
+{
+	x /= a;
+	return x;
+}
+
+/*
+ * check-name: compound-assign-type
+ * check-command: test-linearize -m64 $file
+ * check-output-ignore
+ *
+ * check-output-excludes: divu\\.32
+ * check-output-contains: divs\\.64
+ * check-output-contains: scast\\.32
+ */
--- /dev/null	Fri Dec 21 15:00:47 2018
+++ new/usr/src/tools/smatch/src/validation/cond-address-array.c	Fri Dec 21 15:00:47 2018
@@ -0,0 +1,26 @@
+int foo(void) {
+	extern int a[];
+
+	if (a)
+		return 1;
+	return 0;
+}
+
+int bar(void) {
+	int a[2];
+
+	if (a)
+		return 1;
+	return 0;
+}
+
+/*
+ * check-name: cond-address-array.c
+ * check-command: test-linearize -Wno-decl -Waddress $file
+ * check-output-ignore
+ *
+ * check-error-start
+cond-address-array.c:4:13: warning: the address of an array will always evaluate as true
+cond-address-array.c:12:13: warning: the address of an array will always evaluate as true
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:47 2018
+++ new/usr/src/tools/smatch/src/validation/cond-address-function.c	Fri Dec 21 15:00:47 2018
@@ -0,0 +1,18 @@
+extern void func(void);
+
+int global_function(void)
+{
+	if (func)
+		return 1;
+	return 0;
+}
+
+/*
+ * check-name: cond-address-function
+ * check-command: test-linearize -Wno-decl -Waddress $file
+ * check-output-ignore
+ *
+ * check-error-start
+cond-address-function.c:5:13: warning: the address of a function will always evaluate as true
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:47 2018
+++ new/usr/src/tools/smatch/src/validation/cond-address.c	Fri Dec 21 15:00:47 2018
@@ -0,0 +1,14 @@
+extern void f(void);
+extern int a[];
+
+int foo(void) { if (f) return 1; return 0; }
+int bar(void) { if (a) return 1; return 0; }
+int qux(void) { if (f && a) return 1; return 0; }
+
+/*
+ * check-name: cond-address.c
+ * check-command: test-linearize -Wno-decl $file
+ * check-output-ignore
+ *
+ * check-excludes: VOID
+ */
--- /dev/null	Fri Dec 21 15:00:47 2018
+++ new/usr/src/tools/smatch/src/validation/cond-err-expand.c	Fri Dec 21 15:00:47 2018
@@ -0,0 +1,27 @@
+static inline void f(void)
+{
+	__builtin_constant_p(0);
+}
+
+void foo(void)
+{
+	0 ? 0 : f();
+}
+
+void bar(void)
+{
+	1 ? f() : 0;
+}
+
+/*
+ * check-name: cond-err-expand.c
+ * check-command: test-linearize -Wno-decl $file
+ *
+ * check-error-start
+cond-err-expand.c:8:11: error: incompatible types in conditional expression (different base types)
+cond-err-expand.c:13:11: error: incompatible types in conditional expression (different base types)
+ * check-error-end
+ *
+ * check-output-ignore
+ * check-excludes: call.* __builtin_constant_p
+ */
--- /dev/null	Fri Dec 21 15:00:47 2018
+++ new/usr/src/tools/smatch/src/validation/cond_expr.c	Fri Dec 21 15:00:47 2018
@@ -0,0 +1,19 @@
+/*
+ *  Bug in original tree: (real_v ? : x) had been treated as equivalent of
+ *  (real_v == 0 ? real_v == 0 : x), which gives the wrong type (and no
+ *  warning from the testcase below).
+ */
+static int x;
+static double y;
+int a(void)
+{
+	return ~(y ? : x);	/* should warn */
+}
+/*
+ * check-name: Two-argument conditional expression types
+ *
+ * check-error-start
+cond_expr.c:10:16: error: incompatible types for operation (~)
+cond_expr.c:10:16:    argument has type double
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:47 2018
+++ new/usr/src/tools/smatch/src/validation/cond_expr2.c	Fri Dec 21 15:00:47 2018
@@ -0,0 +1,22 @@
+extern const int *p;
+extern volatile void *q;
+extern volatile int *r;
+static void f(void)
+{
+	q = 1 ? p : q;	// warn: const volatile void * -> const int *
+	r = 1 ? r : q;	// OK: volatile void * -> volatile int *
+	r = 1 ? r : p;	// warn: const volatile int * -> volatile int *
+}
+/*
+ * check-name: type of conditional expression
+ * check-description: Used to miss qualifier mixing and mishandle void *
+ *
+ * check-error-start
+cond_expr2.c:6:11: warning: incorrect type in assignment (different modifiers)
+cond_expr2.c:6:11:    expected void volatile *extern [addressable] [toplevel] q
+cond_expr2.c:6:11:    got void const volatile *
+cond_expr2.c:8:11: warning: incorrect type in assignment (different modifiers)
+cond_expr2.c:8:11:    expected int volatile *extern [addressable] [toplevel] [assigned] r
+cond_expr2.c:8:11:    got int const volatile *
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:47 2018
+++ new/usr/src/tools/smatch/src/validation/cond_expr3.c	Fri Dec 21 15:00:47 2018
@@ -0,0 +1,17 @@
+static int icmp = 1 / (sizeof(int) - sizeof(1 > 0));
+static int fcmp = 1 / (sizeof(int) - sizeof(1.0 == 2.0 - 1.0));
+static int lnot = 1 / (sizeof(int) - sizeof(!!1.0));
+static int land = 1 / (sizeof(int) - sizeof(2 && 3));
+static int lor  = 1 / (sizeof(int) - sizeof('c' || 1.0f));
+
+/*
+ * check-name: result type of relational and logical operators
+ *
+ * check-error-start
+cond_expr3.c:1:21: warning: division by zero
+cond_expr3.c:2:21: warning: division by zero
+cond_expr3.c:3:21: warning: division by zero
+cond_expr3.c:4:21: warning: division by zero
+cond_expr3.c:5:21: warning: division by zero
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:47 2018
+++ new/usr/src/tools/smatch/src/validation/conditional-type.c	Fri Dec 21 15:00:47 2018
@@ -0,0 +1,99 @@
+extern void afun(void);
+extern void vcond(void);
+static int array[3];
+
+struct state {
+	int nr:2;
+};
+
+enum number {
+	zero,
+	one,
+	two,
+	many,
+};
+
+static int bad_if(struct state s)
+{
+	if (vcond()) return 1;
+	if (s) return 1;
+	return 0;
+}
+static void bad_if2(int *a, int *b)
+{
+	if (vcond()) *a = 1;
+	*b = 0;
+}
+static int bad_sel(struct state s)
+{
+	return vcond() ? 1 : 0;
+	return s ? 1 : 0;
+}
+static int bad_loop_void(void)
+{
+	while (vcond())
+		;
+	for (;vcond();)
+		;
+	do
+		;
+	while (vcond());
+	return 0;
+}
+
+
+static int good_if_int(int a, _Bool b, long c, unsigned char d)
+{
+	if (a) return 1;
+	if (b) return 1;
+	if (c) return 1;
+	if (d) return 1;
+	return 0;
+}
+static int good_if_float(float a, double b)
+{
+	if (a) return 1;
+	if (b) return 1;
+	return 0;
+}
+static int good_if_enum(void)
+{
+	if (many) return 1;
+	return 0;
+}
+static int good_if_bitfield(struct state s, struct state *p)
+{
+	if (s.nr) return 1;
+	if (p->nr) return 1;
+	return 0;
+}
+static int good_if_ptr(void *ptr)
+{
+	if (ptr) return 1;
+	if (array) return 1;
+	if (afun) return 1;
+	return 0;
+}
+
+/*
+ * check-name: conditional-type
+ *
+ * check-error-start
+conditional-type.c:18:18: error: incorrect type in conditional
+conditional-type.c:18:18:    got void
+conditional-type.c:19:13: error: incorrect type in conditional
+conditional-type.c:19:13:    got struct state s
+conditional-type.c:24:18: error: incorrect type in conditional
+conditional-type.c:24:18:    got void
+conditional-type.c:29:21: error: incorrect type in conditional
+conditional-type.c:29:21:    got void
+conditional-type.c:30:16: error: incorrect type in conditional
+conditional-type.c:30:16:    got struct state s
+conditional-type.c:34:21: error: incorrect type in conditional
+conditional-type.c:34:21:    got void
+conditional-type.c:36:20: error: incorrect type in conditional
+conditional-type.c:36:20:    got void
+conditional-type.c:40:21: error: incorrect type in conditional
+conditional-type.c:40:21:    got void
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:48 2018
+++ new/usr/src/tools/smatch/src/validation/constant-suffix-32.c	Fri Dec 21 15:00:48 2018
@@ -0,0 +1,15 @@
+#define BIGU 0xfffff00000000000U
+#define BIGULL 0xfffff00000000000ULL
+
+static unsigned long long a = BIGU;
+static unsigned long long b = BIGULL;
+
+/*
+ * check-name: constant-suffix
+ * check-command: sparse -m32 -Wconstant-suffix $file
+ *
+ * check-error-start
+constant-suffix-32.c:4:31: warning: constant 0xfffff00000000000U is so big it is unsigned long long
+ * check-error-end
+ */
+
--- /dev/null	Fri Dec 21 15:00:48 2018
+++ new/usr/src/tools/smatch/src/validation/constant-suffix-64.c	Fri Dec 21 15:00:48 2018
@@ -0,0 +1,15 @@
+#define BIGU 0xfffff00000000000U
+#define BIGUL 0xfffff00000000000UL
+
+static unsigned long a = BIGU;
+static unsigned long b = BIGUL;
+
+/*
+ * check-name: constant-suffix
+ * check-command: sparse -m64 -Wconstant-suffix $file
+ *
+ * check-error-start
+constant-suffix-64.c:4:26: warning: constant 0xfffff00000000000U is so big it is unsigned long
+ * check-error-end
+ */
+
--- /dev/null	Fri Dec 21 15:00:48 2018
+++ new/usr/src/tools/smatch/src/validation/constexpr-addr-of-static-member.c	Fri Dec 21 15:00:48 2018
@@ -0,0 +1,26 @@
+struct A {
+	int a;
+	int b[2];
+};
+
+struct B {
+	int c;
+	struct A d;
+};
+
+static struct B a= {1, {1, {1, 1}}};
+
+static int *b = &a.d.a;	// OK
+static int *c = &(&a.d)->a;	// OK
+static int *d = a.d.b;		// OK
+static int *e = (&a.d)->b;	// OK
+static int *f = &a.d.b[1];	// OK
+static int *g = &(&a.d)->b[1];	// OK
+
+/*
+ * check-name: address of static object's member constness verification.
+ * check-command: sparse -Wconstexpr-not-const $file
+ *
+ * check-error-start
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:48 2018
+++ new/usr/src/tools/smatch/src/validation/constexpr-addr-of-static.c	Fri Dec 21 15:00:48 2018
@@ -0,0 +1,36 @@
+static int a = 1;
+static int b[2] = {1, 1};
+static void c(void) {}
+
+static int *d = &a;		// OK
+static int *e = d;		// KO
+static int *f = b;		// OK
+
+static void (*g)(void) = c;	// OK
+static void (*h)(void) = &c;	// OK
+
+static int *i = &*&a;		// OK
+static int *j = &*b;		// OK
+static int *k = &*d;		// KO
+
+
+static void l(void) {
+	int a = 1;
+	static int *b = &a;	// KO
+}
+
+static void m(void) {
+	static int a = 1;
+	static int *b = &a;	// OK
+}
+
+/*
+ * check-name: address of static object constness verification.
+ * check-command: sparse -Wconstexpr-not-const $file
+ *
+ * check-error-start
+constexpr-addr-of-static.c:6:17: warning: non-constant initializer for static object
+constexpr-addr-of-static.c:14:19: warning: non-constant initializer for static object
+constexpr-addr-of-static.c:19:26: warning: non-constant initializer for static object
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:48 2018
+++ new/usr/src/tools/smatch/src/validation/constexpr-binop.c	Fri Dec 21 15:00:48 2018
@@ -0,0 +1,33 @@
+static int a[] = {
+	[0 + 0] = 0,						// OK
+	[0 + 0.] = 0,						// KO
+	[(void*)0 + 0] = 0,					// KO
+	[0 + __builtin_choose_expr(0, 0, 0)] = 0,		// OK
+	[0 + __builtin_choose_expr(0, 0., 0)] = 0,		// OK
+	[0 + __builtin_choose_expr(0, 0, 0.)] = 0,		// KO
+	[0 < 0] = 0,						// OK
+	[0 < 0.] = 0,						// KO
+	[0 < __builtin_choose_expr(0, 0, 0)] = 0,		// OK
+	[0 < __builtin_choose_expr(0, 0., 0)] = 0,		// OK
+	[0 < __builtin_choose_expr(0, 0, 0.)] = 0,		// KO
+	[0 && 0] = 0,						// OK
+	[0 && 0.] = 0,						// KO
+	[0 && __builtin_choose_expr(0, 0, 0)] = 0,		// OK
+	[0 && __builtin_choose_expr(0, 0., 0)] = 0,		// OK
+	[0 && __builtin_choose_expr(0, 0, 0.)] = 0,		// KO
+	[0 + __builtin_types_compatible_p(int, float)] = 0,	// OK
+};
+
+/*
+ * check-name: Expression constness propagation in binops and alike
+ *
+ * check-error-start
+constexpr-binop.c:3:12: error: bad constant expression
+constexpr-binop.c:4:19: error: bad integer constant expression
+constexpr-binop.c:7:12: error: bad constant expression
+constexpr-binop.c:9:12: error: bad integer constant expression
+constexpr-binop.c:12:12: error: bad integer constant expression
+constexpr-binop.c:14:12: error: bad integer constant expression
+constexpr-binop.c:17:12: error: bad integer constant expression
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:48 2018
+++ new/usr/src/tools/smatch/src/validation/constexpr-cast.c	Fri Dec 21 15:00:48 2018
@@ -0,0 +1,25 @@
+static int a[] = {
+	[(int)0] = 0,		// OK
+	[(int)(int)0] = 0,	// OK
+	[(int)0.] = 0,		// OK
+	[(int)(int)0.] = 0,	// OK
+	[(int)__builtin_choose_expr(0, 0, 0)] = 0,	// OK
+	[(int)__builtin_choose_expr(0, 0, 0.)] = 0,	// OK
+
+	[(int)(float)0] = 0,	// KO
+	[(int)(float)0.] = 0,	// KO
+
+	[(int)(void*)0] = 0,	// KO
+	[(int)(void*)0.] = 0,	// KO
+
+};
+/*
+ * check-name: Expression constness propagation in casts
+ *
+ * check-error-start
+constexpr-cast.c:9:11: error: bad integer constant expression
+constexpr-cast.c:10:11: error: bad integer constant expression
+constexpr-cast.c:12:11: error: bad integer constant expression
+constexpr-cast.c:13:11: error: bad integer constant expression
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:48 2018
+++ new/usr/src/tools/smatch/src/validation/constexpr-compound-literal.c	Fri Dec 21 15:00:48 2018
@@ -0,0 +1,19 @@
+static int *a = &(int){ 1 };	// OK
+static int *b = &(int){ *a };	// KO
+
+static void foo(void)
+{
+	int *b = &(int){ 1 };		// OK
+	int *c = &(int){ *a };		// OK
+	static int *d = &(int){ 1 };	// KO
+}
+
+/*
+ * check-name: compound literal address constness verification
+ * check-command: sparse -Wconstexpr-not-const $file
+ *
+ * check-error-start
+constexpr-compound-literal.c:2:25: warning: non-constant initializer for static object
+constexpr-compound-literal.c:8:27: warning: non-constant initializer for static object
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:48 2018
+++ new/usr/src/tools/smatch/src/validation/constexpr-conditional.c	Fri Dec 21 15:00:48 2018
@@ -0,0 +1,34 @@
+static int a[] = {
+	[0 ? : 0] = 0,						// OK
+	[1 ? : 0] = 0,						// OK
+	[0 ? 0 : 0] = 0,					// OK
+	[1 ? 0 : 0] = 0,					// OK
+	[0 ? 0 : __builtin_choose_expr(0, 0, 0)] = 0,		// OK
+	[1 ? __builtin_choose_expr(0, 0, 0) : 0] = 0,		// OK
+	[0 ? __builtin_choose_expr(0, 0, 0) : 0] = 0,		// OK
+	[1 ? 1 : __builtin_choose_expr(0, 0, 0)] = 0,		// OK
+	[__builtin_choose_expr(0, 0, 0) ? : 0] = 0,		// OK
+	[__builtin_choose_expr(0, 0, 1) ? : 0] = 0,		// OK
+	[0. ? : 0] = 0,					// KO
+	[0 ? 0. : 0] = 0,					// KO
+	[1 ? : 0.] = 0,					// KO
+	[__builtin_choose_expr(0, 0., 0) ? : 0] = 0,		// OK
+	[__builtin_choose_expr(0, 0, 0.) ? : 0] = 0,		// KO
+	[0 ? __builtin_choose_expr(0, 0., 0) : 0] = 0,		// OK
+	[0 ? __builtin_choose_expr(0, 0, 0.) : 0] = 0,		// KO
+	[1 ? 0 : __builtin_choose_expr(0, 0., 0)] = 0,		// OK
+	[1 ? 0 : __builtin_choose_expr(0, 0, 0.)] = 0,		// KO
+};
+
+/*
+ * check-name: Expression constness propagation in conditional expressions
+ *
+ * check-error-start
+constexpr-conditional.c:12:13: error: bad constant expression
+constexpr-conditional.c:13:19: error: bad constant expression
+constexpr-conditional.c:14:12: error: bad constant expression
+constexpr-conditional.c:16:42: error: bad constant expression
+constexpr-conditional.c:18:48: error: bad constant expression
+constexpr-conditional.c:20:14: error: bad constant expression
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:48 2018
+++ new/usr/src/tools/smatch/src/validation/constexpr-init.c	Fri Dec 21 15:00:48 2018
@@ -0,0 +1,60 @@
+static int a = 1;					// OK
+static int b[2] = {1, 1};				// OK
+static void c(void) {}
+
+struct A {
+	int a;
+	int b[2];
+};
+
+struct B {
+	int c;
+	struct A d;
+};
+
+static struct B d= {1, {1, {1, 1}}};				// OK
+static struct B e= {a, {1, {1, 1}}};				// KO
+static struct B f= {1, {a, {1, 1}}};				// KO
+static struct B g= {1, {1, {a, 1}}};				// KO
+static struct B h= {1, {1, {1, a}}};				// KO
+static struct B i= {.c = 1, .d = {.a = 1, .b = {1, 1}}};	// OK
+static struct B j= {.c = a, .d = {.a = 1, .b = {1, 1}}};	// KO
+static struct B k= {.c = 1, .d = {.a = a, .b = {1, 1}}};	// KO
+static struct B l= {.c = 1, .d = {.a = 1, .b = {a, 1}}};	// KO
+static struct B m= {.c = 1, .d = {.a = 1, .b = {1, a}}};	// KO
+
+static int n[] = {a, 1};				// KO
+static int o[] = {1, a};				// KO
+static int p[] = {[0] = a, [1] = 1};			// KO
+static int q[] = {[0] = 1, [1] = a};			// KO
+
+static void r(void) {
+	int a = 0;
+	int b = a;		// OK
+}
+
+static void s(void) {
+	int a = 1;
+	static int b = a;	// KO
+}
+
+/*
+ * check-name: static storage object initializer constness verification.
+ * check-command: sparse -Wconstexpr-not-const $file
+ *
+ * check-error-start
+constexpr-init.c:16:21: warning: non-constant initializer for static object
+constexpr-init.c:17:25: warning: non-constant initializer for static object
+constexpr-init.c:18:29: warning: non-constant initializer for static object
+constexpr-init.c:19:32: warning: non-constant initializer for static object
+constexpr-init.c:21:26: warning: non-constant initializer for static object
+constexpr-init.c:22:40: warning: non-constant initializer for static object
+constexpr-init.c:23:49: warning: non-constant initializer for static object
+constexpr-init.c:24:52: warning: non-constant initializer for static object
+constexpr-init.c:26:19: warning: non-constant initializer for static object
+constexpr-init.c:27:22: warning: non-constant initializer for static object
+constexpr-init.c:28:25: warning: non-constant initializer for static object
+constexpr-init.c:29:34: warning: non-constant initializer for static object
+constexpr-init.c:38:24: warning: non-constant initializer for static object
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:48 2018
+++ new/usr/src/tools/smatch/src/validation/constexpr-labelref.c	Fri Dec 21 15:00:48 2018
@@ -0,0 +1,14 @@
+static void a(void)
+{
+label1:
+	;
+	static void *b = &&label1;
+}
+
+/*
+ * check-name: label reference constness verification.
+ * check-command: sparse -Wconstexpr-not-const $file
+ *
+ * check-error-start
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:48 2018
+++ new/usr/src/tools/smatch/src/validation/constexpr-offsetof.c	Fri Dec 21 15:00:48 2018
@@ -0,0 +1,21 @@
+struct A {
+	int a[1];
+	int b;
+};
+
+extern int c;
+
+static int o[] = {
+	[__builtin_offsetof(struct A, b)] = 0,		// OK
+	[__builtin_offsetof(struct A, a[0])] = 0,	// OK
+	[__builtin_offsetof(struct A, a[0*0])] = 0,	// OK
+	[__builtin_offsetof(struct A, a[c])] = 0	// KO
+};
+
+/*
+ * check-name: __builtin_offsetof() constness verification.
+ *
+ * check-error-start
+constexpr-offsetof.c:12:39: error: bad constant expression
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:48 2018
+++ new/usr/src/tools/smatch/src/validation/constexpr-pointer-arith.c	Fri Dec 21 15:00:48 2018
@@ -0,0 +1,28 @@
+static int a = 1;
+static int b[2] = {1, 1};
+
+static int *c = &b[1];					// OK
+static int *d = (int*)0 + 1;				// OK
+static int *e = &b[1] + 1;				// OK
+static int *f = b + 1;					// OK
+static int *g = d + 1;					// KO
+static int *h = &a + 1;				// OK
+static int *i = &b[1] + 1;				// OK
+static int *j = b + 1;					// OK
+static int *k = d + 1;					// KO
+static int *l = &*&b[1];				// OK
+static int *m = &*(&a + 1);				// OK
+static int *n = &*(&b[1] + 1);				// OK
+static int *o = &*(b + 1);				// OK
+static int *p = &*(d + 1);				// KO
+
+/*
+ * check-name: pointer arithmetic constness verification.
+ * check-command: sparse -Wconstexpr-not-const $file
+ *
+ * check-error-start
+constexpr-pointer-arith.c:8:19: warning: non-constant initializer for static object
+constexpr-pointer-arith.c:12:19: warning: non-constant initializer for static object
+constexpr-pointer-arith.c:17:22: warning: non-constant initializer for static object
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:49 2018
+++ new/usr/src/tools/smatch/src/validation/constexpr-pointer-cast.c	Fri Dec 21 15:00:49 2018
@@ -0,0 +1,13 @@
+static int *a = (int*)0;	// OK
+static int b = 0;
+static int *c = (int*)b;	// KO
+
+
+/*
+ * check-name: integer literal cast to pointer type constness verification.
+ * check-command: sparse -Wconstexpr-not-const $file
+ *
+ * check-error-start
+constexpr-pointer-cast.c:3:18: warning: non-constant initializer for static object
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:49 2018
+++ new/usr/src/tools/smatch/src/validation/constexpr-preop.c	Fri Dec 21 15:00:49 2018
@@ -0,0 +1,29 @@
+static int a[] = {
+  [+0] = 0,					// OK
+  [+__builtin_choose_expr(0, 0, 0)] = 0,	// OK
+  [+0.] = 0,					// KO
+  [+__builtin_choose_expr(0, 0, 0.)] = 0,	// KO
+  [-0] = 0,					// OK
+  [-__builtin_choose_expr(0, 0, 0)] = 0,	// OK
+  [-0.] = 0,					// KO
+  [-__builtin_choose_expr(0, 0, 0.)] = 0,	// KO
+  [~0] = 0,					// OK
+  [~__builtin_choose_expr(0, 0, 0)] = 0,	// OK
+  [!0] = 0,					// OK
+  [!__builtin_choose_expr(0, 0, 0)] = 0,	// OK
+  [!0.] = 0,					// KO
+  [!__builtin_choose_expr(0, 0, 0.)] = 0,	// KO
+};
+
+/*
+ * check-name: Expression constness propagation in preops
+ *
+ * check-error-start
+constexpr-preop.c:4:5: error: bad constant expression
+constexpr-preop.c:5:33: error: bad constant expression
+constexpr-preop.c:8:4: error: bad constant expression
+constexpr-preop.c:9:4: error: bad constant expression
+constexpr-preop.c:14:4: error: bad integer constant expression
+constexpr-preop.c:15:4: error: bad integer constant expression
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:49 2018
+++ new/usr/src/tools/smatch/src/validation/constexpr-pure-builtin.c	Fri Dec 21 15:00:49 2018
@@ -0,0 +1,23 @@
+// requires constant integer expressions
+static int bar[] = {
+	[__builtin_bswap16(0x1234)] = 0,		// OK
+	[__builtin_bswap32(0x1234)] = 0,		// OK
+	[__builtin_bswap64(0x1234)] = 0,		// OK
+};
+
+// requires constant integers
+static int foo(unsigned long long a)
+{
+	switch (a) {
+	case __builtin_bswap16(1   <<  8):
+	case __builtin_bswap32(2L  << 24):
+	case __builtin_bswap64(3LL << 56):
+		return 0;
+	default:
+		return 1;
+	}
+}
+
+/*
+ * check-name: constness of pure/const builtins
+ */
--- /dev/null	Fri Dec 21 15:00:49 2018
+++ new/usr/src/tools/smatch/src/validation/constexpr-string.c	Fri Dec 21 15:00:49 2018
@@ -0,0 +1,9 @@
+static char *a = "foobar";	// OK
+
+/*
+ * check-name: string literal constness verification.
+ * check-command: sparse -Wconstexpr-not-const $file
+ *
+ * check-error-start
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:49 2018
+++ new/usr/src/tools/smatch/src/validation/constexpr-types-compatible-p.c	Fri Dec 21 15:00:49 2018
@@ -0,0 +1,8 @@
+static int a[] = {[__builtin_types_compatible_p(int, int)] = 0};
+
+/*
+ * check-name: __builtin_types_compatible_p() constness verification.
+ *
+ * check-error-start
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:49 2018
+++ new/usr/src/tools/smatch/src/validation/context.c	Fri Dec 21 15:00:49 2018
@@ -0,0 +1,336 @@
+#define __cond_lock(c) ((c) ? ({ __context__(1); 1; }) : 0)
+
+static void a(void) __attribute__((context(0,1)))
+{
+	__context__(1);
+}
+
+static void r(void) __attribute__((context(1,0)))
+{
+	__context__(-1);
+}
+
+extern int _ca(int fail);
+#define ca(fail) __cond_lock(_ca(fail))
+
+static void good_paired1(void)
+{
+	a();
+	r();
+}
+
+static void good_paired2(void)
+{
+	a();
+	r();
+	a();
+	r();
+}
+
+static void good_paired3(void)
+{
+	a();
+	a();
+	r();
+	r();
+}
+
+static void good_lock1(void) __attribute__((context(0,1)))
+{
+	a();
+}
+
+static void good_lock2(void) __attribute__((context(0,1)))
+{
+	a();
+	r();
+	a();
+}
+
+static void good_lock3(void) __attribute__((context(0,1)))
+{
+	a();
+	a();
+	r();
+}
+
+static void good_unlock1(void) __attribute__((context(1,0)))
+{
+	r();
+}
+
+static void good_unlock2(void) __attribute__((context(1,0)))
+{
+	a();
+	r();
+	r();
+}
+
+static void warn_lock1(void)
+{
+	a();
+}
+
+static void warn_lock2(void)
+{
+	a();
+	r();
+	a();
+}
+
+static void warn_lock3(void)
+{
+	a();
+	a();
+	r();
+}
+
+static void warn_unlock1(void)
+{
+	r();
+}
+
+static void warn_unlock2(void)
+{
+	a();
+	r();
+	r();
+}
+
+extern int condition, condition2;
+
+static int good_if1(void)
+{
+	a();
+	if(condition) {
+		r();
+		return -1;
+	}
+	r();
+	return 0;
+}
+
+static void good_if2(void)
+{
+	if(condition) {
+		a();
+		r();
+	}
+}
+
+static void good_if3(void)
+{
+	a();
+	if(condition) {
+		a();
+		r();
+	}
+	r();
+}
+
+static int warn_if1(void)
+{
+	a();
+	if(condition)
+		return -1;
+	r();
+	return 0;
+}
+
+static int warn_if2(void)
+{
+	a();
+	if(condition) {
+		r();
+		return -1;
+	}
+	return 0;
+}
+
+static void good_while1(void)
+{
+	a();
+	while(condition)
+		;
+	r();
+}
+
+static void good_while2(void)
+{
+	while(condition) {
+		a();
+		r();
+	}
+}
+
+static void good_while3(void)
+{
+	while(condition) {
+		a();
+		r();
+		if(condition2)
+			break;
+		a();
+		r();
+	}
+}
+
+static void good_while4(void)
+{
+	a();
+	while(1) {
+		if(condition2) {
+			r();
+			break;
+		}
+	}
+}
+
+static void good_while5(void)
+{
+	a();
+	while(1) {
+		r();
+		if(condition2)
+			break;
+		a();
+	}
+}
+
+static void warn_while1(void)
+{
+	while(condition) {
+		a();
+	}
+}
+
+static void warn_while2(void)
+{
+	while(condition) {
+		r();
+	}
+}
+
+static void warn_while3(void)
+{
+	while(condition) {
+		a();
+		if(condition2)
+			break;
+		r();
+	}
+}
+
+static void good_goto1(void)
+{
+    a();
+    goto label;
+label:
+    r();
+}
+
+static void good_goto2(void)
+{
+    a();
+    goto label;
+    a();
+    r();
+label:
+    r();
+}
+
+static void good_goto3(void)
+{
+    a();
+    if(condition)
+        goto label;
+    a();
+    r();
+label:
+    r();
+}
+
+static void good_goto4(void)
+{
+    if(condition)
+        goto label;
+    a();
+    r();
+label:
+    ;
+}
+
+static void good_goto5(void)
+{
+    a();
+    if(condition)
+        goto label;
+    r();
+    return;
+label:
+    r();
+}
+
+static void warn_goto1(void)
+{
+    a();
+    goto label;
+    r();
+label:
+    ;
+}
+
+static void warn_goto2(void)
+{
+    a();
+    goto label;
+    r();
+label:
+    a();
+    r();
+}
+
+static void warn_goto3(void)
+{
+    a();
+    if(condition)
+        goto label;
+    r();
+label:
+    r();
+}
+
+static void good_cond_lock1(void)
+{
+    if(ca(condition)) {
+        condition2 = 1; /* do stuff */
+        r();
+    }
+}
+
+static void warn_cond_lock1(void)
+{
+    if(ca(condition))
+        condition2 = 1; /* do stuff */
+    r();
+}
+/*
+ * check-name: Check -Wcontext
+ *
+ * check-error-start
+context.c:69:13: warning: context imbalance in 'warn_lock1' - wrong count at exit
+context.c:74:13: warning: context imbalance in 'warn_lock2' - wrong count at exit
+context.c:81:13: warning: context imbalance in 'warn_lock3' - wrong count at exit
+context.c:88:13: warning: context imbalance in 'warn_unlock1' - unexpected unlock
+context.c:93:13: warning: context imbalance in 'warn_unlock2' - unexpected unlock
+context.c:131:12: warning: context imbalance in 'warn_if1' - wrong count at exit
+context.c:140:12: warning: context imbalance in 'warn_if2' - different lock contexts for basic block
+context.c:202:9: warning: context imbalance in 'warn_while1' - different lock contexts for basic block
+context.c:210:17: warning: context imbalance in 'warn_while2' - unexpected unlock
+context.c:216:9: warning: context imbalance in 'warn_while3' - wrong count at exit
+context.c:274:13: warning: context imbalance in 'warn_goto1' - wrong count at exit
+context.c:283:13: warning: context imbalance in 'warn_goto2' - wrong count at exit
+context.c:300:5: warning: context imbalance in 'warn_goto3' - different lock contexts for basic block
+context.c:315:5: warning: context imbalance in 'warn_cond_lock1' - different lock contexts for basic block
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:49 2018
+++ new/usr/src/tools/smatch/src/validation/crash-add-doms.c	Fri Dec 21 15:00:49 2018
@@ -0,0 +1,22 @@
+char a;
+int b;
+void c(void)
+{
+	if (0) {
+		char *d;
+		for (;;)
+			for (;;)
+e:
+				*d *= (a && 0) ^ b && *d;
+	}
+	goto e;
+}
+
+
+/*
+ * check-name: crash add-doms
+ * check-command: test-linearize $file
+ *
+ * check-error-ignore
+ * check-output-ignore
+ */
--- /dev/null	Fri Dec 21 15:00:49 2018
+++ new/usr/src/tools/smatch/src/validation/crash-bb_target.c	Fri Dec 21 15:00:49 2018
@@ -0,0 +1,10 @@
+a() {
+  &&b
+
+/*
+ * check-name: crash bb_target
+ * check-command: test-linearize $file
+ *
+ * check-error-ignore
+ * check-output-ignore
+ */
--- /dev/null	Fri Dec 21 15:00:49 2018
+++ new/usr/src/tools/smatch/src/validation/crash-ep-active.c	Fri Dec 21 15:00:49 2018
@@ -0,0 +1,12 @@
+int a(int b)
+{
+        return 0( && b;
+}
+
+/*
+ * check-name: crash ep->active
+ * check-command: test-linearize $file
+ *
+ * check-error-ignore
+ * check-output-ignore
+ */
--- /dev/null	Fri Dec 21 15:00:49 2018
+++ new/usr/src/tools/smatch/src/validation/crash-ptrlist.c	Fri Dec 21 15:00:49 2018
@@ -0,0 +1,23 @@
+a;
+char b;
+c() {
+  while () {
+    int *d;
+    while () {
+      char *e = &b;
+      if (a ?: (*d = f || *0) || g) {
+        if
+          ;
+      } else {
+        int h = 0;
+        if (j) {
+          char **i = &e;
+          if (0 ? 0 : 0 ?: (**i = 1 || 0 && 0))             h ?: (*e = i && &h
+
+/*
+ * check-name: crash ptrlist
+ * check-command: test-linearize $file
+ *
+ * check-error-ignore
+ * check-output-ignore
+ */
--- /dev/null	Fri Dec 21 15:00:49 2018
+++ new/usr/src/tools/smatch/src/validation/crash-rewrite-branch.c	Fri Dec 21 15:00:49 2018
@@ -0,0 +1,24 @@
+void a(int c, int e)
+{
+	for(;                   b; c ;
+
+	if (()) {
+		unsigned short d = e;
+		if (())
+			while ()
+				;
+		&d;
+	}
+
+	if (()) {
+		int f = &f;
+	}
+}
+
+/*
+ * check-name: crash rewrite_branch
+ * check-command: test-linearize $file
+ *
+ * check-error-ignore
+ * check-output-ignore
+ */
--- /dev/null	Fri Dec 21 15:00:49 2018
+++ new/usr/src/tools/smatch/src/validation/crazy02-not-so.c	Fri Dec 21 15:00:49 2018
@@ -0,0 +1,40 @@
+int foo(int *ptr, int i)
+{
+	int *p;
+
+	switch (i - i) {		// will be optimized to 0
+	case 0:
+		return 0;
+	case 1:				// will be optimized away
+		p = ptr;
+		do {			// will be an unreachable loop
+			*p++ = 123;
+		} while (--i);
+		break;
+	}
+
+	return 1;
+}
+
+int bar(int *ptr, int i)
+{
+	int *p;
+
+	switch (i - i) {		// will be optimized to 0
+	case 0:
+		return 0;
+	case 1:				// will be optimized away
+					// p is uninitialized
+		do {			// will be an unreachable loop
+			*p++ = 123;
+		} while (--i);
+		break;
+	}
+
+	return 1;
+}
+
+/*
+ * check-name: crazy02-not-so.c
+ * check-command: sparse -Wno-decl $file
+ */
--- /dev/null	Fri Dec 21 15:00:49 2018
+++ new/usr/src/tools/smatch/src/validation/crazy03.c	Fri Dec 21 15:00:49 2018
@@ -0,0 +1,33 @@
+extern char a;
+extern int b;
+extern char *c, *d;
+extern void e(void);
+extern void f(char *);
+
+int g(int h);
+int g(int h)
+{
+	if (h > 1)
+		e();
+	if (h > 1)
+		return 0;
+	for (;;) {
+		if (a) {
+			while (c) ;
+			b = 0;
+		} else {
+			c = (void*)0;
+			b = 1;
+		}
+		if (b) {
+			f(c);
+			continue;
+		}
+		d = c;
+		while (*c++) ;
+	}
+}
+
+/*
+ * check-name: crazy03.c
+ */
--- /dev/null	Fri Dec 21 15:00:50 2018
+++ new/usr/src/tools/smatch/src/validation/declaration-after-statement-ansi.c	Fri Dec 21 15:00:50 2018
@@ -0,0 +1,12 @@
+static void func (int i)
+{
+	i;
+	int j = i;
+}
+/*
+ * check-name: declaration after statement (ANSI)
+ * check-command: sparse -ansi $file
+ * check-error-start
+declaration-after-statement-ansi.c:4:9: warning: mixing declarations and code
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:50 2018
+++ new/usr/src/tools/smatch/src/validation/declaration-after-statement-c89.c	Fri Dec 21 15:00:50 2018
@@ -0,0 +1,12 @@
+static void func (int i)
+{
+	i;
+	int j = i;
+}
+/*
+ * check-name: declaration after statement (C89)
+ * check-command: sparse -std=c89 $file
+ * check-error-start
+declaration-after-statement-c89.c:4:9: warning: mixing declarations and code
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:50 2018
+++ new/usr/src/tools/smatch/src/validation/declaration-after-statement-c99.c	Fri Dec 21 15:00:50 2018
@@ -0,0 +1,9 @@
+static void func (int i)
+{
+	i;
+	int j = i;
+}
+/*
+ * check-name: declaration after statement (C99)
+ * check-command: sparse -std=c99 $file
+ */
--- /dev/null	Fri Dec 21 15:00:50 2018
+++ new/usr/src/tools/smatch/src/validation/declaration-after-statement-default.c	Fri Dec 21 15:00:50 2018
@@ -0,0 +1,9 @@
+static void func (int i)
+{
+	i;
+	int j = i;
+}
+/*
+ * check-name: declaration after statement (default)
+ * check-command: sparse $file
+ */
--- /dev/null	Fri Dec 21 15:00:50 2018
+++ new/usr/src/tools/smatch/src/validation/definitions.c	Fri Dec 21 15:00:50 2018
@@ -0,0 +1,12 @@
+static inline int f(void);
+static int g(void)
+{
+        return f();
+}
+static inline int f(void)
+{
+	return 0;
+}
+/*
+ * check-name: finding definitions
+ */
--- /dev/null	Fri Dec 21 15:00:50 2018
+++ new/usr/src/tools/smatch/src/validation/designated-init.c	Fri Dec 21 15:00:50 2018
@@ -0,0 +1,195 @@
+struct s1 {
+	int x;
+	int y;
+};
+
+struct s2 {
+	int x;
+	int y;
+} __attribute__((designated_init));
+
+struct nest1 {
+	struct s1 s1;
+	struct s2 s2;
+};
+
+struct nest2 {
+	struct s1 s1;
+	struct s2 s2;
+} __attribute__((designated_init));
+
+static struct s1 s1_positional = { 5, 10 };
+static struct s1 s1_designated = { .x = 5, .y = 10 };
+static struct s2 s2_positional = { 5, 10 };
+static struct s2 s2_designated = { .x = 5, .y = 10 };
+static struct nest1 nest1_positional = {
+	{ 5, 10 },
+	{ 5, 10 },
+};
+static struct nest1 nest1_designated_outer = {
+	.s1 = { 5, 10 },
+	.s2 = { 5, 10 },
+};
+static struct nest1 nest1_designated_inner = {
+	{ .x = 5, .y = 10 },
+	{ .x = 5, .y = 10 },
+};
+static struct nest1 nest1_designated_both = {
+	.s1 = { .x = 5, .y = 10 },
+	.s2 = { .x = 5, .y = 10 },
+};
+static struct nest2 nest2_positional = {
+	{ 5, 10 },
+	{ 5, 10 },
+};
+static struct nest2 nest2_designated_outer = {
+	.s1 = { 5, 10 },
+	.s2 = { 5, 10 },
+};
+static struct nest2 nest2_designated_inner = {
+	{ .x = 5, .y = 10 },
+	{ .x = 5, .y = 10 },
+};
+static struct nest2 nest2_designated_both = {
+	.s1 = { .x = 5, .y = 10 },
+	.s2 = { .x = 5, .y = 10 },
+};
+
+static struct {
+	int x;
+	int y;
+} __attribute__((designated_init))
+	anon_positional = { 5, 10 },
+	anon_designated = { .x = 5, .y = 10};
+
+static struct s1 s1_array[] = {
+	{ 5, 10 },
+	{ .x = 5, .y = 10 },
+};
+
+static struct s2 s2_array[] = {
+	{ 5, 10 },
+	{ .x = 5, .y = 10 },
+};
+
+static struct s1 ret_s1_positional(void)
+{
+	return ((struct s1){ 5, 10 });
+}
+
+static struct s1 ret_s1_designated(void)
+{
+	return ((struct s1){ .x = 5, .y = 10 });
+}
+
+static struct s2 ret_s2_positional(void)
+{
+	return ((struct s2){ 5, 10 });
+}
+
+static struct s2 ret_s2_designated(void)
+{
+	return ((struct s2){ .x = 5, .y = 10 });
+}
+
+static struct nest1 ret_nest1_positional(void)
+{
+	return ((struct nest1){
+			{ 5, 10 },
+			{ 5, 10 },
+		});
+}
+
+static struct nest1 ret_nest1_designated_outer(void)
+{
+	return ((struct nest1){
+			.s1 = { 5, 10 },
+			.s2 = { 5, 10 },
+		});
+}
+
+static struct nest1 ret_nest1_designated_inner(void)
+{
+	return ((struct nest1){
+			{ .x = 5, .y = 10 },
+			{ .x = 5, .y = 10 },
+		});
+}
+
+static struct nest1 ret_nest1_designated_both(void)
+{
+	return ((struct nest1){
+			.s1 = { .x = 5, .y = 10 },
+			.s2 = { .x = 5, .y = 10 },
+		});
+}
+
+static struct nest2 ret_nest2_positional(void)
+{
+	return ((struct nest2){
+			{ 5, 10 },
+			{ 5, 10 },
+		});
+}
+
+static struct nest2 ret_nest2_designated_outer(void)
+{
+	return ((struct nest2){
+			.s1 = { 5, 10 },
+			.s2 = { 5, 10 },
+		});
+}
+
+static struct nest2 ret_nest2_designated_inner(void)
+{
+	return ((struct nest2){
+			{ .x = 5, .y = 10 },
+			{ .x = 5, .y = 10 },
+		});
+}
+
+static struct nest2 ret_nest2_designated_both(void)
+{
+	return ((struct nest2){
+			.s1 = { .x = 5, .y = 10 },
+			.s2 = { .x = 5, .y = 10 },
+		});
+}
+/*
+ * check-name: designated_init attribute
+ *
+ * check-error-start
+designated-init.c:23:36: warning: in initializer for s2_positional: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:23:39: warning: in initializer for s2_positional: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:27:11: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:27:14: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:31:17: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:31:20: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:42:9: warning: in initializer for nest2_positional: positional init of field in struct nest2, declared with attribute designated_init
+designated-init.c:43:9: warning: in initializer for nest2_positional: positional init of field in struct nest2, declared with attribute designated_init
+designated-init.c:43:11: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:43:14: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:47:17: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:47:20: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:50:9: warning: in initializer for nest2_designated_inner: positional init of field in struct nest2, declared with attribute designated_init
+designated-init.c:51:9: warning: in initializer for nest2_designated_inner: positional init of field in struct nest2, declared with attribute designated_init
+designated-init.c:62:29: warning: in initializer for anon_positional: positional init of field in struct <noident>, declared with attribute designated_init
+designated-init.c:62:32: warning: in initializer for anon_positional: positional init of field in struct <noident>, declared with attribute designated_init
+designated-init.c:71:11: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:71:14: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:87:30: warning: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:87:33: warning: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:99:27: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:99:30: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:107:33: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:107:36: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:130:25: warning: positional init of field in struct nest2, declared with attribute designated_init
+designated-init.c:131:25: warning: positional init of field in struct nest2, declared with attribute designated_init
+designated-init.c:131:27: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:131:30: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:139:33: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:139:36: warning: in initializer for s2: positional init of field in struct s2, declared with attribute designated_init
+designated-init.c:146:25: warning: positional init of field in struct nest2, declared with attribute designated_init
+designated-init.c:147:25: warning: positional init of field in struct nest2, declared with attribute designated_init
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:50 2018
+++ new/usr/src/tools/smatch/src/validation/discarded-label-statement.c	Fri Dec 21 15:00:50 2018
@@ -0,0 +1,24 @@
+/*
+ * Verify that the statement following an unused label
+ * is not discarded with the label.
+ */
+
+static int bad(int a, int b)
+{
+	int r = 0;
+
+start:
+	r += a;
+	r += b;
+
+	return r;
+}
+
+/*
+ * check-name: discarded-label-statement
+ * check-command: test-linearize $file
+ *
+ * check-output-ignore
+ * check-output-contains: add
+ * check-output-contains: %arg1
+ */
--- /dev/null	Fri Dec 21 15:00:50 2018
+++ new/usr/src/tools/smatch/src/validation/div.c	Fri Dec 21 15:00:50 2018
@@ -0,0 +1,31 @@
+#define	INT_MIN		(-__INT_MAX__ - 1)
+#define	LONG_MIN	(-__LONG_MAX__ - 1)
+#define	LLONG_MIN	(-__LONG_LONG_MAX__ - 1)
+
+static int xd = 1 / 0;
+static int xl = 1L / 0;
+static int xll = 1LL / 0;
+
+static int yd = INT_MIN / -1;
+static long yl = LONG_MIN / -1;
+static long long yll = LLONG_MIN / -1;
+
+static int zd = INT_MIN % -1;
+static long zl = LONG_MIN % -1;
+static long long zll = LLONG_MIN % -1;
+
+/*
+ * check-name: division constants
+ *
+ * check-error-start
+div.c:5:19: warning: division by zero
+div.c:6:20: warning: division by zero
+div.c:7:22: warning: division by zero
+div.c:9:25: warning: constant integer operation overflow
+div.c:10:27: warning: constant integer operation overflow
+div.c:11:34: warning: constant integer operation overflow
+div.c:13:25: warning: constant integer operation overflow
+div.c:14:27: warning: constant integer operation overflow
+div.c:15:34: warning: constant integer operation overflow
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:50 2018
+++ new/usr/src/tools/smatch/src/validation/double-semicolon.c	Fri Dec 21 15:00:50 2018
@@ -0,0 +1,9 @@
+extern void *memset (void *s, int c, int n);
+static void test(void)
+{
+	struct { int foo;; } val;
+	memset(&val, 0, sizeof(val));
+}
+/*
+ * check-name: Double semicolon in struct
+ */
--- /dev/null	Fri Dec 21 15:00:50 2018
+++ new/usr/src/tools/smatch/src/validation/dubious-bitwise-with-not.c	Fri Dec 21 15:00:50 2018
@@ -0,0 +1,24 @@
+static unsigned int ok1  = !1 &&  2;
+static unsigned int bad1 = !1 &   2;
+static unsigned int ok2  = !1 ||  2;
+static unsigned int bad2 = !1 |   2;
+static unsigned int ok3  =  1 && !2;
+static unsigned int bad3 =  1 &  !2;
+static unsigned int ok4  =  1 || !2;
+static unsigned int bad4 =  1 |  !2;
+static unsigned int ok5  = !1 && !2;
+static unsigned int bad5 = !1 &  !2;
+static unsigned int ok6  = !1 || !2;
+static unsigned int bad6 = !1 |  !2;
+/*
+ * check-name: Dubious bitwise operation on !x
+ *
+ * check-error-start
+dubious-bitwise-with-not.c:2:31: warning: dubious: !x & y
+dubious-bitwise-with-not.c:4:31: warning: dubious: !x | y
+dubious-bitwise-with-not.c:6:31: warning: dubious: x & !y
+dubious-bitwise-with-not.c:8:31: warning: dubious: x | !y
+dubious-bitwise-with-not.c:10:31: warning: dubious: !x & !y
+dubious-bitwise-with-not.c:12:31: warning: dubious: !x | !y
+ * check-error-end
+ */
No differences encountered
--- /dev/null	Fri Dec 21 15:00:50 2018
+++ new/usr/src/tools/smatch/src/validation/endian-big.c	Fri Dec 21 15:00:50 2018
@@ -0,0 +1,14 @@
+#if defined(__LITTLE_ENDIAN__)
+#error "__LITTLE_ENDIAN__ defined!"
+#endif
+#if (__BIG_ENDIAN__ != 1)
+#error "__BIG_ENDIAN__ not correctly defined!"
+#endif
+#if (__BYTE_ORDER__ != __ORDER_BIG_ENDIAN__)
+#error "__BYTE_ORDER__ not correctly defined!"
+#endif
+
+/*
+ * check-name: endian-big.c
+ * check-command: sparse -mbig-endian $file
+ */
--- /dev/null	Fri Dec 21 15:00:51 2018
+++ new/usr/src/tools/smatch/src/validation/endian-little.c	Fri Dec 21 15:00:51 2018
@@ -0,0 +1,14 @@
+#if defined(__BIG_ENDIAN__)
+#error "__BIG_ENDIAN__ defined!"
+#endif
+#if (__LITTLE_ENDIAN__ != 1)
+#error "__LITTLE_ENDIAN__ not correctly defined!"
+#endif
+#if (__BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__)
+#error "__BYTE_ORDER__ not correctly defined!"
+#endif
+
+/*
+ * check-name: endian-little.c
+ * check-command: sparse -mlittle-endian $file
+ */
--- /dev/null	Fri Dec 21 15:00:51 2018
+++ new/usr/src/tools/smatch/src/validation/enum-common.c	Fri Dec 21 15:00:51 2018
@@ -0,0 +1,112 @@
+static enum ENUM_TYPE_A { VALUE_A } var_a;
+static enum ENUM_TYPE_B { VALUE_B } var_b;
+static enum /* anon. */ { VALUE_C } anon_enum_var;
+static int i;
+
+static void take_enum_of_type_a(enum ENUM_TYPE_A arg_enum)
+{
+	(void) arg_enum;
+}
+
+static void take_int(int arg_int)
+{
+	(void) arg_int;
+}
+
+static void always_ok(void)
+{
+	var_a ++;
+	var_a = VALUE_A;
+	var_a = (enum ENUM_TYPE_A) VALUE_B;
+	var_b = (enum ENUM_TYPE_B) i;
+	i = (int) VALUE_A;
+	anon_enum_var = VALUE_C;
+	i = VALUE_C;
+	i = anon_enum_var;
+	i = 7;
+	var_a = (enum ENUM_TYPE_A) 0;
+	anon_enum_var = (__typeof__(anon_enum_var)) 0;
+	anon_enum_var = (__typeof__(anon_enum_var)) VALUE_A;
+
+	switch (var_a) {
+		case VALUE_A:
+		default:
+			take_enum_of_type_a(var_a);
+			take_enum_of_type_a(VALUE_A);
+	}
+
+	switch (anon_enum_var) {
+		case VALUE_C:
+		default:
+			take_int(anon_enum_var);
+	}
+
+	switch (i) {
+		case VALUE_C:
+		default:
+			take_int(VALUE_C);
+	}
+}
+
+static void trigger_enum_mismatch(void)
+{
+	switch (var_a) {
+		case VALUE_B:
+		case VALUE_C:
+		default:
+			take_enum_of_type_a(var_b);
+			take_enum_of_type_a(VALUE_B);
+	}
+
+	switch (anon_enum_var) {
+		case VALUE_A:
+		default:
+			take_enum_of_type_a(anon_enum_var);
+			take_enum_of_type_a(VALUE_C);
+	}
+
+	// this has been already working in sparse 0.4.1
+	var_a = var_b;
+	var_b = anon_enum_var;
+	anon_enum_var = var_a;
+
+	// implemented after sparse 0.4.1
+	var_a = VALUE_B;
+	var_b = VALUE_C;
+	anon_enum_var = VALUE_A;
+}
+
+static void trigger_int_to_enum_conversion(void)
+{
+	switch (var_a) {
+		case 0:
+		default:
+			take_enum_of_type_a(i);
+			take_enum_of_type_a(7);
+	}
+	var_a = 0;
+	var_b = i;
+	anon_enum_var = 0;
+	anon_enum_var = i;
+	var_a = (int) VALUE_A;
+	var_a = (int) VALUE_B;
+}
+
+static void trigger_enum_to_int_conversion(void)
+{
+	i = var_a;
+	i = VALUE_B;
+	switch (i) {
+		case VALUE_A:
+		case VALUE_B:
+		default:
+			take_int(var_a);
+			take_int(VALUE_B);
+	}
+}
+
+/*
+ * check-name: enum-common
+ * check-description: common part of the test for -Wenum-mismatch, -Wenum-to-int and -Wint-to-enum
+ * check-command: sparse -Wno-enum-mismatch -Wno-int-to-enum $file
+ */
--- /dev/null	Fri Dec 21 15:00:51 2018
+++ new/usr/src/tools/smatch/src/validation/enum-from-int.c	Fri Dec 21 15:00:51 2018
@@ -0,0 +1,36 @@
+#include "enum-common.c"
+
+/*
+ * check-name: -Wint-to-enum
+ * check-command: sparse -Wno-enum-mismatch $file
+ *
+ * check-error-start
+enum-common.c:84:45: warning: conversion of
+enum-common.c:84:45:     int to
+enum-common.c:84:45:     int enum ENUM_TYPE_A 
+enum-common.c:85:45: warning: conversion of
+enum-common.c:85:45:     int to
+enum-common.c:85:45:     int enum ENUM_TYPE_A 
+enum-common.c:82:22: warning: conversion of
+enum-common.c:82:22:     int to
+enum-common.c:82:22:     int enum ENUM_TYPE_A 
+enum-common.c:87:17: warning: conversion of
+enum-common.c:87:17:     int to
+enum-common.c:87:17:     int enum ENUM_TYPE_A 
+enum-common.c:88:17: warning: conversion of
+enum-common.c:88:17:     int to
+enum-common.c:88:17:     int enum ENUM_TYPE_B 
+enum-common.c:89:25: warning: conversion of
+enum-common.c:89:25:     int to
+enum-common.c:89:25:     int enum <noident> 
+enum-common.c:90:25: warning: conversion of
+enum-common.c:90:25:     int to
+enum-common.c:90:25:     int enum <noident> 
+enum-common.c:91:18: warning: conversion of
+enum-common.c:91:18:     int to
+enum-common.c:91:18:     int enum ENUM_TYPE_A 
+enum-common.c:92:18: warning: conversion of
+enum-common.c:92:18:     int to
+enum-common.c:92:18:     int enum ENUM_TYPE_A 
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:51 2018
+++ new/usr/src/tools/smatch/src/validation/enum-mismatch.c	Fri Dec 21 15:00:51 2018
@@ -0,0 +1,19 @@
+enum ea { A = 0, };
+enum eb { B = 1, };
+
+
+static enum eb foo(enum ea a)
+{
+	return a;
+}
+
+/*
+ * check-name: enum-mismatch
+ * check-command: sparse -Wenum-mismatch $file
+ *
+ * check-error-start
+enum-mismatch.c:7:16: warning: mixing different enum types
+enum-mismatch.c:7:16:     int enum ea  versus
+enum-mismatch.c:7:16:     int enum eb 
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:51 2018
+++ new/usr/src/tools/smatch/src/validation/enum-to-int.c	Fri Dec 21 15:00:51 2018
@@ -0,0 +1,27 @@
+#include "enum-common.c"
+
+/*
+ * check-name: -Wenum-to-int
+ * check-command: sparse -Wenum-to-int -Wno-enum-mismatch -Wno-int-to-enum $file
+ *
+ * check-error-start
+enum-common.c:97:13: warning: conversion of
+enum-common.c:97:13:     int enum ENUM_TYPE_A  to
+enum-common.c:97:13:     int
+enum-common.c:98:13: warning: conversion of
+enum-common.c:98:13:     int enum ENUM_TYPE_B  to
+enum-common.c:98:13:     int
+enum-common.c:103:34: warning: conversion of
+enum-common.c:103:34:     int enum ENUM_TYPE_A  to
+enum-common.c:103:34:     int
+enum-common.c:104:34: warning: conversion of
+enum-common.c:104:34:     int enum ENUM_TYPE_B  to
+enum-common.c:104:34:     int
+enum-common.c:100:22: warning: conversion of
+enum-common.c:100:22:     int enum ENUM_TYPE_A  to
+enum-common.c:100:22:     int
+enum-common.c:101:22: warning: conversion of
+enum-common.c:101:22:     int enum ENUM_TYPE_B  to
+enum-common.c:101:22:     int
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:51 2018
+++ new/usr/src/tools/smatch/src/validation/enum_scope.c	Fri Dec 21 15:00:51 2018
@@ -0,0 +1,11 @@
+enum {A = 12};
+
+static void f(void)
+{
+	enum {A = A + 1, B};
+	char s[1 - 2 * (B != 14)];
+}
+
+/*
+ * check-name: enumeration constants' scope [6.2.1p7]
+ */
--- /dev/null	Fri Dec 21 15:00:51 2018
+++ new/usr/src/tools/smatch/src/validation/escapes.c	Fri Dec 21 15:00:51 2018
@@ -0,0 +1,32 @@
+static int e[] = { '\'', '\"', '\?', '\\',
+                   '\a', '\b', '\f', '\n', '\r', '\t', '\v',
+		   '\0', '\012', '\x7890', '\xabcd' };
+static char *s = "\'\"\?\\ \a\b\f\n\r\t\v \377\xcafe";
+
+static int bad_e[] = { '\c', '\0123', '\789', '\xdefg' };
+
+static char a_hex[3] = "\x61\x62\x63";
+static char b_hex[3] = "\x61\x62\x63\x64";
+static char c_hex[3] = "\x61\x62";
+static char d_hex[3] = "\x61";
+
+static char a_oct[3] = "\141\142\143";
+static char b_oct[3] = "\141\142\143\144";
+static char c_oct[3] = "\141\142";
+static char d_oct[3] = "\141";
+/*
+ * check-name: Character escape sequences
+ *
+ * check-error-start
+escapes.c:3:34: warning: hex escape sequence out of range
+escapes.c:3:44: warning: hex escape sequence out of range
+escapes.c:4:18: warning: hex escape sequence out of range
+escapes.c:6:24: warning: unknown escape sequence: '\c'
+escapes.c:6:30: warning: multi-character character constant
+escapes.c:6:39: warning: multi-character character constant
+escapes.c:6:47: warning: hex escape sequence out of range
+escapes.c:6:47: warning: multi-character character constant
+escapes.c:9:24: warning: too long initializer-string for array of char
+escapes.c:14:24: warning: too long initializer-string for array of char
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:51 2018
+++ new/usr/src/tools/smatch/src/validation/extern-array.c	Fri Dec 21 15:00:51 2018
@@ -0,0 +1,14 @@
+extern const char *v4l2_type_names[];
+const char *v4l2_type_names[] = {
+        "test"
+};
+extern const char *v4l2_type_names[];
+
+static void test(void)
+{
+        unsigned sz = sizeof(v4l2_type_names);
+}
+/*
+ * check-name: duplicate extern array
+ */
+
--- /dev/null	Fri Dec 21 15:00:51 2018
+++ new/usr/src/tools/smatch/src/validation/extern-inline.c	Fri Dec 21 15:00:51 2018
@@ -0,0 +1,23 @@
+extern __inline__ int f(int);
+
+extern __inline__ int
+f(int x)
+{
+        return x;
+}
+
+extern int g(int);
+
+extern __inline__ int
+g(int x)
+{
+        return x;
+}
+
+
+/*
+ * check-name: extern inline function
+ * check-command: sparse $file $file
+ * check-description: Extern inline function never emits stand alone copy
+ * of the function. It allows multiple such definitions in different file.
+ */
--- /dev/null	Fri Dec 21 15:00:51 2018
+++ new/usr/src/tools/smatch/src/validation/external-function-has-definition.c	Fri Dec 21 15:00:51 2018
@@ -0,0 +1,15 @@
+
+extern void myfunction(void);
+
+extern void
+myfunction(void)
+{
+	return;
+}
+
+/*
+ * check-name: -Wno-external-function-has-definition works
+ * check-command: sparse -Wno-external-function-has-definition
+ * check-error-start
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:51 2018
+++ new/usr/src/tools/smatch/src/validation/field-overlap.c	Fri Dec 21 15:00:51 2018
@@ -0,0 +1,16 @@
+static struct {
+	int x;
+	struct {
+		int z;
+		int w;
+	} y;
+} a = { .y.z = 1, .y.w = 2, };
+
+static struct {int x, y, z;} w[2] = {
+	{.x = 1, .y = 2, .z = 3},
+	{.x = 1, .y = 2, .z = 3}
+};
+
+/*
+ * check-name: field overlap
+ */
--- /dev/null	Fri Dec 21 15:00:51 2018
+++ new/usr/src/tools/smatch/src/validation/field-override.c	Fri Dec 21 15:00:51 2018
@@ -0,0 +1,101 @@
+static int ref[] = {
+	[1] = 3,
+	[2] = 3,
+	[3] = 3,
+	[2] = 2,		/* check-should-warn */
+	[1] = 1,		/* check-should-warn */
+};
+
+static int foo[] = {
+	[1 ... 3] = 3,
+};
+
+static int foz[4] = {
+	[0 ... 3] = 3,
+	[0] = 0,
+	[1] = 0,
+	[2 ... 3] = 1,
+	[2] = 3,		/* check-should-warn */
+	[3] = 3,		/* check-should-warn */
+};
+
+static int bar[] = {
+	[1 ... 3] = 3,
+	[1]       = 1,		/* check-should-warn */
+	[2]       = 2,		/* check-should-warn */
+	[2 ... 4] = 2,		/* check-should-warn */
+	[2 ... 3] = 2,		/* check-should-warn */
+	[4] = 4,		/* check-should-warn */
+	[0] = 0,
+	[5] = 5,
+};
+
+static int baz[3][3] = {
+	[0 ... 2][0 ... 2] = 0,
+	[0] = { 0, 0, 0, },	/* check-should-warn */
+	[0][0] = 1,		/* check-should-warn */
+	[1] = { 0, 0, 0, },	/* check-should-warn */
+	[1][0] = 1,		/* check-should-warn */
+	[1][1] = 1,		/* check-should-warn */
+	[1 ... 2][1 ... 2] = 2,
+};
+
+
+struct s {
+	int i;
+	int a[2];
+};
+
+static struct s s = {
+	.a[0] = 0,
+	.a[1] = 1,
+};
+
+static struct s a[2] = {
+	[0].i = 0,
+	[1].i = 1,
+	[0].a[0] = 2,
+	[0].a[1] = 3,
+};
+
+static struct s b[2] = {
+	[0 ... 1] = { 0, { 1, 2 }, },
+	[0].i = 0,
+	[1].i = 1,
+	[0].a[0] = 2,
+	[0].a[1] = 3,
+};
+
+/*
+ * check-name: field-override
+ * check-command: sparse -Woverride-init -Woverride-init-all $file
+ *
+ * check-error-start
+field-override.c:2:10: warning: Initializer entry defined twice
+field-override.c:6:10:   also defined here
+field-override.c:3:10: warning: Initializer entry defined twice
+field-override.c:5:10:   also defined here
+field-override.c:17:10: warning: Initializer entry defined twice
+field-override.c:18:10:   also defined here
+field-override.c:17:10: warning: Initializer entry defined twice
+field-override.c:19:10:   also defined here
+field-override.c:23:10: warning: Initializer entry defined twice
+field-override.c:24:10:   also defined here
+field-override.c:23:10: warning: Initializer entry defined twice
+field-override.c:25:10:   also defined here
+field-override.c:23:10: warning: Initializer entry defined twice
+field-override.c:26:10:   also defined here
+field-override.c:26:10: warning: Initializer entry defined twice
+field-override.c:27:10:   also defined here
+field-override.c:26:10: warning: Initializer entry defined twice
+field-override.c:28:10:   also defined here
+field-override.c:35:10: warning: Initializer entry defined twice
+field-override.c:36:10:   also defined here
+field-override.c:37:10: warning: Initializer entry defined twice
+field-override.c:38:10:   also defined here
+field-override.c:37:10: warning: Initializer entry defined twice
+field-override.c:39:10:   also defined here
+field-override.c:37:10: warning: Initializer entry defined twice
+field-override.c:40:10:   also defined here
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:51 2018
+++ new/usr/src/tools/smatch/src/validation/fored_arg.c	Fri Dec 21 15:00:51 2018
@@ -0,0 +1,18 @@
+/*
+ * check-name: Forced function argument type.
+ */
+
+#define __iomem	__attribute__((noderef, address_space(2)))
+#define __force __attribute__((force))
+
+static void foo(__force void * addr)
+{
+}
+
+
+static void bar(void)
+{
+	void __iomem  *a;
+	foo(a);
+}
+
--- /dev/null	Fri Dec 21 15:00:52 2018
+++ new/usr/src/tools/smatch/src/validation/foul-bitwise.c	Fri Dec 21 15:00:52 2018
@@ -0,0 +1,32 @@
+typedef unsigned short __attribute__((bitwise))__le16;
+static __le16 foo(__le16 a)
+{
+	return a |= ~a;
+}
+
+static int baz(__le16 a)
+{
+	return ~a == ~a;
+}
+
+static int barf(__le16 a)
+{
+	return a == (a & ~a);
+}
+
+static __le16 bar(__le16 a)
+{
+	return -a;
+}
+
+/*
+ * check-name: foul bitwise
+ * check-error-start
+foul-bitwise.c:9:16: warning: restricted __le16 degrades to integer
+foul-bitwise.c:9:22: warning: restricted __le16 degrades to integer
+foul-bitwise.c:19:16: warning: restricted __le16 degrades to integer
+foul-bitwise.c:19:16: warning: incorrect type in return expression (different base types)
+foul-bitwise.c:19:16:    expected restricted __le16
+foul-bitwise.c:19:16:    got int
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:52 2018
+++ new/usr/src/tools/smatch/src/validation/fp-vs-ptrcast.c	Fri Dec 21 15:00:52 2018
@@ -0,0 +1,13 @@
+float *f01(void* p)
+{
+	return p;
+}
+
+/*
+ * check-name: fp-vs-ptrcast
+ * check-command: test-linearize -Wno-decl $file
+ * check-output-ignore
+ *
+ * check-output-excludes: fpcast
+ * check-output-contains: ptrcast
+ */
--- /dev/null	Fri Dec 21 15:00:52 2018
+++ new/usr/src/tools/smatch/src/validation/function-pointer-inheritance.c	Fri Dec 21 15:00:52 2018
@@ -0,0 +1,9 @@
+extern int foo(int f(int, void *));
+
+int foo(int (*f)(int, void *))
+{
+    return 0;
+}
+/*
+ * check-name: Function pointer inheritance
+ */
--- /dev/null	Fri Dec 21 15:00:52 2018
+++ new/usr/src/tools/smatch/src/validation/function-redecl.c	Fri Dec 21 15:00:52 2018
@@ -0,0 +1,62 @@
+#define __user	__attribute__((address_space(1)))
+#define NULL	((void*)0)
+
+int ret_type(void);
+void ret_type(void) { }				/* check-should-fail */
+
+
+int ret_const(void);
+int const ret_const(void) { return 0; }		/* check-should-fail */
+
+
+void *ret_as(void);
+void __user *ret_as(void) { return NULL; }	/* check-should-fail */
+
+
+void *ret_mod(void);
+void const *ret_mod(void) { return NULL; }	/* check-should-fail */
+
+
+void arg_type(int a);
+void arg_type(void *a) { }			/* check-should-fail */
+
+
+void arg_const(int a);
+void arg_const(const int a) { }			/* OK */
+
+
+void arg_as(void *a);
+void arg_as(void __user *a) { }			/* check-should-fail */
+
+
+void arg_mod(void *);
+void arg_mod(void const *a) { }			/* check-should-fail */
+
+
+void arg_more_arg(int a);
+void arg_more_arg(int a, int b) { }		/* check-should-fail */
+
+
+void arg_less_arg(int a, int b);
+void arg_less_arg(int a) { }			/* check-should-fail */
+
+
+void arg_vararg(int a);
+void arg_vararg(int a, ...) { }			/* check-should-fail */
+
+/*
+ * check-name: function-redecl
+ *
+ * check-error-start
+function-redecl.c:5:6: error: symbol 'ret_type' redeclared with different type (originally declared at function-redecl.c:4) - different base types
+function-redecl.c:9:11: error: symbol 'ret_const' redeclared with different type (originally declared at function-redecl.c:8) - different modifiers
+function-redecl.c:13:13: error: symbol 'ret_as' redeclared with different type (originally declared at function-redecl.c:12) - different address spaces
+function-redecl.c:17:12: error: symbol 'ret_mod' redeclared with different type (originally declared at function-redecl.c:16) - different modifiers
+function-redecl.c:21:6: error: symbol 'arg_type' redeclared with different type (originally declared at function-redecl.c:20) - incompatible argument 1 (different base types)
+function-redecl.c:29:6: error: symbol 'arg_as' redeclared with different type (originally declared at function-redecl.c:28) - incompatible argument 1 (different address spaces)
+function-redecl.c:33:6: error: symbol 'arg_mod' redeclared with different type (originally declared at function-redecl.c:32) - incompatible argument 1 (different modifiers)
+function-redecl.c:37:6: error: symbol 'arg_more_arg' redeclared with different type (originally declared at function-redecl.c:36) - different argument counts
+function-redecl.c:41:6: error: symbol 'arg_less_arg' redeclared with different type (originally declared at function-redecl.c:40) - different argument counts
+function-redecl.c:45:6: error: symbol 'arg_vararg' redeclared with different type (originally declared at function-redecl.c:44) - incompatible variadic arguments
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:52 2018
+++ new/usr/src/tools/smatch/src/validation/goto-label.c	Fri Dec 21 15:00:52 2018
@@ -0,0 +1,29 @@
+void foo(void)
+{
+	goto a;
+a:
+a:
+	return;
+}
+
+void g(void)
+{
+	goto a;
+a:
+	return;
+}
+
+void bar(void)
+{
+	goto neverland;
+}
+
+/*
+ * check-name: goto labels
+ *
+ * check-error-start
+goto-label.c:5:1: error: label 'a' redefined
+goto-label.c:18:9: error: label 'neverland' was not declared
+ * check-error-end
+ */
+
--- /dev/null	Fri Dec 21 15:00:52 2018
+++ new/usr/src/tools/smatch/src/validation/identifier_list.c	Fri Dec 21 15:00:52 2018
@@ -0,0 +1,18 @@
+typedef int T;
+void f(...);
+void g(*);
+void h(x,int);
+void i_OK(T);
+void j(x,T);
+/*
+ * check-name: identifier-list parsing
+ * check-error-start
+identifier_list.c:2:8: warning: variadic functions must have one named argument
+identifier_list.c:3:8: error: Expected ) in function declarator
+identifier_list.c:3:8: error: got *
+identifier_list.c:4:9: error: Expected ) in function declarator
+identifier_list.c:4:9: error: got ,
+identifier_list.c:6:9: error: Expected ) in function declarator
+identifier_list.c:6:9: error: got ,
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:52 2018
+++ new/usr/src/tools/smatch/src/validation/implicit-KR-arg-type0.c	Fri Dec 21 15:00:52 2018
@@ -0,0 +1,15 @@
+int foo(a, b)
+	int a;
+{
+	if (b)
+		return a;
+}
+
+/*
+ * check-name: implicit-KR-arg-type
+ * check-command: sparse -Wno-decl -Wold-style-definition -Wno-implicit-int $file
+ *
+ * check-error-start
+implicit-KR-arg-type0.c:2:9: warning: non-ANSI definition of function 'foo'
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:52 2018
+++ new/usr/src/tools/smatch/src/validation/implicit-ret-type.c	Fri Dec 21 15:00:52 2018
@@ -0,0 +1,15 @@
+fun(void);
+
+foo(void) { return 1; }
+static bar(void) { return 1; }
+
+/*
+ * check-name: implicit-ret-type.c
+ * check-command: sparse -Wno-decl $file
+ *
+ * check-error-start
+implicit-ret-type.c:1:1: warning: 'fun()' has implicit return type
+implicit-ret-type.c:3:1: warning: 'foo()' has implicit return type
+implicit-ret-type.c:4:8: warning: 'bar()' has implicit return type
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:52 2018
+++ new/usr/src/tools/smatch/src/validation/implicit-type.c	Fri Dec 21 15:00:52 2018
@@ -0,0 +1,14 @@
+extern a;
+static b;
+c;
+
+/*
+ * check-name: implicit-type.c
+ * check-command: sparse -Wno-decl $file
+ *
+ * check-error-start
+implicit-type.c:1:8: warning: 'a' has implicit type
+implicit-type.c:2:8: warning: 'b' has implicit type
+implicit-type.c:3:1: warning: 'c' has implicit type
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:52 2018
+++ new/usr/src/tools/smatch/src/validation/include-eval.c	Fri Dec 21 15:00:52 2018
@@ -0,0 +1,6 @@
+/* nothing */
+
+/*
+ * check-name: include-eval.c
+ * check-command: sparse -include ./include-eval.inc $file
+ */
--- /dev/null	Fri Dec 21 15:00:52 2018
+++ new/usr/src/tools/smatch/src/validation/include-eval.inc	Fri Dec 21 15:00:52 2018
@@ -0,0 +1,12 @@
+typedef unsigned long long_t;
+
+inline
+static unsigned int ok(void)
+{
+	return sizeof(long_t);
+}
+
+static unsigned int ko(void)
+{
+	return sizeof(long_t);
+}
--- /dev/null	Fri Dec 21 15:00:52 2018
+++ new/usr/src/tools/smatch/src/validation/infinite-loop0.c	Fri Dec 21 15:00:52 2018
@@ -0,0 +1,11 @@
+void foo(void)
+{
+        int a = a || 0;
+        if (a) ;
+}
+
+/*
+ * check-name: internal infinite loop (0)
+ * check-command: sparse -Wno-decl $file
+ * check-timeout:
+ */
--- /dev/null	Fri Dec 21 15:00:52 2018
+++ new/usr/src/tools/smatch/src/validation/infinite-loop02.c	Fri Dec 21 15:00:52 2018
@@ -0,0 +1,11 @@
+void foo(void)
+{
+	int a = 1;
+	while ((a = !a))
+		;
+}
+
+/*
+ * check-name: infinite loop 02
+ * check-command: sparse -Wno-decl $file
+ */
--- /dev/null	Fri Dec 21 15:00:53 2018
+++ new/usr/src/tools/smatch/src/validation/infinite-loop03.c	Fri Dec 21 15:00:53 2018
@@ -0,0 +1,16 @@
+static void foo(int *buf)
+{
+	int a = 1;
+	int *b;
+	do {
+		if (a)
+			b = buf;
+		if (a)
+			*buf = 0;
+	} while (!(a = !a));
+}
+
+/*
+ * check-name: infinite loop 03
+ * check-command: sparse -Wno-decl $file
+ */
--- /dev/null	Fri Dec 21 15:00:53 2018
+++ new/usr/src/tools/smatch/src/validation/init-char-array.c	Fri Dec 21 15:00:53 2018
@@ -0,0 +1,18 @@
+/*
+ * for array of char {<string>} gets special treatment in initializer.
+ */
+static char *s[] = {"aaaaaaaaa"};
+static char t[][10] = {"aaaaaaaaa"};
+static char u[] = {"aaaaaaaaa"};
+static char v[] = "aaaaaaaaa";
+static void f(void)
+{
+	char x[1/(sizeof(s) == sizeof(char *))];
+	char y[1/(sizeof(u) == 10)];
+	char z[1/(sizeof(v) == 10)];
+	char w[1/(sizeof(t) == 10)];
+}
+
+/*
+ * check-name: char array initializers
+ */
--- /dev/null	Fri Dec 21 15:00:53 2018
+++ new/usr/src/tools/smatch/src/validation/init-char-array1.c	Fri Dec 21 15:00:53 2018
@@ -0,0 +1,27 @@
+/*
+ * for array of char, ("...") as the initializer is an gcc language
+ * extension. check that a parenthesized string initializer is handled
+ * correctly and that -Wparen-string warns about it's use.
+ */
+static const char u[] = ("hello");
+static const char v[] = {"hello"};
+static const char v1[] = {("hello")};
+static const char w[] = "hello";
+static const char x[5] = "hello";
+
+static void f(void)
+{
+	char a[1/(sizeof(u) == 6)];
+	char b[1/(sizeof(v) == 6)];
+	char c[1/(sizeof(w) == 6)];
+	char d[1/(sizeof(x) == 5)];
+}
+/*
+ * check-name: parenthesized string initializer
+ * check-command: sparse -Wparen-string $file
+ *
+ * check-error-start
+init-char-array1.c:6:26: warning: array initialized from parenthesized string constant
+init-char-array1.c:8:28: warning: array initialized from parenthesized string constant
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:53 2018
+++ new/usr/src/tools/smatch/src/validation/init_cstring.c	Fri Dec 21 15:00:53 2018
@@ -0,0 +1,11 @@
+static struct alpha {
+  char a[2];
+} x = { .a = "ab" };
+/*
+ * check-name: -Winit-cstring option
+ *
+ * check-command: sparse -Winit-cstring $file
+ * check-error-start
+init_cstring.c:3:14: warning: too long initializer-string for array of char(no space for nul char)
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:53 2018
+++ new/usr/src/tools/smatch/src/validation/initializer-entry-defined-twice.c	Fri Dec 21 15:00:53 2018
@@ -0,0 +1,63 @@
+/* Tests for the "Initializer entry defined twice" warning. */
+
+/* Initializing a struct field twice should trigger the warning. */
+struct normal {
+	int field1;
+	int field2;
+};
+
+static struct normal struct_error = {
+	.field1 = 0,
+	.field1 = 0
+};
+
+/* Initializing two different fields of a union should trigger the warning. */
+struct has_union {
+	int x;
+	union {
+		int a;
+		int b;
+	} y;
+	int z;
+};
+
+static struct has_union union_error = {
+	.y = {
+		.a = 0,
+		.b = 0
+	}
+};
+
+/* Empty structures can make two fields have the same offset in a struct.
+ * Initializing both should not trigger the warning. */
+struct empty { };
+
+struct same_offset {
+	struct empty field1;
+	int field2;
+};
+
+static struct same_offset not_an_error = {
+	.field1 = { },
+	.field2 = 0
+};
+
+/*
+ * _Bools generally take a whole byte, so ensure that we can initialize
+ * them without spewing a warning.
+ */
+static _Bool boolarray[3] = {
+	[0] = 1,
+	[1] = 1,
+};
+
+/*
+ * check-name: Initializer entry defined twice
+ *
+ * check-error-start
+initializer-entry-defined-twice.c:10:10: warning: Initializer entry defined twice
+initializer-entry-defined-twice.c:11:10:   also defined here
+initializer-entry-defined-twice.c:26:18: warning: Initializer entry defined twice
+initializer-entry-defined-twice.c:27:18:   also defined here
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:53 2018
+++ new/usr/src/tools/smatch/src/validation/inline_compound_literals.c	Fri Dec 21 15:00:53 2018
@@ -0,0 +1,22 @@
+struct foo {
+	int x;
+};
+
+static inline void baz(void)
+{
+	(struct foo) { .x = 0 };
+}
+
+static void barf(void)
+{
+	baz();
+}
+
+static void foo(void)
+{
+	baz();
+}
+
+/*
+ * check-name: inline compound literals
+ */
--- /dev/null	Fri Dec 21 15:00:53 2018
+++ new/usr/src/tools/smatch/src/validation/int128.c	Fri Dec 21 15:00:53 2018
@@ -0,0 +1,58 @@
+typedef		 __int128	 int128_t;
+typedef   signed __int128	sint128_t;
+typedef unsigned __int128	uint128_t;
+
+typedef	__int128 int	badxi;
+typedef int __int128	badix;
+typedef unsigned unsigned __int128 baduu;
+typedef double __int128 baddx;
+typedef __int128 double badxd;
+
+int sizeof_int128(void)
+{
+	return sizeof(__int128);
+}
+
+typedef unsigned long long u64;
+typedef unsigned long      u32;
+
+u64 foo(u64 a, u64 b, u64 c, u32 s)
+{
+       unsigned __int128 tmp;
+
+       tmp = (((uint128_t)a) * b) + c;
+       return (u64) (tmp >> s);
+}
+
+/*
+ * check-name: int128
+ * check-command: test-linearize $file
+ * check-output-ignore
+ *
+ * check-output-contains: ret\\..*\\$16
+ * check-output-contains: mulu\\.128
+ * check-output-contains: add\\.128
+ *
+ * check-error-start
+int128.c:5:18: error: two or more data types in declaration specifiers
+int128.c:5:18: error: Trying to use reserved word 'int' as identifier
+int128.c:5:25: error: Expected ; at end of declaration
+int128.c:5:25: error: got badxi
+int128.c:6:13: error: two or more data types in declaration specifiers
+int128.c:6:13: error: Trying to use reserved word '__int128' as identifier
+int128.c:6:25: error: Expected ; at end of declaration
+int128.c:6:25: error: got badix
+int128.c:7:18: error: impossible combination of type specifiers: unsigned unsigned
+int128.c:7:18: error: Trying to use reserved word 'unsigned' as identifier
+int128.c:7:27: error: Expected ; at end of declaration
+int128.c:7:27: error: got __int128
+int128.c:8:16: error: two or more data types in declaration specifiers
+int128.c:8:16: error: Trying to use reserved word '__int128' as identifier
+int128.c:8:25: error: Expected ; at end of declaration
+int128.c:8:25: error: got baddx
+int128.c:9:18: error: two or more data types in declaration specifiers
+int128.c:9:18: error: Trying to use reserved word 'double' as identifier
+int128.c:9:25: error: Expected ; at end of declaration
+int128.c:9:25: error: got badxd
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:53 2018
+++ new/usr/src/tools/smatch/src/validation/integer-promotions.c	Fri Dec 21 15:00:53 2018
@@ -0,0 +1,7 @@
+static int add_char(void)
+{
+	return (char) 127 + (char) 127 + (char) 2;
+}
+/*
+ * check-name: Integer promotions
+ */
--- /dev/null	Fri Dec 21 15:00:53 2018
+++ new/usr/src/tools/smatch/src/validation/ioc-typecheck.c	Fri Dec 21 15:00:53 2018
@@ -0,0 +1,11 @@
+extern unsigned int __invalid_size_argument_for_IOC;
+static unsigned iocnrs[] = {
+	[ 1 ?  0 : __invalid_size_argument_for_IOC ] = 1,
+};
+/*
+ * check-name: integer constant & conditional expression
+ * check-known-to-fail
+ *
+ * check-error-start
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:53 2018
+++ new/usr/src/tools/smatch/src/validation/kill-casts.c	Fri Dec 21 15:00:53 2018
@@ -0,0 +1,22 @@
+extern void __abort(void);
+
+struct s {
+	int elem:3;
+};
+
+void foo(struct s *x);
+void foo(struct s *x)
+{
+	if (x->elem == 0) {
+		if (x->elem != 0 && x->elem != 1)
+			__abort();
+	}
+}
+
+/*
+ * check-name: kill-casts
+ * check-command: test-linearize $file
+ *
+ * check-output-ignore
+ * check-output-excludes: cast\\.
+ */
--- /dev/null	Fri Dec 21 15:00:53 2018
+++ new/usr/src/tools/smatch/src/validation/kill-computedgoto.c	Fri Dec 21 15:00:53 2018
@@ -0,0 +1,17 @@
+void foo(int a);
+void foo(int a)
+{
+	void *l = &&end + 3;
+
+end:
+	if (a * 0)
+		goto *l;
+}
+
+/*
+ * check-name: kill-computedgoto
+ * check-command: test-linearize $file
+ *
+ * check-output-ignore
+ * check-output-excludes: add\\.
+ */
--- /dev/null	Fri Dec 21 15:00:53 2018
+++ new/usr/src/tools/smatch/src/validation/kill-cse.c	Fri Dec 21 15:00:53 2018
@@ -0,0 +1,21 @@
+int foo(int a)
+{
+	return ((a == 0) + 1) != ((a == 0) + 1);
+}
+
+/*
+ * check-name: kill-cse
+ * check-description:
+ *	Verify that instructions removed at CSE are
+ *	properly adjust the usage of their operands.
+ * check-command: test-linearize -Wno-decl $file
+ *
+ * check-output-start
+foo:
+.L0:
+	<entry-point>
+	ret.32      $0
+
+
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:00:54 2018
+++ new/usr/src/tools/smatch/src/validation/kill-insert-branch.c	Fri Dec 21 15:00:54 2018
@@ -0,0 +1,22 @@
+void foo(int a)
+{
+	int b = 1;
+	if (a)
+		b++;
+	if (b)
+		;
+}
+
+void bar(int a)
+{
+	if (a ? 1 : 2)
+		;
+}
+
+/*
+ * check-name: kill insert-branch
+ * check-command: test-linearize -Wno-decl $file
+ *
+ * check-output-ignore
+ * check-output-excludes: select\\.
+ */
--- /dev/null	Fri Dec 21 15:00:54 2018
+++ new/usr/src/tools/smatch/src/validation/kill-load.c	Fri Dec 21 15:00:54 2018
@@ -0,0 +1,17 @@
+int keep(volatile int *p)	{ return *p && 0; }
+int kill(int *p, int i)		{ return *p && 0; }
+void ind(volatile int *p,int i)	{ int v = i++; if (i && 0) p[v]; }
+
+
+/*
+ * check-name: kill-load
+ * check-command: test-linearize -Wno-decl $file
+ * check-description:
+ *	Check that loads are optimized away but only
+ *	when needed:
+ *	- non-volatile
+ *	- bb unreachable.
+ *
+ * check-output-ignore
+ * check-output-pattern-1-times: load\\.
+ */
--- /dev/null	Fri Dec 21 15:00:54 2018
+++ new/usr/src/tools/smatch/src/validation/kill-phi-node.c	Fri Dec 21 15:00:54 2018
@@ -0,0 +1,27 @@
+void foo(int a, int *b, unsigned int g);
+void foo(int a, int *b, unsigned int g)
+{
+	int d = 0;
+
+	if ((!a || *b) && g)
+		d = 16;
+	else
+		d = 8;
+}
+
+int bar(void);
+int bar(void)
+{
+	int i;
+	for (i = 0; i; i--)
+		;
+	return 0;
+}
+
+/*
+ * check-name: kill-phi-node
+ * check-command: test-linearize $file
+ *
+ * check-output-ignore
+ * check-output-excludes: phisrc\\.
+ */
--- /dev/null	Fri Dec 21 15:00:54 2018
+++ new/usr/src/tools/smatch/src/validation/kill-phi-ttsbb.c	Fri Dec 21 15:00:54 2018
@@ -0,0 +1,28 @@
+int def(void);
+void use(int);
+
+static int foo(int a, int b)
+{
+	int c;
+
+	if (a)
+		c = 1;
+	else
+		c = def();
+
+	if (c)
+		use(1);
+	else
+		use(0);
+}
+
+/*
+ * check-name: kill-phi-ttsbb
+ * check-description:
+ *	Verify if OP_PHI usage is adjusted after successful try_to_simplify_bb()
+ * check-command: test-linearize $file
+ * check-output-ignore
+ *
+ * check-output-excludes: phi\\.
+ * check-output-excludes: phisrc\\.
+ */
--- /dev/null	Fri Dec 21 15:00:54 2018
+++ new/usr/src/tools/smatch/src/validation/kill-phi-ttsbb2.c	Fri Dec 21 15:00:54 2018
@@ -0,0 +1,40 @@
+extern int error(int);
+
+int foo(int perr);
+int foo(int perr)
+{
+	int err = 0;
+	int rc = 0;
+	int j = 0;
+	int i = 1;
+
+	i && j++;
+
+	i-- && j;
+
+	i && j--;
+
+	if (j != 1) {
+		err = 1;
+		if (perr)
+			error(1);
+	}
+
+	if (err != 0)
+		rc = 1;
+
+	return rc;
+}
+
+/*
+ * check-name: kill-phi-ttsbb2
+ * check-description:
+ *	Verify if OP_PHI usage is adjusted after successful try_to_simplify_bb()
+ * check-warning: this test is sensitive to details of code generation
+ *                with proper bb packing (taking care of phi-nodes) it
+ *		  will be optimized away and test nothing. You have been warned.
+ * check-command: test-linearize $file
+ * check-output-ignore
+ *
+ * check-output-excludes: VOID
+ */
--- /dev/null	Fri Dec 21 15:00:54 2018
+++ new/usr/src/tools/smatch/src/validation/kill-phisrc.c	Fri Dec 21 15:00:54 2018
@@ -0,0 +1,21 @@
+int foo(int a, int b)
+{
+	int r = a + b;
+
+	if (a && 0) {
+		int s = r;
+		if (b)
+			s = 0;
+		(void) s;
+	}
+
+	return 0;
+}
+
+/*
+ * check-name: kill-phisrc
+ * check-command: test-linearize -Wno-decl $file
+ *
+ * check-output-ignore
+ * check-output-excludes: add\\.
+ */
--- /dev/null	Fri Dec 21 15:00:54 2018
+++ new/usr/src/tools/smatch/src/validation/kill-pure-call.c	Fri Dec 21 15:00:54 2018
@@ -0,0 +1,17 @@
+int side(int a);
+int pure(int a) __attribute__((pure));
+
+int keep(int a) { return side(a) && 0; }
+int kill(int a) { return pure(a) && 0; }
+
+/*
+ * check-name: kill-pure-call
+ * check-command: test-linearize -Wno-decl $file
+ * check-description:
+ *	See that the call is optimized away but only
+ *	when the function is "pure".
+ *
+ * check-output-ignore
+ * check-output-contains: call\\..* side
+ * check-output-excludes: call\\..* pure
+ */
--- /dev/null	Fri Dec 21 15:00:54 2018
+++ new/usr/src/tools/smatch/src/validation/kill-replaced-insn.c	Fri Dec 21 15:00:54 2018
@@ -0,0 +1,61 @@
+// See if the replaced operation is effectively killed or not
+
+static int kill_add(int a, int b)
+{
+	return (a + b) && 0;
+}
+
+static int kill_scast(short a)
+{
+	return ((int) a) && 0;
+}
+
+static int kill_ucast(unsigned char a)
+{
+	return ((int) a) && 0;
+}
+
+static int kill_pcast(int *a)
+{
+	return ((void*) a) && 0;
+}
+
+static int kill_fcast(double a)
+{
+	return ((int) a) && 0;
+}
+
+static int kill_select(int a)
+{
+	return (a ? 1 : 0) && 0;
+}
+
+static int kill_setval(int a)
+{
+l:
+	return &&l && 0;
+}
+
+static int kill_load(int *a)
+{
+	return *a && 0;
+}
+
+static int kill_store(int *a)
+{
+	return (*a = 1) && 0;
+}
+
+/*
+ * check-name: kill-replaced-insn
+ * check-command: test-linearize $file
+ *
+ * check-output-ignore
+ * check-output-excludes: add\\.
+ * check-output-excludes: scast\\.
+ * check-output-excludes: \\<cast\\.
+ * check-output-excludes: ptrcast\\.
+ * check-output-excludes: fpcast\\.
+ * check-output-excludes: sel\\.
+ * check-output-excludes: set\\.
+ */
--- /dev/null	Fri Dec 21 15:00:54 2018
+++ new/usr/src/tools/smatch/src/validation/kill-rewritten-load.c	Fri Dec 21 15:00:54 2018
@@ -0,0 +1,16 @@
+int foo(int i)
+{
+	i++;
+	if (i && 0)
+		i;
+	return 0;
+}
+
+
+/*
+ * check-name: kill-rewritten-load
+ * check-command: test-linearize -Wno-decl $file
+ * check-output-ignore
+ *
+ * check-output-excludes: add\\.
+ */
--- /dev/null	Fri Dec 21 15:00:54 2018
+++ new/usr/src/tools/smatch/src/validation/kill-select.c	Fri Dec 21 15:00:54 2018
@@ -0,0 +1,16 @@
+void foo(int x);
+void foo(int x)
+{
+	unsigned int ui;
+
+	ui = x + 1;
+	ui = ui ? 0 : 1;
+}
+
+/*
+ * check-name: kill-select
+ * check-command: test-linearize $file
+ *
+ * check-output-ignore
+ * check-output-excludes: add\\.
+ */
--- /dev/null	Fri Dec 21 15:00:54 2018
+++ new/usr/src/tools/smatch/src/validation/kill-slice.c	Fri Dec 21 15:00:54 2018
@@ -0,0 +1,19 @@
+struct bar {
+	int x;
+	int y[2];
+};
+struct bar bar(void);
+
+int foo(void)
+{
+	int x = bar().x;
+	return x & 0;
+}
+
+/*
+ * check-name: kill-slice
+ * check-command: test-linearize -Wno-decl $file
+ * check-output-ignore
+ *
+ * check-output-excludes: slice\\.
+ */
--- /dev/null	Fri Dec 21 15:00:54 2018
+++ new/usr/src/tools/smatch/src/validation/kill-store.c	Fri Dec 21 15:00:54 2018
@@ -0,0 +1,16 @@
+void keep(int *p)	 { *p = 0; }
+void kill(int *p, int i) { if (i && 0) *p = 0; }
+void dead(int *p, int i) { int v = i++; if (i && 0) p[v] = 0; }
+
+
+/*
+ * check-name: kill-store
+ * check-command: test-linearize -Wno-decl $file
+ * check-description:
+ *	Check that stores are optimized away but only
+ *	when needed:
+ *	- bb unreachable.
+ *
+ * check-output-ignore
+ * check-output-pattern-1-times: store\\.
+ */
--- /dev/null	Fri Dec 21 15:00:54 2018
+++ new/usr/src/tools/smatch/src/validation/kill-unreachable-phi.c	Fri Dec 21 15:00:54 2018
@@ -0,0 +1,27 @@
+extern char *strcpy (char *__dest, const char *__src);
+
+static void test_menu_iteminfo( void )
+{
+		int ansi = 1;
+		void *init, *string;
+		char initA[]="XYZ";
+		char stringA[0x80];
+		do {
+			if(ansi) {
+				string=stringA;
+				init = initA;
+			}
+			if(ansi)
+				strcpy( string, init );
+		} while( !(ansi = !ansi) );
+}
+/*
+ * check-name: kill-unreachable-phi
+ * check-description:
+ * 	In wine source tests/menu.c
+ * 	Improper killing a phi instruction inside not reachable BB cause
+ * 	dead loop on sparse.
+ *
+ * check-output-ignore
+ *
+ */
--- /dev/null	Fri Dec 21 15:00:55 2018
+++ new/usr/src/tools/smatch/src/validation/label-asm.c	Fri Dec 21 15:00:55 2018
@@ -0,0 +1,12 @@
+#define barrier() __asm__ __volatile__("": : :"memory")
+
+static void f(void)
+{
+	barrier();
+l:
+	barrier();
+}
+/*
+ * check-name: Label followed by __asm__
+ * check-description: Sparse used to parse the __asm__ as modifying the label.
+ */
--- /dev/null	Fri Dec 21 15:00:55 2018
+++ new/usr/src/tools/smatch/src/validation/label-attr.c	Fri Dec 21 15:00:55 2018
@@ -0,0 +1,9 @@
+static int foo(void)
+{
+       return 0;
+rtattr_failure: __attribute__ ((unused))
+       return -1;
+}
+/*
+ * check-name: Label attribute
+ */
--- /dev/null	Fri Dec 21 15:00:55 2018
+++ new/usr/src/tools/smatch/src/validation/label-expr.c	Fri Dec 21 15:00:55 2018
@@ -0,0 +1,17 @@
+int foo(void);
+int foo(void)
+{
+	int r;
+
+	r = ({ label: 1; });
+	return r;
+}
+
+/*
+ * check-name: label-expr
+ * check-command: test-linearize $file
+ * check-output-ignore
+ *
+ * check-output-excludes: ret\\.32\$
+ * check-output-contains: ret\\.32 *\\$1
+ */
--- /dev/null	Fri Dec 21 15:00:55 2018
+++ new/usr/src/tools/smatch/src/validation/label-scope.c	Fri Dec 21 15:00:55 2018
@@ -0,0 +1,12 @@
+static int f(int n)
+{
+	__label__ n;
+n:	return n;
+}
+static int g(int n)
+{
+n:	return n;
+}
+/*
+ * check-name: __label__ scope
+ */
--- /dev/null	Fri Dec 21 15:00:55 2018
+++ new/usr/src/tools/smatch/src/validation/linear/bitfield-init-mask.c	Fri Dec 21 15:00:55 2018
@@ -0,0 +1,27 @@
+struct bfu {
+	unsigned int a:11;
+	unsigned int f:9;
+	unsigned int z:3;
+};
+
+struct bfu bfu_init_00_11(int a)
+{
+	struct bfu bfu = { .a = a, };
+	return bfu;
+}
+
+struct bfu bfu_init_20_23(int a)
+{
+	struct bfu bfu = { .z = a, };
+	return bfu;
+}
+
+/*
+ * check-name: bitfield initializer mask
+ * check-command: test-linearize -fdump-linearize=only -Wno-decl $file
+ * check-output-ignore
+ *
+ * check-output-contains: and\\..*fffff800\$
+ * check-output-contains: shl\\..* \\$20
+ * check-output-contains: and\\..*ff8fffff\$
+ */
--- /dev/null	Fri Dec 21 15:00:55 2018
+++ new/usr/src/tools/smatch/src/validation/linear/bitfield-init-zero.c	Fri Dec 21 15:00:55 2018
@@ -0,0 +1,102 @@
+struct bfu {
+	unsigned int a:11;
+	unsigned int f:9;
+	unsigned int  :2;
+	unsigned int z:3;
+};
+
+struct bfu bfuu_init(unsigned int a)
+{
+	struct bfu bf = { .f = a, };
+	return bf;
+}
+
+struct bfu bfus_init(int a)
+{
+	struct bfu bf = { .f = a, };
+	return bf;
+}
+
+unsigned int bfu_get0(void)
+{
+	struct bfu bf = { };
+	return bf.f;
+}
+
+
+struct bfs {
+	signed int a:11;
+	signed int f:9;
+	signed int  :2;
+	signed int z:3;
+};
+
+struct bfs bfsu_init(unsigned int a)
+{
+	struct bfs bf = { .f = a, };
+	return bf;
+}
+
+struct bfs bfss_init(int a)
+{
+	struct bfs bf = { .f = a, };
+	return bf;
+}
+
+int bfs_get0(void)
+{
+	struct bfs bf = { };
+	return bf.f;
+}
+
+/*
+ * check-name: bitfield implicit init zero
+ * check-command: test-linearize -Wno-decl $file
+ *
+ * check-output-start
+bfuu_init:
+.L0:
+	<entry-point>
+	cast.9      %r2 <- (32) %arg1
+	shl.32      %r4 <- %r2, $11
+	ret.32      %r4
+
+
+bfus_init:
+.L2:
+	<entry-point>
+	scast.9     %r10 <- (32) %arg1
+	shl.32      %r12 <- %r10, $11
+	ret.32      %r12
+
+
+bfu_get0:
+.L4:
+	<entry-point>
+	ret.32      $0
+
+
+bfsu_init:
+.L6:
+	<entry-point>
+	cast.9      %r23 <- (32) %arg1
+	shl.32      %r25 <- %r23, $11
+	ret.32      %r25
+
+
+bfss_init:
+.L8:
+	<entry-point>
+	scast.9     %r31 <- (32) %arg1
+	shl.32      %r33 <- %r31, $11
+	ret.32      %r33
+
+
+bfs_get0:
+.L10:
+	<entry-point>
+	ret.32      $0
+
+
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:00:55 2018
+++ new/usr/src/tools/smatch/src/validation/linear/missing-insn-size.c	Fri Dec 21 15:00:55 2018
@@ -0,0 +1,19 @@
+int foo(int **a);
+int foo(int **a)
+{
+	return **a;
+}
+
+/*
+ * check-name: missing instruction's size
+ * check-description:
+ *	sparse used to have a problem with *all*
+ *	double dereferencing due to missing a
+ *	call to examine_symbol_type(). The symptom
+ *	here is that the inner deref had no type.
+ * check-command: test-linearize $file
+ * check-output-ignore
+ *
+ * check-output-excludes: load\\s
+ * check-output-contains: load\\.
+ */
--- /dev/null	Fri Dec 21 15:00:55 2018
+++ new/usr/src/tools/smatch/src/validation/linear/struct-init-full.c	Fri Dec 21 15:00:55 2018
@@ -0,0 +1,28 @@
+struct s {
+	int a, b, c;
+};
+
+struct s s_init_all(int a)
+{
+	struct s s = { .a = a, .b = 42, .c = 123, };
+	return s;
+}
+
+/*
+ * check-name: struct implicit init zero not needed
+ * check-command: test-linearize -Wno-decl $file
+ * check-known-to-fail
+ *
+ * check-output-start
+s_init_all:
+.L4:
+	<entry-point>
+	store.32    %arg1 -> 0[s]
+	store.32    $42 -> 4[s]
+	store.32    $123 -> 8[s]
+	load.96     %r8 <- 0[s]
+	ret.96      %r8
+
+
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:00:55 2018
+++ new/usr/src/tools/smatch/src/validation/linear/struct-init-partial.c	Fri Dec 21 15:00:55 2018
@@ -0,0 +1,41 @@
+struct s {
+	int a, b, c;
+};
+
+struct s s_init_first(int a)
+{
+	struct s s = { .a = a, };
+	return s;
+}
+
+struct s s_init_third(int a)
+{
+	struct s s = { .c = a, };
+	return s;
+}
+
+/*
+ * check-name: struct implicit init zero needed
+ * check-command: test-linearize -Wno-decl $file
+ *
+ * check-output-start
+s_init_first:
+.L0:
+	<entry-point>
+	store.96    $0 -> 0[s]
+	store.32    %arg1 -> 0[s]
+	load.96     %r2 <- 0[s]
+	ret.96      %r2
+
+
+s_init_third:
+.L2:
+	<entry-point>
+	store.96    $0 -> 0[s]
+	store.32    %arg1 -> 8[s]
+	load.96     %r5 <- 0[s]
+	ret.96      %r5
+
+
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:00:55 2018
+++ new/usr/src/tools/smatch/src/validation/local-label.c	Fri Dec 21 15:00:55 2018
@@ -0,0 +1,11 @@
+void f(unsigned long ip);
+static void g(void)
+{
+       if (1) {
+	     f(({ __label__ x; x: (unsigned long)&&x; }));
+       }
+       f(({ __label__ x; x: (unsigned long)&&x; }));
+}
+/*
+ * check-name: Local label
+ */
--- /dev/null	Fri Dec 21 15:00:55 2018
+++ new/usr/src/tools/smatch/src/validation/logical.c	Fri Dec 21 15:00:55 2018
@@ -0,0 +1,17 @@
+extern int a(void);
+extern int b(void);
+extern int c(void);
+
+static int or(void)
+{
+	return a() || b() || c();
+}
+
+static int and(void)
+{
+	return a() && b() && c();
+}
+/*
+ * check-name: Logical and/or
+ */
+
--- /dev/null	Fri Dec 21 15:00:55 2018
+++ new/usr/src/tools/smatch/src/validation/loop-linearization.c	Fri Dec 21 15:00:55 2018
@@ -0,0 +1,136 @@
+extern int p(int);
+
+static int ffor(void)
+{
+	int i;
+	for (int i = 0; i < 10; i++) {
+		if (!p(i))
+			return 0;
+	}
+	return 1;
+}
+
+static int fwhile(void)
+{
+	int i = 0;
+	while (i < 10) {
+		if (!p(i))
+			return 0;
+		i++;
+	}
+	return 1;
+}
+
+static int fdo(void)
+{
+	int i = 0;
+	do {
+		if (!p(i))
+			return 0;
+	} while (i++ < 10);
+	return 1;
+}
+
+/*
+ * check-name: loop-linearization
+ * check-command: test-linearize $file
+ *
+ * check-output-start
+ffor:
+.L0:
+	<entry-point>
+	phisrc.32   %phi5(i) <- $0
+	br          .L4
+
+.L4:
+	phi.32      %r1(i) <- %phi5(i), %phi6(i)
+	setlt.32    %r2 <- %r1(i), $10
+	cbr         %r2, .L1, .L3
+
+.L1:
+	call.32     %r4 <- p, %r1(i)
+	cbr         %r4, .L2, .L5
+
+.L5:
+	phisrc.32   %phi1(return) <- $0
+	br          .L7
+
+.L2:
+	add.32      %r7 <- %r1(i), $1
+	phisrc.32   %phi6(i) <- %r7
+	br          .L4
+
+.L3:
+	phisrc.32   %phi2(return) <- $1
+	br          .L7
+
+.L7:
+	phi.32      %r5 <- %phi1(return), %phi2(return)
+	ret.32      %r5
+
+
+fwhile:
+.L8:
+	<entry-point>
+	phisrc.32   %phi11(i) <- $0
+	br          .L12
+
+.L12:
+	phi.32      %r8(i) <- %phi11(i), %phi12(i)
+	setlt.32    %r9 <- %r8(i), $10
+	cbr         %r9, .L9, .L11
+
+.L9:
+	call.32     %r11 <- p, %r8(i)
+	cbr         %r11, .L14, .L13
+
+.L13:
+	phisrc.32   %phi7(return) <- $0
+	br          .L15
+
+.L14:
+	add.32      %r14 <- %r8(i), $1
+	phisrc.32   %phi12(i) <- %r14
+	br          .L12
+
+.L11:
+	phisrc.32   %phi8(return) <- $1
+	br          .L15
+
+.L15:
+	phi.32      %r12 <- %phi7(return), %phi8(return)
+	ret.32      %r12
+
+
+fdo:
+.L16:
+	<entry-point>
+	phisrc.32   %phi16(i) <- $0
+	br          .L17
+
+.L17:
+	phi.32      %r15(i) <- %phi16(i), %phi17(i)
+	call.32     %r16 <- p, %r15(i)
+	cbr         %r16, .L18, .L20
+
+.L20:
+	phisrc.32   %phi13(return) <- $0
+	br          .L22
+
+.L18:
+	add.32      %r19 <- %r15(i), $1
+	setlt.32    %r20 <- %r15(i), $10
+	phisrc.32   %phi17(i) <- %r19
+	cbr         %r20, .L17, .L19
+
+.L19:
+	phisrc.32   %phi14(return) <- $1
+	br          .L22
+
+.L22:
+	phi.32      %r17 <- %phi13(return), %phi14(return)
+	ret.32      %r17
+
+
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:00:55 2018
+++ new/usr/src/tools/smatch/src/validation/member_of_typeof.c	Fri Dec 21 15:00:55 2018
@@ -0,0 +1,10 @@
+static struct foo {int x;} v;
+static typeof(v) *p;
+static void bar(void)
+{
+	p->x = 0;
+}
+/*
+ * check-name: Expansion of typeof when dealing with member of struct
+ * check-description: Used to expand SYM_TYPEOF too late
+ */
--- /dev/null	Fri Dec 21 15:00:56 2018
+++ new/usr/src/tools/smatch/src/validation/memops-volatile.c	Fri Dec 21 15:00:56 2018
@@ -0,0 +1,21 @@
+static int foo(volatile int *a, int v)
+{
+	*a = v;
+	return *a;
+}
+
+/*
+ * check-name: memops-volatile
+ * check-command: test-linearize $file
+ *
+ * check-output-start
+foo:
+.L0:
+	<entry-point>
+	store.32    %arg2 -> 0[%arg1]
+	load.32     %r5 <- 0[%arg1]
+	ret.32      %r5
+
+
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:00:56 2018
+++ new/usr/src/tools/smatch/src/validation/missing-ident.c	Fri Dec 21 15:00:56 2018
@@ -0,0 +1,18 @@
+int [2];
+int *;
+int (*);
+int ();
+int;
+struct foo;
+union bar {int x; int y;};
+struct baz {int x, :3, y:2;};
+/*
+ * check-name: handling of identifier-less declarations
+ *
+ * check-error-start
+missing-ident.c:1:8: warning: missing identifier in declaration
+missing-ident.c:2:6: warning: missing identifier in declaration
+missing-ident.c:3:8: warning: missing identifier in declaration
+missing-ident.c:4:7: warning: missing identifier in declaration
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:56 2018
+++ new/usr/src/tools/smatch/src/validation/multi_typedef.c	Fri Dec 21 15:00:56 2018
@@ -0,0 +1,15 @@
+typedef int T, *P;
+static void f(void)
+{
+	unsigned P = 0;
+	unsigned x = P;
+}
+static void g(void)
+{
+	int P = 0;
+	int x = P;
+}
+/*
+ * check-name: typedefs with many declarators
+ * check-description: we didn't recognize P above as a typedef
+ */
--- /dev/null	Fri Dec 21 15:00:56 2018
+++ new/usr/src/tools/smatch/src/validation/nested-declarator.c	Fri Dec 21 15:00:56 2018
@@ -0,0 +1,29 @@
+typedef int T;
+extern void f(int);
+static void g(int x)
+{
+	int (T);
+	T = x;
+	f(T);
+}
+static void h(void)
+{
+	static int [2](T)[3];
+}
+static int [2](*p)[3];
+int i(void (void)(*f));
+int j(int [2](*));
+/*
+ * check-name: nested declarator vs. parameters
+ * check-error-start:
+nested-declarator.c:11:23: warning: missing identifier in declaration
+nested-declarator.c:11:23: error: Expected ; at the end of type declaration
+nested-declarator.c:11:23: error: got (
+nested-declarator.c:13:15: error: Expected ; at the end of type declaration
+nested-declarator.c:13:15: error: got (
+nested-declarator.c:14:18: error: Expected ) in function declarator
+nested-declarator.c:14:18: error: got (
+nested-declarator.c:15:14: error: Expected ) in function declarator
+nested-declarator.c:15:14: error: got (
+ * check-error-end:
+ */
--- /dev/null	Fri Dec 21 15:00:56 2018
+++ new/usr/src/tools/smatch/src/validation/nested-declarator2.c	Fri Dec 21 15:00:56 2018
@@ -0,0 +1,41 @@
+typedef int T;
+extern void f1(int);
+extern void f2(T);
+static void (*f3)(int) = f2;
+static void (*f4)(T) = f1;
+extern void f5(void (int));
+extern void f6(void (T));
+static void z(int x)
+{
+	int (T) = x;
+	f5(f2);
+	f6(f3);
+}
+static void f8();
+static int (x) = 1;
+static void w1(y)
+int y;
+{
+	x = y;
+}
+static void w2(int ());
+static void w3(...);
+static void f9(__attribute__((mode(DI))) T);
+static void w4(int f(x,y));
+static void bad1(__attribute__((mode(DI))) x);
+static int (-bad2);
+static void [2](*bad3);
+/*
+ * check-name: more on handling of ( in direct-declarator
+ * check-error-start:
+nested-declarator2.c:17:1: warning: non-ANSI definition of function 'w1'
+nested-declarator2.c:21:21: warning: non-ANSI function declaration of function '<noident>'
+nested-declarator2.c:22:16: warning: variadic functions must have one named argument
+nested-declarator2.c:24:21: warning: identifier list not in definition
+nested-declarator2.c:25:45: error: don't know how to apply mode to incomplete type
+nested-declarator2.c:26:13: error: Expected ) in nested declarator
+nested-declarator2.c:26:13: error: got -
+nested-declarator2.c:27:16: error: Expected ; at the end of type declaration
+nested-declarator2.c:27:16: error: got (
+ * check-error-end:
+ */
--- /dev/null	Fri Dec 21 15:00:56 2018
+++ new/usr/src/tools/smatch/src/validation/nocast.c	Fri Dec 21 15:00:56 2018
@@ -0,0 +1,197 @@
+#define	__nocast	__attribute__((nocast))
+typedef unsigned long __nocast ulong_nc_t;
+
+extern void use_val(ulong_nc_t);
+extern void use_ptr(ulong_nc_t *);
+
+/* use address */
+static void good_use_address(void)
+{
+	ulong_nc_t t;
+
+	use_ptr(&t);
+}
+
+static ulong_nc_t *good_ret_address(void)
+{
+	static ulong_nc_t t;
+
+	return &t;
+}
+
+static ulong_nc_t good_deref(ulong_nc_t *t)
+{
+	return *t;
+}
+
+/* assign value */
+static ulong_nc_t t;
+static ulong_nc_t good_assign_self = t;
+static unsigned long good_assign_sametype = t;
+
+/* assign pointer */
+static ulong_nc_t *good_ptr = &t;
+static ulong_nc_t *bad_ptr_to = 1UL;
+static unsigned long *bad_ptr_from = &t;
+
+/* arithmetic operation */
+static ulong_nc_t good_arith(ulong_nc_t t, unsigned int n)
+{
+	return t + n;
+}
+
+/* implicit cast to other types */
+static unsigned long good_ret_samecast(ulong_nc_t t)
+{
+	return t;
+}
+static unsigned long long bad_ret_biggercast(ulong_nc_t t)
+{
+	return t;
+}
+static long bad_ret_signcast(ulong_nc_t t)
+{
+	return t;
+}
+static short bad_ret_smallercast(ulong_nc_t t)
+{
+	return t;
+}
+
+static void assign_val(ulong_nc_t t)
+{
+	ulong_nc_t good_c = t;
+	unsigned long good_ul = t;
+	unsigned long long bad_ull = t;
+	long bad_l = t;
+	short bad_i = t;
+}
+
+static void assign_via_ptr(ulong_nc_t *t)
+{
+	ulong_nc_t good_c = *t;
+	unsigned long good_ul = *t;
+	unsigned long long bad_ull = *t;
+	long bad_l = *t;
+	short bad_i = *t;
+}
+
+static void assign_ptr(ulong_nc_t *t)
+{
+	ulong_nc_t *good_same_type = t;
+	unsigned long *bad_mod = t;
+	unsigned long long __nocast *bad_size = t;
+	short __nocast *bad_i = t;
+	long __nocast *bad_l = t;
+}
+
+/* implicit cast to nocast */
+static void implicit_assign_to(void)
+{
+	ulong_nc_t t;
+	unsigned long ul = 1;
+	unsigned short us = 1;
+	unsigned long long ull = 1;
+	long l = 1;
+
+	t = ul;		/* implicit to nocast from same type: OK? */
+	t = us;
+	t = ull;
+	t = l;
+}
+
+static void bad_implicit_arg_to(void)
+{
+	unsigned long ul = 1;
+	unsigned short us = 1;
+	unsigned long long ull = 1;
+	long l = 1;
+
+	use_val(ul);	/* implicit to nocast from same type: OK? */
+	use_val(us);
+	use_val(ull);
+	use_val(l);
+}
+
+/* implicit cast from nocast */
+static unsigned long good_implicit_ret_ul(ulong_nc_t t)
+{
+	return t;	/* implicit to nocast from same type: OK? */
+}
+
+static unsigned short bad_implicit_ret_us(ulong_nc_t t)
+{
+	return t;
+}
+
+static unsigned long long bad_implicit_ret_ull(ulong_nc_t t)
+{
+	return t;
+}
+
+static long bad_implicit_ret_l(ulong_nc_t t)
+{
+	return t;
+}
+
+/* FIXME: explicit cast: should we complain? */
+static ulong_nc_t good_samecast(ulong_nc_t v)
+{
+	return (ulong_nc_t) v;
+}
+
+static ulong_nc_t bad_tocast(unsigned long v)
+{
+	return (ulong_nc_t) v;
+}
+
+static unsigned long bad_fromcast(ulong_nc_t v)
+{
+	return (unsigned long) v;
+}
+
+/*
+ * check-name: nocast.c
+ *
+ * check-error-start
+nocast.c:34:33: warning: incorrect type in initializer (different base types)
+nocast.c:34:33:    expected unsigned long [nocast] [usertype] *static [toplevel] bad_ptr_to
+nocast.c:34:33:    got unsigned long
+nocast.c:34:33: warning: implicit cast to nocast type
+nocast.c:35:39: warning: incorrect type in initializer (different modifiers)
+nocast.c:35:39:    expected unsigned long *static [toplevel] bad_ptr_from
+nocast.c:35:39:    got unsigned long [nocast] *<noident>
+nocast.c:35:39: warning: implicit cast from nocast type
+nocast.c:50:16: warning: implicit cast from nocast type
+nocast.c:54:16: warning: implicit cast from nocast type
+nocast.c:58:16: warning: implicit cast from nocast type
+nocast.c:65:38: warning: implicit cast from nocast type
+nocast.c:66:22: warning: implicit cast from nocast type
+nocast.c:67:23: warning: implicit cast from nocast type
+nocast.c:74:38: warning: implicit cast from nocast type
+nocast.c:75:22: warning: implicit cast from nocast type
+nocast.c:76:23: warning: implicit cast from nocast type
+nocast.c:82:34: warning: incorrect type in initializer (different modifiers)
+nocast.c:82:34:    expected unsigned long *bad_mod
+nocast.c:82:34:    got unsigned long [nocast] [usertype] *t
+nocast.c:82:34: warning: implicit cast from nocast type
+nocast.c:83:49: warning: incorrect type in initializer (different type sizes)
+nocast.c:83:49:    expected unsigned long long [nocast] *bad_size
+nocast.c:83:49:    got unsigned long [nocast] [usertype] *t
+nocast.c:83:49: warning: implicit cast to/from nocast type
+nocast.c:84:33: warning: incorrect type in initializer (different type sizes)
+nocast.c:84:33:    expected short [nocast] *bad_i
+nocast.c:84:33:    got unsigned long [nocast] [usertype] *t
+nocast.c:84:33: warning: implicit cast to/from nocast type
+nocast.c:85:32: warning: implicit cast to/from nocast type
+nocast.c:98:13: warning: implicit cast to nocast type
+nocast.c:99:13: warning: implicit cast to nocast type
+nocast.c:100:13: warning: implicit cast to nocast type
+nocast.c:111:17: warning: implicit cast to nocast type
+nocast.c:112:17: warning: implicit cast to nocast type
+nocast.c:113:17: warning: implicit cast to nocast type
+nocast.c:124:16: warning: implicit cast from nocast type
+nocast.c:129:16: warning: implicit cast from nocast type
+nocast.c:134:16: warning: implicit cast from nocast type
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:56 2018
+++ new/usr/src/tools/smatch/src/validation/noderef.c	Fri Dec 21 15:00:56 2018
@@ -0,0 +1,51 @@
+# define __A	__attribute__((noderef))
+
+struct x {
+	int a;
+	int b;
+};
+
+struct y {
+	int a[2];
+};
+
+static void h(void)
+{
+	char __A *p;
+	char __A * * q1;
+	char * __A * q2;
+	struct x __A *xp;
+	struct x __A x;
+	int __A *q;
+	int __A *r;
+	struct y __A *py;
+	
+	q1 = &p;
+	q2 = &p;	/* This should complain */
+
+	r = &*q;
+	r = q;
+	r = &*(q+1);	/* This should NOT complain */
+	r = q+1;
+
+	r = &xp->a;	/* This should NOT complain */
+	r = &xp->b;
+	r = &(*xp).a;
+	r = &(*xp).b;
+
+	r = &x.a;
+	r = &x.b;
+
+	r = py->a;
+	r = py->a+1;
+	r = &py->a[0];
+}
+/*
+ * check-name: noderef attribute
+ *
+ * check-error-start
+noderef.c:24:12: warning: incorrect type in assignment (different modifiers)
+noderef.c:24:12:    expected char *[noderef] *q2
+noderef.c:24:12:    got char [noderef] **<noident>
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:56 2018
+++ new/usr/src/tools/smatch/src/validation/non-pointer-null.c	Fri Dec 21 15:00:56 2018
@@ -0,0 +1,8 @@
+static void *p = 0;
+/*
+ * check-name: Using plain integer as NULL pointer
+ *
+ * check-error-start
+non-pointer-null.c:1:18: warning: Using plain integer as NULL pointer
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:56 2018
+++ new/usr/src/tools/smatch/src/validation/old-initializer-nowarn.c	Fri Dec 21 15:00:56 2018
@@ -0,0 +1,9 @@
+struct s {
+	int i;
+};
+
+static struct s the_s = { i: 1 };
+/*
+ * check-name: Old initializer with -Wno-old-initializer
+ * check-command: sparse -Wno-old-initializer
+ */
--- /dev/null	Fri Dec 21 15:00:56 2018
+++ new/usr/src/tools/smatch/src/validation/old-initializer.c	Fri Dec 21 15:00:56 2018
@@ -0,0 +1,12 @@
+struct s {
+	int i;
+};
+
+static struct s the_s = { i: 1 };
+/*
+ * check-name: Old initializer
+ *
+ * check-error-start
+old-initializer.c:5:27: warning: obsolete struct initializer, use C99 syntax
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:56 2018
+++ new/usr/src/tools/smatch/src/validation/old-style-definition0.c	Fri Dec 21 15:00:56 2018
@@ -0,0 +1,14 @@
+extern int foo(int a, void *b);
+
+int foo(a, b)
+	int a;
+	void *b;
+{
+	if (b)
+		return a;
+}
+
+/*
+ * check-name: old-stype-definition disabled
+ * check-command: sparse -Wno-old-style-definition $file
+ */
--- /dev/null	Fri Dec 21 15:00:56 2018
+++ new/usr/src/tools/smatch/src/validation/old-style-definition1.c	Fri Dec 21 15:00:56 2018
@@ -0,0 +1,18 @@
+extern int foo(int a, void *b);
+
+int foo(a, b)
+	int a;
+	void *b;
+{
+	if (b)
+		return a;
+}
+
+/*
+ * check-name: old-stype-definition enabled
+ * check-command: sparse -Wold-style-definition $file
+ *
+ * check-error-start
+old-style-definition1.c:4:9: warning: non-ANSI definition of function 'foo'
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:57 2018
+++ new/usr/src/tools/smatch/src/validation/optim/binops-same-args.c	Fri Dec 21 15:00:57 2018
@@ -0,0 +1,49 @@
+typedef unsigned int u32;
+
+int ssub(int a) { return a - a; }
+u32 usub(u32 a) { return a - a; }
+
+int sdiv(int a) { return a / a; }
+u32 udiv(u32 a) { return a / a; }
+int smod(int a) { return a % a; }
+u32 umod(u32 a) { return a % a; }
+
+int seq(int a) { return a == a; }
+int sne(int a) { return a != a; }
+int slt(int a) { return a < a; }
+int sgt(int a) { return a > a; }
+int sle(int a) { return a <= a; }
+int sge(int a) { return a >= a; }
+
+u32 ueq(u32 a) { return a == a; }
+u32 une(u32 a) { return a != a; }
+u32 ult(u32 a) { return a < a; }
+u32 ugt(u32 a) { return a > a; }
+u32 ule(u32 a) { return a <= a; }
+u32 uge(u32 a) { return a >= a; }
+
+u32 xor(u32 a) { return a ^ a; }
+
+u32 ior(u32 a) { return a | a; }
+u32 and(u32 a) { return a & a; }
+
+/*
+ * check-name: double-unop
+ * check-command: test-linearize -Wno-decl $file
+ * check-output-ignore
+ *
+ * check-output-excludes: sub\\.
+ * check-output-contains: divs\\.
+ * check-output-contains: divu\\.
+ * check-output-contains: mods\\.
+ * check-output-contains: modu\\.
+ * check-output-excludes: seteq\\.
+ * check-output-excludes: setne\\.
+ * check-output-excludes: set[gl]t\\.
+ * check-output-excludes: set[gl]e\\.
+ * check-output-excludes: set[ab]\\.
+ * check-output-excludes: set[ab]e\\.
+ * check-output-excludes: xor\\.
+ * check-output-excludes: or\\.
+ * check-output-excludes: and\\.
+ */
--- /dev/null	Fri Dec 21 15:00:57 2018
+++ new/usr/src/tools/smatch/src/validation/optim/bool-context.c	Fri Dec 21 15:00:57 2018
@@ -0,0 +1,12 @@
+#define bool _Bool
+
+bool bool_ior(int a, int b) { return a || b; }
+bool bool_and(int a, int b) { return a && b; }
+
+/*
+ * check-name: bool-context
+ * check-command: test-linearize -Wno-decl $file
+ * check-output-ignore
+ *
+ * check-output-pattern-4-times: setne\\..* %arg[12]
+ */
--- /dev/null	Fri Dec 21 15:00:57 2018
+++ new/usr/src/tools/smatch/src/validation/optim/bool-same-args.c	Fri Dec 21 15:00:57 2018
@@ -0,0 +1,12 @@
+static int ior(int a) { return a || a; }
+static int and(int a) { return a && a; }
+
+/*
+ * check-name: bool-same-args
+ * check-command: test-linearize $file
+ * check-output-ignore
+ *
+ * check-output-excludes: or-bool\\.
+ * check-output-excludes: and-bool\\.
+ * check-output-contains: setne\\.
+ */
--- /dev/null	Fri Dec 21 15:00:57 2018
+++ new/usr/src/tools/smatch/src/validation/optim/bool-simplify.c	Fri Dec 21 15:00:57 2018
@@ -0,0 +1,55 @@
+int and_0(int a)
+{
+	return a && 0;
+}
+
+int and_1(int a)
+{
+	return a && 1;
+}
+
+int or_0(int a)
+{
+	return a || 0;
+}
+
+int or_1(int a)
+{
+	return a || 1;
+}
+
+/*
+ * check-name: bool-simplify
+ * check-command: test-linearize -Wno-decl $file
+ *
+ * check-output-start
+and_0:
+.L0:
+	<entry-point>
+	ret.32      $0
+
+
+and_1:
+.L2:
+	<entry-point>
+	setne.1     %r8 <- %arg1, $0
+	cast.32     %r11 <- (1) %r8
+	ret.32      %r11
+
+
+or_0:
+.L4:
+	<entry-point>
+	setne.1     %r14 <- %arg1, $0
+	cast.32     %r17 <- (1) %r14
+	ret.32      %r17
+
+
+or_1:
+.L6:
+	<entry-point>
+	ret.32      $1
+
+
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:00:57 2018
+++ new/usr/src/tools/smatch/src/validation/optim/cse-commutativity.c	Fri Dec 21 15:00:57 2018
@@ -0,0 +1,22 @@
+static int add(int a, int b) { return (a + b) == (b + a); }
+static int mul(int a, int b) { return (a * b) == (b * a); }
+static int and(int a, int b) { return (a & b) == (b & a); }
+static int ior(int a, int b) { return (a | b) == (b | a); }
+static int xor(int a, int b) { return (a ^ b) == (b ^ a); }
+static int  eq(int a, int b) { return (a == b) == (b == a); }
+static int  ne(int a, int b) { return (a != b) == (b != a); }
+
+
+/*
+ * check-name: cse-commutativity
+ * check-command: test-linearize $file
+ * check-output-ignore
+ *
+ * check-output-excludes: add\\.
+ * check-output-excludes: muls\\.
+ * check-output-excludes: and\\.
+ * check-output-excludes: or\\.
+ * check-output-excludes: xor\\.
+ * check-output-excludes: seteq\\.
+ * check-output-excludes: setne\\.
+ */
--- /dev/null	Fri Dec 21 15:00:57 2018
+++ new/usr/src/tools/smatch/src/validation/optim/cse-dual-compare.c	Fri Dec 21 15:00:57 2018
@@ -0,0 +1,34 @@
+static int eqeq(int a, int b) { return (a == b) == (b == a); }
+static int nene(int a, int b) { return (a != b) == (b != a); }
+
+static int ltgt(int a, int b) { return (a <  b) == (b >  a); }
+static int lege(int a, int b) { return (a <= b) == (b >= a); }
+static int gele(int a, int b) { return (a >= b) == (b <= a); }
+static int gtlt(int a, int b) { return (a >  b) == (b <  a); }
+
+static int eneqne(int a, int b) { return (a == b) == !(b != a); }
+static int enneeq(int a, int b) { return (a != b) == !(b == a); }
+
+static int enltle(int a, int b) { return (a <  b) == !(b <= a); }
+static int enlelt(int a, int b) { return (a <= b) == !(b <  a); }
+static int engegt(int a, int b) { return (a >= b) == !(b >  a); }
+static int engtge(int a, int b) { return (a >  b) == !(b >= a); }
+
+static int neeqne(int a, int b) { return (a == b) != (b != a); }
+static int neneeq(int a, int b) { return (a != b) != (b == a); }
+
+static int neltle(int a, int b) { return (a <  b) != (b <= a); }
+static int nelelt(int a, int b) { return (a <= b) != (b <  a); }
+static int negegt(int a, int b) { return (a >= b) != (b >  a); }
+static int negtge(int a, int b) { return (a >  b) != (b >= a); }
+
+/*
+ * check-name: cse-dual-compare
+ * check-command: test-linearize $file
+ * check-output-ignore
+ * check-known-to-fail
+ *
+ * check-output-excludes: set[gl][et]\\.
+ * check-output-excludes: seteq\\.
+ * check-output-excludes: setne\\.
+ */
--- /dev/null	Fri Dec 21 15:00:57 2018
+++ new/usr/src/tools/smatch/src/validation/optim/double-unop.c	Fri Dec 21 15:00:57 2018
@@ -0,0 +1,15 @@
+typedef unsigned int u32;
+
+u32 unotnot(u32 a) { return ~(~a); }
+int snotnot(int a) { return ~(~a); }
+u32 unegneg(int a) { return -(-a); }
+int snegneg(int a) { return -(-a); }
+
+/*
+ * check-name: double-unop
+ * check-command: test-linearize -Wno-decl $file
+ * check-output-ignore
+ *
+ * check-output-excludes: not\\.
+ * check-output-excludes: neg\\.
+ */
--- /dev/null	Fri Dec 21 15:00:57 2018
+++ new/usr/src/tools/smatch/src/validation/optim/fpcast-nop.c	Fri Dec 21 15:00:57 2018
@@ -0,0 +1,15 @@
+static  float foof( float a) { return ( float) a; }
+static double food(double a) { return (double) a; }
+static long double fool(long double a) { return (long double) a; }
+
+/*
+ * check-name: fpcast-nop
+ * check-description:
+ *	Verify that unneeded casts between same-type
+ *	floats are also optimized away.
+ *
+ * check-command: test-linearize $file
+ * check-output-ignore
+ *
+ * check-output-excludes: fpcast\\.
+ */
--- /dev/null	Fri Dec 21 15:00:57 2018
+++ new/usr/src/tools/smatch/src/validation/optim/muldiv-by-one.c	Fri Dec 21 15:00:57 2018
@@ -0,0 +1,19 @@
+typedef	unsigned int ui;
+typedef	         int si;
+
+si smul1(si a) {  return a * 1; }
+ui umul1(ui a) {  return a * 1; }
+si sdiv1(si a) {  return a / 1; }
+ui udiv1(ui a) {  return a / 1; }
+si smod1(si a) {  return a % 1; }
+ui umod1(ui a) {  return a % 1; }
+
+/*
+ * check-name: muldiv-by-one
+ * check-command: test-linearize -Wno-decl $file
+ * check-output-ignore
+ *
+ * check-output-excludes: mul[us]\\.
+ * check-output-excludes: div[us]\\.
+ * check-output-excludes: mod[us]\\.
+ */
--- /dev/null	Fri Dec 21 15:00:57 2018
+++ new/usr/src/tools/smatch/src/validation/optim/muldiv-by-zero.c	Fri Dec 21 15:00:57 2018
@@ -0,0 +1,13 @@
+typedef	unsigned int ui;
+typedef	         int si;
+
+si smul0(si a) {  return a * 0; }
+ui umul0(ui a) {  return a * 0; }
+
+/*
+ * check-name: muldiv-by-zero
+ * check-command: test-linearize -Wno-decl $file
+ * check-output-ignore
+ *
+ * check-output-excludes: mul[us]\\.
+ */
--- /dev/null	Fri Dec 21 15:00:57 2018
+++ new/usr/src/tools/smatch/src/validation/optim/muldiv-minus-one.c	Fri Dec 21 15:00:57 2018
@@ -0,0 +1,18 @@
+typedef	unsigned int u32;
+
+int smulm1(int a) { return a * -1; }
+u32 umulm1(u32 a) { return a * (u32) -1; }
+int sdivm1(int a) { return a / -1; }
+u32 udivm1(u32 a) { return a / (u32) -1; }
+
+/*
+ * check-name: muldiv-minus-one
+ * check-command: test-linearize -Wno-decl $file
+ * check-output-ignore
+ *
+ * check-output-excludes: mul[us]\\.
+ * check-output-excludes: divs\\.
+ * check-output-contains: neg\\.
+ * check-output-contains: divu\\.
+ * check-output-pattern-3-times: neg\\.
+ */
--- /dev/null	Fri Dec 21 15:00:57 2018
+++ new/usr/src/tools/smatch/src/validation/optim/setcc-setcc.c	Fri Dec 21 15:00:57 2018
@@ -0,0 +1,19 @@
+static _Bool blt(int a, int b)	{ return  (a <  b); }
+static _Bool bnge(int a, int b)	{ return !(a >= b); }
+static _Bool bgt(int a, int b)	{ return  (a >  b); }
+static _Bool bnle(int a, int b)	{ return !(a <= b); }
+static _Bool ble(int a, int b)	{ return  (a <= b); }
+static _Bool bngt(int a, int b)	{ return !(a >  b); }
+static _Bool bge(int a, int b)	{ return  (a >= b); }
+static _Bool bnlt(int a, int b)	{ return !(a <  b); }
+
+/*
+ * check-name: optim/setcc-setcc
+ * check-command: test-linearize $file
+ * check-output-ignore
+ *
+ * check-output-excludes: set..\\.32
+ * check-output-excludes: setne\\.1
+ * check-output-excludes: seteq\\.1
+ * check-output-contains: set[gt][te]\\.1
+ */
--- /dev/null	Fri Dec 21 15:00:57 2018
+++ new/usr/src/tools/smatch/src/validation/optim/setcc-seteq.c	Fri Dec 21 15:00:58 2018
@@ -0,0 +1,13 @@
+static _Bool beq0(int a)	{ return  (a == 0); }
+static _Bool bnotneq0(int a)	{ return !(a != 0); }
+static _Bool bnot(int a)	{ return !a; }
+
+/*
+ * check-name: optim/setcc-seteq
+ * check-command: test-linearize $file
+ * check-output-ignore
+ *
+ * check-output-excludes: set..\\.32
+ * check-output-excludes: setne\\.1
+ * check-output-contains: seteq\\.1
+ */
--- /dev/null	Fri Dec 21 15:00:58 2018
+++ new/usr/src/tools/smatch/src/validation/optim/setcc-setne.c	Fri Dec 21 15:00:58 2018
@@ -0,0 +1,13 @@
+static _Bool bnoteq0(int a)	{ return !(a == 0); }
+static _Bool bne0(int a)	{ return  (a != 0); }
+static _Bool bnotnot(int a)	{ return !!a; }
+
+/*
+ * check-name: optim/setcc-setne
+ * check-command: test-linearize $file
+ * check-output-ignore
+ *
+ * check-output-excludes: set..\\.32
+ * check-output-excludes: seteq\\.1
+ * check-output-contains: setne\\.1
+ */
--- /dev/null	Fri Dec 21 15:00:58 2018
+++ new/usr/src/tools/smatch/src/validation/optim/void-if-convert.c	Fri Dec 21 15:00:58 2018
@@ -0,0 +1,19 @@
+int foo(int a)
+{
+	if (a)
+		return 0;
+	else
+		return 1;
+	return 2;
+}
+
+/*
+ * check-name: Ignore VOID in if-convert
+ * check-command: test-linearize -Wno-decl $file
+ * check-output-ignore
+ *
+ * check-output-excludes: phisrc\\.
+ * check-output-excludes: phi\\.
+ * check-output-excludes: VOID
+ * check-output-contains: seteq\\.
+ */
--- /dev/null	Fri Dec 21 15:00:58 2018
+++ new/usr/src/tools/smatch/src/validation/outer-scope.c	Fri Dec 21 15:00:58 2018
@@ -0,0 +1,16 @@
+#ifndef FOO
+struct st { int len; };
+#define FOO
+#else
+struct st;
+static int test(struct st *s);
+static int test(struct st *s)
+{
+	return s->len;
+}
+#endif
+/*
+ * check-name: There is no scope boundary between global and file scope
+ * check-description: Used to mess scopes with -include
+ * check-command: sparse -include $file $file
+ */
--- /dev/null	Fri Dec 21 15:00:58 2018
+++ new/usr/src/tools/smatch/src/validation/phase2/backslash	Fri Dec 21 15:00:58 2018
@@ -0,0 +1,62 @@
+/*
+ *	'\\' has a special meaning on phase 2 if and only if it is immediately
+ * followed by '\n'.  In any other position it's left alone as any other
+ * character.
+ *
+ * [5.1.1.2(1.2)]:
+ *   Each instance of a backslash character (\) immediately followed by
+ *   a new-line character is deleted, splicing physical source lines to
+ *   form logical source lines.  Only the last backslash on any physical
+ *   source line shall be eligible for being part of such a splice.
+ *   A source file that is not empty shall end in a new-line character,
+ *   which shall not be immediately preceded by a backslash character
+ *   before any such splicing takes place.
+ *
+ * Note that this happens on the phase 2, before we even think of any
+ * tokens.  In other words, splicing is ignorant of and transparent for
+ * the rest of tokenizer.
+ */
+
+#define A(x) #x
+#define B(x) A(x)
+/* This should result in "\a" */
+/* XXX: currently sparse produces "a" */
+/* Partially fixed: now it gives "\\a", which is a separate problem */
+B(\a)
+
+#define C\
+ 1
+/* This should give 1 */
+C
+
+#define D\
+1
+/* And this should give D, since '\n' is removed and we get no whitespace */
+/* XXX: currently sparse produces 1 */
+/* Fixed */
+D
+
+#define E '\\
+a'
+/* This should give '\a' - with no warnings issued */
+/* XXX: currently sparse complains a lot and ends up producing a */
+/* Fixed */
+E
+
+/* This should give nothing */
+/* XXX: currently sparse produces more junk */
+/* Fixed */
+// junk \
+more junk
+
+/* This should also give nothing */
+/* XXX: currently sparse produces / * comment * / */
+/* Fixed */
+/\
+* comment *\
+/
+
+/* And this should complain since final newline should not be eaten by '\\' */
+/* XXX: currently sparse does not notice */
+/* Fixed */
+\
--- /dev/null	Fri Dec 21 15:00:58 2018
+++ new/usr/src/tools/smatch/src/validation/phase3/comments	Fri Dec 21 15:00:58 2018
@@ -0,0 +1,9 @@
+/*
+ *  Each comment should be treated as if it had been a single space.
+ */
+
+/* This should give nothing */
+/* XXX: currently sparse produces Y */
+/* Fixed */
+#define X /*
+ */ Y
--- /dev/null	Fri Dec 21 15:00:58 2018
+++ new/usr/src/tools/smatch/src/validation/pragma-once.c	Fri Dec 21 15:00:58 2018
@@ -0,0 +1,5 @@
+#pragma once
+#include "pragma-once.c"
+/*
+ * check-name: #pragma once
+ */
--- /dev/null	Fri Dec 21 15:00:58 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/counter1.c	Fri Dec 21 15:00:58 2018
@@ -0,0 +1,12 @@
+__COUNTER__
+__COUNTER__
+/*
+ * check-name: __COUNTER__ #1
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+0
+1
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:00:58 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/counter2.c	Fri Dec 21 15:00:58 2018
@@ -0,0 +1,14 @@
+__FILE__ __COUNTER__
+#include <counter2.h>
+__FILE__ __COUNTER__
+/*
+ * check-name: __COUNTER__ #2
+ * check-command: sparse -Ipreprocessor -E $file
+ *
+ * check-output-start
+
+"preprocessor/counter2.c" 0
+"preprocessor/counter2.h" 1
+"preprocessor/counter2.c" 2
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:00:58 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/counter2.h	Fri Dec 21 15:00:58 2018
@@ -0,0 +1,1 @@
+__FILE__ __COUNTER__
--- /dev/null	Fri Dec 21 15:00:58 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/counter3.c	Fri Dec 21 15:00:58 2018
@@ -0,0 +1,14 @@
+/*
+ * check-name: __COUNTER__ #3
+ * check-command: sparse -Ipreprocessor -E preprocessor/counter1.c $file
+ *
+ * check-output-start
+
+0
+1
+"preprocessor/counter2.c" 0
+"preprocessor/counter2.h" 1
+"preprocessor/counter2.c" 2
+ * check-output-end
+ */
+#include "counter2.c"
--- /dev/null	Fri Dec 21 15:00:58 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/dump-macros-empty.c	Fri Dec 21 15:00:58 2018
@@ -0,0 +1,7 @@
+/*
+ * check-name: dump-macros with empty file
+ * check-command: sparse -E -dD empty-file
+ *
+ * check-output-ignore
+check-output-pattern-1-times: #define __CHECKER__ 1
+ */
--- /dev/null	Fri Dec 21 15:00:59 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/dump-macros-multi.c	Fri Dec 21 15:00:59 2018
@@ -0,0 +1,7 @@
+/*
+ * check-name: dump-macros with multiple files
+ * check-command: sparse -E -dD empty-file $file
+ *
+ * check-output-ignore
+check-output-pattern-2-times: #define __CHECKER__ 1
+ */
--- /dev/null	Fri Dec 21 15:00:59 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/dump-macros.c	Fri Dec 21 15:00:59 2018
@@ -0,0 +1,18 @@
+#define ABC abc
+#undef ABC
+
+#define	DEF def
+#undef DEF
+#define DEF xyz
+
+#define NYDEF ydef
+/*
+ * check-name: dump-macros
+ * check-command: sparse -E -dD -DIJK=ijk -UNDEF -UNYDEF $file
+ *
+ * check-output-ignore
+check-output-pattern-1-times: #define __CHECKER__ 1
+check-output-contains: #define IJK ijk
+check-output-contains: #define DEF xyz
+check-output-contains: #define NYDEF ydef
+ */
--- /dev/null	Fri Dec 21 15:00:59 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/early-escape.c	Fri Dec 21 15:00:59 2018
@@ -0,0 +1,22 @@
+#if 0
+"\l"
+#endif
+
+/*
+ * check-description:
+ *	Following the C standard, escape conversion must be
+ *	done in phase 5, just after preprocessing and just
+ *	before string concatenation. So we're not supposed
+ *	to receive a diagnostic for an unknown escape char
+ *	for a token which is excluded by the preprocessor.
+ * check-name: early-escape
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+
+ * check-output-end
+ *
+ * check-error-start
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:59 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/predef-char-bit.c	Fri Dec 21 15:00:59 2018
@@ -0,0 +1,16 @@
+#define TEST_BIT(X, T)	if (__ ## X ## _BIT__  != 8 * sizeof(T)) return 1
+
+int test(void)
+{
+	TEST_BIT(CHAR, char);
+
+	return 0;
+}
+
+/*
+ * check-name: predefined __<type>_BIT__
+ * check-command: test-linearize -Wno-decl $file
+ * check-output-ignore
+ *
+ * check-output-contains: ret\\..*\\$0
+ */
--- /dev/null	Fri Dec 21 15:00:59 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/predef-max.c	Fri Dec 21 15:00:59 2018
@@ -0,0 +1,18 @@
+#define TEST_MAX(X, Z)	if (X != ((~ Z) >> 1))	return 1
+
+int test_max(void)
+{
+	TEST_MAX(__INT_MAX__, 0U);
+	TEST_MAX(__LONG_MAX__, 0UL);
+	TEST_MAX(__LONG_LONG_MAX__, 0ULL);
+
+	return 0;
+}
+
+/*
+ * check-name: predefined __<type>_MAX__
+ * check-command: test-linearize -Wno-decl $file
+ * check-output-ignore
+ *
+ * check-output-contains: ret\\..*\\$0
+ */
--- /dev/null	Fri Dec 21 15:00:59 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/predef-sizeof.c	Fri Dec 21 15:00:59 2018
@@ -0,0 +1,25 @@
+#define TEST(X, T)	if (__SIZEOF_ ## X ## __ != sizeof(T))	return 1
+
+int test_sizeof(void)
+{
+	TEST(SHORT, short);
+	TEST(INT, int);
+	TEST(LONG, long);
+	TEST(LONG_LONG, long long);
+	TEST(INT128, __int128);
+	TEST(SIZE_T, __SIZE_TYPE__);
+	TEST(POINTER, void*);
+	TEST(FLOAT, float);
+	TEST(DOUBLE, double);
+	TEST(LONG_DOUBLE, long double);
+
+	return 0;
+}
+
+/*
+ * check-name: predefined __SIZEOF_<type>__
+ * check-command: test-linearize -Wno-decl $file
+ * check-output-ignore
+ *
+ * check-output-contains: ret\\..*\\$0
+ */
--- /dev/null	Fri Dec 21 15:00:59 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor1.c	Fri Dec 21 15:00:59 2018
@@ -0,0 +1,14 @@
+#define func(x) x
+#define bar func(
+#define foo bar foo
+foo )
+/*
+ * check-name: Preprocessor #1
+ * check-description: Used to cause infinite recursion.
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+foo
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:00:59 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor10.c	Fri Dec 21 15:00:59 2018
@@ -0,0 +1,19 @@
+/* concatenation of 'defi' and 'ned' should result in the same token
+ * we would get if we had 'defined' in the input stream.
+ */
+#define A
+#define B defi ## ned
+#if B(A)
+defined
+#else
+undefined
+#endif
+/*
+ * check-name: Preprocessor #10
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+defined
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:00:59 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor11.c	Fri Dec 21 15:00:59 2018
@@ -0,0 +1,31 @@
+#define A(1) x
+#define B(x
+#define C(x,
+#define D(,)
+#define E(__VA_ARGS__)
+#define F(x+
+#define G(x...,
+#define H(x...,y)
+#define I(...+
+#define J(x,y)
+/*
+ * check-name: Preprocessor #11
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+
+ * check-output-end
+ *
+ * check-error-start
+preprocessor/preprocessor11.c:1:11: error: "1" may not appear in macro parameter list
+preprocessor/preprocessor11.c:2:11: error: missing ')' in macro parameter list
+preprocessor/preprocessor11.c:3:12: error: missing ')' in macro parameter list
+preprocessor/preprocessor11.c:4:11: error: parameter name missing
+preprocessor/preprocessor11.c:5:11: error: __VA_ARGS__ can only appear in the expansion of a C99 variadic macro
+preprocessor/preprocessor11.c:6:12: error: "+" may not appear in macro parameter list
+preprocessor/preprocessor11.c:7:12: error: missing ')' in macro parameter list
+preprocessor/preprocessor11.c:8:12: error: missing ')' in macro parameter list
+preprocessor/preprocessor11.c:9:11: error: missing ')' in macro parameter list
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:59 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor12.c	Fri Dec 21 15:00:59 2018
@@ -0,0 +1,18 @@
+/*
+ * GNU kludge
+ */
+#define A(x,...) x,##__VA_ARGS__
+A(1)
+A(1,2)
+A(1,2,3)
+/*
+ * check-name: Preprocessor #12
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+1
+1,2
+1,2,3
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:00:59 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor13.c	Fri Dec 21 15:00:59 2018
@@ -0,0 +1,23 @@
+/*
+ * GNU kludge, corner case
+ */
+#define A(x,...) x##,##__VA_ARGS__
+A(1)
+A(1,2)
+A(1,2,3)
+/*
+ * check-name: Preprocessor #13
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+1
+1,2
+1,2,3
+ * check-output-end
+ *
+ * check-error-start
+preprocessor/preprocessor13.c:6:1: error: '##' failed: concatenation is not a valid token
+preprocessor/preprocessor13.c:7:1: error: '##' failed: concatenation is not a valid token
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:00:59 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor14.c	Fri Dec 21 15:00:59 2018
@@ -0,0 +1,16 @@
+/*
+ * GNU kludge, another corner case
+ */
+#define A(x,y,...) ,##x##__VA_ARGS__
+A(,1)
+#define B(x,y,...) x##,##__VA_ARGS__
+B(,1)
+/*
+ * check-name: Preprocessor #14
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:00:59 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor15.c	Fri Dec 21 15:01:00 2018
@@ -0,0 +1,16 @@
+#define A defi
+#define B ned
+#define C(x,y) x##y
+#define D(x,y) C(x,y)
+#if D(A,B) B
+D(1,2)
+#endif
+/*
+ * check-name: Preprocessor #15
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+12
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:00 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor16.c	Fri Dec 21 15:01:00 2018
@@ -0,0 +1,30 @@
+#if 0
+/*
+From 6.10.1(5):
+	Each directive's condition is checked in order.  If it evaluates
+	to false (zero), the group it controls is skipped: directives are
+	processed only through the name that determines the directive in
+	order to keep track of the level of nested conditionals; the rest
+	of the directives' preprocessing tokens are ignores, >>as are the
+	other preprocessing tokens in the group<<.
+
+In other words, bogus arguments of directives are silently ignored and
+so are text lines and non-directives (# <something unknown>).  We *do*
+complain about the things like double #else or #elif after #else, since
+they hit before we get to the level of groups.
+*/
+
+#define 1
+#undef 1
+#bullshit
+
+#endif
+/*
+ * check-name: Preprocessor #16
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:00 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor17.c	Fri Dec 21 15:01:00 2018
@@ -0,0 +1,15 @@
+#if 0
+/* these should not warn */
+#ifdef (
+#endif
+#ifndef (
+#endif
+#endif
+/*
+ * check-name: Preprocessor #17
+ * check-command: sparse -E $file
+ * check-output-start
+
+
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:00 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor18.c	Fri Dec 21 15:01:00 2018
@@ -0,0 +1,17 @@
+/* one warning for each, please... */
+#define 1
+#undef 1
+/*
+ * check-name: Preprocessor #18
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+
+ * check-output-end
+ *
+ * check-error-start
+preprocessor/preprocessor18.c:2:2: error: expected identifier to 'define'
+preprocessor/preprocessor18.c:3:2: error: expected identifier to 'undef'
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:01:00 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor19.c	Fri Dec 21 15:01:00 2018
@@ -0,0 +1,18 @@
+/* got burned by that - freed the new definition in the case when we had
+   warned and replaced the old one */
+#define A x
+#define A y
+A
+/*
+ * check-name: Preprocessor #19
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+y
+ * check-output-end
+ * check-error-start
+preprocessor/preprocessor19.c:4:9: warning: preprocessor token A redefined
+preprocessor/preprocessor19.c:3:9: this was the original definition
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:01:00 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor2.c	Fri Dec 21 15:01:00 2018
@@ -0,0 +1,15 @@
+#define TWO a, b
+
+#define UNARY(x) BINARY(x)
+#define BINARY(x, y) x + y
+
+UNARY(TWO)
+/*
+ * check-name: Preprocessor #2
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+a + b
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:00 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor20.c	Fri Dec 21 15:01:00 2018
@@ -0,0 +1,14 @@
+#include "preprocessor20.h"
+#define X
+#define Y
+#include "preprocessor20.h"
+/*
+ * check-name: Preprocessor #20
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+A
+B
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:00 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor20.h	Fri Dec 21 15:01:00 2018
@@ -0,0 +1,6 @@
+#ifdef X
+B
+#endif
+#ifndef Y
+A
+#endif
--- /dev/null	Fri Dec 21 15:01:00 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor21.c	Fri Dec 21 15:01:00 2018
@@ -0,0 +1,16 @@
+#if 1
+#if
+/*
+ * check-name: Preprocessor #21
+ * check-description: This used to hang Sparse.
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+
+ * check-output-end
+ *
+ * check-error-start
+preprocessor/preprocessor21.c:2:2: error: unterminated preprocessor conditional
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:01:00 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor22.c	Fri Dec 21 15:01:00 2018
@@ -0,0 +1,35 @@
+#define CONFIG_FOO 1
+
+#define define_struct(name, fields...) struct fields name;
+
+define_struct(a, {
+#ifdef CONFIG_FOO
+  int b;
+#elif defined(CONFIG_BAR)
+  int c;
+#else
+  int d;
+#endif
+});
+/*
+ * check-name: Preprocessor #22
+ *
+ * check-description: Directives are not allowed within a macro argument list,
+ * although cpp deals with it to treat macro more like C functions.
+ *
+ * check-command: sparse -E $file
+ *
+ * check-error-start
+preprocessor/preprocessor22.c:6:1: error: directive in argument list
+preprocessor/preprocessor22.c:8:1: error: directive in argument list
+preprocessor/preprocessor22.c:10:1: error: directive in argument list
+preprocessor/preprocessor22.c:12:1: error: directive in argument list
+ * check-error-end
+ *
+ * check-output-start
+
+struct {
+int b;
+} a;;
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:00 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor23.c	Fri Dec 21 15:01:00 2018
@@ -0,0 +1,51 @@
+#define H(x,...) ,##x##__VA_ARGS__##,##__VA_ARGS__
+H()
+H(x)
+H(,)
+H(x,)
+H(,x)
+H(x,x)
+#define I(x,...) ,##x##__VA_ARGS__
+I()
+I(x)
+I(,)
+I(x,)
+I(,x)
+I(x,x)
+#define J(...) ,##__VA_ARGS__
+J()
+J(x)
+/*
+ * check-name: Preprocessor #23
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+,
+,x
+,,
+,x,
+,x,x
+,xx,x
+,x
+,
+,x
+,x
+,xx
+,x
+ * check-output-end
+ *
+ * check-error-start
+preprocessor/preprocessor23.c:3:1: error: '##' failed: concatenation is not a valid token
+preprocessor/preprocessor23.c:4:1: error: '##' failed: concatenation is not a valid token
+preprocessor/preprocessor23.c:5:1: error: '##' failed: concatenation is not a valid token
+preprocessor/preprocessor23.c:5:1: error: '##' failed: concatenation is not a valid token
+preprocessor/preprocessor23.c:6:1: error: '##' failed: concatenation is not a valid token
+preprocessor/preprocessor23.c:6:1: error: '##' failed: concatenation is not a valid token
+preprocessor/preprocessor23.c:7:1: error: '##' failed: concatenation is not a valid token
+preprocessor/preprocessor23.c:7:1: error: '##' failed: concatenation is not a valid token
+preprocessor/preprocessor23.c:10:1: error: '##' failed: concatenation is not a valid token
+preprocessor/preprocessor23.c:12:1: error: '##' failed: concatenation is not a valid token
+preprocessor/preprocessor23.c:14:1: error: '##' failed: concatenation is not a valid token
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:01:00 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor3.c	Fri Dec 21 15:01:00 2018
@@ -0,0 +1,32 @@
+/*
+ * Each iteration of the scanning of "SCAN()" re-evaluates the recursive
+ * B->A->B expansion.
+ *
+ * Did I already mention that the C preprocessor language
+ * is a perverse thing?
+ */
+
+#define LP (
+
+#define A() B LP )
+#define B() A LP )
+
+#define SCAN(x) x
+
+A()                     // B ( )
+SCAN( A() )             // A ( )
+SCAN(SCAN( A() ))       // B ( )
+SCAN(SCAN(SCAN( A() ))) // A ( )
+/*
+ * check-name: Preprocessor #3
+ * check-description: Sparse used to get this wrong, outputting A third, not B.
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+B ( )
+A ( )
+B ( )
+A ( )
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:00 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor4.c	Fri Dec 21 15:01:00 2018
@@ -0,0 +1,15 @@
+#define foo bar
+#define mac(x) x(foo)
+
+mac(foo)
+
+/*
+ * check-name: Preprocessor #4
+ * check-description: More examples from the comp.std.c discussion.
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+bar(bar)
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:01 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor5.c	Fri Dec 21 15:01:01 2018
@@ -0,0 +1,14 @@
+#define a a|
+#define b(x) x
+
+b(a)
+/*
+ * check-name: Preprocessor #5
+ * check-description: Yet more examples from comp.std.c.
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+a|
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:01 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor6.c	Fri Dec 21 15:01:01 2018
@@ -0,0 +1,29 @@
+/* We used to get '##' wrong for the kernel.
+ *
+ * It could possibly be argued that the kernel usage is undefined (since the
+ * different sides of the '##' are not proper tokens), but we try to do it
+ * right anyway.
+ *
+ * We used to break up the "003d" into two tokens ('003' and 'd') and then put
+ * the 'o' marker to mark the token 003 as an octal number, resulting in:
+ *
+ *	static char __vendorstr_o03 d [ ] __devinitdata = "Lockheed Martin-Marietta Corp";
+ *
+ * which didn't work, of course.
+ */
+
+#define __devinitdata __attribute__((section(".devinit")))
+
+#define VENDOR( vendor, name ) \
+	static char __vendorstr_##vendor[] __devinitdata = name;
+VENDOR(003d,"Lockheed Martin-Marietta Corp")
+
+/*
+ * check-name: Preprocessor #6
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+static char __vendorstr_003d[] __attribute__((section(".devinit"))) = "Lockheed Martin-Marietta Corp";
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:01 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor7.c	Fri Dec 21 15:01:01 2018
@@ -0,0 +1,14 @@
+#define A(x) C(B, D
+#define D A(1))
+#define C(x,y) E(y)
+#define E(y) #y
+A(2))
+/*
+ * check-name: Preprocessor #7
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+"\"D\""
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:01 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor8.c	Fri Dec 21 15:01:01 2018
@@ -0,0 +1,38 @@
+#define A(x) ## x
+#define B(x) x ##
+#define C(x) x ## ## ##
+#define D(x) x#y
+#define E x#y
+#define F(x,y) x x##y #x y
+#define G a##b
+#define H 1##2
+#define I(x,y,z) x y z
+"A(x)"			: A(x)
+"B(x)"			: B(x)
+"C(x)"			: C(x)
+"D(x)"			: D(x)
+"x#y"			: E
+"ab GH \"G\" 12"	: F(G,H)
+"a ## b"		: I(a,##,b)
+/*
+ * check-name: Preprocessor #8
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+"A(x)" : A(x)
+"B(x)" : B(x)
+"C(x)" : C(x)
+"D(x)" : D(x)
+"x#y" : x#y
+"ab GH \"G\" 12" : ab GH "G" 12
+"a ## b" : a ## b
+ * check-output-end
+ *
+ * check-error-start
+preprocessor/preprocessor8.c:1:14: error: '##' cannot appear at the ends of macro expansion
+preprocessor/preprocessor8.c:2:16: error: '##' cannot appear at the ends of macro expansion
+preprocessor/preprocessor8.c:3:22: error: '##' cannot appear at the ends of macro expansion
+preprocessor/preprocessor8.c:4:15: error: '#' is not followed by a macro parameter
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:01:01 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/preprocessor9.c	Fri Dec 21 15:01:01 2018
@@ -0,0 +1,16 @@
+/* Only # in the input stream marks the beginning of preprocessor command,
+ * and here we get it from macro expansion.
+ */
+#define A # define X 1
+A
+X
+/*
+ * check-name: Preprocessor #9
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+# define X 1
+X
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:01 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/stringify.c	Fri Dec 21 15:01:01 2018
@@ -0,0 +1,29 @@
+#define A(x) #x
+A('a')
+A("a")
+A(a)
+A(\n)
+A('\n')
+A("\n")
+A('"')
+A("a\nb")
+A(L"a\nb")
+A('\12')
+/*
+ * check-name: Preprocessor #14
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+"'a'"
+"\"a\""
+"a"
+"\n"
+"'\\n'"
+"\"\\n\""
+"'\"'"
+"\"a\\nb\""
+"L\"a\\nb\""
+"'\\12'"
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:01 2018
+++ new/usr/src/tools/smatch/src/validation/preprocessor/wide.c	Fri Dec 21 15:01:01 2018
@@ -0,0 +1,15 @@
+#define A(x) L##x
+A('a')
+A("bc")
+/*
+ * check-name: wide char token-pasting
+ * check-description: Used to cause infinite recursion.
+ * check-command: sparse -E $file
+ *
+ * check-output-start
+
+L'a'
+L"bc"
+ * check-output-end
+ */
+
--- /dev/null	Fri Dec 21 15:01:01 2018
+++ new/usr/src/tools/smatch/src/validation/prototype.c	Fri Dec 21 15:01:01 2018
@@ -0,0 +1,6 @@
+static int prototype(void);
+
+/*
+ * check-name: Compile skip function prototype
+ * check-command: sparsec -c $file -o tmp.o
+ */
--- /dev/null	Fri Dec 21 15:01:01 2018
+++ new/usr/src/tools/smatch/src/validation/ptr-inherit.c	Fri Dec 21 15:01:01 2018
@@ -0,0 +1,80 @@
+#define	__user		__attribute__((address_space(1)))
+#define	__noderef	__attribute__((noderef))
+#define	__bitwise	__attribute__((bitwise))
+#define	__nocast	__attribute__((nocast))
+#define	__safe		__attribute__((safe))
+
+
+/* Should be inherited? */
+static void test_const(void)
+{
+	const int o;
+	int *p = &o;			/* check-should-fail */
+}
+
+static void test_volatile(void)
+{
+	volatile int o;
+	int *p = &o;			/* check-should-fail */
+}
+
+static void test_noderef(void)
+{
+	int __noderef o;
+	int *p = &o;			/* check-should-fail */
+}
+
+static void test_bitwise(void)
+{
+	int __bitwise o;
+	int *p = &o;			/* check-should-fail */
+}
+
+static void test_user(void)
+{
+	int __user o;
+	int *p = &o;			/* check-should-fail */
+}
+
+static void test_nocast(void)
+{
+	int __nocast o;
+	int __nocast *p = &o;		/* check-should-pass */
+}
+
+/* Should be ignored? */
+static void test_static(void)
+{
+	/* storage is not inherited */
+	static int o;
+	int *p = &o;			/* check-should-pass */
+}
+
+static void test_tls(void)
+{
+	/* storage is not inherited */
+	static __thread int o;
+	int *p = &o;			/* check-should-pass */
+}
+
+/*
+ * check-name: ptr-inherit.c
+ *
+ * check-error-start
+ptr-inherit.c:12:19: warning: incorrect type in initializer (different modifiers)
+ptr-inherit.c:12:19:    expected int *p
+ptr-inherit.c:12:19:    got int const *<noident>
+ptr-inherit.c:18:19: warning: incorrect type in initializer (different modifiers)
+ptr-inherit.c:18:19:    expected int *p
+ptr-inherit.c:18:19:    got int volatile *<noident>
+ptr-inherit.c:24:19: warning: incorrect type in initializer (different modifiers)
+ptr-inherit.c:24:19:    expected int *p
+ptr-inherit.c:24:19:    got int [noderef] *<noident>
+ptr-inherit.c:30:19: warning: incorrect type in initializer (different base types)
+ptr-inherit.c:30:19:    expected int *p
+ptr-inherit.c:30:19:    got restricted int *<noident>
+ptr-inherit.c:36:19: warning: incorrect type in initializer (different address spaces)
+ptr-inherit.c:36:19:    expected int *p
+ptr-inherit.c:36:19:    got int <asn:1>*<noident>
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:01:01 2018
+++ new/usr/src/tools/smatch/src/validation/pure-function.c	Fri Dec 21 15:01:01 2018
@@ -0,0 +1,16 @@
+
+static __attribute__((__pure__)) int pure1(void)
+{
+	int i = 0;
+	return i;
+}
+
+static __attribute__((__pure__)) void *pure2(void)
+{
+    void *i = (void *)0;
+    return i;
+}
+
+/*
+ * check-name: Pure function attribute
+ */
--- /dev/null	Fri Dec 21 15:01:01 2018
+++ new/usr/src/tools/smatch/src/validation/reserved.c	Fri Dec 21 15:01:01 2018
@@ -0,0 +1,158 @@
+static int (auto);
+static int (break);
+static int (case);
+static int (char);
+static int (const);
+static int (__const);
+static int (__const__);
+static int (continue);
+static int (default);
+static int (do);
+static int (double);
+static int (else);
+static int (enum);
+static int (extern);
+static int (float);
+static int (for);
+static int (goto);
+static int (if);
+static int (inline);
+static int (__inline);
+static int (__inline__);
+static int (int);
+static int (long);
+static int (register);
+static int (restrict);
+static int (__restrict);
+static int (__restrict__);
+static int (return);
+static int (short);
+static int (signed);
+static int (sizeof);
+static int (static);
+static int (struct);
+static int (switch);
+static int (typedef);
+static int (union);
+static int (unsigned);
+static int (void);
+static int (volatile);
+static int (volatile);
+static int (__volatile);
+static int (__volatile__);
+static int (while);
+
+static int (_Alignas);
+static int (_Alignof);
+static int (_Atomic);
+static int (_Bool);
+static int (_Complex);
+static int (_Generic);
+static int (_Imaginary);
+static int (_Noreturn);
+static int (_Static_assert);
+static int (_Thread_local);
+
+// Sparse extensions
+static int (__context__);
+static int (__range__);
+static int (__sizeof_ptr__);
+
+// GCC extensions
+static int (__alignof);
+static int (__alignof__);
+static int (asm);			// not reserved!
+static int (__asm);
+static int (__asm__);
+static int (__label__);
+static int (__thread);
+static int (typeof);
+static int (__typeof);
+static int (__typeof__);
+
+static int (__int128);
+static int (__int128_t);
+static int (__uint128_t);
+
+static int (__builtin_ms_va_list);
+static int (__builtin_offsetof);
+static int (__builtin_types_compatible_p);
+static int (__builtin_va_list);
+
+/*
+ * check-name: const et.al. are reserved identifiers
+ * check-error-start:
+reserved.c:1:12: error: Trying to use reserved word 'auto' as identifier
+reserved.c:2:12: error: Trying to use reserved word 'break' as identifier
+reserved.c:3:12: error: Trying to use reserved word 'case' as identifier
+reserved.c:4:12: error: Trying to use reserved word 'char' as identifier
+reserved.c:5:12: error: Trying to use reserved word 'const' as identifier
+reserved.c:6:12: error: Trying to use reserved word '__const' as identifier
+reserved.c:7:12: error: Trying to use reserved word '__const__' as identifier
+reserved.c:8:12: error: Trying to use reserved word 'continue' as identifier
+reserved.c:9:12: error: Trying to use reserved word 'default' as identifier
+reserved.c:10:12: error: Trying to use reserved word 'do' as identifier
+reserved.c:11:12: error: Trying to use reserved word 'double' as identifier
+reserved.c:12:12: error: Trying to use reserved word 'else' as identifier
+reserved.c:13:12: error: Trying to use reserved word 'enum' as identifier
+reserved.c:14:12: error: Trying to use reserved word 'extern' as identifier
+reserved.c:15:12: error: Trying to use reserved word 'float' as identifier
+reserved.c:16:12: error: Trying to use reserved word 'for' as identifier
+reserved.c:17:12: error: Trying to use reserved word 'goto' as identifier
+reserved.c:18:12: error: Trying to use reserved word 'if' as identifier
+reserved.c:19:12: error: Trying to use reserved word 'inline' as identifier
+reserved.c:20:12: error: Trying to use reserved word '__inline' as identifier
+reserved.c:21:12: error: Trying to use reserved word '__inline__' as identifier
+reserved.c:22:12: error: Trying to use reserved word 'int' as identifier
+reserved.c:23:12: error: Trying to use reserved word 'long' as identifier
+reserved.c:24:12: error: Trying to use reserved word 'register' as identifier
+reserved.c:25:12: error: Trying to use reserved word 'restrict' as identifier
+reserved.c:26:12: error: Trying to use reserved word '__restrict' as identifier
+reserved.c:27:12: error: Trying to use reserved word '__restrict__' as identifier
+reserved.c:28:12: error: Trying to use reserved word 'return' as identifier
+reserved.c:29:12: error: Trying to use reserved word 'short' as identifier
+reserved.c:30:12: error: Trying to use reserved word 'signed' as identifier
+reserved.c:31:12: error: Trying to use reserved word 'sizeof' as identifier
+reserved.c:32:12: error: Trying to use reserved word 'static' as identifier
+reserved.c:33:12: error: Trying to use reserved word 'struct' as identifier
+reserved.c:34:12: error: Trying to use reserved word 'switch' as identifier
+reserved.c:35:12: error: Trying to use reserved word 'typedef' as identifier
+reserved.c:36:12: error: Trying to use reserved word 'union' as identifier
+reserved.c:37:12: error: Trying to use reserved word 'unsigned' as identifier
+reserved.c:38:12: error: Trying to use reserved word 'void' as identifier
+reserved.c:39:12: error: Trying to use reserved word 'volatile' as identifier
+reserved.c:40:12: error: Trying to use reserved word 'volatile' as identifier
+reserved.c:41:12: error: Trying to use reserved word '__volatile' as identifier
+reserved.c:42:12: error: Trying to use reserved word '__volatile__' as identifier
+reserved.c:43:12: error: Trying to use reserved word 'while' as identifier
+reserved.c:45:12: error: Trying to use reserved word '_Alignas' as identifier
+reserved.c:46:12: error: Trying to use reserved word '_Alignof' as identifier
+reserved.c:47:12: error: Trying to use reserved word '_Atomic' as identifier
+reserved.c:48:12: error: Trying to use reserved word '_Bool' as identifier
+reserved.c:49:12: error: Trying to use reserved word '_Complex' as identifier
+reserved.c:50:12: error: Trying to use reserved word '_Generic' as identifier
+reserved.c:51:12: error: Trying to use reserved word '_Imaginary' as identifier
+reserved.c:52:12: error: Trying to use reserved word '_Noreturn' as identifier
+reserved.c:53:12: error: Trying to use reserved word '_Static_assert' as identifier
+reserved.c:54:12: error: Trying to use reserved word '_Thread_local' as identifier
+reserved.c:57:12: error: Trying to use reserved word '__context__' as identifier
+reserved.c:58:12: error: Trying to use reserved word '__range__' as identifier
+reserved.c:59:12: error: Trying to use reserved word '__sizeof_ptr__' as identifier
+reserved.c:62:12: error: Trying to use reserved word '__alignof' as identifier
+reserved.c:63:12: error: Trying to use reserved word '__alignof__' as identifier
+reserved.c:65:12: error: Trying to use reserved word '__asm' as identifier
+reserved.c:66:12: error: Trying to use reserved word '__asm__' as identifier
+reserved.c:67:12: error: Trying to use reserved word '__label__' as identifier
+reserved.c:68:12: error: Trying to use reserved word '__thread' as identifier
+reserved.c:69:12: error: Trying to use reserved word 'typeof' as identifier
+reserved.c:70:12: error: Trying to use reserved word '__typeof' as identifier
+reserved.c:71:12: error: Trying to use reserved word '__typeof__' as identifier
+reserved.c:73:12: error: Trying to use reserved word '__int128' as identifier
+reserved.c:74:12: error: Trying to use reserved word '__int128_t' as identifier
+reserved.c:75:12: error: Trying to use reserved word '__uint128_t' as identifier
+reserved.c:77:12: error: Trying to use reserved word '__builtin_ms_va_list' as identifier
+reserved.c:78:12: error: Trying to use reserved word '__builtin_offsetof' as identifier
+reserved.c:79:12: error: Trying to use reserved word '__builtin_types_compatible_p' as identifier
+reserved.c:80:12: error: Trying to use reserved word '__builtin_va_list' as identifier
+ * check-error-end:
+ */
--- /dev/null	Fri Dec 21 15:01:01 2018
+++ new/usr/src/tools/smatch/src/validation/restrict-array.c	Fri Dec 21 15:01:01 2018
@@ -0,0 +1,37 @@
+#define __restrict_arr __restrict
+
+struct aiocb64;
+struct sigevent;
+
+extern int lio_listio64 (int __mode,
+			 struct aiocb64 *__const __list[__restrict_arr],
+			 int __nent, struct sigevent *__restrict __sig);
+
+#undef __restrict_arr
+#define __restrict_arr __restrict__
+
+struct gaicb;
+
+extern int getaddrinfo_a (int __mode, struct gaicb *__list[__restrict_arr],
+			  int __ent, struct sigevent *__restrict __sig);
+
+#undef __restrict_arr
+#define __restrict_arr restrict
+
+typedef struct re_pattern_buffer regex_t;
+typedef int regoff_t;
+typedef struct
+{
+  regoff_t rm_so;  /* Byte offset from string's start to substring's start.  */
+  regoff_t rm_eo;  /* Byte offset from string's start to substring's end.  */
+} regmatch_t;
+typedef unsigned long int size_t;
+
+extern int regexec (const regex_t *__restrict __preg,
+		    const char *__restrict __string, size_t __nmatch,
+		    regmatch_t __pmatch[__restrict_arr],
+		    int __eflags);
+
+/*
+ * check-name: restrict array attribute
+ */
--- /dev/null	Fri Dec 21 15:01:02 2018
+++ new/usr/src/tools/smatch/src/validation/restricted-typeof.c	Fri Dec 21 15:01:02 2018
@@ -0,0 +1,8 @@
+typedef unsigned __attribute__((bitwise)) A;
+static A x;
+static __typeof__(x) y;
+static A *p = &y;
+/*
+ * check-name: typeof with bitwise types
+ * check-command: sparse -Wbitwise $file
+ */
--- /dev/null	Fri Dec 21 15:01:02 2018
+++ new/usr/src/tools/smatch/src/validation/sizeof-bool.c	Fri Dec 21 15:01:02 2018
@@ -0,0 +1,13 @@
+static int a(void)
+{
+	return sizeof(_Bool);
+}
+/*
+ * check-name: sizeof(_Bool) is valid
+ * check-description: sizeof(_Bool) was rejected because _Bool is not an even
+ * number of bytes
+ * check-command: sparse -Wsizeof-bool $file
+ * check-error-start
+sizeof-bool.c:3:16: warning: expression using sizeof bool
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:01:02 2018
+++ new/usr/src/tools/smatch/src/validation/sizeof-compound-postfix.c	Fri Dec 21 15:01:02 2018
@@ -0,0 +1,8 @@
+struct foo {int x, y;};
+static int a(void)
+{
+	return sizeof (struct foo){0,1}.y;
+}
+/*
+ * check-name: Handling of sizeof compound-literal . member
+ */
--- /dev/null	Fri Dec 21 15:01:02 2018
+++ new/usr/src/tools/smatch/src/validation/sizeof-void.c	Fri Dec 21 15:01:02 2018
@@ -0,0 +1,44 @@
+#define is_constexpr(x) \
+	(sizeof(int) == sizeof(*(8 ? ((void *)((long)(x) * 0l)) : (int *)8)))
+
+static int test(void)
+{
+	unsigned int s = 0, i = 0;
+	void *ptr = &i;
+
+	// OK
+	s += sizeof i;
+	s += sizeof &i;
+	s += sizeof ptr;
+	s += sizeof &ptr;
+
+	// KO
+	s += sizeof(void);
+	s += sizeof *ptr;
+	s += is_constexpr(ptr++);
+	s += is_constexpr((i++, 1));
+	s += is_constexpr(sizeof *ptr);
+	s += is_constexpr(ptr + 1);
+	s += is_constexpr(&ptr + 1);
+	s += is_constexpr(*(((char *)&ptr) + 1));
+
+	return s;
+}
+
+/*
+ * check-name: sizeof(void) is valid
+ * check-description: sizeof(void) was rejected because void is an incomplete
+ * type
+ * check-command: sparse -Wpointer-arith $file
+ *
+ * check-error-start
+sizeof-void.c:16:14: warning: expression using sizeof(void)
+sizeof-void.c:17:14: warning: expression using sizeof(void)
+sizeof-void.c:18:14: warning: expression using sizeof(void)
+sizeof-void.c:19:14: warning: expression using sizeof(void)
+sizeof-void.c:20:14: warning: expression using sizeof(void)
+sizeof-void.c:21:14: warning: expression using sizeof(void)
+sizeof-void.c:22:14: warning: expression using sizeof(void)
+sizeof-void.c:23:14: warning: expression using sizeof(void)
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:01:02 2018
+++ new/usr/src/tools/smatch/src/validation/sm_WtoA.c	Fri Dec 21 15:01:02 2018
@@ -0,0 +1,29 @@
+void wwww();
+void wwwA();
+
+void xxxW (void)
+{
+	wwwA();
+	www();
+}
+
+void DRAW (void)
+{
+	wwwA();
+}
+
+void xxxA (void)
+{
+	wwwA();
+	www();
+}
+
+
+/*
+ * check-name: Cross calls WtoA
+ * check-command: smatch -p=wine sm_WtoA.c
+ *
+ * check-output-start
+sm_WtoA.c:6 xxxW() warn: WtoA call 'wwwA()'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:02 2018
+++ new/usr/src/tools/smatch/src/validation/sm_absolute1.c	Fri Dec 21 15:01:02 2018
@@ -0,0 +1,20 @@
+#include "check_debug.h"
+
+char x;
+int y;
+int func(void)
+{
+	y = x;
+	__smatch_absolute_min(y);
+	__smatch_absolute_max(y);
+}
+
+/*
+ * check-name: smatch: absolute #1
+ * check-command: smatch -I.. sm_absolute1.c
+ *
+ * check-output-start
+sm_absolute1.c:8 func() absolute min: y = (-128)
+sm_absolute1.c:9 func() absolute max: y = 127
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:02 2018
+++ new/usr/src/tools/smatch/src/validation/sm_absolute2.c	Fri Dec 21 15:01:02 2018
@@ -0,0 +1,34 @@
+#include "check_debug.h"
+
+static int my_var;
+
+int x;
+int func(int *p)
+{
+	unsigned int a = -1;
+
+	x = a;
+	__smatch_absolute_min(a);
+	__smatch_absolute_max(a);
+	__smatch_absolute_min(x);
+	__smatch_absolute_max(x);
+	__smatch_implied(a);
+	__smatch_implied(x);
+	__smatch_sval_info(a);
+	__smatch_sval_info(x);
+}
+/*
+ * check-name: smatch: absolute #2
+ * check-command: smatch -I.. sm_absolute2.c
+ *
+ * check-output-start
+sm_absolute2.c:11 func() absolute min: a = u32max
+sm_absolute2.c:12 func() absolute max: a = u32max
+sm_absolute2.c:13 func() absolute min: x = (-1)
+sm_absolute2.c:14 func() absolute max: x = (-1)
+sm_absolute2.c:15 func() implied: a = 'u32max'
+sm_absolute2.c:16 func() implied: x = '(-1)'
+sm_absolute2.c:17 func() implied: a u32 ->value = ffffffff
+sm_absolute2.c:18 func() implied: x s32 ->value = ffffffffffffffff
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:02 2018
+++ new/usr/src/tools/smatch/src/validation/sm_array_overflow.c	Fri Dec 21 15:01:02 2018
@@ -0,0 +1,50 @@
+int a[] = {1, 2, 3, 4};
+char *b = "abc";
+char c[4];
+char d[4] = "";
+
+int x;
+static int options_write(void)
+{
+	int i;
+	char *str = b;
+	char *str2 = "123";
+	char *str3;
+	char *str4;
+	char *str5;
+	unsigned int j = 4;
+
+	str3 = str2;
+	str4 = str;
+	if (x)
+		str5 = "asdf";
+	else
+		str5 = "aa";
+
+	for (i = 0; i < 4 && frob(); i++)
+		;
+	a[i] = 42;
+	b[i] = '\0';
+	c[i] = '\0';
+	str[j] = '\0';
+	str2[j] = '\0';
+	str3[j] = '\0';
+	str4[j] = '\0';
+	str5[j] = '\0';
+	d[j] = '\0';
+}
+/*
+ * check-name: smatch array check
+ * check-command: smatch --spammy sm_array_overflow.c
+ *
+ * check-output-start
+sm_array_overflow.c:26 options_write() error: buffer overflow 'a' 4 <= 4
+sm_array_overflow.c:27 options_write() error: buffer overflow 'b' 4 <= 4
+sm_array_overflow.c:28 options_write() error: buffer overflow 'c' 4 <= 4
+sm_array_overflow.c:29 options_write() error: buffer overflow 'str' 4 <= 4
+sm_array_overflow.c:30 options_write() error: buffer overflow 'str2' 4 <= 4
+sm_array_overflow.c:31 options_write() error: buffer overflow 'str3' 4 <= 4
+sm_array_overflow.c:32 options_write() error: buffer overflow 'str4' 4 <= 4
+sm_array_overflow.c:34 options_write() error: buffer overflow 'd' 4 <= 4
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:02 2018
+++ new/usr/src/tools/smatch/src/validation/sm_array_overflow2.c	Fri Dec 21 15:01:02 2018
@@ -0,0 +1,28 @@
+#include <stdio.h>
+
+#define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0]))
+
+int a[] = {1, 2, 3, 4};
+int b[] = {
+	[3] = 1,
+};
+
+int x;
+int main(void)
+{
+	if (x < ARRAY_SIZE(a))
+		a[x] = 1;
+	if (x < ARRAY_SIZE(b))
+		b[x] = 1;
+	if (x < ARRAY_SIZE(b))
+		b[4] = 1;
+	printf("%d\n", ARRAY_SIZE(b));
+}
+/*
+ * check-name: smatch indexed array check
+ * check-command: smatch sm_array_overflow2.c
+ *
+ * check-output-start
+sm_array_overflow2.c:18 main() error: buffer overflow 'b' 4 <= 4
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:02 2018
+++ new/usr/src/tools/smatch/src/validation/sm_array_overflow3.c	Fri Dec 21 15:01:02 2018
@@ -0,0 +1,23 @@
+#include <stdio.h>
+
+#define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0]))
+
+int a[] = {1, 2, 3, 4};
+
+int main(void)
+{
+	int *p;
+
+	for (p = a; p < &a[ARRAY_SIZE(a)]; p++)
+		printf("%d\n", *p);
+	p = &a[5];
+	return 0;
+}
+/*
+ * check-name: smatch array check #3
+ * check-command: smatch sm_array_overflow3.c
+ *
+ * check-output-start
+sm_array_overflow3.c:13 main() error: buffer overflow 'a' 4 <= 5
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:02 2018
+++ new/usr/src/tools/smatch/src/validation/sm_array_overflow4.c	Fri Dec 21 15:01:02 2018
@@ -0,0 +1,42 @@
+#include <stdio.h>
+#include <string.h>
+
+#define ARRAY_SIZE(x) (sizeof(x)/sizeof((x)[0]))
+
+long long a[] = {1, 2};
+
+int main(char *arg0)
+{
+	short *s = a;
+	short *s2 = (&(a));
+	char buf[4], buf2[4];
+	int i;
+
+	printf("%d\n", s[1]);
+	printf("%d\n", s[2]);
+	printf("%d\n", s[3]);
+	printf("%d\n", s[4]);
+	printf("%d\n", s[5]);
+	printf("%d\n", s[6]);
+	printf("%d\n", s[7]);
+	printf("%d\n", s[8]);
+	printf("%d\n", s2[8]);
+	printf("%d\n", ((short *)a)[6]);
+	printf("%d\n", ((short *)a)[8]);
+	strcpy(buf, "1234");
+	strcpy(buf2, arg0);
+
+	return 0;
+}
+/*
+ * check-name: smatch overflow check #4
+ * check-command: smatch --spammy sm_array_overflow4.c
+ *
+ * check-output-start
+sm_array_overflow4.c:22 main() error: buffer overflow 's' 8 <= 8
+sm_array_overflow4.c:23 main() error: buffer overflow 's2' 8 <= 8
+sm_array_overflow4.c:25 main() error: buffer overflow 'a' 8 <= 8
+sm_array_overflow4.c:26 main() error: strcpy() '"1234"' too large for 'buf' (5 vs 4)
+sm_array_overflow4.c:27 main() warn: strcpy() 'arg0' of unknown size might be too large for 'buf2'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:02 2018
+++ new/usr/src/tools/smatch/src/validation/sm_array_overflow5.c	Fri Dec 21 15:01:02 2018
@@ -0,0 +1,32 @@
+#include <stdio.h>
+#include <string.h>
+#include "check_debug.h"
+
+void *kmalloc(int size, int mask);
+
+struct foo {
+	int x, y, z;
+	int buf[0];
+};
+
+int main(void)
+{
+	struct foo *p;
+
+	p = kmalloc(sizeof(*p) + 100, 0);
+	if (!p)
+		return -12;
+	__smatch_buf_size(p->buf);
+
+	return 0;
+}
+
+
+/*
+ * check-name: smatch: overflow check #5
+ * check-command: smatch -p=kernel -I.. sm_array_overflow5.c
+ *
+ * check-output-start
+sm_array_overflow5.c:19 main() buf size: 'p->buf' 25 elements, 100 bytes
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:02 2018
+++ new/usr/src/tools/smatch/src/validation/sm_bitwise1.c	Fri Dec 21 15:01:03 2018
@@ -0,0 +1,22 @@
+#include "check_debug.h"
+
+unsigned int x;
+void test(void)
+{
+	__smatch_implied(x & 0x1);
+	__smatch_implied(x & 0x2);
+	__smatch_implied(x & ~(0xffU));
+	__smatch_implied(x & ~(0xff));
+}
+
+/*
+ * check-name: smatch bitwise #1
+ * check-command: smatch -I.. sm_bitwise1.c
+ *
+ * check-output-start
+sm_bitwise1.c:6 test() implied: x & 1 = '0-1'
+sm_bitwise1.c:7 test() implied: x & 2 = '0,2'
+sm_bitwise1.c:8 test() implied: x & ~(255) = '0,256-4294967040'
+sm_bitwise1.c:9 test() implied: x & ~(255) = '0-4294967040'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:03 2018
+++ new/usr/src/tools/smatch/src/validation/sm_bitwise2.c	Fri Dec 21 15:01:03 2018
@@ -0,0 +1,22 @@
+#include "check_debug.h"
+
+unsigned int x;
+int y;
+void test(void)
+{
+	if (x & 0x1)
+		__smatch_implied(x);
+	if (y & 0x4)
+		__smatch_implied(y);
+
+}
+
+/*
+ * check-name: smatch bitwise #2
+ * check-command: smatch -I.. sm_bitwise2.c
+ *
+ * check-output-start
+sm_bitwise2.c:8 test() implied: x = '1-u32max'
+sm_bitwise2.c:10 test() implied: y = 's32min-(-1),4-s32max'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:03 2018
+++ new/usr/src/tools/smatch/src/validation/sm_buf_size1.c	Fri Dec 21 15:01:03 2018
@@ -0,0 +1,26 @@
+#include "check_debug.h"
+
+void func(void)
+{
+	int a[4];
+	char b[4];
+	char *c = (char *)a;
+	int *d = (int *)b;
+
+	__smatch_buf_size(a);
+	__smatch_buf_size(b);
+	__smatch_buf_size(c);
+	__smatch_buf_size(d);
+}
+
+/*
+ * check-name: smatch buf size #1
+ * check-command: smatch -I.. sm_buf_size1.c
+ *
+ * check-output-start
+sm_buf_size1.c:10 func() buf size: 'a' 4 elements, 16 bytes
+sm_buf_size1.c:11 func() buf size: 'b' 4 elements, 4 bytes
+sm_buf_size1.c:12 func() buf size: 'c' 16 elements, 16 bytes
+sm_buf_size1.c:13 func() buf size: 'd' 1 elements, 4 bytes
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:03 2018
+++ new/usr/src/tools/smatch/src/validation/sm_buf_size2.c	Fri Dec 21 15:01:03 2018
@@ -0,0 +1,28 @@
+#include "check_debug.h"
+
+void *malloc(int);
+
+void func(void)
+{
+	int *a;
+	short *b;
+	long long *c;
+
+	a = malloc(sizeof(int) * 4);
+	b = a;
+	c = b;
+	__smatch_buf_size(a);
+	__smatch_buf_size(b);
+	__smatch_buf_size(c);
+}
+
+/*
+ * check-name: smatch buf size #2
+ * check-command: smatch -I.. sm_buf_size2.c
+ *
+ * check-output-start
+sm_buf_size2.c:14 func() buf size: 'a' 4 elements, 16 bytes
+sm_buf_size2.c:15 func() buf size: 'b' 8 elements, 16 bytes
+sm_buf_size2.c:16 func() buf size: 'c' 2 elements, 16 bytes
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:03 2018
+++ new/usr/src/tools/smatch/src/validation/sm_buf_size3.c	Fri Dec 21 15:01:03 2018
@@ -0,0 +1,22 @@
+#include "check_debug.h"
+
+void *malloc(int);
+
+void func(void)
+{
+	char *a;
+
+	a = malloc(sizeof(int) * 4);
+	__smatch_buf_size(a);
+	__smatch_buf_size((int *)a);
+}
+
+/*
+ * check-name: smatch buf size #3
+ * check-command: smatch -I.. sm_buf_size3.c
+ *
+ * check-output-start
+sm_buf_size3.c:10 func() buf size: 'a' 16 elements, 16 bytes
+sm_buf_size3.c:11 func() buf size: 'a' 4 elements, 16 bytes
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:03 2018
+++ new/usr/src/tools/smatch/src/validation/sm_buf_size4.c	Fri Dec 21 15:01:03 2018
@@ -0,0 +1,24 @@
+#include "check_debug.h"
+
+long long a[] = {1, 2};
+int b[] = {3, 4};
+
+int main(char *arg0)
+{
+	short *s = a;
+
+	__smatch_buf_size(a);
+	__smatch_buf_size(b);
+	__smatch_buf_size(s);
+	return 0;
+}
+/*
+ * check-name: smatch buf size #4
+ * check-command: smatch -I.. sm_buf_size4.c
+ *
+ * check-output-start
+sm_buf_size4.c:10 main() buf size: 'a' 2 elements, 16 bytes
+sm_buf_size4.c:11 main() buf size: 'b' 2 elements, 8 bytes
+sm_buf_size4.c:12 main() buf size: 's' 8 elements, 16 bytes
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:03 2018
+++ new/usr/src/tools/smatch/src/validation/sm_buf_size5.c	Fri Dec 21 15:01:03 2018
@@ -0,0 +1,29 @@
+#include "check_debug.h"
+
+struct foo {
+	char buf[42];
+	int x[4];
+};
+
+int function(void)
+{
+	struct foo foo;
+
+	__smatch_buf_size(&foo);
+	__smatch_buf_size(&(foo.buf[0]));
+	__smatch_buf_size(&foo.x[0]);
+	__smatch_buf_size(&foo.x[1]);
+
+	return 0;
+}
+/*
+ * check-name: smatch buf size #5
+ * check-command: smatch --spammy -I.. sm_buf_size5.c
+ *
+ * check-output-start
+sm_buf_size5.c:12 function() buf size: '&foo' 1 elements, 60 bytes
+sm_buf_size5.c:13 function() buf size: '&(foo.buf[0])' 42 elements, 42 bytes
+sm_buf_size5.c:14 function() buf size: '&foo.x[0]' 4 elements, 16 bytes
+sm_buf_size5.c:15 function() buf size: '&foo.x[1]' 3 elements, 12 bytes
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:03 2018
+++ new/usr/src/tools/smatch/src/validation/sm_buf_size6.c	Fri Dec 21 15:01:03 2018
@@ -0,0 +1,31 @@
+#include "check_debug.h"
+
+void *malloc(int size);
+
+int function(void)
+{
+	int *p;
+	int array[1000];
+
+	p = malloc(4000);
+
+	__smatch_buf_size(p);
+	__smatch_buf_size(&p[0]);
+	__smatch_buf_size(array);
+	__smatch_buf_size(&array);
+	__smatch_buf_size(&array[0]);
+
+	return 0;
+}
+/*
+ * check-name: smatch buf size #6
+ * check-command: smatch --spammy -I.. sm_buf_size6.c
+ *
+ * check-output-start
+sm_buf_size6.c:12 function() buf size: 'p' 1000 elements, 4000 bytes
+sm_buf_size6.c:13 function() buf size: '&p[0]' 1000 elements, 4000 bytes
+sm_buf_size6.c:14 function() buf size: 'array' 1000 elements, 4000 bytes
+sm_buf_size6.c:15 function() buf size: '&array' 1000 elements, 4000 bytes
+sm_buf_size6.c:16 function() buf size: '&array[0]' 1000 elements, 4000 bytes
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:03 2018
+++ new/usr/src/tools/smatch/src/validation/sm_buf_size7.c	Fri Dec 21 15:01:03 2018
@@ -0,0 +1,26 @@
+#include "check_debug.h"
+
+int test(void)
+{
+	int a[] = { [1] = 2 };
+	int b[] = { 1, 2, 3 };
+	int c[] = { 0, [0] = 1, 2, 3};
+	int d[] = { 0, [3] = 4, 5};
+
+	__smatch_buf_size(a);
+	__smatch_buf_size(b);
+	__smatch_buf_size(c);
+	__smatch_buf_size(d);
+}
+
+/*
+ * check-name: smatch buf size #7
+ * check-command: smatch -I.. sm_buf_size7.c
+ *
+ * check-output-start
+sm_buf_size7.c:10 test() buf size: 'a' 2 elements, 8 bytes
+sm_buf_size7.c:11 test() buf size: 'b' 3 elements, 12 bytes
+sm_buf_size7.c:12 test() buf size: 'c' 3 elements, 12 bytes
+sm_buf_size7.c:13 test() buf size: 'd' 5 elements, 20 bytes
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:03 2018
+++ new/usr/src/tools/smatch/src/validation/sm_buf_size8.c	Fri Dec 21 15:01:03 2018
@@ -0,0 +1,56 @@
+#include <stdlib.h>
+#include "check_debug.h"
+
+struct foo {
+	int x, y, z;
+	int count;
+	char msg[0];
+};
+
+struct bar {
+	int x, y, z;
+	int count;
+	char msg[1];
+};
+
+struct outer1 {
+	int x, y, z;
+	struct foo foo;
+};
+
+struct outer2 {
+	int x, y, z;
+	struct bar bar;
+};
+
+int test(void)
+{
+	struct foo *p;
+	struct bar *q;
+	struct outer1 *a;
+	struct outer2 *b;
+
+	p = malloc(sizeof(*p) + 100);
+	__smatch_buf_size(p->msg);
+
+	q = malloc(sizeof(*q) + 100);
+	__smatch_buf_size(q->msg);
+
+	a = malloc(sizeof(*a) + 100);
+	__smatch_buf_size(a->foo);
+
+	b = malloc(sizeof(*b) + 100);
+	__smatch_buf_size(b->bar);
+}
+
+/*
+ * check-name: smatch buf size #8
+ * check-command: smatch -I.. sm_buf_size8.c
+ *
+ * check-output-start
+sm_buf_size8.c:34 test() buf size: 'p->msg' 100 elements, 100 bytes
+sm_buf_size8.c:37 test() buf size: 'q->msg' 101 elements, 101 bytes
+sm_buf_size8.c:40 test() buf size: 'a->foo' 0 elements, 116 bytes
+sm_buf_size8.c:43 test() buf size: 'b->bar' 0 elements, 120 bytes
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:03 2018
+++ new/usr/src/tools/smatch/src/validation/sm_casts.c	Fri Dec 21 15:01:03 2018
@@ -0,0 +1,35 @@
+void frob(void);
+
+char c;
+static int options_write(void)
+{
+	char a;
+	unsigned char b;
+
+	a = (char)0xff;
+	a = 0xff;
+	(char)b = 0xff;
+	b = 0xff;
+	if (c > -400)
+		frob();
+	if (c < -400)
+		frob();
+	if (400 > c)
+		frob();
+	if (-400 > c)
+		frob();
+	b = -12;
+
+}
+/*
+ * check-name: smatch cast handling
+ * check-command: smatch sm_casts.c
+ *
+ * check-output-start
+sm_casts.c:13 options_write() warn: always true condition '(c > -400) => ((-128)-127 > (-400))'
+sm_casts.c:15 options_write() warn: impossible condition '(c < -400) => ((-128)-127 < (-400))'
+sm_casts.c:17 options_write() warn: always true condition '(400 > c) => (400 > (-128)-127)'
+sm_casts.c:19 options_write() warn: impossible condition '(-400 > c) => ((-400) > (-128)-127)'
+sm_casts.c:21 options_write() warn: assigning (-12) to unsigned variable 'b'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:03 2018
+++ new/usr/src/tools/smatch/src/validation/sm_casts2.c	Fri Dec 21 15:01:03 2018
@@ -0,0 +1,34 @@
+#include <stdio.h>
+
+unsigned int frob();
+
+unsigned char *a;
+unsigned int *b;
+int *c;
+unsigned char *****d;
+int main(void)
+{
+
+	if (*a == (unsigned int)-1)
+		frob();
+	if (*b == (unsigned int)-1)
+		frob();
+	if (*c == (unsigned int)-1)
+		frob();
+	if (*d == (unsigned int)-1)
+		frob();
+	if (*d == -1)
+		frob();
+	if (*****d == (unsigned int)-1)
+		frob();
+	return 0;
+}
+/*
+ * check-name: smatch casts pointers
+ * check-command: smatch sm_casts2.c
+ *
+ * check-output-start
+sm_casts2.c:12 main() warn: impossible condition '(*a == -1) => (0-255 == u32max)'
+sm_casts2.c:22 main() warn: impossible condition '(*****d == -1) => (0-255 == u32max)'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:03 2018
+++ new/usr/src/tools/smatch/src/validation/sm_casts3.c	Fri Dec 21 15:01:03 2018
@@ -0,0 +1,20 @@
+#include "check_debug.h"
+
+unsigned int a;
+int b;
+int func(void)
+{
+	b = a;
+	__smatch_implied(a);
+	__smatch_implied(b);
+}
+
+/*
+ * check-name: smatch: casts #3
+ * check-command: smatch -I.. sm_casts3.c
+ *
+ * check-output-start
+sm_casts3.c:8 func() implied: a = ''
+sm_casts3.c:9 func() implied: b = 's32min-s32max'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:04 2018
+++ new/usr/src/tools/smatch/src/validation/sm_casts4.c	Fri Dec 21 15:01:04 2018
@@ -0,0 +1,53 @@
+#include <stdio.h>
+#include <string.h>
+#include "check_debug.h"
+
+long long l;
+unsigned long long ul;
+int i;
+unsigned int ui;
+signed char c;
+unsigned char uc;
+
+int main(void)
+{
+	int idx;
+
+	if (c < -2)
+		return 1;
+	if (uc < -2)
+		return 1;
+	if (i < -2)
+		return 1;
+	if (ui < -2)
+		return 1;
+	if (l < -2)
+		return 1;
+	if (ul < -2)
+		return 1;
+
+	__smatch_implied(l);
+	__smatch_implied(ul);
+	__smatch_implied(i);
+	__smatch_implied(ui);
+	__smatch_implied(c);
+	__smatch_implied(uc);
+
+	return 0;
+}
+
+
+/*
+ * check-name: smatch: casts #4
+ * check-command: smatch -I.. sm_casts4.c
+ *
+ * check-output-start
+sm_casts4.c:18 main() warn: impossible condition '(uc < -2) => (0-255 < (-2))'
+sm_casts4.c:29 main() implied: l = '(-2)-s64max'
+sm_casts4.c:30 main() implied: ul = '18446744073709551614-u64max'
+sm_casts4.c:31 main() implied: i = '(-2)-s32max'
+sm_casts4.c:32 main() implied: ui = '4294967294-u32max'
+sm_casts4.c:33 main() implied: c = '(-2)-127'
+sm_casts4.c:34 main() implied: uc = ''
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:04 2018
+++ new/usr/src/tools/smatch/src/validation/sm_casts5.c	Fri Dec 21 15:01:04 2018
@@ -0,0 +1,52 @@
+#include <stdio.h>
+#include <string.h>
+#include "check_debug.h"
+
+long long l;
+long long ul;
+int i;
+int ui;
+signed char c;
+char uc;
+
+int main(void)
+{
+	int idx;
+
+	if (c < -2)
+		return 1;
+	if (uc < (unsigned int)-2)
+		return 1;
+	if (i < -2)
+		return 1;
+	if (ui < (unsigned int)-2)
+		return 1;
+	if (l < -2)
+		return 1;
+	if (ul < (unsigned int)-2)
+		return 1;
+
+	__smatch_implied(l);
+	__smatch_implied(ul);
+	__smatch_implied(i);
+	__smatch_implied(ui);
+	__smatch_implied(c);
+	__smatch_implied(uc);
+
+	return 0;
+}
+
+
+/*
+ * check-name: smatch: casts #5
+ * check-command: smatch -I.. sm_casts5.c
+ *
+ * check-output-start
+sm_casts5.c:29 main() implied: l = '(-2)-s64max'
+sm_casts5.c:30 main() implied: ul = '4294967294-s64max'
+sm_casts5.c:31 main() implied: i = '(-2)-s32max'
+sm_casts5.c:32 main() implied: ui = '(-2)-(-1)'
+sm_casts5.c:33 main() implied: c = '(-2)-127'
+sm_casts5.c:34 main() implied: uc = '(-2)-(-1)'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:04 2018
+++ new/usr/src/tools/smatch/src/validation/sm_casts6.c	Fri Dec 21 15:01:04 2018
@@ -0,0 +1,52 @@
+#include <stdio.h>
+#include <string.h>
+#include "check_debug.h"
+
+long long l;
+long long ul;
+int i;
+int ui;
+signed char c;
+char uc;
+
+int main(void)
+{
+	int idx;
+
+	if (c < 2)
+		return 1;
+	if (uc < (unsigned int)2)
+		return 1;
+	if (i < 2)
+		return 1;
+	if (ui < (unsigned int)2)
+		return 1;
+	if (l < 2)
+		return 1;
+	if (ul < (unsigned int)2)
+		return 1;
+
+	__smatch_implied(l);
+	__smatch_implied(ul);
+	__smatch_implied(i);
+	__smatch_implied(ui);
+	__smatch_implied(c);
+	__smatch_implied(uc);
+
+	return 0;
+}
+
+
+/*
+ * check-name: smatch: casts #6
+ * check-command: smatch -I.. sm_casts6.c
+ *
+ * check-output-start
+sm_casts6.c:29 main() implied: l = '2-s64max'
+sm_casts6.c:30 main() implied: ul = '2-s64max'
+sm_casts6.c:31 main() implied: i = '2-s32max'
+sm_casts6.c:32 main() implied: ui = 's32min-(-1),2-s32max'
+sm_casts6.c:33 main() implied: c = '2-127'
+sm_casts6.c:34 main() implied: uc = '(-128)-(-1),2-127'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:04 2018
+++ new/usr/src/tools/smatch/src/validation/sm_casts7.c	Fri Dec 21 15:01:04 2018
@@ -0,0 +1,24 @@
+#include <stdio.h>
+#include <string.h>
+#include "check_debug.h"
+
+int a;
+int x;
+
+int main(void)
+{
+	a = (unsigned short)x;
+	__smatch_implied(a);
+
+	return 0;
+}
+
+
+/*
+ * check-name: smatch: casts #7
+ * check-command: smatch -I.. sm_casts7.c
+ *
+ * check-output-start
+sm_casts7.c:11 main() implied: a = '0-u16max'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:04 2018
+++ new/usr/src/tools/smatch/src/validation/sm_check_kunmap.c	Fri Dec 21 15:01:04 2018
@@ -0,0 +1,30 @@
+void something();
+
+int kmap(int p);
+int kunmap(int p);
+int kmap_atomic(int p);
+int kunmap_atomic(int p);
+
+int page;
+int x;
+int y;
+int z;
+
+void func(void)
+{
+	x = kmap(page);
+	kunmap(page);
+	kunmap(x);
+	y = kmap_atomic(z);
+	kunmap_atomic(y);
+	kunmap_atomic(z);
+}
+/*
+ * check-name: smatch check kunmap
+ * check-command: smatch -p=kernel sm_check_kunmap.c
+ *
+ * check-output-start
+sm_check_kunmap.c:17 func() warn: passing the wrong variable to kunmap()
+sm_check_kunmap.c:20 func() warn: passing the wrong variable to kmap_atomic()
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:04 2018
+++ new/usr/src/tools/smatch/src/validation/sm_chunk1.c	Fri Dec 21 15:01:04 2018
@@ -0,0 +1,22 @@
+#include "check_debug.h"
+
+static void perf_calculate_period(unsigned long nsec, unsigned long count)
+{
+	if (nsec + count > 64)
+		return;
+
+	__smatch_implied(nsec + count);
+	nsec = 100;
+	__smatch_implied(nsec + count);
+}
+
+
+/*
+ * check-name: smatch chunk #1
+ * check-command: smatch -I.. sm_chunk1.c
+ *
+ * check-output-start
+sm_chunk1.c:8 perf_calculate_period() implied: nsec + count = '0-64'
+sm_chunk1.c:10 perf_calculate_period() implied: nsec + count = ''
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:04 2018
+++ new/usr/src/tools/smatch/src/validation/sm_chunk2.c	Fri Dec 21 15:01:04 2018
@@ -0,0 +1,41 @@
+#include "check_debug.h"
+
+void initialize(void *p);
+
+int main(int x)
+{
+	unsigned int aaa[10];
+	int y, z;
+
+	initialize(&aaa);
+	initialize(&y);
+	initialize(&z);
+
+	if (aaa[5] > 3)
+		return 0;
+	aaa[0] = 42;
+	__smatch_implied(aaa[0]);
+	__smatch_implied(aaa[5]);
+	aaa[y] = 10;
+	__smatch_implied(aaa[5]);
+	if (aaa[z] > 4)
+		return 0;
+	__smatch_implied(aaa[z]);
+	z = 3;
+	__smatch_implied(aaa[z]);
+
+	return 0;
+}
+
+/*
+ * check-name: smatch chunk #2
+ * check-command: smatch -I.. sm_chunk2.c
+ *
+ * check-output-start
+sm_chunk2.c:17 main() implied: aaa[0] = '42'
+sm_chunk2.c:18 main() implied: aaa[5] = '0-3'
+sm_chunk2.c:20 main() implied: aaa[5] = '0-u32max'
+sm_chunk2.c:23 main() implied: aaa[z] = '0-4'
+sm_chunk2.c:25 main() implied: aaa[z] = '0-u32max'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:04 2018
+++ new/usr/src/tools/smatch/src/validation/sm_compare.c	Fri Dec 21 15:01:04 2018
@@ -0,0 +1,41 @@
+#include "check_debug.h"
+
+int a, b, c;
+
+static int frob(void)
+{
+	if (a > 5)
+		return;
+	if (b > 5)
+		return;
+	if (c != 5)
+		return;
+
+	if (a == 10)
+		__smatch_value("a");
+	if (b != 10)
+		__smatch_value("b");
+	if (c != 5)
+		__smatch_value("c");
+	if (5 != c)
+		__smatch_value("c");
+
+	__smatch_value("a");
+	__smatch_value("b");
+	__smatch_value("c");
+}
+
+/*
+ * check-name: Smatch Comparison
+ * check-command: smatch -I.. sm_compare.c
+ *
+ * check-output-start
+sm_compare.c:15 frob() a = empty
+sm_compare.c:17 frob() b = s32min-5
+sm_compare.c:19 frob() c = empty
+sm_compare.c:21 frob() c = empty
+sm_compare.c:23 frob() a = s32min-5
+sm_compare.c:24 frob() b = s32min-5
+sm_compare.c:25 frob() c = 5
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:04 2018
+++ new/usr/src/tools/smatch/src/validation/sm_compare10.c	Fri Dec 21 15:01:04 2018
@@ -0,0 +1,20 @@
+#include "check_debug.h"
+
+int a, b, c;
+static int options_write(void)
+{
+	if (c <= b)
+		return;
+	if (a >= b)
+		return;
+	__smatch_compare(a, c);
+}
+
+/*
+ * check-name: smatch compare #10
+ * check-command: smatch -I.. sm_compare10.c
+ *
+ * check-output-start
+sm_compare10.c:10 options_write() a < c
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:04 2018
+++ new/usr/src/tools/smatch/src/validation/sm_compare11.c	Fri Dec 21 15:01:04 2018
@@ -0,0 +1,26 @@
+#include "check_debug.h"
+
+int frob();
+
+static int options_write(void)
+{
+	int a = frob();
+	int b = frob();
+	int c = frob();
+	int d = frob();
+
+	a = d;
+	if (a > b + c) {
+		a = b + c;
+	}
+	__smatch_compare(a, d);
+}
+
+/*
+ * check-name: smatch compare #11
+ * check-command: smatch -I.. sm_compare11.c
+ *
+ * check-output-start
+sm_compare11.c:16 options_write() a <= d
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:04 2018
+++ new/usr/src/tools/smatch/src/validation/sm_compare12.c	Fri Dec 21 15:01:04 2018
@@ -0,0 +1,38 @@
+#include "check_debug.h"
+
+#define min_t(type, x, y) ({			\
+	type __min1 = (x);			\
+	type __min2 = (y);			\
+	__min1 < __min2 ? __min1: __min2; })
+
+int frob();
+
+static int options_write(void)
+{
+	int a = frob();
+	int b = frob();
+	int c = frob();
+	int d = frob();
+
+	a = min_t(int, b + c, d);
+	__smatch_compare(a, d);
+	__smatch_compare(a, b + c);
+	b++;
+	__smatch_compare(a, b + c);
+	a++;  /* argh...  really one increment should mean a <= b + c */
+	a++;
+	__smatch_compare(a, b + c);
+
+}
+
+/*
+ * check-name: smatch compare #12
+ * check-command: smatch -I.. sm_compare12.c
+ *
+ * check-output-start
+sm_compare12.c:18 options_write() a <= d
+sm_compare12.c:19 options_write() a <= b + c
+sm_compare12.c:21 options_write() a < b + c
+sm_compare12.c:24 options_write() a <none> b + c
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:04 2018
+++ new/usr/src/tools/smatch/src/validation/sm_compare13.c	Fri Dec 21 15:01:04 2018
@@ -0,0 +1,28 @@
+#include <stdio.h>
+#include <string.h>
+#include "check_debug.h"
+
+int cmp_x(int x, int y)
+{
+	if (x < y) {
+		__smatch_compare(x, y);
+		return -1;
+	}
+	if (x == y) {
+		__smatch_compare(x, y);
+		return 0;
+	}
+	__smatch_compare(x, y);
+	return 1;
+}
+
+/*
+ * check-name: smatch compare #13
+ * check-command: smatch -I.. sm_compare13.c
+ *
+ * check-output-start
+sm_compare13.c:8 cmp_x() x < y
+sm_compare13.c:12 cmp_x() x == y
+sm_compare13.c:15 cmp_x() x > y
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:04 2018
+++ new/usr/src/tools/smatch/src/validation/sm_compare14.c	Fri Dec 21 15:01:04 2018
@@ -0,0 +1,30 @@
+#include <stdio.h>
+#include <string.h>
+#include "check_debug.h"
+
+int cmp_x(int x, int y)
+{
+	if (x < y)
+		return -1;
+	if (x == y)
+		return 0;
+	return 1;
+}
+
+int x, y;
+int test(void)
+{
+	if (cmp_x(x, 4) < 0) {
+		__smatch_implied(x);
+	} else
+		__smatch_implied(x);
+}
+/*
+ * check-name: smatch compare #14
+ * check-command: smatch -I.. sm_compare14.c
+ *
+ * check-output-start
+sm_compare14.c:18 test() implied: x = 's32min-3'
+sm_compare14.c:20 test() implied: x = '4-s32max'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:05 2018
+++ new/usr/src/tools/smatch/src/validation/sm_compare15.c	Fri Dec 21 15:01:05 2018
@@ -0,0 +1,26 @@
+#include <stdio.h>
+#include <string.h>
+#include "check_debug.h"
+
+int __fswab(int x)
+{
+	return x;
+}
+
+int a;
+int cmp_x(int x, int y)
+{
+	if (__fswab(a) > 5)
+		return;
+	__smatch_implied(a);
+}
+
+
+/*
+ * check-name: smatch compare #15
+ * check-command: smatch -I.. sm_compare15.c
+ *
+ * check-output-start
+sm_compare15.c:15 cmp_x() implied: a = 's32min-5'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:05 2018
+++ new/usr/src/tools/smatch/src/validation/sm_compare16.c	Fri Dec 21 15:01:05 2018
@@ -0,0 +1,26 @@
+#include <stdio.h>
+#include <string.h>
+#include "check_debug.h"
+
+int return_x(int x)
+{
+	return x;
+}
+
+int a;
+int cmp_x(int x, int y)
+{
+	if (a > return_x(5))
+		return;
+	__smatch_implied(a);
+}
+
+
+/*
+ * check-name: smatch compare #16
+ * check-command: smatch -I.. sm_compare16.c
+ *
+ * check-output-start
+sm_compare16.c:15 cmp_x() implied: a = 's32min-5'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:05 2018
+++ new/usr/src/tools/smatch/src/validation/sm_compare17.c	Fri Dec 21 15:01:05 2018
@@ -0,0 +1,30 @@
+#include "check_debug.h"
+
+int frob();
+
+int xxx;
+static int options_write(void)
+{
+	int a = -1;
+	int found = 0;
+
+	if (xxx < 0)
+		return;
+	while (frob()) {
+		if (++a == xxx) {
+			found = 1;
+			break;
+		}
+	}
+	if (!found)
+		__smatch_compare(a, xxx);
+}
+
+/*
+ * check-name: smatch compare #17
+ * check-command: smatch -I.. sm_compare17.c
+ *
+ * check-output-start
+sm_compare17.c:20 options_write() a < xxx
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:05 2018
+++ new/usr/src/tools/smatch/src/validation/sm_compare2.c	Fri Dec 21 15:01:05 2018
@@ -0,0 +1,41 @@
+#include "check_debug.h"
+
+int a, b, c;
+
+int main(void)
+{
+	if (a < 4)
+		return 1;
+	if (a > 10)
+		return 2;
+	__smatch_value("a");
+
+	if (b < 3)
+		return 3;
+	if (b > 15)
+		return 4;
+	__smatch_value("b");
+
+	if (b > a) {
+		__smatch_value("a");
+		__smatch_value("b");
+	} else {
+		__smatch_value("a");
+		__smatch_value("b");
+	}
+	return 5;
+}
+
+/*
+ * check-name: Smatch Comparison #2
+ * check-command: smatch -I.. sm_compare2.c
+ *
+ * check-output-start
+sm_compare2.c:11 main() a = 4-10
+sm_compare2.c:17 main() b = 3-15
+sm_compare2.c:20 main() a = 4-10
+sm_compare2.c:21 main() b = 5-15
+sm_compare2.c:23 main() a = 4-10
+sm_compare2.c:24 main() b = 3-10
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:05 2018
+++ new/usr/src/tools/smatch/src/validation/sm_compare3.c	Fri Dec 21 15:01:05 2018
@@ -0,0 +1,50 @@
+#include <stdio.h>
+#include <string.h>
+#include "check_debug.h"
+
+int a, b, c, d;
+int e, f, g;
+int main(void)
+{
+	if (b > 1000000000)
+		return 0;
+
+	if (a >= b)
+		return 1;
+	if (a < 0 || b < 0)
+		return 1;
+	c = b - a;
+	__smatch_implied(c);
+	__smatch_compare(b, c);
+
+	if (e < 0 || e > b)
+		return;
+	if (f <= 0 || f > b)
+		return;
+	g = e + f;
+
+	__smatch_implied(g);
+	__smatch_implied(e);
+	__smatch_compare(g, e);
+	__smatch_compare(e, g);
+	__smatch_implied(g - e);
+	__smatch_implied(g - f);
+
+	return 0;
+}
+
+/*
+ * check-name: Smatch compare #3
+ * check-command: smatch -I.. sm_compare3.c
+ *
+ * check-output-start
+sm_compare3.c:17 main() implied: c = '1-1000000000'
+sm_compare3.c:18 main() b <= c
+sm_compare3.c:26 main() implied: g = '1-2000000000'
+sm_compare3.c:27 main() implied: e = '0-1000000000'
+sm_compare3.c:28 main() g > e
+sm_compare3.c:29 main() e < g
+sm_compare3.c:30 main() implied: g - e = '1-2000000000'
+sm_compare3.c:31 main() implied: g - f = '0-1999999999'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:05 2018
+++ new/usr/src/tools/smatch/src/validation/sm_compare4.c	Fri Dec 21 15:01:05 2018
@@ -0,0 +1,35 @@
+#include "check_debug.h"
+
+int some_func();
+
+int a, b, c, d;
+
+void func (void)
+{
+	d = some_func();
+
+	if (a + 3 > 100)
+		return;
+	__smatch_implied(a);
+	if (3 + b > 100)
+		return;
+	__smatch_implied(b);
+	if (c - 3 > 100)
+		return;
+	__smatch_implied(c);
+	if (3 - d > 100)
+		return;
+	__smatch_implied(d);
+}
+
+/*
+ * check-name: Smatch compare #4
+ * check-command: smatch -I.. sm_compare4.c
+ *
+ * check-output-start
+sm_compare4.c:13 func() implied: a = 's32min-97'
+sm_compare4.c:16 func() implied: b = 's32min-97'
+sm_compare4.c:19 func() implied: c = 's32min-103'
+sm_compare4.c:22 func() implied: d = 's32min-s32max'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:05 2018
+++ new/usr/src/tools/smatch/src/validation/sm_compare5.c	Fri Dec 21 15:01:05 2018
@@ -0,0 +1,29 @@
+#include "check_debug.h"
+
+int a, b, c, d;
+void func(void)
+{
+	a = b + 3;
+	c = d - 3;
+
+	if (a > 10)
+		return;
+	__smatch_implied(a);
+	__smatch_implied(b);
+	if (10 > c)
+		return;
+	__smatch_implied(c);
+	__smatch_implied(d);
+}
+
+/*
+ * check-name: Smatch compare #5
+ * check-command: smatch -I.. sm_compare5.c
+ *
+ * check-output-start
+sm_compare5.c:11 func() implied: a = 's32min-10'
+sm_compare5.c:12 func() implied: b = 's32min-7'
+sm_compare5.c:15 func() implied: c = '10-s32max'
+sm_compare5.c:16 func() implied: d = '13-s32max'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:05 2018
+++ new/usr/src/tools/smatch/src/validation/sm_compare6.c	Fri Dec 21 15:01:05 2018
@@ -0,0 +1,23 @@
+#include "check_debug.h"
+
+int returns_less(int x)
+{
+	int y;
+
+	if (x > 10)
+		y = 10;
+	else
+		y = x;
+
+	__smatch_compare(x, y);
+	return y;
+}
+
+/*
+ * check-name: smatch compare #6
+ * check-command: smatch -I.. sm_compare6.c
+ *
+ * check-output-start
+sm_compare6.c:12 returns_less() x >= y
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:05 2018
+++ new/usr/src/tools/smatch/src/validation/sm_compare7.c	Fri Dec 21 15:01:05 2018
@@ -0,0 +1,24 @@
+#include "check_debug.h"
+
+int a, b, c, e, f, g;
+static int options_write(void)
+{
+	if (b >= c)
+		return;
+	a = c;
+	__smatch_compare(a, b);
+	if (f >= e)
+		return;
+	g = f;
+	__smatch_compare(g, e);
+}
+
+/*
+ * check-name: smatch compare #7
+ * check-command: smatch -I.. sm_compare7.c
+ *
+ * check-output-start
+sm_compare7.c:9 options_write() a > b
+sm_compare7.c:13 options_write() g < e
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:05 2018
+++ new/usr/src/tools/smatch/src/validation/sm_compare8.c	Fri Dec 21 15:01:05 2018
@@ -0,0 +1,17 @@
+#include "check_debug.h"
+
+void *a, *b;
+static int options_write(void)
+{
+	a = b + 1;
+	__smatch_compare(a, b);
+}
+
+/*
+ * check-name: smatch compare #8
+ * check-command: smatch -I.. sm_compare8.c
+ *
+ * check-output-start
+sm_compare8.c:7 options_write() a > b
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:05 2018
+++ new/usr/src/tools/smatch/src/validation/sm_compare9.c	Fri Dec 21 15:01:05 2018
@@ -0,0 +1,17 @@
+#include "check_debug.h"
+
+void *a, *b;
+static int options_write(void)
+{
+	a = b / 2;
+	__smatch_compare(a, b);
+}
+
+/*
+ * check-name: smatch compare #9
+ * check-command: smatch -I.. sm_compare9.c
+ *
+ * check-output-start
+sm_compare9.c:7 options_write() a < b
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:05 2018
+++ new/usr/src/tools/smatch/src/validation/sm_compound_condition.c	Fri Dec 21 15:01:05 2018
@@ -0,0 +1,27 @@
+struct ture {
+	int a;
+};
+
+struct ture *a;
+struct ture *b;
+
+void func (void)
+{
+	if (!a && !(a = returns_nonnull()))
+		return;
+	a->a = 1;
+
+	if (b || (b = returns_nonnull())) {
+		b->a  = 1;
+		return;
+	}
+	b->a = 1;
+}
+/*
+ * check-name: Compound Conditions
+ * check-command: smatch sm_compound_condition.c
+ *
+ * check-output-start
+sm_compound_condition.c:18 func() error: we previously assumed 'b' could be null (see line 14)
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:06 2018
+++ new/usr/src/tools/smatch/src/validation/sm_compound_conditions2.c	Fri Dec 21 15:01:06 2018
@@ -0,0 +1,73 @@
+#include "check_debug.h"
+
+int aaa;
+int x, y, z;
+
+void func (void)
+{
+	aaa = 0;
+	if (y)
+		aaa = 1;
+	if (x)
+		aaa = 2;
+
+	if (x) {
+		__smatch_value("aaa");
+		if (y)
+			__smatch_value("aaa");
+		else
+			__smatch_value("aaa");
+	}
+	if (!x) {		
+		__smatch_value("aaa");
+		if (y)		
+			__smatch_value("aaa");
+		else
+			__smatch_value("aaa");
+	}
+	if (y) {
+		__smatch_value("aaa");
+		if (x)
+			__smatch_value("aaa");
+		else
+			__smatch_value("aaa");
+	}
+	if (!y) {
+		__smatch_value("aaa");
+		if (x)		
+			__smatch_value("aaa");
+		else
+			__smatch_value("aaa");
+	}
+	if (x && y)
+		__smatch_value("aaa");
+	if (x || y)
+		__smatch_value("aaa");
+	else
+		__smatch_value("aaa");
+	if (!x && !y)
+		__smatch_value("aaa");
+}
+/*
+ * check-name: Compound Conditions #2
+ * check-command: smatch -I.. sm_compound_conditions2.c
+ *
+ * check-output-start
+sm_compound_conditions2.c:15 func() aaa = 2
+sm_compound_conditions2.c:17 func() aaa = 2
+sm_compound_conditions2.c:19 func() aaa = 2
+sm_compound_conditions2.c:22 func() aaa = 0-1
+sm_compound_conditions2.c:24 func() aaa = 1
+sm_compound_conditions2.c:26 func() aaa = 0
+sm_compound_conditions2.c:29 func() aaa = 1-2
+sm_compound_conditions2.c:31 func() aaa = 2
+sm_compound_conditions2.c:33 func() aaa = 1
+sm_compound_conditions2.c:36 func() aaa = 0,2
+sm_compound_conditions2.c:38 func() aaa = 2
+sm_compound_conditions2.c:40 func() aaa = 0
+sm_compound_conditions2.c:43 func() aaa = 2
+sm_compound_conditions2.c:45 func() aaa = 1-2
+sm_compound_conditions2.c:47 func() aaa = 0
+sm_compound_conditions2.c:49 func() aaa = 0
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:06 2018
+++ new/usr/src/tools/smatch/src/validation/sm_compound_conditions3.c	Fri Dec 21 15:01:06 2018
@@ -0,0 +1,29 @@
+#include "check_debug.h"
+
+int aaa;
+
+void func (void)
+{
+	if (aaa > 0 && aaa < 100) {
+		__smatch_value("aaa");
+	} else {
+		__smatch_value("aaa");
+	}
+	if (aaa > 0 && aaa < 100 && aaa < 10) {
+		__smatch_value("aaa");
+	} else {
+		if (aaa != 42)
+			__smatch_value("aaa");
+	}
+}
+/*
+ * check-name: Compound Conditions #3
+ * check-command: smatch -I.. sm_compound_conditions3.c
+ *
+ * check-output-start
+sm_compound_conditions3.c:8 func() aaa = 1-99
+sm_compound_conditions3.c:10 func() aaa = s32min-0,100-s32max
+sm_compound_conditions3.c:13 func() aaa = 1-9
+sm_compound_conditions3.c:16 func() aaa = s32min-0,10-41,43-s32max
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:06 2018
+++ new/usr/src/tools/smatch/src/validation/sm_deref_check_deref.c	Fri Dec 21 15:01:06 2018
@@ -0,0 +1,37 @@
+struct ture {
+	int a;
+};
+struct cont {
+	struct ture *x;
+};
+
+struct ture *x;
+struct ture **px;
+struct cont *y;
+void func (void)
+{
+	int *a = &(x->a);
+	int *b = &x->a;
+	int *c = &(y->x->a);
+	int *d = &((*px)->a);
+
+	if (x)
+		frob();
+	if (px)
+		frob();
+	if (y->x)
+		frob();
+	if (y)
+		frob();
+
+	return;
+}
+/*
+ * check-name: Dereferencing before check
+ * check-command: smatch sm_deref_check_deref.c
+ *
+ * check-output-start
+sm_deref_check_deref.c:20 func() warn: variable dereferenced before check 'px' (see line 16)
+sm_deref_check_deref.c:24 func() warn: variable dereferenced before check 'y' (see line 15)
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:06 2018
+++ new/usr/src/tools/smatch/src/validation/sm_dev_hold.c	Fri Dec 21 15:01:06 2018
@@ -0,0 +1,27 @@
+void dev_hold(int *x);
+
+void dev_put(int *x){}
+
+extern int y,z;
+int *x;
+
+int func (void)
+{
+	dev_hold(x);
+	if (y) {
+		dev_put(x);
+		return -1;
+	}
+	if (z) {
+		return -1;
+	}
+	return 0;
+}
+/*
+ * check-name: dev_hold() check
+ * check-command: smatch --project=kernel sm_dev_hold.c
+ *
+ * check-output-start
+sm_dev_hold.c:16 func() warn: 'x' held on error path.
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:06 2018
+++ new/usr/src/tools/smatch/src/validation/sm_double_free1.c	Fri Dec 21 15:01:06 2018
@@ -0,0 +1,21 @@
+#include <stdlib.h>
+
+void func (void)
+{
+	void *x;
+
+	x = malloc(42);
+
+	free(x);
+	free(x);
+
+	return 0;
+}
+/*
+ * check-name: double free test #1
+ * check-command: smatch sm_double_free1.c
+ *
+ * check-output-start
+sm_double_free1.c:10 func() error: double free of 'x'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:06 2018
+++ new/usr/src/tools/smatch/src/validation/sm_double_free2.c	Fri Dec 21 15:01:06 2018
@@ -0,0 +1,28 @@
+#include <stdlib.h>
+
+struct ture {
+	int a;
+};
+
+void func (void)
+{
+	void *x;
+
+	x = malloc(sizeof(struct ture));
+	x->a = 1;
+
+	if (x->a)
+		free(x);
+
+	free(x);
+
+	return 0;
+}
+/*
+ * check-name: double free test #2
+ * check-command: smatch sm_double_free2.c
+ *
+ * check-output-start
+sm_double_free2.c:17 func() error: double free of 'x'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:06 2018
+++ new/usr/src/tools/smatch/src/validation/sm_efault.c	Fri Dec 21 15:01:06 2018
@@ -0,0 +1,21 @@
+#include "check_debug.h"
+
+int clear_user();
+
+int func(int *p)
+{
+	int ret;
+
+	ret = clear_user();
+	if (ret)
+		return ret;
+	return 0;
+}
+/*
+ * check-name: smatch return -EFAULT
+ * check-command: smatch -p=kernel -I.. sm_efault.c
+ *
+ * check-output-start
+sm_efault.c:11 func() warn: maybe return -EFAULT instead of the bytes remaining?
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:06 2018
+++ new/usr/src/tools/smatch/src/validation/sm_equiv1.c	Fri Dec 21 15:01:06 2018
@@ -0,0 +1,40 @@
+#include "check_debug.h"
+
+int *something();
+
+int *one;
+int *two;
+int func(void)
+{
+	one = something();
+	two = one;
+
+	if (two == 1) {
+		__smatch_value("one");
+		__smatch_value("two");
+	}
+	__smatch_value("one");
+	__smatch_value("two");
+	if (one == 2) {
+		__smatch_value("one");
+		__smatch_value("two");
+	}
+	__smatch_value("one");
+	__smatch_value("two");
+	return 0;
+}
+/*
+ * check-name: smatch equivalent variables #1
+ * check-command: smatch -I.. -m64 sm_equiv1.c
+ *
+ * check-output-start
+sm_equiv1.c:13 func() one = 1
+sm_equiv1.c:14 func() two = 1
+sm_equiv1.c:16 func() one = s64min-s64max
+sm_equiv1.c:17 func() two = s64min-s64max
+sm_equiv1.c:19 func() one = 2
+sm_equiv1.c:20 func() two = 2
+sm_equiv1.c:22 func() one = s64min-s64max
+sm_equiv1.c:23 func() two = s64min-s64max
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:06 2018
+++ new/usr/src/tools/smatch/src/validation/sm_equiv2.c	Fri Dec 21 15:01:06 2018
@@ -0,0 +1,35 @@
+#include "check_debug.h"
+
+int *something();
+
+int red;
+int blue;
+int x;
+int func(void)
+{
+	red = 0;
+
+	if (x) {
+		red = 5;
+	}
+	blue = red;
+
+	if (x) {
+		__smatch_value("red");
+		__smatch_value("blue");
+	}
+	__smatch_value("red");
+	__smatch_value("blue");
+	return 0;
+}
+/*
+ * check-name: smatch equivalent variables #2 (implications)
+ * check-command: smatch -I.. sm_equiv2.c
+ *
+ * check-output-start
+sm_equiv2.c:18 func() red = 5
+sm_equiv2.c:19 func() blue = 5
+sm_equiv2.c:21 func() red = 0,5
+sm_equiv2.c:22 func() blue = 0,5
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:06 2018
+++ new/usr/src/tools/smatch/src/validation/sm_equiv3.c	Fri Dec 21 15:01:06 2018
@@ -0,0 +1,34 @@
+#include "check_debug.h"
+
+int *something();
+void frob();
+
+int red;
+int blue;
+int x;
+int func(void)
+{
+
+	red = something();
+	if (x < 4)
+		red = something();
+	else if (x > 5)
+		red = 0;
+
+	blue = red;
+	red = 0;
+	if (!blue)
+		return;
+	__smatch_value("red");
+	__smatch_value("blue");
+	return 0;
+}
+/*
+ * check-name: smatch equivalent variables #3
+ * check-command: smatch -I.. sm_equiv3.c
+ *
+ * check-output-start
+sm_equiv3.c:22 func() red = 0
+sm_equiv3.c:23 func() blue = s32min-(-1),1-s32max
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:06 2018
+++ new/usr/src/tools/smatch/src/validation/sm_equiv4.c	Fri Dec 21 15:01:06 2018
@@ -0,0 +1,22 @@
+#include "check_debug.h"
+
+void *ioremap();
+void iounmap(void *);
+
+int *a, *b, *c;
+int func(void)
+{
+	a = ioremap();
+	b = ioremap();
+	c = a;
+	iounmap(c);
+	return -1;
+}
+/*
+ * check-name: smatch equivalent variables #4
+ * check-command: smatch -p=kernel --spammy -I.. sm_equiv4.c
+ *
+ * check-output-start
+sm_equiv4.c:13 func() warn: 'b' was not released on error
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:06 2018
+++ new/usr/src/tools/smatch/src/validation/sm_err_ptr.c	Fri Dec 21 15:01:06 2018
@@ -0,0 +1,25 @@
+#include <stdio.h>
+
+int *add_inode();
+int IS_ERR(void *);
+
+int main(void)
+{
+	int *p;
+
+	p = add_inode();
+	if (!IS_ERR(p)) {
+		*p = 1;
+	}
+	*p = 1;
+
+	return 0;
+}
+/*
+ * check-name: dereferencing ERR_PTR bugs
+ * check-command: smatch -p=kernel sm_err_ptr.c
+ *
+ * check-output-start
+sm_err_ptr.c:14 main() error: 'p' dereferencing possible ERR_PTR()
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:06 2018
+++ new/usr/src/tools/smatch/src/validation/sm_fake_assignment.c	Fri Dec 21 15:01:06 2018
@@ -0,0 +1,33 @@
+#include "check_debug.h"
+
+struct ture {
+	int x, y;
+};
+
+struct ture outside = {
+	.x = 1,
+	.y = 2,
+};
+
+struct ture buf[10];
+void test(void)
+{
+	int a, b;
+
+	a = 0;
+	b = 0;
+	buf[a++] = outside;
+	buf[++b] = outside;
+	__smatch_implied(a);
+	__smatch_implied(b);
+}
+
+/*
+ * check-name: smatch fake assignment
+ * check-command: smatch -I.. sm_fake_assignment.c
+ *
+ * check-output-start
+sm_fake_assignment.c:21 test() implied: a = '1'
+sm_fake_assignment.c:22 test() implied: b = '1'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:07 2018
+++ new/usr/src/tools/smatch/src/validation/sm_get_user1.c	Fri Dec 21 15:01:07 2018
@@ -0,0 +1,37 @@
+#include "check_debug.h"
+
+int frob(void);
+#define get_user(x, y) ({ int __val_gu = frob(); x = __val_gu; 0; })
+
+void func(void)
+{
+	int *user_ptr;
+	int foo, bar;
+	unsigned int x;
+
+	get_user(foo, user_ptr);
+	bar = foo + 1;
+
+	get_user(bar, user_ptr);
+	if (bar > foo)
+		bar = foo;
+	foo = bar * 8;
+
+	get_user(x, user_ptr);
+	if (x > foo)
+		x = foo;
+	foo = x * 8;
+
+	get_user(x, user_ptr);
+	foo = x * 8;
+}
+/*
+ * check-name: smatch get_user() #1
+ * check-command: smatch -p=kernel -I.. sm_get_user1.c
+ *
+ * check-output-start
+sm_get_user1.c:13 func() warn: check for integer over/underflow 'foo'
+sm_get_user1.c:18 func() warn: check for integer underflow 'bar'
+sm_get_user1.c:26 func() warn: check for integer overflow 'x'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:07 2018
+++ new/usr/src/tools/smatch/src/validation/sm_implied.c	Fri Dec 21 15:01:07 2018
@@ -0,0 +1,30 @@
+struct ture {
+	int a;
+};
+
+struct ture *a;
+struct ture *b;
+
+void func (void)
+{
+	struct ture *aa;
+
+	b = 0;
+	if (a)
+		goto x;
+	aa = returns_nonnull();
+	b = 1;
+x:
+	if (b)
+		aa->a = 1;
+	aa->a = 1;
+	return;
+}
+/*
+ * check-name: Smatch implied #1
+ * check-command: smatch --spammy sm_implied.c
+ *
+ * check-output-start
+sm_implied.c:20 func() error: potentially dereferencing uninitialized 'aa'.
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:07 2018
+++ new/usr/src/tools/smatch/src/validation/sm_implied10.c	Fri Dec 21 15:01:07 2018
@@ -0,0 +1,30 @@
+#include "check_debug.h"
+
+void frob(void){}
+
+int x[10];
+int offset;
+void func(int *y)
+{
+	if (({int test2 = !!(!y || !*y); frob(); frob(); frob(); test2;}))
+		__smatch_value("y");
+	else
+		__smatch_value("y");
+
+	if (({int test2 = !!(offset >= 10 || x[offset] == 1); frob(); frob(); frob(); test2;}))
+		__smatch_value("offset");
+	else
+		__smatch_value("offset");
+
+}
+/*
+ * check-name: smatch implied #10
+ * check-command: smatch -I.. -m64 sm_implied10.c
+ *
+ * check-output-start
+sm_implied10.c:10 func() y = 0,4096-2117777777777777777
+sm_implied10.c:12 func() y = 4096-2117777777777777777
+sm_implied10.c:15 func() offset = 0-s32max
+sm_implied10.c:17 func() offset = 0-9
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:07 2018
+++ new/usr/src/tools/smatch/src/validation/sm_implied11.c	Fri Dec 21 15:01:07 2018
@@ -0,0 +1,34 @@
+#include "check_debug.h"
+
+struct foo {
+	int x;
+};
+
+void *frob();
+
+struct foo *foo;
+
+static void ad_agg_selection_logic(void)
+{
+	int a;
+
+
+	if (foo && foo->x)
+		a = 1;
+	else
+		a = 0;
+
+	if (frob())
+		a = frob();
+
+	if (a)
+		__smatch_implied(foo);
+}
+/*
+ * check-name: smatch implied #11
+ * check-command: smatch -I.. -m64 sm_implied11.c
+ *
+ * check-output-start
+sm_implied11.c:25 ad_agg_selection_logic() implied: foo = '0,4096-2117777777777777777'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:07 2018
+++ new/usr/src/tools/smatch/src/validation/sm_implied12.c	Fri Dec 21 15:01:07 2018
@@ -0,0 +1,38 @@
+#include "check_debug.h"
+
+struct foo {
+	int x;
+};
+
+void *frob();
+
+struct foo *foo;
+
+int x;
+
+static void ad_agg_selection_logic(void)
+{
+	int a;
+
+
+	if (x) {
+		if (foo && foo->x)
+			a = 1;
+		else
+			a = 0;
+
+		if (frob())
+			a = frob();
+
+		if (a)
+			__smatch_implied(foo);
+	}
+}
+/*
+ * check-name: smatch implied #12
+ * check-command: smatch -I.. -m64 sm_implied12.c
+ *
+ * check-output-start
+sm_implied12.c:28 ad_agg_selection_logic() implied: foo = '0,4096-2117777777777777777'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:07 2018
+++ new/usr/src/tools/smatch/src/validation/sm_implied13.c	Fri Dec 21 15:01:07 2018
@@ -0,0 +1,24 @@
+#include "check_debug.h"
+
+int main(int x)
+{
+	int a = 1;
+
+	if (x & 12)
+		a = 2;
+	__smatch_implied(a);
+	if (!(x & 12))
+		return 0;
+	__smatch_implied(a);
+	return 0;
+}
+
+/*
+ * check-name: smatch implied #13
+ * check-command: smatch -I.. sm_implied13.c
+ *
+ * check-output-start
+sm_implied13.c:9 main() implied: a = '1-2'
+sm_implied13.c:12 main() implied: a = '2'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:07 2018
+++ new/usr/src/tools/smatch/src/validation/sm_implied14.c	Fri Dec 21 15:01:07 2018
@@ -0,0 +1,47 @@
+#include "check_debug.h"
+
+static int test(int x)
+{
+	if (x == 12)
+		return 10;
+	return 0;
+}
+
+int a, b;
+static void func(void)
+{
+	if (a == 12)
+		b = 1;
+	else
+		b = 4;
+	if (test(a) == 10) {
+		__smatch_implied(a);
+		__smatch_implied(b);
+	} else {
+		__smatch_implied(a);
+		__smatch_implied(b);
+	}
+
+	if (a == 12)
+		b = 10;
+	else
+		b = 40;
+
+	if (test(a))
+		__smatch_implied(b);
+	else
+		__smatch_implied(b);
+}
+/*
+ * check-name: smatch implied #14
+ * check-command: smatch -I.. sm_implied14.c
+ *
+ * check-output-start
+sm_implied14.c:18 func() implied: a = '12'
+sm_implied14.c:19 func() implied: b = '1'
+sm_implied14.c:21 func() implied: a = 's32min-11,13-s32max'
+sm_implied14.c:22 func() implied: b = '4'
+sm_implied14.c:31 func() implied: b = '10'
+sm_implied14.c:33 func() implied: b = '40'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:07 2018
+++ new/usr/src/tools/smatch/src/validation/sm_implied15.c	Fri Dec 21 15:01:07 2018
@@ -0,0 +1,43 @@
+#include "check_debug.h"
+
+int some_func(void);
+
+int a;
+int frob(int *p)
+{
+	int ret = 0;
+
+	*p = 4;
+	if (a)
+		goto out;
+
+	*p = some_func();
+	if (*p < 10 || *p > 100) {
+		ret = -12;
+		goto out;
+	}
+
+out:
+	return ret;
+}
+
+void test(void)
+{
+	int var = 0;
+	int ret;
+
+	ret = frob(&var);
+	__smatch_implied(var);
+	if (ret)
+		return;
+	__smatch_implied(var);
+}
+/*
+ * check-name: smatch implied #15
+ * check-command: smatch -I.. sm_implied15.c
+ *
+ * check-output-start
+sm_implied15.c:30 test() implied: var = 's32min-s32max'
+sm_implied15.c:33 test() implied: var = '4,10-100'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:07 2018
+++ new/usr/src/tools/smatch/src/validation/sm_implied16.c	Fri Dec 21 15:01:07 2018
@@ -0,0 +1,43 @@
+#include "check_debug.h"
+
+int frob(void);
+
+int a;
+int func (char *input)
+{
+	int x = frob();
+
+	if (a == 1) {
+		if (x != -5)
+			return;
+	} else if (a == 2) {
+		if (x != 0)
+			return;
+	} else if (a == 3) {
+		if (x != 42)
+			return;
+	} else {
+		return;
+	}
+
+	if (x) {
+		__smatch_implied(x);
+		__smatch_implied(a);
+	}
+
+	if (x == -5)
+		__smatch_implied(a);
+
+	return 0;
+}
+
+/*
+ * check-name: smatch implied #16
+ * check-command: smatch -I.. sm_implied16.c
+ *
+ * check-output-start
+sm_implied16.c:24 func() implied: x = '(-5),42'
+sm_implied16.c:25 func() implied: a = '1,3'
+sm_implied16.c:29 func() implied: a = '1'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:07 2018
+++ new/usr/src/tools/smatch/src/validation/sm_implied17.c	Fri Dec 21 15:01:07 2018
@@ -0,0 +1,36 @@
+#include "check_debug.h"
+
+int frob(void);
+
+int a;
+int func (char *input)
+{
+	int x = frob();
+
+	if (a == 1) {
+		if (x != -5)
+			return;
+	} else if (a == 2) {
+		if (x < 0 || x > 10)
+			return;
+	} else {
+		return;
+	}
+
+	if (x)
+		;
+
+	if (x == -5)
+		__smatch_implied(a);
+
+	return 0;
+}
+
+/*
+ * check-name: smatch implied #17
+ * check-command: smatch -I.. sm_implied17.c
+ *
+ * check-output-start
+sm_implied17.c:24 func() implied: a = '1'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:07 2018
+++ new/usr/src/tools/smatch/src/validation/sm_implied18.c	Fri Dec 21 15:01:07 2018
@@ -0,0 +1,35 @@
+#include "check_debug.h"
+
+int a, b;
+
+int frob(int *data)
+{
+	if (a)
+		return 0;
+	if (b)
+		return -1;
+	*data = 42;
+	return 1;
+}
+
+void test(void)
+{
+	int x = -1;
+	int ret;
+
+	ret = frob(&x);
+	if (ret < 0)
+		return;
+	if (ret == 0)
+		return;
+	__smatch_implied(x);
+}
+
+/*
+ * check-name: smatch implied #18
+ * check-command: smatch -I.. sm_implied18.c
+ *
+ * check-output-start
+sm_implied18.c:25 test() implied: x = '42'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:07 2018
+++ new/usr/src/tools/smatch/src/validation/sm_implied19.c	Fri Dec 21 15:01:07 2018
@@ -0,0 +1,34 @@
+#include "check_debug.h"
+
+int xxx, yyy;
+int aaa, bbb;
+int id, vbus;
+void frob(void)
+{
+	if (xxx)
+		id = yyy;
+	else
+		id = 1;
+
+	if (aaa)
+		vbus = bbb;
+	else
+		vbus = id;
+
+	if (id)
+		;
+	if (!vbus)
+		;
+
+	if (!id)
+		__smatch_implied(vbus);
+}
+
+/*
+ * check-name: smatch implied #19
+ * check-command: smatch -I.. sm_implied19.c
+ *
+ * check-output-start
+sm_implied19.c:24 frob() implied: vbus = 's32min-s32max'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:08 2018
+++ new/usr/src/tools/smatch/src/validation/sm_implied2.c	Fri Dec 21 15:01:08 2018
@@ -0,0 +1,41 @@
+struct ture {
+	int a;
+};
+
+struct ture *a;
+struct ture *b;
+struct ture *c;
+
+void func (void)
+{
+	struct ture *aa, *ab;
+
+	b = 0;
+	if (a) {
+		aa = returns_nonnull();
+		ab = returns_nonnull();
+	} else {
+		b = -1;
+	}
+	if (!(b)) {
+		if (c) {
+			aa = (void *)0;
+			ab = (void *)0;
+			b = -1;
+		}
+	}
+	if (!c)
+		aa->a = 1;
+	if (b)
+		return;
+	ab->a = 1;
+	return;
+}
+/*
+ * check-name: Smatch implied #2
+ * check-command: smatch --spammy sm_implied2.c
+ *
+ * check-output-start
+sm_implied2.c:28 func() error: potentially dereferencing uninitialized 'aa'.
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:08 2018
+++ new/usr/src/tools/smatch/src/validation/sm_implied3.c	Fri Dec 21 15:01:08 2018
@@ -0,0 +1,36 @@
+#define NULL ((void *)0)
+
+struct ture {
+	int *a;
+};
+
+struct ture *b;
+struct ture *c;
+
+void func (void)
+{
+	struct ture *ab;
+	int ret = 0;
+
+	if (b) {
+		ret = -1;
+		goto foo;
+	}
+
+	if (c) {}
+
+	ab = some_func();
+	if (NULL == ab) {
+		ret = -1;
+		goto foo;
+	}
+foo:
+	if (ret) {
+		return;
+	}
+	ab->a = 1;
+}
+/*
+ * check-name: Smatch implied #3
+ * check-command: smatch sm_implied3.c
+ */
--- /dev/null	Fri Dec 21 15:01:08 2018
+++ new/usr/src/tools/smatch/src/validation/sm_implied4.c	Fri Dec 21 15:01:08 2018
@@ -0,0 +1,35 @@
+void _spin_lock(int name);
+void _spin_unlock(int name);
+
+void frob(void){}
+int a;
+int b;
+int c;
+int func (void)
+{
+	int mylock = 1;
+	int mylock2 = 2;
+
+	if (a == 3)
+	      	_spin_lock(mylock);
+	if (b)
+		frob();
+	if (a == 3)
+	      	_spin_unlock(mylock);
+	if (a)
+	      	_spin_lock(mylock);
+	if (c)
+		return 0;
+	if (!!a)
+	      	_spin_unlock(mylock);
+	return 0;
+}
+
+/*
+ * check-name: Smatch implied #4
+ * check-command: smatch --project=kernel --spammy sm_implied4.c
+ *
+ * check-output-start
+sm_implied4.c:22 func() warn: 'spin_lock:mylock' is sometimes locked here and sometimes unlocked.
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:08 2018
+++ new/usr/src/tools/smatch/src/validation/sm_implied5.c	Fri Dec 21 15:01:08 2018
@@ -0,0 +1,27 @@
+struct ture {
+	int a;
+};
+
+int out_a;
+
+void func (void)
+{
+	struct ture *aa;
+	int a = 0;
+
+	if (out_a) {	
+		aa = returns_nonnull();
+		a = something();
+	}
+	if (a)
+		aa->a = 1;
+	aa->a = 0xF00D;
+}
+/*
+ * check-name: Smatch implied #5
+ * check-command: smatch --spammy sm_implied5.c
+ *
+ * check-output-start
+sm_implied5.c:18 func() error: potentially dereferencing uninitialized 'aa'.
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:08 2018
+++ new/usr/src/tools/smatch/src/validation/sm_implied6.c	Fri Dec 21 15:01:08 2018
@@ -0,0 +1,41 @@
+struct foo {
+	int a;
+};
+
+struct foo *a;
+struct foo *b;
+struct foo *c;
+struct foo *d;
+int x, y, z;
+
+void func (void)
+{
+	a = 0;
+	b = 0;
+	c = 0;
+	d = 0;
+
+	if (x)
+		a = returns_nonnull();
+	else
+		b = returns_nonnull();
+	if (y)
+		a = returns_nonnull();
+	else
+		c = returns_nonnull();
+	__smatch_extra_values();
+	if (x || y) {
+		a->a = 1;
+		b->a = 2;
+	}else {
+		c->a = 3;
+	}
+}
+/*
+ * check-name: Smatch implied #6
+ * check-command: smatch --spammy sm_implied6.c
+ *
+ * check-output-start
+sm_implied6.c:29 func() error: potential NULL dereference 'b'.
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:08 2018
+++ new/usr/src/tools/smatch/src/validation/sm_implied7.c	Fri Dec 21 15:01:08 2018
@@ -0,0 +1,22 @@
+#include "check_debug.h"
+int a, b, c;
+int frob(void) {
+	if (a && b != 1)
+		return;
+
+	__smatch_value("a");
+	if (b == 0 && c) {
+		__smatch_value("a");
+	}
+	__smatch_value("a");
+}
+/*
+ * check-name: Smatch implied #7
+ * check-command: smatch -I.. sm_implied7.c
+ *
+ * check-output-start
+sm_implied7.c:7 frob() a = s32min-s32max
+sm_implied7.c:9 frob() a = 0
+sm_implied7.c:11 frob() a = s32min-s32max
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:08 2018
+++ new/usr/src/tools/smatch/src/validation/sm_implied8.c	Fri Dec 21 15:01:08 2018
@@ -0,0 +1,38 @@
+#include "check_debug.h"
+
+void frob();
+
+int test, test2;
+
+int x;
+void func (void)
+{
+	if (({int test = !!x; frob(); frob(); frob(); test;}))
+		__smatch_value("x");
+	else
+		__smatch_value("x");
+	if (test)
+		__smatch_value("x");
+	if (({test2 = !(x == 3); frob(); frob(); frob(); test2;}))
+		__smatch_value("x");
+	else
+		__smatch_value("x");
+	test = !!(x == 10);
+	if (!test)
+		__smatch_value("x");
+	__smatch_value("x");
+}
+/*
+ * check-name: smatch implied #8
+ * check-command: smatch -I.. sm_implied8.c
+ *
+ * check-output-start
+sm_implied8.c:11 func() x = s32min-(-1),1-s32max
+sm_implied8.c:13 func() x = 0
+sm_implied8.c:15 func() x = s32min-(-1),1-s32max
+sm_implied8.c:17 func() x = s32min-2,4-s32max
+sm_implied8.c:19 func() x = 3
+sm_implied8.c:22 func() x = s32min-9,11-s32max
+sm_implied8.c:23 func() x = s32min-s32max
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:08 2018
+++ new/usr/src/tools/smatch/src/validation/sm_implied9.c	Fri Dec 21 15:01:08 2018
@@ -0,0 +1,34 @@
+#include "check_debug.h"
+
+void frob(void){}
+
+void func(int y)
+{
+	int test2;
+
+	if (({int test2 = !!(y < 0 || y >= 10); frob(); frob(); frob(); test2;}))
+		__smatch_value("y");
+	else
+		__smatch_value("y");
+
+	test2 = (y < 3 || y >= 5);
+	if (test2)
+		__smatch_value("y");
+	else
+		__smatch_value("y");
+
+	if (({int test3 = y < -98; frob(); frob(); frob(); test3;}))
+		__smatch_value("y");
+}
+/*
+ * check-name: smatch implied #9
+ * check-command: smatch -I.. sm_implied9.c
+ *
+ * check-output-start
+sm_implied9.c:10 func() y = s32min-(-1),10-s32max
+sm_implied9.c:12 func() y = 0-9
+sm_implied9.c:16 func() y = s32min-2,5-s32max
+sm_implied9.c:18 func() y = 3-4
+sm_implied9.c:21 func() y = s32min-(-99)
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:08 2018
+++ new/usr/src/tools/smatch/src/validation/sm_impossible1.c	Fri Dec 21 15:01:08 2018
@@ -0,0 +1,25 @@
+#include "check_debug.h"
+
+int zero(void)
+{
+	return 0;
+}
+
+
+int main(unsigned int x, unsigned int y)
+{
+	if (zero())
+		__smatch_states("register_impossible_return");
+	else
+		__smatch_states("register_impossible_return");
+}
+
+/*
+ * check-name: smatch impossible #1
+ * check-command: smatch -I.. sm_impossible1.c
+ *
+ * check-output-start
+sm_impossible1.c:12 main() [register_impossible_return] 'impossible' = 'impossible'
+sm_impossible1.c:14 main() register_impossible_return: no states
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:08 2018
+++ new/usr/src/tools/smatch/src/validation/sm_impossible2.c	Fri Dec 21 15:01:08 2018
@@ -0,0 +1,25 @@
+#include "check_debug.h"
+
+int one(void)
+{
+	return 1;
+}
+
+
+int main(unsigned int x, unsigned int y)
+{
+	if (one())
+		__smatch_states("register_impossible_return");
+	else
+		__smatch_states("register_impossible_return");
+}
+
+/*
+ * check-name: smatch impossible #2
+ * check-command: smatch -I.. sm_impossible2.c
+ *
+ * check-output-start
+sm_impossible2.c:12 main() register_impossible_return: no states
+sm_impossible2.c:14 main() [register_impossible_return] 'impossible' = 'impossible'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:08 2018
+++ new/usr/src/tools/smatch/src/validation/sm_impossible3.c	Fri Dec 21 15:01:08 2018
@@ -0,0 +1,29 @@
+#include "check_debug.h"
+
+int frob(void);
+
+int main(void)
+{
+	int x;
+
+	x = frob();
+
+	if (x != -28)
+		return;
+
+	if (x != -28 && x != -30)
+		__smatch_implied(x);
+	__smatch_implied(x);
+
+	return 0;
+}
+
+/*
+ * check-name: smatch impossible #3
+ * check-command: smatch -I.. sm_impossible3.c
+ *
+ * check-output-start
+sm_impossible3.c:15 main() implied: x = ''
+sm_impossible3.c:16 main() implied: x = '(-28)'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:08 2018
+++ new/usr/src/tools/smatch/src/validation/sm_indirection1.c	Fri Dec 21 15:01:08 2018
@@ -0,0 +1,22 @@
+#include "check_debug.h"
+
+int a;
+
+int frob(int size)
+{
+	int *p = &a;
+
+	*p = 42;
+	__smatch_implied(a);
+
+	return 0;
+}
+
+/*
+ * check-name: smatch: pointer indirection #1
+ * check-command: smatch -p=kernel -I.. sm_indirection1.c
+ *
+ * check-output-start
+sm_indirection1.c:10 frob() implied: a = '42'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:08 2018
+++ new/usr/src/tools/smatch/src/validation/sm_indirection2.c	Fri Dec 21 15:01:08 2018
@@ -0,0 +1,42 @@
+#include "check_debug.h"
+
+struct foo {
+	int a, b, c;
+};
+
+struct bar {
+	struct foo *foo;
+};
+
+struct foo *get_foo(struct bar *bar)
+{
+	return bar->foo;
+}
+
+void frob(struct bar *bar)
+{
+	struct foo *f = bar->foo;
+	f->a = 5;
+}
+
+int test(struct bar *bar)
+{
+	struct foo *f = get_foo(bar);
+
+	f->a = 1;
+	frob(bar);
+	__smatch_implied(bar->foo->a);
+	__smatch_implied(f->a);
+
+	return 0;
+}
+
+/*
+ * check-name: smatch: indirection #2
+ * check-command: smatch -I.. sm_indirection2.c
+ *
+ * check-output-start
+sm_indirection2.c:28 test() implied: bar->foo->a = '5'
+sm_indirection2.c:29 test() implied: f->a = '5'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:09 2018
+++ new/usr/src/tools/smatch/src/validation/sm_initializer.c	Fri Dec 21 15:01:09 2018
@@ -0,0 +1,37 @@
+#include "check_debug.h"
+
+struct bar {
+	int a, b, c;
+};
+
+struct foo {
+	struct bar bar;
+	int x, y, z;
+};
+
+int test(int size)
+{
+	struct foo foo = {
+		.bar.a = 42,
+		.bar.b = 43,
+		-1,
+	};
+	__smatch_implied(foo.bar.b);
+	__smatch_implied(foo.bar.c);
+	__smatch_implied(foo.x);
+	__smatch_implied(foo.y);
+
+	return 0;
+}
+
+/*
+ * check-name: smatch: nested initializer
+ * check-command: smatch -I.. sm_initializer.c
+ *
+ * check-output-start
+sm_initializer.c:19 test() implied: foo.bar.b = '43'
+sm_initializer.c:20 test() implied: foo.bar.c = '0'
+sm_initializer.c:21 test() implied: foo.x = '(-1)'
+sm_initializer.c:22 test() implied: foo.y = '0'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:09 2018
+++ new/usr/src/tools/smatch/src/validation/sm_inline1.c	Fri Dec 21 15:01:09 2018
@@ -0,0 +1,41 @@
+#include <stdio.h>
+#include <string.h>
+#include "check_debug.h"
+
+int frob(int *x)
+{
+	*x = *x * 3;
+	return 0;
+}
+
+int *x;
+int y;
+int main(void)
+{
+	*x = 1;
+	frob(x);
+	__smatch_implied(*x);
+	frob(x);
+	__smatch_implied(*x);
+
+	y = 2;
+	frob(&y);
+	__smatch_implied(y);
+	frob(&y);
+	__smatch_implied(y);
+
+	return 0;
+}
+
+
+/*
+ * check-name: smatch: inline #1
+ * check-command: smatch -I.. sm_inline1.c
+ *
+ * check-output-start
+sm_inline1.c:17 main() implied: *x = '3'
+sm_inline1.c:19 main() implied: *x = '9'
+sm_inline1.c:23 main() implied: y = '6'
+sm_inline1.c:25 main() implied: y = '18'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:09 2018
+++ new/usr/src/tools/smatch/src/validation/sm_inline2.c	Fri Dec 21 15:01:09 2018
@@ -0,0 +1,28 @@
+#include <stdio.h>
+#include <string.h>
+#include "check_debug.h"
+
+int frob(int *x)
+{
+	*x = *x * 3;
+	return 0;
+}
+
+int *x;
+int main(void)
+{
+	frob(x);
+	if (x)
+		return 1;
+	return 0;
+}
+
+
+/*
+ * check-name: smatch: inline #2
+ * check-command: smatch -I.. sm_inline2.c
+ *
+ * check-output-start
+sm_inline2.c:15 main() warn: variable dereferenced before check 'x' (see line 14)
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:09 2018
+++ new/usr/src/tools/smatch/src/validation/sm_inline3.c	Fri Dec 21 15:01:09 2018
@@ -0,0 +1,39 @@
+#include "check_debug.h"
+
+void memset(void *p, char pat, int size);
+
+struct foo {
+	int a, b;
+};
+
+void my_func(struct foo *p)
+{
+	memset(p, 0, sizeof(*p));
+	p->a = 1;
+}
+
+struct foo *my_pointer;
+
+void test(void)
+{
+	struct foo foo;
+
+	my_func(my_pointer);
+	my_func(&foo);
+	__smatch_implied(my_pointer->a);
+	__smatch_implied(my_pointer->b);
+	__smatch_implied(foo.a);
+	__smatch_implied(foo.b);
+}
+
+/*
+ * check-name: smatch: inline #3
+ * check-command: smatch -I.. sm_inline3.c
+ *
+ * check-output-start
+sm_inline3.c:23 test() implied: my_pointer->a = '1'
+sm_inline3.c:24 test() implied: my_pointer->b = '0'
+sm_inline3.c:25 test() implied: foo.a = '1'
+sm_inline3.c:26 test() implied: foo.b = '0'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:09 2018
+++ new/usr/src/tools/smatch/src/validation/sm_locking.c	Fri Dec 21 15:01:09 2018
@@ -0,0 +1,39 @@
+void _spin_lock(int name);
+void _spin_unlock(int name);
+
+int a, b, c;
+
+int func (void)
+{
+	int mylock = 1;
+	int mylock2 = 1;
+	int mylock3 = 1;
+
+	if (a) {
+		return;
+	}
+
+	_spin_lock(mylock);
+	_spin_unlock(mylock);
+
+	if (b) {
+		_spin_unlock(mylock2);
+		return;
+	}
+
+	if (c)
+		_spin_lock(mylock3);
+	return;
+}
+/*
+ * check-name: Smatch locking #1
+ * check-command: smatch --project=kernel --spammy sm_locking.c
+ *
+ * check-output-start
+sm_locking.c:26 func() warn: 'spin_lock:mylock3' is sometimes locked here and sometimes unlocked.
+sm_locking.c:26 func() warn: inconsistent returns 'spin_lock:mylock2'.
+  Locked on:   line 13
+               line 26
+  Unlocked on: line 21
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:09 2018
+++ new/usr/src/tools/smatch/src/validation/sm_locking2.c	Fri Dec 21 15:01:09 2018
@@ -0,0 +1,39 @@
+void _spin_lock(int name);
+void _spin_unlock(int name);
+int _spin_trylock(int name);
+
+int a;
+int b;
+int func (void)
+{
+	int mylock = 1;
+	int mylock2 = 1;
+	int mylock3 = 1;
+
+	if (!_spin_trylock(mylock)) {
+		return;
+	}
+
+	_spin_unlock(mylock);
+	_spin_unlock(mylock2);
+
+	if (a)
+		_spin_unlock(mylock);
+	_spin_lock(mylock2);
+
+	if (!_spin_trylock(mylock3))
+		return;
+	return;
+}
+/*
+ * check-name: Smatch locking #2
+ * check-command: smatch --project=kernel sm_locking2.c
+ *
+ * check-output-start
+sm_locking2.c:21 func() error: double unlock 'spin_lock:mylock'
+sm_locking2.c:26 func() warn: inconsistent returns 'spin_lock:mylock3'.
+  Locked on:   line 26
+  Unlocked on: line 14
+               line 25
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:09 2018
+++ new/usr/src/tools/smatch/src/validation/sm_locking3.c	Fri Dec 21 15:01:09 2018
@@ -0,0 +1,33 @@
+int _spin_trylock(int name);
+void _spin_lock(int name);
+void _spin_unlock(int name);
+
+int func (void)
+{
+	int mylock = 1;
+
+	if (!({frob(); frob(); _spin_trylock(mylock);})) 
+		return;
+
+	frob();
+	_spin_unlock(mylock);
+
+	if (((_spin_trylock(mylock)?1:0)?1:0))
+		return;
+	frob_somemore();
+	_spin_unlock(mylock);
+
+	return;
+}
+/*
+ * check-name: Smatch locking #3
+ * check-command: smatch --project=kernel sm_locking3.c
+ *
+ * check-output-start
+sm_locking3.c:18 func() error: double unlock 'spin_lock:mylock'
+sm_locking3.c:20 func() warn: inconsistent returns 'spin_lock:mylock'.
+  Locked on:   line 16
+  Unlocked on: line 10
+               line 20
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:09 2018
+++ new/usr/src/tools/smatch/src/validation/sm_locking4.c	Fri Dec 21 15:01:09 2018
@@ -0,0 +1,36 @@
+void _spin_lock(int name);
+void _spin_unlock(int name);
+
+void frob(void){}
+int a;
+int b;
+void func (void)
+{
+	int mylock = 1;
+	int mylock2 = 2;
+
+	if (1)
+	      	_spin_unlock(mylock);
+	frob();
+	if (a)
+		return;
+	if (!0)
+	      	_spin_lock(mylock);
+	if (0)
+	      	_spin_unlock(mylock);
+	if (b)
+		return;
+	if (!1)
+	      	_spin_lock(mylock);
+}
+/*
+ * check-name: Smatch locking #4
+ * check-command: smatch --project=kernel sm_locking4.c
+ *
+ * check-output-start
+sm_locking4.c:23 func() warn: inconsistent returns 'spin_lock:mylock'.
+  Locked on:   line 22
+               line 23
+  Unlocked on: line 16
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:09 2018
+++ new/usr/src/tools/smatch/src/validation/sm_locking6.c	Fri Dec 21 15:01:09 2018
@@ -0,0 +1,45 @@
+int __raw_local_irq_save();
+int _spin_trylock(int x);
+int raw_local_irq_restore(flags);
+
+#define spin_trylock_irqsave(lock, flags) \
+({ \
+        (flags) = __raw_local_irq_save(); \
+        _spin_trylock(lock) ? 1 : ({ raw_local_irq_restore(flags);  0; }); \
+})
+
+void _spin_unlock_irqrestore(int lock, int flags);
+
+int zzz;
+
+void func (void)
+{
+	int lock = 1;
+	int flags = 1;
+
+	if (!spin_trylock_irqsave(lock, flags))
+		return;
+	_spin_unlock_irqrestore(lock, flags);
+	if (zzz)
+		return;
+	if (spin_trylock_irqsave(lock, flags))
+		return;
+	return;
+}
+/*
+ * check-name: Smatch locking #6
+ * check-command: smatch -p=kernel sm_locking6.c
+ *
+ * check-output-start
+sm_locking6.c:27 func() warn: inconsistent returns 'irqsave:flags'.
+  Locked on:   line 26
+  Unlocked on: line 21
+               line 24
+               line 27
+sm_locking6.c:27 func() warn: inconsistent returns 'spin_lock:lock'.
+  Locked on:   line 26
+  Unlocked on: line 21
+               line 24
+               line 27
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:09 2018
+++ new/usr/src/tools/smatch/src/validation/sm_locking7.c	Fri Dec 21 15:01:09 2018
@@ -0,0 +1,37 @@
+#include "check_debug.h"
+
+unsigned long arch_local_irq_save();
+void arch_local_irq_restore(unsigned long flags);
+int spin_trylock();
+void frob();
+
+void func(int *y)
+{
+	int lock;
+	unsigned long flags;
+
+	if (({
+		int __ret;
+		flags = arch_local_irq_save();
+		__ret = spin_trylock(&lock);
+		if (!__ret)
+			arch_local_irq_restore(flags);
+		__ret;
+	    }))
+		return;
+	frob();
+}
+
+/*
+ * check-name: smatch locking #7
+ * check-command: smatch -p=kernel -I.. sm_locking7.c
+ *
+ * check-output-start
+sm_locking7.c:22 func() warn: inconsistent returns 'irqsave:flags'.
+  Locked on:   line 21
+  Unlocked on: line 22
+sm_locking7.c:22 func() warn: inconsistent returns 'spin_lock:&lock'.
+  Locked on:   line 21
+  Unlocked on: line 22
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:09 2018
+++ new/usr/src/tools/smatch/src/validation/sm_loops1.c	Fri Dec 21 15:01:09 2018
@@ -0,0 +1,37 @@
+#include "check_debug.h"
+
+void frob();
+
+void func(int *x)
+{
+	int a,b,c;
+
+	for (a = 0; a < 10; a++)
+		__smatch_value("a");
+	__smatch_value("a");
+	for (; a != 10; a++)
+		__smatch_value("a");
+	__smatch_value("a");
+	for (a = 0; a != 10; a++)
+		__smatch_value("a");
+	__smatch_value("a");
+	for (a = 0; a <= 10; a++)
+		__smatch_value("a");
+	__smatch_value("a");
+	return;
+}
+/*
+ * check-name: smatch loops #1
+ * check-command: smatch -I.. sm_loops1.c
+ *
+ * check-output-start
+sm_loops1.c:10 func() a = 0-9
+sm_loops1.c:11 func() a = 10
+sm_loops1.c:13 func() a = empty
+sm_loops1.c:14 func() a = 10
+sm_loops1.c:16 func() a = 0-9
+sm_loops1.c:17 func() a = 10
+sm_loops1.c:19 func() a = 0-10
+sm_loops1.c:20 func() a = 11
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:09 2018
+++ new/usr/src/tools/smatch/src/validation/sm_loops2.c	Fri Dec 21 15:01:09 2018
@@ -0,0 +1,44 @@
+#include "check_debug.h"
+
+int checker(void);
+
+int x;
+int y;
+void func(void)
+{
+	while (x--)
+		__smatch_value("x");
+	__smatch_value("x");
+	for (x = 0; x < y; x++) {
+		if (checker())
+			break;
+	}
+	__smatch_value("x");
+	while (x--)
+		__smatch_value("x");
+	__smatch_value("x");
+	x = 10;
+	while (x--)
+		__smatch_value("x");
+	__smatch_value("x");
+	x = 10;
+	while (--x)
+		__smatch_value("x");
+	__smatch_value("x");
+}
+/*
+ * check-name: smatch loops #1
+ * check-command: smatch -I.. sm_loops2.c
+ *
+ * check-output-start
+sm_loops2.c:10 func() x = s32min-s32max
+sm_loops2.c:11 func() x = s32min-s32max
+sm_loops2.c:16 func() x = 0-s32max
+sm_loops2.c:18 func() x = 0-s32max
+sm_loops2.c:19 func() x = (-1)
+sm_loops2.c:22 func() x = 0-9
+sm_loops2.c:23 func() x = (-1)
+sm_loops2.c:26 func() x = 1-9
+sm_loops2.c:27 func() x = 0
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:10 2018
+++ new/usr/src/tools/smatch/src/validation/sm_loops3.c	Fri Dec 21 15:01:10 2018
@@ -0,0 +1,30 @@
+#include "check_debug.h"
+
+int checker(void);
+
+int x;
+int i;
+void func(void)
+{
+	int ar[10];
+
+	if (i < 0)
+		return;
+	if(i == 0)
+		x = 11;
+	else
+		x = 1;
+
+	while(i--) {
+		__smatch_value("x");
+		ar[x] = 1;
+	}
+}
+/*
+ * check-name: smatch loops #3
+ * check-command: smatch -I.. sm_loops3.c
+ *
+ * check-output-start
+sm_loops3.c:19 func() x = 1
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:10 2018
+++ new/usr/src/tools/smatch/src/validation/sm_loops4.c	Fri Dec 21 15:01:10 2018
@@ -0,0 +1,30 @@
+#include "check_debug.h"
+
+char *some_func(void);
+
+int x,y;
+int i;
+void func(void)
+{
+	char *p;
+	char *p2;
+
+	if (x > 0)
+		p = some_func();
+	for (i = 0; i < x; i++)
+		*p = 'x';
+	*p = 'x';
+	if (y > 0)
+		p2 = some_func();
+	i = 0;
+	if (i < y)
+		*p2 = 'x';
+}
+/*
+ * check-name: smatch loops #4
+ * check-command: smatch -I.. sm_loops4.c
+ *
+ * check-output-start
+sm_loops4.c:16 func() error: potentially dereferencing uninitialized 'p'.
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:10 2018
+++ new/usr/src/tools/smatch/src/validation/sm_loops5.c	Fri Dec 21 15:01:10 2018
@@ -0,0 +1,21 @@
+#include "check_debug.h"
+
+int frob(void);
+
+int a, b, c;
+void test(void)
+{
+	a = 0;
+	do {
+		frob();
+	} while (a++ < 3);
+	__smatch_implied(a);
+}
+/*
+ * check-name: smatch loops #5
+ * check-command: smatch -I.. sm_loops5.c
+ *
+ * check-output-start
+sm_loops5.c:12 test() implied: a = '4'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:10 2018
+++ new/usr/src/tools/smatch/src/validation/sm_loops6.c	Fri Dec 21 15:01:10 2018
@@ -0,0 +1,52 @@
+#include "check_debug.h"
+
+extern int xxx;
+
+int test(struct bar *bar)
+{
+	int a = 10, b = 10, c = 10, d = 10, e = 10;
+
+	while (a--)
+		__smatch_implied(a);
+	__smatch_implied(a);
+
+	while (--b)
+		__smatch_implied(b);
+	__smatch_implied(b);
+
+	while (--c >= 0)
+		__smatch_implied(c);
+	__smatch_implied(c);
+
+	while (d-- >= 0)
+		__smatch_implied(d);
+	__smatch_implied(d);
+
+	while (e-- >= 0) {
+		if (xxx)
+			break;
+		__smatch_implied(e);
+	}
+	__smatch_implied(e);
+
+	return 0;
+}
+
+
+/*
+ * check-name: smatch loops #6
+ * check-command: smatch -I.. sm_loops6.c
+ *
+ * check-output-start
+sm_loops6.c:10 test() implied: a = '0-9'
+sm_loops6.c:11 test() implied: a = '(-1)'
+sm_loops6.c:14 test() implied: b = '1-9'
+sm_loops6.c:15 test() implied: b = '0'
+sm_loops6.c:18 test() implied: c = '0-9'
+sm_loops6.c:19 test() implied: c = '(-1)'
+sm_loops6.c:22 test() implied: d = '(-1)-9'
+sm_loops6.c:23 test() implied: d = '(-2)'
+sm_loops6.c:28 test() implied: e = '(-1)-9'
+sm_loops6.c:30 test() implied: e = '(-2)-9'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:10 2018
+++ new/usr/src/tools/smatch/src/validation/sm_macros.c	Fri Dec 21 15:01:10 2018
@@ -0,0 +1,32 @@
+#include "check_debug.h"
+
+#define add(x, y) x + y
+#define sub(x, y) x - y
+
+int x;
+void func(int *p)
+{
+	int a = 1;
+	int b = 2;
+
+	x = 4 * add(2, 3);
+	x = 4 + add(2, 3);
+	x = 4 * add(2, 3) * 8;
+	x = add(2, 3) * 4;
+	x = add(2, 3) - 4;
+	x = -sub(2, 3);
+	x = sub(2, 3)++;
+}
+/*
+ * check-name: Smatch macro precedence bugs
+ * check-command: smatch -I.. sm_macros.c
+ *
+ * check-output-start
+sm_macros.c:12 func() warn: the 'add' macro might need parens
+sm_macros.c:14 func() warn: the 'add' macro might need parens
+sm_macros.c:14 func() warn: the 'add' macro might need parens
+sm_macros.c:15 func() warn: the 'add' macro might need parens
+sm_macros.c:17 func() warn: the 'sub' macro might need parens
+sm_macros.c:18 func() warn: the 'sub' macro might need parens
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:10 2018
+++ new/usr/src/tools/smatch/src/validation/sm_math1.c	Fri Dec 21 15:01:10 2018
@@ -0,0 +1,37 @@
+#include "check_debug.h"
+
+int something();
+
+void func(void)
+{
+	int x = 3;
+	int y = 42;
+	int z = 7;
+
+	x--;
+	y -= 100;
+	__smatch_value("y");
+	while (something()) {
+		y++;
+		__smatch_value("y");
+	}
+	z += something();
+	__smatch_value("z");
+	__smatch_value("x");
+label_I1:
+	x--;
+	__smatch_value("x");
+	goto label_I1;
+}
+/*
+ * check-name: smatch math test #1
+ * check-command: smatch -I.. sm_math1.c
+ *
+ * check-output-start
+sm_math1.c:13 func() y = (-58)
+sm_math1.c:16 func() y = (-57)-s32max
+sm_math1.c:19 func() z = s32min-s32max
+sm_math1.c:20 func() x = 2
+sm_math1.c:23 func() x = s32min-1
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:10 2018
+++ new/usr/src/tools/smatch/src/validation/sm_math2.c	Fri Dec 21 15:01:10 2018
@@ -0,0 +1,25 @@
+#include "check_debug.h"
+
+unsigned char buf[2];
+
+void test(void)
+{
+	int a = buf[1];
+	int b = buf[0] << 8;
+	int c = (buf[0] << 8) | buf[1];
+
+	__smatch_implied(a);
+	__smatch_implied(b);
+	__smatch_implied(c);
+}
+
+/*
+ * check-name: smatch math #2
+ * check-command: smatch -I.. sm_math2.c
+ *
+ * check-output-start
+sm_math2.c:11 test() implied: a = '0-255'
+sm_math2.c:12 test() implied: b = '0,256-65280'
+sm_math2.c:13 test() implied: c = '0-u16max'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:10 2018
+++ new/usr/src/tools/smatch/src/validation/sm_memleak2.c	Fri Dec 21 15:01:10 2018
@@ -0,0 +1,19 @@
+#include <stdlib.h>
+
+void func (void)
+{
+	void *ptr;
+
+	ptr = malloc(42);
+	ptr = (void *) 0;
+
+	return;
+}
+/*
+ * check-name: leak test #2
+ * check-command: smatch sm_memleak2.c
+ *
+ * check-output-start
+sm_memleak2.c:8 func() warn: overwrite may leak 'ptr'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:10 2018
+++ new/usr/src/tools/smatch/src/validation/sm_memory.c	Fri Dec 21 15:01:10 2018
@@ -0,0 +1,35 @@
+void *kmalloc(void);
+void free(void *);
+
+struct ture {
+	int *a;
+};
+
+struct ture *a;
+struct ture *b;
+void func (void)
+{
+	struct ture *aa;
+	struct ture *ab;
+	struct ture *ac;
+	aa = kmalloc();
+	ab = kmalloc();
+	ac = kmalloc();
+
+	a = aa;
+	if (ab) {
+		free(ab);
+		return;
+	}
+	free(ac);
+	return;
+}
+/*
+ * check-name: leak test #1
+ * check-command: smatch sm_memory.c
+ *
+ * check-output-start
+sm_memory.c:22 func() warn: possible memory leak of 'ac'
+sm_memory.c:22 func() error: memory leak of 'ac'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:10 2018
+++ new/usr/src/tools/smatch/src/validation/sm_mod.c	Fri Dec 21 15:01:10 2018
@@ -0,0 +1,38 @@
+#include "check_debug.h"
+
+int a, b;
+
+int frob(int size)
+{
+	if (a <= 0 || a > 10)
+		return;
+	if (a % 4) {
+		__smatch_implied(a);
+	} else {
+		__smatch_implied(a);
+	}
+
+	if (b <= 0 || b > 100)
+		return;
+	if (b % 4) {
+		__smatch_implied(b);
+	} else {
+		__smatch_implied(b);
+	}
+
+
+
+	return 0;
+}
+
+/*
+ * check-name: smatch mod condition
+ * check-command: smatch -I.. sm_mod.c
+ *
+ * check-output-start
+sm_mod.c:10 frob() implied: a = '1-10'
+sm_mod.c:12 frob() implied: a = '4,8'
+sm_mod.c:18 frob() implied: b = '1-99'
+sm_mod.c:20 frob() implied: b = '4-100'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:10 2018
+++ new/usr/src/tools/smatch/src/validation/sm_mtag1.c	Fri Dec 21 15:01:10 2018
@@ -0,0 +1,52 @@
+#include <stdio.h>
+#include "check_debug.h"
+
+static int xxx = 234;
+
+struct foo {
+	int a, b, c;
+	int (*func)(struct foo *p);
+};
+
+static int frob1(struct foo *p)
+{
+	printf("%d\n", p->a);
+	__smatch_implied(p->a);
+	return p->a + 1;
+}
+static int frob2(struct foo *p)
+{
+	printf("%d\n", p->a);
+	__smatch_implied(p->a);
+	return p->a + 1;
+}
+
+static struct foo one_struct = {
+	.a = 1,
+	.func = frob1,
+};
+static struct foo two_struct = {
+	.a = 2,
+	.func = frob2,
+};
+
+int main(void)
+{
+	struct foo *p = &one_struct;
+	int ret;
+
+	ret = p->func(p);
+//	__smatch_implied(ret);
+
+	return 0;
+}
+
+/*
+ * check-name: smatch mtag #1
+ * check-command: validation/smatch_db_test.sh -I.. sm_mtag1.c
+ *
+ * check-output-start
+sm_mtag1.c:14 frob1() implied: p->a = '1'
+sm_mtag1.c:20 frob2() implied: p->a = '2'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:10 2018
+++ new/usr/src/tools/smatch/src/validation/sm_mtag2.c	Fri Dec 21 15:01:10 2018
@@ -0,0 +1,54 @@
+#include <stdio.h>
+#include "check_debug.h"
+
+struct foo {
+	int a, b, c;
+	int (*func)(int *p);
+	void (*func2)(int a);
+	void *data;
+};
+
+static int frob1(int *val)
+{
+	__smatch_implied(*val);
+	return *val + 1;
+}
+
+static int frob2(int *val)
+{
+	__smatch_implied(*val);
+	return *val + 1;
+}
+
+static struct foo one_struct = {
+	.a = 1,
+	.func = frob1,
+};
+
+static struct foo two_struct = {
+	.a = 2,
+	.func = frob2,
+};
+
+struct foo *unknown(void);
+struct foo *p;
+
+int main(void)
+{
+	int ret;
+
+	p = unknown();
+	ret = p->func(&p->a);
+
+	return 0;
+}
+
+/*
+ * check-name: smatch mtag #2
+ * check-command: validation/smatch_db_test.sh -I.. sm_mtag2.c
+ *
+ * check-output-start
+sm_mtag2.c:13 frob1() implied: *val = '1'
+sm_mtag2.c:19 frob2() implied: *val = '2'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:10 2018
+++ new/usr/src/tools/smatch/src/validation/sm_mtag3.c	Fri Dec 21 15:01:10 2018
@@ -0,0 +1,29 @@
+#include "check_debug.h"
+
+int x;
+int array[10];
+
+int main(void)
+{
+	__smatch_implied(&x);
+	__smatch_implied((unsigned long)(array + 1) - (unsigned long)array);
+	__smatch_implied(array + 1 - array);
+	__smatch_implied(array + 1);
+	__smatch_implied((int *)0 + 1);
+
+	return 0;
+}
+
+
+/*
+ * check-name: smatch mtag #3
+ * check-command: smatch -I.. sm_mtag3.c
+ *
+ * check-output-start
+sm_mtag3.c:8 main() implied: &x = '799717014380380160'
+sm_mtag3.c:9 main() implied: (array[1]) - array = '4'
+sm_mtag3.c:10 main() implied: array[1] - array = '1'
+sm_mtag3.c:11 main() implied: array[1] = '7934625272050024452'
+sm_mtag3.c:12 main() implied: 0 + 1 = '4'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:11 2018
+++ new/usr/src/tools/smatch/src/validation/sm_mtag4.c	Fri Dec 21 15:01:11 2018
@@ -0,0 +1,52 @@
+#include <stdio.h>
+#include "check_debug.h"
+
+struct foo {
+	int a, b, c;
+	int (*func)(int *p);
+	void (*func2)(int a);
+	void *data;
+};
+
+static void frob_int1(int val)
+{
+	__smatch_implied(val);
+}
+
+static void frob_int2(int val)
+{
+	__smatch_implied(val);
+}
+
+static struct foo one_struct = {
+	.b = 41,
+	.func2 = frob_int1,
+};
+
+static struct foo two_struct = {
+	.b = 42,
+	.func2 = frob_int2,
+};
+
+struct foo *unknown(void);
+struct foo *p;
+
+int main(void)
+{
+	int ret;
+
+	p = unknown();
+	p->func2(p->b);
+
+	return 0;
+}
+
+/*
+ * check-name: smatch mtag #4
+ * check-command: validation/smatch_db_test.sh -I.. sm_mtag4.c
+ *
+ * check-output-start
+sm_mtag4.c:13 frob_int1() implied: val = '41'
+sm_mtag4.c:18 frob_int2() implied: val = '42'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:11 2018
+++ new/usr/src/tools/smatch/src/validation/sm_mtag5.c	Fri Dec 21 15:01:11 2018
@@ -0,0 +1,37 @@
+#include <stdio.h>
+#include "check_debug.h"
+
+int x = 42;
+
+struct foo {
+	int a, b, c;
+};
+struct foo aaa = {
+	.a = 1, .b = 2, .c = 3,
+};
+
+int array[10];
+
+int main(void)
+{
+	__smatch_implied(&x);
+	__smatch_implied(&aaa);
+	__smatch_implied(&aaa.b);
+	__smatch_implied(array);
+	__smatch_implied(&array[1]);
+
+	return 0;
+}
+
+/*
+ * check-name: smatch mtag #5
+ * check-command: smatch -I.. sm_mtag5.c
+ *
+ * check-output-start
+sm_mtag5.c:17 main() implied: &x = '799717014380380160'
+sm_mtag5.c:18 main() implied: &aaa = '126458562737565696'
+sm_mtag5.c:19 main() implied: &aaa.b = '126458562737565700'
+sm_mtag5.c:20 main() implied: array = '7934625272050024448'
+sm_mtag5.c:21 main() implied: &array[1] = '7934625272050024452'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:11 2018
+++ new/usr/src/tools/smatch/src/validation/sm_mtag6.c	Fri Dec 21 15:01:11 2018
@@ -0,0 +1,41 @@
+#include <stdio.h>
+#include "check_debug.h"
+
+int frob1(int *p)
+{
+	__smatch_implied(*p);
+}
+
+int frob2(int *p)
+{
+	__smatch_implied(*p);
+}
+
+int x = 42;
+
+struct foo {
+	int a, b, c;
+};
+struct foo aaa = {
+	.a = 1, .b = 2, .c = 3,
+};
+
+int array[10];
+
+int main(void)
+{
+	frob1(&x);
+	frob2(&aaa.b);
+
+	return 0;
+}
+
+/*
+ * check-name: smatch mtag #6
+ * check-command: validation/smatch_db_test.sh -I.. sm_mtag6.c
+ *
+ * check-output-start
+sm_mtag6.c:6 frob1() implied: *p = '42'
+sm_mtag6.c:11 frob2() implied: *p = '2'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:11 2018
+++ new/usr/src/tools/smatch/src/validation/sm_mtag7.c	Fri Dec 21 15:01:11 2018
@@ -0,0 +1,49 @@
+#include <stdio.h>
+#include "check_debug.h"
+
+struct foo {
+	int (*func)(struct foo *);
+	int a, b, c;
+	int *p;
+};
+
+int frob1(struct foo *p)
+{
+	__smatch_implied(*p->p);
+}
+
+int frob2(struct foo *p)
+{
+	__smatch_implied(*p->p);
+}
+
+int x = 42;
+int y = 43;
+
+struct foo aaa = {
+	.func = frob1,
+	.a = 1, .b = 2, .c = 3,
+	.p = &x,
+};
+struct foo bbb = {
+	.func = frob2,
+	.a = 10, .b = 11, .c = 13,
+	.p = &y,
+};
+
+int main(void)
+{
+	aaa.func(&aaa);
+	bbb.func(&bbb);
+	return 0;
+}
+
+/*
+ * check-name: smatch mtag #7
+ * check-command: validation/smatch_db_test.sh -I.. sm_mtag7.c
+ *
+ * check-output-start
+sm_mtag7.c:12 frob1() implied: *p->p = '42'
+sm_mtag7.c:17 frob2() implied: *p->p = '43'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:11 2018
+++ new/usr/src/tools/smatch/src/validation/sm_netdevice.c	Fri Dec 21 15:01:11 2018
@@ -0,0 +1,31 @@
+
+void kfree(void *);
+
+struct net_device {
+	char *name;
+};
+
+void func(void)
+{
+	struct net_device dev;
+	struct net_device *dev2 = &dev;
+	struct net_device **dev3 = &dev2;
+	struct net_device *deva[10];
+	struct net_device **devb[10];
+	struct net_device ***devc = devb;
+
+	kfree(dev2);
+	kfree(dev3);
+	kfree(deva[0]);
+	kfree(devb[0]);
+	kfree(devc[0]);
+}
+/*
+ * check-name: free_netdev() vs kfree()
+ * check-command: smatch -p=kernel sm_netdevice.c
+ *
+ * check-output-start
+sm_netdevice.c:17 func() error: use free_netdev() here instead of kfree(dev2)
+sm_netdevice.c:19 func() error: use free_netdev() here instead of kfree(deva[0])
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:11 2018
+++ new/usr/src/tools/smatch/src/validation/sm_null_deref.c	Fri Dec 21 15:01:11 2018
@@ -0,0 +1,52 @@
+#include "check_debug.h"
+
+struct foo {
+	int a;
+};
+
+struct foo *a;
+struct foo *b;
+struct foo *c;
+struct foo *d;
+
+static void func (void)
+{
+	struct foo *aa;
+	int ab = 0;
+	int ac = 1;
+
+	aa->a = 1;
+
+	if (a) {
+		a->a = 1;
+	}
+	a->a = 1;
+
+	if (a && b) {
+		b->a = 1;
+	}
+
+	if (a || b) {
+		b->a = 1;
+	}
+
+	if (c) {
+		ab = 1;
+	}
+
+	if (ab) {
+		c->a = 1;
+	}
+}
+/*
+ * check-name: Null Dereferences
+ * check-command: smatch --spammy -I.. sm_null_deref.c
+ *
+ * check-output-start
+sm_null_deref.c:18 func() error: potentially dereferencing uninitialized 'aa'.
+sm_null_deref.c:23 func() error: we previously assumed 'a' could be null (see line 20)
+sm_null_deref.c:25 func() warn: variable dereferenced before check 'a' (see line 23)
+sm_null_deref.c:30 func() error: we previously assumed 'b' could be null (see line 25)
+ * check-output-end
+ */
+
--- /dev/null	Fri Dec 21 15:01:11 2018
+++ new/usr/src/tools/smatch/src/validation/sm_null_deref2.c	Fri Dec 21 15:01:11 2018
@@ -0,0 +1,24 @@
+int *ptr;
+int x, y, z;
+void frob(void) {
+	if ((y && !ptr) || z)
+		return;
+	if (ptr) {
+		/* in the current version of smatch this erases
+		   the old implications.  Later version should 
+		   fix this.  --Dec 2 2009 */
+		x = *ptr;
+	}
+	if (!y && ptr)
+		*ptr = 0; // smatch used to print an error here.
+	if (!y)
+		*ptr = 1;
+}
+/*
+ * check-name: Dereferencing Undefined
+ * check-command: smatch sm_null_deref2.c
+ *
+ * check-output-start
+sm_null_deref2.c:15 frob() error: we previously assumed 'ptr' could be null (see line 12)
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:11 2018
+++ new/usr/src/tools/smatch/src/validation/sm_overflow.c	Fri Dec 21 15:01:11 2018
@@ -0,0 +1,27 @@
+struct field {                                                                                                               
+    int b[8];                                                                                                                
+};                                                                                                                           
+                                                                                                                             
+struct buffer {                                                                                                              
+    struct field a;                                                                                                          
+    int x;                                                                                                                   
+};                                                                                                                           
+                                                                                                                             
+int main(int argc, char* argv[])                                                                                             
+{                                                                                                                            
+    struct buffer b1;                                                                                                        
+    int i;                                                                                                                   
+                                                                                                                             
+    b1.a.b[10] = 1;                                                                                                          
+                                                                                                                             
+    return 42;                                                                                                               
+}                                                                                                                            
+                                                                                                                          
+/*
+ * check-name: Check array overflow
+ * check-command: smatch sm_overflow.c
+ *
+ * check-output-start
+sm_overflow.c:15 main() error: buffer overflow 'b1.a.b' 8 <= 10
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:11 2018
+++ new/usr/src/tools/smatch/src/validation/sm_overflow3.c	Fri Dec 21 15:01:11 2018
@@ -0,0 +1,29 @@
+#include "check_debug.h"
+
+void strcpy(char *to, char *from, int size);
+
+void func (char *a, char *b)
+{
+	char c[4];
+	char d[4];
+	char e[4];
+	char f[4];
+
+	b = "1234";
+	strcpy(a, b);
+	a[5] = '\0';
+	strcpy(c, b);
+	strcpy(d, "123");
+	strcpy(e, "1234");
+	strcpy(f, "12");
+	f[3] = '\0';
+}
+/*
+ * check-name: smatch strcpy overflow
+ * check-command: smatch -I.. sm_overflow3.c
+ *
+ * check-output-start
+sm_overflow3.c:15 func() error: strcpy() 'b' too large for 'c' (5 vs 4)
+sm_overflow3.c:17 func() error: strcpy() '"1234"' too large for 'e' (5 vs 4)
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:11 2018
+++ new/usr/src/tools/smatch/src/validation/sm_overflow4.c	Fri Dec 21 15:01:11 2018
@@ -0,0 +1,20 @@
+#include "check_debug.h"
+
+void strndup(char *to, int size);
+void strcpy(char *dest, char *src);
+
+void func (char *a, char *b)
+{
+	char c[5];
+
+	a = strndup(b, 5);
+	strcpy(c, a);
+}
+/*
+ * check-name: smatch strndup overflow
+ * check-command: smatch -I.. sm_overflow4.c
+ *
+ * check-output-start
+sm_overflow4.c:11 func() error: strcpy() 'a' too large for 'c' (6 vs 5)
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:11 2018
+++ new/usr/src/tools/smatch/src/validation/sm_overflow5.c	Fri Dec 21 15:01:11 2018
@@ -0,0 +1,21 @@
+#include "check_debug.h"
+
+void memdup(char *to, int size);
+void strcpy(char *dest, char *src);
+
+void func (char *a, char *b)
+{
+	char c[5];
+
+	a = memdup(b, 5);
+	strcpy(c, a);
+	a[5] = '\0';
+}
+/*
+ * check-name: smatch memdup overflow
+ * check-command: smatch -I.. sm_overflow5.c
+ *
+ * check-output-start
+sm_overflow5.c:12 func() error: buffer overflow 'a' 5 <= 5
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:11 2018
+++ new/usr/src/tools/smatch/src/validation/sm_overflow6.c	Fri Dec 21 15:01:11 2018
@@ -0,0 +1,29 @@
+#include "check_debug.h"
+
+int strlen(char *buf);
+void strcpy(char *dest, char *src);
+int snprintf(char *dest, int limit, char *format, char *str);
+int sprintf(char *dest, char *format, char *str);
+
+char *str;
+
+int main(void)
+{
+	char buf[10];
+	char buf1[10];
+
+	if (strlen(str) > 11)
+		return;
+	snprintf(buf, 11, "%s", str);
+	sprintf(buf1, "%s", str);
+}
+/*
+ * check-name: smatch overflow #6
+ * check-command: smatch -I.. sm_overflow6.c
+ *
+ * check-output-start
+sm_overflow6.c:17 main() error: snprintf() is printing too much 11 vs 10
+sm_overflow6.c:17 main() error: snprintf() chops off the last chars of 'str': 12 vs 11
+sm_overflow6.c:18 main() error: sprintf() copies too much data from 'str': 12 vs 10
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:12 2018
+++ new/usr/src/tools/smatch/src/validation/sm_pointer_assign.c	Fri Dec 21 15:01:12 2018
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include "check_debug.h"
+
+int *aaa, *bbb;
+
+int main(void)
+{
+	if (*aaa < 0 || *aaa > 34)
+		return -1;
+	bbb = aaa;
+	__smatch_implied(*bbb);
+
+	return 0;
+}
+
+/*
+ * check-name: smatch pointer assign
+ * check-command: smatch -I.. sm_pointer_assign.c
+ *
+ * check-output-start
+sm_pointer_assign.c:11 main() implied: *bbb = '0-34'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:12 2018
+++ new/usr/src/tools/smatch/src/validation/sm_precedence.c	Fri Dec 21 15:01:12 2018
@@ -0,0 +1,43 @@
+struct foo {
+	unsigned int x:1;
+};
+
+int frob();
+int a,b,c,d, x, y;
+struct foo *z;
+static int options_write(void)
+{
+	if (x & y == 0)
+		frob();
+	if (x | y == 0)
+		frob();
+	if (a == b & c == d)
+		frob();
+	if (a == c == d)
+		frob();
+	if (!a == b)
+		frob();
+	c = !a & b;
+	if (x + y == 0)
+		frob();
+	if (!a == !b)
+		frob();
+	if (!a == z->x)
+		frob();
+	if (!!a == b)
+		frob();
+
+}
+/*
+ * check-name: Smatch precedence check
+ * check-command: smatch sm_precedence.c
+ *
+ * check-output-start
+sm_precedence.c:10 options_write() warn: add some parenthesis here?
+sm_precedence.c:12 options_write() warn: add some parenthesis here?
+sm_precedence.c:14 options_write() warn: add some parenthesis here?
+sm_precedence.c:16 options_write() warn: add some parenthesis here?
+sm_precedence.c:18 options_write() warn: add some parenthesis here?
+sm_precedence.c:20 options_write() warn: add some parenthesis here?
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:12 2018
+++ new/usr/src/tools/smatch/src/validation/sm_range1.c	Fri Dec 21 15:01:12 2018
@@ -0,0 +1,29 @@
+struct ture {
+	int x;
+};
+
+struct ture *p;	
+struct ture *q;
+int xxx;
+
+int func (void)
+{
+
+	for (xxx = 0; xxx < 10; xxx++) {
+		if (p && q)
+			break;	
+	}
+// this needs two pass processing to work.
+//	if (xxx == 5)
+//		q->x = 1;
+	if (xxx == 10)
+		return;
+	p->x = 1;
+
+	return 0;
+}
+
+/*
+ * check-name: Implied Ranges #1
+ * check-command: smatch sm_range1.c
+ */
--- /dev/null	Fri Dec 21 15:01:12 2018
+++ new/usr/src/tools/smatch/src/validation/sm_range2.c	Fri Dec 21 15:01:12 2018
@@ -0,0 +1,43 @@
+#include "check_debug.h"
+int some_func();
+int a, b, c, d, e;
+int frob(void) {
+	if (a)
+		__smatch_value("a");
+	else
+		__smatch_value("a");
+	__smatch_value("a");
+	if (a) {
+		b = 0;
+		__smatch_value("b");
+	}
+	__smatch_value("b");
+	c = 0;
+	c = some_func();
+	__smatch_value("c");
+	if (d < -3 || d > 99)
+		return;
+	__smatch_value("d");
+	if (d) {
+		if (!e)
+			return;
+	}
+	__smatch_value("d");
+	__smatch_value("e");
+}
+/*
+ * check-name: Smatch range test #2
+ * check-command: smatch -I.. sm_range2.c
+ *
+ * check-output-start
+sm_range2.c:6 frob() a = s32min-(-1),1-s32max
+sm_range2.c:8 frob() a = 0
+sm_range2.c:9 frob() a = s32min-s32max
+sm_range2.c:12 frob() b = 0
+sm_range2.c:14 frob() b = s32min-s32max
+sm_range2.c:17 frob() c = s32min-s32max
+sm_range2.c:20 frob() d = (-3)-99
+sm_range2.c:25 frob() d = (-3)-99
+sm_range2.c:26 frob() e = s32min-s32max
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:12 2018
+++ new/usr/src/tools/smatch/src/validation/sm_range3.c	Fri Dec 21 15:01:12 2018
@@ -0,0 +1,85 @@
+#include "check_debug.h"
+
+int x;
+void func(void)
+{
+
+	if (x < 1)
+		__smatch_value("x");
+	else
+		__smatch_value("x");
+
+	if (12 < x)
+		__smatch_value("x");
+	else
+		__smatch_value("x");
+
+	if (x <= 23)
+		__smatch_value("x");
+	else
+		__smatch_value("x");
+
+	if (34 <= x)
+		__smatch_value("x");
+	else
+		__smatch_value("x");
+
+	if (x >= 45)
+		__smatch_value("x");
+	else
+		__smatch_value("x");
+
+	if (56 >= x)
+		__smatch_value("x");
+	else
+		__smatch_value("x");
+
+	if (x > 67)
+		__smatch_value("x");
+	else
+		__smatch_value("x");
+
+	if (78 > x)
+		__smatch_value("x");
+	else
+		__smatch_value("x");
+
+	if (89 == x)
+		__smatch_value("x");
+	else
+		__smatch_value("x");
+
+	if (100 != x)
+		__smatch_value("x");
+	else
+		__smatch_value("x");
+
+	return;
+}
+/*
+ * check-name: smatch range comparison
+ * check-command: smatch -I.. sm_range3.c
+ *
+ * check-output-start
+sm_range3.c:8 func() x = s32min-0
+sm_range3.c:10 func() x = 1-s32max
+sm_range3.c:13 func() x = 13-s32max
+sm_range3.c:15 func() x = s32min-12
+sm_range3.c:18 func() x = s32min-23
+sm_range3.c:20 func() x = 24-s32max
+sm_range3.c:23 func() x = 34-s32max
+sm_range3.c:25 func() x = s32min-33
+sm_range3.c:28 func() x = 45-s32max
+sm_range3.c:30 func() x = s32min-44
+sm_range3.c:33 func() x = s32min-56
+sm_range3.c:35 func() x = 57-s32max
+sm_range3.c:38 func() x = 68-s32max
+sm_range3.c:40 func() x = s32min-67
+sm_range3.c:43 func() x = s32min-77
+sm_range3.c:45 func() x = 78-s32max
+sm_range3.c:48 func() x = 89
+sm_range3.c:50 func() x = s32min-88,90-s32max
+sm_range3.c:53 func() x = s32min-99,101-s32max
+sm_range3.c:55 func() x = 100
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:12 2018
+++ new/usr/src/tools/smatch/src/validation/sm_range4.c	Fri Dec 21 15:01:12 2018
@@ -0,0 +1,37 @@
+#include "check_debug.h"
+
+int a, b, c;
+
+static int frob(void)
+{
+	if (a > 5) {
+		__smatch_value("a");
+		return;
+	}
+	if (b++ > 5) {
+		__smatch_value("b");
+		return;
+	}
+	if (++c > 5) {
+		__smatch_value("c");
+		return;
+	}
+	__smatch_value("a");
+	__smatch_value("b");
+	__smatch_value("c");
+}
+
+
+/*
+ * check-name: Smatch Range #4
+ * check-command: smatch -I.. sm_range4.c
+ *
+ * check-output-start
+sm_range4.c:8 frob() a = 6-s32max
+sm_range4.c:12 frob() b = 7-s32max
+sm_range4.c:16 frob() c = 6-s32max
+sm_range4.c:19 frob() a = s32min-5
+sm_range4.c:20 frob() b = s32min-6
+sm_range4.c:21 frob() c = s32min-5
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:12 2018
+++ new/usr/src/tools/smatch/src/validation/sm_range5.c	Fri Dec 21 15:01:12 2018
@@ -0,0 +1,22 @@
+#include "check_debug.h"
+
+int main(unsigned int x, unsigned int y)
+{
+	switch (x) {
+	case 0 ... 9:
+		__smatch_implied(x);
+		break;
+	default:
+		__smatch_implied(x);
+	}
+}
+
+/*
+ * check-name: smatch range #5
+ * check-command: smatch -I.. sm_range5.c
+ *
+ * check-output-start
+sm_range5.c:7 main() implied: x = '0-9'
+sm_range5.c:10 main() implied: x = '10-u32max'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:12 2018
+++ new/usr/src/tools/smatch/src/validation/sm_range6.c	Fri Dec 21 15:01:12 2018
@@ -0,0 +1,23 @@
+#include "check_debug.h"
+
+void func(void)
+{
+	long a = __smatch_rl("1-10+");
+	long b = __smatch_rl("0,+");
+	long c = __smatch_rl("10,23,45-+");
+
+	__smatch_implied(a);
+	__smatch_implied(b);
+	__smatch_implied(c);
+}
+
+/*
+ * check-name: smatch range #6
+ * check-command: smatch -I.. sm_range6.c
+ *
+ * check-output-start
+sm_range6.c:9 func() implied: a = '1-s64max'
+sm_range6.c:10 func() implied: b = '0-s64max'
+sm_range6.c:11 func() implied: c = '10,23,45-s64max'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:12 2018
+++ new/usr/src/tools/smatch/src/validation/sm_real_absolute1.c	Fri Dec 21 15:01:12 2018
@@ -0,0 +1,21 @@
+#include "check_debug.h"
+
+
+void *p;
+int min1, min2;
+void func(unsigned long x)
+{
+	min1 = 18;
+	min2 = (((unsigned char *)p)[12] + 8);
+	if (min2 < min1)
+		__smatch_implied(min2);
+}
+
+/*
+ * check-name: Smatch real absolute #1
+ * check-command: smatch -I.. sm_real_absolute1.c
+ *
+ * check-output-start
+sm_real_absolute1.c:11 func() implied: min2 = '8-17'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:12 2018
+++ new/usr/src/tools/smatch/src/validation/sm_rosenberg.c	Fri Dec 21 15:01:12 2018
@@ -0,0 +1,75 @@
+#include "check_debug.h"
+
+void memset(void *ptr, char c, int size){}
+
+int copy_to_user(void *dest, void *data, int size){}
+int some_func(struct foo *p){}
+
+typedef struct zr364xx_pipeinfo {
+	char x;
+	int y;
+} aa_policy_t;
+
+struct aa_policy {
+	int x;
+};
+
+struct foo {
+	struct aa_policy a;
+	int x;
+	int y;
+};
+
+struct foo *p;
+struct foo global_dec;
+void *ptr;
+
+int main(void)
+{
+	struct zr364xx_pipeinfo one;
+	struct aa_policy two;
+	aa_policy_t three;
+	struct foo four;
+	struct foo five;
+	struct foo six;
+	struct foo seven;
+	struct foo eight;
+	struct foo nine;
+
+	p->a.x = 0;
+	global_dec.x = 0;
+	memset(&two, 0, sizeof(two));
+	four.x = 0;
+	six = five;
+	some_func(&seven);
+	eight.x = (four.x < 5 ? four.x : 5);
+	eight.y = !five.y;
+	if (some_func()) {
+		nine.x = 1;
+		nine.y = 2;
+	}
+
+	copy_to_user(ptr, &p->a, sizeof(struct aa_policy));
+	copy_to_user(ptr, &global_dec, sizeof(global_dec));
+	copy_to_user(ptr, &one, sizeof(one));
+	copy_to_user(ptr, &two, sizeof(two));
+	copy_to_user(ptr, &three, sizeof(three));
+	copy_to_user(ptr, &four, sizeof(four));
+	copy_to_user(ptr, &five, sizeof(five));
+	copy_to_user(ptr, &six, sizeof(six));
+	copy_to_user(ptr, &seven, sizeof(seven));
+	copy_to_user(ptr, &eight, sizeof(eight));
+	copy_to_user(ptr, &nine, sizeof(nine));
+	return 0;
+}
+/*
+ * check-name: Rosenberg Leaks
+ * check-command: smatch -p=kernel -I.. sm_rosenberg.c
+ *
+ * check-output-start
+sm_rosenberg.c:54 main() warn: check that 'one' doesn't leak information (struct has a hole after 'x')
+sm_rosenberg.c:56 main() warn: check that 'three' doesn't leak information (struct has a hole after 'x')
+sm_rosenberg.c:57 main() warn: check that 'four.y' doesn't leak information
+sm_rosenberg.c:62 main() warn: check that 'nine.x' doesn't leak information
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:12 2018
+++ new/usr/src/tools/smatch/src/validation/sm_select.c	Fri Dec 21 15:01:12 2018
@@ -0,0 +1,40 @@
+struct foo {
+	int a;
+};
+
+struct foo *a;
+struct foo *b;
+
+struct foo *c;
+struct foo *d;
+struct foo *e;
+void func (void)
+{
+	if (a?b:0) {
+		a->a = 1;
+		b->a = 1;
+	}
+	a->a = 1;
+	b->a = 1;
+	e->a = 1;
+	d = returns_nonnull();
+	if (c?d:e) {
+		c->a = 1;
+		d->a = 1;
+		e->a = 1;
+	}
+	e->a = 1;
+}
+
+/*
+ * check-name: Ternary Conditions
+ * check-command: smatch sm_select.c
+ *
+ * check-output-start
+sm_select.c:17 func() error: we previously assumed 'a' could be null (see line 13)
+sm_select.c:18 func() error: we previously assumed 'b' could be null (see line 13)
+sm_select.c:21 func() warn: variable dereferenced before check 'e' (see line 19)
+sm_select.c:22 func() error: we previously assumed 'c' could be null (see line 21)
+ * check-output-end
+ */
+
--- /dev/null	Fri Dec 21 15:01:12 2018
+++ new/usr/src/tools/smatch/src/validation/sm_select3.c	Fri Dec 21 15:01:12 2018
@@ -0,0 +1,104 @@
+#include "check_debug.h"
+
+int a, b, c;
+int func(void)
+{
+	if (a ? b : c)
+		__smatch_value("a");
+
+	__smatch_note("Test #1 a ? 1 : c");
+	if (a ? 1 : c) {	
+		__smatch_value("a");
+		__smatch_value("c");
+		if (!a)
+			__smatch_value("c");
+		if (!c)
+			__smatch_value("a");
+	} else {
+		__smatch_value("a");
+		__smatch_value("c");
+	}
+
+	__smatch_note("Test #2 a ? 0 : c");
+	if (a ? 0 : c) {	
+		__smatch_value("a");
+		__smatch_value("c");
+		if (!a)
+			__smatch_value("c");
+	} else {
+		__smatch_value("a");
+		__smatch_value("c");
+		if (!a)
+			__smatch_value("c");
+		if (!c)
+			__smatch_value("a");
+	}
+
+	__smatch_note("Test #3 a ? b : 1");
+	if (a ? b : 1) {	
+		__smatch_value("a");
+		__smatch_value("b");
+		if (!a)
+			__smatch_value("b");
+		if (!b)
+			__smatch_value("a");
+	} else {
+		__smatch_value("a");
+		__smatch_value("b");
+		if (!b)
+			__smatch_value("a");
+	}
+
+	__smatch_note("Test #2 a ? b : 0");
+	if (a ? b : 0) {	
+		__smatch_value("a");
+		__smatch_value("b");
+	} else {
+		__smatch_value("a");
+		__smatch_value("b");
+		if (a)
+			__smatch_value("b");
+		if (b)
+			__smatch_value("a");
+	}
+}
+
+
+/*
+ * check-name: Ternary Conditions #3
+ * check-command: smatch -I.. sm_select3.c
+ *
+ * check-output-start
+sm_select3.c:7 func() a = s32min-s32max
+sm_select3.c:9 func() Test #1 a ? 1 : c
+sm_select3.c:11 func() a = s32min-s32max
+sm_select3.c:12 func() c = s32min-s32max
+sm_select3.c:14 func() c = s32min-(-1),1-s32max
+sm_select3.c:16 func() a = s32min-(-1),1-s32max
+sm_select3.c:18 func() a = 0
+sm_select3.c:19 func() c = 0
+sm_select3.c:22 func() Test #2 a ? 0 : c
+sm_select3.c:24 func() a = 0
+sm_select3.c:25 func() c = s32min-(-1),1-s32max
+sm_select3.c:27 func() c = s32min-(-1),1-s32max
+sm_select3.c:29 func() a = s32min-s32max
+sm_select3.c:30 func() c = s32min-s32max
+sm_select3.c:32 func() c = 0
+sm_select3.c:34 func() a = s32min-s32max
+sm_select3.c:37 func() Test #3 a ? b : 1
+sm_select3.c:39 func() a = s32min-s32max
+sm_select3.c:40 func() b = s32min-s32max
+sm_select3.c:42 func() b = s32min-s32max
+sm_select3.c:44 func() a = 0
+sm_select3.c:46 func() a = s32min-(-1),1-s32max
+sm_select3.c:47 func() b = 0
+sm_select3.c:49 func() a = s32min-(-1),1-s32max
+sm_select3.c:52 func() Test #2 a ? b : 0
+sm_select3.c:54 func() a = s32min-(-1),1-s32max
+sm_select3.c:55 func() b = s32min-(-1),1-s32max
+sm_select3.c:57 func() a = s32min-s32max
+sm_select3.c:58 func() b = s32min-s32max
+sm_select3.c:60 func() b = 0
+sm_select3.c:62 func() a = 0
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:13 2018
+++ new/usr/src/tools/smatch/src/validation/sm_select4.c	Fri Dec 21 15:01:13 2018
@@ -0,0 +1,25 @@
+#include "check_debug.h"
+
+int frob();
+
+int a, b, c;
+void func(unsigned long x)
+{
+	if (x >= 4)
+		return;
+
+	__smatch_value("x");
+	if ((!(a) ? -19 : (((b && c) ? frob() : -515))))
+		__smatch_value("x");
+	__smatch_value("x");
+}
+/*
+ * check-name: Smatch Ternary #4
+ * check-command: smatch -I.. sm_select4.c
+ *
+ * check-output-start
+sm_select4.c:11 func() x = 0-3
+sm_select4.c:13 func() x = 0-3
+sm_select4.c:14 func() x = 0-3
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:13 2018
+++ new/usr/src/tools/smatch/src/validation/sm_select5.c	Fri Dec 21 15:01:13 2018
@@ -0,0 +1,31 @@
+#include "check_debug.h"
+
+int load_sig(unsigned long sig)
+{
+	return sig < 4 ? 0 : -12;
+}
+
+int a;
+void test(void)
+{
+	int ret;
+
+	ret = load_sig(a);
+	if (ret) {
+		__smatch_implied(ret);
+		__smatch_implied(a);
+	} else {
+		__smatch_implied(a);
+	}
+}
+
+/*
+ * check-name: smatch select #5
+ * check-command: smatch -I.. sm_select5.c
+ *
+ * check-output-start
+sm_select5.c:15 test() implied: ret = '(-12)'
+sm_select5.c:16 test() implied: a = 's32min-s32max'
+sm_select5.c:18 test() implied: a = '0-3'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:13 2018
+++ new/usr/src/tools/smatch/src/validation/sm_select_assign.c	Fri Dec 21 15:01:13 2018
@@ -0,0 +1,38 @@
+#include "check_debug.h"
+
+void frob();
+
+#define min(a, b) ((a) < (b) ? (a) : (b))
+
+void func(void)
+{
+	int i;
+	int val;
+
+	for (i = 0; i < 10; i++) {
+		val = min(5, i);
+		__smatch_value("val");
+	}
+
+	i++;
+	__smatch_value("i");
+	val = min(100, i);
+	__smatch_value("val");
+
+	for (i = 0; i < 10; i++)
+		frob();
+
+	val = min(100, i);
+	__smatch_value("val");
+}
+/*
+ * check-name: assigning select statements
+ * check-command: smatch -I.. sm_select_assign.c
+ *
+ * check-output-start
+sm_select_assign.c:14 func() val = 0-5
+sm_select_assign.c:18 func() i = 11-s32max
+sm_select_assign.c:20 func() val = 11-100
+sm_select_assign.c:26 func() val = 10
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:13 2018
+++ new/usr/src/tools/smatch/src/validation/sm_skb.c	Fri Dec 21 15:01:13 2018
@@ -0,0 +1,55 @@
+struct sk_buff {
+	int valuable_information;
+};
+struct foo {
+	int x;
+};
+struct ture {
+	struct sk_buff *skb;
+};
+
+struct wrap1 {
+	struct ture *a;
+};
+struct wrap2 {
+	struct foo *c; 
+	struct wrap1 *b;
+};
+struct wrap3 {
+	struct foo *c; 
+};
+
+struct sk_buff *skb;
+struct sk_buff **ptr;
+struct ture *x;
+struct ture xx;
+struct wrap1 *u;
+struct wrap2 *y;
+struct wrap3 *z;
+
+void kfree(void *data);
+
+void func (void)
+{
+	kfree(skb);
+	kfree(x->skb);
+	kfree(xx.skb);
+	kfree(y->c);
+	kfree(u->a->skb);
+	kfree(u->a);
+	kfree(y->b->a->skb);
+	kfree(z->c);
+	kfree(ptr);
+}
+/*
+ * check-name: kfree_skb() test
+ * check-command: smatch -p=kernel sm_skb.c
+ *
+ * check-output-start
+sm_skb.c:34 func() error: use kfree_skb() here instead of kfree(skb)
+sm_skb.c:35 func() error: use kfree_skb() here instead of kfree(x->skb)
+sm_skb.c:36 func() error: use kfree_skb() here instead of kfree(xx.skb)
+sm_skb.c:38 func() error: use kfree_skb() here instead of kfree(u->a->skb)
+sm_skb.c:40 func() error: use kfree_skb() here instead of kfree(y->b->a->skb)
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:13 2018
+++ new/usr/src/tools/smatch/src/validation/sm_skb2.c	Fri Dec 21 15:01:13 2018
@@ -0,0 +1,56 @@
+#include "check_debug.h"
+
+struct sk_buff {
+	unsigned char *head, *data;
+	unsigned short network_header;
+};
+
+struct foo {
+	int a, b, c;
+};
+
+static inline unsigned char *skb_network_header(const struct sk_buff *skb)
+{
+	return skb->head + skb->network_header;
+}
+
+static inline int skb_network_offset(const struct sk_buff *skb)
+{
+	return skb_network_header(skb) - skb->data;
+}
+
+int frob(struct sk_buff *skb)
+{
+	struct foo *p;
+	int x, y;
+
+	__smatch_user_rl(*skb->data);
+	__smatch_user_rl(skb->data + 1);
+	__smatch_user_rl(*(int *)skb->data);
+        __smatch_user_rl(skb->data - skb_network_header(skb));
+
+	p = skb->data;
+	x = *(int *)skb->data;
+	y = skb->data[1];
+
+	__smatch_user_rl(p->a);
+	__smatch_user_rl(x);
+	__smatch_user_rl(y);
+
+	return 0;
+}
+
+/*
+ * check-name: smatch: userdata from skb
+ * check-command: smatch -p=kernel -I.. sm_skb2.c
+ *
+ * check-output-start
+sm_skb2.c:27 frob() user rl: '*skb->data' = '0-255'
+sm_skb2.c:28 frob() user rl: 'skb->data + 1' = ''
+sm_skb2.c:29 frob() user rl: '*skb->data' = 's32min-s32max'
+sm_skb2.c:30 frob() user rl: 'skb->data - skb_network_header(skb)' = ''
+sm_skb2.c:36 frob() user rl: 'p->a' = 's32min-s32max'
+sm_skb2.c:37 frob() user rl: 'x' = 's32min-s32max'
+sm_skb2.c:38 frob() user rl: 'y' = '0-255'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:13 2018
+++ new/usr/src/tools/smatch/src/validation/sm_skb3.c	Fri Dec 21 15:01:13 2018
@@ -0,0 +1,29 @@
+#include "check_debug.h"
+
+struct sk_buff {
+	unsigned char *head, *data;
+	unsigned short network_header;
+};
+
+struct foo {
+	int a, b, c;
+};
+
+int frob(struct sk_buff *skb)
+{
+	struct foo *p;
+
+	p = skb->data + sizeof(int) * 2;
+	__smatch_user_rl(p->a);
+
+	return 0;
+}
+
+/*
+ * check-name: smatch: userdata from skb #3
+ * check-command: smatch -p=kernel -I.. sm_skb3.c
+ *
+ * check-output-start
+sm_skb3.c:17 frob() user rl: 'p->a' = 's32min-s32max'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:13 2018
+++ new/usr/src/tools/smatch/src/validation/sm_strlen.c	Fri Dec 21 15:01:13 2018
@@ -0,0 +1,24 @@
+int strlen(char *str);
+int strcpy(char *str);
+
+void func (char *input)
+{
+	int input_len;
+	char buf[4];
+
+	input_len = strlen(input);
+	if (input_len <= 5) {
+		strcpy(buf, input);
+	}
+	if (input_len <= 3) {
+		strcpy(buf, input);
+	}
+}
+/*
+ * check-name: Smatch strlen test
+ * check-command: smatch sm_strlen.c
+ *
+ * check-output-start
+sm_strlen.c:11 func() error: strcpy() 'input' too large for 'buf' (6 vs 4)
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:13 2018
+++ new/usr/src/tools/smatch/src/validation/sm_strlen2.c	Fri Dec 21 15:01:13 2018
@@ -0,0 +1,29 @@
+int strlen(char *str);
+int strcpy(char *str);
+
+void func (char *input1, char *input2, char *input3)
+{
+	char buf1[4];
+	char buf2[4];
+	char buf3[4];
+
+	if (strlen(input1) > 4)
+		return;
+	strcpy(buf1, input1);
+
+	if (10 > strlen(input2))
+		strcpy(buf2, input2);
+
+	if (strlen(input3) <= 4)
+		strcpy(buf3, input3);
+}
+/*
+ * check-name: Smatch strlen test #2
+ * check-command: smatch sm_strlen2.c
+ *
+ * check-output-start
+sm_strlen2.c:12 func() error: strcpy() 'input1' too large for 'buf1' (5 vs 4)
+sm_strlen2.c:15 func() error: strcpy() 'input2' too large for 'buf2' (10 vs 4)
+sm_strlen2.c:18 func() error: strcpy() 'input3' too large for 'buf3' (5 vs 4)
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:13 2018
+++ new/usr/src/tools/smatch/src/validation/sm_strlen3.c	Fri Dec 21 15:01:13 2018
@@ -0,0 +1,20 @@
+#include "check_debug.h"
+
+int strlen(const char *str);
+int strnlen(const char *str, int limit);
+
+int func(void)
+{
+	__smatch_implied(strlen("foo"));
+	__smatch_implied(strnlen("foo", 2));
+}
+
+/*
+ * check-name: Smatch strlen test #3
+ * check-command: smatch -I.. sm_strlen3.c
+ *
+ * check-output-start
+sm_strlen3.c:8 func() implied: strlen("foo") = '3'
+sm_strlen3.c:9 func() implied: strnlen("foo", 2) = '2'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:13 2018
+++ new/usr/src/tools/smatch/src/validation/sm_struct_assign1.c	Fri Dec 21 15:01:13 2018
@@ -0,0 +1,31 @@
+#include "check_debug.h"
+
+void memcpy(void *dest, void *src, int size);
+void memset(void *dest, char c, int size);
+
+
+struct foo {
+	int x, y;
+};
+
+void test(void)
+{
+	struct foo src = {1, 41};
+	struct foo dest;
+
+	memcpy(&dest, &src, sizeof(dest));
+	__smatch_implied(dest.x + dest.y);
+	memset(&dest, 0, sizeof(dest));
+	__smatch_implied(dest.x + dest.y);
+
+}
+
+/*
+ * check-name: smatch struct assignment #1
+ * check-command: smatch -I.. sm_struct_assign1.c
+ *
+ * check-output-start
+sm_struct_assign1.c:17 test() implied: dest.x + dest.y = '42'
+sm_struct_assign1.c:19 test() implied: dest.x + dest.y = '0'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:13 2018
+++ new/usr/src/tools/smatch/src/validation/sm_switch.c	Fri Dec 21 15:01:13 2018
@@ -0,0 +1,59 @@
+//#include <stdlib.h>
+
+struct foo {
+	int a;
+};
+
+struct foo *a;
+struct foo *b;
+struct foo *c;
+struct foo *d;
+int x;
+
+void func (void)
+{
+	a = 0;
+	b = 0;
+	c = 0;
+	d = 0;
+
+	switch(x) {
+	case 1:
+		a = returns_nonnull();
+		break;
+	case 2:
+		b = returns_nonnull();
+		break;
+	case 3:
+		c = returns_nonnull();
+		break;
+	default:
+		d = returns_nonnull();
+	}
+
+	switch(x) {
+	case 1:
+		a->a = 1;
+	case 2:
+		a->a = 2;
+		b->a = 3;
+		break;
+	case 3:
+		c->a = 4;
+		break;
+	case 4:
+		d->a = 5;
+		break;
+	}
+}
+/*
+ * check-name: Smatch switch handling
+ * check-command: smatch --spammy sm_switch.c
+ * check-known-to-fail
+ *
+ * check-output-start
+sm_switch.c:38 func() warn: missing break? reassigning 'a->a'
+sm_switch.c:38 func() error: potential NULL dereference 'a'.
+sm_switch.c:39 func() error: potential NULL dereference 'b'.
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:13 2018
+++ new/usr/src/tools/smatch/src/validation/sm_switch2.c	Fri Dec 21 15:01:13 2018
@@ -0,0 +1,51 @@
+struct foo {
+	int a;
+};
+
+struct foo *a;
+struct foo *b;
+struct foo *c;
+struct foo *d;
+int x;
+
+void func (void)
+{
+	a = 0;
+	b = 0;
+	c = 0;
+	d = 0;
+
+	if (x == 1)
+		a = some_func();
+	else if (x == 2)
+		b = some_func();
+	else if (x == 3)
+		c = some_func();
+	else
+		d = some_func();
+
+	switch(x) {
+	case 1:
+		a->a = 1;
+	case 2:
+		a->a = 2;
+		b->a = 3;
+		break;
+	case 3:
+		c->a = 4;
+		break;
+	case 4:
+		d->a = 5;
+		break;
+	}
+}
+/*
+ * check-name: Smatch switch handling #2
+ * check-command: smatch --spammy sm_switch2.c
+ *
+ * check-output-start
+sm_switch2.c:31 func() warn: missing break? reassigning 'a->a'
+sm_switch2.c:31 func() error: potential NULL dereference 'a'.
+sm_switch2.c:32 func() error: potential NULL dereference 'b'.
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:14 2018
+++ new/usr/src/tools/smatch/src/validation/sm_switch3.c	Fri Dec 21 15:01:14 2018
@@ -0,0 +1,49 @@
+#include "check_debug.h"
+
+int a, b;
+
+int frob(void);
+
+int test(int size)
+{
+	a = 0;
+
+	if (({switch (frob()) {
+		case 1:
+			a = 2;
+			break;
+		default:
+			a = 3;
+	     }
+	     b;}))
+		;
+	__smatch_implied(a);
+
+	a = 4;
+
+	if (({switch (2) {
+		case 1:
+			a = 5;
+			break;
+		case 2:
+			a = 6;
+			break;
+		default:
+			a = 7;
+	     }
+	     b;}))
+		;
+	__smatch_implied(a);
+
+	return 0;
+}
+
+/*
+ * check-name: smatch: switch #3
+ * check-command: smatch -I.. sm_switch3.c
+ *
+ * check-output-start
+sm_switch3.c:20 test() implied: a = '2-3'
+sm_switch3.c:36 test() implied: a = '6'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:14 2018
+++ new/usr/src/tools/smatch/src/validation/sm_user_data1.c	Fri Dec 21 15:01:14 2018
@@ -0,0 +1,30 @@
+#include "check_debug.h"
+
+int copy_from_user(void *dest, void *src, int size);
+
+struct my_struct {
+	int x, y;
+};
+
+void *pointer;
+
+void copy_stuff(struct my_struct *foo)
+{
+	copy_from_user(foo, pointer, sizeof(*foo));
+}
+
+void test(void)
+{
+	struct my_struct foo;
+
+	copy_stuff(&foo);
+	__smatch_user_rl(foo.x);
+}
+/*
+ * check-name: smatch user data #1
+ * check-command: smatch -p=kernel -I.. sm_user_data1.c
+ *
+ * check-output-start
+sm_user_data1.c:21 test() user rl: 'foo.x' = 's32min-s32max'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:14 2018
+++ new/usr/src/tools/smatch/src/validation/sm_user_data2.c	Fri Dec 21 15:01:14 2018
@@ -0,0 +1,32 @@
+#include "check_debug.h"
+
+int copy_from_user(void *dest, void *src, int size){}
+
+struct my_struct {
+	int x, y;
+};
+
+void *pointer;
+struct my_struct *dest;
+
+struct my_struct *returns_copy(void)
+{
+	copy_from_user(dest, pointer, sizeof(*dest));
+	return dest;
+}
+
+struct my_struct *a;
+void test(void)
+{
+	a = returns_copy();
+	__smatch_user_rl(a->x);
+}
+
+/*
+ * check-name: smatch user data #2
+ * check-command: smatch -p=kernel -I.. sm_user_data2.c
+ *
+ * check-output-start
+sm_user_data2.c:22 test() user rl: 'a->x' = 's32min-s32max'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:14 2018
+++ new/usr/src/tools/smatch/src/validation/sm_user_data3.c	Fri Dec 21 15:01:14 2018
@@ -0,0 +1,35 @@
+#include "check_debug.h"
+
+int copy_from_user(void *dest, void *src, int size){}
+
+struct my_struct {
+	int x, y;
+};
+
+struct my_struct *returns_filter(struct my_struct *p)
+{
+	return p;
+}
+
+struct my_struct *src, *a, *b;
+void test(void)
+{
+	copy_from_user(a, src, sizeof(*a));
+	b = returns_filter(a);
+	__smatch_user_rl(b->y);
+	b = returns_filter(src);
+	__smatch_user_rl(b->y);
+	b = returns_filter(a);
+	__smatch_user_rl(b->y);
+}
+
+/*
+ * check-name: smatch user data #3
+ * check-command: smatch -p=kernel -I.. sm_user_data3.c
+ *
+ * check-output-start
+sm_user_data3.c:19 test() user rl: 'b->y' = 's32min-s32max'
+sm_user_data3.c:21 test() user rl: 'b->y' = ''
+sm_user_data3.c:23 test() user rl: 'b->y' = 's32min-s32max'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:14 2018
+++ new/usr/src/tools/smatch/src/validation/sm_user_data4.c	Fri Dec 21 15:01:14 2018
@@ -0,0 +1,45 @@
+#include "check_debug.h"
+
+int copy_from_user(void *dest, void *src, int size);
+
+struct ear {
+	int x, y;
+};
+
+void *src;
+int returns_user_data(void)
+{
+	int x;
+
+	copy_from_user(&x, src, sizeof(int));
+	return x;
+}
+
+struct ear *dest;
+struct ear *returns_user_member(void)
+{
+	copy_from_user(&dest->x, src, sizeof(int));
+	return dest;
+}
+void test(void)
+{
+	struct ear *p;
+	int x;
+
+	x = returns_user_data();
+	__smatch_user_rl(x);
+	p = returns_user_member();
+	__smatch_user_rl(p);
+	__smatch_user_rl(p->x);
+}
+
+/*
+ * check-name: smatch user data #4
+ * check-command: smatch -p=kernel -I.. sm_user_data4.c
+ *
+ * check-output-start
+sm_user_data4.c:30 test() user rl: 'x' = 's32min-s32max'
+sm_user_data4.c:32 test() user rl: 'p' = ''
+sm_user_data4.c:33 test() user rl: 'p->x' = 's32min-s32max'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:14 2018
+++ new/usr/src/tools/smatch/src/validation/sm_val_parse1.c	Fri Dec 21 15:01:14 2018
@@ -0,0 +1,17 @@
+#include "check_debug.h"
+
+int main(int x)
+{
+	x = __smatch_type_rl(int, "s32min-s32max[$2 + 4]", 5);
+	__smatch_implied(x);
+
+	return 0;
+}
+/*
+ * check-name: smatch parse value
+ * check-command: smatch -I.. sm_val_parse1.c
+ *
+ * check-output-start
+sm_val_parse1.c:6 main() implied: x = '9'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:14 2018
+++ new/usr/src/tools/smatch/src/validation/sm_wine_filehandles.c	Fri Dec 21 15:01:14 2018
@@ -0,0 +1,26 @@
+void * CreateFile();
+void * socket();
+
+int func (void)
+{
+	int *x;
+
+	if (x = CreateFile()) {
+		
+	}
+
+	x = socket();
+	if (x != 0) {
+	      
+	}
+	return;
+}
+/*
+ * check-name: use INVALID_HANDLE_VALUE not zero
+ * check-command: smatch -p=wine sm_wine_filehandles.c
+ *
+ * check-output-start
+sm_wine_filehandles.c:8 func() error: comparing a filehandle against zero 'x'
+sm_wine_filehandles.c:13 func() error: comparing a filehandle against zero 'x'
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:14 2018
+++ new/usr/src/tools/smatch/src/validation/sm_wine_locking.c	Fri Dec 21 15:01:14 2018
@@ -0,0 +1,45 @@
+int create_window_handle(int x);
+void WIN_ReleasePtr(int x);
+void EnterCriticalSection(int x);
+void LeaveCriticalSection(int x);
+void USER_Lock(void);
+void USER_Unlock(void);
+int GDI_GetObjPtr(int x);
+void GDI_ReleaseObj(int x);
+
+int a, b, c, d, e, z;
+
+void test1(void)
+{
+	b = create_window_handle(a);
+	z = frob();
+
+	if (d = GDI_GetObjPtr(e))
+		GDI_ReleaseObj(e);
+	if (GDI_GetObjPtr(e))
+		GDI_ReleaseObj(e);
+	EnterCriticalSection(c);
+	USER_Lock();
+	if (b) {
+		LeaveCriticalSection(c);
+		WIN_ReleasePtr(b);
+	}
+	WIN_ReleasePtr(b);
+	if (z)
+		return;
+	USER_Unlock();
+	if (!b)
+		LeaveCriticalSection(c);
+}
+/*
+ * check-name: WINE locking
+ * check-command: smatch -p=wine --spammy sm_wine_locking.c
+ *
+ * check-output-start
+sm_wine_locking.c:27 test1() error: double unlock 'create_window_handle:b'
+sm_wine_locking.c:29 test1() warn: 'CriticalSection:c' is sometimes locked here and sometimes unlocked.
+sm_wine_locking.c:32 test1() warn: inconsistent returns 'USER_Lock:'.
+  Locked on:   line 29
+  Unlocked on: line 32
+ * check-output-end
+ */
--- /dev/null	Fri Dec 21 15:01:14 2018
+++ new/usr/src/tools/smatch/src/validation/smatch_db_test.sh	Fri Dec 21 15:01:14 2018
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+rm -f smatch_db.sqlite
+
+./build_smatch_db.sh $*
+../smatch $*
+
+rm smatch_db.sqlite
+
--- /dev/null	Fri Dec 21 15:01:14 2018
+++ new/usr/src/tools/smatch/src/validation/specifiers1.c	Fri Dec 21 15:01:14 2018
@@ -0,0 +1,101 @@
+static void OK(void)
+{
+#define TEST(x) { T a; x *b = &a; }
+#define TEST2(x, y) TEST(x y) TEST(y x)
+#define TEST3(x, y, z) TEST(x y z) TEST(x z y) TEST(y x z) \
+		       TEST(y z x) TEST(z x y) TEST(z y x)
+#define TEST4(x, y, z, w) TEST2(x y, z w) TEST2(x y, w z) \
+			  TEST2(y x, z w) TEST2(y x, w z) \
+			  TEST2(x z, y w) TEST2(x z, w y) \
+			  TEST2(z x, y w) TEST2(z x, w y) \
+			  TEST2(x w, y z) TEST2(x w, z y) \
+			  TEST2(w x, y z) TEST2(w x, z y)
+
+
+#define T char
+TEST(char)
+#undef T
+
+#define T signed char
+TEST2(char, signed)
+#undef T
+
+#define T unsigned char
+TEST2(char, unsigned)
+#undef T
+
+#define T short
+TEST(short)
+TEST2(int, short)
+#undef T
+
+#define T int
+TEST(int)
+#undef T
+
+#define T long
+TEST(long)
+TEST2(int, long)
+#undef T
+
+#define T long long
+TEST2(long, long)
+TEST3(int, long, long)
+#undef T
+
+#define T signed short
+TEST2(short, signed)
+TEST3(int, short, signed)
+#undef T
+
+#define T signed
+TEST(signed)
+TEST2(int, signed)
+#undef T
+
+#define T signed long
+TEST2(long, signed)
+TEST3(int, long, signed)
+#undef T
+
+#define T signed long long
+TEST3(long, long, signed)
+TEST4(int, long, long, signed)
+#undef T
+
+#define T unsigned short
+TEST2(short, unsigned)
+TEST3(int, short, unsigned)
+#undef T
+
+#define T unsigned
+TEST(unsigned)
+TEST2(int, unsigned)
+#undef T
+
+#define T unsigned long
+TEST2(long, unsigned)
+TEST3(int, long, unsigned)
+#undef T
+
+#define T unsigned long long
+TEST3(long, long, unsigned)
+TEST4(int, long, long, unsigned)
+#undef T
+
+#define T float
+TEST(float)
+#undef T
+
+#define T double
+TEST(double)
+#undef T
+
+#define T long double
+TEST2(double, long)
+#undef T
+}
+/*
+ * check-name: valid specifier combinations
+ * check-command: sparse $file
+ */
--- /dev/null	Fri Dec 21 15:01:14 2018
+++ new/usr/src/tools/smatch/src/validation/specifiers2.c	Fri Dec 21 15:01:14 2018
@@ -0,0 +1,152 @@
+typedef int T;
+void BAD(
+char char,
+char int,
+char double,
+char float,
+char long,
+char short,
+int char,
+int int,
+int double,
+int float,
+double char,
+double int,
+double double,
+double float,
+double short,
+double signed,
+double unsigned,
+float char,
+float int,
+float double,
+float float,
+float short,
+float long,
+float signed,
+float unsigned,
+short char,
+short double,
+short float,
+short short,
+short long,
+long char,
+long float,
+long short,
+signed double,
+signed float,
+signed signed,
+signed unsigned,
+unsigned double,
+unsigned float,
+unsigned signed,
+unsigned unsigned,
+unsigned signed,
+long long long,
+long double long,
+long long double,
+double long long,
+T char,
+T int,
+T double,
+T float,
+T short,
+T long,
+T signed,
+T unsigned,
+T void,
+void char,
+void int,
+void double,
+void float,
+void short,
+void long,
+void signed,
+void unsigned,
+char void,
+int void,
+double void,
+float void,
+short void,
+long void,
+signed void,
+unsigned void,
+void void
+);
+/*
+ * check-name: invalid specifier combinations
+ * check-error-start
+specifiers2.c:3:6: error: two or more data types in declaration specifiers
+specifiers2.c:4:6: error: two or more data types in declaration specifiers
+specifiers2.c:5:6: error: two or more data types in declaration specifiers
+specifiers2.c:6:6: error: two or more data types in declaration specifiers
+specifiers2.c:7:6: error: impossible combination of type specifiers: char long
+specifiers2.c:8:6: error: impossible combination of type specifiers: char short
+specifiers2.c:9:5: error: two or more data types in declaration specifiers
+specifiers2.c:10:5: error: two or more data types in declaration specifiers
+specifiers2.c:11:5: error: two or more data types in declaration specifiers
+specifiers2.c:12:5: error: two or more data types in declaration specifiers
+specifiers2.c:13:8: error: two or more data types in declaration specifiers
+specifiers2.c:14:8: error: two or more data types in declaration specifiers
+specifiers2.c:15:8: error: two or more data types in declaration specifiers
+specifiers2.c:16:8: error: two or more data types in declaration specifiers
+specifiers2.c:17:8: error: impossible combination of type specifiers: double short
+specifiers2.c:18:8: error: impossible combination of type specifiers: double signed
+specifiers2.c:19:8: error: impossible combination of type specifiers: double unsigned
+specifiers2.c:20:7: error: two or more data types in declaration specifiers
+specifiers2.c:21:7: error: two or more data types in declaration specifiers
+specifiers2.c:22:7: error: two or more data types in declaration specifiers
+specifiers2.c:23:7: error: two or more data types in declaration specifiers
+specifiers2.c:24:7: error: impossible combination of type specifiers: float short
+specifiers2.c:25:7: error: impossible combination of type specifiers: float long
+specifiers2.c:26:7: error: impossible combination of type specifiers: float signed
+specifiers2.c:27:7: error: impossible combination of type specifiers: float unsigned
+specifiers2.c:28:7: error: impossible combination of type specifiers: short char
+specifiers2.c:29:7: error: impossible combination of type specifiers: short double
+specifiers2.c:30:7: error: impossible combination of type specifiers: short float
+specifiers2.c:31:7: error: impossible combination of type specifiers: short short
+specifiers2.c:32:7: error: impossible combination of type specifiers: short long
+specifiers2.c:33:6: error: impossible combination of type specifiers: long char
+specifiers2.c:34:6: error: impossible combination of type specifiers: long float
+specifiers2.c:35:6: error: impossible combination of type specifiers: long short
+specifiers2.c:36:8: error: impossible combination of type specifiers: signed double
+specifiers2.c:37:8: error: impossible combination of type specifiers: signed float
+specifiers2.c:38:8: error: impossible combination of type specifiers: signed signed
+specifiers2.c:39:8: error: impossible combination of type specifiers: signed unsigned
+specifiers2.c:40:10: error: impossible combination of type specifiers: unsigned double
+specifiers2.c:41:10: error: impossible combination of type specifiers: unsigned float
+specifiers2.c:42:10: error: impossible combination of type specifiers: unsigned signed
+specifiers2.c:43:10: error: impossible combination of type specifiers: unsigned unsigned
+specifiers2.c:44:10: error: impossible combination of type specifiers: unsigned signed
+specifiers2.c:45:11: error: impossible combination of type specifiers: long long long
+specifiers2.c:46:13: error: impossible combination of type specifiers: long long double
+specifiers2.c:47:11: error: impossible combination of type specifiers: long long double
+specifiers2.c:48:13: error: impossible combination of type specifiers: long long double
+specifiers2.c:49:3: error: two or more data types in declaration specifiers
+specifiers2.c:50:3: error: two or more data types in declaration specifiers
+specifiers2.c:51:3: error: two or more data types in declaration specifiers
+specifiers2.c:52:3: error: two or more data types in declaration specifiers
+specifiers2.c:53:3: error: two or more data types in declaration specifiers
+specifiers2.c:54:3: error: two or more data types in declaration specifiers
+specifiers2.c:55:3: error: two or more data types in declaration specifiers
+specifiers2.c:56:3: error: two or more data types in declaration specifiers
+specifiers2.c:57:3: error: two or more data types in declaration specifiers
+specifiers2.c:58:6: error: two or more data types in declaration specifiers
+specifiers2.c:59:6: error: two or more data types in declaration specifiers
+specifiers2.c:60:6: error: two or more data types in declaration specifiers
+specifiers2.c:61:6: error: two or more data types in declaration specifiers
+specifiers2.c:62:6: error: two or more data types in declaration specifiers
+specifiers2.c:63:6: error: two or more data types in declaration specifiers
+specifiers2.c:64:6: error: two or more data types in declaration specifiers
+specifiers2.c:65:6: error: two or more data types in declaration specifiers
+specifiers2.c:66:6: error: two or more data types in declaration specifiers
+specifiers2.c:67:5: error: two or more data types in declaration specifiers
+specifiers2.c:68:8: error: two or more data types in declaration specifiers
+specifiers2.c:69:7: error: two or more data types in declaration specifiers
+specifiers2.c:70:7: error: impossible combination of type specifiers: short void
+specifiers2.c:71:6: error: impossible combination of type specifiers: long void
+specifiers2.c:72:8: error: impossible combination of type specifiers: signed void
+specifiers2.c:73:10: error: impossible combination of type specifiers: unsigned void
+specifiers2.c:74:6: error: two or more data types in declaration specifiers
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:01:14 2018
+++ new/usr/src/tools/smatch/src/validation/static-forward-decl.c	Fri Dec 21 15:01:14 2018
@@ -0,0 +1,13 @@
+static int f(void);
+
+int f(void)
+{
+	return 0;
+}
+/*
+ * check-name: static forward declaration
+ *
+ * check-error-start
+static-forward-decl.c:3:5: warning: symbol 'f' was not declared. Should it be static?
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:01:14 2018
+++ new/usr/src/tools/smatch/src/validation/static_assert.c	Fri Dec 21 15:01:14 2018
@@ -0,0 +1,71 @@
+_Static_assert(1, "global ok");
+
+struct foo {
+	_Static_assert(1, "struct ok");
+};
+
+void bar(void)
+{
+	_Static_assert(1, " func1 ok");
+	int i;
+	i = 0;
+	_Static_assert(1, " func2 ok");
+
+	if (1) {
+		_Static_assert(1, " func3 ok");
+	}
+}
+
+_Static_assert(0, "expected assertion failure");
+
+static int f;
+_Static_assert(f, "non-constant expression");
+
+static int *p;
+_Static_assert(p, "non-integer expression");
+
+_Static_assert(0.1, "float expression");
+
+_Static_assert(!0 == 1, "non-trivial expression");
+
+static char array[4];
+_Static_assert(sizeof(array) == 4, "sizeof expression");
+
+static const char non_literal_string[] = "non literal string";
+_Static_assert(0, non_literal_string);
+
+_Static_assert(1 / 0, "invalid expression: should not show up?");
+
+struct s {
+	char arr[16];
+	_Static_assert(1, "inside struct");
+};
+
+union u {
+	char c;
+	int  i;
+	_Static_assert(1, "inside union");
+};
+
+_Static_assert(sizeof(struct s) == 16, "sizeof assertion");
+
+_Static_assert(1, );
+_Static_assert(, "");
+_Static_assert(,);
+
+/*
+ * check-name: static assertion
+ *
+ * check-error-start
+static_assert.c:19:16: error: static assertion failed: "expected assertion failure"
+static_assert.c:22:16: error: bad constant expression
+static_assert.c:25:16: error: bad constant expression
+static_assert.c:27:16: error: bad constant expression
+static_assert.c:35:19: error: bad or missing string literal
+static_assert.c:37:18: error: bad constant expression
+static_assert.c:52:19: error: bad or missing string literal
+static_assert.c:53:16: error: Expected constant expression
+static_assert.c:54:16: error: Expected constant expression
+static_assert.c:54:17: error: bad or missing string literal
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:01:15 2018
+++ new/usr/src/tools/smatch/src/validation/strict-prototypes0.c	Fri Dec 21 15:01:15 2018
@@ -0,0 +1,7 @@
+extern void func1();
+extern void myfunction(), myfunc2();
+
+/*
+ * check-name: strict-prototypes disabled
+ * check-command: sparse -Wno-strict-prototypes $file
+ */
--- /dev/null	Fri Dec 21 15:01:15 2018
+++ new/usr/src/tools/smatch/src/validation/strict-prototypes1.c	Fri Dec 21 15:01:15 2018
@@ -0,0 +1,14 @@
+extern void func0();
+extern void func1(), func2();
+
+/*
+ * check-name: strict-prototypes enabled
+ * check-command: sparse -Wstrict-prototypes $file
+ * check-known-to-fail
+ *
+ * check-error-start
+strict-prototypes1.c:1:18: warning: non-ANSI function declaration of function 'func0'
+strict-prototypes1.c:2:18: warning: non-ANSI function declaration of function 'func1'
+strict-prototypes1.c:2:27: warning: non-ANSI function declaration of function 'func2'
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:01:15 2018
+++ new/usr/src/tools/smatch/src/validation/struct-as.c	Fri Dec 21 15:01:15 2018
@@ -0,0 +1,19 @@
+/*
+ * Structure members should get the address
+ * space of their pointer.
+ */
+#define __user __attribute__((address_space(1)))
+
+struct hello {
+	int a;
+};
+
+extern int test(int __user *ip);
+
+static int broken(struct hello __user *sp)
+{
+	test(&sp->a);
+}
+/*
+ * check-name: Address space of a struct member
+ */
--- /dev/null	Fri Dec 21 15:01:15 2018
+++ new/usr/src/tools/smatch/src/validation/struct-attribute-placement.c	Fri Dec 21 15:01:15 2018
@@ -0,0 +1,6 @@
+struct __attribute__((__aligned__(16))) foo {
+    int a;
+};
+/*
+ * check-name: struct attribute placement
+ */
--- /dev/null	Fri Dec 21 15:01:15 2018
+++ new/usr/src/tools/smatch/src/validation/struct-ns1.c	Fri Dec 21 15:01:15 2018
@@ -0,0 +1,20 @@
+// This actually isn't allowed in C99, but sparse and gcc will take it:
+enum Foo;
+
+static void
+f (void)
+{
+  enum Foo *pefoo;         // Pointer to incomplete type
+  struct Foo;              // Forward declaration
+  struct Foo *psfoo;       // Pointer to incomplete type
+  {
+    struct Foo { int foo; }; // Local definition.
+    struct Foo foo;          // variable declaration.
+    foo.foo = 1;
+  }
+}
+
+enum Foo { FOO };
+/*
+ * check-name: struct namespaces #1
+ */
--- /dev/null	Fri Dec 21 15:01:15 2018
+++ new/usr/src/tools/smatch/src/validation/struct-ns2.c	Fri Dec 21 15:01:15 2018
@@ -0,0 +1,25 @@
+static void
+g (struct Bar { int i; } *x)
+{
+  struct Bar y;
+  y.i = 1;
+}
+
+static void
+h (void)
+{
+  // This is not in scope and should barf loudly.
+  struct Bar y;
+  y.i = 1;
+}
+
+/*
+ * check-name: struct not in scope
+ * check-known-to-fail
+ *
+ * check-error-start
+struct-ns2.c:2:11: warning: bad scope for 'struct Bar'
+struct-ns2.c:12:14: error: incomplete type/unknown size for 'y'
+struct-ns2.c:13:5: error: using member 'i' in incomplete 'struct Bar'
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:01:15 2018
+++ new/usr/src/tools/smatch/src/validation/struct-size1.c	Fri Dec 21 15:01:15 2018
@@ -0,0 +1,21 @@
+struct A;
+struct B {
+  struct A *pA;
+};
+struct C;
+struct E {
+  struct A **pA;
+  struct C *pC;
+};
+static void f(struct E *pE, struct B *pB)
+{
+  pB->pA = pE->pA[0];
+}
+static const struct { int x; } foo[] = {{ 1 }};
+struct C {
+  int bar[(sizeof foo/sizeof foo[0])];
+};
+
+/*
+ * check-name: struct size
+ */
--- /dev/null	Fri Dec 21 15:01:15 2018
+++ new/usr/src/tools/smatch/src/validation/tautological-compare.c	Fri Dec 21 15:01:15 2018
@@ -0,0 +1,35 @@
+typedef unsigned int u32;
+
+int seq(int a) { return a == a; }
+int sne(int a) { return a != a; }
+int slt(int a) { return a < a; }
+int sgt(int a) { return a > a; }
+int sle(int a) { return a <= a; }
+int sge(int a) { return a >= a; }
+
+u32 ueq(u32 a) { return a == a; }
+u32 une(u32 a) { return a != a; }
+u32 ult(u32 a) { return a < a; }
+u32 ugt(u32 a) { return a > a; }
+u32 ule(u32 a) { return a <= a; }
+u32 uge(u32 a) { return a >= a; }
+
+/*
+ * check-name: tautological-compare
+ * check-command: sparse -Wno-decl -Wtautological-compare $file
+ *
+ * check-error-start
+tautological-compare.c:3:30: warning: self-comparison always evaluates to true
+tautological-compare.c:4:30: warning: self-comparison always evaluates to false
+tautological-compare.c:5:29: warning: self-comparison always evaluates to false
+tautological-compare.c:6:29: warning: self-comparison always evaluates to false
+tautological-compare.c:7:30: warning: self-comparison always evaluates to true
+tautological-compare.c:8:30: warning: self-comparison always evaluates to true
+tautological-compare.c:10:30: warning: self-comparison always evaluates to true
+tautological-compare.c:11:30: warning: self-comparison always evaluates to false
+tautological-compare.c:12:29: warning: self-comparison always evaluates to false
+tautological-compare.c:13:29: warning: self-comparison always evaluates to false
+tautological-compare.c:14:30: warning: self-comparison always evaluates to true
+tautological-compare.c:15:30: warning: self-comparison always evaluates to true
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:01:15 2018
+++ new/usr/src/tools/smatch/src/validation/test-be.c	Fri Dec 21 15:01:15 2018
@@ -0,0 +1,46 @@
+int printf(char *c, ...);
+void exit(int c);
+
+#undef PRINT_OUTPUTS
+
+static void test_func_args(int x, int y)
+{
+	if (x == y)
+		exit(1);
+}
+
+static int binop_s32(int x, int y)
+{
+	int a;
+
+	a = a + x;
+	a = a / y;
+	a = a * x;
+	a = a - y;
+
+	return a;
+}
+
+static void test_binops(void)
+{
+	int tmp_s32 = binop_s32(987123, 234);
+
+#ifdef PRINT_OUTPUTS
+	printf("binop_s32(987123, 234) == %d\n", tmp_s32);
+#else
+	if (tmp_s32 != -1470599007)
+		exit(2);
+#endif
+}
+
+int main (int argc, char *argv[])
+{
+	test_func_args(1, 2);
+	test_binops();
+
+	return 0;
+}
+
+/*
+ * check-name: binary operations
+ */
--- /dev/null	Fri Dec 21 15:01:15 2018
+++ new/usr/src/tools/smatch/src/validation/test-suite	Fri Dec 21 15:01:15 2018
@@ -0,0 +1,396 @@
+#!/bin/sh
+
+#set -x
+
+cd $(dirname "$0")
+
+default_path=".."
+default_cmd="sparse \$file"
+tests_list=`find . -name '*.c' | sed -e 's#^\./\(.*\)#\1#' | sort`
+prog_name=`basename $0`
+
+if [ ! -x "$default_path/sparse-llvm" ]; then
+	disabled_cmds="sparsec sparsei sparse-llvm"
+fi
+
+# flags:
+#	- some tests gave an unexpected result
+failed=0
+
+# counts:
+#	- tests that have not been converted to test-suite format
+#	- tests that are disabled
+#	- tests that passed
+#	- tests that failed
+#	- tests that failed but are known to fail
+unhandled_tests=0
+disabled_tests=0
+ok_tests=0
+ko_tests=0
+known_ko_tests=0
+
+# defaults to not verbose
+[ -z "$V" ] && V=0
+[ $V -eq 0 ] && quiet=1 || quiet=0
+
+##
+# get_tag_value(file) - get the 'check-<...>' tags & values
+get_tag_value()
+{
+	check_name=""
+	check_command="$default_cmd"
+	check_exit_value=0
+	check_timeout=0
+	check_known_to_fail=0
+	check_error_ignore=0
+	check_output_ignore=0
+	check_output_contains=0
+	check_output_excludes=0
+	check_output_pattern=0
+
+	lines=$(grep 'check-[a-z-]*' $1 | \
+		sed -e 's/^.*\(check-[a-z-]*:*\) *\(.*\)$/\1 \2/')
+
+	while read tag val; do
+		#echo "-> tag: '$tag'"
+		#echo "-> val: '$val'"
+		case $tag in
+		check-name:)		check_name="$val" ;;
+		check-command:)		check_command="$val" ;;
+		check-exit-value:)	check_exit_value="$val" ;;
+		check-timeout:)		[ -z "$val" ] && val=1
+					check_timeout="$val" ;;
+		check-known-to-fail)	check_known_to_fail=1 ;;
+		check-error-ignore)	check_error_ignore=1 ;;
+		check-output-ignore)	check_output_ignore=1 ;;
+		check-output-contains:)	check_output_contains=1 ;;
+		check-output-excludes:)	check_output_excludes=1 ;;
+		check-output-pattern-)	check_output_pattern=1 ;;
+		esac
+	done << EOT
+	$lines
+EOT
+}
+
+##
+# helper for has_(each|none)_patterns()
+has_patterns()
+{
+	ifile="$1"
+	patt="$2"
+	ofile="$3"
+	cmp="$4"
+	grep "$patt:" "$ifile" | \
+	sed -e "s/^.*$patt: *\(.*\)$/\1/" | \
+	while read val; do
+		grep -s -q "$val" "$ofile"
+		if [ "$?" $cmp 0 ]; then
+			return 1
+		fi
+	done
+
+	return $?
+}
+
+##
+# has_each_patterns(ifile tag ofile) - does ofile contains some
+#                        of the patterns given by ifile's tags?
+#
+# returns 0 if all present, 1 otherwise
+has_each_patterns()
+{
+	has_patterns "$1" "$2" "$3" -ne
+}
+
+##
+# has_none_patterns(ifile tag ofile) - does ofile contains some
+#                        of the patterns given by ifile's tags?
+#
+# returns 1 if any present, 0 otherwise
+has_none_patterns()
+{
+	has_patterns "$1" "$2" "$3" -eq
+}
+
+##
+# nbr_patterns(ifile tag ofile) - does ofile contains the
+#                        the patterns given by ifile's tags
+#                        the right number of time?
+nbr_patterns()
+{
+	ifile="$1"
+	patt="$2"
+	ofile="$3"
+	grep "$patt-[0-9][0-9]*-times:" "$ifile" | \
+	sed -e "s/^.*$patt-\([0-9][0-9]*\)-times: *\(.*\)/\1 \2/" | \
+	while read nbr pat; do
+		n=$(grep -s "$pat" "$ofile" | wc -l)
+		if [ "$n" -ne "$nbr" ]; then
+			return 1
+		fi
+	done
+
+	return $?
+}
+
+##
+# verbose(string) - prints string if we are in verbose mode
+verbose()
+{
+	[ "$V" -eq "1" ] && echo "        $1"
+	return 0
+}
+
+##
+# error(string[, die]) - prints an error and exits with value die if given
+error()
+{
+	[ "$quiet" -ne 1 ] && echo "error: $1"
+	[ -n "$2" ] && exit $2
+	return 0
+}
+
+do_usage()
+{
+echo "$prog_name - a tiny automatic testing script"
+echo "Usage: $prog_name [command] [command arguments]"
+echo
+echo "commands:"
+echo "    none                       runs the whole test suite"
+echo "    single file                runs the test in 'file'"
+echo "    format file [name [cmd]]   helps writing a new test case using cmd"
+echo
+echo "    help                       prints usage"
+}
+
+##
+# do_test(file) - tries to validate a test case
+#
+# it "parses" file, looking for check-* tags and tries to validate
+# the test against an expected result
+# returns:
+#	- 0 if the test passed,
+#	- 1 if it failed,
+#	- 2 if it is not a "test-suite" test.
+#	- 3 if the test is disabled.
+do_test()
+{
+	test_failed=0
+	file="$1"
+
+	get_tag_value $file
+
+	# can this test be handled by test-suite ?
+	# (it has to have a check-name key in it)
+	if [ "$check_name" = "" ]; then
+		echo "warning: test '$file' unhandled"
+		unhandled_tests=$(($unhandled_tests + 1))
+		return 2
+	fi
+	test_name="$check_name"
+
+	# does the test provide a specific command ?
+	if [ "$check_command" = "" ]; then
+		check_command="$defaut_command"
+	fi
+
+	# check for disabled commands
+	set -- $check_command
+	base_cmd=$1
+	for i in $disabled_cmds; do
+		if [ "$i" = "$base_cmd" ] ; then
+			disabled_tests=$(($disabled_tests + 1))
+			echo "     DISABLE $test_name ($file)"
+			return 3
+		fi
+	done
+
+	cmd=`eval echo $default_path/$check_command`
+
+	echo "     TEST    $test_name ($file)"
+
+	verbose "Using command       : $cmd"
+
+	# grab the expected exit value
+	expected_exit_value=$check_exit_value
+	verbose "Expecting exit value: $expected_exit_value"
+
+	# do we want a timeout?
+	if [ $check_timeout -ne 0 ]; then
+		cmd="timeout -k 1s $check_timeout $cmd"
+	fi
+
+	# grab the actual output & exit value
+	$cmd 1> $file.output.got 2> $file.error.got
+	actual_exit_value=$?
+
+	must_fail=$check_known_to_fail
+	quiet=0
+	[ $must_fail -eq 1 ] && [ $V -eq 0 ] && quiet=1
+	known_ko_tests=$(($known_ko_tests + $must_fail))
+
+	for stream in output error; do
+		eval ignore=\$check_${stream}_ignore
+		[ $ignore -eq 1 ] && continue
+
+		# grab the expected output
+		sed -n "/check-$stream-start/,/check-$stream-end/p" $file \
+		| grep -v check-$stream > "$file".$stream.expected
+
+		diff -u "$file".$stream.expected "$file".$stream.got > "$file".$stream.diff
+		if [ "$?" -ne "0" ]; then
+			error "actual $stream text does not match expected $stream text."
+			error  "see $file.$stream.* for further investigation."
+			[ $quiet -ne 1 ] && cat "$file".$stream.diff
+			test_failed=1
+		fi
+	done
+
+	if [ "$actual_exit_value" -ne "$expected_exit_value" ]; then
+		error "Actual exit value does not match the expected one."
+		error "expected $expected_exit_value, got $actual_exit_value."
+		test_failed=1
+	fi
+
+	# verify the 'check-output-contains/excludes' tags
+	if [ $check_output_contains -eq 1 ]; then
+		has_each_patterns "$file" 'check-output-contains' $file.output.got
+		if [ "$?" -ne "0" ]; then
+			error "Actual output doesn't contain some of the expected patterns."
+			test_failed=1
+		fi
+	fi
+	if [ $check_output_excludes -eq 1 ]; then
+		has_none_patterns "$file" 'check-output-excludes' $file.output.got
+		if [ "$?" -ne "0" ]; then
+			error "Actual output contains some patterns which are not expected."
+			test_failed=1
+		fi
+	fi
+	if [ $check_output_pattern -eq 1 ]; then
+		# verify the 'check-output-pattern-X-times' tags
+		nbr_patterns "$file" 'check-output-pattern' $file.output.got
+		if [ "$?" -ne "0" ]; then
+			error "Actual output doesn't contain the pattern the expected number."
+			test_failed=1
+		fi
+	fi
+
+	[ "$test_failed" -eq "$must_fail" ] || failed=1
+
+	if [ "$must_fail" -eq "1" ]; then
+		if [ "$test_failed" -eq "1" ]; then
+			echo "info: test '$file' is known to fail"
+		else
+			echo "error: test '$file' is known to fail but succeed!"
+			test_failed=1
+		fi
+	fi
+
+	if [ "$test_failed" -eq "1" ]; then
+		ko_tests=$(($ko_tests + 1))
+	else
+		ok_tests=$(($ok_tests + 1))
+		rm -f $file.{error,output}.{expected,got,diff}
+	fi
+	return $test_failed
+}
+
+do_test_suite()
+{
+	for i in $tests_list; do
+		do_test "$i"
+	done
+
+	# prints some numbers
+	tests_nr=$(($ok_tests + $ko_tests))
+	echo -n "Out of $tests_nr tests, $ok_tests passed, $ko_tests failed"
+	echo " ($known_ko_tests of them are known to fail)"
+	if [ "$unhandled_tests" -ne "0" ]; then
+		echo "$unhandled_tests tests could not be handled by $prog_name"
+	fi
+	if [ "$disabled_tests" -ne "0" ]; then
+		echo "$disabled_tests tests were disabled"
+	fi
+}
+
+##
+# do_format(file[, name[, cmd]]) - helps a test writer to format test-suite tags
+do_format()
+{
+	if [ -z "$2" ]; then
+		fname="$1"
+		fcmd=$default_cmd
+	elif [ -z "$3" ]; then
+		fname="$2"
+		fcmd=$default_cmd
+	else
+		fname="$2"
+		fcmd="$3"
+	fi
+	file="$1"
+	cmd=`eval echo $default_path/$fcmd`
+	$cmd 1> $file.output.got 2> $file.error.got
+	fexit_value=$?
+	cat <<_EOF
+/*
+ * check-name: $fname
+_EOF
+	if [ "$fcmd" != "$default_cmd" ]; then
+		echo " * check-command: $fcmd"
+	fi
+	if [ "$fexit_value" -ne "0" ]; then
+		echo " * check-exit-value: $fexit_value"
+	fi
+	for stream in output error; do
+		if [ -s "$file.$stream.got" ]; then
+			echo " *"
+			echo " * check-$stream-start"
+			cat "$file.$stream.got"
+			echo " * check-$stream-end"
+		fi
+	done
+	echo " */"
+	return 0
+}
+
+##
+# arg_file(filename) - checks if filename exists
+arg_file()
+{
+	[ -z "$1" ] && {
+		do_usage
+		exit 1
+	}
+	[ -e "$1" ] || {
+		error "Can't open file $1"
+		exit 1
+	}
+	return 0
+}
+
+case "$1" in
+	'')
+		do_test_suite
+		;;
+	single)
+		arg_file "$2"
+		do_test "$2"
+		case "$?" in
+			0) echo "$2 passed !";;
+			1) echo "$2 failed !";;
+			2) echo "$2 can't be handled by $prog_name";;
+		esac
+		;;
+	format)
+		arg_file "$2"
+		do_format "$2" "$3" "$4"
+		;;
+	help | *)
+		do_usage
+		exit 1
+		;;
+esac
+
+exit $failed
+
--- /dev/null	Fri Dec 21 15:01:15 2018
+++ new/usr/src/tools/smatch/src/validation/testsuite-selfcheck1.c	Fri Dec 21 15:01:15 2018
@@ -0,0 +1,10 @@
+good
+
+/*
+ * check-name: selfcheck1
+ * check-command: sparse -E $file
+ * check-output-ignore
+ *
+ * check-output-contains: good
+ * check-output-excludes: evil
+ */
--- /dev/null	Fri Dec 21 15:01:15 2018
+++ new/usr/src/tools/smatch/src/validation/testsuite-selfcheck2.c	Fri Dec 21 15:01:15 2018
@@ -0,0 +1,10 @@
+evil
+
+/*
+ * check-name: selfcheck2
+ * check-command: sparse -E $file
+ * check-output-ignore
+ * check-known-to-fail
+ *
+ * check-output-contains: good
+ */
--- /dev/null	Fri Dec 21 15:01:16 2018
+++ new/usr/src/tools/smatch/src/validation/testsuite-selfcheck3.c	Fri Dec 21 15:01:16 2018
@@ -0,0 +1,10 @@
+evil
+
+/*
+ * check-name: selfcheck3
+ * check-command: sparse -E $file
+ * check-output-ignore
+ * check-known-to-fail
+ *
+ * check-output-excludes: evil
+ */
--- /dev/null	Fri Dec 21 15:01:16 2018
+++ new/usr/src/tools/smatch/src/validation/transparent-union.c	Fri Dec 21 15:01:16 2018
@@ -0,0 +1,25 @@
+struct a {
+	int field;
+};
+struct b {
+	int field;
+};
+
+typedef union {
+	struct a *a;
+	struct b *b;
+} transparent_arg __attribute__((__transparent_union__));
+
+static void foo(transparent_arg arg)
+{
+}
+
+static void bar(void)
+{
+	struct b arg = { 0 };
+	foo((struct a *) &arg);
+}
+
+/*
+ * check-name: Transparent union attribute.
+ */
--- /dev/null	Fri Dec 21 15:01:16 2018
+++ new/usr/src/tools/smatch/src/validation/type-attribute-align.c	Fri Dec 21 15:01:16 2018
@@ -0,0 +1,19 @@
+#define	__aligned(N)	__attribute__((aligned(N)))
+#define alignof(X)	__alignof__(X)
+
+struct s {
+	short a, b, c;
+} __aligned(2*sizeof(short));
+
+static int fs(void) { return  sizeof(struct s); }
+static int fa(void) { return alignof(struct s); }
+
+void main(void)
+{
+	_Static_assert( sizeof(struct s) == 4 * sizeof(short), "size");
+	_Static_assert(alignof(struct s) == 2 * sizeof(short), "alignment");
+}
+
+/*
+ * check-name: type-attribute-align
+ */
--- /dev/null	Fri Dec 21 15:01:16 2018
+++ new/usr/src/tools/smatch/src/validation/type-attribute-as.c	Fri Dec 21 15:01:16 2018
@@ -0,0 +1,33 @@
+#define	__user		__attribute__((address_space(1)))
+
+struct s {
+	int i;
+} __user;
+
+
+extern void use0(void *);
+extern void use1(void __user *);
+
+void main(void)
+{
+	struct s s;
+	int i;
+
+	use0(&s);	// KO
+	use0(&i);	// OK
+	use1(&s);	// OK
+	use1(&i);	// KO
+}
+
+/*
+ * check-name: type-attribute-as
+ *
+ * check-error-start
+type-attribute-as.c:16:15: warning: incorrect type in argument 1 (different address spaces)
+type-attribute-as.c:16:15:    expected void *<noident>
+type-attribute-as.c:16:15:    got struct s <asn:1>*<noident>
+type-attribute-as.c:19:15: warning: incorrect type in argument 1 (different address spaces)
+type-attribute-as.c:19:15:    expected void <asn:1>*<noident>
+type-attribute-as.c:19:15:    got int *<noident>
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:01:16 2018
+++ new/usr/src/tools/smatch/src/validation/type-attribute-mod.c	Fri Dec 21 15:01:16 2018
@@ -0,0 +1,21 @@
+#define	__noderef	__attribute__((noderef))
+
+struct s {
+	int i;
+} __noderef;
+
+
+void main(void)
+{
+	struct s s;
+
+	s.i = 0;
+}
+
+/*
+ * check-name: type-attribute-mod
+ *
+ * check-error-start
+type-attribute-mod.c:12:9: warning: dereference of noderef expression
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:01:16 2018
+++ new/usr/src/tools/smatch/src/validation/type1.c	Fri Dec 21 15:01:16 2018
@@ -0,0 +1,27 @@
+/*
+ * Sparse used to get this wrong.
+ *
+ * When evaluating the argument to the inline function for the array, Sparse
+ * didn't properly demote the "char []" to a "char *", but instead it would
+ * follow the dereference and get a "struct hello".
+ *
+ * Which made no sense at all.
+ */
+
+static inline int deref(const char *s)
+{
+	return *s;
+}
+
+struct hello {
+	char array[10];
+};
+
+static int test(struct hello *arg)
+{
+	return deref(arg->array);
+}
+
+/*
+ * check-name: "char []" to "char *" demotion
+ */
--- /dev/null	Fri Dec 21 15:01:16 2018
+++ new/usr/src/tools/smatch/src/validation/typedef_shadow.c	Fri Dec 21 15:01:16 2018
@@ -0,0 +1,13 @@
+typedef int T;
+static void f(int T)
+{
+	static T a;
+}
+/*
+ * check-name: typedef shadowing
+ * check-error-start:
+typedef_shadow.c:4:16: warning: 'T' has implicit type
+typedef_shadow.c:4:18: error: Expected ; at end of declaration
+typedef_shadow.c:4:18: error: got a
+ * check-error-end:
+ */
--- /dev/null	Fri Dec 21 15:01:16 2018
+++ new/usr/src/tools/smatch/src/validation/typeof-addresspace.c	Fri Dec 21 15:01:16 2018
@@ -0,0 +1,20 @@
+#define	__as		__attribute__((address_space(1)))
+
+static void test_as(void)
+{
+	int __as obj, *ptr;
+	typeof(obj) var = obj;
+	typeof(ptr) ptr2 = ptr;
+	typeof(*ptr) var2 = obj;
+	typeof(*ptr) *ptr3 = ptr;	/* check-should-pass */
+	typeof(obj) *ptr4 = ptr;	/* check-should-pass */
+	obj = obj;
+	ptr = ptr;
+	ptr = &obj;
+	obj = *ptr;
+}
+
+/*
+ * check-name: typeof-addresspace.c
+ * check-known-to-fail
+ */
--- /dev/null	Fri Dec 21 15:01:16 2018
+++ new/usr/src/tools/smatch/src/validation/typeof-attribute.c	Fri Dec 21 15:01:16 2018
@@ -0,0 +1,16 @@
+#define __percpu __attribute__((noderef, address_space(3)))
+
+/* Turn v back into a normal var. */
+#define convert(v) \
+       (*(typeof(v) __attribute__((address_space(0), force)) *)(&v))
+
+int main(int argc, char *argv)
+{
+       unsigned int __percpu x;
+
+       convert(x) = 0;
+       return 0;
+}
+/*
+ * check-name: Rusty Russell's typeof attribute casting.
+ */
--- /dev/null	Fri Dec 21 15:01:16 2018
+++ new/usr/src/tools/smatch/src/validation/typeof-mods.c	Fri Dec 21 15:01:16 2018
@@ -0,0 +1,108 @@
+#define	__noderef	__attribute__((noderef))
+#define	__bitwise	__attribute__((bitwise))
+#define	__nocast	__attribute__((nocast))
+#define	__safe		__attribute__((safe))
+
+static void test_spec(void)
+{
+	unsigned int obj, *ptr;
+	typeof(obj) var = obj;
+	typeof(ptr) ptr2 = ptr;
+	typeof(*ptr) var2 = obj;
+	typeof(*ptr) *ptr3 = ptr;
+	typeof(obj) *ptr4 = ptr;
+	obj = obj;
+	ptr = ptr;
+	ptr = &obj;
+	obj = *ptr;
+}
+
+static void test_const(void)
+{
+	const int obj, *ptr;
+	typeof(obj) var = obj;
+	typeof(ptr) ptr2 = ptr;
+	typeof(*ptr) var2 = obj;
+	typeof(*ptr) *ptr3 = ptr;
+	typeof(obj) *ptr4 = ptr;
+	ptr = ptr;
+	ptr = &obj;
+}
+
+static void test_volatile(void)
+{
+	volatile int obj, *ptr;
+	typeof(obj) var = obj;
+	typeof(ptr) ptr2 = ptr;
+	typeof(*ptr) var2 = obj;
+	typeof(*ptr) *ptr3 = ptr;
+	typeof(obj) *ptr4 = ptr;
+	obj = obj;
+	ptr = ptr;
+	ptr = &obj;
+	obj = *ptr;
+}
+
+static void test_bitwise(void)
+{
+	typedef int __bitwise type_t;
+	type_t obj, *ptr;
+	typeof(obj) var = obj;
+	typeof(ptr) ptr2 = ptr;
+	typeof(*ptr) var2 = obj;
+	typeof(*ptr) *ptr3 = ptr;
+	typeof(obj) *ptr4 = ptr;
+	obj = obj;
+	ptr = ptr;
+	ptr = &obj;
+	obj = *ptr;
+}
+
+static void test_static(void)
+{
+	static int obj, *ptr;
+	typeof(obj) var = obj;
+	typeof(ptr) ptr2 = ptr;
+	typeof(*ptr) var2 = obj;
+	typeof(*ptr) *ptr3 = ptr;
+	typeof(obj) *ptr4 = ptr;
+	obj = obj;
+	ptr = ptr;
+	ptr = &obj;
+	obj = *ptr;
+}
+
+static void test_tls(void)
+{
+	__thread int obj, *ptr;
+	typeof(obj) var = obj;
+	typeof(ptr) ptr2 = ptr;
+	typeof(*ptr) var2 = obj;
+	typeof(*ptr) *ptr3 = ptr;
+	typeof(obj) *ptr4 = ptr;
+	obj = obj;
+	ptr = ptr;
+	ptr = &obj;
+	obj = *ptr;
+}
+
+static void test_nocast(void)
+{
+	int __nocast obj, *ptr;
+	typeof(obj) var = obj;
+	typeof(ptr) ptr2 = ptr;
+	typeof(*ptr) var2 = obj;
+	typeof(*ptr) *ptr3 = ptr;
+	typeof(obj) *ptr4 = ptr;
+	obj = obj;
+	ptr = ptr;
+	ptr = &obj;
+	obj = *ptr;
+}
+
+/*
+ * check-name: typeof-mods
+ *
+ * check-error-start
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:01:16 2018
+++ new/usr/src/tools/smatch/src/validation/typeof-noderef.c	Fri Dec 21 15:01:16 2018
@@ -0,0 +1,19 @@
+#define	__noderef	__attribute__((noderef))
+
+static void test_noderef(void)
+{
+	int __noderef obj, *ptr;
+	typeof(ptr) ptr2 = ptr;
+	typeof(*ptr) *ptr3 = ptr;
+	typeof(obj) *ptr4 = ptr;
+	ptr = ptr;
+	ptr = &obj;
+}
+
+/*
+ * check-name: typeof-noderef
+ * check-known-to-fail
+ *
+ * check-error-start
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:01:16 2018
+++ new/usr/src/tools/smatch/src/validation/typeof-safe.c	Fri Dec 21 15:01:16 2018
@@ -0,0 +1,23 @@
+#define	__safe		__attribute__((safe))
+
+static void test_safe(void)
+{
+	int __safe obj, *ptr;
+	typeof(obj) var = obj;
+	typeof(ptr) ptr2 = ptr;
+	typeof(*ptr) var2 = obj;
+	typeof(*ptr) *ptr3 = ptr;
+	typeof(obj) *ptr4 = ptr;
+	obj = obj;
+	ptr = ptr;
+	ptr = &obj;
+	obj = *ptr;
+}
+
+/*
+ * check-name: typeof-safe
+ * check-known-to-fail
+ *
+ * check-error-start
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:01:17 2018
+++ new/usr/src/tools/smatch/src/validation/typesign.c	Fri Dec 21 15:01:17 2018
@@ -0,0 +1,61 @@
+static unsigned int * s_to_u_return(signed int *sp)
+{
+	return sp;
+}
+
+static signed int * u_to_s_return(unsigned int *up)
+{
+	return up;
+}
+
+static unsigned int * s_to_u_init(signed int *sp)
+{
+	unsigned int *up = sp;
+	return up;
+}
+
+static signed int * u_to_s_init(unsigned int *up)
+{
+	signed int *sp = up;
+	return sp;
+}
+
+static unsigned int * s_to_u_assign(signed int *sp)
+{
+	unsigned int *up;
+	up = sp;
+	return up;
+}
+
+static signed int * u_to_s_assign(unsigned int *up)
+{
+	signed int *sp;
+	sp = up;
+	return sp;
+}
+
+/*
+ * check-name: -Wtypesign
+ * check-command: sparse -Wtypesign $file
+ *
+ * check-error-start
+typesign.c:3:16: warning: incorrect type in return expression (different signedness)
+typesign.c:3:16:    expected unsigned int *
+typesign.c:3:16:    got signed int *sp
+typesign.c:8:16: warning: incorrect type in return expression (different signedness)
+typesign.c:8:16:    expected signed int *
+typesign.c:8:16:    got unsigned int *up
+typesign.c:13:28: warning: incorrect type in initializer (different signedness)
+typesign.c:13:28:    expected unsigned int *up
+typesign.c:13:28:    got signed int *sp
+typesign.c:19:26: warning: incorrect type in initializer (different signedness)
+typesign.c:19:26:    expected signed int *sp
+typesign.c:19:26:    got unsigned int *up
+typesign.c:26:12: warning: incorrect type in assignment (different signedness)
+typesign.c:26:12:    expected unsigned int *up
+typesign.c:26:12:    got signed int *sp
+typesign.c:33:12: warning: incorrect type in assignment (different signedness)
+typesign.c:33:12:    expected signed int *sp
+typesign.c:33:12:    got unsigned int *up
+ * check-error-end
+ */
--- /dev/null	Fri Dec 21 15:01:17 2018
+++ new/usr/src/tools/smatch/src/validation/varargs1.c	Fri Dec 21 15:01:17 2018
@@ -0,0 +1,8 @@
+extern int foo (const char *, ...);
+static void sparse_error(const char err[])
+{
+  foo("%s\n",err);
+}
+/*
+ * check-name: Varargs bogus warning regression test #1
+ */
--- /dev/null	Fri Dec 21 15:01:17 2018
+++ new/usr/src/tools/smatch/src/validation/wide.c	Fri Dec 21 15:01:17 2018
@@ -0,0 +1,9 @@
+static char c = L'\x41';
+static int n = 1/(0x41 - L'\x41');
+/*
+ * check-name: wide character constants
+ *
+ * check-error-start
+wide.c:2:17: warning: division by zero
+ * check-error-end
+ */
--- old/usr/src/ucbcmd/rusage/Makefile	Fri Dec 21 15:01:17 2018
+++ new/usr/src/ucbcmd/rusage/Makefile	Fri Dec 21 15:01:17 2018
@@ -22,6 +22,7 @@
 # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
+# Copyright (c) 2018, Joyent, Inc.
 
 PROG= rusage
 
@@ -31,11 +32,14 @@
 
 FILEMODE=	755
 
-LDLIBS +=  -L$(ROOT)/usr/ucblib -R /usr/ucblib -lucb
+LDLIBS +=  -L$(ROOT)/usr/ucblib -R/usr/ucblib -lucb
 
 CPPFLAGS = -I$(INC1) $(CPPFLAGS.master)
 CERRWARN += -_gcc=-Wno-implicit-function-declaration
 
+# missing prototypes
+SMATCH=off
+
 .KEEP_STATE:
 
 all: $(PROG)
--- old/usr/src/ucbcmd/tset/Makefile	Fri Dec 21 15:01:17 2018
+++ new/usr/src/ucbcmd/tset/Makefile	Fri Dec 21 15:01:17 2018
@@ -22,6 +22,7 @@
 # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
+# Copyright (c) 2018, Joyent, Inc.
 
 PROG= tset
 
@@ -29,7 +30,7 @@
 
 FILEMODE=	755
 
-LDLIBS =  -L$(ROOT)/usr/ucblib -R /usr/ucblib $(LDLIBS.cmd) -lucb -ltermcap
+LDLIBS =  -L$(ROOT)/usr/ucblib -R/usr/ucblib $(LDLIBS.cmd) -lucb -ltermcap
 
 CPPFLAGS = -I$(SRC)/ucbhead $(CPPFLAGS.master)
 CERRWARN += -_gcc=-Wno-implicit-function-declaration
@@ -37,11 +38,14 @@
 CERRWARN += -_gcc=-Wno-unused-variable
 CERRWARN += -_gcc=-Wno-uninitialized
 
+# missing prototypes
+SMATCH=off
+
 ROOTSYMLINK= $(ROOTBIN)/reset
 
 .KEEP_STATE:
 
-all: $(PROG) 
+all: $(PROG)
 
 $(PROG):	$(PROG).c
 	$(LINK.c) -o $@ $(PROG).c $(LDLIBS)
--- old/usr/src/ucbcmd/vipw/Makefile	Fri Dec 21 15:01:17 2018
+++ new/usr/src/ucbcmd/vipw/Makefile	Fri Dec 21 15:01:17 2018
@@ -22,6 +22,7 @@
 # Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 # Use is subject to license terms.
 #
+# Copyright (c) 2018, Joyent, Inc.
 
 PROG= vipw
 
@@ -29,15 +30,18 @@
 
 INC1 = $(SRC)/ucbhead
 
-LDLIBS =  -L$(ROOT)/usr/ucblib -R /usr/ucblib $(LDLIBS.cmd) -lucb
+LDLIBS =  -L$(ROOT)/usr/ucblib -R/usr/ucblib $(LDLIBS.cmd) -lucb
 
 CPPFLAGS = -I$(INC1) $(CPPFLAGS.master)
 CERRWARN += -_gcc=-Wno-implicit-function-declaration
 CERRWARN += -_gcc=-Wno-unused-variable
 
+# missing prototypes
+SMATCH=off
+
 .KEEP_STATE:
 
-all: $(PROG) 
+all: $(PROG)
 
 $(PROG):	$(PROG).c
 	$(LINK.c) -o $@ $(PROG).c $(LDLIBS)
--- old/usr/src/uts/Makefile.uts	Fri Dec 21 15:01:17 2018
+++ new/usr/src/uts/Makefile.uts	Fri Dec 21 15:01:17 2018
@@ -25,6 +25,7 @@
 # Copyright (c) 2011 by Delphix. All rights reserved.
 # Copyright (c) 2013 Andrew Stormont.  All rights reserved.
 # Copyright 2016 Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
+# Copyright (c) 2018, Joyent, Inc.
 #
 
 #
@@ -226,6 +227,15 @@
 $(RELEASE_BUILD)CERRWARN += -_gcc=-Wno-unused
 $(RELEASE_BUILD)CERRWARN += -_gcc=-Wno-empty-body
 
+CERRWARN += -_smatch=-p=illumos_kernel
+include $(SRC)/Makefile.smatch
+
+#
+# Unfortunately, _IOWR() is regularly used with a third argument of 0,
+# so we have to disable all these smatch checks.
+#
+SMOFF += sizeof
+
 CSTD = $(CSTD_GNU99)
 
 CFLAGS_uts		=
--- old/usr/src/uts/intel/bnxe/Makefile	Fri Dec 21 15:01:17 2018
+++ new/usr/src/uts/intel/bnxe/Makefile	Fri Dec 21 15:01:17 2018
@@ -10,7 +10,7 @@
 #
 
 #
-# Copyright (c) 2014, Joyent, Inc.  All rights reserved.
+# Copyright (c) 2018, Joyent, Inc.
 #
 
 #
@@ -85,7 +85,6 @@
 		   -I$(SRCDIR)
 
 LDFLAGS		+= -dy -r -Ndrv/ip -Nmisc/mac
-#CERRWARN	+= -_gcc=-Wno-old-style-declaration
 CERRWARN	+= -_gcc=-Wno-switch
 CERRWARN	+= -_gcc=-Wno-uninitialized
 CERRWARN	+= -_gcc=-Wno-parentheses
@@ -99,6 +98,9 @@
 CERRWARN	+= -_cc=-erroff=E_CONST_PROMOTED_UNSIGNED_LL
 CERRWARN	+= -_cc=-erroff=E_ENUM_VAL_OVERFLOWS_INT_MAX
 
+# a whole mess
+SMATCH=off
+
 LINTTAGS	+= -erroff=E_FUNC_RET_ALWAYS_IGNOR2
 LINTTAGS	+= -erroff=E_FUNC_RET_MAYBE_IGNORED2
 LINTTAGS	+= -erroff=E_STATIC_UNUSED
